Parquet 출력 형식은 Date 및 DateTime 컬럼을 원시 숫자로 기록하는 대신 Parquet에서 지원하는 날짜/시간 타입으로 변환합니다. DateTime은 DateTime64(3)로 변환됩니다(기존: UInt32). output_format_parquet_datetime_as_uint32 설정을 사용하면 이전 동작으로 되돌릴 수 있습니다. Date는 Date32로 변환됩니다(기존: UInt16). #70950 (Michael Kolupaev).
기본적으로 ORDER BY 및 less/greater/equal/etc와 같은 비교 함수에서 JSON/Object/AggregateFunction 등의 비교 가능한 타입을 허용하지 않습니다. #73276 (Pavel Kruglov).
JSONEachRowWithProgress는 진행 상황이 업데이트될 때마다 그 내용을 출력합니다. 이전 버전에서는 결과의 각 블록이 끝난 뒤에만 진행 상황이 표시되어 사실상 쓸모가 없었습니다. 진행 상황이 표시되는 방식을 변경하여, 값이 0인 항목은 표시하지 않습니다. 진행 상황은 매우 자주 발생하더라도 계속 전송된다는 점을 염두에 두어야 합니다. 이는 상당한 양의 트래픽을 유발할 수 있습니다. 출력이 압축되는 경우에는 진행 상황이 플러시(flush)되지 않는다는 점도 유의해야 합니다. 이로써 #70800이(가) 해결됩니다. #73834 (Alexey Milovidov).
mysql 딕셔너리 소스는 더 이상 SHOW TABLE STATUS 쿼리를 실행하지 않습니다. 이는 InnoDB 테이블과 최신 MySQL 버전들에서는 아무런 유용한 값을 제공하지 않기 때문입니다. 이 변경으로 #72636이 해결됩니다. 이 변경은 하위 호환성을 유지하지만, 사용자가 이를 인지할 수 있도록 이 범주에 포함되었습니다. #73914 (Alexey Milovidov).
Merge 테이블은 컬럼의 합집합을 사용하고 공통 타입을 도출하여 하위 테이블의 구조를 통합합니다. 이 변경으로 #64864가 해결됩니다. 또한 #35307도 해결됩니다. 특정 경우에는 이 변경으로 인해 이전 버전과의 호환성이 깨질 수 있습니다. 예를 들어, 테이블 간에 공통 타입은 없지만 첫 번째 테이블의 타입으로의 변환은 여전히 가능한 경우가 있습니다. 이는 UInt64와 Int64, 또는 임의의 숫자 타입과 String의 경우와 같습니다. 이전 동작으로 되돌리고 싶다면 merge_table_max_tables_to_look_for_schema_inference를 1로 설정하거나 compatibility를 24.12 이하로 설정하십시오. #73956 (Alexey Milovidov).
CHECK TABLE 쿼리는 이제 별도의 CHECK 권한이 필요합니다. 이전 버전에서는 이러한 쿼리를 실행하기 위해 SHOW TABLES 권한만으로도 충분했습니다. 그러나 CHECK TABLE 쿼리는 무거울 수 있으며, 통상적인 SELECT 쿼리에 적용되는 쿼리 복잡도 제한이 여기에 적용되지 않습니다. 이로 인해 서비스 거부(DoS) 가능성이 생길 수 있었습니다. #74471 (Alexey Milovidov).
allow_materialized_view_with_bad_select가 false인 경우, materialized view의 모든 컬럼이 대상 테이블의 컬럼과 일치하는지 검사합니다. #74481 (Christoph Wurm).
이제 h3ToGeo() 함수는 결과를 (lat, lon) 순서로 반환합니다(기하 함수의 표준 순서입니다). 기존의 결과 순서 (lon, lat)를 유지하려는 사용자는 설정값 h3togeo_lon_lat_result_order = true를 설정할 수 있습니다. #74719 (Manish Gill).
JSONCompactEachRowWithProgress 및 JSONCompactStringsEachRowWithProgress 포맷이 추가되었습니다. 이는 #69989의 후속 작업입니다. JSONCompactWithNames 및 JSONCompactWithNamesAndTypes는 더 이상 「totals」를 출력하지 않습니다. 이는 구현상의 실수였던 것으로 보입니다. #75037 (Alexey Milovidov).
format_alter_operations_with_parentheses 기본값을 true로 변경하여 ALTER 명령 목록의 해석이 모호하지 않도록 했습니다(https://github.com/ClickHouse/ClickHouse/pull/59532 참조). 이 변경으로 인해 24.3 이전 버전 클러스터와의 복제가 동작하지 않습니다. 이전 릴리스를 사용하는 클러스터를 업그레이드하는 경우, 서버 설정에서 해당 설정을 비활성화하거나 먼저 24.3으로 업그레이드하십시오. #75302 (Raúl Marín).
analyzer가 비활성화된 경우에는 compatibility 설정과 관계없이 기본값으로 병렬 레플리카 기능이 비활성화됩니다. 이 동작은 parallel_replicas_only_with_analyzer를 false로 명시적으로 설정하여 변경할 수 있습니다. #77115 (Igor Nikonov).
역직렬화된 skipping 인덱스 그래뉼용 인메모리 캐시가 추가되었습니다. 이를 통해 skipping 인덱스를 사용하는 반복 쿼리가 더 빠르게 실행됩니다. 새 캐시의 크기는 서버 설정 skipping_index_cache_size 및 skipping_index_cache_max_entries로 제어됩니다. 이 캐시를 도입한 원래 동기는 벡터 유사도 인덱스였으며, 이제 해당 인덱스의 성능이 크게 향상되었습니다. #70102 (Robert Schulze).
Userspace Page Cache의 새로운 구현으로, OS 페이지 캐시에 의존하지 않고 프로세스 내 메모리에서 데이터를 캐시할 수 있습니다. 로컬 파일시스템 캐시 없이 원격 가상 파일시스템에 데이터가 저장되어 있는 경우에 유용합니다. #70509 (Michael Kolupaev).
MergeTree에서 관리하는 컬럼에 대해, 기본값으로 min-max(스키핑) 인덱스를 생성할 수 있는 기능이 추가되었습니다. 숫자 컬럼에는 enable_minmax_index_for_all_numeric_columns, 문자열 컬럼에는 enable_minmax_index_for_all_string_columns 설정을 사용합니다. 현재는 두 설정 모두 비활성화되어 있으므로 아직 동작상의 변화는 없습니다. #72090 (Smita Kulkarni).
패턴 내에서 가장 긴 이벤트 체인에 대해 일치하는 이벤트의 타임스탬프를 반환하는 집계 함수 sequenceMatchEvents가 추가되었습니다. #72349 (UnamedRus).
SELECT 및 VIEW SQL 문에서 이제 별칭을 지원합니다. 예를 들어 SELECT b FROM (SELECT number, number*2 FROM numbers(2)) AS x (a, b);와 같습니다. 이를 통해 TPC-H 쿼리 15를 수정 없이 실행할 수 있습니다. #72480 (Yarik Briukhovetskyi).
새로운 설정 enable_adaptive_memory_spill_scheduler가 추가되어, 동일한 쿼리에서 여러 개의 grace 조인을 사용할 때 이들의 전체 메모리 사용량을 모니터링하고, MEMORY_LIMIT_EXCEEDED를 방지하기 위해 외부 스토리지로 데이터를 스필(spill)하도록 적응적으로 트리거할 수 있게 합니다. #72728 (lgbo).
min_age_to_force_merge_seconds와 min_age_to_force_merge_on_partition_only가 모두 활성화된 경우, 파트 병합 작업은 최대 바이트 제한을 무시합니다. #73656 (Kai Zhu).
Apache Arrow/Parquet/ORC에서 HALF_FLOAT 값을 읽을 수 있도록 지원합니다(값은 Float32로 읽힙니다). 이로써 #72960가 해결됩니다. IEEE-754 half float은 BFloat16과 동일하지 않다는 점에 유의하십시오. #73835를 해결합니다. #73836 (Alexey Milovidov).
system.trace_log 테이블에는 심볼화된 스택 트레이스를 저장하는 두 개의 새로운 컬럼인 symbols와 lines가 추가됩니다. 이를 통해 프로파일링 정보의 수집과 내보내기를 쉽게 수행할 수 있습니다. 이 기능은 trace_log 내부의 서버 설정 값 symbolize에 의해 제어되며, 기본적으로 활성화되어 있습니다. #73896 (Alexey Milovidov).
query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryN 구문을 추가합니다. 이는 서브쿼리 {query1, query2, ... queryN}가 서로 병렬로 실행될 수 있음을 의미하며, 이렇게 하는 것이 바람직합니다. #73983 (Vitaly Baranov).
이제 Play UI는 쿼리가 실행되는 동안 진행률 표시줄을 제공합니다. 이를 통해 쿼리를 취소할 수 있습니다. 전체 레코드 수와 속도에 대한 상세 정보를 표시합니다. 데이터가 도착하는 즉시 테이블을 점진적으로 렌더링할 수 있습니다. HTTP 압축을 활성화했습니다. 테이블 렌더링 속도가 더 빨라졌습니다. 테이블 헤더가 상단에 고정되도록(sticky) 변경되었습니다. 셀을 선택하고 방향 키로 이동할 수 있습니다. 선택된 셀의 윤곽선(outline) 때문에 셀이 더 작아지는 문제를 수정했습니다. 이제 셀은 마우스를 올렸을 때가 아니라 선택되었을 때만 확장됩니다. 들어오는 데이터를 언제까지 렌더링할지는 서버 측이 아니라 클라이언트에서 결정합니다. 숫자의 자릿수 구분을 강조하여 표시합니다. 전체 디자인을 새로 다듬어 보다 대담한 스타일로 변경했습니다. 서버에 접속 가능한지와 자격 증명 정보의 정확성을 확인하고, 서버 버전과 가동 시간(uptime)을 표시합니다. 클라우드 아이콘은 Safari를 포함해 모든 글꼴에서 윤곽선으로 표시됩니다. 중첩 데이터 타입 안의 큰 정수는 더 잘 렌더링됩니다. inf/nan을 올바르게 표시합니다. 컬럼 헤더에 마우스를 올리면 데이터 타입을 표시합니다. #74204 (Alexey Milovidov).
MergeTree에서 관리하는 컬럼에 대해, 기본적으로 min-max(스키핑) 인덱스를 생성할 수 있는 기능이 추가되었습니다. 숫자 컬럼에는 add_minmax_index_for_numeric_columns, 문자열 컬럼에는 add_minmax_index_for_string_columns 설정을 사용합니다. 현재는 두 설정이 모두 비활성화되어 있으므로, 아직 동작에는 아무런 변경 사항이 없습니다. #74266 (Smita Kulkarni).
script_query_number 및 script_line_number 필드를 system.query_log, 네이티브 프로토콜의 ClientInfo, 그리고 서버 로그에 추가합니다. 이를 통해 #67542가 해결됩니다. 이 기능을 #68133에서 먼저 제안하고 시작한 pinsvin00에게 감사드립니다. #74477 (Alexey Milovidov).
DateTime64에 대한 minus 연산자 지원을 추가하여 DateTime64 값 간의 뺄셈뿐만 아니라 DateTime 값과의 뺄셈도 가능하도록 합니다. #74482 (Li Yin).
ClickHouse 클라이언트 연결의 소스 IP 주소를 지정할 수 있도록 bind_host 설정을 추가합니다. #74741 (Todd Yocum).
SELECT 쿼리를 제출한 직후, 아직 완료되지 않은(백그라운드 프로세스에서 구체화되지 않은) 뮤테이션을 즉시 적용할 수 있는 기능이 추가되었습니다. 이 기능은 apply_mutations_on_fly를 설정하여 활성화할 수 있습니다. #74877 (Anton Popov).
toStartOfInterval datetime 인수가 음수일 때 발생하던 일부 예기치 않은 동작을 수정했습니다. 이를 위해 거의 동일하게 동작하지만 Date32/DateTime64만 반환하는 새로운 함수 toStartOfIntervalAllowNegative를 구현했습니다. #74933 (Yarik Briukhovetskyi).
새 initialQueryStartTime 함수가 추가되었습니다. 이 함수는 현재 실행 중인 쿼리의 시작 시간을 반환합니다. 분산 쿼리에서는 모든 세그먼트에서 값이 동일합니다. #75087 (Roman Lomonosov).
데이터베이스 계층 없이 테이블을 ATTACH할 수 있는 기능을 추가하여 UUID hack을 피할 수 있습니다. #75788 (Azat Khuzhin).
동시 실행되는 쿼리 간에 CPU 슬롯을 어떻게 분배할지 제어하는 concurrent_threads_scheduler 서버 설정이 추가되었습니다. 이 설정은 round_robin(이전 동작) 또는 fair_round_robin으로 설정할 수 있으며, INSERT와 SELECT 간 CPU 분배가 불공정한 문제를 해결합니다. #75949 (Sergei Trifonov).
arraySymmetricDifference FUNCTION이 추가되었습니다. 이 FUNCTION은 여러 배열 인수에서 모든 인수에 공통으로 포함되지 않는 모든 요소를 반환합니다. 예: SELECT arraySymmetricDifference([1, 2], [2, 3])은 [1, 3]을 반환합니다. (issue #61673). #76231 (Filipp Abapolov).
역직렬화된 벡터 유사도 인덱스를 위한 메모리 내 캐시가 추가되었습니다. 이를 통해 반복적인 근사 최근접 이웃(ANN) 검색 쿼리가 더 빠르게 실행됩니다. 새 캐시의 크기는 서버 설정 vector_similarity_index_cache_size 및 vector_similarity_index_cache_max_entries로 제어됩니다. 이 기능은 이전 릴리스의 건너뛰기 인덱스 캐시 기능을 대체합니다. #77905 (Shankar Iyer).
반복적으로 사용되는 조건을 위한 쿼리 조건 캐시를 구현하여 쿼리 성능을 향상합니다. 조건을 만족하지 않는 데이터 구간의 범위를 메모리에 임시 인덱스로 저장합니다. 이후 쿼리는 이 인덱스를 사용합니다. #67768 이슈를 종료합니다. ### 사용자에게 노출되는 변경 사항에 대한 문서 항목입니다. #69236 (zhongyuankai).
NativeORCBlockInputFormat에 대해 비동기 I/O 프리페치(async io prefetch)를 지원하여 원격 I/O 지연(remote io latency)을 숨김으로써 전체 성능을 향상합니다. 제 테스트 케이스에서 속도 향상 비율은 최대 1.47배까지 도달했습니다. #70534 (李扬).
오른쪽 조인 테이블을 키별로 다시 범위 분할하여 grace hash join 성능을 개선합니다. #72237 (kevinyhzou).
materialize ttl에서 ttl_only_drop_parts 설정을 다시 적용하고, TTL 재계산에 필요한 컬럼만 읽어 해당 파트를 빈 파트로 교체하는 방식으로 삭제합니다. #72751 (Andrey Zvonov).
arrayROCAUC와 arrayAUCPR가 전체 곡선의 일부 구간의 면적을 계산할 수 있도록 하여, 대규모 데이터셋에 대한 계산을 병렬화할 수 있게 합니다. #72904 (Emmanuel).
indexHint 함수를 최적화했습니다. 이제 함수 indexHint의 인자로만 사용되는 컬럼은 테이블에서 읽어 오지 않습니다. #74314 (Anton Popov).
병렬 레플리카의 성능이 향상되었습니다. 병렬 레플리카 프로토콜과 관련이 없는 패킷을 쿼리 이니시에이터에서 역직렬화하는 작업은 이제 항상 파이프라인 스레드에서 수행됩니다. 이전에는 파이프라인 스케줄링을 담당하는 스레드에서 수행될 수 있었으며, 이로 인해 이니시에이터의 응답성이 떨어지고 파이프라인 실행이 지연될 수 있었습니다. #74398 (Igor Nikonov).
S3에 있는 Wide 파트에서 전체 JSON 컬럼을 읽는 성능을 개선합니다. 이는 서브 컬럼 접두사(prefix) 역직렬화를 위한 prefetch 추가, 역직렬화된 접두사(prefix) 캐시, 서브 컬럼 접두사(prefix)의 병렬 역직렬화를 통해 구현되었습니다. 이로 인해 SELECT data FROM table과 같은 쿼리에서 S3의 JSON 컬럼 읽기 성능이 4배, SELECT data FROM table LIMIT 10과 같은 쿼리에서는 약 10배까지 향상됩니다. #74827 (Pavel Kruglov).
plain_rewritable 메타데이터 파일은 작아서 큰 기본 버퍼가 필요하지 않습니다. 주어진 경로를 담을 수 있을 만큼만 적절히 크기를 조정한 쓰기 버퍼를 사용하여, 많은 활성 파트에서 메모리 활용도를 개선합니다. ### 사용자에게 노출되는 변경 사항에 대한 문서 항목입니다. #75758 (Julia Kartseva).
일부 상황(예: 빈 배열 컬럼)에서는 데이터 파트에 빈 파일이 포함될 수 있습니다. 테이블이 메타데이터와 객체 스토리지가 분리된 디스크에 존재하는 경우, 이러한 파일에 대해서는 빈 blob을 ObjectStorage에 기록하지 않고 메타데이터만 저장하도록 생략할 수 있습니다. #75860 (Alexander Gololobov).
동시성 제어로 인해 INSERT와 SELECT 간에 CPU 분배가 불공정해질 수 있음이 발견되었습니다. 모든 CPU 슬롯이 max_threads = 1인 INSERT에 (경쟁 없이) 무조건적으로 할당되고, 높은 max_threads 값을 가진 SELECT는 실제로 단일 스레드만 사용하게 되어 성능 저하가 발생하는 문제가 있었습니다. #75941 (Sergei Trifonov).
불필요한 널 허용 맵 할당을 피하기 위해 wrapInNullable에 단순한 최적화를 적용합니다. #76489 (李扬).
Decimal32/Decimal64/DateTime64에 대한 최솟값/최댓값 연산 성능을 개선합니다. #76570 (李扬).
파트 제거 시 캐시에서 데이터를 적극적으로 제거하여, 데이터 양이 더 적을 경우 캐시가 최대 크기까지 커지지 않도록 합니다. #76641 (Alexey Milovidov).
쿼리 컴파일(SETTING compile_expressions)이 이제 머신 유형을 고려하여 수행됩니다. 이를 통해 이러한 쿼리가 크게 빨라집니다. #76753 (Robert Schulze).
ConstantNode에서 Field 대신 ColumnPtr를 저장하여 새로운 analyzer 인프라의 성능을 향상합니다. #62245와 관련됩니다. #63198 (Dmitry Novik).
서버가 과부하 상태일 때 쿼리를 거부합니다. 결정은 대기 시간(OSCPUWaitMicroseconds)과 사용 시간(OSCPUVirtualTimeMicroseconds)의 비율에 따라 이루어집니다. 이 비율이 min_os_cpu_wait_time_ratio_to_throw와 max_os_cpu_wait_time_ratio_to_throw 사이에 있을 때, 일정 확률로 쿼리가 폐기됩니다(이는 쿼리 수준 설정입니다). #63206 (Alexey Katsman).
메모리 사용량을 줄이기 위해 블록을 가능한 한 빨리 삭제하도록 했습니다. #65647 (lgbo).
processors_profile_log 테이블에는 이제 30일 TTL이 적용된 기본 구성이 설정되었습니다. #66139 (Ilya Yatsishin).
DateTime64 데이터 타입의 컬럼에 bloom_filter 인덱스를 생성할 수 있게 되었습니다. #66416 (Yutong Xiao).
S3 요청에 대해 첫 바이트 읽기/쓰기 및 연결 시간을 추적할 수 있도록 지연 시간 버킷을 도입하여 활용합니다. 이렇게 하면 이후에 수집된 데이터를 사용하여 대략적인 퍼센타일을 계산하고 타임아웃 값을 조정할 수 있습니다. #69783 (Alexey Katsman).
Executable 스토리지에 전달되는 쿼리가 더 이상 단일 스레드에서의 실행으로 제한되지 않습니다. #70084 (yawnt).
MySQL 및 Postgres 딕셔너리 레플리카에 대한 연결을 백그라운드에서 재수립하여 해당 딕셔너리에 대한 요청이 지연되지 않도록 했습니다. #71101 (Yakov Olkhovskiy).
system.asynchronous_metrics에 메트릭 별칭(alias) 이름을 추가했습니다. #71164 (megao).
이제 갱신 가능 구체화 뷰(refreshable materialized view)의 갱신 작업이 system.query_log에 기록됩니다. #71333 (Michael Kolupaev).
Parquet 블룸 필터와 min/max 인덱스를 함께 평가하도록 했습니다. 이는 데이터 = [1, 2, 4, 5]인 경우 x = 3 or x > 5를 올바르게 지원하는 데 필요합니다. #71383 (Arthur Passos).
대화형 메트릭 기능 개선. 병렬 레플리카의 메트릭이 전체 표시되지 않던 문제를 수정합니다. 메트릭을 가장 최근 업데이트 순으로, 그다음 이름의 사전순으로 정렬해 표시합니다. 더 이상 갱신되지 않은 메트릭은 표시하지 않습니다. #71631 (Julia Kartseva).
과거에는 어떤 이유에서인지 ALTER TABLE MOVE PARTITION TO TABLE 쿼리가 전용 권한인 ALTER_MOVE_PARTITION이 아니라 SELECT 및 ALTER DELETE 권한을 확인했습니다. 이 PR은 이 접근 권한 유형을 사용하도록 변경합니다. 호환성을 위해 SELECT와 ALTER DELETE 권한이 부여된 경우 이 권한도 암묵적으로 부여되지만, 이 동작은 향후 릴리스에서 제거될 예정입니다. #16403를 해결합니다. #71632 (pufit).
JSON 출력 형식을 기본적으로 가독성이 높은 형식(pretty print)으로 출력하도록 변경했습니다. 이를 제어하기 위한 새로운 설정인 output_format_json_pretty_print를 추가하고 기본값으로 활성화했습니다. #72148 (Pavel Kruglov).
기본 사용자에게 비밀번호가 필요한 경우 브라우저에서 대화형으로 자격 증명을 요청합니다. 이전 버전에서는 서버가 HTTP 403을 반환했으나 이제는 HTTP 401을 반환합니다. #72198 (Alexey Milovidov).
이 PR은 CREATE_USER, ALTER_USER, DROP_USER, CREATE_ROLE, ALTER_ROLE, DROP_ROLE 접근 유형을 전역(global)에서 파라미터화(parameterized) 방식으로 변환합니다. 이는 이제 접근 관리용 권한 부여를 더 세밀하게 제어할 수 있음을 의미합니다. #72246 (pufit).
system.mutations에 latest_fail_error_code_name 컬럼을 추가합니다. 이 컬럼은 중단된 뮤테이션에 대한 새로운 메트릭을 도입하고, Cloud에서 발생한 오류를 그래프로 시각화하며, 선택적으로는 불필요한 알림이 적은 새로운 알림을 추가하는 데 필요합니다. #72398 (Miсhael Stetsyuk).
max_bytes_before_external_sort 제한이 전체 쿼리 메모리 사용량에 따라 달라지도록 변경되었습니다(이전에는 하나의 정렬 스레드에 대한 정렬 블록의 바이트 수를 의미했으나, 이제는 max_bytes_before_external_group_by와 동일한 의미를 가지며 모든 스레드를 포함한 전체 쿼리 메모리에 대한 총 한도입니다). 또한 디스크에 저장되는 블록 크기를 제어하기 위한 설정 항목 min_external_sort_block_bytes가 추가되었습니다. #72598 (Azat Khuzhin).
서버 설정 dictionaries_lazy_load 및 wait_dictionaries_load_at_startup를 system.server_settings에 추가했습니다. #72664 (Christoph Wurm).
BACKUP/RESTORE 쿼리의 일부로 지정할 수 있는 설정 목록에 max_backup_bandwidth 설정을 추가했습니다. #72665 (Christoph Wurm).
병렬 레플리카에서는 레플리카 선택을 개선하기 위해 레플리카 가용성에 대한 과거 정보를 사용했지만, 연결이 불가능할 때 해당 레플리카의 오류 횟수를 업데이트하지 않았습니다. 이 PR에서는 레플리카를 사용할 수 없을 때 오류 횟수가 업데이트되도록 수정했습니다. #72666 (zoomxi).
ReplicatedMergeTree 엔진에서 새로 생성되는 레플리카 파트의 로그 레벨을 낮춰, 복제 클러스터에서 생성되는 로그 양을 최소화했습니다. #72876 (mor-akamai).
많은 새로운 기능에서는 Iceberg 메타데이터와 관련된 코드의 캡슐화와 추상화를 개선할 필요가 있습니다. #72941 (Daniil Ivanik).
암시적 ENGINE 사용 및 엔진 설정과 쿼리 설정을 혼용하는 경우에도 SETTINGS를 지원합니다. #73120 (Raúl Marín).
optimize_on_insert가 활성화된 경우 파트를 레벨 1로 기록합니다. 이렇게 하면 새로 기록된 파트에 대해 FINAL이 포함된 쿼리에 여러 가지 최적화를 적용할 수 있습니다. #73132 (Anton Popov).
WHERE a<b AND b<c AND c<5와 같은 쿼리에 대해, 더 나은 필터링 성능을 위해 새로운 비교 조건(a<5 AND b<5)을 생성할 수 있습니다. #73164 (Shichao Jin).
논리합에서 공통 표현식 추출을 개선합니다. 모든 항(disjunct)에 공통 부분 표현식이 없더라도 결과 필터 표현식을 단순화할 수 있도록 합니다. #71537의 후속 작업입니다. #73271 (Dmitry Novik).
Storage S3(Azure)Queue에서 settings 없이 생성된 테이블에도 settings를 추가할 수 있도록 했습니다. #73283 (Kseniia Sumarokova).
ClickHouse-client에서는 쿼리를 종료하기 위해 Ctrl+D를 지원합니다. 세미콜론을 입력하고 Enter를 누르는 대신 Ctrl+D를 사용할 수 있습니다. 또한 단일 라인 모드에서는 Ctrl+D가 Enter처럼 동작하도록 했습니다. #73293 (Xiaozhe Yu).
least_greatest_legacy_null_behavior 설정(기본값: false)을 도입하여 least 및 greatest 함수가 NULL 인자를 처리하는 방식을 제어합니다. true인 경우 항상 NULL을 반환하고, false인 경우 NULL 인자를 무시합니다. #73344 (Robert Schulze).
ObjectStorageQueueMetadata 정리(cleanup) 스레드에서 Keeper 멀티 요청을 사용하도록 했습니다. #73357 (Antonio Andelic).
새로운 MongoDB 드라이버가 이제 기본 드라이버로 사용됩니다. 기존 드라이버를 계속 사용하려면 서버 SETTING use_legacy_mongodb_integration을 true로 설정하면 됩니다. #73359 (Robert Schulze).
ClickHouse가 cgroup 환경에서 실행될 때에도 시스템 부하, 프로세스 스케줄링, 메모리 등과 관련된 시스템 전역 비동기 메트릭을 계속 수집합니다. 이는 ClickHouse가 호스트에서 리소스를 많이 사용하는 유일한 프로세스일 때 유용한 신호를 제공할 수 있습니다. #73369 (Nikita Taranov).
스토리지 S3Queue에서 24.6 이전에 생성된 기존 정렬 테이블을 버킷이 있는 새로운 구조로 이전할 수 있도록 했습니다. #73467 (Kseniia Sumarokova).
수정자와 함께 정렬 규칙 로케일(collation locales)을 사용할 때 오류가 발생하던 회귀(regression) 문제를 수정했습니다. 예를 들어 SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shifted 쿼리가 이제 정상적으로 동작합니다. #73544 (Robert Schulze).
parseDateTime64 FUNCTION(및 그 변형)은 이제 1970년 이전 또는 2106년 이후의 입력 날짜에 대해서도 올바른 결과를 반환합니다. 예: SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS'). #73594 (zhanglistar).
터미널에서 가독성을 높이기 위해 Pretty 및 Vertical 포맷에서 후행 공백을 강조 표시합니다. 이는 output_format_pretty_highlight_trailing_spaces 설정으로 제어됩니다. 초기 구현은 #72996의 Braden Burns가 기여했습니다. #71590 이슈를 종료합니다. #73847 (Alexey Milovidov).
clickhouse-client와 clickhouse-local은(는) 파일에서 리디렉션된 stdin의 압축 형식을 자동으로 감지합니다. 이로써 #70865가 해결되었습니다. #73848 (Alexey Milovidov).
Pretty 포맷에서 기본 동작으로 너무 긴 컬럼 이름을 잘라냅니다. 이는 output_format_pretty_max_column_name_width_cut_to 및 output_format_pretty_max_column_name_width_min_chars_to_cut 설정으로 제어됩니다. 이는 #66502에서 tanmaydatta가 수행한 작업의 연속입니다. 이 변경으로 #65968 이슈가 해결되었습니다. #73851 (Alexey Milovidov).
Pretty 포맷을 더 보기 좋게 만들었습니다. 이전 블록이 출력된 이후 경과 시간이 크지 않은 경우 블록을 합칩니다. 이는 새로운 설정 output_format_pretty_squash_consecutive_ms(기본값 50 ms)와 output_format_pretty_squash_max_wait_ms(기본값 1000 ms)로 제어됩니다. #49537의 후속 작업입니다. 이 변경으로 #49153가 해결되었습니다. #73852 (Alexey Milovidov).
SQLite에 대한 타입 매핑을 수정했습니다(integer 타입은 int64, 부동소수점 타입은 float64로 매핑). #73853 (Joanna Hulboj).
출력이 터미널로 나가는 경우 Vertical 포맷에서 컬럼을 강조 표시합니다. 이는 output_format_pretty_color 설정으로 비활성화할 수 있습니다. #73898 (Alexey Milovidov).
MySQL 호환성이 향상되어 이제 mysqlsh(Oracle에서 제공하는 고급 MySQL CLI)를 ClickHouse에 연결할 수 있게 되었습니다. 이는 테스트를 용이하게 하기 위해서입니다. #73912 (Alexey Milovidov).
출력 레코드 수가 N = output_format_pretty_max_rows를 초과하면, 처음 N개의 행만 표시하는 대신 출력 테이블을 중간에서 잘라 처음 N/2개의 행과 마지막 N/2개의 행을 표시합니다. #64200의 후속 변경입니다. 이 변경으로 #59502가 종료됩니다. #73929 (Alexey Milovidov).
isIPv4String FUNCTION은 올바른 IPv4 주소 뒤에 널 바이트가 오는 경우에도 true를 반환했으나, 이때는 false를 반환해야 합니다. #65387의 후속 변경입니다. #73946 (Alexey Milovidov).
IN, NOT IN과 같은 연산자에서 enum 리터럴을 enum 타입과 비교해 검증하고, 리터럴이 유효한 enum 값이 아닐 경우 예외를 발생시키도록 하는 validate_enum_literals_in_opearators 설정을 추가합니다. #73985 (Vladimir Cherkasov).
Storage S3(Azure)Queue에서 커밋 설정으로 정의된 단일 배치의 모든 파일을 단일 Keeper 트랜잭션에서 커밋합니다. #73991 (Kseniia Sumarokova).
실행 가능한 UDF 및 딕셔너리에 대한 헤더 감지를 비활성화합니다(이는 Function 'X': wrong result, expected Y row(s), actual Y-1 과 같은 문제를 유발할 수 있습니다). #73992 (Azat Khuzhin).
EXPLAIN PLAN에 distributed 옵션이 추가되었습니다. 이제 EXPLAIN distributed=1 ...은 ReadFromParallelRemote* 단계에 원격 실행 계획을 추가합니다. #73994 (Nikolai Kochetov).
Dynamic 인자를 사용하는 not/xor 연산에 대해 올바른 반환 타입을 사용하도록 합니다. #74013 (Pavel Kruglov).
테이블 생성 후에도 add_implicit_sign_column_constraint_for_collapsing_engine 설정을 변경할 수 있도록 했습니다. #74014 (Christoph Wurm).
Pretty 포맷은 테이블 셀 내에서 여러 줄 필드를 렌더링할 수 있어 가독성이 향상됩니다. 기본적으로 활성화되어 있으며 output_format_pretty_multiline_fields 설정으로 제어할 수 있습니다. #64094에서 Volodyachan의 작업을 이어간 것입니다. 이 변경으로 #56912가 종료됩니다. #74032 (Alexey Milovidov).
MergingAggregated 단계에 대해 쿼리 플랜 단계에서 predicate-push-down 최적화를 지원합니다. 이는 새로운 analyzer를 사용하는 일부 쿼리의 성능을 개선합니다. #74073 (Nikolai Kochetov).
이제 clickhouse-client에서 사용자 지정 프롬프트를 설정하는 간단한 방법이 세 가지 있습니다. 1. 명령줄 인자 --prompt를 사용하는 방법, 2. 설정 파일에서 <prompt>[...]</prompt> 설정을 사용하는 방법, 3. 마찬가지로 설정 파일에서 연결별 설정인 <connections_credentials><prompt>[...]</prompt></connections_credentials>을 사용하는 방법입니다. #74168 (Christoph Wurm).
Prometheus remote write 응답의 성공 상태 코드를 200/OK에서 204/NoContent로 변경합니다. #74170 (Michael Dempsey).
JSONEachRowWithProgress 형식은 메타데이터가 포함된 이벤트뿐만 아니라 totals 및 extremes도 포함합니다. 또한 rows_before_limit_at_least와 rows_before_aggregation도 포함합니다. 이 형식은 부분 결과 이후에 예외가 도착하는 경우 예외를 올바르게 출력합니다. 이제 progress 정보에는 경과 나노초가 포함됩니다. 마지막에 최종 progress 이벤트가 한 번 발생합니다. 쿼리 실행 중 progress는 interactive_delay 설정 값보다 더 자주 출력되지 않습니다. #74181 (Alexey Milovidov).
HTTP 응답이 압축되어 있더라도 패킷을 도착하는 대로 즉시 전송합니다. 이렇게 하면 브라우저가 진행 상황을 나타내는 패킷과 압축된 데이터를 모두 받을 수 있습니다. #74201 (Alexey Milovidov).
서버를 재시작하지 않고도 실행 중에 max_remote_read_network_bandwidth_for_serve 및 max_remote_write_network_bandwidth_for_server를 다시 로드할 수 있도록 기능을 추가했습니다. #74206 (Kai Zhu).
ClickHouse Client에서 포트 9440으로 연결하는 경우 이를 기반으로 보안 연결을 자동으로 감지합니다. #74212 (Christoph Wurm).
http_handlers에 대해 사용자 인증 시 사용자 이름만으로 가능하도록 했습니다(이전에는 비밀번호 입력도 필요했습니다). #74221 (Azat Khuzhin).
대체 쿼리 언어인 PRQL과 KQL에 대한 지원이 실험적 기능으로 표시되었습니다. 이를 사용하려면 allow_experimental_prql_dialect = 1 및 allow_experimental_kusto_dialect = 1 설정을 지정하십시오. #74224 (Robert Schulze).
OPTIMIZE TABLE 명령에서 기존 키워드 FINAL 대신 키워드 FORCE를 지정할 수 있게 되었습니다. #74342 (Robert Schulze).
MergeTree 설정 materialize_skip_indexes_on_merge가 추가되었습니다. 이 설정은 머지 시 스킵 인덱스 생성을 하지 않도록 합니다. 이를 통해 스킵 인덱스가 언제 생성될지(ALTER TABLE [..] MATERIALIZE INDEX [...]를 통해) 명시적으로 제어할 수 있습니다. 스킵 인덱스 생성 비용이 큰 경우(예: 벡터 유사도 인덱스)에 유용합니다. #74401 (Robert Schulze).
모든 유형의 복제 태스크에 대해 백오프 로직을 활성화했습니다. 이를 통해 CPU 사용량, 메모리 사용량 및 로그 파일 크기를 줄일 수 있습니다. 새로운 설정 max_postpone_time_for_failed_replicated_fetches_ms, max_postpone_time_for_failed_replicated_merges_ms, max_postpone_time_for_failed_replicated_tasks_ms를 추가했으며, 이는 max_postpone_time_for_failed_mutations_ms와 유사합니다. #74576 (MikhailBurdukov).
parallel_hash JOIN 알고리즘에서 max_joined_block_size_rows 설정을 보다 정확하게 적용하도록 개선했습니다. 이를 통해 hash 알고리즘 대비 메모리 사용량이 증가하는 문제를 방지하는 데 도움이 됩니다. #74630 (Nikita Taranov).
clickhouse-keeper와의 클라이언트 통신에 비밀번호를 사용할 수 있도록 허용합니다. 서버와 클라이언트에 적절한 SSL 구성을 지정하는 경우 이 기능은 그다지 유용하지 않지만, 일부 상황에서는 여전히 유용할 수 있습니다. 비밀번호 길이는 16자를 초과할 수 없습니다. Keeper 인증 모델과는 관련이 없습니다. #74673 (alesapin).
두 파트 모두에서 JOIN 키가 PK의 접두사인 경우 JOIN에 대해 동적 세그먼트 분할(sharding)을 사용합니다. 이 최적화는 query_plan_join_shard_by_pk_ranges 설정(기본값은 비활성화됨)으로 활성화할 수 있습니다. #74733 (Nikolai Kochetov).
SSH 프로토콜을 다시 활성화했습니다. 몇 가지 주요 취약점을 수정하여 더 이상 사용자 정의 pager를 사용하거나 server-logs-file을 지정할 수 없도록 했습니다. 기본적으로 환경 변수로 클라이언트 옵션을 전달하는 기능을 비활성화했습니다(여전히 config.xml의 ssh-server.enable_client_options_passing을 통해 설정할 수 있습니다). progress 테이블, 쿼리 취소, 자동 완성, 프로필 이벤트 진행 상황, stdin 및 send_logs_level 옵션을 지원하도록 했습니다. 다음 이슈가 해결되었습니다: #74340. #74989 (Nikita Mikhaylov).
쿼리 해석 중 예외가 발생하는 경우, 사용자 지정 포맷으로 예외가 포맷되도록 수정했습니다. 이전 버전에서는 쿼리에서 지정한 포맷이 아니라 기본 포맷으로 예외가 포맷되었습니다. 이로써 #55422 이슈가 해결되었습니다. #74994 (Alexey Milovidov).
파싱 기능을 개선했습니다(시퀀스 ID 파싱: 매니페스트 파일에서 시퀀스 식별자를 파싱하는 기능을 추가하고, Avro 메타데이터 파싱: 향후 기능 확장을 위해 Avro 메타데이터 파서를 쉽게 확장 가능한 구조로 재설계했습니다). #75010 (Daniil Ivanik).
이제 ALTER TABLE ... FREEZE ... 쿼리를 KILL QUERY와 타임아웃(max_execution_time)으로 취소할 수 있습니다. #75016 (Kirill).
groupUniqArrayArrayMap을 SimpleAggregateFunction으로 사용할 수 있도록 지원을 추가했습니다. #75034 (Miel Donkers).
Postgres wire protocol에서 prepared SQL 문을 지원합니다. #75035 (scanhex12).
parseTimeDelta 함수에 마이크로 기호(U+00B5) 지원을 추가했습니다. 이제 마이크로 기호(U+00B5)와 그리스 문자 ‘뮤’(U+03BC) 모두 마이크로초를 나타내는 유효한 표기로 인식되어, ClickHouse의 동작이 Go 구현과 일치합니다(time.go 참고 및 time/format.go). #75472 (Vitaly Orlov).
서버 설정(send_settings_to_client)을, 클라이언트 측 코드(예: INSERT 데이터 파싱 및 쿼리 출력 포맷팅)가 서버의 users.xml 및 사용자 프로필에 정의된 설정을 사용할지 여부를 제어하는 클라이언트 설정(apply_settings_from_server)으로 교체했습니다. 그렇지 않은 경우에는 클라이언트 명령줄, 세션, 그리고 쿼리에서 지정한 설정만 사용됩니다. 이는 네이티브 클라이언트에만 적용되며(예: HTTP에는 적용되지 않음), 쿼리 처리의 대부분(서버에서 수행됨)에는 적용되지 않습니다. #75478 (Michael Kolupaev).
Keeper 개선: 인메모리 스토리지에 커밋할 때 digest 계산을 비활성화하여 성능을 개선했습니다. 이 기능은 keeper_server.digest_enabled_on_commit 설정으로 활성화할 수 있습니다. 요청을 전처리할 때는 여전히 digest가 계산됩니다. #75490 (Antonio Andelic).
구문 오류 발생 시 오류 메시지를 더욱 명확하게 개선했습니다. 이전에는 쿼리가 너무 크고, 길이 제한을 초과하는 토큰이 매우 긴 문자열 리터럴인 경우, 이 매우 긴 토큰의 두 예시 사이에 실제 원인에 대한 메시지가 사라지는 문제가 있었습니다. UTF-8을 사용하는 쿼리에서 오류 메시지에 출력되는 내용이 잘못 잘리는 문제를 수정했습니다. 쿼리 조각에 대한 과도한 인용(quoting)을 수정했습니다. 이 변경으로 #75473이(가) 해결되었습니다. #75561 (Alexey Milovidov).
게이지/카운터 메트릭 타입은 이미 지원합니다. 그러나 이들만으로는 일부 메트릭(예: Keeper에 대한 요청의 응답 시간)을 표현하기에 충분하지 않으므로, 히스토그램 메트릭 타입에 대한 지원이 필요합니다. 인터페이스는 Prometheus 클라이언트와 매우 유사하며, 값에 해당하는 버킷의 카운터를 증가시키기 위해 observe(value)를 호출하기만 하면 됩니다. 히스토그램 메트릭은 system.histogram_metrics를 통해 노출됩니다. #75736 (Miсhael Stetsyuk).
system.processes에 normalized_query_hash 컬럼을 추가합니다. 참고로, normalizedQueryHash 함수를 사용하면 즉석에서 쉽게 계산할 수 있지만, 이후 변경 사항을 준비하기 위해 필요합니다. #75756 (Alexey Milovidov).
system.tables를 조회해도 더 이상 존재하지 않는 데이터베이스를 기반으로 생성된 Merge 테이블이 있어도 예외를 던지지 않습니다. 복잡한 작업을 허용하지 않으므로 Hive 테이블에서 getTotalRows 메서드를 제거합니다. #75772 (Alexey Milovidov).
스토리지 정책에서 읽기 전용 디스크와 읽기/쓰기 디스크를 함께 사용할 수 있도록 합니다(여러 볼륨 또는 여러 디스크로 구성 가능). 이를 통해 전체 볼륨에 걸쳐 데이터를 읽을 수 있으며, 삽입 작업은 쓰기가 가능한 디스크를 우선적으로 사용합니다(즉, Copy-on-Write 스토리지 정책). #75862 (Azat Khuzhin).
system.opentelemetry_span_log 테이블의 기본 ORDER BY에서 trace_id를 제거합니다. #75907 (Azat Khuzhin).
이제 암호화 설정(XML 속성 encrypted_by)을 모든 설정 파일(config.xml, users.xml, 중첩된 설정 파일)에 적용할 수 있습니다. 이전에는 최상위 config.xml 파일에만 적용되었습니다. #75911 (Mikhail Gorshkov).
출력 컬럼이 왼쪽 테이블에만 연관된 경우 JOIN을 IN 서브쿼리로 변환합니다. 이때 먼저 고유성 확보 단계를 수행해야 하므로, 해당 단계가 나중에 추가될 때까지는 기본적으로 비활성화되어 있습니다. #75942 (Shichao Jin).
서버 설정 throw_on_unknown_workload가 추가되었습니다. 이 설정은 workload 설정이 알 수 없는 값으로 설정된 쿼리에 대해 동작 방식을 선택할 수 있게 해줍니다. 기본값인 무제한 접근을 허용할 수도 있고, RESOURCE_ACCESS_DENIED 오류를 발생시키도록 할 수도 있습니다. 이는 모든 쿼리가 워크로드 스케줄링(workload scheduling)을 사용하도록 강제하는 데 유용합니다. #75999 (Sergei Trifonov).
system.warnings 테이블을 개선하고, 추가·수정·삭제 가능한 동적 경고 메시지를 추가합니다. #76029 (Bharat Nallan).
SYSTEM FLUSH LOGS에서 개별 로그를 플러시할 수 있도록 지원합니다. #76132 (Raúl Marín).
/binary 서버 페이지를 개선했습니다. Morton 곡선 대신 Hilbert 곡선을 사용합니다. 정사각형 안에 512 MB 분량의 주소를 표시하여 정사각형이 더 가득 차도록 했습니다(이전 버전에서는 주소가 정사각형의 절반만 채워졌습니다). 함수 이름이 아니라 라이브러리 이름에 더 가까운 주소에 색을 입힙니다. 표시 영역 바깥까지 조금 더 스크롤할 수 있도록 했습니다. #76192 (Alexey Milovidov).
이 PR에서는 모든 DROP 연산이 순서상 먼저 와야 하기 때문에 ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES 쿼리를 실행할 수 없도록 합니다. #76242 (pufit).
SYNC REPLICA에 다양한 개선 사항이 적용되었습니다(오류 메시지 개선, 테스트 보강, 기본 검증 추가). #76307 (Azat Khuzhin).
백업 중 Access Denied 오류로 인해 S3로의 멀티파트 복사가 실패할 때 올바른 폴백(fallback)이 적용되도록 했습니다. 서로 다른 자격 증명을 사용하는 버킷 간에 백업을 수행하면 멀티파트 복사 과정에서 Access Denied 오류가 발생할 수 있습니다. #76515 (Antonio Andelic).
librdkafka를 버전 2.8.0으로 업그레이드하고 Kafka 테이블의 종료 절차를 개선하여 테이블 삭제 및 서버 재시작 시 지연을 줄였습니다. 이제 engine=Kafka는 테이블이 삭제될 때 더 이상 명시적으로 컨슈머 그룹을 떠나지 않습니다. 대신 컨슈머는 비활성 상태가 session_timeout_ms(기본값: 45초)를 초과할 때까지 그룹에 남아 있다가 자동으로 제거됩니다. #76621 (filimonov).
server_settings 또는 settings와 같은 시스템 테이블에는 편리한 default 값 컬럼이 있습니다. 단, merge_tree_settings와 replicated_merge_tree_settings에서는 해당 컬럼이 활성화되어 있지 않습니다. #76942 (Diego Nieto).
기본값으로 Variant 타입 내부의 텍스트 포맷에서 특수 Bool 값을 파싱하지 않습니다. 설정 allow_special_bool_values_inside_variant를 사용하면 활성화할 수 있습니다. #76974 (Pavel Kruglov).
세션 및 서버 수준에서 낮은 우선순위 쿼리의 작업별 대기 시간을 구성할 수 있도록 지원합니다. #77013 (VicoWu).
CurrentMetrics::QueryPreempted와 로직이 동일한 ProfileEvents::QueryPreempted가 추가되었습니다. #77015 (VicoWu).
이전에 DatabaseReplicated 엔진에서 쿼리에 지정된 자격 증명이 로그에 출력될 수 있었습니다. 이 동작이 수정되었습니다. 다음 이슈가 종료되었습니다: #77123. #77133 (Nikita Mikhaylov).
백업/복원 설정 allow_s3_native_copy는 이제 세 가지 값을 지원합니다: - False - s3 native copy를 사용하지 않습니다. - True(이전 기본값) - ClickHouse는 먼저 s3 native copy를 시도하고, 실패하면 읽기+쓰기 방식을 사용합니다. - 'auto'(새 기본값) - ClickHouse는 먼저 소스와 대상의 자격 증명(credentials)을 비교합니다. 동일한 경우 ClickHouse는 s3 native copy를 시도한 뒤, 실패하면 읽기+쓰기 방식으로 대체할 수 있습니다. 서로 다른 경우 ClickHouse는 바로 읽기+쓰기 방식을 사용합니다. #77401 (Vitaly Baranov).
plain_rewritable 디스크에서 ALTER TABLE ... ATTACH|DETACH|MOVE|REPLACE PARTITION 작업을 지원합니다. #77406 (Julia Kartseva).
additional_table_filters SETTING에서 쿼리 파라미터를 지원하도록 했습니다. 이 변경 이후에는 다음 쿼리가 성공적으로 실행됩니다. #77680 (wxybear).
사용자 정의 함수(UDF)는 이제 XML 정의에 새로운 태그를 사용해 결정적 함수로 표시할 수 있습니다. 또한 쿼리 캐시는 쿼리 내에서 호출되는 UDF가 결정적 함수인지 여부를 확인합니다. 결정적 함수인 경우 쿼리 결과를 쿼리 캐시에 저장합니다. (이슈 #59988). #77769 (Jimmy Aguilar Mena).
HDFS pread 기능을 활성화하거나 비활성화할 수 있는 enable_hdfs_pread 설정을 추가했습니다. #77885 (kevinyhzou).
zookeeper의 'multi' 읽기 및 쓰기 요청 횟수에 대한 프로파일 이벤트를 추가합니다. #77888 (JackyWoo).
disable_insertion_and_mutation이 설정되어 있어도 임시 테이블을 생성하고 데이터 삽입을 허용합니다. #77901 (Xu Jia).
max_insert_delayed_streams_for_parallel_write 값을 100으로 줄였습니다. #77919 (Azat Khuzhin).
max_merge_delayed_streams_for_parallel_write를 사용하여 머지 작업에서 병렬로 플러시할 수 있는 컬럼 수를 설정할 수 있는 기능을 추가합니다(이를 통해 S3로의 수직 병합 시 메모리 사용량이 약 25배 감소합니다). #77922 (Azat Khuzhin).
비동기 메트릭인 BlockActiveTime, BlockDiscardTime, BlockWriteTime, BlockQueueTime, BlockReadTime에서 잘못 보고되던 값을 수정합니다(변경 전에는 1초가 0.001로 잘못 보고되었습니다). #78211 (filimonov).
StorageS3(Azure)Queue에서 materialized view로 푸시하는 동안 발생하는 오류에 loading_retries 한도가 적용되도록 변경했습니다. 이전에는 이러한 오류가 무기한으로 재시도되었습니다. #78313 (Kseniia Sumarokova).
벡터 유사성 인덱스가 메인 메모리를 최대 2배까지 과다하게 할당하는 문제가 있었습니다. 이 수정에서는 메모리 할당 전략을 재설계하여 메모리 사용량을 줄이고 벡터 유사성 인덱스 캐시의 효율성을 향상합니다(이슈 #78056). #78394 (Shankar Iyer).
system.metric_log 테이블에 스키마 타입을 지정하는 설정 schema_type SETTING을 도입합니다. 허용되는 스키마는 세 가지입니다. wide -- 현재 스키마로, 각 메트릭/이벤트가 개별 컬럼에 저장되며(개별 컬럼 읽기에 가장 효율적), transposed -- system.asynchronous_metric_log와 유사하게 메트릭/이벤트가 행으로 저장되며, 마지막으로 가장 흥미로운 transposed_with_wide_view -- transposed 스키마를 사용하는 기본 테이블을 생성하되, 쿼리를 기본 테이블로 변환하는 wide 스키마의 VIEW도 함께 제공합니다. transposed_with_wide_view에서는 VIEW에 대해 서브초(subsecond) 해상도가 지원되지 않으며, event_time_microseconds는 하위 호환성을 위한 별칭일 뿐입니다. #78412 (alesapin).
장시간 실행되는 뮤테이션에 대해 system.warnings 테이블에 동적 경고를 추가합니다. #78658 (Bharat Nallan).
CPU 부하가 매우 높은 경우 연결을 중단합니다. 이 결정은 대기 시간(OSCPUWaitMicroseconds)과 사용 시간(OSCPUVirtualTimeMicroseconds)의 비율을 기준으로 합니다. 이 비율이 min_os_cpu_wait_time_ratio_to_drop_connection과 max_os_cpu_wait_time_ratio_to_drop_connection 사이에 있을 때, 일정 확률로 쿼리 처리가 중단됩니다. #78778 (Alexey Katsman).
PositionImpl::vectorVector의 잘못된 문자 수 계산을 수정했습니다. #71003 (思维).
negate 함수의 단조성을 수정했습니다. 이전 버전에서는 기본 키인 x에 대해 select * from a where -x = -42; 쿼리가 잘못된 결과를 반환하는 문제가 있었습니다. #71440 (Michael Kolupaev).
처리되지 않은 부분적인 권한 취소(partial revoke) 때문에 액세스 엔티티(access entity)에 대한 RESTORE 연산이 필요 이상으로 높은 권한을 요구했습니다. 이 PR은 해당 문제를 수정합니다. #71853 이슈를 종료합니다. #71958 (pufit).
ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE 실행 후 일시 중단이 발생하지 않도록 했습니다. 백그라운드 작업 스케줄링에 사용되는 설정을 올바르게 조회하도록 수정했습니다. #72024 (Aleksei Filatov).
formatDateTime 스칼라 FUNCTION에서 양수 시간대 형식을 수정합니다. #73091 (ollidraese).
PROXYv1를 통해 연결이 이루어지고 auth_use_forwarded_address가 설정된 경우 소스 포트가 올바르게 반영되도록 수정했습니다. 이전에는 프록시 포트가 잘못 사용되었습니다. currentQueryID() 함수를 추가했습니다. #73095 (Yakov Olkhovskiy).
TCPHandler에서 NativeWriter로 포맷 설정을 전달하여 output_format_native_write_json_as_string과 같은 설정이 올바르게 적용되도록 했습니다. #73179 (Pavel Kruglov).
서버 종료 시 갱신 가능 구체화 뷰(refreshable materialized view)에서 드물게 발생하는 크래시를 수정합니다. #73323 (Michael Kolupaev).
formatDateTime 함수의 %f 플레이스홀더가 이제 항상 소수점 이하 6자리의 숫자를 생성합니다. 이로써 MySQL의 DATE_FORMAT 함수와 동작이 호환됩니다. 이전 동작은 formatdatetime_f_prints_scale_number_of_digits = 1 설정을 사용하여 복원할 수 있습니다. #73324 (ollidraese).
암시적 Date에서 DateTime으로의 변환에 포화(saturating) 방식을 강제 적용하여 인덱스 분석 중 datetime 변환을 개선했습니다. 이를 통해 datetime 범위 제한으로 인해 발생할 수 있던 인덱스 분석 부정확성이 해결되었습니다. #73307 이슈를 수정한 내용입니다. 또한 기본값인 date_time_overflow_behavior = 'ignore'일 때의 명시적 toDateTime 변환 문제도 수정했습니다. #73326 (Amos Bird).
S3 스토리지 및 테이블 함수에서 데이터를 읽을 때 _etag 컬럼으로 필터링하는 동작을 수정했습니다. #73353 (Anton Popov).
이전 analyzer에서 JOIN ON 표현식에 IN (subquery)를 사용할 때 발생하던 Not-ready Set is passed as the second argument for function 'in' 오류를 수정합니다. #73382 (Nikolai Kochetov).
Dynamic 및 JSON 컬럼에 대한 squash 준비 과정을 수정했습니다. 이전에는 일부 경우 타입/경로 제한에 아직 도달하지 않았음에도 새로운 타입이 shared variant/shared data에 삽입될 수 있었습니다. #73388 (Pavel Kruglov).
데이터 타입의 바이너리 디코딩 중 손상된 크기값을 검사하여 지나치게 큰 메모리 할당을 방지합니다. #73390 (Pavel Kruglov).
병렬 레플리카 기능이 활성화된 단일 레플리카 클러스터에서 데이터를 읽을 때 발생하던 논리 오류를 수정했습니다. #73403 (Michael Kolupaev).
ZooKeeper 및 이전 버전의 Keeper와 함께 사용할 때 ObjectStorageQueue가 올바르게 동작하지 않는 문제를 수정합니다. #73420 (Antonio Andelic).
비복제 MergeTree 테이블에서 parallel_replicas_for_non_replicated_merge_tree 설정이 비복제 테이블을 사용하는 서브쿼리에서 무시되던 문제를 수정했습니다. #73584 (Igor Nikonov).
작업을 스케줄링할 수 없을 때 std::logical_error 예외가 던져지는 문제를 수정했습니다. 스트레스 테스트 중에 발견된 문제입니다. 예시 스택 트레이스: 2024.12.19 02:05:46.171833 [ 18190 ] {01f0daba-d3cc-4898-9e0e-c2c263306427} <Fatal> : Logical error: 'std::exception. Code: 1001, type: std::__1::future_error, e.what() = The associated promise has been destructed prior to the associated state becoming ready. (version 25.1.1.18724), Stack trace:.#73629 (Alexander Gololobov).
EXPLAIN SYNTAX에서 쿼리를 해석하지 않도록 처리하여 분산 쿼리에서 잘못된 처리 단계가 선택되어 발생하는 논리 오류를 방지합니다. #65205를 수정합니다. #73634 (Dmitry Novik).
Dynamic 컬럼에서 발생할 수 있는 데이터 불일치 문제를 수정합니다. Nested columns sizes are inconsistent with local_discriminators column size라는 논리적 오류가 발생할 수 있는 문제를 해결합니다. #73644 (Pavel Kruglov).
FINAL 및 SAMPLE이 포함된 쿼리에서 발생하던 NOT_FOUND_COLUMN_IN_BLOCK 문제를 수정했습니다. CollapsingMergeTree에서 FINAL을 사용하는 SELECT 쿼리의 잘못된 결과를 수정하고 FINAL 최적화를 활성화했습니다. #73682 (Anton Popov).
수정: 다른 alias에서 참조되고 역순으로 선택되는 경우 해당 alias가 projection에 추가되지 않는 문제를 수정했습니다. #74033 (Yakov Olkhovskiy).
plain_rewritable 메타데이터를 사용하는 디스크는 여러 서버 인스턴스에서 공유해 사용할 수 있습니다. 한 인스턴스가 메타데이터 객체를 읽는 동안 다른 인스턴스가 이를 수정하는 것이 예상된 동작입니다. S3에 대해 이미 구현된 동작과 마찬가지로, Azure 스토리지를 사용하는 plain_rewritable 초기화 중에는 「Object not found」 오류가 무시됩니다. #74059 (Julia Kartseva).
Storage S3Queue 설정을 변경할 때 접두사 "s3queue_"가 있는 설정과 없는 설정 간 전환 처리가 올바르게 동작하도록 수정합니다. #74075 (Kseniia Sumarokova).
allow_push_predicate_ast_for_distributed_subqueries 설정을 추가합니다. 이 설정은 analyzer를 사용하는 분산 쿼리에 대해 AST 기반 프리디케이트 푸시다운(predicate push-down)을 추가합니다. 이는 쿼리 플랜 직렬화가 지원되는 분산 쿼리가 도입될 때까지 사용하는 임시 방안입니다. #66878#69472#65638#68030#73718. #74085 (Nikolai Kochetov).
집계 프로젝션에서 count(nullable)을 사용할 때 잘못되던 프로젝션 분석을 수정합니다. 이로써 #74495를 해결합니다. 이 PR은 또한 프로젝션이 사용되는지 여부와 그 이유를 명확히 하기 위해 프로젝션 분석과 관련된 일부 로그를 추가합니다. #74498 (Amos Bird).
BackgroundMergesAndMutationsPoolSize의 잘못된 계산을 수정합니다(기존에는 실제 값보다 2배 크게 계산되었습니다). #74509 (alesapin).
SYSTEM REFRESH/START/STOP VIEW에 대한 권한 검사 방식이 수정되었습니다. 이제 특정 VIEW에 대해 쿼리를 실행하려면 *.*에 대한 권한이 필요하지 않고, 해당 VIEW에 대한 권한만 있으면 됩니다. #74789 (Alexander Tokmakov).
이전 버전에서는 스칼라 서브쿼리가 있을 때, 데이터 포맷을 초기화하는 단계에서 진행 상황(서브쿼리 처리에서 누적된 진행 상태)을 기록하기 시작했으며, 이는 HTTP 헤더가 전송되기 이전이었습니다. 이로 인해 X-ClickHouse-QueryId, X-ClickHouse-Format 및 Content-Type과 같은 HTTP 헤더가 손실되었습니다. #74991 (Alexey Milovidov).
SASL이 임의의 RPC 호출에서 실패할 수 있으며, 이 수정으로 krb5 티켓이 만료된 경우 해당 호출을 다시 시도할 수 있습니다. #75063 (inv2004).
optimize_function_to_subcolumns 설정이 활성화된 상태에서 Array, Map, Nullable(..) 컬럼에 대한 기본(primary) 및 보조(secondary) 인덱스의 동작을 수정했습니다. 이전에는 이러한 컬럼의 인덱스가 무시되는 경우가 있었습니다. #75081 (Anton Popov).
내부 테이블을 사용하는 materialized view를 생성할 때는, 이렇게 평탄화된 컬럼을 사용할 수 없으므로 flatten_nested를 비활성화하도록 했습니다. #75085 (Christoph Wurm).
forwarded_for 필드에서 일부 IPv6 주소(예: ::ffff:1.1.1.1)가 잘못 해석되어 예외가 발생하며 클라이언트 연결이 끊어지던 문제를 수정했습니다. #75133 (Yakov Olkhovskiy).
LowCardinality 널 허용 데이터 타입에 대한 null-safe JOIN 처리가 수정되었습니다. 이전에는 IS NOT DISTINCT FROM, <=>, a IS NULL AND b IS NULL OR a == b 와 같은 null-safe 비교를 사용하는 JOIN ON 절이 LowCardinality 컬럼에서 올바르게 동작하지 않았습니다. #75143 (Vladimir Cherkasov).
JSON 서브컬럼 중 Array 타입이 분산 테이블에 대한 JOIN에서 사용될 때 발생할 수 있는 Elements ... and ... of Nested data structure ... (Array columns) have different array sizes 오류를 수정했습니다. #75512 (Pavel Kruglov).
materialized view가 URL engine으로 쓰기를 수행할 때 연결 문제로 오류가 발생하는 경우, materialized_views_ignore_errors 설정을 준수하도록 했습니다. #75679 (Christoph Wurm).
서로 다른 타입의 컬럼 간에 여러 비동기 RENAME 쿼리(alter_sync = 0)를 실행한 후 MergeTree 테이블에서 읽는 동안 드물게 발생하던 충돌을 수정했습니다. #75693 (Anton Popov).
일부 UNION ALL을 사용하는 쿼리에서 발생하던 Block structure mismatch in QueryPipeline stream 오류를 수정합니다. #75715 (Nikolai Kochetov).
PK 컬럼을 ALTER MODIFY 할 때 projection을 재구성합니다. 이전에는 projection PK에 사용된 컬럼을 ALTER MODIFY 한 후 SELECT를 실행하면 CANNOT_READ_ALL_DATA 오류가 발생할 수 있었습니다. #75720 (Pavel Kruglov).
v24.12에서 조인 알고리즘으로 병렬 해시 조인을 기본값으로 활성화한 사항을 설정 변경 내역에 기록했습니다. 이는 호환성 레벨이 v24.12보다 이전 버전으로 설정된 경우 ClickHouse가 계속해서 비병렬 해시 조인을 사용하여 조인을 수행함을 의미합니다. #75870 (Robert Schulze).
clickhouse-library-bridge는 파일 시스템에서 임의의 라이브러리를 로드할 수 있도록 허용하므로, 격리된 환경 내에서만 실행하는 것이 안전합니다. 이 컴포넌트를 clickhouse-server와 동일한 환경에서 실행할 때 발생할 수 있는 취약점을 방지하기 위해, 구성에서 지정한 위치로 라이브러리 경로를 제한합니다. 이 취약점은 Arseniy Dugin이 ClickHouse Bug Bounty Program을 통해 발견했습니다. #75954 (Alexey Milovidov).
일부 메타데이터를 JSON으로 직렬화했는데, 이는 실수였습니다. JSON은 문자열 리터럴 안에 이진 데이터, 특히 0 바이트를 지원하지 않기 때문입니다. SQL 쿼리에는 이진 데이터와 잘못된 UTF-8이 포함될 수 있으므로 메타데이터 파일에서도 이를 지원해야 합니다. 한편 ClickHouse의 JSONEachRow 및 유사한 형식은 이진 데이터에 대해 완전한 왕복(roundtrip)을 보장하기 위해 JSON 표준에서 벗어나는 방식을 사용하여 이 문제를 처리합니다. 이에 대한 배경은 다음에서 확인할 수 있습니다: https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790. 해결 방법은 Poco::JSON 라이브러리를 ClickHouse의 JSON 형식 직렬화 방식과 일관되게 만드는 것입니다. 이로써 #73668이(가) 해결되었습니다. #75963 (Alexey Milovidov).
DETACH PART 실행 중 발생하는 Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED) 오류를 수정합니다. #76039 (Aleksei Filatov).
자동 인덱스(add_minmax_index_for_numeric_columns/add_minmax_index_for_string_columns)가 활성화된 MergeTree 테이블을 attach할 때의 동작을 수정합니다. #76139 (Azat Khuzhin).
작업의 상위 스레드에서의 스택 트레이스(enable_job_stack_trace setting)가 출력되지 않던 문제를 수정했습니다. enable_job_stack_trace setting이 스레드로 올바르게 전파되지 않아 스택 트레이스 내용이 항상 이 setting을 반영하지 못하던 문제를 수정했습니다. #76191 (Yakov Olkhovskiy).
빅엔디언 아키텍처에서 FixedString 타입과 함께 사용하는 reinterpretAs의 동작을 수정합니다. #76253 (Azat Khuzhin).
UUID와 테이블 이름 간의 경쟁 상태로 인해 발생할 수 있는 모든 종류의 버그를 수정합니다(예를 들어, RENAME과 RESTART REPLICA 간의 경쟁 상태를 해결합니다. SYSTEM RESTART REPLICA와 동시에 RENAME이 실행되는 경우 잘못된 레플리카를 재시작하게 되거나, 테이블 중 하나가 Table X is being restarted 상태에 남게 될 수 있습니다). #76308 (Azat Khuzhin).
NULL 단락(NULL short-circuit)에 대한 성능 테스트를 추가하고 버그를 수정했습니다. #76708 (李扬).
출력 쓰기 버퍼를 최종화하기 전에 플러시합니다. 일부 출력 형식(예: JSONEachRowWithProgressRowOutputFormat)을 최종화하는 과정에서 발생하던 LOGICAL_ERROR를 수정합니다. #76726 (Antonio Andelic).
MongoDB binary UUID 지원을 추가했습니다(#74452) - 테이블 함수 사용 시 MongoDB로의 WHERE 절 푸시다운을 수정했습니다(#72210) - MongoDB의 binary UUID가 ClickHouse의 UUID로만 파싱되도록 MongoDB - ClickHouse 타입 매핑을 변경했습니다. 이를 통해 향후 모호성과 예기치 않은 동작을 방지할 수 있습니다. - 이전 버전과의 호환성을 유지하면서 OID 매핑을 수정했습니다. #76762 (Kirill Nikiforov).
SELECT toBFloat16(-0.0) == toBFloat16(0.0)이 이제 올바르게 true를 반환합니다(이전에는 false를 반환했습니다). 이를 통해 Float32 및 Float64와의 동작이 일치하게 됩니다. #77290 (Shankar Iyer).
초기화되지 않은 key_index 변수에 대한 잘못된 참조를 수정하여 디버그 빌드에서 크래시가 발생할 수 있는 문제를 방지합니다(이 초기화되지 않은 참조는 이후 코드가 오류를 던질 가능성이 높기 때문에 릴리스 빌드에서는 문제를 일으키지 않습니다). ### 사용자에게 노출되는 변경 사항에 대한 문서 항목입니다. #77305 (wxybear).
널 허용(Nullable) 요소를 포함한 튜플과 문자열 간의 비교 동작을 수정합니다. 예를 들어, 변경 이전에는 Tuple (1, null) 과 String '(1,null)' 을 비교하면 오류가 발생했습니다. 또 다른 예로, 널 허용 컬럼인 a 를 포함하는 Tuple (1, a) 와 String '(1, 2)' 를 비교하는 경우가 있습니다. 이 변경으로 이러한 문제가 해결됩니다. #77323 (Alexey Katsman).
수정: 정렬에 사용된 컬럼을 플래너가 제거할 때 WITH FILL이 NOT_FOUND_COLUMN_IN_BLOCK 오류와 함께 실패할 수 있습니다. INTERPOLATE 표현식에 대해 계산된 DAG가 일관되지 않아 발생하던 유사한 문제도 수정되었습니다. #77343 (Yakov Olkhovskiy).
이제 쿼리 캐시는 UDF를 비결정적 함수로 간주합니다. 따라서 UDF가 포함된 쿼리 결과는 더 이상 캐시되지 않습니다. 이전에는 사용자가 결과가 잘못 캐시되는 비결정적 UDF를 정의할 수 있는 문제가 있었습니다(이슈 #77553). #77633 (Jimmy Aguilar Mena).
이제 함수 arrayResize의 두 번째 인수로 데이터 타입 Nullable을 사용하는 것은 허용되지 않습니다. 이전에는 두 번째 인수가 Nullable일 경우 오류가 발생하거나 잘못된 결과가 반환되는 등 다양한 문제가 발생할 수 있었습니다. (이슈 #48398). #77724 (Manish Gill).
레플리카의 disable_insertion_and_mutation 값이 true인 경우 RefreshMV 작업을 스케줄하지 않습니다. 해당 작업은 일부 데이터 삽입을 수행하므로, disable_insertion_and_mutation 값이 true이면 실패합니다. #78277 (Xu Jia).
삭제된 nats 통합 테스트를 복원하고 오류를 수정했습니다. - nats 엔진에서 일부 레이스 컨디션을 수정했습니다. - 연결이 끊어진 경우 nats로 데이터를 스트리밍할 때 발생하던 데이터 손실을 수정했습니다. - nats에서 스트리밍이 종료될 때 마지막 데이터 청크를 수신하는 과정이 멈추던 문제를 수정했습니다. - nats_max_reconnect는 더 이상 사용되지 않으며 효력이 없고, nats_reconnect_wait 타임아웃을 사용하여 지속적으로 재연결을 시도합니다. #69772 (Dmitry Novikov).
contrib OpenSSL의 asm 파일이 생성되지 않던 문제를 수정합니다. #72622 (RinChanNOW).
테스트 03210_variant_with_aggregate_function_type의 안정성을 개선합니다. #74012 (Anton Ivashkin).
ARM 및 Intel Mac 환경에서 HDFS 빌드를 지원합니다. #74244 (Yan Xin).
잠재적으로 비호환적인 변경: 기본값을 더욱 엄격하게 설정하는 개선입니다. 현재 기본값도 이미 안전합니다. 포트를 외부에 공개하려면 옵션을 명시적으로 지정해야 합니다. 그러나 default 사용자에 대해 CLICKHOUSE_PASSWORD로 비밀번호를 설정하지 않았거나 CLICKHOUSE_USER 환경 변수로 사용자 이름을 변경하지 않은 경우, 추가적인 보호를 위해 로컬 시스템에서만 접근 가능해야 합니다. #75259 (Mikhail f. Shiryaev).
통합 테스트의 단일 병렬 배치 실행에는 1시간 타임아웃이 설정되어 있습니다. 이 시간이 경과하면 일부 로그가 남지 않은 상태로 pytest가 종료됩니다. 세션 결과를 출력하고 외부 타임아웃 신호가 발생하지 않도록 내부 pytest 타임아웃은 55분으로 설정했습니다. #75532 이슈를 종료합니다. #75533 (Ilya Yatsishin).
모든 clickhouse-server 관련 동작을 단일 함수로 묶고, entrypoint.sh에서 기본 바이너리를 실행할 때에만 실행되도록 했습니다. 오래 미뤄졌던 개선 사항이 #50724에서 제안되었습니다. users.xml에서 값을 가져올 수 있도록 clickhouse-extract-from-config에 --users 옵션을 추가했습니다. #75643 (Mikhail f. Shiryaev).
스트레스 테스트에서 gdb를 통해 스택트레이스를 수집하는 동안 서버가 종료되지 않은 경우, Possible deadlock on shutdown (see gdb.log) 감지 시 불필요한 경고가 줄어들도록 추가 대기 시간이 제공됩니다. 이 지연은 테스트가 성공적으로 완료되지 않은 경우에만 추가됩니다. #75668 (Ilya Yatsishin).
삭제되었던 nats 통합 테스트를 복원하고 오류를 수정했습니다. - nats 엔진의 일부 레이스 컨디션을 수정함 - 연결이 끊어진 상태에서 nats로 데이터를 스트리밍할 때 발생하던 데이터 손실을 수정함 - nats에서 스트리밍이 종료될 때 마지막 청크를 수신하는 단계에서 멈추던 문제를 수정함 - nats_max_reconnect는 사용 중단(deprecated)되었으며 더 이상 효과가 없고, 재연결은 nats_reconnect_wait 타임아웃을 사용해 지속적으로 수행됩니다. #75850 (Dmitry Novikov).