메인 콘텐츠로 건너뛰기

ClickHouse 릴리스 26.4, 2026-04-30. 발표 자료, 영상

하위 호환되지 않는 변경 사항

  • 이제 IN 연산자는 Bool 타입에 대해 정확한 값 비교 semantics를 사용합니다. 즉, 집합 내 01 값만 Bool 값과 일치합니다. 이전에는 IN 집합에서 255보다 큰 숫자 값이 Bool과 비교될 때 잘못해서 true로 클램프되어, SELECT CAST(1, 'Bool') IN (256)이 1을 반환했습니다. 이제는 올바르게 0을 반환합니다. #92980을 해결합니다. #93115 (Ashrith Bandla).
  • H3 라이브러리가 v4로 업데이트되어 길이, 면적 및 기타 메트릭 계산의 정밀도가 향상되었습니다. 새 결과가 이전 결과와 다르기 때문에 이 변경은 하위 호환되지 않습니다. #100348 (Alexey Milovidov).
  • 이제 WITH 표현식 목록 요소에서 SELECT를 bareword 식별자로 사용하는 것을 허용하지 않습니다. #101059 (Aruj Bansal).
  • 이 패치는 merge 테이블이 가상 컬럼을 처리하는 방식을 변경합니다. 기반 테이블에 _table 또는 _database가 있으면 해당 컬럼은 스토리지에서 읽고, 그렇지 않으면 읽기 단계 이후 표현식 단계를 통해 채웁니다. #101742 (Mikhail Artemenko).
  • 이제 IN 연산자는 복합 타입(Tuple, Array, Map) 내부에서 발생하는 손실성 Decimal 변환도 거부하므로, 동작이 최상위 스칼라 비교와 일관되게 되었습니다. 이전에는 정밀도 검사가 최상위 스칼라 값에만 적용되었습니다. 예를 들어 CAST('33.3', 'Decimal64(1)') IN (33.33)은 올바르게 0을 반환했지만, CAST(['33.3'], 'Array(Decimal64(1))') IN ([33.33])은 손실성 변환이 Array 내부에서 발생했기 때문에 잘못해서 1을 반환했습니다. 이제 두 경우 모두 올바르게 0을 반환합니다. #101812 (Nihal Z. Miaji).
  • 인증 전 HTTP 연결의 메모리 사용량을 제한하기 위해 기본 http_max_fields를 1,000,000에서 1,000으로, http_max_field_name_size를 128 KB에서 4 KB로 낮췄습니다. 또한 http_max_request_header_sizehttp_headers_read_timeout 설정을 추가했습니다. 이전의 더 높은 제한값에 의존하는 사용자는 설정을 통해 이를 복원할 수 있습니다. #103285 (Sema Checherinda).

새로운 기능

  • 메모리 제한에 도달하면 해시 조인과 병렬 해시 조인을 grace hash join으로 변환해 자동으로 스필하도록 지원합니다. 이 동작은 max_bytes_before_external_join로 제어됩니다. #97813 (János Benjamin Antal).
  • Arrow Flight SQL 지원이 추가되었습니다. #91170 (Yakov Olkhovskiy).
  • Paimon 테이블 엔진에 Keeper 기반 스냅샷 진행 상태 추적을 통한 증분 읽기 지원을 추가하고, paimon_target_snapshot_id를 사용한 대상 스냅샷 델타 읽기를 포함했으며, 유형 매핑, 파티션 프루닝, 증분 읽기 시나리오에 대한 테스트 범위를 확장했습니다. #93655 (XiaoBinMu).
  • stem 함수는 이제 실험적 기능이 아닙니다(이전에는 allow_experimental_nlp_functions 설정을 활성화해야 했습니다). #102399 (Jimmy Aguilar Mena). 이제 stem 함수를 사용하면 String, FixedString, Array([Fixed]String), Nullable, LowCardinality, Const 컬럼의 모든 단어/토큰에 대해 손쉽게 어간 추출을 수행할 수 있습니다. #99137 (Jimmy Aguilar Mena).
  • 호환성 설정 use_strict_insert_block_limits를 사용할 때 squashing 과정에서 max_insert_block_size_rows, max_insert_block_size_bytes, min_insert_block_size_rows, min_insert_block_size_bytes에 대한 새로운 동작을 구현합니다. #94207 (Kirill Kopnev).
  • 숫자 배열의 각 지연값(lag)에 대한 정규화된 자기상관을 계산하는 함수 arrayAutocorrelation(arr [, max_lag])를 추가했습니다. 정수, 부동소수점, 십진수 배열 타입을 지원합니다. #94776 (Wenyu Chen).
  • SQL 함수 obfuscateQuery. 이슈 #98010을 해결합니다. #98305 (Xuewei Wang).
  • 딕셔너리 속성에 Map 및 JSON/Object 타입 지원을 추가했습니다. 이제 딕셔너리는 FLAT 및 HASHED 레이아웃 모두에서 Map(String, String), Map(String, Array(String)), JSON, Nullable(JSON) 타입을 포함한 복합 타입을 저장하고 가져올 수 있습니다. #98627 (yanglongwei).
  • 새로운 MergeTree 설정 2개(replicated_fetches_min_part_levelreplicated_fetches_min_part_level_timeout_seconds)가 추가되어, 레플리카가 피어에서 새로 삽입된(머지되지 않은) 파트를 가져오지 않고 건너뛸 수 있게 되었습니다. 이에 따라 수집 부하가 큰 상황에서 복제 오버헤드를 줄일 수 있습니다. #98625 (tanner-bruce).
  • JSONAllPaths와 bloom_filter, tokenbf_v1, ngrambf_v1 및 text(역색인) 인덱스 타입을 사용해 JSON 컬럼에 대한 MergeTree 스킵 인덱스 지원이 추가되어, 각 그래뉼에 존재하는 JSON 경로 집합을 기준으로 그래뉼 스키핑이 가능해졌습니다. #98886 (Pavel Kruglov).
  • 이제 printf 함수는 상수가 아닌 포맷 문자열도 지원하여, 컬럼 값에 따라 각 행마다 서로 다른 포맷 패턴을 사용할 수 있습니다. #98991 (Yash ).
  • 삽입 순서에 따라 데이터를 재구성하는 새 프로젝션 인덱스 commit_order를 추가했습니다. #99004 (Mikhail Artemenko).
  • 텍스트 문자열에서 검색어가 나타난 부분을 HTML 태그(기본값 <em>/</em>)로 감싸는 highlight 함수를 추가했습니다. ASCII case-insensitive 일치, 겹치는 일치 항목의 자동 병합, 사용자 지정 여는/닫는 태그를 지원합니다. #99131 (Peng).
  • 공개 ClickHouse 서비스를 남용으로부터 보호하기 위해 정규화된 쿼리 해시를 기준으로 쿼터를 구현했습니다. 1. 쿼터 키 유형으로 NORMALIZED_QUERY_HASH를 지원합니다. - 서로 다른 정규화된 쿼리마다 별도의 쿼터 버킷을 사용하므로, CREATE QUOTA q KEYED BY normalized_query_hash는 각 개별 쿼리를 독립적으로 추적합니다. 2. 쿼터 리소스 유형으로 QUERIES_PER_NORMALIZED_HASH를 지원합니다 — 인터벌 내에서 단일 정규화된 쿼리의 최대 실행 횟수를 제한하므로, MAX queries_per_normalized_hash = 100은 특정 쿼리 패턴이 100회를 초과해 실행되는 것을 방지합니다. #99586 (Alexey Milovidov).
  • 이제 NATURAL JOIN 구문을 사용해 JOIN 쿼리를 작성할 수 있으며, 이 구문은 이름이 같은 모든 컬럼을 자동으로 매칭하고 결과에서 해당 컬럼의 중복을 제거합니다. #99840 (Peter Nguyen).
  • SET session_timezone의 별칭인 SET TIME ZONE 'tz'를 지원합니다. #99883 (phulv94).
  • Web UI(play.html)에 매개변수화된 쿼리 지원이 추가되었습니다. {name:Type}와 같은 쿼리 매개변수를 감지하고, 해당 값을 입력할 수 있는 입력 필드를 표시합니다. #100041 (Alexey Milovidov).
  • SQL 표준 VALUES 절을 FROM 절에서 테이블 표현식으로 사용할 수 있도록 지원합니다. 예: SELECT * FROM (VALUES (1, 'a'), (2, 'b')) AS t(id, val). #100143 (Desel72).
  • EXTRACT 연산자에 PostgreSQL과 호환되는 단위 EPOCH, DOW, DOY, ISODOW, ISOYEAR, WEEK, CENTURY, DECADE, MILLENNIUM을 추가했습니다. 또한 이전에는 오류가 발생했던 EXTRACT(WEEK FROM date)도 수정했습니다. #100274 (Alexey Milovidov).
  • TO 범위 한정자를 사용하는 SQL 표준 복합 인터벌 리터럴(예: INTERVAL '1:30' HOUR TO MINUTE) 지원이 추가되었습니다. 내부적으로는 인터벌의 합으로 분해됩니다. #100453 (Desel72).
  • HTTP 연결 풀 소켓의 커널 TCP 수신 및 송신 버퍼 메모리(sk_rmem_alloc, sk_wmem_alloc)에 대한 비동기 메트릭을 추가하고, 이를 연결 그룹별 p50/p75/p90/p95 백분위수와 합계로 보고하도록 했습니다. #100575 (Sema Checherinda).
  • HTTP 제어 포트의 /jemalloc 경로에서 사용할 수 있는 ClickHouse Keeper용 jemalloc 프로파일링 웹 UI가 추가되었습니다. #100606 (murphy-4o).
  • ordered mode와 unordered mode를 위한 명령 SYSTEM FLUSH OBJECT STORAGE QUEUE db.table PATH 'x'을 구현했습니다. #100709 (Bharat Nallan).
  • JSON 컬럼의 모든 값을 텍스트 표현으로 직렬화해 경로 이름 순으로 정렬한 뒤 Array(String)으로 반환하는 JSONAllValues 함수를 추가했습니다. JSON 컬럼의 JSONAllValues 표현식에 대한 텍스트 인덱스 지원도 추가했습니다. JSONAllValues(json_column)에 텍스트 인덱스를 생성하면 JSON 서브컬럼에 대한 쿼리 필터링(예: json_column.key1 = 'value')에 자동으로 사용됩니다. #100730 (Anton Popov).
  • 입력 형식에 대해 대소문자 구분 방식을 다르게 설정할 수 있는 새로운 설정 input_format_column_name_matching_mode를 추가했습니다. #99346 (manerone).
  • clickhouse-keeper-clientwatch 명령이 추가되었으며, get, exists, ls 명령에서도 watch를 지원합니다. #100834 (Den Kalantaevskii).
  • ClickHouse Keeper에 getChildrenRecursive(ListRecursive) 요청이, clickhouse-keeper-clientlsr 명령이 추가되었습니다. 이로써 #99916가 해결되었습니다. #100998 (Konstantin Vedernikov).
  • 2차원 배열(행렬)을 받아 전치하는 새 함수 arrayTranspose가 추가되었습니다: SELECT arrayTranspose([[1, 2, 3], [4, 5, 6]]). #101214 (Vitaly Baranov).
  • auto_statistics_types mergetree 설정의 기본값은 'minmax, uniq'입니다 — 새 테이블에서 적절한 모든 컬럼에 대해 minmax 및 uniq 통계가 자동으로 생성됩니다 - materialize_statistics_on_insert의 기본값은 false입니다 — 이제 통계는 삽입 시점이 아니라 머지 과정에서 구축되므로 삽입 오버헤드가 줄어듭니다. 이전 동작을 복원하려면 SET materialize_statistics_on_insert = 1을 사용하십시오. #101275 (Han Fei).
  • 교차 레플리카 간 복제 지연으로 발생하는 데이터 누락을 줄이기 위해 materialized view 의존성 체인에 prefer_dependency_replica 갱신 설정을 추가했습니다. #101591 (Seva Potapov).
  • 구문 검색(연속된 토큰 시퀀스)을 위한 hasPhrase(별칭 matchPhrase) 함수를 추가했습니다. 검색은 브루트포스 방식으로 수행되며, 즉 아직 텍스트 인덱스에서는 지원되지 않습니다. #101997 (Elmi Ahmadov).
  • S3 GET 요청 연결 수명 주기와 소비된 바이트 수를 관찰할 수 있도록 s3_read_request_duration_microsecondss3_read_request_bytes 히스토그램 메트릭을 추가했으며, system.histogram_metrics와 Prometheus 엔드포인트에서 확인할 수 있습니다. #102058 (Sema Checherinda).
  • 이제 DateDate32 값을 + 연산자로 TimeTime64 값에 더해 DateTime 또는 DateTime64 결과를 생성할 수 있습니다. 예를 들어 SELECT toDate('2024-01-15') + toTime('14:30:25')2024-01-15 14:30:25를 반환합니다. 결과는 session 시간대에서 계산되며, 범위를 벗어나는 결과는 date_time_overflow_behavior 설정에 따라 처리됩니다. #95914를 해결합니다. #102421 (Nihal Z. Miaji).
  • 텍스트 인덱스는 이제 일반 제공 상태이며, compatibility 설정과 관계없이 활성화된 상태를 유지하여 백업 복원 중이나 호환 모드에서 실행할 때 예기치 않게 비활성화되는 일을 방지합니다. #101518 (Nikita Fomichev).

실험적 기능

  • Iceberg 테이블에서 객체 스토리지의 미참조 파일을 식별하고 제거하는 ALTER TABLE ... EXECUTE remove_orphan_files를 추가했습니다. #99127 (murphy-4o).
  • join 재정렬에 사용되는 통계를 무작위화하는 query_plan_optimize_join_order_randomize 설정을 추가했습니다. 테스트에 유용합니다. #100643 (Vladimir Cherkasov).
  • SQL을 사용해 OpenAI 및 Anthropic 엔드포인트를 호출할 수 있도록 ClickHouse에 AI 함수 지원을 추가했습니다. aiGenerate는 이러한 함수의 첫 번째 예입니다. #100831 (George Larionov).
  • ClickHouse에서 LLM API를 활용할 수 있는 AI 함수 aiClassify, aiExtract, aiTranslate를 추가했습니다. #100832 (George Larionov).
  • 모든 히스토그램 메트릭(예: S3/Azure 지연 시간, Keeper 요청 처리 단계의 소요 시간)을 주기적으로 스냅샷하는 새로운 시스템 테이블 system.histogram_metric_log를 추가했습니다. 또한 system.histogram_metricsvalue 컬럼은 더 유연하고 Prometheus 데이터 모델과도 더 잘 호환되므로 Float64로 변경됩니다. #103046 (Miсhael Stetsyuk). 이 테이블 구조는 향후 릴리스에서 변경될 가능성이 높습니다.

성능 개선

  • 이제 ClickHouse는 min/max 통계를 기반으로 SELECT 쿼리에서 전체 데이터 파트를 건너뛸 수 있습니다. #94140 (zoomxi).
  • 뮤테이션이 완료된 ReplicatedMergeTree 테이블에서 readonly 작업 중 발생하는 잠금 경합을 줄였습니다. #95771 (Eduard Karacharov).
  • 프로젝션을 읽을 때 optimize_read_in_order가 적용되도록 했습니다. #89453을 해결했습니다. #95885 (Andrey Zvonov).
  • 해시 조인 및 Concurrent Hash Join이 소폭 개선되었습니다. #96663 (Yarik Briukhovetskyi).
  • 입력 데이터의 중복이 거의 없을 때 LowCardinality 컬럼 최적화를 비활성화하여 DISTINCT 변환을 최적화했습니다. #97113 (Nihal Z. Miaji).
  • #97723LIKE 쿼리 성능이 최적화되었습니다. 이제 이러한 쿼리에서도 텍스트 인덱스를 사용할 수 있습니다. #98149 (Elmi Ahmadov).
  • 벡터화된 수학 함수(exp, log, sigmoid, tanh)는 이제 AArch64(NEON/SVE 사용)와 FreeBSD/Darwin에서도 가속됩니다. 이전에는 이들 환경에서 더 느린 스칼라 폴백을 사용했습니다. #98230 (Raúl Marín).
  • 이제 ^(abc-1|abc-2)와 같이 리터럴 문자열의 정규식 선택 패턴을 사용해 MergeTree 프라이머리 키(primary key) 컬럼을 필터링하는 쿼리도, 각 선택지가 공통 접두사를 공유하면 프라이머리 키 프루닝을 사용할 수 있습니다. #98988 (Yash ).
  • ORDER BY ... LIMIT top-k 동적 필터링을 일반화해 Nullable, String, COLLATE 타입도 지원합니다. #99033 (murphy-4o).
  • 직접 인덱스 해시 테이블을 사용해 값 범위가 좁은 Int32Int64 키의 해시 조인 속도를 개선했습니다. #99275 (Hechem Selmi).
  • 단일 딕셔너리를 사용하는 LowCardinality 컬럼의 비연속 쿼리 성능이 향상되었습니다. #99285 (Ivan Babrou).
  • 내부 루프의 가상 디스패치를 제거해 Float64 컬럼용 var*Stablestddev*Stable 함수의 속도를 높였습니다. 참고: 이로 인해 부동소수점 결과를 ULP 수준에서 변경하는 컴파일러 최적화(FMA/레지스터)가 활성화됩니다. #99460 (Riyane El Qoqui).
  • 입력이 32/64바이트인 경우 최적화된 Firedancer base58 인코딩을 사용합니다(base58Encode에는 자동으로 적용됨). 디코딩 결과가 32/64바이트인 경우 최적화된 base58 디코딩도 사용할 수 있습니다(base58Decode('...', 32) 등으로 명시). #99461 (Joanna Hulboj).
  • 바이너리 크기를 줄이고 명령어 캐시 활용 효율을 높이기 위해 링커의 섹션 기반 최적화(-ffunction-sections, -fdata-sections, --icf=all)를 활성화했습니다. #99474 (Alexey Milovidov).
  • 코어 수가 많은 머신에서 집계를 수행하는 짧은 쿼리의 음의 스케일링 문제를 수정했습니다. 쿼리가 소수의 마크를 읽는 경우, 집계 후 파이프라인이 더 이상 max_threads까지 확장되지 않아 대부분 비어 있는 스트림으로 인한 오버헤드를 방지합니다. #99493 (Alexey Milovidov).
  • 읽기 작업 크기를 적절히 선택해 병렬 레플리카 쿼리의 성능을 개선했습니다. #99801 (Nikita Taranov).
  • 사용자 공간 페이지 캐시를 통해 원격 파일을 읽을 때 프리페치를 사용할 수 있도록 합니다. #99919 (Alexey Milovidov).
  • 서브컬럼을 열거할 때 String .size 서브컬럼이 불필요하게 계산되는 것을 방지했습니다. #99941 (Pavel Kruglov).
  • 레플리카 수가 매우 많은 클러스터에 호텔에서 접속해 작업할 때 clickhouse-client의 진행률 표시줄이 덜 흔들리도록 개선했습니다. #100145 (Alexey Milovidov).
  • 페이지 캐시가 활성화된 경우 clickhouse-local에서 MemoryWorker를 시작해 사용자 공간 페이지 캐시를 실제로 사용할 수 있게 했습니다. #100306 (Alexey Milovidov).
  • LIMIT 절을 UNION ALL 내부로 푸시다운해 쿼리를 최적화합니다. #100364 (Alexey Milovidov).
  • ORDER BY에서 StringFixedString 컬럼 비교를 위한 JIT 컴파일 지원을 추가하여, 문자열 비중이 높은 정렬 키에서 머지 단계 정렬 성능을 6~17% 개선했습니다. @lgbo-ustc와 공동 작성했습니다. #100577 (Raúl Marín).
  • read_in_order_use_virtual_row가 새로운 read_in_order_use_virtual_row_per_block 설정과 함께 활성화되면, 이제 MergeTree에서 읽은 각 블록 뒤에 가상 행 경계 정보가 생성되어 WHERE/PREWHERE/JOIN에 의해 데이터가 완전히 필터링된 파트의 경우 머지가 스트림 도중 소스 우선순위를 다시 조정할 수 있습니다. Close #99945. #100603 (Vladimir Cherkasov).
  • dragonbox 호환 반올림을 사용해 itoa의 fast path를 확장함으로써 큰 정수 값의 Float-to-String 변환 속도를 높였습니다. #100649 (Raúl Marín).
  • Float를 String으로 변환하는 속도를 1.5배~3배 높이기 위해 dragonboxzmij로 대체합니다. #100650 (Raúl Marín).
  • 소프트웨어 나눗셈을 Barrett reduction으로 대체하고 변환 루프를 언롤링해 Int128/UInt128의 문자열 변환 속도를 높였습니다. #100671 (Raúl Marín).
  • uniqExact 병렬 머지에서 중복 스레드 생성 방지. #100686 (Jiebin Sun).
  • uniqExact에 배치 병렬 머지 기능을 추가했습니다. #100687 (Jiebin Sun).
  • 기반 MergeTree 테이블이 있는 단순 뷰를 병렬 레플리카로 실행할 때 쿼리 병렬화가 개선되었습니다. #100815 (Igor Nikonov).
  • parallel_replicas_allow_view_over_mergetree=1일 때 단순 뷰(적격한 MergeTree 테이블에 대한 UNION ALL 뷰 포함)에서 병렬 레플리카를 지원합니다. 이를 통해 내부 쿼리 대신 뷰의 외부 쿼리를 병렬화할 수 있어, 노드 전반에서 쿼리 병렬성이 향상됩니다. #100958 (Igor Nikonov).
  • 쿼리 계획(query plan)에 IN 필터가 있는 경우 full_sorting_merge가 기본 키(primary key) 순서로 읽도록 최적화했습니다. #101261 (Nikita Taranov).
  • 전체 memory tracker 계층을 순회하는 대신 샘플링 설정을 캐시해 메모리 할당/해제를 최적화했습니다. #101267 (Azat Khuzhin).
  • deduplicate_insert = 'enable'(26.2부터 기본값)일 때 발생하던 심각한 INSERT 성능 회귀를, 데이터 해시 계산을 squashing에서 sink로 미루고 updateHashWithValueRange를 통한 배치 컬럼 해싱을 사용해 수정했습니다. 그 결과 22개 컬럼, 500만 행 기준 오버헤드가 약 2.5초에서 약 0.5초로 줄었습니다. #101494 (Sema Checherinda).
  • try_lock을 사용해 경합 없는 획득의 타이밍 측정을 피하고 보유 시간 측정을 제거함으로써 프로파일링된 잠금 오버헤드를 줄였습니다. #101502 (Antonio Andelic).
  • arrayDotProduct의 수작업 AVX-512 intrinsics를 플랫폼 독립적이며 자동 벡터화가 가능한 루프로 대체하고, AVX2 및 ARM NEON 지원을 추가했습니다. #101571 (Peng).
  • 이스케이프된 문자열(예: '{\'key\':1}') 형태로 값이 전달될 때 Map, Array, Tuple 컬럼의 INSERT VALUES 성능을 개선하여 SQL 표현식 파서로 불필요하게 폴백되는 것을 방지했습니다. #102119 (Joanna Hulboj).
  • RabbitMQ 테이블 엔진의 과도한 CPU 사용 문제를 수정했습니다. #102711 (Jaap Elst).
  • 이제 JOIN 순서 최적화기는 기존 조인 조건에서 추이적인 동등 조인 프레디케이트를 추론합니다. 예를 들어 A.x = B.x AND B.x = C.x가 주어지면 A.x = C.x라는 동치 관계를 인식하여, 최적화기가 추이적으로 연결된 테이블 간의 Direct JOIN도 고려할 수 있습니다. 이로써 차원 테이블이 공유 팩트 테이블을 통해 연결되는 스타 및 스노우플레이크 스키마(schema)에서 실행 계획의 품질이 향상될 수 있습니다. 이 기능은 새로운 enable_join_transitive_predicates 설정으로 제어되며(기본적으로 비활성화), #98479 (Alexander Gololobov)에서 도입되었습니다.
  • 병렬로 머지 작업을 미리 취소하여 TRUNCATE DATABASE TABLES LIKE를 최적화했습니다. #98597 (Shaohua Wang).
  • 곱셈 연산에 대한 단조성 지원이 추가되어 key * constant 표현식에 대해 기본 키(primary key) 프루닝이 가능해졌습니다. #98983 (Amos Bird).
  • 캐시 딕셔너리는 더 이상 hasKeys에서 배타적 잠금을 사용하지 않습니다. 캐시 읽기에 공유 잠금을 사용하도록 변경되어 잠금 경합이 줄어듭니다. #100796 (liuguangliang).
  • VIEW에 더 많은 최적화를 적용할 수 있도록 쿼리 트리에서 VIEW 서브쿼리를 인라인 처리했습니다. #100830 (Dmitry Novik).
  • 서버 시작 시 cache loading을 최적화했습니다. #101500 (Kseniia Sumarokova).
  • 프레디케이트의 선택도가 충분히 높을 때 FINAL을 사용하는 ReplacingMergeTree에 지연 컬럼 머티리얼라이즈를 구현합니다. #101647 (Nikolai Kochetov).
  • optimize_rewrite_array_exists_to_has 최적화를 다시 활성화합니다(23.10부터 기본적으로 비활성화됨). 이 최적화는 arrayExists(x -> x = elem, arr)를 훨씬 더 빠른 has(arr, elem)로 재작성하며, 이제 배열의 element 타입과 elemhas와 호환되지 않는 경우(예: DateString)에는 재작성을 올바르게 건너뛰므로, 이전에는 오류가 발생하던 쿼리도 계속 작동합니다. #71431을 해결합니다. #100944 (Alexey Milovidov).

개선 사항

  • EXPLAIN PLAN pretty=1 출력이 개선되었습니다. 최상위 쿼리의 출력 컬럼을 표시하고, join 릴레이션의 레이블/기호와 예상 결과 행 수 및 locality를 보여주며, join/source 단계별 출력 컬럼도 포함합니다. 이번 변경은 #98117의 Information Deficit 부분을 다룹니다. #99462 (Kirill Kopnev).
  • MergeTree 테이블 설정 share_nested_offsets를 추가했습니다(기본값 true). false로 설정하면 점으로 구분된 이름(예: n.a, n.b)을 가진 배열 컬럼은 오프셋 파일을 공유하고 기존 Nested 시맨틱의 일부로 배열 크기가 같은지 검증하는 대신, 각각 독립적인 컬럼으로 처리됩니다. #98416 (Amos Bird).
  • 이제 users.xml/yaml 구성 파일에서 여러 인증 메서드를 지정할 수 있습니다(SQL에서는 원래부터 가능했습니다). #91998 (Flip-Liquid).
  • TLS를 사용하는 Raft 노드 간 연결을 자동으로 재로드합니다. #93455 (Evgeny).
  • cast_keep_nullable가 Dynamic/JSON 타입에서도 동작하도록 확장되었습니다. 이 옵션을 설정하면 널 허용(Nullable) 가능한 타입에서 NULL을 캐스팅할 때 NULL을 반환하고, 그렇지 않으면 CANNOT_INSERT_NULL_IN_ORDINARY_COLUMN 오류를 발생시킵니다. #96504 (Seva Potapov).
  • 객체 풀을 도입해 내부 데이터 구조(ISerialization 객체)의 메모리 점유량을 줄였습니다. #96563 (Nikita Mikhaylov).
  • keeper-client XML 설정에 passwordidentity 필드 지원을 추가했습니다. #96800 (Grigorii Sokolik).
  • Unity Catalog용 Iceberg 쓰기 기능을 개선했습니다. #98162 (Konstantin Vedernikov).
  • finalize_projection_parts_synchronously 설정을 추가해 INSERT 중 프로젝션 파트를 동기적으로 최종화할 수 있도록 했습니다. 기본적으로는 기존 비동기 동작을 유지하면서, 프로젝션이 많은 테이블의 피크 메모리 사용량을 줄일 수 있습니다. #98228 (Amos Bird).
  • 각 프로젝션의 머지/재빌드 소요 시간을 밀리초 단위로 기록하는 projections_duration_ms 컬럼을 system.part_log에 추가했습니다. #98292 (Amos Bird).
  • KILL QUERY와 clickhouse-client의 쿼리 취소(Ctrl+C)를 통해 ExpressionTransform 및 NumbersRangedSource에서의 쿼리 취소를 개선했습니다. #98908 (Roman Vasin).
  • 하드코딩된 source_table_engines 목록을 StorageFactory::getAllStorages()를 통한 런타임 조회로 대체했습니다. 이 변경으로 일부 누락된 테이블 엔진에 대한 접근 검사도 추가되었으며, #71544가 해결되었습니다. #98984 (pufit).
  • Variant 및 Dynamic의 유형 불일치 시 동작(throw 또는 NULL 반환)을 제어하는 설정을 추가했습니다. #99085 (Bharat Nallan).
  • Iceberg 및 Spark 호환성 개선: 저장소 경로와 메타데이터 경로를 혼용하면서 발생한 일관성 없는 경로 처리 문제를 수정하고, Iceberg 테이블이 테이블 위치를 URL 또는 절대 경로로만 기록하도록 강제했으며, 일부 ClickHouse 리더는 순회 후 바이트 수 계산을 지원하지 않으므로 Azure에서 파일 크기 계산을 위한 폴백을 추가했고, Spark와 호환되는 방식으로 version-hint.txt를 처리하며, 앞으로 경로 타입이 혼동되지 않도록 타입 수준 추상화를 도입했고, 중간 업로드/다운로드 없이 엔진 간 상호 운용성을 검증하는 AzureLocal 테스트를 추가했으며, 이전에는 적절하지 않은 경로 추론 휴리스틱에 의존하던 위치 삭제 사용도 수정했습니다. #99163 (Daniil Ivanik). #100420 (Daniil Ivanik).
  • https://github.com/ClickHouse/ClickHouse/pull/92844에서 도입된 IPartitionStrategy::cached_result의 잠재적인 경쟁 조건을 수정했습니다. #99400 (Arthur Passos).
  • 이제 ClickHouse 인터벌 데이터 타입을 Arrow 형식으로 작성할 수 있습니다. #99519 (Peter Nguyen).
  • ArrowParquet 포맷에서 UUID 데이터 타입을 가져오고 내보내는 기능에 네이티브 지원이 추가되었습니다. 이제 사용자는 수동으로 문자열 변환을 하거나 별도 우회 방법을 쓰지 않고도 ClickHouse와 다른 데이터 도구 간에 UUID 데이터를 직접 쿼리하고 전송할 수 있습니다. 최상위 UUID에 대해서는 자동 논리 추론을 지원하며, 중첩 UUID에 대해서는 명시적 스키마 힌트도 지원합니다. #99521 (Ivan).
  • 객체 스토리지에서 7z 아카이브를 지원합니다. #70968을 해결합니다. #99600 (Alexey Milovidov).
  • 객체 스토리지(S3, Azure 등) 파일 목록 조회 및 읽기 파이프라인을 내부 검사할 수 있도록 ObjectStorageListedObjects, ObjectStorageGlobFilteredObjects, ObjectStoragePredicateFilteredObjects, ObjectStorageReadObjects ProfileEvents를 추가했습니다. #99778 (Sema Checherinda).
  • 모든 기반 분산/원격 테이블에 없는 컬럼을 쿼리할 때 UNKNOWN_IDENTIFIER 오류로 merge 테이블 함수가 실패하던 문제를 수정했습니다. #99833 (Alexey Milovidov).
  • 이제 ReplicatedMergeTree의 mutation 총 실행 시간 메트릭에 커밋 시간도 포함됩니다. 이는 #96376 이후 누락되어 있었습니다. #99936 (alesapin).
  • MetadataStorageFromDisk에 삭제 대기 중인 blob 객체를 위한 write-ahead log를 추가해, 객체 삭제 시 메타데이터와 원격 객체 스토리지 간의 내구성과 일관성을 개선했습니다. #100019 (Maksim Kita).
  • server 환경 변수에 대한 접근을 방지하기 위해, 내장 클라이언트(SSH 및 WebSocket 프로토콜)에서 AI SQL 생성(?? 명령)을 비활성화했습니다. #100290 (Alexey Milovidov).
  • catalog를 통한 Iceberg 삽입 인터페이스를 변경합니다. 다음 설정은 폐기 예정입니다: storage_catalog_type, storage_aws_access_key_id 등. #100334 (Konstantin Vedernikov).
  • clickhouse-client에 붙여넣을 때 탭이 공백 4개로 렌더링되도록 합니다. #100405를 닫습니다. #100416 (Raúl Marín).
  • show_data_lake_catalogs_in_system_tables가 비활성화된 경우, 「혹시 …을(를) 의미하셨나요?」 테이블 힌트를 표시하기 위해 원격 데이터 레이크 카탈로그 전체를 스캔하지 않도록 개선했습니다. #100452 (Alsu Giliazova).
  • 파티션 프루닝 이후 distributed_index_analysis_min_indexes_bytes_to_activate가 적용됩니다. #100477 (Azat Khuzhin).
  • 빈 IN/NOT IN 절을 사용할 때 Parquet 블룸 필터 push down에서 발생하던 assertion failure를 수정했습니다. #100543 (zoomxi).
  • 이제 MinMax 컬럼 통계는 최소값과 최대값을 Float64 대신 타입이 지정된 Field로 저장합니다. 직렬화된 포맷에는 값과 함께 컬럼 타입 이름도 포함됩니다. 통계 파일 버전은 V2로 올라갔으며, 이전 버전에서 작성된 파일은 다시 구체화해야 합니다(ALTER TABLE … MATERIALIZE STATISTICS ALL). 수정 #53140. #100605 (Han Fei).
  • Consumer 종료 시 발생하는 교착 상태 수정 사항을 포함하도록 cppkafka를 업데이트합니다. #100612 (Azat Khuzhin).
  • 이제 Iceberg에서 데이터 파일을 파싱할 때 사용되는 객체 정보에 manifest 파일에서 파싱된 파일 행 수와 바이트 단위의 파일 크기가 포함됩니다. #100645 (Daniil Ivanik).
  • 캐시 메모리 아레나를 분리할지 제어할 수 있도록 use_separate_cache_arena 구성 매개변수를 추가했습니다. #100664 (Seva Potapov).
  • Apache Arrow의 StringViewBinaryView 데이터 타입을 ClickHouse String 컬럼으로 가져올 수 있도록 네이티브 지원을 추가하여 Arrow 기반 수집의 호환성을 개선했습니다. #100762 (Ivan).
  • 이제 런타임 중 구성 파일이 변경되면 일부 Keeper server 설정이 즉시 다시 로드됩니다: max_requests_batch_size, max_requests_batch_bytes_size, max_request_size, quorum_reads. #100773 (Michael Kolupaev).
  • 릴리스 빌드에서 profile events MemoryAllocatedWithoutCheck/MemoryAllocatedWithoutCheckBytes의 카운트를 증가시켰습니다. #100899 (Pavel Kruglov).
  • 이제 Cgroupv2 메모리 추적에서는 커널 메모리에서 slab_reclaimable을 제외하여, 회수 불가능한 메모리 사용량을 더 정확하게 측정합니다. #100901 (Antonio Andelic).
  • use_partition_pruning = 0은 이제 파티션 키 기반 프루닝뿐만 아니라, 파티션 키 컬럼에 대한 MinMax 인덱스 프루닝과 count 최적화도 비활성화합니다. #100904 (Nihal Z. Miaji).
  • EXPLAIN [PLAN]에서 pretty=1을 사용하면 이제 표현식이 사람이 읽기 쉬운 포맷으로 출력됩니다. #100927 (Kirill Kopnev).
  • accurateCastOrNullaccurateCastOrDefault가 이제 Tuple 대상 타입을 지원하며, 여기에는 널 허용 요소를 포함하는 중첩 튜플도 포함됩니다. 이전에는 TupleNullable 내부에 포함될 수 없었기 때문에 이러한 함수에서 Tuple 대상을 허용하지 않았습니다. #100820을 해결했습니다. #100942 (Nihal Z. Miaji).
  • 밝은 테마와 어두운 테마를 전환할 때 실행 UI에서 차트가 중복 표시되는 문제를 수정했습니다. #101058 (Alexey Milovidov).
  • chdig를 v26.3.1로 업데이트(perfetto UI, CPU/메모리/머지/쿼리 요약에 스파크라인 추가, system.warnings, 로그에서 regexp 검색). #101092 (Azat Khuzhin). chdig를 v26.4.3로 업데이트(perfetto 개선, pastila.nl을 통한 공유 관련 수정, 플레임 그래프 diff, 설정을 실시간으로 변경). #103145 (Azat Khuzhin).
  • 이제 SELECT 쿼리 앞의 WITH 절 끝에도 후행 쉼표를 사용할 수 있습니다. #101093 (Aruj Bansal).
  • compress_per_column_in_compact_parts MergeTree 설정을 추가하여 압축 블록이 Compact 파트 내부에서 구성되는 방식을 제어할 수 있게 했습니다. true(기본값, 현재 동작 유지)인 경우 각 컬럼이 새 압축 블록에서 시작하므로 필요한 컬럼만 선택적으로 압축 해제할 수 있습니다. false인 경우 하나의 granule 내 모든 컬럼이 동일한 압축 블록에 패킹되어, 항상 모든 컬럼을 읽는 워크로드에서 압축률과 읽기 성능이 향상됩니다. #101114 (Amos Bird).
  • Play UI에서 테이블 정보 말풍선이 전체 행이 아니라 테이블 이름에 마우스를 올렸을 때만 표시되도록 개선했습니다. #101118 (Alexey Milovidov).
  • Play UI 사이드바에 엔진별 아이콘을 추가하고 테이블 목록의 UX를 개선했습니다. #101134 (Alexey Milovidov).
  • Arrow, ArrowStream, ORC, 레거시 Parquet 포맷에서 Nullable(Tuple)를 지원합니다. #101272 (Nihal Z. Miaji).
  • 웹 UI(play.html)에서 합계(TOTALS) 행을 테이블 푸터에 표시합니다. #101286 (Alexey Milovidov).
  • 웹 UI(play.html)에서 다중 쿼리 모드를 지원합니다. SELECT 계열 쿼리를 병렬로 실행하고 각 쿼리의 결과를 개별적으로 표시하면서 여러 쿌리를 한 번에 실행할 수 있습니다. #101290 (Alexey Milovidov).
  • 결과 테이블이 웹 컴포넌트로 리팩터링된 이후 play.html 웹 UI에서 컬럼 크기 조정이 올바르게 동작하지 않던 문제를 수정했습니다. #101295 (Alexey Milovidov).
  • 시간 인터벌별로 MEMORY_LIMIT_EXCEEDED 발생 시 jemalloc profile 플러시 횟수를 제한하는 기능을 추가했습니다. #101396 (Azat Khuzhin).
  • Keeper 설정 nuraft_streaming_mode(기본값 false), nuraft_max_log_gap_in_stream, nuraft_max_bytes_in_flight_in_stream가 추가되었습니다. #90743를 해결합니다. #101427 (Kseniia Sumarokova).
  • 커널 OS 페이지 캐시와 ClickHouse 사용자 공간 페이지 캐시를 모두 제외한 cgroup 메모리 사용량을 보고하는 비동기 메트릭 CGroupMemoryUsedWithoutPageCache가 추가되었으며, MemoryResidentWithoutPageCache와 동일한 방식입니다. 또한 CGroupMemoryUsed 메트릭 설명도 더 명확히 했습니다. #101513 (Francesco Ciocchetti).
  • SQL 표준 OVERLAY 함수 구문에 파서(parser) 수준의 문법 편의 구문을 추가합니다. overlay 함수는 이미 존재하며, 이번 변경으로 PLACING, FROM, FOR를 구분자로 사용하는 키워드 기반 형식도 지원합니다. #101681 (Desel72).
  • 시스템 테이블 information_schema.tables에 컬럼 별칭 INDEX_LENGTH가 추가되었습니다. 이는 이 테이블에 이미 있는 기존 대문자 별칭과 동일한 방식입니다. #101705 (Robert Schulze).
  • 시스템 테이블(system table) information_schema.tables는 이제 비활성 테이블 파트를 무시합니다. 이에 따라 표시되는 테이블 크기 값이 더 현실적으로 표시됩니다. #101706 (Robert Schulze).
  • 이제 ngrams 함수는 유효하지 않은 ngram 길이를 허용하지 않습니다. 예시: SELECT ngrams('abc', 0)는 이제 오류를 반환합니다. #101922 (Robert Schulze).
  • #91820#90837의 후속 작업: 오류 메시지에서 지원되지 않는 알고리즘을 걸러내고, FIPS 빌드에서는 FIPS 전용 테스트를 실행합니다. #102067 (Mikhail f. Shiryaev).
  • Web UI(play.html)에서 셀 높이를 3줄로 제한하고, 클릭하면 셀이 확장되도록 개선했습니다. #102154 (Alexey Milovidov).
  • S3 endpoint에 대해 (virtual/path) 스타일을 강제할 수 있는 새 옵션이 추가되었습니다. #82019, #76007 문제를 해결합니다. https://github.com/ClickHouse/ClickHouse/pull/83168의 후속 작업입니다. #102378 (Konstantin Vedernikov).
  • 이제 restore_replace_external_engines_to_null 설정은 실패하거나 외부 연결을 시작하는 대신, 외부 엔진(예: DataLakeCatalog, MySQL, PostgreSQL, S3)을 사용하는 데이터베이스를 복원할 때도 해당 데이터베이스를 건너뜁니다. #102400 (Nikita Fomichev).
  • HINT 모드에서 hasPhrase 함수의 텍스트 인덱스 분석을 지원하도록 했습니다. #102438 (Elmi Ahmadov).
  • ColumnDependency에서 STATISTICS를 읽기 전용으로 간주하여 MATERIALIZE STATISTICS ALL 수행 중 발생하는 LOGICAL_ERROR를 수정합니다. #102627 (Konstantin Bogdanov).
  • keeper-as-server 모드에서 system.asynchronous_metric_log를 생성하고 데이터를 채웁니다. #102664 (Miсhael Stetsyuk).
  • 시스템 로그 테이블에서 ALIAS 컬럼을 생략할 수 있도록 default_system_log_flush_policy.skip_alias_columns 구성 옵션을 추가하여, ALIAS 컬럼을 거부하는 S3 기반 시스템 로그 문제를 해결했습니다. #102669 (Miсhael Stetsyuk).
  • 시스템 테이블에는 자동 통계를 활성화하지 마십시오. 이를 사용할 일은 거의 없습니다. #102862 (Han Fei).
  • LIKE 최적화에서 array 토크나이저를 지원합니다. #102880 (Elmi Ahmadov).
  • 릴리스 빌드에서도 MemoryAllocatedWithoutCheck를 전송하도록 했습니다. #103064 (Azat Khuzhin).
  • system.stack_trace에 스레드별 untracked_memory를 표시합니다. #103065 (Azat Khuzhin).

버그 수정(공식 안정 릴리스에서 사용자에게 영향을 주는 오동작)

  • Lazy materialization에서 반환되는 불필요한 컬럼으로 인해 발생하는 Block structure mismatch in stream 오류를 수정했습니다. #95191을 해결합니다. #96682 (Nikolai Kochetov).
  • ON CLUSTER를 사용하는 데이터 마스킹 정책 쿼리의 논리 오류를 수정했습니다. #97594 (Bharat Nallan).
  • GCS에서 Unity Catalog를 사용할 때 발생하던 버그를 수정했습니다. #98456 (Melvyn Peignon).
  • DataLakeCatalog는 이제 auth_header 설정을 검증할 때 서버의 http_forbid_headers 구성을 따릅니다. #98827 (Michael Anastasakis).
  • S3 중괄호 확장 글롭 패턴에서 발생하던 N+1 HeadObject 호출을 수정했습니다. #99219 (Konstantin Bogdanov).
  • 엔진 자체에서도 설정을 지원하는 경우 CREATE 쿼리의 설정 변경 사항을 검증합니다. #99279 (János Benjamin Antal).
  • 표현식이 EPHEMERAL 컬럼에 의존하는 MATERIALIZED 컬럼이 있는 테이블에서 ALTER TABLE UPDATE/DELETEMissing columns 오류로 실패하던 문제를 수정했습니다. #99281 (Yash ).
  • JDBC, ODBC 및 NATS 연결 문자열의 자격 증명은 이제 쿼리 로그와 SHOW CREATE 출력에서 마스킹되어, 민감한 정보가 실수로 노출되는 일을 방지합니다. URI 스타일 연결 문자열(예: {scheme}://{user}:{password}@{host})의 경우 비밀번호 부분만 마스킹되고, 나머지 부분은 디버깅을 쉽게 할 수 있도록 계속 표시됩니다. 이제 nats_token 설정도 마스킹됩니다. #99344 (János Benjamin Antal).
  • DD-month-YYYY 형식에서 month 프리픽스로 시작하는 단어를 parseDateTimeBestEffort가 잘못 파싱하는 문제를 수정했습니다. #99345를 해결합니다. #99350 (Pavel Kruglov).
  • 분석기를 사용하지 않을 때 TABLE_UUID_MISMATCH를 무시하던 문제를 수정했습니다. #99380 (Azat Khuzhin).
  • compatibility와 함께 동일한 요청으로 전송된 명시적 설정의 값이 서버 기본값과 일치할 경우, 해당 설정이 조용히 무시될 수 있던 버그를 수정했습니다. #99402 (Raufs Dunamalijevs).
  • hive 파티셔닝 경로에서 앞에 0이 붙은 숫자로 인해 오류가 발생하던 문제를 수정했습니다. #98801. #99458 (Yarik Briukhovetskyi).
  • 실행 중인 읽기 쿼리와 동시에 테이블이 삭제될 때 발생하는 heap-use-after-free 문제를 수정했습니다(CI에서 지난 90일 동안 19회 발생). #99483 (Alexey Milovidov).
  • Keeper에서 읽기 요청이 멈춰 세션 시간이 초과될 수 있던 버그를 수정했습니다. 이 문제는 동일한 서버에서 서로 무관한 다른 세션이 절묘하게 잘못된 시점에 종료될 때 발생할 수 있었습니다. #99484 (Michael Kolupaev).
  • 패치 적용 전에 컬럼 구조를 검증합니다. #99531 (Seva Potapov).
  • Dynamic 컬럼이 있는 테이블에서 수직 병합 중 SYSTEM STOP/START MERGES를 빠르게 전환할 때 발생하는 rows_sources assertion 실패를 수정했습니다. #99532 (Alexey Milovidov).
  • toWeek()의 잘못된 파티션 프루닝을 수정하여 toYYYYMM(date)로 파티션된 테이블에서 WHERE toWeek(date, mode) = N 쿼리가 49~52주차에 빈 결과를 반환하던 문제를 해결했습니다. #99542 (Takumi Hara).
  • JOIN으로 생성된 미참조 행이 있는 ColumnReplicated를 처리하는 함수에서 발생하던 예외를 수정했습니다. #99564 (Hechem Selmi).
  • CLEAR COLUMN이 프로젝션을 다시 빌드하지 않고, 비워진 컬럼에 의존하는 materialized 컬럼도 재평가하지 않던 문제를 수정했습니다. 이 문제는 이후 머지 과정에서 예외나 데이터 손상을 일으킬 수 있었습니다. #99565 (Desel72).
  • 테이블에 컬럼 통계(column statistics)가 있고 use_statistics가 활성화된 상태에서, 쿼리가 단일 스칼라 쿼리 매개변수(예: WHERE col IN ({p:String}))와 함께 IN을 사용할 때 ConditionSelectivityEstimator에서 발생하던 예외(Bad get: has Tuple, actual type String)를 수정했습니다. #99614 (Ilya Yatsishin).
  • 알 수 없는 프로젝션이 있는 파트는 영구 손실로 표시되어서는 안 됩니다. #99623 (Sema Checherinda).
  • SYSTEM STOP MERGESSYSTEM START MERGES가 동시에 실행되는 경우 수직 병합 중 드물게 발생하던 논리 오류 예외를 수정했습니다. #99628 (Desel72).
  • 머지 중 크래시를 일으키던 injectRequiredColumns의 댕글링 참조를 수정했습니다. #99679 (Tuan Pham Anh).
  • 숫자 값이 대상 컬럼 유형의 표현 범위를 초과할 때 Avro 포맷 리더에서 발생하던 정의되지 않은 동작을 수정했습니다. 이제는 잘못된 값을 조용히 생성하는 대신 오버플로우가 발생하면 쿼리가 실패합니다. #99697 (asyablue22).
  • executable 테이블 함수 인수의 셸 스타일 따옴표 파싱을 수정했습니다. #99794 (Nikita Semenov).
  • 행 수가 일치하지 않는 Native 형식 스트림을 역직렬화할 때 NativeReader에서 발생하던 오탐 abort를 수정했습니다. LOGICAL_ERRORINCORRECT_DATA로 변경해, 새니타이저/디버그 빌드에서 abort()를 트리거하는 대신 데이터 오류로 처리되도록 했습니다. #99822 (Rahul Nair).
  • 바이너리 스트림의 직렬화 종류가 DETACHED일 때 Tuple 컬럼 역직렬화 과정에서 프로세스가 비정상 종료되는 문제를 수정했습니다. #99823 (Rahul Nair).
  • SLRU 하위 큐 승격 과정의 경쟁 상태로 인해 파일 시스템 캐시를 동적으로 리사이즈할 때 잘못된 LOGICAL_ERROR 예외가 발생하던 문제를 수정했습니다. #99850 (Alexey Milovidov).
  • query_log 및 클라이언트 출력에서 written_rows, read_rows, result_rows가 0으로 보고되던 async insert 쿼리 문제를 수정했습니다. #99879 (Sema Checherinda).
  • system tables에 대한 내부 쿼리가 ColumnConst로 감싼 컬럼을 반환할 때 KILL QUERY에서 발생하던 “Bad cast from type X to Y” 예외를 수정했습니다. #99881 (Alexey Milovidov).
  • untuple 인수 내부의 상관 서브쿼리에서 발생하던 논리 오류를 수정했습니다. #99917 (Vladimir Cherkasov).
  • right, rightUTF8 또는 기타 substring 함수에 길이로 INT64_MIN (-9223372036854775808)을 지정해 호출할 때 발생하던 예외를 수정했습니다. 이전에는 정수 오버플로우로 인해 정의되지 않은 동작이 발생했지만, 이제는 함수가 ARGUMENT_OUT_OF_BOUND 오류를 올바르게 보고합니다. #99934 (Jimmy Aguilar Mena).
  • 이제 ClickHouse는 spark 스타일 테이블(각 파일에 전체 절대 경로가 있거나 공통 테이블 경로를 기준으로 한 상대 경로가 있는 경우)을 올바르게 처리합니다. #92348를 수정했습니다. #99935 (alesapin).
  • ALTER TABLE ... MODIFY QUERY에서 중첩된 서브쿼리에 SETTINGS가 포함되어 있고 ALTER 자체에도 SETTINGS가 있을 때 발생하던 “AST 포맷 불일치” 예외를 수정했습니다. #99938 (Nikita Mikhaylov).
  • 성능 회귀가 의심되어 #97114 “자식 노드가 1개인지 확인하기 전에 join 단계의 행 수 추정을 수행하도록 변경”을 되돌렸습니다. #99957 (Alexander Gololobov).
  • HEAD 요청 응답에 Content-Length 헤더가 없을 때(예: GCS의 압축 해제 트랜스코딩으로 인해) ClickHouse가 파일을 건너뛸 수 있던 버그를 수정했습니다. #99971 (Yarik Briukhovetskyi).
  • 짝수 정수 상수로 NumericIndexedVector aggregate states를 곱할 때, pointwiseAddInplace에서 별칭이 있는 Roaring 비트맵에 자체 XOR가 수행되어 발생하던 assertion failure(디버그 빌드에서는 예외, 릴리스 빌드에서는 잘못된 결과)를 수정했습니다. #99976 (Desel72).
  • 연쇄된 JOIN USING에서 조인 변환 후 키 타입이 변경되더라도, 레거시 필터 푸시다운 중 Unexpected return type 예외가 발생하지 않도록 수정했습니다. #99999 (Alexey Milovidov).
  • 해석되지 않은 테이블 함수 인수 안에서 스칼라 서브쿼리를 사용할 때 발생하는 LOGICAL_ERROR 예외 “테이블 표현식에 대해 예상하지 못한 노드 유형 … 실제는 IDENTIFIER”를 수정했습니다. 예: SELECT * FROM remote('localhost', view(SELECT 2 AS x), concat(x, (SELECT 1))). #100014 (Alexey Milovidov).
  • 다음 줄에 후행 SQL 주석(-- 또는 /* */)이 있는 경우, 데이터 뒤에 이어지는 VALUES를 사용한 INSERT가 실패하던 문제가 수정되었습니다. 이제 해당 주석은 다른 행으로 구문 분석되는 대신 건너뜁니다. #100016 (Pratima Patel).
  • arrayRemove에서 NULL 요소를 포함한 튜플을 비교할 때 발생하던 예외를 수정했습니다. #100017 (Alexey Milovidov).
  • system.asynchronous_inserts에서 사용자 간 데이터 유출 문제를 수정했습니다. 이전에는 해당 테이블에 대한 SELECT 권한이 있는 사용자가 다른 사용자의 대기 중인 async insert 항목을 볼 수 있었지만, 이제는 SHOW_USERS 권한이 있는 경우를 제외하면 현재 사용자 기준으로만 항목이 필터링됩니다. #100024 (Shaohua Wang).
  • Time64를 UInt64로 CAST할 때 값이 24시간으로 잘릴 수 있던 문제를 수정했습니다. #100025 (Yarik Briukhovetskyi).
  • 목록 값에 존재하지 않는 함수가 포함된 정의가 있는 CREATE DICTIONARY에서 로컬 server가 충돌하던 문제를 수정했습니다. #100036 (Yakov Olkhovskiy).
  • CSV, MsgPack 포맷에서 Nullable(Tuple)을 올바르게 파싱하지 못하던 문제를 수정했습니다. #99753를 해결합니다. #100038 (Nihal Z. Miaji).
  • IN의 오른쪽에 WITH 함수 표현식 별칭(예: tuple(...))을 사용할 때 UNKNOWN_IDENTIFIER로 인해 CREATE VIEW가 실패하던 문제를 수정했습니다. #100042 (Peng).
  • 병렬 레플리카 환경에서 initializeAggregation 또는 AggregatingMergeTree와 함께 사용할 때 시계열 집계 함수(예: timeSeriesResampleToGridWithStaleness)가 ILLEGAL_TYPE_OF_ARGUMENT로 실패하던 문제를 수정했습니다. #100053 (Alexey Milovidov).
  • NumericIndexedVectorDataBSI 내부에서 음수 값이 올바르게 처리되도록 수정했습니다. #100086 (Daniil Ivanik).
  • 상수 입력에서 Const 컬럼 유형이 유지되지 않던 accurateCastOrDefaultto*OrDefault 함수 문제를 수정했습니다. #100132 (Alexey Milovidov).
  • LowCardinality(Nullable(T)) 유형의 생략된 쿼리 매개변수는 이제 Nullable(T)와 동일하게 기본값이 올바르게 NULL로 설정됩니다. #100144 (Denys Melnyk).
  • StringSearcher.h의 초기화되지 않은 값 사용 문제를 수정했습니다. #100225 (Konstantin Bogdanov).
  • Ctrl+C로 스칼라 서브쿼리와 기타 분석 시점 파이프라인을 취소할 수 있도록 했습니다. 이전에는 오래 실행되는 스칼라 서브쿼리 도중 Ctrl+C를 눌러도 서브쿼리가 완료될 때까지 아무런 효과가 없었습니다. 또한 진행률 표시줄과 JSON 통계가 스칼라 서브쿼리 실행 중 읽은 행 수를 clickhouse-clientclickhouse-local 모두에서 올바르게 표시하도록 수정했습니다. @YjyJeff와 공동 작성했습니다. #100230 (Raúl Marín).
  • 교차 조인 및 런타임 필터가 포함된 Dynamic 컬럼 관련 쿼리에서 발생하던 LOGICAL_ERROR 예외를 수정했습니다. 원인은 hasOnlyNulls 최적화 경로에서 ColumnVariant::filter가 variant 컬럼 포인터를 복제하는 대신 공유하던 것이었습니다. https://github.com/ClickHouse/ClickHouse/pull/100147을(를) 닫습니다. #100234 (Pavel Kruglov).
  • arrayFirst/arrayLast 함수를 호출할 때 variant 배열의 데이터 타입이 잘못 재해석될 수 있던 버그를 수정했습니다. 예를 들어, 이전에는 실제 내부 variant 타입이 Date인 경우 Array(Variant(Date, Bool))Bool로 변환되었습니다. #100255 (timothygk).
  • 함수에 몇 가지 사소한 변경이 있었습니다. h3 함수는 이제 경계를 더 정확히 검증하고, readWKB는 크기 제한(새로운 설정 max_wkb_geometry_elements)을 확인하며, 난수 생성기 함수는 계산 중 최대 반복 횟수를 제한합니다. #93543의 후속 조치입니다. #100270 (Alexey Milovidov).
  • cutURLParameter에서 매개변수가 다른 매개변수의 부분 문자열로 포함된 경우, 해당 매개변수를 잘못 건너뛰는 문제를 수정했습니다. #100280 (Nikita Semenov).
  • Iceberg 메타데이터 파일 경로 설정에 널 바이트가 포함된 경우 발생하던 예외를 수정했습니다. #100283 (Alexey Milovidov).
  • distributed_index_analysisIN 서브쿼리를 포함한 프레디케이트와 함께 사용할 때 실행 쿼리 수가 2차적으로 증가하던 문제를 수정했습니다. #100287 (Anton Popov).
  • GROUP BY ... WITH TOTALS HAVING, UNION DISTINCT, 그리고 널 허용 표현식을 함께 사용할 때 발생하던 “Block structure mismatch” 예외를 수정했습니다. #100293 (Alexey Milovidov).
  • block_size_bytes 매개변수가 매우 클 때 estimateCompressionRatio에서 발생하는 LOGICAL_ERROR 예외를 수정했습니다. #100298 (Alexey Milovidov).
  • 디버그 빌드에서 GROUP BY CUBE(...) WITH ROLLUP 또는 이와 유사한 조합을 사용할 때 발생하던 “일관되지 않은 AST 포맷팅” 예외를 수정했습니다. #100376 (Alexey Milovidov).
  • SELECT * 또는 EXCEPT/INTERSECT 쿼리와 컬럼 별칭을 사용하는 뷰를 생성할 때 발생하던 예외를 수정했습니다. #100386 (Alexey Milovidov).
  • heartbeat 오류가 발생한 뒤 컨슈머가 리밸런싱 상태에 고착되었을 때 Kafka engine 테이블에서 DROP TABLE이 무기한 대기하는 문제를 수정했습니다. #100388 (Alexey Milovidov).
  • zip 아카이브를 사용하는 백업/복원 작업에서 ReadBuffer is canceled. Can't read from it. 예외가 발생하던 문제를 수정했습니다. #100400 (Alexey Milovidov).
  • 데이터가 서로 맞지 않는 granule 경계를 가진 여러 파트에 분산되어 있을 때, max_rows_to_read / force_primary_key를 사용하는 SELECT count() 쿼리에서 발생하는 TOO_MANY_ROWS 예외를 수정했습니다. #100408 (Alexey Milovidov).
  • 테이블별, DB별, 컬럼별 revoke를 포함한 모든 grant 조합에서 system.completions가 접근 권한에 따라 데이터베이스, 테이블, 컬럼을 올바르게 필터링하도록 수정했습니다. #100432 (Shaohua Wang).
  • race condition으로 인해 NuRaft에서 발생하던 SEGFAULT를 수정했습니다. #100444 (Pablo Marcos).
  • min/max/argMin/argMax가 이제 NaN을 ORDER BY와 일관되게 처리합니다. NaN은 항상 건너뛰고(모든 값이 NaN인 경우에만 반환됨), 이전에는 IEEE 754의 비순서 비교 시맨틱 때문에 결과가 데이터 내 NaN의 위치에 따라 달라졌습니다. #100448 (Raúl Marín).
  • delta_lake_snapshot_start_version 없이 delta_lake_snapshot_end_version만 설정된 경우, BAD_ARGUMENTS 오류를 발생시키는 대신 그대로 무시되던 복사-붙여넣기 버그를 수정했습니다. #100454 (Mohammad Lareb Zafar).
  • StorageRabbitMQ::shutdown은 멱등적이지 않습니다(weak pointer에 무조건 접근한 뒤 해당 shared pointer를 파괴함). 하지만 이제 이 메서드는 두 번 호출됩니다. 한 번은 StreamingStorageRegistry에서, 그다음은 DatabaseCatalog에서 호출됩니다. 이번 수정으로 이 메서드가 멱등적으로 동작하도록 변경하고, 방어적인 null 검사도 추가했습니다. #100455 (Miсhael Stetsyuk).
  • QBit 대상 유형에서 accurateCastOrNull 사용 시 발생하던 LOGICAL_ERROR 예외를 수정했습니다. #100470 (Raufs Dunamalijevs).
  • nested Array(JSON) 컬럼이 있는 테이블에 optimize_on_insert=0으로 wide 파트에 삽입할 때 발생하던 LOGICAL_ERROR 예외 “Stream … not found” 문제를 수정했습니다. #100475 (Pavel Kruglov).
  • 백업 메타데이터에서 파일 항목의 경로를 검증해 RESTORE 중 경로 순회, 절대 경로, 빈 이름을 차단합니다. #100483 (Pablo Marcos).
  • 작동하지 않던 LIMIT m OFFSET n WITH TIES 구문 문제를 수정했습니다. 이 구문은 이미 작동하던 LIMIT n, m WITH TIES와 동일합니다. #100491 (Nihal Z. Miaji).
  • IN을 사용할 때 이름 있는 필드와 LowCardinality 요소가 포함된 Nullable(Tuple) 컬럼에서 발생하는 예외 “No set is registered for key”를 수정했습니다. #100523 (Alexey Milovidov).
  • 벡터 유사도 검색 중 크래시를 일으키거나 즉시 드러나지 않게 메모리를 손상시킬 수 있던 usearch sorted_buffer_gt::insert()의 heap-buffer-overflow를 수정했습니다. #100537 (Dustin Healy).
  • EXECUTE AS가 쿼리에서 지정된 FORMATINTO OUTFILE 절을 무시하던 문제를 수정했습니다. #100538 (pufit).
  • 쿼리 수준 OFFSET이 있는 SAMPLE의 일관되지 않은 AST 포맷을 수정했습니다. #100576을 해결합니다. #100579 (Pavel Kruglov).
  • Azure에서 polaris catalog 관련 문제를 수정했습니다. 25.12부터는 Azure에서 이 catalog를 사용할 때 경로 시작 부분에 버킷이 추가되기 시작했습니다. 예를 들어 abfss://polaris-polaris@<some_url>.windows.net/<other-path> 대신 abfss://polaris-polaris@<some_url>.windows.net/polaris-polaris/<other-path>가 되었습니다. 이 PR은 경로에서 버킷을 제거합니다. #100583 (Konstantin Vedernikov).
  • 일부 블록에서 기본 컬럼이 const인 경우 transform에서 발생하던 type mismatch 예외를 수정했습니다. #100574를 해결합니다. #100616 (Pavel Kruglov).
  • projection SELECT 부분에 쿼리의 원래 SELECT 부분에 없는 컬럼이 포함된 경우 발생하는 NOT_FOUND_COLUMN_IN_BLOCK 문제를 수정합니다. #100194을 해결합니다. #100623 (Yarik Briukhovetskyi).
  • 비정상적으로 큰 차원을 가진 조작된 .npy 파일로 인한 서비스 거부를 방지하기 위해, Npy 포맷의 shape 차원을 파일 크기와 오버플로우 한도에 맞춰 검증합니다. 또한 빈 shape는 거부하고, 행당 메모리 사용량은 2 GiB로 제한합니다. #100625 (Raúl Marín).
  • async inserts (TCP) 중과 HTTP를 통한 모든 삽입에서 DateTime 값을 파싱할 때 session_timezone이 무시되던 문제를 수정했습니다. #100647 (Sema Checherinda).
  • 소스로 테이블 함수를 사용할 때(예: cluster('name', view(...), sharding_key)), cluster()clusterAllReplicas() 테이블 함수에 sharding key를 전달할 수 있습니다. #100665 (Sergey Veletskiy).
  • 매개변수화된 집계 함수에서 Array combinator와 NULL 인수(예: quantileIfArrayArray(0.5)([[NULL]], [[1]]))를 사용할 때 발생하던 서버 충돌(assertion failure)을 수정했습니다. #100679 (nerve-bot).
  • use_variant_as_common_type가 활성화된 상태에서 빈 튜플과 비어 있지 않은 튜플의 공통 상위 타입을 계산할 때 발생하던 예외를 수정했습니다. #100699 (Antonio Andelic).
  • Azure blob storage 디스크가 구성되어 있지만 endpoint에 일시적으로 연결할 수 없는 경우(예: DNS 실패)에도 server가 더 이상 시작되지 못하는 문제가 발생하지 않습니다. #100701 (Raúl Marín).
  • 부호 없는 제수가 부호 있는 결과 타입에 담기지 않을 때 positiveModulo에서 발생하던 정의되지 않은 동작을 수정했습니다. #100705 (Raúl Marín).
  • use_top_k_dynamic_filtering이 활성화되어 있고 ORDER BY 컬럼이 Dynamic 또는 Variant 유형일 때 발생하던 서버 크래시(논리 오류 “Unexpected return type from __topKFilter”)를 수정했습니다. #100742 (Groene AI).
  • LowCardinality 요소를 포함한 Tuple 키에서 PREWHERE/WHERE와 함께 has() 함수를 사용할 때 발생하던 서버 충돌 문제를 수정했습니다. #100760 (Groene AI).
  • S3 객체 스토리지에서 동시 쓰기 환경의 Log 또는 StripeLog 테이블을 읽을 때 발생하는 file_offset_of_buffer_end <= getFileSize() 어서션 실패(디버그 빌드에서는 예외)를 수정했습니다. #100763 (Alexey Milovidov).
  • 통계가 활성화된 테이블에서 WHERE 절에 함수 표현식(예: toDecimal64(col, 3))이 포함될 때 선택도 추정기에서 발생하던 예외를 수정했습니다. 이제 추정기는 잘못된 형 변환을 시도하는 대신 이러한 프레디케이트를 건너뜁니다. #100764 (Han Fei).
  • 재정렬이 있는 join에서 잘못된 결과가 발생할 수 있는 드문 사례를 수정했습니다. #100790 (Yarik Briukhovetskyi).
  • 최적화된 단순 count에서 AggregateFunction 인수 타입이 잘못 처리되던 문제를 수정했습니다. 이 문제로 인해 분산 테이블에서 count(v0 + v1)와 같은 표현식을 쿼리할 때 NUMBER_OF_ARGUMENTS_DOESNT_MATCH 예외가 발생했습니다. #100794 (YjyJeff).
  • 일부 카탈로그에서는 select * from system.databases 쿼리 결과의 SETTINGS 섹션에 일부 시크릿이 표시될 수 있습니다. 이 PR은 이러한 동작이 발생하지 않도록 방지합니다. #100800 (Konstantin Vedernikov).
  • toStartOfInterval에서 origin 인수를 사용해 Week, Quarter 또는 Year 인터벌에 극단적인 인터벌 값을 적용할 때 발생할 수 있던 정의되지 않은 동작(부호 있는 정수 오버플로우)을 수정했습니다. #100817 (Raúl Marín).
  • Nullable(Tuple) 도입 이후 Tuple 반환 유형과 하나 이상의 Nullable 인수를 가진 If, Distinct, DistinctIf, IfState 집계 함수 조합자가 이전에 직렬화된 상태를 읽을 수 없던 문제를 수정했습니다. #98917을 해결합니다. #100826 (Nihal Z. Miaji).
  • 연결 풀에서 발생한 use-after-free로 인해 s3Cluster 및 분산 쿼리에서 발생하던 segfault를 수정했습니다. #100837 (Konstantin Bogdanov).
  • 서버 종료 중 딕셔너리를 로드할 때 발생하는 NULL 포인터 역참조 segfault를 수정했습니다. Context::getUserDefinedSQLObjectsStorage(user_defined_sql_objects_storage를 역참조함)는 딕셔너리 thread에서 호출되고, 동시에 메인 thread는 Context::shutdown(user_defined_sql_objects_storage를 null로 설정함)을 호출합니다. 따라서 Context::shutdown를 실행하기 전에 딕셔너리 로더에서 이후 업데이트를 비활성화하고, 현재 실행 중인 딕셔너리 쿼리를 종료하며, 딕셔너리 로딩 thread를 join해야 합니다. 이는 일반 쿼리에서 처리하는 방식과 유사합니다. #100839 (Miсhael Stetsyuk).
  • 입력에 ASCII가 아닌 바이트가 포함된 경우 ULIDStringToDateTime의 버퍼 오버플로우를 수정했습니다. #100843 (Konstantin Bogdanov).
  • 여러 테이블(Distributed 테이블 포함)을 래핑하는 Merge 테이블(또는 merge() 테이블 함수)을 distributed_group_by_no_merge=1이 활성화된 상태에서 쿼리할 때 발생하던 크래시(LOGICAL_ERROR)를 수정했습니다. #100859 (Groene AI).
  • Cast_keep_nullable가 활성화되면 dynamic null을 Variant로 CAST할 때 예외를 발생시키지 않습니다. #100864 (Seva Potapov).
  • clickhouse-keeper-clientget, exists, ls 명령에서 watch_id 중복 오류 메시지가 stderr가 아닌 stdout에 출력되던 문제를 수정했습니다. #100893 (Mohammad Lareb Zafar).
  • 널 허용 튜플 배열에서 발생하던 intDiv/intDivOrZero 예외를 수정했습니다. 예: SELECT intDiv([divide((1, 2), ... AND NULL)], 2). #100895 (Raúl Marín).
  • 정의를 저장하기 전에 StorageAlias의 엔진 인수를 평가하여 currentDatabase()와 같은 표현식이 데이터베이스에 저장되기 전에 리터럴 값으로 해석되도록 했습니다. #100902 (Nikolay Degterinsky).
  • query_plan_merge_expressions = 0이고 ExpressionStepReadFromMergeTree 바로 위에 있을 때 processAndOptimizeTextIndexFunctions를 수정했습니다. #100879를 해결합니다. #100909 (Jimmy Aguilar Mena).
  • replxx를 업데이트해 do_complete_line에서 발생하는 범위 외 접근 문제에 대한 수정이 포함되도록 했습니다. #100925 (Azat Khuzhin).
  • JOIN에서 세그먼트-by-PK 최적화를 사용할 때 쿼리 조건 캐시가 적용되고 일부 파트가 캐시된 조건으로 필터링되면 잘못된 결과가 나오던 문제를 수정했습니다. #100926 (Groene AI).
  • divideintDiv를 일부 경우 인덱스 분석 중 필터 표현식에서 사용하면 ILLEGAL_DIVISION이 반환되던 문제를 수정했습니다. #100928 (Nihal Z. Miaji).
  • 비동기 시작 중 시작 의존성 순서가 잘못되어 발생하던, 내부 테이블이 있는 materialized view의 “대상 테이블이 존재하지 않습니다” 오류를 수정했습니다. #100946 (Nikolay Degterinsky).
  • 18자리를 초과하는 초 단위 소수 자릿수를 포함한 datetime 문자열을 parsing할 때 parseDateTimeBestEffort에서 발생하는 정의되지 않은 동작(부호 있는 정수 오버플로우)을 수정했습니다. #100948 (Vasily Chekalkin).
  • IN 절에 튜플 서브쿼리가 포함된 경우(예: WHERE (id, str) IN (SELECT (id, str) FROM ...)) 또는 서브쿼리의 컬럼 수가 IN 왼쪽 튜플과 일치하지 않는 경우, 텍스트 검색 인덱스 사용 시 발생하던 비정상 종료를 수정했습니다. #100959 (Anton Popov).
  • MergeTree 테이블에서 희소 컬럼 직렬화를 사용할 때 폴리곤 딕셔너리를 생성하는 중 발생하던 충돌을 수정했습니다. #100964 (Anton Popov).
  • 상수 폴딩된 표현식과 함께 INTERSECT ALL / UNION ALL을 사용할 때 발생하는 논리 오류 “Invalid action query tree node”를 수정했습니다. #100977 (Alexey Milovidov).
  • Nullable(Tuple) 도입 이후 하나 이상의 Nullable 인수를 사용하는 sumCountOrDefault 집계 함수가 이전에 직렬화된 state를 읽지 못하던 문제를 수정했습니다. #100882를 해결했습니다. #101021 (Nihal Z. Miaji).
  • 지연 컬럼 복제(enable_lazy_columns_replication)가 뒤늦게 도착한 입력과 함께 머지-정렬 파이프라인으로 전달되는 ColumnReplicated 컬럼을 생성할 때, 머지 알고리즘에서 발생하던 충돌(Logical error: isConst/isSparse/isReplicated assertTypeEquality)을 수정했습니다. #101036 (Groene AI).
  • SELECT에서 동일한 alias가 여러 표현식에 사용될 때 잘못 UNKNOWN_IDENTIFIER 오류가 보고되던 문제를 수정했으며, 이제 올바른 MULTIPLE_EXPRESSIONS_FOR_ALIAS 오류가 보고됩니다. #101040 (Alexey Milovidov).
  • 지정된 시간대가 표현식의 시간대와 다를 때 DateTime/DateTime64 타입의 ALIAS 컬럼에 시간대 변환이 적용되지 않던 문제를 수정했습니다. #101043 (Alexey Milovidov).
  • 뷰, 서브쿼리 및 INSERT ... SELECTquery_log에 행 정책(row policies)이 기록되지 않던 문제를 수정했습니다. 쿼리 계획 단계에서 행 정책이 적용되더라도, 로깅을 위해 서브 플래너에서 상위 플래너로 전달되지 않았습니다. 이제 행 정책(로깅 전용)은 QueryAccessInfo에 보관되므로 플래너와 서브 플래너가 모두 이를 채울 수 있습니다. #101044 (Narasimha Pakeer).
  • DirectJoinMergeTreeEntity에서 파이프라인 블록에 ColumnConst 컬럼이 포함되어 있고, 이 컬럼이 일반 컬럼과 머지될 때 발생하던 예외를 수정했습니다. #101046 (Alexey Milovidov).
  • CTE 컬럼 별칭 형식의 불필요한 공백을 수정했습니다 (WITH t (a, b)WITH t(a, b)). #101049 (Alexey Milovidov).
  • 분석기가 활성화된 상태에서 merge와 같은 중첩 테이블 함수를 사용할 때 remote/cluster 테이블 함수가 실패하던 문제를 수정했습니다. #101055 (Alexey Milovidov).
  • prefer_localhost_replica=1일 때 분산 쿼리에서 OFFSET이 두 번 적용되어 예상보다 적은 행이 반환되는 문제를 수정했습니다. #101071 (Nihal Z. Miaji).
  • format_regexp 설정에 유효하지 않은 정규식을 사용했을 때 Regexp 포맷에서 발생하던 충돌을 수정했습니다. #101074 (Nihal Z. Miaji).
  • 병렬 레플리카에서 serialize_query_plan=1을 사용할 때 시계열 집계 함수에 발생하던 “Illegal type Decimal64 of start parameter” 오류를 수정했습니다. #101083 (Groene AI).
  • ORDER BY ... LIMIT와 함께 PREWHERE가 있는 프로젝션을 사용할 때 optimizeLazyMaterialization에서 발생하던 예외를 수정했습니다. #101115 (Anton Popov).
  • 내부 전용 Null combinator(예: sumNull, avgNull)와 집계 함수를 함께 사용하고 aggregate_functions_null_for_empty = 1 설정이 활성화되어 있을 때 발생하던 서버 충돌(SIGABRT)을 수정했습니다. #101147 (Groene AI).
  • 파일 시스템 캐시 쓰기 경로에서 완료된 파일 세그먼트를 로깅할 때 해제된 메모리를 읽을 수 있던 use-after-free 문제를 수정했습니다(BuzzHouse에서 MemorySanitizer로 감지됨). #101161 (Groene AI).
  • 명시적 요소 없이 생성된 Set을 사용하는 GLOBAL IN 프레디케이트를 분산 인덱스 분석에서 처리할 때, “Trying to attach external table to a ready set without explicit elements” 오류와 함께 서버가 충돌하던 문제를 수정했습니다. #101178 (Groene AI).
  • JIT 컴파일이 활성화된 상태에서(컴파일 임계값 도달 후) Decimal 컬럼의 MAX/MIN 집계 함수가 잘못된 결과를 반환하던 문제를 수정했습니다. #101203 (Raúl Marín).
  • 경량한 삭제 후 minmax_count_projection 및 단순 COUNT(*) 최적화가, 경량한 삭제 마스크가 있는 모든 파트가 머지되어 사라진 뒤에도 영구적으로 비활성화된 상태로 남아 있던 문제를 수정했습니다. #101212 (Anton Popov).
  • listread 사이에 원격 객체가 덮어써지면서 이전에는 객체 메타데이터가 오래된 상태로 남아 캐시에서 Having zero bytes, ... 논리 오류가 발생할 수 있던 문제를 수정했습니다. #101219 (Kseniia Sumarokova).
  • lc_column이 LowCardinality 타입일 때 ORDER BY CAST(lc_column, 'Type')로 MergeTree 테이블을 쿼리하면 발생하던 server crash(LOGICAL_ERROR: ColumnVector에서 ColumnLowCardinality로의 잘못된 CAST)를 수정했습니다. #101220 (Groene AI).
  • S3Queue에서 오래된 processing 노드 정리 문제를 수정했습니다. #101230 (Kseniia Sumarokova).
  • 유효하지 않은 optimizations 인수가 전달된 경우 mergeTreeAnalyzeIndexes()에서 발생할 수 있는 정의되지 않은 동작(UB)을 수정했습니다. #101253 (Azat Khuzhin).
  • 파티션된 Iceberg 테이블에서 ALTER TABLE UPDATE를 연속으로 수행할 때 발생하는 Logical error: 'partitions_count > 0' 예외를 수정했습니다. #101278 (Desel72).
  • 큰 정수 상수(예: 256, 2147483648)가 MergeTree 테이블에서 AND와 함께 WHERE 절의 불리언 프레디케이트로 사용될 때 쿼리 결과가 잘못되던 문제를 수정했습니다. 예를 들어 SELECT count() FROM t WHERE (2147483648 > b) AND 2147483648는 모든 행과 일치해야 하지만, 이전에는 잘못하여 0을 반환했습니다. #101287 (Groene AI).
  • 복제된 MergeTree를 사용하는 Delta Lake 클러스터의 insert-select 문제를 수정했습니다. #101299 (Konstantin Vedernikov).
  • 스칼라 서브쿼리가 서로 의존하는 구체화된 CTE 체인을 참조할 때 발생하던 “Logical error: Reading from materialized CTE before materialization” 크래시를 수정했습니다. #101305 (Groene AI).
  • IStorage::getDependentViewsByColumnstorage_id 관련 데이터 레이스를 수정했습니다. #101385 (Nikolay Degterinsky).
  • BACKUP FROM SNAPSHOT AST의 포맷팅 및 클로닝 문제를 수정했습니다. #101405 (Pablo Marcos).
  • enforce_keeper_component_tracking이 활성화된 상태에서 system.part_moves_between_shards를 쿼리할 때 발생하던 LOGICAL_ERROR 충돌 “Current component is empty”를 수정했습니다. #101462 (Groene AI).
  • 퍼저가 잘못된 Dynamic 타입 AST를 생성할 때 DataTypeDynamic::create()에서 발생하는 세그멘테이션 오류를 수정했습니다. #101464 (Groene AI).
  • DeltaKernel이 활성화되지 않은 상태에서 delta_lake_snapshot_version 또는 CDF 버전 설정을 사용하면, 잘못된 데이터를 조용히 반환하는 대신 오류를 발생시킵니다. #101489 (Desel72).
  • analyzer_compatibility_join_using_top_level_identifier 설정이 활성화된 상태에서 ARRAY JOIN과 JOIN USING을 함께 사용할 때 발생하던 NOT_FOUND_COLUMN_IN_BLOCK 예외를 수정했습니다. #101240를 해결했습니다. #101507 (Vladimir Cherkasov).
  • iceberg_metadata_file_path로 테이블을 생성했고 대상 메타데이터 버전이 이미 존재할 때 Iceberg INSERT 재시도 루프가 실패하던 문제를 수정했습니다. #101548 (Groene AI).
  • 직렬화/역직렬화 불일치를 방지하기 위해 arrayIntersect 및 관련 함수의 결과 컬럼에서 널 허용을 제거합니다. #101569 (George Larionov).
  • IcebergLocal 테이블 엔진을 사용하는 materialized view를 SELECT할 때 발생하던 서버 충돌(LOGICAL_ERROR)을 수정했습니다. #101577 (Groene AI).
  • NaN 인수로 intExp10을 호출할 때 오류 메시지가 잘못 표시되던 문제를 수정했습니다. intExp10이 아니라 intExp2가 표시되고 있었습니다. #101582 (Krishna Chaitanya).
  • #100288의 리팩터링 이후 allow_statistics=0ALTER TABLE ADD STATISTICSALTER TABLE DROP STATISTICS를 차단하지 못하던 문제를 수정했습니다. #101585 (Krishna Chaitanya).
  • drop_lock_version 노드가 없는 25.1 이전의 부분 삭제로 남은 ZooKeeper 노드가 있을 경우, KeeperMap CREATE TABLE이 “테이블 메타데이터를 생성할 수 없습니다” 오류와 함께 실패하던 문제를 수정했습니다. #101623 (Antonio Andelic).
  • 맵 서브컬럼을 읽는 과정에서 발생할 수 있는 잠재적인 논리 오류를 수정했습니다. #100769를 해결했습니다. #101336를 해결했습니다. #101641 (Pavel Kruglov).
  • 잠재적인 충돌을 방지하기 위해 getSubcolumnData에서 prefix 일치보다 정확한 subcolumn 일치가 우선되도록 수정했습니다. #101271을 해결합니다. #101645 (Pavel Kruglov).
  • LowCardinality 컬럼을 Variant NULL 상수와 비교할 때 use_variant_default_implementation_for_comparisons가 비활성화된 경우 발생하던 크래시(LOGICAL_ERROR: “ColumnUnique can’t contain null values”)를 수정했습니다. #101690 (Groene AI).
  • 내용: Bzip2ReadBuffer에 빈 내부 스트림 처리 가드를 추가하여, 내부 스트림이 비어 있을 때 UNEXPECTED_END_OF_FILE을 발생시키는 대신 EOF를 반환하도록 했습니다. #101691 (ClickGap AI Bot).
  • 내용: system.s3_queue_settingssystem.azure_queue_settingsalterable 컬럼 설명 텍스트가 뒤바뀌어 있던 문제를 수정했습니다. 실제 코드 동작과 일치하도록 01의 의미를 서로 바꿨습니다. #101703 (ClickGap AI Bot).
  • positiveModulo(tuple, number)가 modulo가 아니라 division으로 잘못 디스패치되던 문제를 수정했습니다. #101709 (ClickGap AI Bot).
  • thread_pool_size가 cache로 감싼 디스크에 설정된 경우 발생하던 충돌을 수정했습니다. 이전에는 FileCacheSettings::loadFromConfig()thread_pool_size를 알 수 없는 설정으로 간주해 거부했기 때문에 서버가 시작되지 못했습니다. 이 설정은 유효한 IDisk 매개변수로, 백그라운드 part 이동 작업 중 디스크 간 복사 작업에 사용되는 스레드 수를 제어합니다. #101712 (Francisco).
  • RANGE_HASHED 딕셔너리를 생성할 때 존재하지 않는 MAX 범위 속성이 아무 경고 없이 허용되고, 최소 및 최대 범위 속성의 타입이 서로 다를 경우 잘못된 타입 구성이 사용되던 문제를 수정했습니다. 이 버그는 buildRangeConfiguration에서 최대 속성을 조회할 때 max_attr_name 대신 min_attr_name을 참조한 복사-붙여넣기 오류로 인해 발생했습니다. #101732 (Yakov Olkhovskiy).
  • 대기 타이머의 수명이 자신이 참조하는 ProfileEvents::Counters를 가진 worker thread보다 길어질 때 CPU lease scheduler에서 발생하던 use-after-free crash를 수정했습니다. #101761 (Antonio Andelic).
  • arrayLevenshteinDistanceWeighted 및 arraySimilarity 함수의 버그를 수정했습니다. #101725를 해결했습니다. #101767 (Mikhail f. Shiryaev).
  • POST form 본문을 무시하는 Prometheus Query API 문제를 수정했습니다. #101794 (James Cunningham).
  • S3 Client::~Client 소멸자에서 예외가 전파되어 서버가 종료되던 문제를 수정했습니다. #101798 (Gagan Dhakrey).
  • Object 유형 동적 경로의 병렬 역직렬화에서 발생하던 use-after-scope 문제를 수정해, 동적 경로가 많은 테이블을 읽을 때 발생할 수 있던 충돌을 방지했습니다. #101823 (Antonio Andelic).
  • 특정(기본값이 아닌) 형식 지정 설정에서 formatter %W를 사용하는 함수 formatDateTime의 잘못된 출력이 수정되었습니다. #101847 (Robert Schulze).
  • 검색 문자열이 디맹글된 심볼 이름의 템플릿 인수 내부에 처음 나타나는 경우 SYSTEM INSTRUMENT ADD에서 shouldPatchFunction false negative가 발생하던 문제를 수정. #101885 (Pablo Marcos).
  • 주기적 갱신 중 ZooKeeper 세션이 만료될 때 UDF 레지스트리가 손실되는 문제를 수정했습니다. 이 문제로 인해 전체 갱신이 성공할 때까지 모든 사용자 정의 함수를 사용할 수 없게 될 수 있었습니다. #101891 (Nikita Fomichev).
  • AES_256_GCM_SIV에 대한 system.codecs 설명이 AES-128 대신 AES-256을 표시하도록 수정했습니다. #101917 (Jimmy Aguilar Mena).
  • JSON 컬럼에 생성된 MinMax 인덱스에서 잘못된 최솟값과 최댓값을 사용해 잘못된 쿼리 결과가 나오던 문제를 수정했습니다. #101700을 해결합니다. #101918 (Pavel Kruglov).
  • splitByString 토크나이저는 이제 빈 구분자 문자열을 허용하지 않습니다. #101928 (Robert Schulze).
  • materialize_skip_indexes_on_merge=false에서 머지 중 텍스트(전문 검색) 인덱스 생성을 억제하지 못하던 문제를 수정했습니다. 이전에는 텍스트가 아닌 스킵 인덱스(minmax, set, bloom_filter)만 억제되었고, 텍스트 인덱스는 계속 생성되어 CPU와 I/O를 낭비했습니다. #101932 (Groene AI).
  • sparseGrams 토크나이저가 지정된 최대 길이보다 긴 토큰을 생성하던 문제를 수정했습니다(구현에 +2가 하드코딩되어 있었기 때문입니다). #101934 (Elmi Ahmadov).
  • addStreams 중 스트림 생성자에서 예외가 발생해 column_streams에 null 항목이 남는 경우, MergeTreeDataPartWriterWide::cancel에서 발생하던 SIGSEGV를 수정했습니다. #101936 (Antonio Andelic).
  • query_plan_direct_read_from_text_index가 활성화된 상태에서, 전문 인덱스가 있는 Merge 또는 분산 테이블에 대해 has*Tokens와 LIKE가 혼합된 결합 필터 조건으로 쿼리할 때 발생하던 예외를 수정했습니다. #101939 (Jimmy Aguilar Mena).
  • 잘못된 QueryProcessingStage 값이 포함된 네이티브 프로토콜 쿼리 패킷을 파싱할 때 발생할 수 있는 정의되지 않은 동작을 수정했습니다. #101972 (Raúl Marín).
  • 초기 쿼리 구문 분석 중 예외가 발생하면, 동기화가 어긋난 스트림에서 잘못된 데이터를 읽지 않도록 TCP 연결을 닫습니다. #101989 (Raúl Marín).
  • 파일 시스템 캐시 26.1+에서 공간 예약 관련 논리 오류를 일으킬 수 있는 SLRU 경쟁 상태 버그를 수정했습니다. 디버그 빌드에서는 다음과 같은 assertion 실패가 발생할 수도 있습니다: 'Previous state is Evicting, but expected state to be Active while setting Evicting flag for 2c1e3484ecdc6b78a8978fa5b17c5097:0:339 (state: Evicting)'.. #101991 (Kseniia Sumarokova).
  • 뒤에 데이터가 남아 있는 문자열을 빈 Tuple()으로 캐스팅할 때 발생하던 예외를 수정했습니다. #102011 (Alexey Milovidov).
  • ORDER BY와 grace_hash 조인 알고리즘을 사용하는 쿼리에서 행이 잘못된 순서로 정렬되던 문제를 수정했습니다. 영향을 받는 쿼리는 결과를 잘못된 순서로 반환해, 별다른 경고 없이 잘못된 출력이 생성될 수 있었습니다. #102036 (János Benjamin Antal).
  • max_bytes_in_join 설정이 적용된 RIGHT JOIN 및 FULL JOIN 쿼리에서 발생할 수 있던 LOGICAL ERROR(Unexpected size of index type)를 수정했습니다. #102042 (Jimmy Aguilar Mena).
  • 음수 값을 가진 Time을 DateTime과 비교할 때 잘못된 결과가 반환되던 문제를 수정했습니다. #101670을 해결합니다. #102056 (Yarik Briukhovetskyi).
  • ZooKeeperRetriesControl이 오래된(만료된) ZooKeeper 세션을 갱신하지 않은 채 재시도하면서 발생하던 UDF 갱신 중 충돌을 수정했습니다. #102059 (Nikita Fomichev).
  • unlock snapshot을 포맷할 때 누락되던 공백 문제를 수정했습니다. https://github.com/clickhouse/clickhouse/issues/101723 이슈를 해결했습니다. #102063 (Han Fei).
  • WHERE 절이 있는 뷰를 쿼리할 때, 내부 쿼리에서 뷰 메타데이터와 타입이 다른 컬럼(예: join_use_nulls를 사용하는 LEFT JOIN으로 인해 생성된 널 허용(Nullable) 컬럼)이 생성되면 발생하던 크래시(SIGSEGV)를 수정했습니다. #102085 (Miсhael Stetsyuk).
  • 캐시 키가 일치하지 않아 part 제거 후에도 VectorSimilarityIndexCache 항목이 제거되지 않던 문제를 수정했습니다. #102152 (Seva Potapov).
  • rabbitmq storage 사용 시 손상된 메시지에 NACK를 보냅니다. #102157 (Seva Potapov).
  • 잘못된 빈 튜플 문자열을 파싱할 때의 논리 오류를 수정했습니다. #102289 (Nihal Z. Miaji).
  • GROUP BY 컬럼의 순서가 테이블의 정렬 키와 다를 때 optimize_aggregation_in_order=1을 사용하면 잘못된 집계 결과(중복된 행)가 발생하던 문제를 수정했습니다. #102299 (Groene AI).
  • Avro 포맷 사용 시 직렬화 전에 LowCardinality/Nullable 래퍼 타입이 해제되지 않아 발생하던 IcebergLocal ALTER TABLE ... UPDATE 크래시를 수정했습니다. #102337 (Desel72).
  • 표현식이 없는 materialized 컬럼의 뮤테이션에서 발생하던 세그멘테이션 폴트를 수정했습니다. #102185를 해결합니다. #102342 (zoomxi).
  • 배열 유형 관련 Coalescing merge tree 문제를 수정했습니다. 이로써 #89509이 해결되었습니다. #102384 (Konstantin Vedernikov).
  • 블룸 필터 푸시다운이 활성화되어 있고 WHERE 절에 등호/부등호 조건이 있는 상태에서 Parquet 파일을 읽을 때 발생하던 segfault(또는 디버그 빌드의 LOGICAL_ERROR)를 수정했습니다. 이 충돌은 Parquet 프리페처가 블룸 필터 데이터를 가져오는 과정에서 범위를 벗어난 메모리에 접근해 발생했으며, 비결정적으로 잘못된 쿼리 결과를 반환할 수도 있었습니다. #102385 (Groene AI).
  • 하위 큐 간에 공유된 eviction 통계와 실패한 후보에 대한 잘못된 복구 경로로 인해 SLRU 파일 시스템 캐시를 동적으로 크기 조정하는 중 발생하던 LOGICAL_ERROR 중단 문제를 수정했습니다. #102396 (Antonio Andelic).
  • Replicated 데이터베이스에서 대상 테이블이 없는 별칭 테이블이 새 레플리카에서 초기화에 실패하던 문제를 수정했습니다. #101320을 해결합니다. #102397 (Nikolay Degterinsky).
  • null byte만으로 이루어진 검색 문자열을 찾을 때 문자열 검색 함수(countSubstrings, position 등)에서 발생하는 범위를 벗어난 읽기를 수정했습니다. #102401 (Raúl Marín).
  • 풀 텍스트 인덱스 설정(enable_full_text_index, allow_experimental_full_text_index, use_skip_indexes_on_data_read)은 이제 compatibility 설정이 26.1보다 이전 버전을 가리키는 경우에도 더 이상 비활성화되지 않습니다. 이전에는 이로 인해 SharedDatabaseCatalog가 텍스트 인덱스가 있는 테이블을 생성하지 못할 수 있었습니다. #102422 (Nikita Fomichev).
  • 끝에 %가 있는 printf에서 메모리 범위를 벗어나 읽는 문제를 수정했습니다. #102472 (Raúl Marín).
  • rewind가 buffer 취소 플래그를 재설정하지 않아 발생하던 AsynchronousMetrics의 디버그 빌드 내 chassert 예외 ReadBuffer is canceled를 수정했습니다. #102524 (Yuri Fedoseev).
  • 구분자만으로 이루어진 needle(예: '()', '!!!')에 대해, 텍스트 인덱스가 있는 컬럼에서 hasToken / hasTokenOrNull이 올바르게 동작하도록 수정되었습니다. 이전에는 BAD_ARGUMENTS를 발생시켜야 하는 경우(hasToken) 또는 NULL을 반환해야 하는 경우(hasTokenOrNull)에도, 인덱스가 모든 그래뉼을 조용히 건너뛰었습니다. #102544 (Jimmy Aguilar Mena).
  • Keeper의 대규모 multi 요청에서 발생하는 OOM을 수정했습니다. OpenTelemetry tracing에서는 ZooKeeperRequest 객체의 OpenTelemetry 스팬에 대해 무조건 1KiB가 넘는 메모리를 할당했기 때문에, 매우 큰 multi 요청의 경우 추가로 10GiB가 넘는 메모리를 할당하려고 했습니다. 이를 해결하기 위해 이제 shared data를 정적 메모리에 유지하고, ZooKeeperOpentelemetrySpans에서는 std::optional 대신 std::unique_ptr를 사용합니다. #102586 (Miсhael Stetsyuk).
  • 기존 컬렉션에 CREATE NAMED COLLECTION IF NOT EXISTS를 실행할 때 NamedCollection의 CurrentMetric이 부풀려지던 문제와, 시작 시 config 또는 SQL storage에서 로드된 컬렉션에 대해 CurrentMetric이 초기화되지 않던 문제를 수정했습니다. #102507을 해결합니다. #102598 (Pablo Marcos).
  • 동시 DDL로 인해 로컬 세그먼트가 빈 컬럼을 반환할 경우 getStructureOfRemoteTable에서 발생하는 예외를 수정했습니다. #102604 (Alexey Milovidov).
  • Shared 데이터베이스에서 동시에 실행되는 여러 CREATE TABLE IF NOT EXISTS 쿼리가 동일한 S3Queue 테이블을 대상으로 할 때 발생하던 LOGICAL_ERROR 예외를 수정했습니다. #102610 (Nikita Taranov).
  • WHERE 필터가 적용된 널 허용 컬럼을 읽을 때 네이티브 Parquet V3 리더에서 발생하던 LOGICAL_ERROR 충돌 “Unexpected number of rows in column subchunk”를 수정했습니다. #102628 (Groene AI).
  • AzureWriteMicroseconds profile 이벤트 설명에 “write” 대신 “read”라고 잘못 표기된 문제를 수정했습니다. #102639 (Miсhael Stetsyuk).
  • 일부 특수한 경우 행 정책에서 ‘Not found column in block’ 예외가 발생하는 버그입니다. #102648 (Yarik Briukhovetskyi).
  • config에 정의된 정적 클러스터에 일시적으로 활성 상태인 노드가 없을 때 ClusterDiscovery에서 발생하던 server 예외를 수정했습니다. #102661 (Kseniia Sumarokova).
  • 시간대 조정 후 오버플로우가 발생할 때 날짜 데이터 타입을 잘못 추론하던 문제를 수정했습니다. #102601을 해결했습니다. #102674 (Pavel Kruglov).
  • SYSTEM WAIT VIEW 대기 중에 갱신 가능 구체화 뷰가 삭제되면 영원히 멈추는 문제를 수정했습니다. #102681 (Nikolay Degterinsky).
  • 모든 행에서 ELSE를 반환하던 Dynamic 표현식이 포함된 CASE를 수정했습니다. #102511을 해결합니다. #102684 (Pavel Kruglov).
  • binary로 인코딩된 데이터 타입에서 평탄화된 Dynamic 타입 직렬화 문제를 수정했습니다. #101911을 해결합니다. #102692 (Pavel Kruglov).
  • format_schema_source=‘query’가 여러 행 결과를 조용히 무시하는 문제를 수정했습니다. #101905를 해결합니다. #102698 (Pavel Kruglov).
  • 모든 오류를 1로 매핑하는 대신 SSH 클라이언트를 통해 실제 종료 코드를 보고합니다. #101741을 해결합니다. #102700 (Konstantin Bogdanov).
  • 동적/사전 정의 쿼리 핸들러에서 HTTP 헤더가 유실되는 문제를 수정했습니다. #101846를 해결합니다. #102706 (Konstantin Bogdanov).
  • 축약된 jemalloc heap profile에 Poisson 샘플링 보정을 적용해 jeprof 출력과 일치하도록 했습니다. 이전에는 축약 포맷이 샘플링 확률을 반영하지 않아 실제 메모리 할당 크기를 과소평가했습니다. #102759 (Antonio Andelic).
  • 함수 hasPhraseNULL 인수가 전달될 때 발생하던 충돌을 수정했습니다. #102802 (Nikita Taranov).
  • 재귀적 스키마에 순환하는 심볼릭 타입 참조가 포함된 Avro 파일을 읽을 때 발생하던 서버 충돌(SIGSEGV)을 수정했습니다. 이제 이러한 스키마는 충돌을 일으키는 대신 감지되어 명확한 오류 메시지와 함께 거부됩니다. #102853 (Groene AI).
  • FunctionVariantAdaptor에서 결과를 캐스팅하는 동안 Variant 컬럼의 함수가 메모리 한도에 걸리거나 타입 변환 이외의 다른 예외를 만나면 발생하던 서버 충돌(LOGICAL_ERROR assertion)을 수정했습니다. 이제 이 예외는 내부 오류로 잘못 분류되지 않고 올바르게 전파됩니다. #102855 (Groene AI).
  • 스키마 추론 중 std::length_error가 발생할 때(예: 비정상적으로 큰 input_format_msgpack_number_of_columns 값이나 손상된 입력 데이터로 인해) 디버그/새니타이저 빌드에서 서버가 충돌하는 문제를 수정했습니다. #102859 (Groene AI).
  • 복제된 컬럼과 희소 컬럼의 직렬화에서 NULL 표현이 설정(예: format_tsv_null_representation)을 준수하도록 개선했습니다. #102888 (Hechem Selmi).
  • #103499에서 백포트됨: socket 계층의 짧은 쓰기를 Poco BufferedStreamBuf::flushBuffer가 처리하지 못해 S3 요청이 재시도되지 않고 ios_base::clear: unspecified iostream_category error 오류로 실패하던 문제를 수정했습니다. #102894 (Sema Checherinda).
  • 경량한 삭제 후, 경량한 삭제 마스크가 있는 모든 파트가 머지되어 사라진 뒤에도 minmax_count_projection 및 단순한 COUNT(*) 최적화가 영구적으로 비활성화된 상태로 남는 문제를 수정했습니다. #102900 (Anton Popov).
  • LTO로 인해 jemalloc에서 간헐적으로 발생하던 충돌을 수정했습니다. #102913 (Azat Khuzhin).
  • 새 분석기에서 행 정책 OR 체인을 IN으로 최적화했습니다. #102915 (Azat Khuzhin).
  • 잘못된 정렬로 페이지 캐시가 해제되면서 발생할 수 있는 jemalloc 메타데이터 손상을 수정해, 충돌로 이어질 수 있는 문제를 해결했습니다. #102918 (Azat Khuzhin).
  • materialized view가 없는 일반 INSERT는 이제 더 이상 과도한 ConcurrencyControl 슬롯과 스레드(max_insert_threads 대신 max_threads)를 요청하지 않으므로, INSERT 처리량이 높은 클러스터에서 CC 슬롯 고갈과 스레드 수 폭증을 방지합니다. #102961 (Sema Checherinda).
  • 커널 OOM을 방지할 수 있도록 MEMORY_LIMIT_EXCEEDED 예외를 발생시키기 위해 ArrowMemoryPool을 다시 도입했습니다. #102999 (Azat Khuzhin).
  • CASTNullable(DateTime)에 변환할 때 cast_string_to_date_time_mode가 무시되던 문제를 수정했습니다. #101840를 해결합니다. #103035 (Pavel Kruglov).
  • 텍스트 인덱스 직접 읽기 최적화에 ALIAS 컬럼 지원이 추가되었습니다. #103037 (Anton Popov).
  • #103454에 백포트됨: 집계 프로젝션이 쿼리와 일치하고 테이블의 일부 파트에 프로젝션 데이터가 없는 경우(예: 이미 데이터가 있는 테이블에 프로젝션을 추가했지만 MATERIALIZE PROJECTION을 실행하지 않은 경우) SELECT DISTINCT가 불완전한 결과를 아무 경고 없이 반환하던 문제를 수정했습니다. #102951을 닫습니다. #103052 (Nihal Z. Miaji).
  • WHERE x AND toNullable(N)MergeTree 테이블에서 NUInt8보다 큰 정수형(예: 256, 65535, 2147483648 또는 임의의 음수 정수)일 때 잘못된 결과를 반환하던 문제를 수정했습니다. splitFilterNodeForAllowedInputs가 축약된 ANDNullable 나머지를 불리언으로 변환하는 과정에서 NULL 0을 사용해, 3값 논리에서 비교 결과가 NULL로 평가되면서 filter가 모든 행을 잘못 걸러내고 있었습니다. #103077 (Groene AI).
  • 인수가 뒤바뀐 순서로 전달될 때(function_locate_has_mysql_compatible_argument_order = 1인 경우 locate(needle, haystack)) 문자열 검색 함수(예: locate, position)의 오류 메시지에 잘못된 인수 유형이 표시되던 문제를 수정했습니다. #103102 (Alex Kuleshov).
  • failpoint에서 일시 중지된 스레드가 없을 때 disableFailPoint를 호출하면 waitForPause가 무기한 대기 상태에 빠지는 문제를 수정했습니다. #103119 (Shaohua Wang).
  • 인증 전 TCP Hello 패킷 문자열의 크기를 64 KB로 제한하고, 전체 핸드셰이크 시간을 제한하는 handshake_timeout_milliseconds server setting을 추가하여 인증되지 않은 클라이언트가 과도한 메모리를 소비하거나 스레드를 무기한 점유하는 것을 방지합니다. #103284 (Sema Checherinda).
  • Parquet ColumnIndex 통계에서 String 컬럼의 min_value가 max_value보다 크게 표시되던 문제를 수정했습니다. #103334 (Saurabh Kumar Ojha).
  • Native 형식에서 잘못된 평탄화 Dynamic 데이터를 검사합니다. #103392 (Pavel Kruglov).
  • url 테이블 함수에서 _time 컬럼을 채우도록 했습니다. #103437 (Nikita Taranov).
  • 사용할 수 없는 경우 SVE 명령어를 사용하던 SVE 감지 문제를 수정했습니다. #103568 (Raúl Marín).

빌드/테스트/패키징 개선

  • Libstemmer (Snowball) 종속성은 이제 더 최신 버전인 v3.0.1을 사용합니다. #99256 (Jimmy Aguilar Mena).
  • clickhouse-test에서 설정 use_skip_indexes_for_top_k, use_top_k_dynamic_filtering, query_plan_max_limit_for_top_k_optimization를 무작위화했습니다. #91782 (Nikita Fomichev).
  • 함수의 다양한 속성이 올바른지 확인하는 스트레스 테스트를 구현했습니다. #93543 (Michael Kolupaev).
  • 업스트림의 것을 가져오는 대신 llvm-project용 자체 CMake 구성을 제공합니다. #97453 (Konstantin Bogdanov).
  • 쿼리 최적화 패스의 커버리지를 높이기 위해 테스트 인프라에서 더 많은 optimize_* 설정을 무작위화했습니다. #97547 (Alexey Milovidov).
  • Rust toolchain으로 nightly-2026-03-22를 사용합니다. #98602 (Konstantin Bogdanov).
  • wasmtime v42.0.1을 사용하도록 변경했습니다. #98603 (Konstantin Bogdanov).
  • llvm-project 22.1.1을 사용하도록 변경했습니다. #98882 (Konstantin Bogdanov).
  • 야간 테스트별 커버리지 파이프라인을 위해 SANITIZE_COVERAGE(사용자 정의 새니타이저 콜백, 심볼 단위 세분화 수준)을 LLVM 소스 기반 커버리지(WITH_COVERAGE, -fprofile-instr-generate -fcoverage-mapping)로 대체합니다. 이제 서버는 시작 시 ELF 섹션에서 자체 커버리지 매핑을 읽고, 새로운 SYSTEM SET COVERAGE TEST 'name' 명령을 통해 테스트별 (file, line_start, line_end) 튜플을 수집합니다. 대상 CI 체크의 테스트 선택은 새로운 checks_coverage_lines CIDB 테이블에 대한 줄 범위 쿼리를 사용하며, 변경된 diff 줄을 얼마나 많이 커버하는지에 따라 후보 테스트의 순위를 매깁니다. #99513 (Nikita Fomichev).
  • -O0 빌드 시 발생하는 llvm-libc 링크 오류 수정. #100023 (Zheguang Zhao).
  • 구성에 logger.loglogger.errorlog 설정이 포함되어 있지 않은 경우(예: 모든 로그 메시지가 STDOUT/STDERR로 출력되도록 설정된 경우) 컨테이너 시작 시 나타나던 두 개의 오류 메시지를 수정했습니다. #100239 (Simon).
  • macOS builds에서는 Apple의 ld(cctools-port ld64)보다 ld64.lld를 우선 사용합니다. cctools-port의 ld64는 -ffunction-sections-dead_strip 옵션과 함께 사용할 때 매우 느리므로, 이를 통해 Darwin 링크 시간이 크게 줄어듭니다. ld64.lld를 사용할 수 없으면 ld로 대체됩니다. #100275 (Alexey Milovidov).
  • 디렉터리에 어떤 민감한 정보도 등록되지 않도록 보장하는 테스트(REST + Glue). #100307 (Konstantin Vedernikov).
  • 최근 수정된 테스트를 서로 다른 무작위 설정으로 반복 실행합니다. #100385 (Alexey Milovidov).
  • CMake에서 #embed 파일 의존성을 추적하고, 올바르게 다시 빌드되도록 ccache depend mode를 활성화했습니다. #100411 (Alexey Milovidov).
  • TPC-H 쿼리에 대한 정확성 검사를 추가했습니다. #100580 (Raufs Dunamalijevs).
  • aws-sdk-cpp 1.11.771을 사용하도록 변경했습니다. #100582 (Konstantin Bogdanov).
  • 성능 테스트 XML에서 file 속성을 통해 외부 SQL 쿼리 파일과 설정을 참조할 수 있게 했습니다. #100747 (Raufs Dunamalijevs).
  • LowerUpperImpl.h에 누락된 TargetSpecific.h include를 추가해 -march=x86-64-v4에서 컴파일되도록 수정했습니다. #100932 (Alexey Milovidov).
  • cxxflags에 —no-default-config를 추가해 Gentoo에서의 빌드 문제를 수정했습니다. #100973 (Isak Ellmer).
  • utils/auto-bisect/가 추가되었습니다 — 로컬에서 빌드할 필요 없이 사전 구축된 CI 바이너리를 다운로드하고 사용자가 제공한 테스트 스크립트를 실행해 회귀를 처음 발생시킨 커밋을 찾는 셸 기반 이분 탐색 프레임워크입니다. #100989 (Nikita Fomichev).
  • CMake에서 기본적으로 ThinLTO를 비활성화해 로컬 개발자 빌드에서 더 이상 암묵적으로 활성화되지 않도록 했습니다. CI 릴리스 빌드는 -DENABLE_THINLTO=1를 명시적으로 전달하므로 영향을 받지 않습니다. #101041 (Alexey Milovidov).
  • 성능 테스트에 TPC-DS SF1 벤치마크를 추가했습니다. #101209 (Raufs Dunamalijevs).
  • has_lightweight_delete 플래그의 수명 주기, optimize_trivial_count_query에서의 COUNT(*) 정확성, MATERIALIZED/DEFAULT 컬럼 무결성, ReplicatedMergeTree 플래그 복구, 삭제된 행이 있을 때의 read_in_order, 여러 삭제/머지 사이클, _row_exists 컬럼 숨김, 다양한 프레디케이트, ALTER DELETE에 대한 RBAC 강제 적용을 다루는 MergeTree 경량 삭제 stateless 테스트를 추가했습니다. #101792 (Nikita Fomichev).
  • 이제 태그된 릴리스용 Distroless Docker 이미지가 ubuntu 및 alpine 버전으로도 게시됩니다. #101941 (Rahul Nair).
  • 이제 스택 트레이스에는 빌드 디렉터리가 포함된 경로(예: ./ci/tmp/fast_build/./src/Common/Exception.cpp) 대신 깔끔한 상대 경로(예: src/Common/Exception.cpp)가 표시됩니다. #102000 (Raúl Marín).
  • 리포지토리에 커밋된 5 MB 초과 파일을 거부하는 CI 스타일 check를 추가하고, 기존의 정상적인 테스트 데이터는 허용 목록에 포함합니다. 사용되지 않는 14 MB zookeeper_log.parquet를 제거합니다. #102080 (Raúl Marín).
  • 컴파일 시간을 줄이기 위해 헤더에서 사용되지 않는 #include 지시문 약 400개를 제거했습니다. #102585 (Raúl Marín).
  • wasmtime v43.0.1을 사용하도록 변경했습니다. #102603 (Konstantin Bogdanov).
  • 3.5.6 버전의 openssl을 사용합니다. #102606 (Konstantin Bogdanov).
  • xz 5.8.3을 사용하도록 변경했습니다. #102607 (Konstantin Bogdanov).
  • distroless Docker image 기반을 Debian 12 (glibc 2.36, OpenSSL 3.0)에서 Debian 13 (glibc 2.41, OpenSSL 3.5)으로 업그레이드하여, 도달 가능한 취약점 기준 CVE 노출 범위를 0건으로 줄였습니다. #101678 (Rahul Nair).

ClickHouse 릴리스 26.3 LTS, 2026-03-26. 발표 자료, 영상

하위 호환되지 않는 변경 사항

  • 업그레이드 후 다운그레이드하면 데이터 손실이 발생할 수 있습니다. 데이터 타입 직렬화 버전이 중첩 데이터 타입에도 전파됩니다. 예를 들어, 이전에는 String 직렬화 버전 with_size_stream이 최상위 String 컬럼과 Tuple 요소에만 적용되었습니다. 이제는 Array/Map/Variant/JSON/기타와 같은 모든 중첩 타입 내부의 모든 String 타입에도 적용됩니다. 이 동작은 현재 기본적으로 활성화된 MergeTree setting propagate_types_serialization_versions_to_nested_types로 제어됩니다. 이 변경 이후 새로 생성된 데이터 파트는 이전 버전에서 읽을 수 없지만, 기존 파트는 새 버전에서도 문제없이 읽을 수 있습니다. 업그레이드는 안전하지만 다운그레이드는 안전하지 않습니다. 즉, 26.3으로 업그레이드한 후 롤백해야 한다면 중첩 타입이 있는 컬럼에 26.3이 기록한 데이터는 읽을 수 없게 됩니다! 자세한 내용은 #101429를 참조하십시오. #94859 (Pavel Kruglov).
  • hypothesis 스킵 인덱스 유형을 제거합니다. 이는 실용성이 제한적이었던 잘 알려지지 않은 Experimental 기능이었습니다. 이제 INDEX ... TYPE hypothesis로 테이블을 생성하면 오류가 발생합니다. #96874 (Alexey Milovidov).
  • 실험적 detectProgrammingLanguage 함수를 제거했습니다. #99567 (Alexey Milovidov).
  • SQL 표준에 맞도록 NOT 연산자 우선순위를 수정했습니다. 이제 NOTIS NULL, BETWEEN, LIKE 및 산술 연산자보다 낮은 우선순위로 바인딩됩니다. 예를 들어, 이제 NOT (x) IS NULL(NOT x) IS NULL이 아니라 NOT (x IS NULL)로 파싱됩니다. 이 변경으로 인해 이전의 비표준 동작에 의존하던 쿼리 결과가 달라질 수 있습니다. #97680 (Alexey Milovidov).
  • 일반 프로젝션의 메타데이터를 수정하여 다중 컬럼 정렬 키를 사용하는 프로젝션을 올바르게 인식할 수 있도록 했습니다. #90429를 기반으로 합니다. #91352 (Amos Bird).
  • replace_long_file_name_to_hash 설정을 따르지 않던 스킵 인덱스 파일 문제를 수정했습니다. 이 문제로 이름이 긴 인덱스에서 “File name too long” 오류가 발생하고 인덱스 읽기가 깨졌습니다. 이제 스킵 인덱스 파일 이름은 컬럼 파일과 마찬가지로 max_file_name_length를 초과하면 해시 처리됩니다. 이는 하위 호환됩니다(새 서버는 기존 파트를 읽을 수 있음). 하지만 다운그레이드하거나 롤링 업그레이드 중에 이전 서버를 사용하는 경우 이름이 긴 인덱스가 무시될 수 있습니다. #97128 (Raúl Marín).
  • async insert가 기본적으로 활성화됩니다. 이제 ClickHouse는 모든 소규모 삽입을 기본적으로 배칭합니다. 이 설정은 compatibility에서 지정됩니다. compatibility=<version less than 26.2>로 설정하면 기본값은 이전과 같은 false가 됩니다. async inserts는 여러 수준에서 끄거나 켤 수 있습니다. 즉, 사용자 profile의 config, session, 쿼리 또는 MergeTree table에서 설정할 수 있습니다. #97590 (Sema Checherinda).
  • mysql_datatypes_support_level의 기본값을 빈 값에서 decimal,datetime64,date2Date32로 변경해, 기본적으로 MySQL DATEDate32에, DECIMAL/NUMERICDecimal에, 정밀도가 있는 DATETIME/TIMESTAMPDateTime64에 올바르게 매핑되도록 했습니다. 이전에는 MySQL DATE 컬럼이 1970-01-01 이전 날짜를 표현할 수 없는 Date에 매핑되어 데이터 손상이 발생했습니다. #97716 (Alexey Milovidov).
  • regexp는 느리기 때문에 mergeTreeAnalyzeIndexes{,UUID}에서 regexp 대신 파트 이름 배열을 받도록 했습니다 (실험적 기능). #98474 (Azat Khuzhin).
  • 실행형 UDFs의 기본 stderr_reaction 값을 throw에서 log_last로 변경했습니다. stderr로 경고를 출력하는 UDFs는 이제 종료 코드가 0인 경우 더 이상 실패하지 않습니다. 이제 종료 코드 예외에 stderr 내용도 포함됩니다. #99232 (Xu Jia).

새로운 기능

  • MergeTree에서 맵 컬럼에 대한 버킷 기반 직렬화가 추가되었습니다(map_serialization_version = 'with_buckets'). 키는 hash 기반 버킷으로 분할되므로, 단일 키(m['key'])를 읽을 때 전체 컬럼 대신 하나의 버킷만 읽어도 되어 맵 크기에 따라 단일 키 lookup 속도가 2~49배 향상됩니다. 버킷 수와 버킷팅 전략은 새로운 MergeTree 설정인 map_serialization_version, max_buckets_in_map, map_buckets_strategy, map_buckets_coefficient, map_buckets_min_avg_size로 제어할 수 있습니다. #99200 (Pavel Kruglov).
  • 구체화된 CTE(materialized CTE)를 지원합니다. 쿼리 실행 중 CTE를 한 번만 평가하고 그 결과를 임시 테이블에 저장할 수 있도록 합니다. #53449를 해결했습니다. #94849 (Dmitry Novik).
  • 호환성을 위해 NOW와 같은 일부 SQL 표준 함수는 괄호 없이도 사용할 수 있도록 허용합니다. #52102을 해결합니다. #95949 (Aly Kafoury).
  • 이제 자연 정렬 키 함수는 naturalSortKey(s)로 사용할 수 있습니다. #90322 (Nazarii Piontko).
  • 이제 JSONExtract 함수에서 네이티브 JSON/Object 입력을 사용할 수 있습니다. #88370을 해결합니다. #96711 (Fisnik Kastrati).
  • Nullable 유형의 쿼리 매개변수가 지정되지 않으면 해당 값은 NULL로 간주합니다. #93869 (Vikash Kumar).
  • Replicated 데이터베이스용 보조 ZooKeeper를 지원합니다. #95590 (RinChanNOW).
  • 맵과 마찬가지로 JSON 타입에서 경로의 존재 여부를 확인하는 has 함수를 지원합니다. #96927 (DQ).
  • mergeTreeTextIndex(database, table, index) 테이블 함수가 추가되어 텍스트 인덱스에서 데이터를 직접 읽을 수 있게 되었습니다. 이 함수는 내부 검사에 사용하거나 텍스트 인덱스 데이터를 기반으로 집계를 수행하는 데 사용할 수 있습니다. #97003 (Anton Popov).
  • table_readonly MergeTree setting을 추가해 테이블을 읽기 전용으로 표시하고 삽입 및 수정을 방지할 수 있게 했습니다. #97652 (Alexey Milovidov).
  • 새로운 설정 use_partition_pruning과 별칭 use_partition_key가 추가되었습니다. 이를 false로 설정하면 파티션 키 기반 파티션 프루닝이 비활성화됩니다. #97888 (Nihal Z. Miaji).
  • Iceberg 테이블에서 ALTER TABLE ... EXECUTE expire_snapshots('<timestamp>')를 지원합니다. #97904 (murphy-4o). #99130
  • <protocols>의 각 type=http 항목에서 별도의 <http_handlers_*> 구성 섹션을 가리키는 사용자 지정 <handlers> 키를 지정할 수 있도록 하여, 포트별로 서로 다른 HTTP 라우팅 규칙을 적용할 수 있게 했습니다. #98414 (Amos Bird).
  • EXPLAINpretty=1 옵션을 추가해 트리 스타일의 들여쓰기 출력을 제공하고, compact=1Expression 단계를 접어 쿼리 계획을 더 읽기 쉽게 만듭니다. #98500 (Kirill Kopnev).
  • restore_access_entities_with_current_grants 서버 설정을 추가했습니다. 이 설정을 활성화하면 백업에서 복원된 사용자/역할에 대한 권한 부여는 복원을 수행하는 사용자가 부여할 수 있는 범위로 제한되며(GRANT CURRENT GRANTS와 동일한 의미), ACCESS_DENIED 오류로 실패하지 않습니다. #98795 (pufit).
  • 유니코드 대소문자 폴딩과 발음 구별 부호 제거를 위한 caseFoldUTF8removeDiacriticsUTF8 함수를 추가했습니다. #98973 (George Larionov).
  • NFKC 정규화와 대소문자 접기를 결합한 NFKC_Casefold 유니코드 정규화를 지원하는 normalizeUTF8NFKCCasefold 문자열 함수를 추가했습니다. #99276 (George Larionov).
  • 전문 검색 인덱스와 tokens 함수에 asciiCJK 토크나이저를 추가했습니다. 이 토크나이저는 유니코드 단어 경계 규칙에 따라 텍스트를 분할합니다. ASCII 단어는 연결 문자(밑줄, 콜론, 점, 작은따옴표)를 포함해 구성되고, 비ASCII 유니코드 문자는 한 글자씩 토큰화됩니다. #99357 (Amos Bird).
  • skip_unavailable_shards가 활성화된 경우 자동으로 건너뛸 수 있는 세그먼트 수를 제한하는 max_skip_unavailable_shards_nummax_skip_unavailable_shards_ratio 설정이 추가되었습니다. 사용 불가능한 세그먼트의 수 또는 비율이 구성된 임계값을 초과하면, 조용히 불완전한 결과를 반환하는 대신 예외가 발생합니다. #99369 (Alexey Milovidov).
  • 이제 하위 쿼리 표현식에서 SOME 키워드를 사용할 수 있습니다. 이는 ANY와 동일하게 동작합니다. #99842 (Artem Kytkin).
  • 텍스트 출력 형식에서 FixedString 값의 후행 null byte를 제거할 수 있도록 output_format_trim_fixed_string 설정이 추가되었습니다. #97558 (NeedmeFordev).
  • FROM 절에서 괄호로 묶은 테이블 JOIN 표현식을 지원합니다. 예: SELECT * FROM (t1 CROSS JOIN t2). #97650 (Alexey Milovidov).
  • 함수 toDaysInMonth를 구현했습니다. 지정한 날짜가 속한 월의 일수를 반환합니다. #99227 (Vitaly Baranov).

실험적 기능

  • WebAssembly 기반 사용자 정의 함수(UDF)에 대한 실험적 지원을 추가했습니다. 이제 사용자 정의 함수 로직을 WebAssembly로 구현해 ClickHouse 내에서 실행할 수 있습니다. Wasmtime 백엔드 지원에 기여한 Alexey Smirnov에게 특별히 감사드립니다. #88747 (Vladimir Cherkasov). 또한 WASM UDF 지원도 점진적으로 개선되었습니다. #99373 (Vasily Chekalkin).
  • polyglot 라이브러리를 사용해 외부 SQL 방언 지원을 추가했습니다. #99496 (Alexey Milovidov).
  • ALP 부동소수점 Compression 코덱을 추가했습니다(압축되지 않는 double에 대해서는 ALP_rd 폴백 없음). #91362 (Nazarii Piontko).
  • JSON 컬럼에 대한 실험적 지연 타입 힌트 지원을 추가했습니다. allow_experimental_json_lazy_type_hints로 활성화하면, 타입 힌트만 추가하거나 수정하는 ALTER TABLE ... MODIFY COLUMN json JSON(path TypeName)는 과거 데이터를 다시 쓰지 않고 메타데이터 전용 작업으로 즉시 완료됩니다. 타입 힌트는 기존 파트에는 쿼리 시점에 적용되고, INSERT 및 백그라운드 머지 중에 구체화됩니다. #97412 (tanner-bruce).
  • YTsaurus 테이블 엔진의 병렬 읽기를 활성화했습니다. #97343 (MikhailBurdukov).

성능 개선

  • 데이터 레이크의 성능을 개선했습니다. 이전 버전에서는 객체 스토리지에서 읽을 때 파이프라인이 처리 스레드 수에 맞게 조정되지 않았습니다. 그 결과 멀티코어 머신에서 성능이 대폭 향상되었습니다(~40배). #99548 (Alexey Milovidov).
  • 이제 enable_parallel_replicasautomatic_parallel_replicas_mode의 관계는 다음과 같습니다. enable_parallel_replicas > 0인 경우에만 쿼리에서 병렬 레플리카를 사용할 수 있습니다. 또한 automatic_parallel_replicas_mode=1이면, 병렬 레플리카 사용 여부는 이전에 수집된 통계를 바탕으로 계획 단계에서 결정됩니다. automatic_parallel_replicas_mode=0이면, 통계와 무관하게 지원되는 모든 쿼리에서 병렬 레플리카가 사용됩니다. 주목할 만한 예외 중 하나는 병렬 레플리카를 사용하는 분산 insert-select입니다. 이 경우 쿼리는 항상 automatic_parallel_replicas_mode=0인 것처럼 실행됩니다. #97517 (Nikita Taranov).
  • 프레디케이트에 비교 연산자(=, <, >, !=) 중 하나가 포함되고 파티션 키가 결정적 함수 체인으로 감싸진 경우 파티션 프루닝을 허용합니다(예: PARTITION BY x이고 cityHash64(x) % 5 > 2, toYYYYMM(x) < 2026, toYYYYMM(x) = 2026, 또는 toYYYYMM(x) != 2026와 같은 프레디케이트는 모두 프루닝에 파티션 키를 사용합니다). #28800을 해결합니다. #98432 (Nihal Z. Miaji).
  • CAST 대상 유형이 Nullable이고 변환이 단조적이면 read-in-order 최적화와 프라이머리 키 프루닝을 사용할 수 있도록 합니다. 예를 들어 PRIMARY KEY x인 경우 ClickHouse는 ORDER BY x::Nullable(UInt64)에 read-in-order 최적화를 사용할 수 있으며, WHERE x::Nullable(UInt64) > 500000와 같은 프레디케이트에는 프라이머리 키 프루닝을 적용할 수 있습니다. #98482 (Nihal Z. Miaji).
  • 정수형 컬럼을 부동소수점 리터럴과 비교할 때 인덱스 프루닝과 필터 푸시다운을 허용합니다. 예를 들어 이제 WHERE x < 10.5와 같은 프레디케이트는 프루닝에 프라이머리 키를 사용할 수 있으며, prime < 1e9 또는 number < 1e5와 같은 필터는 무한정 실행을 유발하는 대신 primes()numbers() 테이블 함수로 푸시다운됩니다. #85167을 해결합니다. #98516 (Nihal Z. Miaji).
  • 메타데이터만 읽기 위해 파일을 다시 다운로드할 필요가 없도록 Parquet 메타데이터용 새 SLRU 캐시를 추가하여 읽기 성능을 개선했습니다. #98140 (Grant Holly).
  • 옵티마이저 통계를 기반으로 ANTI, SEMI 및 FULL 조인의 좌우를 바꿀 수 있도록 지원합니다. #97498 (Hechem Selmi).
  • 대형 Polygon에서 pointInPolygon의 그래뉼 스키핑을 최적화하고, 기본 키(primary key) 프루닝 중 pointInPolygon 인덱스 분석이 예외를 발생시키던 문제를 수정했습니다. #91633 (Nihal Z. Miaji).
  • levenshteinDistance 함수의 성능이 개선되었습니다. #94543 (Joanna Hulboj).
  • 요소별 함수 호출을 피하여 배치 decimal 유형 변환을 최적화했습니다. #95923 (Konstantin Bogdanov).
  • 이제 Iceberg 테이블은 iceberg_metadata_async_prefetch_period_ms 테이블 설정을 통해 비동기 메타데이터 프리페치를 지원하며, 이 설정은 메타데이터 캐시를 주기적으로 미리 채웁니다. 또한 iceberg_metadata_staleness_ms 쿼리 설정을 사용하면 지정된 staleness 기준보다 최신인 캐시된 메타데이터를 SELECT 쿼리에서 사용할 수 있으므로, 요청 처리 중 Iceberg 카탈로그를 호출할 필요가 없어집니다. #96191 (Arsen Muk).
  • S3Queue ordered 모드는 전체 prefix 이력을 다시 나열하지 않도록 S3 ListObjectsV2 StartAfter를 사용해 ListObjects 호출을 줄입니다. #96370 (Venkata Vineel ).
  • 삽입 중복 제거 시 메모리 사용량 감소. 일반적으로 중복 제거를 위해서는 원본 block이 필요하지만, 동기 삽입에서는 이를 생략해 메모리를 크게 절약할 수 있게 되었습니다. #96661 (Sema Checherinda).
  • 하드코딩된 64 대신 cache line 크기에는 아키텍처별 값을 사용합니다. #97357 (Nikita Taranov).
  • 텍스트 인덱스 딕셔너리 읽기를 소폭 최적화해 텍스트 인덱스 분석의 전반적인 성능을 개선했습니다. #97519 (Anton Popov).
  • ARM에서 16바이트 블록의 LZ4 압축 해제 속도를 개선했습니다. #97774 (Raúl Marín).
  • 기존 iterator 스타일 API를 대체해 SIMD 및 상태 유지형 토크나이저를 지원하는 새로운 고성능 인터페이스로 토큰화를 리팩터링했습니다. #90268의 일부입니다. #97871 (Amos Bird).
  • 인덱스된 컬럼과 인덱스되지 않은 컬럼이 함께 포함된 결합 조건이 있는 쿼리에서 텍스트 인덱스 분석 성능이 개선되었습니다. 이전에는 이런 경우 인덱스 분석 중 조기 종료 최적화가 잘못 비활성화되었습니다. #98096 (Anton Popov).
  • 매우 긴 배열이나 맵을 생성하는 상수 표현식이 포함된 쿼리의 성능이 개선되었습니다. #98287 (Alexey Milovidov).
  • 정수 상수와 비교할 때의 DateTime64 기본 키(primary key) 키 조건 분석을 수정해, 이전에는 전혀 이루어지지 않던 granule 프루닝이 가능해졌습니다. #98410 (Amos Bird).
  • 설정 optimize_syntax_fuse_functions은 기본적으로 활성화되어 있습니다. #98424 (Alexey Milovidov).
  • 로컬 누산기를 사용하고 각 행마다 집계 상태를 거치는 store-forwarding 대신 avgWeighted 집계 함수를 최적화하여, 널 허용 입력에서 성능을 최대 27%까지 향상했습니다. #98793 (Antonio Andelic).
  • 특정 시나리오에서 병렬 윈도우 함수의 성능을 높이고 메모리 사용량을 줄이며, 대규모 배열을 사용하는 arrayFold 워크로드의 성능도 개선합니다. 또한 해당 쿼리에서 페이지 폴트로 인한 부담을 줄이고, 메모리 제한이 엄격한 환경에서 안정성을 높일 수 있습니다. #98892 (filimonov).
  • 정렬 머지 성능을 개선했습니다. #99013 (Artem Zuikov).
  • INTERSECT ALLEXCEPT ALL을 최적화했습니다. #99097 (Raufs Dunamalijevs).
  • 역순 읽기에서도 read_in_order_use_virtual_row 최적화를 지원합니다. #99198 (Vladimir Cherkasov).
  • 쓰기 전에 JoinUsedFlags 설정 여부를 확인해 RIGHTFULL JOIN의 캐시 경합을 줄였습니다. #99274 (Hechem Selmi).
  • 부동소수점 연산을 순수한 정수 산술로 대체해 PrefetchingHelper::calcPrefetchLookAhead를 최적화하고, 명령어 캐시 배치를 개선하며 집계 루프 중 사이클 오버헤드를 줄였습니다. #99327 (Riyane El Qoqui).
  • 노드의 자식 저장에 absl::flat_hash_set 대신 CompactChildrenSet를 사용해 Keeper의 메모리 사용량을 줄였습니다. 새 컨테이너는 힙 할당 없이 0~1개의 자식을 인라인으로 저장할 수 있으며, 이는 대부분의 Keeper 노드에 해당합니다. 이로써 KeeperMemNode의 크기가 144바이트에서 128바이트로 줄어듭니다. #99860 (Antonio Andelic).
  • 이제 집계 프로젝션이 뷰에서 올바르게 지원됩니다. #32753를 수정했습니다. #88798 (Amos Bird).
  • join_use_nulls와 함께 OUTER join을 INNER join으로 변환하는 최적화를 지원합니다. #90978를 해결했습니다. #95968 (Vladimir Cherkasov).
  • 읽기 전에 크기를 정확히 계산하도록 개선해 서브컬럼 읽기 성능을 높였습니다. 이를 통해 메모리 사용량을 줄이고 서브컬럼 읽기 속도를 향상했습니다. #96251 (Pavel Kruglov).
  • 수명이 짧은 메모리 할당, 즉 쿼리 및 요청용 할당이 캐시용 장수명 할당과 섞일 때 발생하는 메모리 단편화를 방지할 수 있도록, mark 캐시, 비압축 캐시, 페이지 캐시가 각각 별도의 jemalloc arena를 사용하도록 했습니다. #96812 (Seva Potapov). #98812. #99021
  • DELETE TTL 규칙이 적용된 테이블에서도 이제 수직 병합 알고리즘을 사용할 수 있습니다. #97332 (murphy-4o).
  • 분산 인덱스 분석 시 데이터 스키핑 인덱스를 적용합니다. #97767 (Azat Khuzhin).
  • prewarm_mark_cache 설정이 활성화되면 이제 보조 인덱스의 마크도 예열됩니다(data part를 fetch할 때와 테이블 시작 시 인덱스 마크 캐시에 로드됨). #97772 (Anton Popov).
  • 접근 제어 시 잠금을 줄였습니다. #97894 (Nikita Taranov).
  • apply_row_policy_after_final 또는 apply_prewhere_after_final이 활성화되면, 이제 행 정책과 PREWHERE의 복합 AND 조건을 분해해 프라이머리 키 인덱스 분석에 사용할 정렬 키 원자를 추출합니다. 이전에는 지연된 필터에 정렬 키 프레디케이트와 비정렬 키 프레디케이트가 섞여 있으면(예: x > 1 AND y != ‘foo’), 전체 표현식이 인덱스 분석 대상에서 제외되었습니다. 이제는 중첩된 AND 표현식에서도 정렬 키 원자(예: x > 1)를 추출해 granule 프루닝에 활용합니다. #98513 (Yarik Briukhovetskyi).
  • 락을 획득하지 않고도 작업 리소스가 해제되도록 변경해 MergeTreeBackgroundExecutor의 락 경합을 줄였습니다. #93620을 해결합니다. #98604 (Dmitry Novik).
  • ArrowStream 리더가 처음 몇 바이트를 매우 큰 메타데이터 길이로 잘못 해석해 발생하던, Arrow가 아닌 데이터를 읽을 때(예: 명시적 포맷 없이 url 또는 file에서 읽는 JSON) 포맷 자동 감지 과정의 과도한 메모리 사용량(~514 MiB) 문제를 수정했습니다. #98893 (Konstantin Bogdanov).

개선 사항

  • 동일한 컬럼에 서로 다른 Geo 유형이 포함된 GeoParquet 파일도 파싱할 수 있게 되었습니다. #97851 (Mark Needham).
  • 와일드카드 의미를 유지한 채 LIKE 패턴을 토큰화하는 tokensForLikePattern SQL 함수를 도입했습니다. %_는 와일드카드로 처리되고, 이스케이프된 와일드카드(\%, \_)는 리터럴로 처리되며, 이스케이프되지 않은 와일드카드에 인접한 토큰은 제외됩니다. #97872 (Amos Bird).
  • S3 테이블 엔진에 {_schema_hash} 플레이스홀더를 추가하여 테이블의 컬럼 정의 해시가 S3 경로에 삽입되도록 했습니다. #98265 (Miсhael Stetsyuk).
  • SymbolIndex, addressToSymbol, system.symbols, buildId는 이제 Mach-O 심볼 테이블을 파싱해 macOS에서도 작동합니다. #99014 (Alexey Milovidov).
  • 이제 system.stack_trace 테이블이 macOS에서도 작동하여 모든 서버 스레드의 스택 트레이스를 내부 검사할 수 있습니다. #98982 (Alexey Milovidov).
  • LDAP 클라이언트가 referral을 따라갈지 여부를 제어할 수 있도록 server별 LDAP 구성 옵션 <follow_referrals>(기본값 false)이 추가되었습니다. referral 추적을 비활성화하면 Active Directory domain-root base DN에서 검색할 때 발생하는 timeout과 멈춤 현상을 방지할 수 있습니다. referral 관련 log messages는 warn에서 trace로 변경되었습니다. #96765 (paf91).
  • 이제 쿼리 실행 중 사용된 모든 데이터 스키핑 인덱스를 query&#95;log 테이블의 skip_indices라는 새 컬럼에 기록합니다. #78676을 수정했습니다. 원 작성자는 @pheepa입니다. #87862 (Grant Holly).
  • ACCESS_DENIED 힌트는 이제 사용자가 필요한 모든 컬럼을 볼 수 있는 경우가 아니면 컬럼 이름을 더 이상 노출하지 않으며, 데이터베이스/테이블 이름은 계속 힌트에 표시됩니다. #91067 (filimonov).
  • 머지 부하가 큰 상황에서도 정리가 지연되지 않도록 MergeTree에 전용 정리 thread를 추가했습니다. 이로써 #86181이 해결되었습니다. #91574 (Amos Bird).
  • 임의의 호스트의 IP가 아니라 로컬 서버(server)의 호스트명에 대한 IP가 변경된 경우에만 클러스터 설정을 다시 로드합니다. #81215, #70156, #65268를 수정했습니다. #93726 (Zhigao Hong).
  • optimize_aggregators_of_group_by_keys가 GROUPING SETS 쿼리에서 집계 함수를 제대로 최적화할 수 있도록 개선했습니다. #93935 (Xiaozhe Yu).
  • Keeper-bench: 메트릭에 오류를 보고하고 —input-request-log 모드용 JSON 메트릭 파일을 생성합니다. #95748 (Mohammad Lareb Zafar).
  • CREATE USER에 ROLE 절이 새로 추가되었습니다. #97074 (Vitaly Baranov).
  • 이제 복제된 데이터베이스로 생성된 클러스터에서 internal_replication 설정을 지정할 수 있습니다. #97228 (Pervakov Grigorii).
  • 새로운 설정 allow_nullable_tuple_in_extracted_subcolumnsTuple, Variant, Dynamic, JSON에서 추출한 Tuple(...) 서브컬럼을 Nullable(Tuple(...))(누락된 행에는 NULL)로 반환할지, 또는 Tuple(...)(누락된 행에는 기본 Tuple 값)로 반환할지를 제어합니다. 이 설정은 기본적으로 비활성화되어 있으며, 변경하려면 서버를 재시작해야 합니다. #97299 (Nihal Z. Miaji).
  • EXPLAIN 쿼리 출력에 deferred filter 정보를 별도 항목으로 추가했습니다(Row Policies/PREWHERE와 함께 FINAL을 사용할 때). 관련: #91065. #97374 (Yarik Briukhovetskyi).
  • 기본적으로 type_json_allow_duplicated_key_with_literal_and_nested_object를 활성화합니다. 이를 통해 원본 JSON 데이터 {"a" : 42, "a.b" : 42}를 ClickHouse가 {"a" : 42, "a" : {"b" : 42}}와 같은 JSON으로 포맷할 때 발생할 수 있는, 파싱 중 중복 키 관련 오류를 피할 수 있습니다. #97423 (Pavel Kruglov).
  • Keeper 개선: find_super_nodes는 Keeper에서 노드 수가 예상치 않게 증가하는 문제를 디버깅할 때 매우 유용한 명령입니다. 하지만 super node가 여러 개 있으면, 명령이 처음 발견한 super node의 하위 노드를 영원히 순회하느라 둘 이상을 찾는 것이 거의 불가능합니다. 이 PR은 super node의 하위 노드를 순회하지 않도록 합니다. #97819 (pufit).
  • clickhouse-keeper-client에 초기 자동 완성 기능이 추가되었습니다. #97828 (Konstantin Bogdanov).
  • 충돌이 발생할 경우 비동기 로깅 버퍼를 플러시합니다. #97836 (Azat Khuzhin).
  • 기본값으로 impersonate 기능을 활성화합니다(EXECUTE AS target_user 참조). #97870 (Vitaly Baranov).
  • SQLite 테이블 엔진에서 KILL QUERY와 clickhouse-client의 쿼리 취소(Ctrl+C)를 통한 쿼리 취소 기능이 개선되었습니다. #97944 (Roman Vasin).
  • jemalloc의 lg_prof_sample을 제어하는 서버 설정 jemalloc_profiler_sampling_rate를 추가하고, 이를 jemalloc.prof.lg_sample 비동기 메트릭으로 노출했습니다. #97945 (Antonio Andelic).
  • 동시 실행이 가능한 크기 제한 큐 구현에서 가중치를 지원합니다. #97962 (Daniil Ivanik).
  • PostgreSQL 딕셔너리 소스에서 허용되는 키에 sslmode를 추가했습니다. 이전에는 PostgreSQLDictionarySource.cpp의 dictionary_allowed_keys 허용 목록에 sslmode가 포함되어 있지 않아 PostgreSQL 딕셔너리 연결의 SSL 모드를 설정할 수 없었습니다. 그 결과, 딕셔너리가 SSL을 요구하는 PostgreSQL 서버(예: 기본적으로 SSL을 강제하는 AWS RDS)에 연결할 수 없었습니다. 연결 시 TLS 협상이 실패하고, 서버가 암호화되지 않은 폴백 연결을 거부했기 때문입니다. #98014 (mcalfin).
  • 혼란을 주는 일반적인 메시지 대신, 존재하지 않는 파일 경로를 clickhouse 또는 clickhouse-local에 전달할 때 명확한 “해당 파일이 없습니다” 오류를 표시합니다. #98048 (Raúl Marín).
  • 이제 Nullable([Fixed]String)Array(Nullable([Fixed]String)) 컬럼에서도 텍스트 인덱스를 생성할 수 있습니다. #98118 (Jimmy Aguilar Mena).
  • 딕셔너리 소스가 의존하는 이름이 지정된 컬렉션이 삭제되지 않도록 했습니다. #98127 (Pablo Marcos).
  • 합계가 포함된 쿼리에 grace_hash 조인 알고리즘을 활성화했습니다. #98144 (János Benjamin Antal).
  • 일반 shared merge tree의 DROP DATABASE 시 백그라운드 머지를 조기에 취소합니다. #98161 (Shaohua Wang).
  • clickhouse-client에서 KILL QUERY 및 cancel query(Ctrl+C)를 사용한 MongoDB와 MySQL 쿼리 취소를 개선했습니다. #98187 (Roman Vasin).
  • NetlinkMetricsProvider를 제거하고, 스레드별 taskstats 메트릭 수집에는 procfs만 사용합니다. Netlink 기반 수집은 컨테이너 환경에서 문제가 있고, 경합 시 꼬리 지연 시간이 더 나빠집니다. #98229 (Amos Bird).
  • manifest 파일 캐싱 문제를 해결하기 위해 Iceberg manifest 파일 처리 로직을 리팩터링했습니다. #98231 (Daniil Ivanik).
  • 이제 테이블의 정렬 키가 toDate(time)와 같은 표현식일 수 있는 경우도 고려하며, 이러한 표현식이 filter의 일부인 경우에는 표현식 지연을 하지 않도록 판단할 수 있습니다. #98237 (Yarik Briukhovetskyi).
  • ZooKeeper의 임시 잠금 znode에 할당된 최대 순차 번호를 나타내는 새 MaxAllocatedEphemeralLockSequentialNumber 메트릭을 추가했습니다. #98243 (Miсhael Stetsyuk).
  • ClickStack를 버전 2.20.0으로 업데이트합니다. #98252 (Aaron Knudtson).
  • 다중 요청 내 각 하위 요청을 개별 요청으로 집계하는 새로운 profile event KeeperRequestTotalWithSubrequests가 추가되어, 실제 Keeper 작업 부하를 더 잘 파악할 수 있게 되었습니다. 기존 KeeperRequestTotal 이벤트는 계속해서 각 다중 요청을 단일 요청으로 집계합니다. #98348 (Antonio Andelic).
  • SYSTEM RELOAD DICTIONARIES는 이제 사전을 위상 정렬 순서대로 다시 로드하므로, 다른 사전을 소스로 사용하는 사전에서도 다시 로드 후 최신 데이터를 반영해 볼 수 있습니다. #98356 (Alexey Milovidov).
  • MergeTree 설정을 변경한 후 통계 캐시를 재시작합니다. #98520 (Han Fei).
  • 연결할 수 있는 “alive” 레플리카만 분산 인덱스 분석에 참여합니다. #98521 (Azat Khuzhin).
  • SQL로 정의된 사용자에 대해 구성 파일에 정의된 설정 프로필(default 프로필 제외)의 사용을 금지하는 설정 access_control_improvements.disallow_config_defined_profiles_for_sql_defined_users이 추가되었습니다(기본적으로 disabled/allowed). #98662 (Alexander Tokmakov).
  • 자동 병렬 레플리카 휴리스틱에서 사용하는 노드 수의 상한을, max_parallel_replicas 설정만 기준으로 삼는 대신 클러스터의 실제 노드 수에 맞춰 제한합니다. #98668 (Nikita Taranov).
  • 분산 인덱스 분석을 위해 헤지 요청과 비동기 읽기를 구현했습니다. #98724 (Azat Khuzhin).
  • 바이너리 AggregateFunction 상태의 역직렬화는 이제 입력 전체를 끝까지 소비해야 합니다. 불필요한 후행 바이트가 추가로 있으면 ClickHouse는 잘못된 형식의 상태 데이터를 허용하지 않고 예외를 발생시킵니다. #98786 (Nihal Z. Miaji).
  • TRUNCATE DATABASE가 쿼리 취소에 반응하도록 했습니다. #98828 (Shaohua Wang).
  • 요청 파이프라이닝, 워밍업 기간, 연산별 통계, 재현 가능한 시드, 더 나은 오류 처리를 추가하여 keeper-bench를 개선했습니다. #98906 (Antonio Andelic).
  • 분산 인덱스 분석에서 SAMPLE 절을 사용할 수 있도록 지원합니다. #98931 (Azat Khuzhin).
  • 쿼리가 빈 결과를 반환하거나 오류가 발생해도 대시보드에 차트 제목이 표시되도록 개선했습니다. #98975 (Yash ).
  • 분석기 오류 메시지에서 더 이상 테이블의 모든 컬럼을 한꺼번에 출력하지 않습니다(이로 인해 150KB가 넘는 예외가 발생할 수 있었습니다). 이제 컬럼 목록은 최대 10개 항목까지만 표시됩니다. #99002 (Yash ).
  • 조인이 포함된 하위 쿼리의 컬럼 통계를 올바르게 반환해, 상위 쿼리에서 이를 조인 재정렬에 활용할 수 있도록 했습니다. #99096 (Alexander Gololobov).
  • send 스레드가 종료될 때까지 기다리지 않고, 종료 처리가 시작되면 즉시 ZooKeeper 세션을 만료된 상태로 표시합니다. 이렇게 하면 다른 스레드가 지체 없이 새 세션을 설정할 수 있습니다. #99102 (Raúl Marín).
  • LLVM-libc의 수학 함수 exp, exp2, expm1, fabs, fabsl, floor, fmodl, log, log2, logf, pow, scalbn, scalbnl, copysignl, nan, nanf, nanlexplogxf 공유 상수를 더 폭넓게 사용합니다. #99118 (Konstantin Bogdanov).
  • 메모리 사용량을 줄이고 system.jemalloc_profile_text collapsed 포맷의 잠재적인 중복 출력 문제를 수정합니다. #99121 (Antonio Andelic).
  • system.aggregated_zookeeper_logis_subrequest 컬럼을 추가하여 독립형 요청과 Multi/MultiRead 요청 내 하위 요청을 구분할 수 있게 했습니다. 이전에는 하위 요청이 독립형 요청과 동일한 버킷에 집계되었고, 각 하위 작업이 전체 multi-request 기간으로 기록되었기 때문에 평균 지연 시간이 오해를 불러일으킬 수 있었습니다. 이제 하위 요청의 지연 시간은 0입니다. #99169 (Miсhael Stetsyuk).
  • 컬럼 타입을 지정하지 않아도 ALTER TABLE MODIFY COLUMN x TTL ... 명령을 허용합니다. #99208 (Nikolay Degterinsky).
  • 이미 연결이 끊어진 세션에 대한 오래된 Keeper 요청은 건너뛰어 불필요한 Raft 왕복을 방지합니다. 추적되는 종료된 세션 수는 max_finished_sessions_cache_size coordination 설정으로 제한됩니다. #99246 (Antonio Andelic).
  • IN 연산자에서 mapValues(map) 기반 텍스트 인덱스를 지원합니다. #99286 (Anton Popov).
  • clickhouse keeper-client에서 셸과 유사한 자동 완성을 지원합니다(따옴표로 묶인 인수의 자동 완성 처리, 예: 'foo ba', 이스케이프된 인수 처리, 예: foo\ ba, 공백이 있는 노드는 ls에서 따옴표로 묶어 출력). #99312 (Azat Khuzhin).
  • 잠금 경합으로 인해 Keeper mntr 명령이 중단되는 문제를 방지합니다. #99472 (Antonio Andelic).
  • 콜백 호출과 읽기 요청 디스패치를 뮤텍스 범위 밖에서 수행하여 Keeper 디스패처의 락 경합을 줄이고, 관측성을 위해 프로파일링된 락 가드를 추가했습니다. #99751 (Antonio Andelic).
  • Parquet 파일의 마지막 블록 끝에 패딩이 누락되어 있어도 허용합니다. #99857 (Seva Potapov).

버그 수정(공식 안정 릴리스에서 사용자에게 영향을 주는 오동작)

  • 정규화된 전체 이름으로 지정되지 않은 경우 Alias 테이블의 대상이 DDL 종속성으로 저장되는 방식을 수정했습니다. 이제 세션 데이터베이스 대신 Alias 테이블의 데이터베이스에 저장됩니다. #95175 (Enric Calabuig).
  • ALIAS 컬럼의 서브컬럼을 읽는 중 잘못된 결과가 반환되거나 예외가 발생하는 문제를 수정했습니다. #95408 (Pavel Kruglov).
  • 이전 분석기에서 JOIN에 비표준 식별자 별칭을 사용할 때 발생하던 컬럼 누락 문제를 수정합니다. #25594, #47288, #53263를 해결합니다. #95679 (Zhigao Hong).
  • 인수가 비어 있을 때 Kusto 방언 함수 bin(), bin_at(), extract(), indexof()에서 발생하던 충돌을 수정합니다. #95736 (NeedmeFordev).
  • clickhouse-client에서 user_files_path 이외의 위치에는 local_object_storage(로컬 파일 시스템 기반 datalake와 LocalDisk에서 사용될 수 있음)를 마운트할 수 없도록 합니다. #96201 (Daniil Ivanik).
  • DeltaLake 테이블 엔진에서 스냅샷 버전 변경 시 발생하는 논리적 경쟁 상태를 수정하고, 불필요하게 비용이 큰 스냅샷 재로드를 제거했습니다. #96226 (Kseniia Sumarokova).
  • DETACH와 ATTACH 사이에 part 이름이 여러 차례 연속으로 변경된 경우, MergeTree에서 part를 ATTACH할 때 발생하던 논리 오류를 수정했습니다. #96351 (Alexey Milovidov).
  • 동일한 요청에서 compatibility와 함께 전송된 명시적 설정의 값이 서버 기본값과 같을 경우, 해당 설정이 별다른 표시 없이 무시될 수 있던 버그를 수정했습니다. #97078 (Raufs Dunamalijevs).
  • 병렬 파싱이 적용된 INSERT에서 잘못된 데이터를 만나면 클라이언트가 실제 파싱 오류(정확한 행 번호 포함) 대신 NETWORK_ERROR를 보고하던 문제를 수정했습니다. #97339 (Alexey Milovidov).
  • Nullable(Tuple) 도입 이후 sumCount 집계 함수가 기존에 직렬화된 상태를 읽지 못하던 문제를 수정했습니다. #97370을 해결합니다. #97502 (Nihal Z. Miaji).
  • Nothing 타입 요소(예: NULL 튜플 요소와 비교하는 경우)가 포함된 튜플 비교를 GROUPING SETSORDER BY와 함께 사용할 때 발생하던 예외를 수정했습니다. #97509 (Alexey Milovidov).
  • 여러 압축 코덱을 사용할 때 Compact MergeTree 파트에서 비결정적으로 계산되던 uncompressed_hash를 수정하여, 잘못된 중복 제거 동작이 발생할 수 있던 문제를 해결했습니다. #97522 (Alexey Milovidov).
  • shared data의 버킷 및 JSON을 사용하는 INSERT SELECT에서 누락된 스트림 관련 논리 오류를 수정했습니다. #97331을 해결합니다. #97523 (Pavel Kruglov).
  • SummingMergeTree 및 CoalescingMergeTree 머지 중 MEMORY_LIMIT_EXCEEDED 예외가 CORRUPTED_DATA로 잘못 보고되는 문제를 수정했습니다. #97537 (János Benjamin Antal).
  • url()과 같은 테이블 함수를 포함한 상관 서브쿼리에서 발생하는 “Context has expired” 예외를 수정했습니다. #97544 (Alexey Milovidov).
  • optimize_syntax_fuse_functions에서 집계 프로젝션, Date 타입, 컬럼 이름 보존과 관련된 예외 및 비정상 동작을 수정했습니다. #97545 (Alexey Milovidov).
  • 정규식이 일치하지 않을 때 잘못된 결과를 내던 replaceRegexpOneextract 쿼리 재작성을 제거하고, replaceRegexpOneGROUP BY ... WITH CUBEgroup_by_use_nulls=1과 함께 사용할 때 발생하던 예외도 수정했습니다. #97546 (Alexey Milovidov).
  • DROP DATABASE에서 쿼리가 강제 종료될 때 database_atomic_wait_for_drop_and_detach_synchronously가 무기한 멈추는 문제를 수정했습니다. #97586 (Alexey Milovidov).
  • KILL QUERYWITH FILL 생성 과정, dictGet을 통한 딕셔너리 로딩, 또는 ReplicatedMergeTree에서 mutations_sync=1로 실행되는 ALTER DELETE에 멈춰 있는 쿼리를 종료하지 못하던 문제를 수정했습니다. #97589 (Alexey Milovidov).
  • loop 테이블 함수는 행 정책, 컬럼 수준 권한, 기타 보안 검사가 적용되는 인터프리터 계층을 거치지 않고 inner_storage->read()를 직접 호출하고 있었습니다. 이로 인해 행 정책으로 제한된 사용자도 직접 SELECT에서는 행이 전혀 반환되지 않더라도 loop(table)를 통해 모든 행을 읽을 수 있었습니다. #97682 (pufit).
  • toDate() 함수를 사용할 때 epoch 이전 DateTime64에서 발생하던 잘못된 파티션 프루닝을 수정했습니다. #97746 (Yarik Briukhovetskyi).
  • 이 패치 이후에는 데이터 파트 집합에 더 높은 파티션 ID를 가진 다른 파티션이 존재할 경우 hasPartitionId가 false를 반환합니다. #97748 (Mikhail Artemenko).
  • JSON의 고급 shared data에서 빈 그래뉼을 읽을 때 발생할 수 있는 충돌을 수정했습니다. #97563을 해결했습니다. #97778 (Pavel Kruglov).
  • DROPINSERT 사이의 경합 상태로 인해 DistributedINSERT할 때 발생하던 Cannot schedule a file LOGICAL_ERROR를 수정했습니다. #97822 (Azat Khuzhin).
  • tokenbf_v1 스킵 인덱스와 함께 mapContainsKey/mapContainsKeyLike를 호출할 때 발생하던 ClickHouse 서버 크래시/assert 문제를 수정했습니다. #97826 (Shankar Iyer).
  • 복합 타입(Variant, Dynamic, Tuple) 내부의 LowCardinality로 인해 concatWithSeparator, format, IN 서브쿼리, GLOBAL IN, 런타임 필터가 적용된 조인에서 발생하던 LOGICAL_ERROR 예외를 수정했습니다. #97831 (Raúl Marín).
  • GROUP BY와 함께 여러 분산 테이블에 결합된 merge() 테이블 함수에서 ARRAY JOIN을 사용할 때 발생하던 LOGICAL_ERROR 예외 Chunk info was not set for chunk in MergingAggregatedTransform를 수정했습니다. #97838 (Raúl Marín).
  • 높은 동시성에서 연결 그룹의 하드 제한에 도달할 경우, HTTP 연결 풀 소멸자에서 포착되지 않은 예외로 인해 서버가 크래시(std::terminate)하던 문제를 수정했습니다. 연결을 풀로 다시 반환하는 과정에서 HTTP_CONNECTION_LIMIT_REACHED 예외가 ~PooledConnection 밖으로 전파되어 SIGABRT로 이어질 수 있었습니다. #97850 (Antonio Andelic).
  • grace_hash 알고리즘을 비등가 조인과 함께 사용할 때, 조인 결과의 크기 제약으로 인해 왼쪽 블록을 끝까지 처리하지 못하는 경우 잘못된 결과가 반환되던 문제를 수정했습니다. #97866 (János Benjamin Antal).
  • #96686에서 도입된 DeltaLake 메타데이터 스캔의 성능 저하 문제를 수정했습니다. #97880 (Kseniia Sumarokova).
  • ZooKeeper 클라이언트에서 sendThread와 receiveThread 사이의 데이터 레이스를 수정했습니다. #97887 (Pablo Marcos).
  • 분산 INSERT SELECT에서 CTE를 사용할 수 없던 버그를 수정했습니다. https://github.com/ClickHouse/ClickHouse/pull/87789의 후속 작업입니다. #95837을 해결합니다. #97889 (Yarik Briukhovetskyi).
  • CachedOnDiskReadBufferFromFile::readBigAt에서 발생하는 예외를 수정했습니다. #97325를 해결합니다. #97890 (Kseniia Sumarokova).
  • 컬럼 불일치로 인해 Alias 엔진에서 materialized 컬럼 사용 시 발생하던 LOGICAL_ERROR 예외를 수정했습니다. #97907을 해결합니다. #97921 (Kai Zhu).
  • 로그 저장소에 s3_plain 메타데이터를 사용하면서 Azure Blob Storage를 사용할 때, 재시작 후 Keeper 데이터가 손실되던 문제를 수정했습니다. #97987 (Antonio Andelic).
  • Int8보다 큰 정수 타입에서 sign 함수의 JIT 오컴파일을 수정했습니다. -128..127 범위를 벗어나는 값에서 잘못된 부호가 반환될 수 있었습니다. #98012 (Alexey Milovidov).
  • 이름에 점이 포함된 struct 필드(예: STRUCT<`a.foo`: STRING, `b.foo`: STRING>)가 있는 상태에서 컬럼 매핑 “name” 모드를 사용하는 Delta Lake 테이블을 읽을 때 발생하던 DUPLICATE_COLUMN 예외와, 경고 없이 NULL이 반환되던 문제가 수정되었습니다. #98013 (Caio Ishizaka Costa).
  • 경량 업데이트 및 보조 인덱스 이후의 mutation 문제를 수정했습니다. #98044 (Raúl Marín).
  • 기본 키(primary key) 기반 스킵 인덱스와 비기본 키 스킵 인덱스를 함께 사용할 때 FINAL 쿼리 결과가 잘못되던 문제를 수정했습니다. #98097 (Raúl Marín).
  • 스칼라 file()DESCRIBE TABLE file()READ ON FILE 검사를 적용합니다. #98115 (Nikolay Degterinsky).
  • glob pattern(예: file('dir/**', 'LineAsString'))으로 파일에 쿼리할 때 디렉터리에 끊어진 심볼릭 링크가 있으면 처리되지 않은 파일 시스템 예외(STD_EXCEPTION)가 발생해 충돌하던 문제를 수정했습니다. 이제 끊어진 심볼릭 링크는 조용히 건너뛰고, 쿼리는 모든 유효한 파일의 결과를 반환합니다. #98143 (Mark Andreev).
  • 필터 표현식에서 arrayJoin을 사용할 때 외부 조인을 내부 조인으로 변환하는 쿼리 계획 최적화 과정에서 발생하던 세그폴트를 수정했습니다. #98147 (Alexey Milovidov).
  • 메시지 간에 읽기 상태가 재설정되지 않아 ProtobufList 포맷이 Kafka 엔진에서 작동하지 않던 문제를 수정했습니다. #98151 (Alexey Milovidov).
  • analyzer_compatibility_join_using_top_level_identifier 및 ARRAY JOIN 관련 논리 오류를 수정하고, #98164를 해결했습니다. #98179 (Vladimir Cherkasov).
  • aggregated_zookeeper_log의 watch 응답에서 Watch component를 비워 두지 않고 설정합니다. #98202 (Antonio Andelic).
  • 파티션 키 컬럼이 정렬 키에 포함되지 않으면, 파티션 프루닝으로 인해 FINAL 중복 제거 과정에서 “최종적으로 남아야 하는” 행이 들어 있는 파티션이 잘못 건너뛰어질 수 있습니다. #98242 (Yarik Briukhovetskyi).
  • 상수 배열을 인수로 전달해 호출할 때 kql_array_sort_asc/kql_array_sort_desc에서 발생하던 논리 오류 “Bad cast from type DB::ColumnConst to DB::ColumnArray”를 수정했습니다. #98251 (Alexey Milovidov).
  • extremes = 1이 enabled된 경우 크래시를 일으킬 수 있던 ColumnConst::getExtremes의 범위 밖 접근 문제를 수정했습니다. #98263 (Alexey Milovidov).
  • 동일한 테이블 쌍에 대해 반대 방향으로 두 개의 concurrent MOVE PARTITION 작업이 수행될 때 발생할 수 있는 잠재적 데드락을 수정했습니다. #98264 (Alexey Milovidov).
  • 이제 HTTP server는 잘못된 headers로 인해 발생한 400 Bad Request 응답에 대해 빈 본문 대신 응답 본문에 오류 메시지를 반환합니다. #98268 (Alexey Milovidov).
  • 분산 인덱스 분석(실험적 기능) 및 쿼리 조건 캐시에서 잘못된 결과를 반환하던 문제를 수정했습니다. #98269 (Azat Khuzhin).
  • 65535 경계를 넘는 데이터가 포함된 키 컬럼에서 toDate 변환으로 인해 트리거된 LOGICAL_ERROR 예외 “MergeTreeSetIndex의 이진 검색 결과가 잘못되었습니다”를 수정했습니다. #98276 (Alexey Milovidov).
  • legacy join 단계의 코드 경로에서 query_plan_join_swap_table 최적화가 CROSS JOIN으로 감싸진 RIGHT JOIN의 테이블 순서를 바꿀 때 발생하던 LOGICAL_ERROR 예외를 수정했습니다. #98279 (Alexey Milovidov).
  • 손상된 quantilesDD 집계 함수 상태를 읽을 때 세그멘테이션 폴트, 예외, 무한 루프, OOM이 발생하지 않도록 DDSketch 역직렬화 중 손상된 데이터를 검증합니다. #98284 (Alexey Milovidov).
  • 외부 쿼리의 연관 컬럼을 arrayMap과 같은 람다 함수 내부에서 참조할 때 발생하던 LOGICAL_ERROR “Trying to execute PLACEHOLDER action”를 수정했습니다. #98285 (Alexey Milovidov).
  • CASE 표현식에 materialize(NULL) 또는 다른 Nullable(Nothing) 인수가 포함된 경우 caseWithExpression에서 발생하던 논리 오류 예외를 수정했습니다. #98290 (Alexey Milovidov).
  • merge 테이블 함수에서 _table 가상 컬럼을 필터링할 때 발생하는 잘못된 형변환 예외를 수정했습니다. #98291 (Alexey Milovidov).
  • blocks/deduplication_hashes/ ZooKeeper 디렉터리 간 정리 순서가 일관되지 않아 재삽입이 잘못 중복 제거되던 간헐적 중복 제거 실패 문제를 수정했습니다. #98293 (Alexey Milovidov).
  • ORDER BY ... WITH FILLLIMIT BY와 함께 사용할 때 예외가 발생하던 문제를 수정했습니다. #98361 (Alexey Milovidov).
  • Parquet/Arrow Date 컬럼을 Enum 컬럼에 삽입할 때 발생하던 드러나지 않는 데이터 손상을 수정했습니다 — 이제 잘못된 Enum 값을 저장하는 대신, 호환되지 않는 유형 변환을 올바르게 거부합니다. #98364 (Alexey Milovidov).
  • Array 컬럼이 있는 Arrow 파일을 Nested 컬럼이 있는 테이블로 읽어들일 때 발생하던 예외를 수정했습니다. #98365 (Alexey Milovidov).
  • 인덱스 또는 프로젝션이 뮤테이션이 완료되기 전에 삭제되면 MATERIALIZE INDEXMATERIALIZE PROJECTION 뮤테이션이 중단되던 문제를 수정했습니다. #98369 (Alexey Milovidov).
  • Nullable(Tuple(...))에서 읽는 중 Tuple 요소 이름이 Nullable null 하위 컬럼과 충돌할 때 발생하던 예외를 수정했습니다. #98372 (Alexey Milovidov).
  • Merge 테이블(Distributed 테이블로 래핑된)을 다른 테이블과 조인할 때 발생하던 예외 “Column … query tree node does not have valid source node”를 수정했습니다. #98376 (Alexey Milovidov).
  • 문자열 표현이 아니라 원시 바이트를 생성하던 네이티브 V3 리더의 잘못된 Parquet BoolFixedString 변환을 수정했습니다. #98378 (Alexey Milovidov).
  • tryGetColumnDescription이 다른 컬럼 조회 메서드와 일관되게 상위 컬럼 종류를 기준으로 서브컬럼을 필터링하도록 수정했습니다. #98391 (Alexey Milovidov).
  • HTTP Basic Auth에서 패딩이 없는 base64 자격 증명도 허용합니다. 일부 HTTP 클라이언트는 Authorization: Basic 헤더에서 끝의 = 패딩을 생략하는데, 이로 인해 이전에는 인증에 실패했습니다. #98392 (Amos Bird).
  • 잘못된 MinMax 인덱스 경계값으로 인해 Nullable 파티션 키 컬럼이 있는 파트를 병합한 뒤 파티션 프루닝 결과가 잘못되던 문제를 수정했습니다. #98405 (Amos Bird).
  • 파이프라인 실행기에서 드물게 발생하는 예외를 수정했습니다. 파이프라인 확장과 쿼리 취소가 경합할 때 이 예외가 Received signal 6으로 나타날 수 있었습니다(디버그 빌드에서만 해당). #98428 (Alexey Milovidov).
  • count_distinct_optimizationQUALIFY 절과 함께 사용할 때 발생하는 “컬럼 식별자가 이미 등록되어 있습니다” 예외를 해결했습니다. #98433 (Alexey Milovidov).
  • LowCardinality 컬럼 인수와 함께 IN/NOT IN을 사용할 때 발생하는 “cannot be inside Nullable type” 예외를 수정했습니다(예: aLowCardinality(String)일 때 a NOT IN (b)). #98443 (Alexey Milovidov).
  • FilterBySetOnTheFly 최적화가 MergeJoinTransform과 순환 의존성을 형성할 때 PingPongProcessor에서 발생한 교착 상태로 인해 full_sorting_merge 조인에서 발생하던 “Pipeline stuck” 예외를 수정했습니다. #98454 (Alexey Milovidov).
  • 모든 행을 삭제하는 TTL과 상수 GROUP BY 키를 사용하는 집계 프로젝션이 있는 파트를 병합할 때 발생하는 LOGICAL_ERROR 예외 “Projection cannot increase the number of rows in a block”를 수정했습니다. #98458 (Alexey Milovidov).
  • CROSS JOININNER JOIN USING과 함께 사용할 때 발생하던 논리 오류 예외를 수정했습니다. #98459 (Alexey Milovidov).
  • 키 인수가 Nullable일 때 dictGetOrDefault에서 발생하는 널 포인터 역참조 문제를 수정했습니다. #98460 (Alexey Milovidov).
  • 집계 프로젝션을 사용할 때 materialize로 인해 쿼리와 프로젝션 간에 LowCardinality 유형 차이가 생겨 DISTINCT 쿼리에서 예외가 발생하던 문제를 수정했습니다. #98462 (Alexey Milovidov).
  • OUTER JOIN과 join_use_nulls가 활성화된 상태에서 필터 표현식에 arrayJoin을 사용할 때 발생하던 LOGICAL_ERROR 예외를 수정했습니다. #98464 (Alexey Milovidov).
  • optimize_aggregation_in_order를 사용해 병렬 레플리카를 사용할 때 발생하던 논리 오류 예외 “Replica decided to read in WithOrder mode, not in ReverseOrder”를 수정했습니다. #98467 (Alexey Milovidov).
  • addWatch 요청 후 ClickHouse Keeper가 Java ZooKeeper 클라이언트의 연결을 끊는 문제를 수정했습니다. Java 클라이언트는 addWatch 응답에서 4바이트 ErrorResponse 본문을 기대하지만, Keeper는 빈 본문을 보내 EOFException을 발생시키고 세션 연결 해제를 유발했습니다. 이로 인해 Apache Curator의 CuratorCache와 영구 watch를 사용하는 모든 Java 애플리케이션이 정상적으로 동작하지 않았습니다. #98079를 수정합니다. #98499 (Antonio Andelic).
  • 팔로워가 다운될 때 zk_followerszk_synced_followers Keeper 메트릭이 감소하지 않던 문제를 수정했습니다. mntr four-letter-word 명령에 새로운 zk_learnerszk_synced_non_voting_followers 메트릭을 추가했습니다. #54173을 수정합니다. #98504 (Antonio Andelic).
  • MergeTree 트랜잭션 사용 시 TRUNCATE TABLEOPTIMIZE TABLE이 동시에 실행될 때 renameAndCommitEmptyParts에서 발생할 수 있던 LOGICAL&#95;ERROR 예외 문제를 수정했습니다. #98508 (Alexey Milovidov).
  • Keeper’s secure raft port가 openSSL 구성의 cipherListdhParamsFile을 무시하고, 사용자 지정 값 대신 항상 기본값을 사용하던 문제를 수정했습니다. #51188을 해결했습니다. #98509 (Antonio Andelic).
  • “Receiving request for session X took 9963 ms”와 같이 오해를 살 수 있는 Keeper 로그 메시지를 수정했습니다. 보고된 시간은 실제 작업 수행 시간이 아니라, 하트비트 사이에 poll()에서 유휴 상태로 대기한 시간이었습니다. #79026를 수정했습니다. #98510 (Antonio Andelic).
  • read_in_order_use_virtual_row 및 단조 함수에서 예기치 않은 결과가 발생하는 문제를 수정하고, #97837을 해결했습니다. #98514 (Vladimir Cherkasov).
  • MergeTree 테이블에서 IN 서브쿼리와 함께 PREWHERE를 사용할 때 발생하던 LOGICAL_ERROR: Not-ready Set is passed as the second argument for function 'in' 오류를 수정했습니다. #98522 (Alexey Milovidov).
  • 종료 신호에 응답하지 않아 서버가 정상적으로 종료되지 않던 Keeper TCP 연결 문제를 수정했습니다. #98525 (Alexey Milovidov).
  • query_plan_merge_expressions = 0인 상태에서 query_plan_convert_join_to_in이 활성화되면 발생하는 “ActionsDAG 출력에서 정렬 컬럼을 찾을 수 없습니다” 예외를 수정했습니다. #98526 (Alexey Milovidov).
  • 명명된 컬렉션 사용 시 실패하던 MongoDB 딕셔너리 소스 문제를 수정했습니다. #97840를 해결했습니다. #98528 (Pablo Marcos).
  • 매개변수 치환 후 Identifier가 비어 있을 때 발생하는 LOGICAL_ERROR를 수정했습니다. #98530 (Pervakov Grigorii).
  • sort_overflow_mode = 'break'를 윈도우 함수와 함께 사용할 때 발생하던 파이프라인 데드락을 수정했습니다. #98543 (Alexey Milovidov).
  • 새 block을 추가하는 도중 예외가 발생했을 때 Buffer 엔진의 컬럼 롤백을 수정했습니다. 이전 로직은 컬럼의 메모리 내 상태를 손상시킬 수 있었습니다. #98551 (Pavel Kruglov).
  • const Dynamic 또는 Variant 컬럼과 NULL에 대한 null-safe 비교(<=> / IS NOT DISTINCT FROM)에서 발생하던 예외 Bad cast from type ColumnConst to ColumnDynamic를 수정했습니다. 또한 Dynamic/VariantNULL 간의 IS DISTINCT FROM이 항상 0을 잘못 반환하던 문제도 수정했습니다. #98553 (Alexey Milovidov).
  • text index를 다른 스킵 인덱스와 함께 사용할 때 발생하던 문제를 수정했습니다. 이전에는 쿼리 필터에서 text index와 다른 일반 스킵 인덱스를 동시에 사용하면 “Trying to get non-existing mark”와 같은 논리 오류가 발생할 수 있었습니다. #98555 (Anton Popov).
  • 동일한 쿼리 범위에서 별칭이 지정된 테이블 함수가 여러 번 나타날 때(예: PREWHERE 절과 QUALIFY 절 모두에서) 발생하는 논리 오류 “TABLE_FUNCTION is not allowed in expression context”를 수정했습니다. #98557 (Alexey Milovidov).
  • PK에서 컬럼뿐 아니라 표현식도 사용하는 분산 인덱스 분석을 수정했습니다(이로 인해 원격 레플리카에서 중복 그래뉼이 전혀 필터링되지 않던 문제가 있었습니다). #98561 (Azat Khuzhin).
  • 서브컬럼이 다른 컬럼의 기본값/별칭 표현식에서 사용되는 경우 해당 컬럼을 삭제할 수 없도록 하고, ALTER DROP COLUMN에서 기본값 표현식에 분석기를 사용합니다. #98569 (Nikita Mikhaylov).
  • HTTP 클라이언트에서 재시도할 수 없는 오류(HTTP_CONNECTION_LIMIT_REACHED 포함) 발생 시 S3 요청이 잘못 재시도되는 문제를 수정했습니다. #98598 (Sema Checherinda).
  • DateTime64에서 파티션 프루닝 시 발생하는 Decimal 오버플로우를 수정했습니다. #98628 (Yarik Briukhovetskyi).
  • JIT 표현식 컴파일의 두 가지 버그를 수정했습니다. nativeCast 타입 검사에 있던 복사 붙여넣기 오류로 인해 정수→정수 및 부동소수점→부동소수점 CAST 분기에 도달할 수 없던 문제와, LLVM PassBuilder에 잘못된 nullptr TargetMachine이 전달되어 대상별 최적화 패스가 등록되지 않던 문제를 해결했습니다. #98660 (Alexey Milovidov).
  • 사용자가 SHOW_COLUMNS 권한 없이도 localhost를 대상으로 하는 remote(), remoteSecure(), cluster(), 또는 clusterAllReplicas()를 통해 임의의 테이블을 DESCRIBE할 수 있었던 RBAC 우회를 수정했습니다. #98669 (pufit).
  • filter push-down 최적화로 공유 DAG 노드가 손상되면서, 불리언이 아닌 표현식(예: sin(col))이 JOIN과 함께 WHERE와 SELECT 양쪽에서 사용될 때 발생하던 BAD_GET 예외와 잘못된 쿼리 결과를 수정했습니다. #98681 (Alexey Milovidov).
  • 병렬 레플리카에서 read_in_order_through_join를 사용할 때 발생하는 LOGICAL_ERROR “Replica decided to read in Default mode, not in WithOrder” 오류를 수정했습니다. #98685 (Alexey Milovidov).
  • input 테이블 함수를 remote의 인수로 사용할 때 발생하는 “Bad cast from type DB::TableFunctionNode to DB::QueryNode” 예외를 수정했습니다. #98694 (Alexey Milovidov).
  • 빈 covering parts를 잘못 정리해 발생한 오래된 데이터 파트의 재등장 문제를 수정했습니다. #98698 (Shaohua Wang).
  • equals 비교에서 불리언 함수가 Variant 타입을 반환할 때 LogicalExpressionOptimizerPass에서 발생하는 예외를 수정했습니다. #98712 (Alexey Milovidov).
  • 월/요일 이름의 프리픽스로 시작하는 단어를 parseDateTimeBestEffort가 잘못 파싱하는 문제를 수정했습니다. #97965를 해결합니다. #98742 (Pavel Kruglov).
  • 새 분석기가 활성화된 상태에서, 서로 다른 매개변수(예: 서로 다른 SKIP 필드)를 가진 JSON 컬럼이 있고 JSON 하위 경로를 참조하는 ALIAS 컬럼도 포함된 테이블에 대해 merge() 테이블 함수 또는 Merge 엔진으로 쿼리할 때 발생하던 UNKNOWN_IDENTIFIER 예외를 수정했습니다. #97812을 해결합니다. #98753 (Pavel Kruglov).
  • 분석기 사용 시 View에서 Distributed 스토리지를 사용하는 경우 optimize_skip_unused_shards 최적화가 올바르게 동작하지 않던 문제를 수정했습니다. #98754 (Nikolai Kochetov).
  • clickhouse-client에서 --external로 전달된 외부 테이블의 Tuple 하위 컬럼에 이름으로 접근하는 동작(예: Tuple(a UUID, b Int32)에 대해 SELECT x.a)을 수정했습니다. #96925를 해결합니다. #98755 (Pavel Kruglov).
  • 유효하지 않은(중간에 잘린) UTF-8 입력에서 reverseUTF8 예외가 발생하던 문제를 수정했습니다. #98770 (Alexey Milovidov).
  • false와 OR로 결합된 프레디케이트(즉, or(x, 0))에서 set 스킵 인덱스의 유용성 감지를 수정했습니다. #98776 (Azat Khuzhin).
  • FINAL + PREWHERE + 상수 WHERE 표현식 + count()와 같은 컬럼과 무관한 집계 함수 조합에서 발생할 수 있던 LOGICAL_ERROR 예외(removeUnusedColumns에서 block 구조 불일치)를 수정했습니다. #98778 (Alexey Milovidov).
  • ClickHouse 딕셔너리의 자동 재로드 시 생성되는 system.trace_log 항목에 비어 있지 않은 쿼리 ID가 포함되도록 합니다. #98784 (Miсhael Stetsyuk).
  • IDatabaseTablesIterator::table() 호출에서 테이블 스냅샷을 생성한 시점부터 이후 반복 과정에서 다른 스레드가 테이블을 변경하는 시점 사이에 만들어진 시스템 테이블(system tables)에서 NULL 포인터를 역참조하면서 발생하던 크래시를 수정했습니다. #98792 (Grant Holly).
  • SYSTEM START REPLICATED VIEW가 갱신 작업을 다시 시작하지 못하던 문제를 수정했습니다. #98797 (Pablo Marcos).
  • view() 테이블 함수에 조인이 포함되어 있고 이를 다른 JOIN 안에서 사용할 때 발생하는 “Inconsistent table names” 예외를 수정했습니다(이전 분석기에서만 해당). #98809 (Alexey Milovidov).
  • pending&#95;signals를 통한 RLIMIT_SIGPENDING 조정 문제를 수정했습니다. #98829 (Azat Khuzhin).
  • cluster 테이블 함수와 loop를 함께 사용할 때 발생하던 예외를 수정했습니다. #98860 (Konstantin Bogdanov).
  • enable_join_runtime_filters=1(기본값)일 때 여러 개의 조인 키 컬럼을 사용하는 LEFT ANTI JOIN이 잘못된 결과를 반환하던 문제가 수정되었습니다. #98871 (Alexander Gololobov).
  • 데이터를 여러 청크에서 읽을 때(예: index_granularity가 작을 때) WITH FILL STALENESS가 추가로 채워진 행을 생성하는 문제를 수정했습니다. #98895 (Alexey Milovidov).
  • “RPNBuilderFunctionTreeNode에 A개의 인수가 있는데, B 인덱스의 인수를 가져오려고 했습니다” LOGICAL_ERROR를 수정했습니다. #98900 (Azat Khuzhin).
  • 실패한 메모리 할당이 롤백되지 않아 발생한 메모리 추적 오차, nallocx(0)의 정의되지 않은 동작, 전역 피크 추적에서 1만큼 어긋나는 문제를 수정했습니다. 추적 범위를 io_uring 링 버퍼까지 확장했습니다. #98915 (Antonio Andelic).
  • 사용자 경로 외부의 로컬 데이터 레이크 테이블은 생성뿐만 아니라 ATTACH도 금지합니다. #98936 (Daniil Ivanik).
  • urlCluster 또는 이와 유사한 클러스터 테이블 함수를 사용하는 쿼리에서 “ReadBuffer is canceled” 예외를 발생시킬 수 있는 경쟁 상태를 수정했습니다. #98955 (Alexey Milovidov).
  • BFloat16 유형의 인수가 전달될 때 재무 함수(financialNetPresentValue, financialInternalRateOfReturn 등)에서 발생하는 LOGICAL_ERROR 예외를 수정했습니다. #98958 (Alexey Milovidov).
  • 쿼리 계획 표현식 머지가 비활성화된 경우(query_plan_merge_expressions = 0 또는 query_plan_enable_optimizations = 0), ALIAS 컬럼에 대해 스킵 인덱스(및 프라이머리 키 조건)가 적용되지 않던 문제를 수정했습니다. #98960 (Peng).
  • async 삽입 시 InsertQuery ProfileEvent가 증가하도록 했습니다. #98626을 해결합니다. #98962 (Narasimha Pakeer).
  • 기본 키(primary key)에 NaN 부동소수점 값이 포함된 경우, accurateLessaccurateEquals가 ClickHouse 정렬 순서에 맞게 NaN을 일관되게 처리하도록 하여 디버그 빌드에서 발생하던 예외 “Inconsistent KeyCondition behavior”를 수정했습니다. #98075를 해결했습니다. #98964 (Alexey Milovidov).
  • SummingMergeTree는 이제 Bool(및 기타 도메인 유형) 컬럼을 더 이상 합산하지 않습니다. Bool 값은 산술적으로 합산되는 대신 그대로 유지됩니다. #98976 (Yash ).
  • optimize_const_name_size가 설정되고 enable_scalar_subquery_optimization = 0인 상태에서 원격 세그먼트에 대해 쿼리할 때 발생하던 Scalar doesn&#39;t exist 예외를 수정했습니다. 원격 쿼리에서 __getScalar 참조로 대체된 큰 상수들이 세그먼트로 전송되지 않아 쿼리가 실패하던 문제가 있었습니다. #98979 (andriibeee).
  • GROUP BY와 역방향 딕셔너리 조회, Date/DateTime 변환 비교, 튜플 비교가 포함된 표현식이 있는 일부 쿼리에서 NOT_FOUND_COLUMN_IN_BLOCK 문제를 수정했습니다. #98888를 해결합니다. #98980 (Nihal Z. Miaji).
  • MergeTree 엔진에서 version/sign/is_deleted 컬럼을 EPHEMERAL 또는 ALIAS로 변경할 때 발생하던 정의되지 않은 동작(널 포인터 역참조)을 수정했습니다. 이제 이러한 변경은 올바르게 거부됩니다. #98985 (Alexey Milovidov).
  • system.grantsaccess_object 컬럼에서 URLS3 권한 부여의 정규식 매개변수를 빠뜨리던 문제를 수정했습니다. #98987 (DQ).
  • Iceberg BigLake 읽기 관련 문제가 수정되었습니다. 이제 ADC 자격 증명이 GCS S3 클라이언트로 전달되어 403 오류가 해결되고, OAuth2 자격 증명은 전송 전에 URL 인코딩되어 특수 문자가 포함된 토큰에서 발생하던 인증 실패가 해결되며, 네임스페이스 순회도 더 이상 BigLake HTTP 400 응답에서 중단되지 않습니다. #98998 (Nikita Fomichev).
  • clickhouse-client에서 TZ 환경 변수가 POSIX 파일 경로 구문(예: TZ=:/etc/localtime)을 사용할 때 시간대를 변경하지 못하던 문제를 수정했습니다. #99000 (Yash ).
  • startsWith, LIKE, NOT LIKEFixedString 컬럼과 함께 사용할 때 발생하던 잘못되거나 충분하지 않던 프루닝을 수정했습니다. 또한 이제 FixedString에서 String으로 변환하는 CAST 함수는 키 컬럼에 적용된 경우 그래뉼을 프루닝할 수 있습니다. #98940을 해결합니다. #99001 (Nihal Z. Miaji).
  • 중복 이벤트가 발생했을 때 strict_deduplication을 사용하는 windowFunnel이 잘못된 레벨을 반환하던 문제를 수정했습니다. #99003 (Yash ).
  • 서브쿼리에서 EXISTS가 LIMIT 및 OFFSET 절을 무시하던 버그를 수정했습니다. 이 버그로 인해 OFFSET이 적용되었거나 LIMIT이 0이어서 서브쿼리가 행을 반환하지 않는 경우 잘못된 결과가 발생했습니다. #88722을 닫습니다. #99005 (andriibeee).
  • GROUPING SETS와 함께 필터 푸시다운 최적화 과정에서 상수로 단락 평가되는 AND 표현식을 만나면 발생하던 “Block structure mismatch” 예외를 수정했습니다. #99010 (Alexey Milovidov).
  • 쿼리 계획에 _part_offset 컬럼이 없을 때 패치 파트(경량 업데이트)를 읽는 과정에서 발생하던 예외를 수정했습니다. #99023 (Alexey Milovidov).
  • pk_id가 primary key이고 String 유형일 때, SELECT * FROM table WHERE pk_id = ''와 같은 쿼리는 이제 그래뉼을 필터링할 때 primary key 인덱스를 올바르게 사용합니다. #99027 (Shankar Iyer).
  • 백그라운드 스레드가 데이터를 스트리밍하는 중에 materialized view가 분리되면 Kafka 엔진에서 발생하던 DEPENDENCIES_NOT_FOUND 예외를 수정했습니다. #99028 (Alexey Milovidov).
  • 가상 컬럼과 같은 이름의 EPHEMERAL 컬럼(예: _part_offset)이 있는 테이블을 생성할 때 발생하던 예외를 해결했습니다. #99031 (Alexey Milovidov).
  • 글롭 패턴을 사용하는 url() 테이블 함수로 존재하지 않는 압축 파일을 읽을 때 표시되던 오해의 소지가 있는 “inflate failed: buffer error”를 수정했습니다. 이제 http_skip_not_found_url_for_globs가 활성화된 경우 예상대로 빈 결과를 반환합니다. #99034 (Alexey Milovidov).
  • 스키마(schema) 변경(예: ADD COLUMN) 이후 패치 파트에서 ALTER TABLE ... DROP PART를 실행할 때 발생하던 서버 충돌(std::terminate)을 수정했습니다. 이 충돌은 빈 커버리지 파트 메타데이터에서 시스템 컬럼(_part)이 누락되면서 NOEXCEPT_SCOPE 내부에서 예외가 처리되지 않은 것이 원인이었습니다. #99036 (Peng).
  • 캐시된 디스크 읽기 중 메모리 한도 초과 예외가 발생하면 ClickHouse 서버 프로세스가 비정상 종료될 수 있었습니다. 이 문제가 수정되었습니다. #99042 (Shankar Iyer).
  • dictGet을 사용해 ROW POLICY와 ALIAS 컬럼이 모두 있는 테이블을 쿼리할 때 발생하던 LOGICAL_ERROR를 수정했습니다. 이 문제는 새로운 분석기에서 ALIAS 컬럼을 해석하는 과정에서 테이블 표현식에 너무 이르게 접근해 발생했습니다. #99065 (Peng).
  • 데이터 포맷이 Avro인 Iceberg 테이블에서 사용자가 가상 컬럼(virtual columns)만 쿼리하려고 할 때 발생하는 범위 이탈 오류를 수정했습니다. 매우 드문 시나리오이므로 치명적 문제로 표시하지 않았습니다. #88238을 해결했습니다. #99080 (alesapin).
  • remote() + view()를 사용하는 재귀 CTE에서 발생하던 세그멘테이션 폴트를 수정했습니다. #99081 (Konstantin Bogdanov).
  • read-in-order 최적화가 적용된 경우 불필요한 추가 인덱스 분석을 건너뜁니다. #99084 (Vladimir Cherkasov).
  • patch part를 적용하는 중 메모리 제한 예외가 발생해 일어나던 충돌을 수정했습니다. #99086 (Anton Popov).
  • 재초기화 복구 과정에서 ZooKeeper 항목이 삭제된 뒤 오래된 first_failed_task_name 때문에 발생하던 DDLWorker의 디버그 어설션을 수정했습니다. #99099 (Antonio Andelic).
  • TTL이 적용된 머지 시 텍스트 인덱스 재구축 문제를 수정했습니다. #99107 (Anton Popov).
  • Iceberg 테이블 엔진의 ALTER TABLE ... REMOVE SETTINGS 쿼리에서 발생하는 충돌을 수정했습니다. #86330를 해결합니다. #99108 (alesapin).
  • query_plan_convert_any_join_to_semi_or_anti_join 최적화에서 일치하지 않는 행에 대해 잘못된 결과를 반환하던 버그를 수정했습니다. 관련: https://github.com/ClickHouse/ClickHouse/pull/95995. #99112 (Yarik Briukhovetskyi).
  • ASTColumnsExceptTransformer::transform에서 발생하는 LOGICAL_ERROR 예외를 해결했습니다. #99119 (Pablo Marcos).
  • 필요한 소스 접근 권한 없이 사용자가 테이블 함수(mysql(), postgresql(), sqlite(), arrowFlight(), jdbc(), odbc() 등)에서 DESCRIBE TABLE 또는 CREATE TABLE AS를 통해 테이블 구조를 확인할 수 있게 했던 RBAC 우회를 수정했습니다. 원격 서버에서 스키마를 추론하는 함수의 경우, 이 문제로 인해 권한 없이 아웃바운드 연결(SSRF)을 유발할 수도 있었습니다. #99122 (pufit).
  • 동적 재구성과 리더십 이전 중 발생하던 Keeper 충돌(NuRaft의 세그멘테이션 오류)을 수정했습니다. #99133 (JIaQi Tang).
  • 대상에서 이를 지원하지 않는 경우, SAMPLE과 함께 Buffer 테이블을 사용할 때 발생하던 충돌을 수정했습니다. #99141 (Kseniia Sumarokova).
  • patch parts 컬럼 순서가 일치하지 않아 발생한 LOGICAL_ERROR를 수정했습니다. #99164 (Pablo Marcos).
  • Iceberg 테이블에 서로 다른 포맷(ORC 및 Parquet)의 파일이 함께 포함된 경우 발생하던 매우 드문 크래시를 수정했습니다. #88126를 수정합니다. #99168 (alesapin).
  • 백업/복원에 max_execution_time이 적용되지 않던 문제를 수정했습니다. #99205 (Kseniia Sumarokova).
  • ORDER BY ALL이 없는 INSERT SELECT 쿼리에서 insert_deduplication_token이 조용히 무시되던 문제를 수정했습니다. 이전에는 정렬되지 않은 INSERT SELECT에서 명시적인 사용자 token이 제공된 경우에도 중복 제거가 완전히 비활성화되었습니다. 이제는 insert_deduplication_token만 제공하면 ORDER BY ALL 유무와 관계없이 중복 제거가 활성화됩니다. #99206 (Desel72).
  • InverseDictionaryLookupPass 최적화 중 과도하게 수행되던 접근 권한 검사를 수정했습니다. 이제 방문하는 모든 노드마다 CREATE_TEMPORARY_TABLE 권한을 확인하는 대신, 패스를 실행하기 전에 한 번만 확인합니다. #99210 (Mikhail Artemenko).
  • 스킵 인덱스 타입, 압축 코덱 이름, 데이터베이스 엔진 이름, 딕셔너리 레이아웃/소스 정의를 난독화하면서 clickhouse format --obfuscate가 유효하지 않은 SQL을 생성하는 문제를 수정했습니다. #99260 (Raúl Marín).
  • 일부 경우 Time[64] 타입과 DateTime[64] 타입을 비교할 때 혼동을 초래하던 버그를 수정했습니다. 이제 이런 경우에는 1970-01-01을 날짜 부분으로 추가해 Time[64] 값을 DateTime[64]로 승격합니다. #99267 (Yarik Briukhovetskyi).
  • 분산 DDL 쿼리의 DDL worker에서 설정 제약 범위를 제한합니다. #99317 (Pablo Marcos).
  • TOTP 인증 관련 사소한 문제를 수정했습니다: 비밀번호가 비어 있을 때의 --one-time-password CLI 옵션 처리와 <digits><period> 구성 값 검증입니다. #99322 (Vladimir Cherkasov).
  • enum 정의에 없는 값을 가진 Enum8/Enum16 컬럼을 직렬화할 때 Avro 출력 형식에서 발생하던 논리적 오류 unordered_map::at: key not found를 수정했습니다. #99332 (Desel72).
  • Dynamic이 포함된 Tuple 내부의 희소 직렬화에서 CHECK TABLE 문제를 수정했습니다. #96588을 해결합니다. #99351 (Pavel Kruglov).
  • 텍스트 인덱스 전처리기의 지나치게 엄격한 검증을 수정했습니다. #99359 (Anton Popov).
  • 25.10에서 이후 버전으로 암시적 minmax 인덱스가 있는 복제된 테이블(Replicated Tables)을 업그레이드할 때 발생하는 호환성 문제를 수정했습니다. #99392 (Raúl Marín).
  • 텍스트 인덱스 분석에서 부정형 함수(notEquals, notLike, notIn) 지원을 제거했습니다. 이러한 함수는 어떤 그래뉼도 건너뛸 수 없으므로, 이 함수들에 대해 인덱스를 분석해도 이점 없이 오버헤드만 늘어났습니다. #99393 (Anton Popov).
  • Distributed 테이블이 IN 하위 쿼리 내부에서 사용된 경우를 처리하기 위해 새 분석기에서 optimize_skip_unused_shards를 수정했습니다. #99436 (Nikolai Kochetov).
  • 쿼리 결과에 중복된 컬럼 이름이 포함될 때 INTERSECT/EXCEPT에서 발생하던 heap-use-after-free 문제를 수정했습니다. #99471 (Alexey Milovidov).
  • ALTER TABLE ... DROP PART에서 파트 이름으로 타입이 지정된 쿼리 매개변수를 사용할 때 발생하는 논리 오류를 수정했습니다. #99489 (Alexey Milovidov).
  • 별칭으로 SELECTWHERE 절 모두에서 텍스트 인덱스 프레디케이트(예: hasAllTokens)를 참조할 때 발생하던 NOT_FOUND_COLUMN_IN_BLOCK 예외를 수정했습니다. #99504 (Anton Popov).
  • 서로 별도의 텍스트 인덱스가 있는 컬럼들에 걸쳐 OR로 hasAllTokens를 사용할 때 잘못된 결과가 반환되는 문제를 수정했습니다. #99505 (Anton Popov).
  • page_cache_max_size 설정이 적용되도록 clickhouse-local에서 페이지 캐시를 초기화하도록 했습니다. #99510 (Alexey Milovidov).
  • 드물게 DETACH/ATTACH TABLE 쿼리 후 데이터 파트가 손상된 것으로 잘못 표시되어 분리되던 문제를 수정했습니다. #99529 (Anton Popov).
  • HTTP 인터페이스를 통해 Pretty 형식으로 비어 있는 시스템 테이블을 쿼리할 때 std::length_error 예외가 발생하던 문제를 수정했습니다. #99541 (Alexey Milovidov).
  • 가상 컬럼(예: _part_offset)과 같은 이름의 EPHEMERAL 컬럼을 만들기 위해 ALTER TABLE ADD COLUMN을 사용할 때 발생하던 LOGICAL_ERROR를 수정했습니다. #99549 (Alexey Milovidov).
  • 캐시 키 불일치로 인해 part 제거 후에도 VectorSimilarityIndexCache 항목이 퇴출되지 않던 문제를 수정했습니다. #99575 (Seva Potapov).
  • 로컬 파일에서 Google 자격 증명을 읽지 못하게 합니다. 파일 경로를 알고 있으면 다른 자격 증명도 읽을 수 있으므로 이 설정은 안전하지 않습니다. #99584 (Konstantin Vedernikov).
  • 분석기의 성능 저하 문제를 수정했습니다. ARRAY JOIN에서 사용되지 않는 컬럼을 제거했습니다. #99587 (Dmitry Novik).
  • 기존 경량한 삭제와 행 정책이 있는 테이블에서 텍스트 인덱스를 읽을 수 있도록 수정했습니다. #99661 (Anton Popov).
  • filter-in-decoder 경로에서 필터링으로 제외된 페이지를 만날 때 Parquet 리더에서 발생하는 nullptr 역참조를 수정했습니다. #99676를 해결합니다. #99677 (Alexey Milovidov).
  • O_DIRECT 사용 시 AsynchronousReadBufferFromFileDescriptor에서 발생하는 잘못된 seek 동작을 수정했습니다. #99358를 해결했습니다. #99678 (Pavel Kruglov).
  • 손상된 압축 데이터를 압축 해제할 때 CompressionCodecT64에서 발생하던 힙 버퍼 오버플로우와 CompressionCodecMultiple에서 발생하던 프로세스 강제 종료 문제를 수정했습니다. 두 문제는 모두 새로운 libFuzzer 타깃에서 발견되었습니다. 이제 코덱은 비정상 종료되는 대신 예외를 발생시킵니다. #99680 (Rahul).
  • 서버가 모든 테이블의 로딩을 완료할 때까지 처리를 지연합니다. #99700 (Seva Potapov).
  • 인라인 DDL 매개변수에서 RemoteHostFilter를 우회하는 MySQL 딕셔너리 소스 문제를 수정했습니다. #99720 (Shaohua Wang).
  • system.tables에서 데이터 레이크 테이블을 순회할 때 발생하는 논리 오류를 수정했습니다. #99739 (Konstantin Vedernikov).
  • 전처리기가 적용된 텍스트 인덱스에서 IN 함수와 함께 사용하는 프레디케이트 분석 문제를 수정했습니다. 또한 텍스트 인덱스에서 검색된 토큰 간 충돌 문제를 수정했으며, 이 문제로 인해 잘못된 결과가 반환될 수 있었습니다. #99755 (Anton Popov).
  • shape 차원이 음수인 Npy 포맷 파일을 읽을 때 발생하던 무한 루프를 수정했습니다. #99812 (Desel72).
  • 쿼리 계획 헤더를 계산할 때 0개의 행에 대해 평가되는 경우 FixedString 인수의 CRC32 함수에서 발생하는 global-buffer-overflow를 수정했습니다. #99835 (Alexey Milovidov).
  • Iceberg 테이블에서 ALTER TABLE ... MODIFY COLUMN ... COMMENT 실행 시 발생하던 크래시(NULL 포인터 역참조)를 수정했습니다. #99838 (Desel72).
  • aggregate_functions_null_for_empty 설정이 Array 또는 Map처럼 널 허용이 아닌 타입을 반환하는 집계 함수(예: groupArray, sumMap)에서도 작동하도록 수정했습니다. #99839 (Alexey Milovidov).
  • 부호 있는 정수 타입과 부호 없는 정수 타입이 혼합된 상태에서 midpoint 함수를 호출할 때 발생하던 LOGICAL_ERROR 예외를 수정했습니다. #99867 (Alexey Milovidov).
  • HAVING 절이 있는 쿼리에서 필터 표현식에 NULL을 반환하는 함수로 감싼 집계와 materialize(0)가 함께 포함된 경우 발생하던 “Block structure mismatch” 예외를 수정했습니다. #99915 (Alexey Milovidov).
  • 데이터 인수가 배열 키 또는 기타 중첩 배열 타입을 포함한 맵인 경우 sipHash128Keyed(및 유사한 키 지정 해시 함수)에서 발생하던 assertion failure를 수정했습니다. #99921 (Alexey Milovidov).
  • convertAnyJoinToSemiOrAntiJoin를 사용하는 쿼리 계획 최적화 중 IN 함수에서 발생하던 LOGICAL_ERROR 예외 “Not-ready Set”를 수정했습니다. #99939 (Alexey Milovidov).

빌드/테스트/패키징 개선

  • 무거운 헤더 include를 제거하고 비용이 큰 Template 인스턴스화를 헤더 밖으로 옮겨 컴파일 시간을 줄였습니다. #97893 (Raúl Marín).
  • Template 디스패치 매트릭스를 축소하고 무거운 include를 제거해 산술 함수와 관련 헤더의 컴파일 시간을 줄였습니다. #98204 (Raúl Marín).
  • mongo-c-driver 2.2.2를 사용합니다. #98304 (Konstantin Bogdanov).
  • postgres REL_18_3을 사용합니다. #98306 (Konstantin Bogdanov).
  • glibc malloc의 비효율적인 메모리 회수 동작으로 인한 RSS 누적을 방지하기 위해 UBSan 빌드에서 jemalloc allocator를 활성화했습니다. #98444 (Alexey Milovidov).
  • parser combinator 라이브러리로 인한 심볼 이름 비대화를 줄이기 위해 Rust v0 심볼 맹글링을 사용하고 PRQL 라이브러리에서 내부 심볼을 제거했습니다. #98446 (Alexey Milovidov).
  • tests/benchmarks에 TPC-H 벤치마크 스위트와 TPC-DS README를 추가했습니다. #98495 (Raufs Dunamalijevs).
  • 99개 TPC-DS 쿼리 전체에 대한 정합성 테스트를 추가했습니다. #99204 (Raufs Dunamalijevs).
  • 오프라인 레플리카 버그가 있는 DDL CREATE TABLE + ALTER를 재현하는 통합 테스트를 추가하고, 이를 예상된 실패로 표시했습니다 (#44070). #99259 (Raufs Dunamalijevs).
  • je_ prefix를 사용하도록 jemalloc을 통합하고 링커의 —wrap 사용을 제거했습니다. #99342 (Azat Khuzhin).

ClickHouse 릴리스 26.2, 2026-02-26. 발표 자료, 동영상

하위 호환되지 않는 변경 사항

  • 모든 삽입에 대해 기본적으로 중복 제거가 활성화됩니다. 이전에는 비동기 삽입과 MV’s에는 비활성화되어 있었고, 동기 삽입에는 활성화되어 있었습니다. 목적은 두 삽입 방식의 기본값을 동일하게 맞추는 것입니다. 클러스터에서 중복 제거를 명시적으로 비활성화한 경우, 기존 동작을 유지하려면 deduplicate_insert='backward_compatible_choice'를 명시적으로 설정해야 합니다. deduplicate_blocks_in_dependent_materialized_views도 마찬가지입니다. #95970 (Sema Checherinda).
  • 통계 저장 포맷이 개선되었습니다. 이제 모든 통계가 단일 파일에 저장됩니다. #93414 (Anton Popov). 테이블 통계를 명시적으로 활성화하지 않았다면 이 항목은 무시해도 됩니다.
  • S3(Azure)Queue의 인메모리 메타데이터를 제한합니다. 시스템 테이블 이름이 azure_queue에서 azure_queue_metadata_cache로, system.s3queue에서 s3queue_metadata_cache로 변경되었습니다. #95809 (Kseniia Sumarokova).
  • 이전에는 Variant 컬럼에 함수를 적용할 때 Variant 하위 유형이 해당 함수와 호환되지 않으면 아무 경고 없이 NULL을 반환했지만, 이제는 예외를 발생시키므로 이러한 NULL 동작에 의존하던 쿼리가 중단될 수 있습니다. #95811 (Bharat Nallan).
  • PostgreSQL의 DATE 컬럼은 이제 ClickHouse에서 Date32로 추론됩니다(이전 버전에서는 Date로 추론되었고, 이로 인해 좁은 범위를 벗어나는 값에서 오버플로우가 발생했습니다). 이제 Date32 값을 PostgreSQL에 다시 삽입할 수 있습니다. #73084를 해결합니다. #95999 (Alexey Milovidov).
  • do_not_merge_across_partitions_select_final 설정의 의미가 더 명확해졌습니다. 이전에는 구성 파일에서 이 설정을 명시적으로 지정하지 않더라도 해당 기능이 자동으로 활성화될 수 있었습니다. 이로 인해 반복적으로 혼란이 발생했고, 안타깝게도 프로덕션 환경에서 몇 가지 문제로 이어졌습니다. 이제 규칙은 더 단순합니다. do_not_merge_across_partitions_select_final=1이면 이 기능이 무조건 활성화됩니다. do_not_merge_across_partitions_select_final=0이면 새로운 설정 enable_automatic_decision_for_merging_across_partitions_for_final=1일 때만 자동 결정이 사용되며, 그렇지 않으면 사용되지 않습니다. 기존 동작을 최대한 유지하기 위해 기본값은 do_not_merge_across_partitions_select_final=0enable_automatic_decision_for_merging_across_partitions_for_final=1로 설정되었습니다. #96110 (Nikita Taranov).
  • 명시적으로 컬럼을 지정해 S3 테이블을 생성할 때, 이제 ClickHouse는 해당 컬럼 이름이 원격 파일의 스키마(schema)에 실제로 존재하는지 검증합니다. 이전에는 컬럼 이름이 일치하지 않아도 작동하던 쿼리가 이제는 테이블 생성 시점에 실패합니다. 이 변경으로 #96089가 해결되었습니다. #96194 (Konstantin Vedernikov).
  • ORDER BY 및 기타 테이블 키 표현식에서 서브쿼리 사용을 금지합니다. #96847 (Alexey Milovidov).
  • 기본적으로 apply_row_policy_after_final을 활성화합니다. 원래는 optimize_move_to_prewhere_if_final=0일 때 ROW POLICY와 PREWHERE가 모두 FINAL을 준수하며 FINAL 이후에 적용되었습니다. 하지만 #87303에서 ROW POLICY filter에 대해서는 optimize_move_to_prewhere_if_final이 무시되면서 이 동작이 깨졌습니다. 이를 해결하기 위해 이 PR에서는 #91065에서 도입된 apply_row_policy_after_final setting을 활성화합니다. apply_row_policy_after_final이 활성화되면 ROW POLICY는 이전과 마찬가지로 기본적으로 계속 FINAL을 준수합니다. 이 PR은 optimize_move_to_prewhere_if_final=1일 때의 동작을 변경하므로 하위 호환되지 않는 변경입니다. 이제 ROW POLICY를 FINAL 이전에 적용하려면 optimize_move_to_prewhere_if_final 대신 apply_row_policy_after_final을 사용해야 합니다. #97279 (Nikolai Kochetov).
  • Date 유형은 이제 Arrow/ArrowStream 포맷에서 uint16 대신 Arrow의 네이티브 date32 유형으로 직렬화됩니다. 이제 PyArrow와 같은 도구는 해당 컬럼을 날짜 유형으로 올바르게 인식합니다. 이전 동작은 output_format_arrow_date_as_uint16 설정으로 복원할 수 있습니다. Date 컬럼에 uint16을 사용한 이전 Arrow 파일을 읽는 기능도 계속 지원됩니다. #96860 (Alexey Milovidov).

새로운 기능

  • 이제 ClickHouse에서 ClickStack(관측성 UI)을 직접 사용할 수 있어 디버깅과 로컬 개발에 유용합니다. #96597 (Aaron Knudtson).
  • 인증 메서드로 TOTP(시간 기반 일회용 비밀번호)를 지원합니다. #71273 (Vladimir Cherkasov).
  • lazy_load_tables 데이터베이스 설정을 추가했습니다. 활성화되면 데이터베이스 시작 시 테이블을 로드하지 않고, 대신 경량 StorageTableProxy가 생성되며 실제 테이블 엔진은 처음 접근할 때 구체화됩니다. #96283 (xiaohuanlin).
  • 타임아웃이 발생하면 데이터 블록을 내보내도록 input_format_max_block_wait_ms 설정을 추가하고, HTTP connection이 예기치 않게 종료되어도 남은 데이터를 처리할 수 있도록 했습니다. #94509 (Mostafa Mohamed Salah).
  • Google BigLake 카탈로그 통합. 이로써 #95339가 해결됩니다. #97104 (Konstantin Vedernikov).
  • 사용 가능한 모든 토크나이저를 표시하는 시스템 테이블(system table) system.tokenizers가 추가되었습니다. #96753 (Robert Schulze).
  • UDF의 로딩 상태와 구성을 모니터링할 수 있도록 새 시스템 테이블(system table) system.user_defined_functions을 추가했습니다. #90340 (Xu Jia).
  • malloc_stats_print를 통해 jemalloc로 빌드된 서버의 메모리 사용량을 진단할 수 있도록, jemalloc 메모리 할당자 통계를 노출하는 system.jemalloc_stats 테이블을 추가했습니다. 또한 이러한 통계를 대화형으로 시각화할 수 있도록 ClickHouse HTTP 인터페이스에 /jemalloc.html HTTP 엔드포인트를 추가했습니다. #97077 (Antonio Andelic).
  • jemalloc 힙 프로파일을 읽고 분석하기 위한 system.jemalloc_profile_text 테이블이 추가되었습니다. 출력 형식은 jemalloc_profile_text_output_format 설정으로 제어됩니다(raw, symbolized 또는 collapsed이며, 기본값은 collapsed). 인라인 프레임 해상도는 jemalloc_profile_text_symbolize_with_inline으로 제어됩니다(활성화되면 심볼화 속도가 느려지는 대신 인라인 프레임이 포함되고, 비활성화되면 더 빠른 출력을 위해 인라인 프레임을 건너뜁니다). collapsed 포맷의 경우 jemalloc_profile_text_collapsed_use_count는 스택 가중치를 live allocation count(true) 기준으로 할지, live bytes(false, 기본값) 기준으로 할지 제어합니다. 이를 통해 jemalloc 힙 프로파일에 대한 메모리 프로파일링과 flame graph 시각화가 한층 쉬워집니다. #93248을 수정했습니다. #97218 (Antonio Andelic).
  • default_dictionary_database 설정이 추가되었습니다. 이 설정을 사용하면 ClickHouse가 데이터베이스 한정자 없이 참조된 외부 딕셔너리를 지정된 기본 데이터베이스에서 해석할 수 있습니다. 이를 통해 XML로 정의된 전역 딕셔너리에서 SQL로 정의된 데이터베이스별 딕셔너리로의 마이그레이션이 간소화되며, 기존 딕셔너리 쿼리(예: dictGet(&#39;name&#39;, …))를 수정하지 않고도 계속 사용할 수 있습니다. #91412 (Dmitrii Plotnikov).
  • DatabaseReplicated에서 보조 Zookeeper를 지원합니다. #91683 (RinChanNOW).
  • 새로운 테이블 함수 primes와 소수를 오름차순으로 포함하는 새로운 시스템 테이블(system table) system.primes를 구현했습니다. #90839를 해결했습니다. #92776 (Nihal Z. Miaji).
  • Async inserts는 병렬 quorum을 지원합니다. 삽입된 데이터는 quorum까지 복제됩니다. 중복이 발견되면 이전에 삽입된 데이터도 복제될 때까지 쿼리는 대기합니다. #93356 (Sema Checherinda).
  • sRGB와 OKLAB 사이에서 값을 상호 변환하는 함수 colorOKLABToSRGB, colorSRGBToOKLAB가 추가되었습니다. #93361 (Pranav Tiwari).
  • 새로운 deduplicate_insert 설정이 추가되었으며, 이 설정은 insert_deduplicateasync_insert_deduplicate보다 우선 적용됩니다. #94413 (Sema Checherinda).
  • 서버 설정 insert_deduplication_version으로 통합된 중복 제거 해시 기반 마이그레이션이 가능해졌습니다. #95409 (Sema Checherinda).
  • xxh3_128 해싱 함수를 추가했습니다. #96055 (Raúl Marín).
  • 결과 파트를 커밋하지 않고 머지를 시뮬레이션할 수 있는 OPTIMIZE <table> DRY RUN PARTS <part names> 쿼리가 추가되었습니다. 이 기능은 테스트 용도로 유용합니다. 예를 들어 새 버전에서 머지의 정확성을 검증하고, 머지 관련 버그를 결정적으로 재현하며, 머지 성능을 신뢰성 있게 벤치마크할 수 있습니다. #96122 (Anton Popov).
  • 테이블에서 사용 중인 이름이 지정된 컬렉션이 삭제되는 것을 방지하기 위해, check_named_collection_dependencies 설정으로 기본 활성화되는 새 검사를 추가했습니다. #96181 (Pablo Marcos).
  • 서버에 있는 기존 failpoint와 각 failpoint의 활성화 여부를 확인할 수 있도록 system.fail_points가 추가되었습니다. 이는 테스트 자동화에 도움이 됩니다. #96762 (Pedro Ferreira).
  • Glue catalog에 역할 기반 접근이 추가되었습니다. aws_role_arn 설정을 사용하고, 필요에 따라 aws_role_session_name도 사용할 수 있습니다. #90825 (Antonio Andelic).
  • add_minmax_index_for_temporal_columns 설정이 추가되었습니다. 이 설정을 활성화하면 모든 Date, Date32, Time, Time64, DateTime, DateTime64 컬럼에 대해 MinMax 인덱스를 자동으로 생성합니다. #93355 (Michael Jarrett).
  • JOIN을 위한 확장 테이블 별칭을 지원합니다(SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = b와 같은 쿼리). #95131을 종료했습니다. #95331 (Yarik Briukhovetskyi).
  • Iceberg 테이블에서 ALTER TABLE RENAME COLUMN이 지원되도록 추가되었습니다. 이전에는 ADD COLUMN, DROP COLUMN, and MODIFY COLUMN만 지원되었습니다. #97455 (murphy-4o).

실험적 기능

  • 텍스트 인덱스가 이제 일반 제공됩니다. #96794 (Robert Schulze).
  • 양자화된 비트 패킹 벡터 저장(근사 최근접 이웃 검색에 사용됨)을 위한 QBit 데이터 타입이 이제 일반 제공되며, 더 이상 실험적 설정을 활성화할 필요가 없습니다. #95358 (Raufs Dunamalijevs).
  • 이제 ClickHouse의 벡터 검색은 클러스터의 레플리카를 사용해 부하를 분산 하고 벡터 인덱스 파트에 대한 검색도 분산할 수 있습니다. 이를 통해 ClickHouse는 단일 VM의 메모리 용량을 초과하는 대규모 벡터 인덱스를 지원할 수 있습니다. #95876 (Shankar Iyer).
  • ast_fuzzer_runsast_fuzzer_any_query 설정으로 제어되는 서버 측 AST 퍼저를 추가했습니다. 활성화하면 서버는 각 쿼리를 정상적으로 실행한 뒤, 해당 쿼리에 무작위 뮤테이션을 적용한 쿼리를 실행하고 결과는 버립니다. #97568 (Alexey Milovidov).
  • 실험적 KQL 방언에 iif 함수를 추가했습니다. #94790 (happyso).
  • 이제 스키마 추론은 allow_experimental_nullable_tuple_type 설정을 반영합니다. 활성화하면 추론된 튜플 타입이 Nullable(Tuple(...))가 될 수 있으므로, 누락된 중첩 객체는 NULL 요소로 이루어진 튜플이 아니라 NULL이 될 수 있습니다. #95525 (Nihal Z. Miaji).
  • 이제 use_statistics_cache 설정이 기본적으로 활성화되므로, 컬럼 통계가 메모리에 캐시되어 각 파트에서 다시 로드하지 않아도 쿼리 최적화 속도가 빨라집니다. #95950 (Han Fei).

성능 개선

  • 기본 키의 모든 결정적 표현식을 데이터 스키핑에 사용할 수 있습니다(예: ORDER BY cityHash64(user_id)/ ORDER BY length(user_id)). 결정적 표현식의 경우 ClickHouse는 쿼리 상수에 해당 표현식을 적용하고, 그 결과를 =, IN, has와 같은 프레디케이트에 대해 기본 키 인덱스에서 사용할 수 있습니다. 표현식이 추가로 단사적이기도 하면(예: ORDER BY hex(p) 또는 ORDER BY reverse(tuple(reverse(p), hex(p)))), 부정된 형태인 !=, NOT IN, NOT has에도 인덱스를 효과적으로 사용할 수 있습니다. #10685를 해결합니다. #82161를 해결합니다. #92952 (Nihal Z. Miaji).
  • 통계 저장 형식을 개선했습니다. 이제 모든 통계가 하나의 파일에 저장됩니다. #93414 (Anton Popov).
  • 파일 시스템 캐시에서 원격 테이블 엔진/함수의 병렬 읽기를 허용합니다. #71781 (Kseniia Sumarokova).
  • 로컬 파일과 객체 스토리지 테이블 함수에서 사용자 공간 페이지 캐시를 사용할 수 있게 했습니다. #77874 (Michael Kolupaev).
  • 사용자 공간 페이지 캐시에서 불필요한 memcpy를 제거했습니다. #77884 (Michael Kolupaev).
  • concurrent_threads_scheduler의 기본값이 이제 fair_round_robin 대신 max_min_fair로 변경되었습니다. 이 변경으로 할당된 슬롯 수가 적은 쿼리를 우선 처리해 높은 부하 상황에서도 공정성이 향상되며, 그 결과 짧게 실행되는 쿼리가 오래 실행되는 쿼리 때문에 불이익을 받지 않게 됩니다. #95300 (Sergei Trifonov).
  • FINAL 쿼리가 필터링에 기본 키(primary key) 조건을 사용하고 다른 조건에는 스킵 인덱스를 사용하는 경우, 이제 PrimaryKeyExpand 처리 단계에서는 초기에 선별된 기본 키 범위에 대해서만 교차 여부를 확인합니다. #94903 (Shankar Iyer).
  • 이제 s3(...)와 같은 테이블 함수에 병렬 레플리카를 사용할 때, 테이블 함수를 감싸는 단일 서브쿼리가 포함된 쿼리도 레플리카 전체에 자동으로 병렬화됩니다. 이전에는 테이블 함수를 직접 참조하는 경우에만 병렬화되었습니다. #92264를 해결했습니다. #96332 (phulv94).
  • 캐시에 있는 데이터와 시스템 파일을 별도의 세그먼트로 나눌 수 있도록 했습니다. #87834 (MikhailBurdukov).
  • 일부 해시 조인 작업에서 ColumnVector::replicate에 동적 디스패치를 구현해 성능을 개선했습니다. #79573 (Raúl Marín).
  • 복잡한 프레디케이트가 있는 경우 병렬 해시 조인의 성능이 개선되었습니다. 이전에는 조인되지 않은 행을 하나의 스레드에서 처리했는데, 이는 비효율적이었습니다. 이번 최적화는 조인되지 않은 행 처리를 여러 스레드에 걸쳐 병렬화하는 것입니다. parallel_non_joined_rows_processing 설정으로 전환할 수 있습니다. 기본적으로 활성화되어 있습니다. #92068 (Yarik Briukhovetskyi).
  • JSON 타입 파싱 성능을 약간 개선했습니다. #93614 (Pavel Kruglov).
  • AST의 메모리 사용량을 개선했습니다. 하이라이팅을 사용하지 않고 VALUES 파싱도 없는 경우에는 필드를 사용하지 않으므로, 이 최적화는 의미가 있습니다. #93974 (Ilya Yatsishin).
  • named Tuple AST 객체의 메모리 사용량을 최적화했습니다. 컬럼 이름을 일반 AST 리터럴 노드에 두는 대신 tuple 객체 내 문자열로 배치했습니다. #94704 (Ilya Yatsishin).
  • 추가 링커 옵션으로 디버추얼라이제이션이 개선되었습니다. #94737 (Nikita Taranov).
  • ZooKeeper 요청을 배칭해 파트가 많은 ReplicatedMergeTree 테이블의 레플리카 클론 성능을 개선했습니다. #94847 (c-end).
  • 읽기 단계에 이미 PREWHERE 필터가 있으면 새 필터를 추가할 수 없었습니다. 이번 변경으로 PREWHERE 최적화를 JOIN 런타임 필터 최적화 이후로 미뤄, 런타임 필터도 PREWHERE로 푸시할 수 있게 했습니다. #95838 (Alexander Gololobov).
  • x86에서 동적 디스패치를 사용해 T64 코덱 압축 성능을 개선했습니다. #95881 (Raúl Marín).
  • 가능한 경우(NULL이 아니고, -If가 아니며, GROUP BY가 없고, IPv6나 String이 아닌 경우) 삽입을 배칭하여 숫자 타입에 대한 uniq를 더 빠르게 처리합니다. #95904 (Raúl Marín).
  • Keeper를 위한 저수준 최적화: ZooKeeper::observeOperations가 ZooKeeper 수신 스레드 CPU 사용량의 >20%를 차지하는 것으로 확인되었습니다. 이번 변경에서는 이를 다음과 같이 개선했습니다. 1. AggregatedZooKeeperLog::stats에는 SipHash 대신 10배 이상 더 빠른 CityHash64를 사용합니다. 2. Coordination::ErrorCounter에는 std::unordered_mapstd::mutex 대신 std::array<std::atomic<UInt32>, N>를 사용합니다. #95962 (Miсhael Stetsyuk).
  • 메모리 절약을 위해 ProfileEvents::Counter의 64바이트 정렬을 제거했습니다. #96097 (Azat Khuzhin).
  • 메모리 최적화: CachedOnDiskReadBufferFromFile 구조체 크기를 50배 줄였습니다. #96098 (Azat Khuzhin).
  • 비어 있는 해시 테이블의 크기를 조정할 때는 기존 데이터를 복사하지 않도록 했습니다. #96180 (Raúl Marín).
  • RIGHT OUTER JOIN에서도 JOIN runtime filters를 지원합니다. #96183 (Hechem Selmi).
  • 최적화 옵션 enable_join_runtime_filters가 이제 기본적으로 활성화됩니다. #89314 (Alexey Milovidov).
  • 이전에는 모든 파트에 구체화된 텍스트 인덱스가 있을 때만 텍스트 인덱스 직접 읽기 최적화가 적용되었습니다. 이 PR에서는 부분 지원이 추가되었습니다. 즉, 일부 파트에 구체화된 텍스트 인덱스가 있으면 해당 파트에서는 이를 사용하고, 구체화된 텍스트 인덱스가 없는 파트에서는 원래 필터 표현식을 실행하는 방식으로 처리됩니다. #96411 (Anton Popov).
  • 필터링 속도를 높이기 위해 시스템 로그 테이블의 시간 컬럼에 minmax 보조 인덱스를, query_id/initial_query_id 컬럼에 bloom_filter 인덱스를 추가했습니다. #96712 (Alexey Milovidov).
  • 이제 지연 머티리얼라이즈 최적화가 UNION ALL 쿼리의 첫 번째 분기뿐 아니라 모든 분기에 적용됩니다. 이제 서로 다른 MergeTree 테이블에서 정렬 및 LIMIT가 적용된 여러 읽기를 UNION ALL로 결합하는 쿼리는 모든 분기에서 컬럼 읽기를 지연할 수 있어 I/O가 줄어듭니다. #96832 (Federico Ginosa).
  • 불필요한 데이터 복사를 제거하고 숫자 컬럼에 벡터화된 최소/최대 계산을 적용해 INSERT 시 minmax 스킵 인덱스 계산을 최적화했습니다. #97392 (Raúl Marín).
  • 스토리지 DeltaLake가 이제 delta lake 메타데이터의 count() 결과를 사용해 system.tables에 정확한 테이블 통계(총 바이트 수/행 수)를 표시합니다. #96190 (Kseniia Sumarokova).
  • 사용되지 않는 컬럼은 MergeTree에서 읽을 때 읽기 단계에서도 제거됩니다. 이는 특히 필터가 PREWHERE로 푸시다운될 때 유용합니다. #89982 (János Benjamin Antal).
  • 테이블 이름만 가져오도록 SHOW TABLES 쿼리 처리를 개선하고, getLightweightTablesIterator가 테이블 이름만 포함된 구조를 반환하도록 개선했습니다. #93835를 해결합니다. #94467 (Smita Kulkarni).
  • 키 컬럼이 이러한 함수로 감싸진 경우에도 범위 프레디케이트에서 프라이머리 키(primary key) 및 스킵 인덱스 프루닝을 사용할 수 있도록 assumeNotNull, coalesce, ifNull을 개선했습니다. #94689를 해결합니다. #94754 (Nihal Z. Miaji).
  • getChildren Keeper 요청에 with_data 및 with_stat 확장 기능을 추가했습니다. 이제 단일 작업으로 자식 목록뿐만 아니라 각 항목의 stat 및/또는 data도 함께 가져올 수 있습니다. #94826 (Nikolay Degterinsky).
  • 최종적으로 로컬 계획을 실행하든 병렬 레플리카가 포함된 계획을 실행하든 관계없이, 인덱스 분석은 (대부분의 경우) 한 번만 수행됩니다. #94854 (Nikita Taranov).
  • 파트 수(distributed_index_analysis_min_parts_to_activate)와 인덱스 크기(distributed_index_analysis_min_indexes_size_to_activate)에 따라 분산 인덱스 분석을 활성화할 수 있도록 했습니다. #95216 (Azat Khuzhin).
  • Iceberg 테이블에서 PREWHERE 최적화를 사용할 수 있도록 했습니다. #95476 (Konstantin Vedernikov).
  • 일부 AST 클래스의 메모리 점유량을 줄였습니다. #95514 (Raúl Marín).
  • split_intersecting_parts_ranges_into_layers를 활성화했을 때 생성되는 pipeline 스트림 수를 제한합니다. 과도한 메모리 사용을 방지하는 데 도움이 됩니다. #96478 (Nikita Taranov).
  • 다중 조인에 대해 equivalent sets 최적화를 구현했습니다. 이제 여러 개의 연속된 INNER JOIN 연산이 있는 쿼리는 개선된 필터 푸시다운 최적화의 이점을 누릴 수 있습니다. 테이블이 동등한 컬럼을 기준으로 조인되는 경우(예: t1 JOIN t2 ON t1.id = t2.id JOIN t3 ON t2.id = t3.id WHERE t1.id > 10), 체인 내 어느 테이블에 적용된 필터든 자동으로 모든 테이블에 푸시다운됩니다. #96550을 해결했습니다. #96596 (Vladimir Cherkasov).
  • delta lake 메타데이터 스캔을 최적화했습니다. delta-kernel PR https://github.com/delta-io/delta-kernel-rs/pull/1827의 변경 사항을 반영했습니다. #96686 (Kseniia Sumarokova).
  • 복제된 데이터베이스에서 더미 쿼리가 실행될 때마다 캐시된 클러스터를 업데이트하지 않도록 개선했습니다. #96897 (Tuan Pham Anh).
  • 접두사가 ASCII 문자로만 이루어진 경우 startsWithUTF8로 필터링할 때 기본 키 인덱스를 사용합니다. #97055 (vkcku).

개선 사항

  • Keeper 요청에 OpenTelemetry 추적 기능을 추가했습니다. #91332 (Miсhael Stetsyuk).
  • ClickHouse 시작 시와 종료 시의 콘솔 로그 수준을 각각 재정의할 수 있는 새로운 구성 옵션: logger.startup_console_levellogger.shutdown_console_level. #95919 (Garrett Thomas).
  • 구성을 다시 로드할 때 명령줄 재정의 사항을 적용합니다. #80294를 해결합니다. #80295 (Alexey Milovidov).
  • mongodb 테이블 함수에서 명명된 컬렉션 매개변수의 키-값 재정의를 허용합니다. #89616 (vanchaklar).
  • 이제 Iceberg 테이블의 읽기 순서 최적화는 단순한 컬럼 참조뿐 아니라 icebergBucket, icebergTruncate와 같은 복잡한 정렬 함수에도 적용됩니다. #90256 (Konstantin Vedernikov).
  • 진단을 개선하기 위해 system.mutations에 parts_postpone_reasons라는 새 컬럼을 추가했습니다. 이 컬럼은 파트가 연기되는 사유를 보여줍니다. #92206 (Shaohua Wang).
  • DataflowStatisticsCache에서 읽어야 할 행 수의 변화를 추적합니다(삽입/삭제 또는 쿼리 조건 캐시 사용으로 인해 발생). #93636 (Nikita Taranov).
  • SYSTEM RESET DDL WORKER [ON CLUSTER] 쿼리를 지원합니다. 이 쿼리는 DDLWorker의 메인 스레드에 상태 재설정을 요청합니다. host ID가 업데이트될 때 레플리카 활성 상태를 갱신하는 데 유용합니다. #93780 (Tuan Pham Anh).
  • MUTATE_PARTMUTATE_PART_START 이벤트 유형에 대해 system.part_log에서 mutation_ids를 지원하도록 했습니다. #93811 (Shaohua Wang).
  • 이제 백그라운드 작업(Mutate, Merge)은 ‘background’ 프로필로 일반 쿼리와 분리해 독립적으로 설정할 수 있습니다. 이전에는 이러한 작업이 ‘default’ 프로필을 통해 일반 쿼리와 같은 설정을 사용했습니다. #93905 (Arsen Muk).
  • system.crash_log에 더 자세한 정보를 추가했습니다. #94112 #95857 (Miсhael Stetsyuk).
  • 실행 중인 비내부 쿼리 수를 추적하기 위해 새로운 QueryNonInternal 메트릭이 추가되었습니다. 이 메트릭은 ClickHouseMetrics_QueryNonInternal로 노출되며, 비내부 쿼리에만 적용되는 max_concurrent_queries 제한에 대해 쿼리 동시성을 모니터링하는 데 도움이 됩니다. #94284 (Ashwath Singh).
  • RuntimeDataflowStatisticsCacheUpdater에서 compact part의 컬럼에 대한 입력 바이트 통계 수집을 지원합니다. #94626 (Nikita Taranov).
  • Keeper의 잘못된 구성으로 인해 클러스터 구성에 실패하는 문제를 확인하는 검사를 추가했습니다. #60932를 해결합니다. #94682 (Konstantin Bogdanov).
  • 파트 로딩 시 JSON 프리픽스 역직렬화를 개선했습니다. #94848 (Pavel Kruglov).
  • 대상 테이블의 materialized view가 트리거되도록 전체 INSERT 파이프라인을 사용해 쓰기 경로를 리팩터링했습니다. #94890 (Kai Zhu).
  • 벡터 유사도 검색 계획 최적화는 검색 대상 컬럼에 인덱스가 있는 경우에만 적용됩니다. #94998 (Eduard Karacharov).
  • 사용자 인증 전에 총 메모리 한도를 확인하고, 총 한도가 허용치를 초과하면 (total) memory limit exceeded 오류를 발생시킵니다. #95003 (Nikolai Kochetov).
  • throw_on_unmatched_row_policies 구성 옵션이 추가되었습니다. 이 옵션을 활성화하면 사용자가 행 정책(row policies)이 있는 테이블(table)을 쿼리할 때 해당 사용자에게 적용되는 정책이 하나도 없으면 예외를 발생시킵니다. 이를 통해 access control 구성 오류로 인해 모든 행이 반환되는 모호한 동작을 방지합니다. #95014 (Vitaly Baranov).
  • Unity Catalog을 사용하는 장기 실행 쿼리에서 S3 액세스 토큰을 동적으로 갱신합니다. 이로써 #93981이 해결되었습니다. #95069 (Konstantin Vedernikov).
  • ClickHouse가 memory_worker_decay_adjustment_period_ms밀리초 동안 지속적으로 메모리 압박을 받으면 jemalloc의 더티 페이지 감쇠를 비활성화합니다. ClickHouse가 동일한 시간 동안 정상 상태로 동작하면 jemalloc의 더티 페이지 감쇠를 다시 활성화합니다. #95145 (Antonio Andelic).
  • s3Queue의 keeper_path 설정을 사용하는 S3Queue용 보조 Zookeeper 지원. #95203 (Diego Nieto).
  • TTL 삭제 파트 병합에서 max_parts_to_merge_at_once를 준수하도록 했습니다. #95315 (Kseniia Sumarokova).
  • 물리적 연결을 반영할 수 있도록 query_log에 connection_addressconnection_port를 추가합니다(addressport는 프록시를 통해 연결되고 auth_use_forwarded_address=1이 설정된 경우 대체됨). #95471 (Yakov Olkhovskiy).
  • 쿼리 조건 캐시의 잘못된 메모리 사용량 계산을 수정했습니다. 핵심 문제는 여러 문자열(예: part_name, 테이블 ID, 전체 SQL 조건)로 구성된 캐시 키를 고려하지 않았다는 점이었습니다. #95478 (Nikita Mikhaylov).
  • 내장 구성으로 시작한 서버에서는 일반 구성과 마찬가지로 사용자와 권한 부여를 관리하고 이를 access 디렉터리에 저장할 수 있습니다. 이로써 테스트가 더 용이해집니다. 또한 내장 구성과 clickhouse-local에서 모든 access_control_improvements를 활성화했습니다. #95481 (Alexey Milovidov).
  • 액세스가 거부될 경우 자격 증명을 확인하라는 안내를 포함하도록 S3 authentication 오류 메시지를 개선했습니다. #95648 (Gerald Latkovic).
  • 통계 캐시를 활성화하고 캐시 업데이트 주기를 300초로 설정했습니다. #95841 (Han Fei).
  • system.aggregated_zookeeper_log에 컴포넌트 이름을 추가했습니다. #95882 (Antonio Andelic).
  • system.tables에서 DeltaLake 테이블을 조회할 때 객체 스토리지 읽기를 생략합니다. #95899 (Antonio Andelic).
  • compatibility 설정이 26.2 이상인 경우, 기본적으로 enable_max_bytes_limit_for_min_age_to_force_merge가 활성화됩니다. #95917 (Christoph Wurm).
  • 이제 macOS에서 Delta Lake를 사용할 수 있습니다. #95979를 해결합니다. #95985 (Alexey Milovidov).
  • 이전 버전에서는 UPDATE 및 RENAME COLUMN과 충돌하는 ALTER 표현식을 함께 사용할 때, 적절한 예외 대신 논리 오류가 발생했습니다. #70678을 해결했습니다. #96022 (Alexey Milovidov).
  • 모든 ClickHouse 애플리케이션의 도움말 출력을 개선하고, 몇 가지 수정 사항과 함께 --no-sudo 옵션을 추가했습니다. 이는 Ilya Yatsishin이 진행한 #58244의 후속 작업입니다. #96025 (Alexey Milovidov).
  • 다른 모든 거리 함수에 이미 이런 형식의 alias가 있으므로 cosineDistance의 alias로 distanceCosine을 추가했습니다. #96065 (Raufs Dunamalijevs).
  • with_data Keeper 확장 기능을 지원하여 Database Replicated에서 테이블 가져오기를 개선했습니다. #96090 (Nikolay Degterinsky).
  • chdig를 v26.2.1로 업데이트했습니다(새 기능 추가 및 MacOS 지원). #96113 (Azat Khuzhin).
  • numbersprimes의 filter pushdown을 개선했습니다. 이제 ClickHouse는 정확한 범위를 추론할 수 없는 경우에도 WHERE 조건에서 보수적인 값 범위를 추론하고, 그에 따라 시퀀스 생성을 제한할 수 있습니다(예를 들어 WHERE number % 5 < 2 AND number > 100 AND number < 300의 경우 ClickHouse는 100에서 300 사이의 숫자만 생성한 뒤 프레디케이트를 적용함). 이를 통해 무제한 스캔을 방지합니다. #84853를 해결했습니다. #93913를 해결했습니다. #96115 (Nihal Z. Miaji).
  • 이전에는 파싱 모호성을 해소하기 위해 COMMENT 절이 있으면 formatter가 SELECT를 괄호로 감쌌습니다. 이제는 괄호 없이도 모호성이 없도록 AS SELECT 앞에 COMMENT를 출력합니다. #96293 (Alexey Milovidov).
  • allow_impersonate_user 구성 설정은 이제 독립적인 server setting이 아니라 access_control_improvements 섹션 내에 위치합니다. #96451 (Vitaly Baranov).
  • core_dump.size_limit 구성 설정을 핫 리로드할 수 있도록 개선하여, 구성 변경 사항을 적용하기 위해 server를 다시 시작할 필요가 없게 했습니다. #96524 (Miсhael Stetsyuk).
  • socket timeout 발생 시 CPU 및 실시간 프로파일러의 상호 운용성을 개선합니다. #96601 (Sergei Trifonov).
  • DROP COLUMN mutation 직후 ADD COLUMN을 빠르게 실행할 때 삭제된 데이터가 다시 되살아나는 현상을 방지합니다. #96713 (Alexey Milovidov).
  • system.instrumentationfunction_id 타입을 LowCardinality(Int32)에서 Int32로 변경했습니다. #96726 (Copilot).
  • 뮤테이션을 동기적으로 기다리는 경우 쿼리 취소와 시간 제한이 적용됩니다. #96756 (Alexey Milovidov).
  • 디버깅에 유용할 수 있는 delta-kernel 로깅을 변경할 수 있도록 시스템 명령 SYSTEM RELOAD DELTA KERNEL TRACING <level>을 추가했습니다. #96763 (Kseniia Sumarokova).
  • IP 주소 패밀리별 필터링, 즉 dns_allow_resolve_names_to_ipv4/ipv6 설정은 DNS 캐시가 비활성화되어 있어도 적용됩니다. #96810 (c-end).
  • jemalloc 내부 검사 개선. #96840 (Azat Khuzhin).
  • /play Web UI에서 시스템 테이블을 쿼리할 때 QUERY_CACHE_USED_WITH_SYSTEM_TABLE 오류가 발생하던 문제를 수정했습니다. #96869 (Alexey Milovidov).
  • Web UI 개선: 실행 중인 쿼리 상태를 나타내도록 파비콘을 변경하고, 조용히 무시하던 보조 쿼리(데이터베이스 및 테이블 로딩) 오류를 표시합니다. #85055를 닫습니다. #96883 (Alexey Milovidov).
  • 데이터베이스 목록을 표시하거나 숨길 수 있도록 /play UI의 왼쪽 패널을 클릭할 수 있게 했습니다. #96884 (Alexey Milovidov).
  • DROP DATABASE는 이제 종속성의 역순으로 테이블을 삭제하므로, 데이터베이스에 로딩 종속성이 있는 테이블(예: joinGet를 사용하는 Distributed 테이블)이 포함된 경우 크래시 안전성이 향상됩니다. #97057 (Alexey Milovidov).
  • 유효하지 않은 YAML이 건너뛰어지지 않도록 yaml-cpp 버전을 올렸습니다. #97333 (Azat Khuzhin).
  • play.html 사이드바에서 테이블을 불러오는 동안 로딩 표시기를 보여줍니다. #97531 (Alexey Milovidov).
  • 내장 웹 UI(play.html)에 원본 쿼리 결과를 클립보드로 복사하는 버튼을 추가했습니다. #97532 (Alexey Milovidov).
  • 더 다양한 경우에도 파싱할 수 있는 SQL을 생성하도록 쿼리 난독화기(clickhouse-format --obfuscate)를 수정했습니다. #97584 (Alexey Milovidov).

버그 수정(공식 안정 릴리스에서 사용자에게 영향을 주는 오동작)

  • 메타데이터만 변경하는 ALTER 후, 예를 들어 Enum 요소를 확장한 경우 프로젝션을 활용한 집계 최적화 과정에서 예외가 발생할 수 있습니다. #84143 (Alexey Milovidov).
  • 구체화된 뷰(Materialized View)는 이제 생성된 데이터베이스를 실행 컨텍스트로 사용합니다. 이는 다음을 의미합니다. - 뷰의 SELECT 쿼리에서 참조하는 이름에 대해 명시적인 데이터베이스 지정은 생략할 수 있습니다. - 명시적인 데이터베이스 지정이 없으면 구체화된 뷰가 생성된 동일한 데이터베이스를 사용하는 것으로 간주합니다. #88193 (Dmitry Kovalev).
  • ON CLUSTER 사용 시 CREATE USER 인증 메서드에서 쿼리 매개변수 치환이 올바르게 이루어지도록 수정했습니다. 인증 메서드의 쿼리 매개변수(예: password)가 치환되지 않아 원격 노드에서 UNKNOWN_QUERY_PARAMETER 오류가 발생했습니다. #92777 (xiaohuanlin).
  • has, mapContainsKey, mapContainsValue 함수의 텍스트 인덱스 분석에서 발생하던 불일치가 수정되었습니다. 이전에는 이러한 함수를 사용하는 쿼리가 표현식을 텍스트 인덱스로 평가하는지 여부에 따라 서로 다른 결과를 반환할 수 있었습니다. #93578 (Anton Popov).
  • 스택 언와인딩 과정에서 dropReplicationSlot이 예외를 throw할 때, 테이블을 MaterializedPostgreSQL 데이터베이스에 ATTACH하면 발생하던 크래시를 수정했습니다. #96871 (Alexey Milovidov).
  • 동일한 파일을 두고 경합하는 동시 백업을 많이 수행하면 server가 중단될 수 있었습니다. #93659 (Alexey Milovidov).
  • 병렬 레플리카와 non-MT 테이블 간 JOIN을 수행하는 쿼리를 수정합니다. #92056를 해결합니다. #93902 (Igor Nikonov).
  • 이름에 점이 포함된 Iceberg 컬럼의 값이 NULL로 반환되던 문제를 수정했습니다. #94335 (Mikhail Koviazin).
  • stringJaccardIndexUTF8의 UTF8 문자열 처리 방식을 수정하고 성능을 개선했습니다. #94613 (Joanna Hulboj).
  • WITH FILL STALENESS에서 발생할 수 있는 오버플로우를 수정했습니다(이로 인해 UB 및/또는 무한 루프가 발생할 수 있음). 큰 점프 때문에 발생할 수 있는 무한 루프를 수정했습니다. 구 분석기 지원을 추가했습니다(주로 스트레스 테스트용). #94663 (Azat Khuzhin).
  • 호스트명이 여러 주소로 해석되고 원격 레플리카가 멈춘 경우 분산 쿼리가 멈춘 채로 남을 수 있는 문제를 수정했습니다. #94726 (c-end).
  • 가장 왼쪽 테이블 표현식이 -Cluster 테이블 함수일 때 여러 테이블 표현식을 조인하는 과정에서 잘못된 결과가 나오는 문제를 수정했습니다. #89996를 해결합니다. #94748 (Konstantin Bogdanov).
  • toWeek, toYearWeek, toStartOfWeek, toLastDayOfWeek, toDayOfWeek가 포함된 프레디케이트에서 잘못된 기본 키(primary key) 및 스킵 인덱스 프루닝을 수정하고, LowCardinality(String)를 사용하는 유효한 쿼리에서 이러한 함수 일부가 발생시키던 예외를 수정했습니다. #94816 (Nihal Z. Miaji).
  • SQL Security가 설정된 뷰의 ATTACH 쿨리에서 불필요한 permissions check 건너뛰기를 제거했습니다. 이를 통해 필요한 접근 권한을 검증하지 않은 상태에서 사용자가 definer가 있는 뷰를 attach할 때 발생할 수 있는 잠재적인 권한 상승을 방지합니다. #94865 (pufit).
  • delete_tmp_* 디렉터리가 동시에 제거되면서 발생하던 ReplicatedMergeTree 시작 시 크래시를 수정했습니다. #94892 (myeongjun).
  • materialized view가 있는 Iceberg 테이블에 INSERT할 때 중복 제거 정보가 유실되어 예외가 발생하던 문제를 수정했습니다. #94938 (Daniil Ivanik).
  • SYSTEM DROP QUERY CACHE TAG 'TAGNAME' ON CLUSTER <CLUSTERNAME>가 클러스터 전체의 쿼리 캐시를 삭제하던 버그를 수정했습니다. #94978 (Rory Crispin).
  • 수직 병합 후에도 상수 인덱스 세분화 수준(use_const_adaptive_granularity)을 유지합니다(Nested 수정이 포함된 v2이며, 전반적으로도 적용됩니다). #95013 (Azat Khuzhin).
  • [ClickHouse/ClickHouse#82764](https://github.com/ClickHouse/ClickHouse/pull/82764) 이후 26.1 버전의 파일 시스템 캐시에서 발생한 경쟁 상태 문제를 수정했습니다. #95042 (Kseniia Sumarokova).
  • clickhouse-client에서 KILL QUERY 및 쿼리 취소(Ctrl+C)로 postgresql() 테이블 함수를 취소할 수 없던 문제를 수정했습니다. #95136 (Roman Vasin).
  • 여러 개의 조인에서 USING 절을 사용할 때 원본 테이블의 한정된 컬럼에 대한 타입 추론을 수정했습니다. 이전에는 이후 조인이 해당 컬럼을 사용하지 않는 경우에도, 하위 원본 컬럼의 타입이 공통 상위 타입으로 잘못 갱신되었습니다(예: SELECT t2.a FROM t1 LEFT JOIN t2 USING (a) LEFT JOIN t3 USING (a)에서 t2.a 컬럼은 첫 번째 조인에서만 사용되므로, 그 타입은 t3.a를 제외한 t1.at2.a의 상위 타입이어야 합니다). 이로 인해 함수가 실제 실행 계획에 나타나는 타입과 다른 컬럼 타입을 예상할 경우 논리 오류나 충돌이 발생할 수 있었습니다. #95157 (Vladimir Cherkasov).
  • 매니페스트의 .avro 목록과 파일 내용을 가져올 때 컬럼 변환을 한 번만 수행하도록 수정했습니다. #95164 (Daniil Ivanik).
  • 과도한 메모리 사용이나 잘못된 컬럼 통계를 초래할 수 있었던 JSON 컬럼 크기 계산 오류를 수정했습니다. #95207 (Azat Khuzhin).
  • 경량 업데이트 후 대형 패치 파트를 적용할 때 메모리 사용량 집계가 부정확하던 문제를 수정했습니다. 이전에는 큰 패치를 적용하면 메모리를 과도하게 사용할 수 있었고, 그 결과 서버 프로세스가 OOM killer에 의해 종료될 수 있었습니다. #95231 (Anton Popov).
  • max_parallel_replicas를 사용하는 분산 쿼리가 인덱스 분석 중 로컬 레플리카로 폴백될 때 잘못된 결과나 예외를 일으킬 수 있던 정의되지 않은 동작을 수정했습니다. #95263 (Azat Khuzhin).
  • group_by_overflow_modeany로 설정한 경우 sum 및 시계열에서 희소 컬럼 집계가 올바르게 동작하도록 수정했습니다. #95301 (Mikhail Koviazin).
  • plain_rewritable 디스크 정책에서 메타데이터 파일을 unlink하는 도중 네트워크 오류가 발생하면 스토리지가 불일치 상태로 남을 수 있던 신뢰성 문제를 수정했습니다. #95302 (Mikhail Artemenko).
  • Iceberg에서 Date를 Date32로 대체합니다. #95322 (Konstantin Vedernikov).
  • redis 테이블 함수의 비밀번호 인수는 이제 로그와 시스템 테이블(system tables)(예: query_log)에서 마스킹됩니다. #95325 (János Benjamin Antal).
  • 분산 쿼리가 해당 테이블을 대상으로 아직 실행 중인데도 테이블이 삭제되거나 변경되어 예외가 발생하거나 잘못된 결과가 반환될 수 있던 버그를 수정했습니다. #95356 (Azat Khuzhin).
  • 분산 쿼리에서 음수 LIMIT/OFFSET를 사용할 때 일부 경우에 발생하던 논리 오류를 수정했습니다. #95357 (Nihal Z. Miaji).
  • ssh를 사용해 연결할 때 clickhouse-client가 비밀번호를 두 번 묻던 버그를 수정했습니다. #95372 (Isak Ellmer).
  • storage S3(Azure)Queue의 데이터 레이스를 수정했습니다. #95385 (Kseniia Sumarokova).
  • prewhere 내 람다 표현식으로 인해 발생한 필터 오류를 수정했습니다. #95395 (Xiaozhe Yu).
  • 집계 인수가 Nullable인 경우 optimize_syntax_fuse_functionssum/count/avgsumCount()로 재작성하지 않도록 수정했습니다. #95390을 해결합니다. #95441 (Nihal Z. Miaji).
  • 취소 시 분산 쿼리에서 발생할 수 있는 충돌을 방지했습니다. #95466 (Aleksandr Musorin).
  • S3(Azure)Queue engine의 스트리밍 중복 제거를 수정했습니다. #95467 (Kseniia Sumarokova).
  • 분산 쿼리에서 초기 사용자에게 할당된 행 정책이 업데이트되지 않던 문제를 수정했습니다. #95469 (Vitaly Baranov).
  • plain_rewritable 위의 암호화된 디스크에 대한 검사 수정(동일한 객체 스토리지 prefix를 사용하는 여러 plain-rewritable 디스크를 등록할 수 없는 It is not possible to register multiple plain-rewritable disks with the same object storage prefix 문제가 발생할 수 있는 현상을 수정합니다). #95470 (Azat Khuzhin).
  • mergeTreeProjection 테이블 함수에 접근 검사(access check)가 누락되어 있어, 테이블에 대한 SELECT 권한은 없지만 테이블 함수 권한은 있는 사용자가 해당 프로젝션에서 데이터를 읽을 수 있었습니다. 이번 수정으로 mergeTreeIndexmergeTreeAnalyzeIndexes에 이미 적용되어 있는 것과 동일한 접근 검사가 추가되었습니다. #95480 (Alexey Milovidov).
  • Dynamic/JSON 타입의 동적 서브컬럼에서 size 서브컬럼을 읽을 때 발생할 수 있는 논리 오류를 수정했습니다. #95573 (Pavel Kruglov).
  • #94262에서 도입된 (Experimental) zero‑copy 복제의 회귀 문제를 수정했습니다. 이 문제로 인해 다른 레플리카가 공유 파트를 모두 가져오기 전에 해당 파트가 삭제될 수 있었습니다. #95597 (filimonov).
  • JSON 배열에 tupleElement를 적용할 때 발생하는 충돌을 수정했습니다. #95581을 해결합니다. #95647 (Pavel Kruglov).
  • USING이 있는 JOIN의 VALUES 절에서 람다 함수 내부에 매처(*)를 사용할 때 발생하던 논리 오류 예외를 수정했습니다. #93675를 해결했습니다. #95661 (Vladimir Cherkasov).
  • 분산 DDL을 기다리는 동안 복제된 데이터베이스를 동시에 삭제할 때 발생하던 There was an error: Cannot obtain error message 논리 오류를 수정했습니다. #95539을 해결했습니다. #95664 (Alexander Tokmakov).
  • transform_null_in이 활성화된 상태에서 NULL 값에 대해 IN 함수가 잘못된 결과를 반환하던 문제를 수정했습니다. #65776을 해결합니다. #95674 (Nihal Z. Miaji).
  • 설정 cast_keep_nullable가 활성화된 경우 CAST에서 LowCardinality 널 허용 타입을 올바르게 처리하도록 수정했습니다. #95670을 해결했습니다. #95747 (Alexey Milovidov).
  • 파티션된 Delta Lake 데이터의 squashing 문제를 수정했습니다. #95773 (Kseniia Sumarokova).
  • 런타임 필터의 널 허용 조인 컬럼에서 발생하던 경쟁 상태를 수정했습니다. #95775 (Hechem Selmi).
  • USING 컬럼의 타입이 테이블과 SELECT 목록에서 서로 다를 때, matcher(*, table.*) 및 analyzer_compatibility_join_using_top_level_identifier가 있는 쿼리에서 발생할 수 있는 논리적 오류를 수정했습니다. #90477를 해결했습니다. #95808 (Vladimir Cherkasov).
  • 작업 스케줄링 중 오류가 발생하면 예외가 발생할 수 있었던 병렬 스레드 풀 작업(백업, 집계, 분산 쿼리)의 메모리 안전성 버그를 수정했습니다. #95818 (Raúl Marín).
  • 삭제 중인 워크로드를 사용하는 쿼리와 동시에 실행될 때 DROP WORKLOAD에서 발생하던 크래시를 수정했습니다. #95856 (Alexey Milovidov).
  • 여러 데이터베이스에 대해 제한된 권한만 가진 사용자가 시스템 테이블을 조회할 때 성능이 느려지는 문제를 수정했습니다. #89371을 해결합니다. #95874 (pufit).
  • 중첩된 경로가 있는 JSON에 대해 tupleElement를 실행할 때 발생하던 문제를 수정했습니다. 이전에는 이 문제로 인해 잘못된 쿼리 결과가 나올 수 있었습니다. #95907 (Pavel Kruglov).
  • 빈 MergeTree 테이블에서 direct 조인 알고리즘을 사용할 때 발생할 수 있는 NOT_SUPPORTED 오류를 수정했습니다. #95935 (Vladimir Cherkasov).
  • 클라이언트가 설정 별칭을 제안하거나 자동 완성하지 않던 문제를 수정했으며, #92190를 해결했습니다. #95945 (phulv94).
  • system.asynchronous_metric_log의 event_date 문제를 수정했습니다. #95947 (Raúl Marín).
  • JSON 데이터 타입의 경로 스키핑을 수정했습니다. 이전에는 JSON(SKIP path)를 사용하면 접두사 path를 가진 모든 JSON 키가 스키핑되어 "pathpath" 같은 키까지 제외되었고, 그 결과 삽입 시 이러한 경로의 데이터가 손실될 수 있었습니다. 이제는 "path" 키만 스키핑되도록 수정되었습니다. #95948 (Pavel Kruglov).
  • 알 수 없는 프로젝션이 있는 파트를 영구 손실로 표시해서는 안 됩니다. #95952 (Mikhail Artemenko).
  • Nullable(String) 키를 사용하는 Join 테이블에서 빈 문자열이 NULL로 처리되던 문제를 수정했습니다. #71414을 해결했습니다. #96002 (Alexey Milovidov).
  • 이제 PostgreSQL engine이 BOOLEAN[]를 올바르게 읽을 수 있습니다. #72754를 해결했습니다. #96006 (Alexey Milovidov).
  • 빈 파일에서 읽을 때 발생하던 ProtobufList 포맷 문제를 수정했습니다. #70059를 해결합니다. #96007 (Alexey Milovidov).
  • 빈 테이블에서 유령 레코드를 생성하던 ProtobufList 포맷 문제를 수정했습니다. #72596를 해결합니다. #96010 (Alexey Milovidov).
  • 유형 추론 시 분산 쿼리와 PREWHERE가 함께 사용되는 드문 경우에 UInt64Int32if 함수의 유형 불일치를 수정했습니다. #70017을 해결합니다. #96012 (Alexey Milovidov).
  • Bool 타입이 포함된 JIT 컴파일 쿼리 문제를 수정했습니다. #96013 (Alexey Milovidov).
  • SQLite TEXT 컬럼에서 UUID 컬럼을 읽을 때 발생하던 논리적 오류를 수정했습니다. #71263를 해결합니다. #96016 (Alexey Milovidov).
  • DateTime, Date, UUID 및 기타 타입에 대한 SQLite engine의 형 변환 문제를 수정했습니다. #73481을 해결했습니다. #96017 (Alexey Milovidov).
  • FixedString 값이 외부 데이터베이스인 SQLite 및 PostgreSQL에 대한 쿼리에서 잘못 이스케이프되던 문제를 수정했습니다. #73519을 해결합니다. @jh0x와 공동 작성했습니다. #96019 (Alexey Milovidov).
  • 큰 PRECEDING 오프셋에서 발생하던 WindowTransform의 assertion failure를 수정했습니다. #75852를 해결했습니다. #96026 (Alexey Milovidov).
  • 동시에 수행되는 async 삽입에서 동일한 매개변수 이름을 사용하지만 값은 서로 다른 경우 발생할 수 있는 데이터 손상 버그를 수정했습니다. #96035 (Seva Potapov).
  • 전역 프로파일러의 주기(global_profiler_real_time_period_nsglobal_profiler_cpu_time_period_ns로 제어됨)를 수정했습니다. 설정된 값이 아니라 잘린 값이 사용되어 프로파일러가 의도한 것보다 더 자주 깨어나는 문제가 있었습니다. #96048 (Antonio Andelic).
  • 이전에는 position delete에 대한 Iceberg manifest 파일에서 항목에 reference data file이 존재하지만 null인 경우, 해당 data files의 올바른 범위를 가져오지 못했습니다. 이 PR은 이 버그를 수정합니다. #96061 (Daniil Ivanik).
  • 기본 역할 해제 시 발생하던 문제를 수정했습니다. #96103 (Vitaly Baranov).
  • 드물게 발생하는, use_primary_key가 비활성화되어 있고 인덱스를 사용하는 조건의 논리합이 매우 많은 경우 인덱스 분석 중 발생하던 use-after-free를 수정했습니다. #96112 (Alexey Milovidov).
  • 명시적으로 지정된 크기가 데이터 타입 크기와 일치하지 않고 버퍼 크기가 너무 작은 경우 발생하는 Gorilla 코덱 회귀 문제를 수정했습니다. 이전 버전에서는 압축 해제 시 예외가 발생했습니다. #78253를 해결합니다. #96118 (Alexey Milovidov).
  • 딕셔너리 로드 시, 한 딕셔너리가 자신을 재귀적으로 참조하는 Merge 테이블을 참조할 때 발생할 수 있는 교착 상태를 방지했습니다. #78360을 해결했습니다. #96120 (Alexey Milovidov).
  • MySQL 및 JODA 스타일처럼 고정 폭이 아닌 서식 지정자를 사용할 때 formatDateTime에서 초기화되지 않은 값을 사용하는 문제를 수정했습니다. #96133 (Alexey Milovidov).
  • 설정 use_const_adaptive_granularityindex_granularity_bytes의 조합(즉, “비적응형 세분화 수준”)으로 인해 읽어야 하는 행 수가 잘못 계산되면서 예외가 발생했습니다. #96143 (Alexey Milovidov).
  • S3 및 Azure와 같은 객체 스토리지의 파일 기반 테이블에서 잘못된 ALTER UPDATE mutation을 실행하면 nullptr 역참조가 발생할 수 있었습니다. #92994를 해결했습니다. #96162 (Alexey Milovidov).
  • AccessRights::contains가 부분 REVOKE 사용 시 잘못된 결과를 반환하던 문제를 수정했습니다. #96170 (pufit).
  • 잘못된 쿼리 결과를 초래할 수 있었던 CTE의 상수 폴딩과 관련된 쿼리 조건 캐시 해시 충돌을 수정했습니다. #96060을 해결합니다. #96172 (Alexey Milovidov).
  • ProcessList에서 발생할 수 있는 교착 상태를 수정했습니다. 작업을 cancellation checker에 추가하는 도중 메모리 오버커밋 트래커가 트리거되면 잠금 순서 역전으로 인해 이런 문제가 발생할 수 있습니다. #96182 (Antonio Andelic).
  • 여러 개의 INNER JOIN과 함께 외부 조인(LEFT, RIGHT 또는 FULL)이 포함된 쿼리에서, 허용되지 않는 조인 재정렬로 인해 잘못된 결과가 반환될 수 있던 버그를 수정했습니다. 외부 조인의 ON 조건이 앞서 조인된 여러 테이블의 컬럼을 참조할 때, 옵티마이저가 모든 테이블 간 의존성을 제대로 반영하지 못해 조인을 잘못 재정렬할 수 있었고, 그 결과 일부 행이 누락되었습니다. Close #95972. #96193 (Vladimir Cherkasov).
  • 테이블에 정의된 통계 정보가 없으면 ClickHouse는 이를 로드하려고 시도하지 않습니다. 이렇게 하면 통계 파일의 존재 여부를 확인하는 데 드는 일부 오버헤드(100ms+)를 줄일 수 있습니다. (issue #96068). #96233 (Han Fei).
  • 집계 인수가 LowCardinality(Nullable)인 경우 optimize_syntax_fuse_functionssum/count/avgsumCount()로 재작성하지 않도록 수정했습니다. #95390을 해결합니다. #96239 (Nihal Z. Miaji).
  • 일부 경우 not INnot has 함수에서 잘못된 파티션 프루닝을 수정했습니다. #96241 (Nihal Z. Miaji).
  • 벡터 유사도 인덱스에서 발생하던 stack-use-after-scope 문제를 수정했습니다. #96259 (Alexey Milovidov).
  • 쿼리 앞에 SQL 주석이 있을 때 테스트 러너가 오류 힌트 주석을 인식하지 못하는 문제를 수정했습니다. #96336 (Yakov Olkhovskiy).
  • 테이블의 프라이머리 키가 널 허용이고, 쿼리에서 첫 번째 인수가 상수인 coalesce 함수를 사용할 때 KeyCondition에서 발생하는 논리 오류를 수정했습니다. #96340 (Alexey Milovidov).
  • GROUPING SETS, group_by_use_nulls, 그리고 내부에 LowCardinality를 포함한 Tuple 데이터 타입이 상호작용하면서 쿼리 파이프라인에서 예상치 못한 block 구조가 생성되어 논리 오류가 발생할 수 있었습니다. 이 문제는 Nullable Tuple이 도입된 이후 나타났습니다. #96358 (Alexey Milovidov).
  • 빈 표현식 ()을 인덱스로 한 테이블을 생성할 수 있었고, 이로 인해 유효하지 않은 메모리 접근이 발생했습니다. #96363 (Alexey Milovidov).
  • 기존 분석기에서 JOIN과 중복된 별칭이 함께 있을 때 발생하던 충돌을 수정했습니다. #96405 (Ilya Golshtein).
  • Variant 컬럼에 대한 잘못된 in-place 필터링 최적화로 인해 발생한 Nested columns sizes are inconsistent with local_discriminators 오류를 수정했습니다. #96410 (Alexey Milovidov).
  • 원본 테이블의 전체 수식자를 무시하던 CREATE TABLE ... CLONE AS ... 문제를 수정했습니다. #96415 (Hasyimi Bahrudin).
  • clickhouse-client에서 mysql 테이블 함수가 KILL QUERY 또는 쿼리 취소(Ctrl+C)로 취소되지 않던 문제를 수정했습니다. #96437 (Roman Vasin).
  • max_execution_time 값이 큰 쿼리에서 취소 확인 스레드의 라이브락 문제를 수정했습니다. #96450 (Sergei Trifonov).
  • 분산 쿼리에서 소수값 LIMIT/OFFSET을 사용할 때 일부 경우에 발생하던 논리 오류를 수정했습니다. #96475 (Nihal Z. Miaji).
  • 람다 함수가 포함된 특정 표현식에서 NULL 포인터 역참조 문제를 수정했습니다. #96479 (Alexey Milovidov).
  • LowCardinality 컬럼이 Nullable로 변환될 때 잘못된 결과가 나오던 문제를 수정했습니다. #96483 (Nihal Z. Miaji).
  • 존재하지 않는 컬럼을 참조하거나 위치 인수를 사용하는 ORDER BY 절이 포함된 Iceberg 테이블을 생성할 때 발생하는 충돌을 수정했습니다. #93280을 해결합니다. #96484 (Konstantin Vedernikov).
  • 널 허용 하위 필드가 있는 Tuple 컬럼에서 발생하던 런타임 필터 예외를 수정했습니다. #96509 (Alexey Milovidov).
  • PREWHERE filter 컬럼에 불리언이 아닌 UInt8 값이 있을 때 Parquet V3 네이티브 리더에서 발생하는 LOGICAL_ERROR 예외를 수정했습니다. #96594 (Alexey Milovidov).
  • 메타데이터 변경 시 복제된 테이블에서 인덱스가 암시적으로 다시 생성되던 문제를 수정했습니다. #96600 (Raúl Marín).
  • DROP WORKLOAD 시 발생하는 데이터 레이스를 수정했습니다. #96614 (Sergei Trifonov).
  • Iceberg 테이블 쓰기에서 파티션된 삽입으로 인해 파티션 파일 전반에 데이터가 잘못 분산될 수 있던 버그를 수정했습니다. #96620 (Konstantin Vedernikov).
  • constraints가 있는 CREATE TABLE에서 발생하던 heap-use-after-free 문제를 수정했습니다. #96669 (Nikita Taranov).
  • 버퍼 오버플로우를 방지하기 위해 bech32의 witness 버전을 검증하도록 수정했습니다. #96671 (Raúl Marín).
  • 유효하지 않은 auth_header 설정으로 데이터 레이크 REST 카탈로그를 생성했을 때 system.tables에서 오류가 반환되던 문제를 수정했습니다. #96680 (Han Fei).
  • TTL 머지 후 블록의 모든 행이 필터링된 경우 _minmax_count_projection을 통해 min(timestamp)가 epoch(1970-01-01)를 반환하던 문제를 수정했습니다. #96703 (Raquel Barbadillo).
  • iceberg_metadata_file_path 설정의 유효성 검사를 개선하여 경로 탐색을 방지하고, 지정된 메타데이터 파일이 테이블 디렉터리 내에 있는지 확인합니다. #96754 (Daniil Ivanik).
  • GROUP BY에서 Variant 인수를 사용할 때 발생하던 ifNull 충돌을 수정했습니다. #96790 (Alexey Milovidov).
  • table_disk=1 설정이 적용된 테이블 간 캐시 키 충돌을 수정했습니다. #96818 (Raufs Dunamalijevs).
  • 경쟁 상태로 인해 MemoryWorker의 정리 스레드가 멈춰 있던 문제를 수정했습니다. #96819 (Antonio Andelic).
  • Iceberg 카탈로그에서 자격 증명이 포함된 데이터가 로그에 남지 않도록 수정했습니다. #96831 (Konstantin Vedernikov).
  • 서버 오류 발생 후 clickhouse-client의 종료 상태 코드를 수정했습니다. #96841 (Vitaly Baranov).
  • CROSS JOIN과 사용 설정된 병렬 레플리카를 사용하는 쿼리에서 잘못된 결과가 반환될 수 있었습니다. #74337을 수정했습니다. #96848 (Igor Nikonov).
  • 이전에 동일한 컬럼에 경량 업데이트가 수행된 뒤 ALTER TABLE DROP COLUMN 쿼리가 실패하던 문제를 수정했습니다. #96861 (Anton Popov).
  • plain_rewritable 객체 스토리지 디스크에서 아카이브 기반 백업(.zip, .tzst)을 생성할 때 발생하던 스택 오버플로우(충돌) 문제를 수정했습니다. #96872 (Alexey Milovidov).
  • 대상 파일 시스템에서 디스크 공간 부족이나 기타 I/O 오류로 백업이 실패할 때 발생하던 server 충돌을 수정했습니다. #96873 (Alexey Milovidov).
  • EXCEPT ALLINTERSECT ALL이 행의 중복 개수를 무시하고 해당 DISTINCT 구문처럼 동작하던 문제를 수정했습니다. #96876 (Alexey Milovidov).
  • 호환되지 않는 타입(예: 정수 검색값으로 IPv4 배열을 검색하는 경우)으로 호출할 때 indexOfAssumeSorted에서 발생하는 std::terminate 예외를 수정했습니다. #96877 (Alexey Milovidov).
  • 윈도우 함수와 group_by_use_nulls = 1, CUBE/ROLLUP/GROUPING SETS를 사용할 때 발생하는 예외 Bad cast from type DB::ColumnNullable to DB::ColumnString를 수정했습니다. #96878 (Alexey Milovidov).
  • JIT로 컴파일된 표현식에서 DateTimeDateTime64로 변환할 때(CASE/if/multiIf에서 DateTime 타입이 혼합된 경우 등) 잘못된 결과가 발생하던 문제를 수정했습니다. 값이 적절히 스케일 조정되지 않고 재해석되어, 표현식 컴파일이 적용된 뒤 잘못된 타임스탬프가 생성되었습니다. #96879 (Alexey Milovidov).
  • 스킵 인덱스 표현식이 상수 컬럼을 반환할 때(예: 정수 컬럼의 ifNotFinite(1, c0)에 대한 bloom_filter) CoalescingMergeTree에서 발생하는 논리 오류 예외를 수정했습니다. #96880 (Alexey Milovidov).
  • HTTP로 TLS가 활성화된 네이티브 프로토콜 포트에 실수로 연결할 때 오류 메시지에 잘못된 포트 번호가 표시되는 문제를 수정했습니다. #96881 (Alexey Milovidov).
  • CTE와 서브쿼리에서 file과 같은 테이블 함수에 서브쿼리별 SETTINGS가 적용되지 않던 문제를 해결했습니다. #96882 (Alexey Milovidov).
  • X509 인증서를 읽을 때 BIO 객체에서 발생하는 메모리 누수를 해결했습니다. #96885 (Alexey Milovidov).
  • 구체적인 값이 필요한 곳(예: arrayFold의 accumulator 인수)에 람다 표현식이 전달될 때 쿼리 분석기에서 발생하던 LOGICAL_ERROR 예외를 수정했습니다. #96892 (Alexey Milovidov).
  • 복잡한 중첩 타입(Nullable Enum 값을 갖는 Map을 포함한 Nullable Tuple의 Array)을 캐스팅할 때 발생하는 ColumnNullable is not compatible with original 예외를 수정했습니다. #96924 (Alexey Milovidov).
  • 세그먼트된 HASHED 딕셔너리의 병렬 로딩 중 간헐적으로 일부 행이 로드되지 않을 수 있던 경쟁 조건을 수정했습니다. #96953 (Alexey Milovidov).
  • REPLACE PARTITION과 백그라운드 뮤테이션 사이의 경쟁 상태를 수정해, REPLACE 이후 이전 데이터와 새 데이터가 모두 보일 수 있던 문제를 해결했습니다. #96955 (Alexey Milovidov).
  • INNER JOIN 및 WHERE 절과 함께 사용할 때 arrayJoin 함수가 중복 행을 생성하던 문제를 수정했습니다. 이 문제는 부분 프레디케이트 푸시다운 최적화에서 arrayJoin이 포함된 필터를 JOIN 아래로 잘못 푸시했기 때문에 발생했습니다. #96989 (Alexey Milovidov).
  • BlockIO::operator=query_metadata_cache를 이동하지 않아 캐시된 스토리지 스냅샷이 너무 일찍 파기되고, 그 결과 MergeTreeData 스토리지에서 해제 후 사용(use-after-free)이 발생해 clearCaches에서 크래시(SEGFAULT)가 발생하던 문제를 수정했습니다. #96995 (Alexey Milovidov).
  • if 또는 transform 함수가 Nullable(String)을 반환할 때 IfTransformStringsToEnumPass에서 발생하는 assertion failure를 수정했습니다(예: GROUP BY ... WITH CUBEgroup_by_use_nulls = true를 사용하는 경우). #97002 (Alexey Milovidov).
  • INSERT ... SELECT에서 UNION ALLJOIN을 사용할 때 block squashing 후 상수 문자열 컬럼에 잘못된 값이 들어가 잘못된 데이터가 기록되던 문제를 수정했습니다. #97019 (Hasyimi Bahrudin).
  • ALTER TABLE MODIFY COLUMN으로 컬럼 유형이 변경된 뒤 컬럼 통계를 생성할 때 발생하던 assert_cast 예외(또는 릴리스 빌드에서 조용히 발생하는 데이터 손상)를 수정했습니다. #97027 (Alexey Milovidov).
  • Azure Blob Storage, SSH 프로토콜 및 Arrow Flight 인터페이스에서 초기화되지 않은 메모리를 읽는 버그를 수정했습니다. #97053 (Alexey Milovidov).
  • ROW POLICY/PREWHERE 및 FINAL이 있는 쿼리 결과에 인덱스가 영향을 미치던 문제를 수정했습니다. #97076 (Yarik Briukhovetskyi).
  • MergeTree 테이블에서 REPLACE PARTITION과 백그라운드 뮤테이션 사이에 남아 있던 race condition을 수정해, 오래된 데이터가 다시 나타날 수 있던 문제를 해결했습니다. #97105 (Alexey Milovidov).
  • 별칭 컬럼이 있는 암시적 인덱스를 수정하고, 생성 전에 전체 유효성 검사를 수행합니다. #97115 (Raúl Marín).
  • arrayROCAUC처럼 상수 인수가 필요한 함수에서 FunctionVariantAdaptor의 논리 오류를 수정했습니다. #97116 (Bharat Nallan).
  • 이미 뮤테이션된 파트에 대해 PartCheckThreadGET_PART를 다시 큐에 넣어 parts_to_do에 유령 항목이 남는 문제로 인해 정체되던 뮤테이션을 수정했습니다. #97162 (Alexey Milovidov).
  • ORDER BY ... LIMIT가 있는 서브쿼리의 쿼리 계획 행 수 추정을 수정하여, 옵티마이저가 비최적의 조인 순서를 선택할 수 있던 문제를 해결했습니다. #97193 (Alexander Gololobov).
  • Variant 컬럼을 처리하는 함수가 Nothing 타입을 반환할 때 FunctionVariantAdaptor에서 발생하는 LOGICAL_ERROR 예외를 수정했습니다. 이는 UNION ALL 쿼리에서 빈 배열이 있을 경우 발생할 수 있습니다. #97213 (Alexey Milovidov).
  • 동시 접근 시 예외가 발생할 수 있었던 S3 multipart copy 작업(예: S3로 BACKUP/RESTORE 수행 중)의 데이터 레이스를 수정했습니다. #97227 (Azat Khuzhin).
  • WHERE 절에서 arrayJoinJOIN 양쪽의 컬럼을 모두 참조할 때 발생하는 LOGICAL_ERROR 예외를 수정했습니다. #97239 (Alexey Milovidov).
  • PREWHERE를 사용하는 Tuple에서 희소 Nullable(String).size 하위 컬럼을 읽을 때 발생하는 LOGICAL_ERROR 예외를 수정했습니다. #97264 (Alexey Milovidov).
  • ORDER BY ... LIMIT를 사용해 비적응형 인덱스 세분화 수준(index_granularity_bytes = 0)을 사용하는 테이블에서 읽을 때 LazyMaterializingTransform에서 발생하던 “지연 청크의 행 수가 오프셋 개수와 일치하지 않습니다” 예외를 수정했습니다. #97270 (Alexey Milovidov).
  • SYSTEM RESTART REPLICA에서 테이블 재생성이 ZooKeeper 이외의 예외(예: 메모리 제한)로 실패할 경우 데이터베이스에서 테이블이 사라져 DatabaseReplicated의 메타데이터 다이제스트 불일치가 발생하던 문제를 수정했습니다. #97276 (Alexey Milovidov).
  • system.merge_tree_settings의 필드 readonly가 이제 특정 MergeTree 설정(예: index_granularity)이 항상 읽기 전용임을 올바르게 반영합니다. #97277 (Robert Schulze).
  • 데이터 없이 스토리지 스냅샷이 생성된 경우 MergeTree 테이블에서 count() 최적화 중 발생하던 충돌을 수정했습니다. #97281 (Pablo Marcos).
  • 스택 트레이스용 디버그 정보에서 함수 이름을 해석할 때 발생할 수 있는 크래시를 수정했습니다. #97294 (Azat Khuzhin).
  • analyzer_compatibility_join_using_top_level_identifier 및 ALIAS 컬럼에서 발생하는 논리 오류를 수정했습니다. #96228을 해결했습니다. #97297 (Vladimir Cherkasov).
  • 텍스트 인덱스가 적용된 컬럼을 QUALIFY 절과 함께 사용할 때 applyOrder에서 발생하는 LOGICAL_ERROR 예외를 수정했습니다. #97313 (Alexey Milovidov).
  • 시스템 테이블 system.functions는 이제 내부 함수의 경우 categories = '' 대신 categories = 'Internal'로 표시됩니다. #97315 (Robert Schulze).
  • RIGHT JOIN 체인이 포함된 쿼리에서 병렬 레플리카가 활성화된 경우 잘못된 결과가 나올 수 있습니다. #74341을 수정했습니다. #97316 (Igor Nikonov).
  • 갱신 가능 구체화 뷰 및 테이블 이름이 변경되는 기타 상황에서 발생할 수 있던 불필요한 TABLE_UUID_MISMATCH 오류를 수정했습니다. #97323 (Azat Khuzhin).
  • 지연 백업 배치에서 유효하지 않은 스토리지 포인터를 참조하는 use-after-free로 인해 발생하던 StorageKeeperMap 백업 segfault를 수정했습니다. #97336 (Alexey Milovidov).
  • mutations_execute_subqueries_on_initiator가 활성화된 경우 ALTER UPDATE/DELETE 내부의 스칼라 서브쿼리에서 사용되는 exists 함수를 수정했습니다. 스칼라 서브쿼리가 잘못 평가되어 오류가 발생하거나 손상된 뮤테이션 명령이 생성될 수 있었고, 이로 인해 다음 server 재시작 시 table을 로드할 수 없게 될 수 있었습니다. #97347 (Kirill Kopnev).
  • LowCardinality 타입이 포함된 Variant 컬럼과 NULL을 비교할 때 발생하던 논리 예외 Unexpected return type from equals. Expected Nullable(UInt8). Got Const(LowCardinality(Nullable(UInt8)))를 수정했습니다. #97379 (Alexey Milovidov).
  • 세그먼트별 쿼리 캐시가 활성화된 상태에서 EXCHANGE TABLES가 병렬로 실행될 때 발생할 수 있는 경쟁 상태(race condition)를 수정했습니다. #97411 (Konstantin Vedernikov).
  • 바깥쪽 Tuple 래퍼의 nullable_source가 변환된 배열 컬럼을 맞지 않는 컬럼 유형으로 대체할 때 발생하던 Array-to-QBit 변환의 LOGICAL_ERROR 예외를 수정했습니다. #97389를 해결합니다. #97413 (Alexey Milovidov).
  • 괄호 안에 있는 별칭이 지정된 튜플 리터럴의 AST 포맷팅 라운드트립 불일치 문제를 수정했습니다. 예를 들어 (('a', 'b') AS x)가 잘못하여 tuple(('a', 'b') AS x)로 재포맷되던 문제입니다. #97418 (Alexey Milovidov).
  • 파싱 오류로 인해 행이 0개인 빈 block이 생성될 때, 중복 제거가 적용된 비동기 삽입에서 발생하던 예외를 수정했습니다. #97460 (Sema Checherinda).
  • ORDER BY ... LIMIT를 사용해 비적응형 인덱스 세분화 수준(index_granularity_bytes = 0) 테이블을 읽을 때 LazyMaterializingTransform에서 발생하던 “lazy 청크의 행 수가 오프셋 수와 일치하지 않습니다” 예외를 수정했습니다. #97482 (Alexey Milovidov).
  • Iceberg 삽입 관련 설정을 수정했습니다. allow_experimental_insert_into_iceberg 설정의 별칭을 추가했습니다. #97483 (Konstantin Vedernikov).
  • optimize_inverse_dictionary_lookup 최적화가 dictGet(...) 프레디케이트를 재작성할 때 CREATE TEMPORARY TABLE 권한이 없는 사용자에게 발생하던 ACCESS_DENIED 문제를 수정했습니다. 이제 ClickHouse는 재작성을 건너뛰고 원래 표현식을 실행합니다. #97269을 해결합니다. #97484 (Nihal Z. Miaji).
  • 내부 희소 서브컬럼이 있는 컬럼(예: 희소 직렬화 프로필이 서로 다른 MergeTree 파트의 Tuple 컬럼)을 처리할 때 SetMergeTreeIndexSet에서 발생하던 assertion failure(디버그/새니타이저 빌드에서는 예외 발생)를 수정했습니다. #97493 (Alexey Milovidov).
  • StorageKafka2에서 발생할 수 있는 use-after-free 문제를 해결했습니다. #97520 (Bharat Nallan).
  • 출력 경로에 디렉터리가 포함된 경우 TRUNCATEinto_outfile_create_parent_directories 설정과 함께 INTO OUTFILE이 올바르게 동작하지 않던 문제를 수정했습니다. #97549 (Alexey Milovidov).
  • 분석기가 활성화된 상태에서 merge() 테이블 함수를 통해 ALIAS 컬럼 안에 람다 표현식이 포함된 테이블을 쿼리할 때 발생하던 BAD_ARGUMENTS 오류를 수정했습니다. #97551 (Alexey Milovidov).
  • Keeper zxid가 0일 때 system.zookeeper_info에서 발생하는 예외를 수정했습니다. #97553 (Alexey Milovidov).
  • 키 유형이 String이 아닐 때 ip_trie 딕셔너리에서 발생할 수 있는 논리 오류를 수정했습니다. #97555 (Bharat Nallan).
  • 기본 RestCatalog에서 REST 카탈로그 OAuth 인증이 작동하지 않던 문제를 수정했습니다(OneLakeCatalog와 같은 파생 카탈로그에서만 작동했습니다). 이로 인해 BigLake 카탈로그 도입 후 기본 REST 카탈로그가 동작하지 않게 되었습니다. #97561 (Konstantin Vedernikov).
  • 이제 Geometry 함수(perimeterSpherical, areaSpherical 등)는 Geometry variant 타입에 더해 개별 지오메트리 하위 타입(Polygon, Ring, Point 등)도 허용합니다. #97571 (Alexey Milovidov).
  • Nullable(Tuple(... Nullable(T) ...)) 타입의 서브컬럼에 isNull/isNotNull을 사용할 때 LOGICAL_ERROR 예외가 발생하던 문제를 수정했습니다. #97224를 해결합니다. #97582 (Alexey Milovidov).
  • 경량 업데이트 중 패치 파트를 적용할 때 발생하는 널 포인터 역참조를 수정했습니다. #97583 (Alexey Milovidov).
  • BaseSettings::readBinaryaccessor.find에서 받은 인덱스를 찾지 못했음을 나타내는 센티널 값(즉, -1)인지 확인하지 않은 채 field_infos[]에 전달하므로, std::vector 경계 밖 접근이 발생할 수 있습니다. 이 문제는 libcxx 하드닝 덕분에 발견되었습니다. 이는 더 최신 server가 더 오래된 server가 알지 못하는 설정을 보낼 때, 아마도 쿼리 계획 역직렬화 중에 발생한 것으로 보입니다. 문자열 기반 읽기 메서드는 이미 이를 올바르게 처리하고 있었지만, readBinary에는 같은 확인이 빠져 있었습니다. #97585 (Miсhael Stetsyuk).
  • 한 브랜치에 상수 false 프레디케이트가 있는 UNION ALL 쿼리에서 잘못된 결과가 반환되던 문제를 수정했습니다. 해당 브랜치는 아무것도 반환하지 않아야 했지만, 잘못하여 데이터를 읽고 있었습니다. #97620 (Bharat Nallan).
  • 단일 컬럼 참조가 포함된 IN (col)UNSUPPORTED_METHOD 오류와 함께 실패하던 문제를 수정했습니다. #97646 (Alexey Milovidov).
  • GROUP BY ... WITH ROLLUP/CUBE 수행 중 키에 Nullable(Tuple(...)) 내부의 LowCardinality(Nullable(...))가 포함된 경우 발생하는 논리 오류 예외를 수정했습니다. #97647 (Alexey Milovidov).
  • 디버그 빌드에서 LOGICAL_ERROR를 유발할 수 있던 NOT (1, 1, 1)의 AST 포맷 불일치를 수정했습니다. #97653 (Alexey Milovidov).
  • 비어 있는 ZooKeeper 트랜잭션 로그 파일을 처리할 때 발생하던 keeper-converter 예외를 수정했습니다. #97673 (Alexey Milovidov).

빌드/테스트/패키징 개선

  • ClickHouse를 clang-23(master)로 빌드할 수 있습니다. #95578 (Alexey Milovidov).
  • bind_host가 구성된 경우 is_local을 강제로 false로 설정하도록 수정하고, 이를 통합 테스트로 대체했습니다. #74741에 대한 후속 조치입니다. #93109 #96018 (Zhigao Hong).
  • 스트레스 테스트: CI에서 스트레스 테스트와 업그레이드 테스트를 수정했습니다. no-{build} 태그는 무시하도록 했습니다. 호환성 무작위화를 추가했습니다. #94693 (Nikita Fomichev).
  • 빌드 결과물로 parser_memory_profiler 바이너리를 게시했습니다. 이 도구는 AST의 메모리 사용량을 분석하는 데 사용할 수 있습니다. #95826 (Ilya Yatsishin).
  • 결과에 해석된 심볼이 포함된 .heap.sym 파일을 생성하는 parser_memory_profiler 도구에 --symbolize 플래그를 추가했습니다. #96477 (Ilya Yatsishin).
  • 통합 테스트에서 사용하는 타사 Docker 이미지를 특정 버전으로 고정합니다. #96500 (Alexey Milovidov).
  • OpenSSL을 동적으로 링크하는 기능을 다시 복원했습니다. 이는 권장되지 않으며 어떤 프로덕션 빌드에서도 사용되지 않지만, 인터넷상의 애호가들을 위해 이 옵션은 여전히 남아 있습니다. #96506 (Govind R Nair).
  • Coordination::OpNum에 타입별 특수화를 적용해 magic_enum 범위를 [-100, 1000]에서 기본값인 [-128, 127]로 줄이고, 빌드 시간을 개선했습니다. #96632 (Alexey Milovidov).
  • 빌드 시간을 줄이기 위해 Function 클래스에서 불필요한 C++ 템플릿을 제거했습니다. #96646 (Alexey Milovidov).
  • 빌드 병렬성을 향상하기 위해 StorageSystemLicenses 생성 시점을 configure 단계로 옮겼습니다. #96697 (Alexey Milovidov).
  • 라이선스 스캔을 병렬로 수행합니다. #96727 (Raúl Marín).
  • SSH 프로토콜 지원에 대한 stateless 기능 테스트를 추가했습니다. #96996 (Alexey Milovidov).
  • Kafka 3.9.0을 stateless 기능 테스트 인프라에 추가하여, ZooKeeper 역할로 ClickHouse Keeper를 사용하면서 Kafka 및 Kafka2 테이블 엔진을 직접 테스트할 수 있게 했습니다. 새로 추가된 6개의 stateless 테스트는 기본적인 produce/consume, 가상 컬럼(virtual columns), INSERT, 여러 포맷, 손상된 메시지 처리, 그리고 Keeper 기반 offset 저장을 다룹니다. #96997 (Alexey Milovidov).
  • PGO+BOLT 최적화 clang toolchain을 빌드하는 CI 워크플로를 추가합니다. #96991 (Alexey Milovidov).
  • CI에서 PGO로 최적화된 LLVM/Clang 빌드를 사용해 빌드 속도가 20..30% 향상됩니다. #97031 (Alexey Milovidov).
  • glibc의 수학 관련 함수를 llvm-libc 구현으로 대체합니다. #90151 (Konstantin Bogdanov).
  • Boost를 1.83에서 1.90으로 업데이트하여 디버그 빌드에서 devector 어설션이 실패하던 문제를 수정했습니다. #97037 (Alexey Milovidov).
  • postgres를 REL_18_1로 업데이트했습니다. #95189 (Konstantin Bogdanov).
  • libexpat 2.7.3을 사용하도록 변경했습니다. #95218 (Konstantin Bogdanov).
  • OpenSSL 3.5.5를 사용하도록 변경했습니다. #95345 (Konstantin Bogdanov).
  • simdjson v4.2.4를 사용하도록 변경했습니다. #97129 (Konstantin Bogdanov).
  • libarchive 3.8.5를 사용하도록 변경했습니다. #97131 (Konstantin Bogdanov).
  • fast_float v8.2.3을 사용하도록 변경했습니다. #97133 (Konstantin Bogdanov).
  • abseil-cpp는 20260107.1을, s2geometry는 v0.13.1을 사용합니다. #97134 (Konstantin Bogdanov).
  • libxml2를 2.15.1로 업데이트했습니다. #95574 (Robert Schulze).
  • 지원이 종료(EOL)되었거나 제거된 베이스 이미지를 기반으로 하던 Tier-3 통합 테스트용 Docker 이미지 7개를 현재 지원되는 버전으로 업그레이드했습니다. #97314 (Rahul).
  • TPC-DS 벤치마크 쿼리를 추가했습니다. #97349 (Raufs Dunamalijevs).
  • 개별 x86 명령어 세트 cmake 옵션(ENABLE_SSSE3, ENABLE_AVX2, NO_SSE3_OR_HIGHER, ARCH_NATIVE 등)을, 런타임 디스패치 시스템에서 이미 사용 중인 표준 x86-64 마이크로아키텍처 수준에 맞는 단일 숫자 X86_ARCH_LEVEL 옵션(1/2/3/4)으로 대체합니다. #97354 (Raúl Marín).
  • FunctionBinaryArithmetic에서 나눗셈이 아닌 연산에는 division_by_nullable=true Template Variant를 인스턴스화하지 않도록 해 컴파일 시간과 바이너리 크기를 줄였습니다. #97496 (Raúl Marín).
  • typeid_cast.h, assert_cast.h, Context_fwd.h, IDataType.h 및 여러 Column 헤더처럼 광범위하게 참조되는 헤더에서 Exception.h를 제거해 Exception.h의 include 의존성 범위를 줄였습니다. #97497 (Raúl Marín).
  • 항상 호스트 컴파일러의 헤더 대신 번들된 compiler-rt 헤더(새니타이저 및 XRay 인터페이스)를 사용하고, 기본값으로 compiler-rt 라이브러리를 소스에서 빌드합니다. #97499 (Raúl Marín).
  • 충분한 long double를 지원하는 플랫폼에서는 wide_integer_impl.h에 boost/multiprecision 헤더를 포함하지 않도록 해 빌드 시간을 단축했습니다. #96633 (Alexey Milovidov).
  • LLVM Code Coverage job을 구현하고, 우선 master 브랜치에서 활성화했습니다. #90952 (Alexey Bakharew).
  • 릴리스 빌드에서 빠른 libcxx 강화 기능을 활성화했습니다. 이는 주로 범위 초과(out-of-bounds) 검사에 필요합니다. 성능 테스트 결과를 보면, 눈에 띄는 성능 저하는 없을 것으로 예상됩니다. #94757 (Miсhael Stetsyuk).

ClickHouse 릴리스 26.1, 2026-01-29. 발표 자료, 영상

하위 호환되지 않는 변경 사항

  • formatter에서 alias가 잘못 치환되어 발생한 포맷 불일치 문제를 수정했습니다. 이로써 #82833이 해결되었습니다. 이로써 #82832가 해결되었습니다. 이로써 #68296가 해결되었습니다. 이 변경으로 인해 잠재적으로 하위 호환성이 깨질 수 있습니다. 분석기가 비활성화되어 있으면, 별칭을 참조하는 IN 절이 있는 일부 CREATE VIEW 쿼리를 처리할 수 없습니다. 이러한 비호환성을 방지하려면 분석기를 활성화하십시오(24.3부터 기본적으로 활성화됨). #82838 (Alexey Milovidov).
  • 코덱 DEFLATE_QPLZSTD_QAT이 제거되었습니다. 업그레이드 전에 DEFLATE_QPL 또는 ZSTD_QAT으로 압축된 기존 데이터를 다른 코덱으로 변환하는 것이 좋습니다. 코덱을 사용하려면 설정 enable_deflate_qpl_codecenable_zstd_qat_codec를 활성화해야 했다는 점에 유의하십시오. #92150 (Robert Schulze).
  • system.query_log.exception에서 stderr 캡처를 활성화해 UDF 디버깅을 개선했습니다. 이전에는 UDF stderr가 파일에만 기록되고 query logs에는 노출되지 않아 디버깅이 불가능했습니다. 이제 stderr는 기본적으로 예외를 발생시키며, 예외를 발생시키기 전에 전체 내용이 완전히 누적되고(최대 1MB), 그 결과 전체 Python traceback과 오류 메시지가 system.query_log.exception에 표시되어 효과적으로 문제를 해결할 수 있습니다. #92209 (Xu Jia).
  • JOIN USING () 절에서 빈 컬럼 목록은 이제 구문 오류로 간주됩니다. 이전에는 쿼리 실행 중 INVALID_JOIN_ON_EXPRESSION으로 처리되어야 했습니다. Join 스토리지와 join하는 경우와 같은 일부 상황에서는 LOGICAL_ERROR가 발생했습니다. #82502을 해결합니다. #92371 (Vladimir Cherkasov).
  • 기본적으로 JSON 타입에서 SKIP REGEXP에 부분 일치를 사용하도록 변경했습니다. #79250을 해결했습니다. #92847 (Pavel Kruglov).
  • “단순 ALIAS 컬럼에 대한 INSERT 허용”을 되돌렸습니다(ClickHouse/ClickHouse#84154의 되돌림). 사용자 지정 포맷에서는 작동하지 않고, 이를 제어하는 설정도 없습니다. #92849 (Azat Khuzhin).
  • 데이터 레이크 카탈로그가 객체 스토리지에 접근할 수 없을 때 오류를 발생시키는 설정. #93606 (Konstantin Vedernikov).
  • Lazy 데이터베이스 엔진이 제거되어 이제 더 이상 사용할 수 없습니다. #91231 이슈가 종료되었습니다. #93627 (Alexey Milovidov).
  • 버그 때문에 사용할 수 없는 metric_logtransposed_with_wide_view 모드를 제거했습니다. 이제 이 모드로 system.metric_log를 정의할 수 없습니다. 이는 #78412을 부분적으로 되돌리는 변경입니다. #93867 (Alexey Milovidov).
  • 워크로드용 CPU 스케줄링은 이제 기본적으로 선점형으로 동작합니다. cpu_slot_preemption 서버 설정을 참조하십시오. #94060 (Sergei Trifonov).
  • 손상된 파트를 방지하기 위해 인덱스 파일 이름을 이스케이프 처리합니다. 이 변경으로 인해 이전 버전에서 생성된 인덱스 중 이름에 ASCII 이외의 문자가 포함된 인덱스는 ClickHouse에서 로드되지 않습니다. 이를 처리하려면 MergeTree 설정 escape_index_filenames를 사용할 수 있습니다. #94079 (Raúl Marín).
  • 포맷 설정 exact_rows_before_limit, rows_before_aggregation, cross_to_inner_join_rewrite, regexp_dict_allow_hyperscan, regexp_dict_flag_case_insensitive, regexp_dict_flag_dotall, dictionary_use_async_executor는 이제 일반 설정(포맷 설정 아님)으로 변경되었습니다. 이는 순전히 내부적인 변경이므로, Iceberg, DeltaLake, Kafka, S3, S3Queue, Azure, Hive, RabbitMQ, Set, FileLog, NATS 테이블 엔진 정의에서 이러한 설정을 지정한 (드문) 경우를 제외하면 사용자에게 눈에 띄는 영향은 없습니다. 이러한 경우에는 이전까지는 이 설정들이 무시되었지만, 이제는 해당 정의에서 오류가 발생합니다. #94106 (Robert Schulze).
  • 이제 joinGet/joinGetOrNull 함수는 기반 Join 테이블의 SELECT 권한을 적용합니다. 이 변경 이후 joinGet('db.table', 'column', key)를 실행하려면 사용자는 Join 테이블에 정의된 키 컬럼과 조회하는 속성 컬럼 모두에 대해 SELECT 권한을 보유해야 합니다. 이러한 권한이 없는 쿼리는 ACCESS_DENIED와 함께 실패합니다. 마이그레이션하려면 전체 테이블 접근에는 GRANT SELECT ON db.join_table TO user를 사용하고, 컬럼 단위 접근에는 GRANT SELECT(key_col, attr_col) ON db.join_table TO user를 사용하여 필요한 권한을 부여하십시오. 이 변경은 이전에 명시적인 SELECT 권한 부여를 구성하지 않은 상태에서 joinGet/joinGetOrNull에 의존하던 모든 사용자와 애플리케이션에 영향을 줍니다. #94307 (Vladimir Cherkasov).
  • CREATE TABLE ... AS ... 쿼리에 대해 SHOW COLUMNS를 확인하도록 했습니다. 이전에는 SHOW TABLES를 확인했지만, 이런 유형의 권한 검사에는 올바르지 않은 grant입니다. #94556 (pufit).
  • Hash 출력 형식이 블록 크기에 영향을 받지 않도록 변경했습니다. #94503 (Alexey Milovidov). 이 변경으로 인해 이전 버전과 비교하면 출력 해시 값이 달라집니다.

새로운 기능

  • ClickHouse Keeper용 HTTP API 및 내장 웹 UI. #78181 (pufitspeeedmaster).
  • 이제 async insert 중복 제거가 의존하는 materialized view와도 함께 작동합니다. block_id 충돌이 발생하면 원래 block을 필터링하여 block_id와 연결된 행을 제거하고, 남은 행에는 관련된 모든 materialized view의 SELECT 쿼리가 적용되며, 그 결과 충돌하는 행이 제외된 원래 block이 다시 구성됩니다. #89140 (Sema Checherinda). materialized view가 포함된 경우 async inserts와 함께 중복 제거를 사용할 수 있습니다. #93957 (Sema Checherinda).
  • 프로젝션 인덱스 기능을 간소화하고 확장하기 위한 새로운 구문과 프레임워크를 도입했습니다. 이는 https://github.com/ClickHouse/ClickHouse/pull/81021의 후속 작업입니다. #91844 (Amos Bird).
  • Array 컬럼에 텍스트 인덱스 지원 추가. #89895 (Jimmy Aguilar Mena).
  • 기본적으로 use_variant_as_common_type가 활성화되어, Array 안, UNION 쿼리, 그리고 if/multiIf/case의 분기에서 서로 호환되지 않는 타입도 사용할 수 있습니다. #90677 (Alexey Milovidov).
  • 새 system table zookeeper_info. #88014을 구현했습니다. #90809 (Smita Kulkarni).
  • 모든 함수에서 Variant 유형을 지원하도록 했습니다. #90900 (Bharat Nallan).
  • 주로 버전 정보가 포함된 ClickHouse_Info 메트릭을 Prometheus /metrics 엔드포인트에 추가하여, 시간 경과에 따른 상세 버전 정보를 추적하는 차트를 만들 수 있게 했습니다. #91125 (Christoph Wurm).
  • 클러스터 구성을 변경할 수 있는 Keeper용 새 4문자 rcfg 명령을 도입했습니다. 이 명령은 표준 reconfigure 요청보다 더 폭넓게 구성을 변경할 수 있습니다. 이 명령은 json 문자열을 인수로 받습니다. TCP 인터페이스로 전송되는 전체 바이트 시퀀스는 다음과 같은 형식이어야 합니다: rcfg{json_string_length_big_endian}{json_string}. 명령 예시는 다음과 같습니다: {"preconditions": {"leaders": [1, 2], "members": [1, 2, 3, 4, 5]}, "actions": [{"transfer_leadership": [3]}, {"remove_members": [1, 2]}, {"set_priority": [{"id": 4, "priority": 100}, {"id": 5, "priority": 100}]}, {"transfer_leadership": [4, 5]}, {"set_priority": [{"id": 3, "priority": 0}]}]}. #91354 (alesapin).
  • 지정된 구분자를 기준으로 문자열을 나눈 부분 문자열들의 순서를 뒤집는 reverseBySeparator 함수를 추가했습니다. #91463를 해결했습니다. #91780 (Xuewei Wang).
  • 삽입되는 블록의 생성 방식을 더 세밀하게 제어할 수 있는 새로운 설정 max_insert_block_size_bytes를 추가했습니다. #92833 (Kirill Kopnev).
  • ignore_on_cluster_for_replicated_database 설정이 활성화되어 있으면 복제된 데이터베이스에서 ON CLUSTER 절을 사용해 DDL 쿼리를 실행할 수 있습니다. 이 경우 클러스터 이름은 무시됩니다. #92872 (Kirill).
  • mergeTreeAnalyzeIndexes 함수를 추가했습니다. #92954 (Azat Khuzhin).
  • 새로운 설정 use_primary_key를 추가했습니다. 기본 키(primary key) 기반 granule 프루닝을 비활성화하려면 false로 설정하십시오. #93319 (Nihal Z. Miaji).
  • icebergLocalCluster 테이블 함수가 추가되었습니다. #93323 (Anton Ivashkin).
  • 두 점 사이의 코사인 거리를 근사하는 cosineDistanceTransposed 함수가 추가되었습니다. #93621 (Raufs Dunamalijevs).
  • 각 데이터 파트에 포함된 파일 수를 보여주는 files 컬럼이 system.parts 테이블에 추가되었습니다. #94337 (Match).
  • 동시성 제어를 위한 max-min 공정 스케줄러를 추가했습니다. 많은 쿼리가 제한된 CPU 슬롯을 두고 경쟁하는 높은 과구독 상황에서 더 나은 공정성을 제공합니다. 짧게 실행되는 쿼리는 시간이 지남에 따라 더 많은 슬롯을 누적한 장시간 실행 쿼리 때문에 불이익을 받지 않습니다. concurrent_threads_scheduler 서버 설정을 max_min_fair 값으로 지정하면 활성화됩니다. #94732 (Sergei Trifonov).
  • ClickHouse client가 서버에 연결할 때 TLS SNI를 재정의할 수 있도록 하는 기능이 추가되었습니다. #89761 (Matt Klein).
  • joinGet 함수 호출에서 임시 테이블 지원이 추가되었습니다. #92973 (Eduard Karacharov).
  • DeltaLake 테이블 엔진이 삭제 벡터를 지원합니다. #93852 (Kseniia Sumarokova).
  • deltaLakeCluster에서 삭제 벡터를 지원합니다. #94365 (Kseniia Sumarokova).
  • 데이터 레이크용 Google Cloud Storage 지원. #93866 (Konstantin Vedernikov).

실험적 기능

성능 개선

  • 이제 use_skip_indexes_on_data_read 설정이 기본적으로 활성화되어 있습니다. 이 설정을 사용하면 읽는 동시에 스트리밍 방식으로 필터링할 수 있어 쿼리 성능과 시작 시간이 개선됩니다. #93407 (Shankar Iyer).
  • LowCardinality 컬럼에서 DISTINCT 성능을 개선했습니다. #5917을 해결했습니다. #91639 (Nihal Z. Miaji).
  • distinctJSONPaths 집계 함수가 전체 JSON 컬럼이 아니라 데이터 파트의 JSON 경로만 읽도록 최적화했습니다. #92196 (Pavel Kruglov).
  • 더 많은 필터가 조인까지 푸시다운되도록 개선되었습니다. #85556 (Nikita Taranov).
  • filter가 한쪽 입력만 사용할 때, 조인 ON 조건에서 더 많은 경우에 push down을 지원합니다. ANY, SEMI, ANTI 조인을 지원합니다. #92584 (Dmitry Novik).
  • 동등한 Set을 사용해 SEMI JOIN의 filter를 push down할 수 있게 했습니다. #85239을 해결했습니다. #92837 (Dmitry Novik).
  • 오른쪽이 비어 있으면 해시 조인의 왼쪽을 읽지 않습니다. 이전에는 비어 있지 않은 첫 번째 block이 나올 때까지 왼쪽을 읽었는데, 필터링이나 집계가 많은 경우 상당한 작업이 발생할 수 있었습니다. #94062 (Alexander Gololobov).
  • 쿼리 파이프라인 내부에서 데이터를 파티셔닝하는 데 “fastrange” (Daniel Lemire) 메서드를 사용합니다. 이를 통해 병렬 정렬과 조인이 개선될 수 있습니다. #93080 (Alexey Milovidov).
  • PARTITION BY가 정렬 키와 일치하거나 정렬 키의 접두사인 경우 윈도우 함수의 성능을 개선했습니다. #87299 (Nikita Taranov).
  • 외부 필터가 뷰까지 푸시다운되어 로컬 및 원격 노드에서 PREWHERE를 적용할 수 있습니다. #88189을 해결합니다. #88316 (Igor Nikonov).
  • 더 많은 함수에 JIT 컴파일을 적용합니다. #73509를 해결합니다. #88770 (Alexey Milovidov, Taiyang Li와 함께).
  • FINAL 쿼리에서 사용되는 스킵 인덱스가 프라이머리 키(primary key)를 구성하는 컬럼에 있는 경우, 다른 파트에서 프라이머리 키의 교집합을 확인하는 추가 단계는 불필요하므로 이제 수행하지 않습니다. #85897을 해결합니다. #93899 (Shankar Iyer).
  • 소수값 LIMITOFFSET의 성능과 메모리 사용량을 최적화했습니다. #91167 (Ahmed Gouda).
  • Parquet 리더 V3 프리페처가 더 빠른 랜덤 읽기 로직을 사용하도록 수정했습니다. #90890를 해결합니다. #91435 (Arsen Muk).
  • icebergCluster의 성능을 향상했습니다. #91462를 해결했습니다. #91537 (Yang Jiang).
  • 상수 필터에서는 가상 컬럼을 기준으로 필터링하지 않습니다. #91588 (c-end).
  • 적응형 쓰기 버퍼를 활성화해 열 수가 매우 많은 테이블에서 와이드 파트를 사용할 때 INSERT/머지의 메모리 사용량을 줄였습니다. 또한 암호화된 디스크에 대한 적응형 쓰기 버퍼 지원을 추가했습니다. #92250 (Azat Khuzhin).
  • 인덱스에서 검색하는 토큰 수를 줄여 text indexsparseGrams 토크나이저를 사용하는 전문 검색 성능을 개선했습니다. #93078 (Anton Popov).
  • 함수 isValidASCII는 참인 경우, 즉 입력 값이 모두 ASCII인 경우에 최적화되었습니다. #93347 (Robert Schulze).
  • 이제 read-in-order 최적화는 WHERE 조건 때문에 ORDER BY 컬럼이 상수로 고정되는 경우를 인식하여, 역순 읽기를 효율적으로 수행할 수 있습니다. 그 결과 WHERE tenant='42' ORDER BY tenant, event_time DESC와 같은 멀티 테넌트 쿼리는 전체 정렬 없이도 InReverseOrder를 사용할 수 있습니다.”. #94103 (matanper).
  • 메모리 사용량을 최적화하기 위해 값 매개변수를 ASTLiteral 자식 노드 대신 (string, integer) 쌍으로 저장하는 Enum AST 전용 클래스를 도입했습니다. #94178 (Ilya Yatsishin).
  • 여러 레플리카에서의 분산 인덱스 분석입니다. 공유 스토리지와 클러스터 내 대규모 데이터에 유용합니다. 이는 SharedMergeTree(ClickHouse Cloud)에 적용되며, 공유 스토리지를 사용하는 다른 유형의 MergeTree 테이블에도 적용될 수 있습니다. #86786 (Azat Khuzhin).
  • 다음 경우에는 join 런타임 필터를 비활성화하여 오버헤드를 줄였습니다: - 블룸 필터에서 설정된 비트 수가 너무 많은 경우 - 런타임에 걸러지는 행이 너무 적은 경우. #91578 (Alexander Gololobov).
  • 상관 서브쿼리 입력에 인메모리 버퍼를 사용해 중복 평가를 방지했습니다. #79890의 일부입니다. #91205 (Dmitry Novik).
  • 병렬 레플리카 읽기에서 모든 레플리카가 고아 상태의 range를 병렬로 가져갈 수 있도록 허용합니다. 이를 통해 부하 분산이 개선되고 롱테일 지연 시간이 줄어듭니다. #91374 (zoomxi).
  • 이제 외부 집계/정렬/조인이 모든 Context에서 쿼리 설정 temporary_files_codec을 따릅니다. grace hash join에서 누락되었던 프로필 이벤트를 수정했습니다. #92388 (Vladimir Cherkasov).
  • 집계/정렬 중 디스크 스필 시 쿼리 메모리 사용량 감지를 더욱 안정적으로 개선했습니다. #92500 (Azat Khuzhin).
  • 집계 키 컬럼의 총 행 수와 NDV(고유 값 개수) 통계를 추정합니다. #92812 (Alexander Gololobov).
  • simdcomp를 사용해 postings list 압축을 최적화했습니다. #92871 (Peng Jian).
  • 버킷을 활용해 S3Queue Ordered 모드 처리를 리팩터링했습니다. 이를 통해 성능도 개선되고 Keeper 요청 수도 줄어들 것으로 기대됩니다. #92889 (Kseniia Sumarokova).
  • 이제 mapContainsKeyLikemapContainsValueLike 함수는 각각 mapKeys() 또는 mapValues()에 대한 텍스트 인덱스를 활용할 수 있습니다. #93049 (Michael Jarrett).
  • Linux 이외의 시스템에서 메모리 사용량을 줄였습니다(jemalloc 더티 페이지의 즉시 퍼지를 활성화). #93360 (Eduard Karacharov).
  • dirty 페이지 크기와 max_server_memory_usage의 비율이 memory_worker_purge_dirty_pages_threshold_ratio를 초과하면 jemalloc 아레나를 강제로 정리합니다. #93500 (Eduard Karacharov).
  • AST의 메모리 사용량을 줄였습니다. #93601 (Nikolai Kochetov).
  • 일부 경우에는 테이블을 읽을 때 ClickHouse가 메모리 제한을 제대로 준수하지 않는 문제가 있었습니다. 이 동작은 수정되었습니다. #93715 (Nikita Mikhaylov).
  • 기본적으로 CHECK_STATTRY_REMOVE Keeper 확장 기능이 활성화됩니다. #93886 (Mikhail Artemenko).
  • Iceberg manifest 파일 항목에서 position delete에 해당하는 파일 이름의 하한 및 상한 경계를 파싱해, 해당 데이터 파일을 더 정확하게 선택할 수 있도록 개선했습니다. #93980 (Daniil Ivanik).
  • JSON 컬럼의 동적 서브컬럼 최대 개수를 제어하는 설정 2개를 추가했습니다. 첫 번째는 MergeTree 설정 merge_max_dynamic_subcolumns_in_compact_part이며(기존에 추가된 merge_max_dynamic_subcolumns_in_wide_part와 유사), Compact part로 머지하는 동안 생성되는 동적 서브컬럼 수를 제한합니다. 두 번째는 쿼리 수준 설정 max_dynamic_subcolumns_in_json_type_parsing으로, JSON 데이터를 파싱하는 동안 생성되는 동적 서브컬럼 수를 제한하며, 삽입 시 이 제한을 지정할 수 있게 합니다. #94184 (Pavel Kruglov).
  • 일부 경우 JSON 컬럼 스쿼싱을 약간 더 최적화했습니다. #94247 (Pavel Kruglov).
  • 실제 운영 경험을 바탕으로 스레드 풀 큐 크기를 줄였습니다. MergeTree에서 데이터를 읽기 전에 메모리 사용량을 명시적으로 확인하는 검사를 추가했습니다. #94692 (Nikita Mikhaylov).
  • CPU 기아 상황에서는 스케줄러가 MemoryWorker 스레드를 우선적으로 선택하도록 하여, ClickHouse 프로세스를 존립을 위협하는 상황으로부터 보호합니다. #94864 (Nikita Mikhaylov).
  • jemalloc 더티 페이지 정리를 MemoryWorker의 메인 스레드와 별도의 스레드에서 실행합니다. 정리가 느리면 RSS 사용량 업데이트가 지연되어 프로세스가 메모리 부족(OOM)으로 종료될 수 있습니다. 총 메모리 사용량 비율에 따라 더티 페이지 정리를 시작하는 새 설정 memory_worker_purge_total_memory_threshold_ratio를 추가했습니다. #94902 (Antonio Andelic).

개선 사항

  • 이제 Azure Blob Storage에서 system.blob_storage_log를 사용할 수 있습니다. #93105 (Alexey Milovidov).
  • Local 및 HDFS에 blob_storage_log를 구현했습니다. S3Queueblob_storage_log에 로깅할 때 디스크 이름이 아닌 다른 값을 사용하면 발생하던 오류를 수정했습니다. blob_storage_logerror_code 컬럼을 추가했습니다. 로컬 테스트를 단순화하기 위해 테스트 설정 파일을 분리했습니다. #93106 (Alexey Milovidov).
  • clickhouse-clientclickhouse-local은 입력 중 숫자 리터럴 내 자릿수 그룹(천, 백만 등)을 강조 표시합니다. 이로써 #93100이 해결되었습니다. #93108 (Alexey Milovidov).
  • clickhouse-client에서 등호 기호 앞뒤에 공백이 있는 명령줄 인수를 지원하도록 추가했습니다. #93077를 해결했습니다. #93174 (Cole Smith).
  • <interactive_history_legacy_keymap>true</interactive_history_legacy_keymap>를 사용하면 이제 CLI 클라이언트가 이전처럼 일반 검색 시 Ctrl-R로 돌아가고, Ctrl-T는 퍼지 검색을 수행할 수 있습니다. #87785 (Larry Snizek).
  • 캐시를 지우는 구문 SYSTEM DROP [...] CACHE는 이 구문이 캐시를 비활성화하는 것처럼 오해하게 만들었습니다. 이제 ClickHouse는 더 의미가 분명한 구문인 SYSTEM CLEAR [...] CACHE를 지원합니다. 기존 구문도 계속 사용할 수 있습니다. #93727 (Pranav Tiwari).
  • EmbeddedRocksDB에서 여러 컬럼을 기본 키(primary key)로 지원합니다. 관련 이슈 #32819를 해결했습니다. #33917 (usurai).
  • 이제 스칼라 값에 대해 비상수 IN을 사용할 수 있습니다(val1 NOT IN if(cond, val2, val3)와 같은 쿼리). #93495 (Yarik Briukhovetskyi).
  • 지원되지 않으므로 x-amz-server-side-encryption 헤더가 HeadObject, UploadPart & CompleteMultipartUpload S3 요청으로 전달되지 않도록 방지합니다. #64577 (Francisco J. Jurado Moreno).
  • S3Queue의 ordered mode에서 Hive 파티셔닝 추적을 지원합니다. #71161을 해결합니다. #81040 (Anton Ivashkin).
  • 파일 시스템 캐시의 공간 예약을 최적화합니다. FileCache::collectCandidatesForEviction는 배타 잠금 없이 실행됩니다. #82764 (Kseniia Sumarokova).
  • 서버 로그에 대해 복합 로테이션 전략(크기 + 시간)을 지원합니다. #87620 (Jianmei Zhang).
  • 이제 CLI 클라이언트에서는 명령줄 옵션 --no-warnings 대신 <warnings>false</warnings>를 지정할 수 있습니다. #87783 (Larry Snizek).
  • Date, DateTime, Time 값을 인수로 사용하는 avg 집계 함수 지원이 추가되었습니다. #82267이 해결되었습니다. #87845 (Yarik Briukhovetskyi).
  • 최적화 use_join_disjunctions_push_down은 기본적으로 활성화되어 있습니다. #89313 (Alexey Milovidov).
  • 상관 서브쿼리에서 더 많은 테이블 엔진과 데이터 소스 유형을 지원합니다. #80775를 해결합니다. #90175 (Dmitry Novik).
  • 매개변수화된 뷰의 스키마를 명시적으로 지정한 경우 해당 스키마가 표시됩니다. #88875, #81385가 해결되었습니다. #90220 (Grigorii Sokolik).
  • 로그가 마지막으로 커밋된 인덱스 이전에 있는 경우 Keeper 로그 항목의 누락 구간을 올바르게 처리합니다. #90403 (Antonio Andelic).
  • JBOD 볼륨에서 min_free_disk_bytes_to_perform_insert 설정이 제대로 작동하도록 개선했습니다. #90878 (Aleksandr Musorin).
  • S3 테이블 엔진과 s3 테이블 함수용 이름이 지정된 컬렉션에서 storage_class_name 설정을 지정할 수 있게 했습니다. #91926 (János Benjamin Antal).
  • system.zookeeper를 통해 보조 ZooKeeper에 삽입하는 기능을 지원합니다. #92092 (RinChanNOW).
  • Keeper에 KeeperChangelogWrittenBytes, KeeperChangelogFileSyncMicroseconds, KeeperSnapshotWrittenBytes, KeeperSnapshotFileSyncMicroseconds profile events와 KeeperBatchSizeElements, KeeperBatchSizeBytes 히스토그램 메트릭이 새로 추가되었습니다. #92149 (Miсhael Stetsyuk).
  • 새로운 설정 trace_profile_events_list를 추가했습니다. 이 설정은 trace_profile_event를 사용하는 tracing을 지정된 이벤트 이름 목록으로 제한합니다. 이를 통해 대규모 workload에서 데이터를 더욱 정밀하게 수집할 수 있습니다. #92298 (Alexey Milovidov).
  • 일시 중지 가능한 failpoint용 SYSTEM NOTIFY FAILPOINT를 지원합니다. - SYSTEM WAIT FAILPOINT fp PAUSE/RESUME를 지원합니다. #92368 (Shaohua Wang).
  • system.data_skipping_indicescreation(implicit/explicit) 컬럼이 추가되었습니다. #92378 (Raúl Marín).
  • YTsaurus dyn 테이블의 컬럼 설명을 딕셔너리 소스에 전달할 수 있도록 했습니다. #92391 (MikhailBurdukov).
  • #63985에서는 포트별로 TLS 구성에 필요한 모든 매개변수를 지정할 수 있게 했습니다(composable protocols 참조). 따라서 더 이상 전역 TLS 구성에 의존할 필요가 없습니다. 하지만 현재 구현에서는 여전히 전역 openSSL.server 구성 섹션이 암묵적으로 필요하며, 이로 인해 포트마다 서로 다른 TLS 구성이 필요한 환경과 충돌합니다. 예를 들어 keeper-in-server 배포에서는 inter-keeper 통신과 clickhouse client 연결에 대해 각각 별도의 TLS 구성이 필요합니다. #92457 (Miсhael Stetsyuk).
  • 악의적인 페이로드를 방지하기 위해 바이너리 형식에서 디코딩할 수 있는 전체 타입 노드 수를 제한하는 새로운 설정 input_format_binary_max_type_complexity를 도입했습니다. #92519 (Raufs Dunamalijevs).
  • 실행 중인 작업이 system.background_schedule_pool{,_log}에 반영되도록 했습니다. 문서를 추가했습니다. #92587 (Azat Khuzhin).
  • 클라이언트에서 Ctrl+R로 검색할 때 일치하는 이력이 없으면 현재 쿼리를 실행합니다. #92749 (Azat Khuzhin).
  • EXPLAIN indices = 1EXPLAIN indexes = 1의 별칭(alias)으로 지원합니다. #92483를 해결합니다. #92774 (Pranav Tiwari).
  • 이제 Parquet 리더에서 Tuple 또는 맵 컬럼을 JSON으로 읽을 수 있습니다. 즉, f.parquet에서 컬럼 x의 타입이 tuple 또는 map이어도 select x from file(f.parquet, auto, 'x JSON')가 정상적으로 작동합니다. #92864 (Michael Kolupaev).
  • Parquet 리더에서 빈 튜플을 지원하도록 개선했습니다. #92868 (Michael Kolupaev).
  • Azure Blob Storage에서 네이티브 복사가 BadRequest(예: 잘못된 블록 목록)로 실패할 경우 읽기-쓰기 복사로 폴백합니다. 이전에는 blob을 서로 다른 스토리지 계정으로 복사할 때 발생하는 인증되지 않음 오류에 대해서만 이렇게 처리했습니다. 하지만 “지정된 블록 목록이 잘못되었습니다” 오류도 간헐적으로 발생합니다. 이에 따라 이제 모든 네이티브 복사 실패 시 읽기 & 쓰기 방식으로 폴백하도록 조건을 업데이트했습니다. #92888 (Smita Kulkarni).
  • EC2 인스턴스 프로필 자격 증명을 사용해 동시에 많은 S3 쿼리를 실행할 때 발생하던 EC2 메타데이터 엔드포인트 스로틀링 문제를 수정했습니다. 이전에는 각 쿼리가 자체 AWSInstanceProfileCredentialsProvider를 생성해 EC2 메타데이터 서비스로 동시 요청을 보내면서 타임아웃 및 HTTP response code: 403 오류가 발생할 수 있었습니다. 이제 자격 증명 공급자는 캐시되어 모든 쿼리에서 공유됩니다. #92891 (Sav).
  • 하위 호환성을 유지할 수 있도록 insert_select_deduplicate 설정을 개선했습니다. #92951 (Sema Checherinda).
  • 작업 로그가 지나치게 많이 기록되는 것을 방지하기 위해 평균보다 느린 백그라운드 작업만 로그에 기록합니다 (background_schedule_pool_log.duration_threshold_milliseconds=30). #92965 (Azat Khuzhin).
  • 이전 버전에서는 일부 C++ 함수 이름이 system.trace_logsystem.symbols에 잘못(“mangled”) 표시되었고, demangle 함수도 이를 제대로 처리하지 못했습니다. #93074를 해결했습니다. #93075 (Alexey Milovidov).
  • 갱신 가능 구체화 뷰를 백업에서 제외할 수 있도록 backup_data_from_refreshable_materialized_view_targets 백업 설정을 도입했습니다. 항상 백업되는 APPEND 갱신 전략의 RMV는 예외입니다. #93076 (Julia Kartseva). #93658 (Julia Kartseva)
  • 함수처럼 처리가 무거운 번역 단위에는 디버그 정보를 전혀 사용하지 않는 대신 최소한의 디버그 정보를 사용합니다. #93079 (Alexey Milovidov).
  • MinIO 전용 오류에 대한 오류 코드 매핑을 구현하여 AWS S3 C++ SDK에 MinIO 호환성 지원을 추가했습니다. 이 변경으로 AWS S3 대신 MinIO 배포를 사용할 때 ClickHouse가 MinIO 서버 오류를 올바르게 처리하고 재시도할 수 있게 되어, 자체 호스팅 MinIO 클러스터에서 객체 스토리지를 운영하는 사용자의 신뢰성이 향상됩니다. #93082 (XiaoBinMu).
  • 심볼화된 jemalloc 프로파일을 기록합니다(힙 프로파일 생성 시 바이너리가 필요 없도록). #93099 (Azat Khuzhin).
  • 대규모 커밋과 잘못된 커밋에서 동작하지 않던 clickhouse git-import 도구를 다시 사용할 수 있게 했습니다. https://presentations.clickhouse.com/2020-matemarketing/ 를 참조하십시오. #93202 (Alexey Milovidov).
  • URL 스토리지 비밀번호를 쿼리 로그에 표시하지 않습니다. #93245 (Konstantin Vedernikov).
  • flipCoordinatesGeometry 유형 지원을 추가했습니다. #93303 (Bharat Nallan).
  • SYSTEM INSTRUMENT ADD/REMOVE의 UX 개선: 함수 이름에 String 리터럴을 사용하고, 일치하는 모든 함수에 패치를 적용하며, REMOVE에서 function_name을 사용할 수 있도록 했습니다. #93345 (Pablo Marcos).
  • 머지 과정에서 통계 구체화를 활성화하거나 비활성화하는 새로운 설정 materialize_statistics_on_merge를 추가했습니다. 기본값은 1입니다. #93379 (Han Fei).
  • 이제 ClickHouse는 DESCRIBE SELECT 쿼리에서 괄호 없이도 SELECT를 파싱할 수 있습니다. #58382를 해결했습니다. #93429 (Yarik Briukhovetskyi).
  • 확률에 따라 캐시 정확성 검사를 무작위로 수행하도록 추가했습니다. #93439 (Kseniia Sumarokova).
  • JSON에서 하나는 리터럴이고 다른 하나는 중첩 객체인 중복 경로를 허용하기 위해 type_json_allow_duplicated_key_with_literal_and_nested_object 설정이 추가되었습니다. 예: {"a" : 42, "a" : {"b" : 42}}. 중복 경로에 대한 이 제한이 https://github.com/ClickHouse/ClickHouse/pull/79317 에 추가되기 전에 일부 데이터가 생성되었을 수 있으며, 이제 이러한 데이터를 추가로 처리하면 오류가 발생할 수 있습니다. 이 설정을 사용하면 이러한 기존 데이터도 오류 없이 계속 사용할 수 있습니다. #93604 (Pavel Kruglov).
  • Pretty JSON에서 단순 타입 값은 별도 줄에 출력하지 않도록 했습니다. #93836 (Pavel Kruglov).
  • alter table ... modify setting ... SQL 문이 많으면 5초 동안 잠금을 획득하지 못할 수 있습니다. 이 경우 logical error 대신 timeout을 반환하는 편이 더 낫습니다. #93856 (Han Fei).
  • 구문 오류 발생 시 과도한 출력이 나오지 않도록 했습니다. 이 변경 전에는 전체 SQL 스크립트를 출력했는데, 여기에는 많은 쿼리가 포함될 수 있었습니다. #93876 (Alexey Milovidov).
  • Keeper에서 통계가 포함된 check 요청의 바이트 크기를 올바르게 계산하도록 수정했습니다. #93907 (Mikhail Artemenko).
  • 조인 재정렬 시 런타임 해시 테이블 크기 통계를 사용할지 제어하는 use_hash_table_stats_for_join_reordering 설정이 추가되었습니다. 이 설정은 기본적으로 활성화되어 있어 collect_hash_table_stats_during_joins의 기존 동작을 유지합니다. #93912 (Vladimir Cherkasov).
  • 이제 system.server_settings 테이블에서 중첩된 전역 서버 설정(예: logger.level)을 일부 확인할 수 있습니다. 이는 고정된 구조를 가진 설정에만 해당합니다(목록, 열거형, 반복 등은 제외). #94001 (Hechem Selmi).
  • 이제 QBit에 대해 동등 비교를 수행할 수 있습니다. #94078 (Raufs Dunamalijevs).
  • Keeper가 손상된 스냅샷 또는 일관되지 않은 변경 로그를 감지하면, 수동으로 중단하거나 파일을 자동으로 정리하는 대신 예외를 발생시킵니다. 이렇게 하면 Keeper가 수동 개입에 의존하는 더 안전한 방식으로 동작하게 됩니다. #94168 (Antonio Andelic).
  • CREATE TABLE 실패 시 남을 수 있는 잔여물 문제를 수정했습니다. #94174 (Azat Khuzhin).
  • 암호로 보호된 TLS 개인 키를 사용할 때 발생하는 초기화되지 않은 메모리 접근 문제(OpenSSL 버그)를 수정했습니다. #94182 (Konstantin Bogdanov).
  • chdig를 v26.1.1로 업데이트했습니다. #94290 (Azat Khuzhin).
  • S3Queue ordered mode에서 더 범용적인 파티셔닝을 지원합니다. #94321 (Bharat Nallan).
  • 설정 allow_statistics_optimize의 별칭으로 use_statistics가 추가되었습니다. 이는 기존 설정 use_primary_key, use_skip_indexes와의 일관성을 높입니다. #94366 (Robert Schulze).
  • 요소의 존재 여부를 확인할 수 있도록 Numbers에서 Enums로 변환할 때 input_format_numbers_enum_on_conversion_error 설정을 활성화했습니다. #94384 (Elmi Ahmadov).
  • S3(Azure)Queue ordered mode에서 추적 한도를 기준으로 실패한 노드를 정리하도록 개선했습니다(이전에는 실패한 항목과 처리된 항목 모두에 대해 Unordered mode에서만 정리했지만, 이제는 Ordered mode에서도 실패한 노드에 한해 정리합니다). #94412 (Kseniia Sumarokova).
  • clickhouse-local에서 default 사용자의 액세스 관리를 활성화했습니다. clickhouse-local의 기본 사용자에게 access&#95;management 권한이 없어, 제한이 없어야 하는 사용자임에도 DROP ROW POLICY IF EXISTS 같은 작업이 ACCESS_DENIED 오류와 함께 실패했습니다. #94501 (Alexey Milovidov).
  • YTsaurus 딕셔너리 및 테이블에서 명명된 컬렉션을 사용할 수 있도록 합니다. #94582 (MikhailBurdukov).
  • S3 및 Azure Blob Storage용 BACKUP/RESTORE에서 SQL로 정의된 이름이 지정된 컬렉션을 지원하도록 했습니다. #94604를 해결했습니다. #94605 (Pablo Marcos).
  • S3Queue의 ordered 모드에서 파티션 키 기반 버킷팅을 지원합니다. #94698 (Bharat Nallan).
  • 가장 오래 실행 중인 머지의 경과 시간을 나타내는 비동기 메트릭을 추가했습니다. #94825 (Raúl Marín).
  • IcebergBitmapPositionDeleteTransform을 사용해 position delete를 적용하기 전에 대상 파일을 확인하는 절차를 추가했습니다. #94897 (Yang Jiang).
  • 이제 view_duration_ms는 그룹이 활성 상태였던 시간을 표시하며, 그 안에 있는 스레드 실행 시간의 합계는 표시하지 않습니다. #94966 (Sema Checherinda).
  • hasAnyTokenshasAllTokens 함수에서 최대 검색 토큰 수 제한을 제거했습니다. 기존에는 64개로 제한되어 있었습니다. 예시: SELECT count() FROM table WHERE hasAllTokens(text, ['token_1', 'token_2', [...], 'token_65']]); 검색 토큰이 65개이므로 이 쿼리는 BAD_ARGUMENTS 오류를 발생시켰습니다. 이 PR에서는 해당 제한이 완전히 제거되어 동일한 쿼리가 오류 없이 실행됩니다. #95152 (Elmi Ahmadov).
  • Numbers에서 Enum으로 변환할 때 요소의 존재 여부를 확인할 수 있는 설정 input_format_numbers_enum_on_conversion_error를 추가했습니다. 해결: #56144. #56240 (Nikolay Degterinsky).
  • 메모리 할당을 줄이기 위해 Iceberg 테이블에서 데이터 파일과 포지션 삭제 파일을 읽는 과정에 포맷 파서 리소스를 공유하도록 개선했습니다. #94701 (Yang Jiang).

버그 수정(공식 안정 릴리스에서 사용자에게 영향을 주는 오동작)

  • 미리 정의된 쿼리 핸들러에서 삽입 중 후행 공백이 데이터로 해석되던 버그를 수정했습니다. #83604 (Fabian Ponce).
  • Join storage에서 outer to inner join optimization이 적용될 때 발생하던 INCOMPATIBLE_TYPE_OF_JOIN 오류를 수정했습니다. #80794를 해결합니다. #84292 (Vladimir Cherkasov).
  • allow_experimental_join_right_table_sorting이 활성화된 상태에서 해시 조인을 사용할 때 발생하는 “Invalid number of rows in Chunk” 예외를 수정했습니다. #86440 (yanglongwei).
  • 파일 시스템이 대소문자를 구분하지 않으면 MergeTree에서 파일 이름을 항상 hash로 대체합니다. 이전에는 대소문자를 구분하지 않는 파일 시스템(MacOS 등)을 사용하는 시스템에서 여러 컬럼/하위 컬럼 이름이 대소문자만 다른 경우 데이터 손상이 발생할 수 있었습니다. #86559 (Pavel Kruglov).
  • materialized view 내부의 기반 쿼리에 대해 생성 단계에서 전체 권한 검사를 수행하도록 추가합니다. #89180 (pufit).
  • 상수 인수에서 발생하던 icebergHash 함수 충돌 문제를 수정했습니다. #90335 (Michael Kolupaev).
  • 트랜잭션 없이 실행된 mutation이 최종적으로 롤백되는 활성 트랜잭션의 파트를 변경할 때 발생하던 논리 오류를 수정했습니다. #90469 (Shaohua Wang).
  • 일반 데이터베이스를 atomic 데이터베이스로 변환한 후 system.warnings가 올바르게 갱신되도록 수정했습니다. #90473 (sdk2).
  • Parquet 파일을 읽을 때 prewhere 표현식의 일부가 쿼리의 다른 부분에서도 사용되는 경우 발생하던 assertion을 수정했습니다. #90635 (Max Kainov).
  • split-by-buckets 모드에서 Iceberg를 읽을 때 단일 노드 cluster에서 발생하던 충돌을 수정했습니다. 이 수정으로 #90913이 해결되었습니다. #91553 (Konstantin Vedernikov).
  • 서브컬럼 읽기 중 Log 엔진에서 발생할 수 있는 논리 오류를 수정했습니다. #91710을 해결합니다. #91711 (Pavel Kruglov).
  • 논리 오류 수정: ATTACH AS REPLICATED 중 ‘Storage does not support transaction’ 오류. #91772 (Shaohua Wang).
  • LEFT ANTI JOIN에 추가 사후 조건이 있을 때 런타임 필터가 잘못 동작하던 문제를 수정했습니다. #91824 (Alexander Gololobov).
  • Nothing 타입이 포함된 null-safe 비교에서 발생하는 오류를 수정합니다. #91834를 해결합니다. #84870를 해결합니다. #91821를 해결합니다. #91884 (Yarik Briukhovetskyi).
  • 네이티브 Parquet 리더에서 매우 반복적인 문자열 데이터에 영향을 주는 DELTA_BYTE_ARRAY 디코딩 버그를 수정했습니다. #91929 (Daniel Muino).
  • 스키마 추론 중 글롭 패턴에서는 모든 파일이 아니라, 스키마가 추론된 해당 파일에 대해서만 스키마를 캐시합니다. #91745를 해결합니다. #92006 (Pavel Kruglov).
  • 잘못된 아카이브 항목 크기 헤더로 인해 발생하던 Couldn't pack tar archive: Failed to write all bytes 오류를 수정했습니다. #89075를 해결합니다. #92122 (Julia Kartseva).
  • insert select에서 HTTP connection이 닫히지 않도록 요청 stream을 해제합니다. #92175 (Sema Checherinda).
  • 여러 조인과 USING 절, join_use_nulls를 사용하는 쿼리에서 발생하는 논리 오류를 수정했습니다. #92251 (Vladimir Cherkasov).
  • join_use_nulls를 사용하는 join 재정렬 과정에서 발생하던 논리 오류를 수정하고, https://github.com/clickhouse/clickhouse/issues/90795를 종료했습니다. #92289 (Vladimir Cherkasov).
  • negate 리터럴이 포함된 arrayElement의 일관되지 않은 AST 포맷팅을 수정했습니다. 해결 #92288 해결 #92212 해결 #91832 해결 #91789 해결 #91735 해결 #88495 해결 #92386. #92293 (Pavel Kruglov).
  • join_on_disk_max_files_to_merge 설정에서 발생할 수 있는 충돌을 수정했습니다. #92335 (Bharat Nallan).
  • 관련 이슈: #https://github.com/ClickHouse/support-escalation/issues/6365. #92339 (Tuan Pham Anh).
  • SYSTEM SYNC FILE CACHE의 누락된 접근 권한 검사를 수정했습니다. #92101을 해결합니다. #92372 (Kseniia Sumarokova).
  • 윈도 함수와 여러 인수에 적용되는 count_distinct_optimization 패스를 수정했습니다. #92376 (Raúl Marín).
  • 특정 집계 함수를 윈도우 함수와 함께 사용할 때 발생하는 “finalized buffer에 쓸 수 없음” 오류를 수정했습니다. #91415를 해결합니다. #92395 (Jimmy Aguilar Mena).
  • CREATE TABLE ... AS urlCluster() 및 데이터베이스 엔진 Replicated와 관련된 논리적 오류를 수정했습니다. #92216을 해결했습니다. #92418 (Kseniia Sumarokova).
  • MergeTree에서 mutation 수행 중 원본 part의 serialization 정보 설정을 상속하도록 했습니다. 이로써 데이터 타입 serialization이 변경된 후 mutation된 part에 대한 쿼리에서 잘못된 결과가 나올 수 있던 문제를 해결했습니다. #92419 (Pavel Kruglov).
  • 같은 이름의 컬럼과 서브컬럼 간에 발생할 수 있는 충돌을 수정하여, 잘못된 직렬화가 사용되거나 쿼리가 실패하는 문제를 해결했습니다. #90219을 종료합니다. #85161을 종료합니다. #92453 (Pavel Kruglov).
  • 외부 조인을 내부 조인으로 변환할 때 쿼리 계획(query plan)이 원치 않게 변경되어 발생하던 LOGICAL_ERROR를 수정했습니다. 또한 조인 중 집계 키에 단사 함수가 적용되는 경우에도 이 최적화를 적용할 수 있도록 최적화 요건을 완화했습니다. #92503 (János Benjamin Antal).
  • 빈 튜플 컬럼을 정렬할 때 발생할 수 있는 오류 SIZES_OF_COLUMNS_DOESNT_MATCH를 수정했습니다. #92422를 해결합니다. #92520 (Pavel Kruglov).
  • JSON 타입에서 호환되지 않는 타입 지정 경로가 있는지 확인합니다. #91577을 해결했습니다. #92539 (Pavel Kruglov).
  • Backup 데이터베이스의 SHOW CREATE DATABASE에서 발생하던 교착 상태를 수정했습니다. #92541 (Azat Khuzhin).
  • hypothesis 인덱스를 검증할 때 적절한 오류 코드를 사용합니다. #92559 (Raúl Marín).
  • 분석기에서 컬럼 별칭 내 동적 서브컬럼 해상도 문제를 수정했습니다. 이전에는 컬럼 별칭의 동적 서브컬럼이 getSubcolumn으로 감싸져 있었고, 경우에 따라 아예 해상되지 않을 수 있었습니다. #91434를 해결합니다. #92583 (Pavel Kruglov).
  • 두 번째 인수가 NULL일 때 tokens()에서 발생할 수 있는 충돌을 방지합니다. #92586 (Raúl Marín).
  • 기반 const PREWHERE 컬럼을 제자리에서 수정하면서 발생할 수 있는 잠재적 비정상 종료 문제를 수정했습니다. 이 문제는 컬럼을 축소(IColumn::shrinkToFit)하거나 필터링(IColumn::filter)할 때 발생할 수 있었으며, 여러 스레드에서 동시에 트리거될 수 있었습니다. #92588 (Arsen Muk).
  • 대용량 파트(4,294,967,295개 행 초과)를 포함한 테이블에서는 텍스트 인덱스를 생성하거나 구체화하는 기능이 일시적으로 비활성화되었습니다. 현재 인덱스 구현은 아직 이처럼 큰 파트를 지원하지 않으므로, 이 제한은 잘못된 쿼리 결과를 방지합니다. #92644 (Anton Popov).
  • JOIN 실행 중 발생하는 논리적 오류 Too large size (A) passed to allocator를 수정했습니다. #92043를 해결합니다. #92667 (Yarik Briukhovetskyi).
  • ngram 길이(첫 번째 매개변수)가 8보다 큰 ngrambf_v1 인덱스에서 예외가 발생하던 버그를 수정했습니다. #92672 (Robert Schulze).
  • zookeeper storage를 사용할 때 백그라운드에서 이름이 지정된 컬렉션을 다시 로드하는 과정에서 발생하던 처리되지 않은 예외를 수정했습니다. https://github.com/ClickHouse/clickhouse-private/issues/44180 를 해결합니다. #92717 (Kseniia Sumarokova).
  • 와일드카드 권한 부여에 대한 접근 권한 검사 로직의 오류를 수정했습니다. 이전 시도인 https://github.com/ClickHouse/ClickHouse/pull/90928에서는 심각한 취약점을 해결했지만, 지나치게 제한적으로 적용되는 바람에 관련 없는 권한 취소로 인해 일부 와일드카드 GRANT SQL 문이 실패했습니다. #92725 (pufit).
  • WHERE에서 not match(...)를 사용할 때 데이터 스키핑 로직에 버그가 있어 잘못된 결과가 발생하던 문제를 수정했습니다. #92492를 닫습니다. #92726 (Nihal Z. Miaji).
  • 읽기 전용 디스크에 MergeTree 테이블이 생성된 경우, 시작 시 임시 디렉터리 삭제를 시도하지 않도록 했습니다. #92748 (Alexey Milovidov).
  • ALTER TABLE REWRITE PARTS (v2)에서 발생하던 “빈 ExpressionActionsChain에 action을 추가할 수 없음” 오류를 수정했습니다. #92754 (Azat Khuzhin).
  • 연결이 끊긴 Connection에서 읽을 때 발생하는 비정상 종료를 방지합니다. #92807 (Raufs Dunamalijevs).
  • Ordered 모드의 S3Queue 스토리지에서 발생하던 논리 오류 Failed to set file processing within 100 retries를 수정했습니다. 이제 이 오류는 경고로 대체되었습니다. 이 오류는 Keeper 세션이 만료되면 25.10 버전 이전에 발생할 수 있었지만, Ordered 모드에서 처리 동시성이 높을 경우 이론적으로는 여전히 발생할 수 있으므로 25.10+ 버전에서도 경고로 유지됩니다. #92814 (Kseniia Sumarokova).
  • 이전에는 조건이 false인 PK 세그먼트 분할을 사용하는 일부 쿼리가 실패했습니다. 이제는 더 이상 실패하지 않습니다. https://github.com/ClickHouse/ClickHouse/pull/89313에 필요합니다. #92815 (Yarik Briukhovetskyi).
  • system.parts 테이블에서 텍스트 인덱스의 압축되지 않은 크기 계산을 바로잡았습니다. #92832 (Anton Popov).
  • WHERE 절 프레디케이트에 서브쿼리가 있는 IN 절을 포함한 경량 업데이트에서 프라이머리 인덱스 사용을 수정했습니다. #92838 (Anton Popov).
  • JSON에서 경로 ‘skip’의 타입 힌트 생성 문제를 수정했습니다. #92731을 해결합니다. #92842 (Pavel Kruglov).
  • S3 테이블 엔진에서는 비결정적 함수가 있는 경우 파티션 키를 캐시하지 않아야 합니다. #92844 (Miсhael Stetsyuk).
  • ratio_of_defaults_for_sparse_serialization=0.0에서 희소 컬럼에 mutation을 수행한 후 발생할 수 있는 FILE_DOESNT_EXIST 오류를 수정했습니다. #92633를 해결합니다. #92860 (Pavel Kruglov).
  • 기존 Parquet 리더(기본적으로 사용되지 않음)에서 JSON 컬럼이 튜플 컬럼 뒤에 오는 경우의 Parquet 스키마 추론 문제를 수정했습니다. 빈 튜플에서 실패하던 기존 Parquet 리더(기본적으로 사용되지 않음) 문제를 수정했습니다. #92867 (Michael Kolupaev).
  • 상수 조건과 join_use_nulls를 사용하는 여러 조인에서 발생하는 논리 오류를 수정하고 #92640을 해결했습니다. #92892 (Vladimir Cherkasov).
  • 파티션 표현식에 하위 컬럼이 포함된 테이블에 삽입할 때 발생할 수 있는 오류 NOT_FOUND_COLUMN_IN_BLOCK를 수정했습니다. #93210을 닫습니다. #83406을 닫습니다. #92905 (Pavel Kruglov).
  • 별칭이 있는 테이블에 대한 Merge engine에서 NO_SUCH_COLUMN_IN_TABLE 오류를 수정했습니다. #88665를 해결합니다. #92910 (Pavel Kruglov).
  • LowCardinality(Nullable(T)) 컬럼에서 full_sorting_join의 NULL != NULL 문제를 수정했습니다. #92924 (Vladimir Cherkasov).
  • MergeTree 테이블에서 텍스트 인덱스를 머지하는 동안 발생하던 여러 크래시를 수정했습니다. #92925 (Anton Popov).
  • 테이블 최적화 중 예외를 방지하기 위해, TTL 집계 시 필요한 경우 SET 표현식 결과에 LowCardinality 래퍼를 복원합니다. #92971 (Seva Potapov).
  • 빈 배열을 has 함수에 사용할 때 인덱스 분석 중 발생하던 논리 오류를 수정했습니다. #92906을 해결합니다. #92995 (Nihal Z. Miaji).
  • 종료 중인 백그라운드 스케줄 풀에서 발생할 수 있는 멈춤 현상을 수정했습니다(종료 시 server가 멈출 수 있음). #93008 (Azat Khuzhin).
  • ALTER를 통해 ratio_of_defaults_for_sparse_serialization 설정을 1.0으로 변경한 뒤 희소 컬럼 mutation 중 발생할 수 있는 FILE_DOESNT_EXIST 오류를 수정했습니다. #93016 (Pavel Kruglov).
  • WHERE에서 not materialize(...) 또는 not CAST(...)를 사용할 때 데이터 스키핑 로직에 발생하던 버그를 수정해 잘못된 결과가 반환되던 문제를 해결했습니다. #88536을 닫습니다. #93017 (Nihal Z. Miaji).
  • 공유 파트에서 TOCTOU 경쟁 상태로 인해 오래된 파트가 사용될 수 있던 문제를 수정했습니다. #93022 (Azat Khuzhin).
  • 범위를 벗어난 오프셋을 포함한 잘못된 groupConcat 집계 상태를 역직렬화할 때 발생하는 충돌을 수정했습니다. #93028 (Raufs Dunamalijevs).
  • 분산 쿼리를 사전 취소한 뒤 연결이 손상된 상태로 남는 문제를 수정했습니다. #93029 (Azat Khuzhin).
  • 오른쪽 조인 키가 희소 컬럼인 경우 JOIN 결과가 올바르게 나오도록 수정했습니다. 이 변경으로 #92920를 해결합니다. 이 버그는 set compatibility='23.3'에서만 재현됩니다. 백포트해야 할지는 확실하지 않습니다. #93038 (Amos Bird).
  • estimateCompressionRatio()에서 발생할 수 있는 Cannot finalize buffer after cancellation 문제를 해결했습니다. 수정 사항: #87380. #93068 (Azat Khuzhin).
  • 복잡한 표현식(예: concat(col1, col2))을 기반으로 생성된 텍스트 인덱스가 머지될 때 발생하던 문제를 수정했습니다. #93073 (Anton Popov).
  • 필터에 서브컬럼이 포함된 경우에도 프로젝션이 적용되도록 수정했습니다. #92882를 해결했습니다. #93141 (Pavel Kruglov).
  • JOIN 런타임 필터가 쿼리 계획에 추가될 때 일부 경우에 발생하던 논리 오류를 수정했습니다. 이 문제는 JOIN 한쪽에서 중복된 const 컬럼을 잘못 반환해 발생했습니다. #93144 (Alexander Gololobov).
  • JOIN 런타임 필터에서 사용하는 특수 함수 __applyFilter가 일부 정상적인 경우에도 ILLEGAL_TYPE_OF_ARGUMENT를 반환하던 문제가 있었습니다. #93187 (Alexander Gololobov).
  • 보간된 컬럼이 사실상 동일한 컬럼의 별칭인 경우, 블록에서 서로 다른 보간된 컬럼이 하나의 동일한 컬럼으로 합쳐지는 현상을 방지했습니다. #93197 (Yakov Olkhovskiy).
  • 이미 채워진 오른쪽 테이블과 join할 때는 런타임 필터를 추가하지 않도록 했습니다. #93211 (Alexander Gololobov).
  • 비정상 종료된 session 이후 Keeper 영구 watch 정리 문제를 수정했습니다. 이로써 #92480가 해결됩니다. #93213 (Konstantin Vedernikov).
  • Iceberg의 ORDER BY tuple 관련 문제를 수정했습니다. 이로써 #92977가 해결되었습니다. #93225 (Konstantin Vedernikov).
  • S3Queue 설정 s3queue_migrate_old_metadata_to_buckets 관련 버그를 수정했습니다. #93392, #93196, #81739를 해결합니다. #93232 (Kseniia Sumarokova).
  • 머지 중 프로젝션을 다시 빌드할 때 사용하지 않는 컬럼을 제거합니다. 이렇게 하면 메모리 사용량이 줄고 임시 파트 생성도 감소합니다. #93233 (Nikolai Kochetov).
  • 스칼라 상관 서브쿼리가 있는 상황에서 서브쿼리의 미사용 컬럼이 제거되는 문제를 수정했습니다. 수정 전에는 상관 서브쿼리에서만 사용되는 컬럼이 제거될 수 있었고, 그 결과 쿼리가 NOT_FOUND_COLUMN_IN_BLOCK 오류로 실패했습니다. #93273 (Dmitry Novik).
  • 원본 테이블 ALTER 시 MV에서 하위 컬럼(subcolumn)이 누락될 수 있는 문제를 수정했습니다. #93231를 해결했습니다. #93276 (Pavel Kruglov).
  • 로컬 테이블과 원격/분산 테이블을 함께 머지할 때 hostName()에 대해 ILLEGAL_COLUMN이 발생할 수 있었던, 분석기의 Merge 테이블 엔진 쿼리 계획 수립 문제를 수정했습니다. #92059를 해결합니다. #93286 (Jinlin).
  • 비상수 배열 인수를 사용하는 NOT IN이 잘못된 값을 반환하던 문제를 수정하고, 비상수 배열 함수 지원을 추가합니다. #14980을 해결합니다. #93314 (Yarik Briukhovetskyi).
  • use_top_k_dynamic_filtering 최적화에서 발생하던 Not found column 문제를 수정했습니다. #93186를 해결합니다. #93316 (Nikolai Kochetov).
  • 서브컬럼에 생성된 텍스트 인덱스의 재구축 문제를 수정했습니다. #93326 (Anton Popov).
  • hasAllTokenshasAnyTokens 함수에서 두 번째 인수인 빈 배열 처리 방식을 수정했습니다. #93328 (Anton Popov).
  • 오른쪽 테이블에 대한 합계가 있는 쿼리에서 런타임 필터를 사용할 때 발생하는 논리 오류를 수정했습니다. #93330 (Alexander Gololobov).
  • 함수 tokens를 비상수 토크나이저 매개변수(2번째, 3번째, 4번째 매개변수)와 함께 호출해도(예: SELECT tokens(NULL, 1, materialize(1))) 서버가 더 이상 충돌하지 않습니다. #93383 (Robert Schulze).
  • 악의적으로 조작된 집계 상태로 인해 메모리 안전성 문제가 발생할 수 있었던 groupConcat 상태 역직렬화의 정수 오버플로우 취약점을 수정했습니다. #93426 (Raufs Dunamalijevs).
  • 인덱스에 토큰이 전혀 없는 경우(모든 배열이 비어 있거나 모든 토큰이 토크나이저에 의해 건너뛰어지는 경우) 배열 컬럼의 텍스트 인덱스 분석 문제를 수정했습니다. #93457 (Anton Popov).
  • 사용자 이름/비밀번호가 connection string에 포함된 경우 ClickHouse Client에서 OAuth 로그인을 건너뜁니다. #93459 (Krishna Mannem).
  • DataLakeCatalog에서 Azure ADLS Gen2의 제공된 자격 증명 지원을 수정했습니다 - Iceberg REST 카탈로그에서 adls.sas-token.* 키를 파싱하고 ABFSS URL 파싱을 수정했습니다. #93477 (Karun Anantharaman).
  • 분석기 사용 시 GLOBAL IN 지원 문제를 수정했습니다(이전에는 Set이 원격 노드에 다시 생성되었습니다). #93507 (Azat Khuzhin).
  • 역직렬화 과정에서 subcolumn을 희소 컬럼에 직접 추출하던 문제를 수정했습니다. #93512 (Pavel Kruglov).
  • 중복된 검색 쿼리에서 텍스트 인덱스의 직접 읽기가 제대로 동작하지 않던 문제를 수정했습니다. #93516 (Anton Popov).
  • 런타임 필터가 활성화된 상태에서 JOIN된 테이블이 동일한 컬럼을 여러 번 반환할 때(예: SELECT a, a, a FROM t) 발생하는 NOT_FOUND_COLUMN_IN_BLOCK 오류를 수정했습니다. #93526 (Alexander Gololobov).
  • ssh를 사용해 연결할 때 clickhouse-client가 비밀번호를 두 번 물어보던 버그를 수정했습니다. #93547 (Isak Ellmer).
  • 종료 시 zookeeper가 확실히 마무리되도록 하여, 극히 드문 경우 종료 과정이 멈출 수 있는 문제를 수정했습니다. #93602 (Azat Khuzhin).
  • 중복 제거 경쟁 상태로 인해 ReplicatedMergeTree 복원 시 발생하는 LOGICAL_ERROR를 수정했습니다. #93612 (Pablo Marcos).
  • 일부 입력 형식에서 희소 컬럼으로 직접 역직렬화할 때 TTL 업데이트에 희소 컬럼을 사용하던 문제를 수정했습니다. 이 수정으로 Unexpected type of result TTL column 논리 오류가 발생할 가능성을 해결합니다. #93619 (Pavel Kruglov).
  • 잘못된 입력값으로 호출될 때 H3 인덱스 함수가 때때로 충돌하거나 멈추는 문제를 수정했습니다. #93657 (Michael Kolupaev).
  • UTF-8이 아닌 데이터에 ngram_bf 인덱스를 사용하면 초기화되지 않은 메모리를 읽을 수 있었고, 그 결과 해당 인덱스 구조에 포함될 수 있는 값이 노출될 수 있었습니다. #92576을 해결합니다. #93663 (Alexey Milovidov).
  • 압축 해제된 버퍼 크기가 예상대로인지 확인합니다. #93690 (Raúl Marín).
  • merge 테이블 엔진 사용 시 SHOW COLUMNS 권한을 확인하지 않고는 테이블의 컬럼 목록을 가져올 수 없도록 했습니다. #93695 (János Benjamin Antal).
  • 서브컬럼 위에 생성된 스킵 인덱스의 머티리얼라이즈 문제를 수정했습니다. #93708 (Anton Popov).
  • PipelineExecutor가 살아 있는 동안 IStorage 객체가 파괴되지 않도록 스토리지의 공유 포인터를 QueryPipeline::resources::storage_holders에 저장합니다. #93746 (Miсhael Stetsyuk).
  • 재시작 후 interserver host가 변경된 경우 Replicated DB를 ATTACH할 때 발생하던 문제를 수정했습니다. #93779 (Tuan Pham Anh).
  • cache가 활성화된 경우 발생하던 ReadBufferFromS3의 assert !read_until_position를 수정했습니다. #93809 (Kseniia Sumarokova).
  • 빈 Tuple이 Map 컬럼과 함께 사용될 때 드물게 발생하던 논리 오류를 수정했습니다. #93784를 해결했습니다. #93814 (Nihal Z. Miaji).
  • 머지 중 프로젝션을 재구축할 때 발생하던 _part_offset 손상을 수정하고, _part_offset 컬럼의 불필요한 읽기를 피하며 프로젝션 계산에서 필요 없는 컬럼을 건너뛰도록 해 프로젝션 처리를 최적화했습니다. 이는 #93233에서 도입된 최적화를 이어갑니다. #93827 (Amos Bird).
  • ‘Bad version’ 처리 로직 제거. #93843 (Anton Ivashkin).
  • 키가 부호 있는 정수형일 때 분산 쿼리에서 optimize_inverse_dictionary_lookup가 작동하지 않던 문제를 수정했습니다. #93259를 해결합니다. #93848 (Nihal Z. Miaji).
  • 분산 remote() 쿼리에서 lag/lead가 작동하지 않던 문제를 수정했습니다. #90014를 해결했습니다. #93858 (Nihal Z. Miaji).
  • system instrument 디스패치 관련 버그를 수정했습니다. #93937 (Pablo Marcos).
  • https://github.com/ClickHouse/ClickHouse/pull/89173에서 TraceSender가 내부 파이프를 통해 전송하는 구조에 필드를 하나 추가했습니다. 하지만 버퍼 크기는 업데이트되지 않았고(여기 참조), 그 결과 buffer_size를 초과하는 데이터를 버퍼에 쓰게 되어 플러시가 여러 번 발생합니다. 또한 TraceSender::send는 여러 스레드에서 호출되므로 각 스레드의 플러시가 서로 뒤섞일 수 있고, 이로 인해 수신 측인 TraceCollector가 의존하는 불변식이 깨집니다. #93966 (Miсhael Stetsyuk).
  • 스토리지 Join에서 USING 절을 사용하는 join 연산 중 super type으로의 형 변환을 수정했습니다. #91672을 해결합니다. #78572를 해결합니다. #94000 (Dmitry Novik).
  • join 런타임 필터가 Merge 테이블에 적용된 경우 FilterStep이 올바르게 추가되지 않던 문제를 수정했습니다. #94021 (Alexander Gololobov).
  • 블룸 필터 스킵 인덱스가 적용된 여러 컬럼 프레디케이트와 OR, NOT 조건이 모두 포함된 SELECT 쿼리는 일관성 없는 결과를 반환할 수 있었습니다. 이제 이 문제가 수정되었습니다. #94026 (Shankar Iyer).
  • 종속 인덱스가 있는 컬럼에서 CLEAR 동작을 수정했습니다. #94057 (Raúl Marín).
  • ReadWriteBufferFromHTTP에서 초기화되지 않은 값을 사용하는 문제를 수정했습니다. #94058 (Alexey Milovidov).
  • JSON에서 타입이 지정된 경로에 대한 잘못된 검사 로직을 수정했습니다. 이 검사는 https://github.com/ClickHouse/ClickHouse/pull/92842 에서 도입되었으며, 기존 테이블 시작 시 오류를 유발할 수 있습니다. #94070 (Pavel Kruglov).
  • OUTER JOIN이 있는 경우 필터 분석 중 발생하는 크래시를 수정했습니다. #90979를 해결했습니다. #94080 (Dmitry Novik).
  • 병렬 환경에서 UInt8 집계 키를 사용할 때(max_threads > 1 - 기본값) uniqTheta의 정확도 문제를 수정했습니다. #94095 (Azat Khuzhin).
  • SCOPE_EXIT 내부의 socket.setBlocking(true) 호출에서 발생한 예외로 인해 생기던 크래시를 수정했습니다. #94100 (Miсhael Stetsyuk).
  • ReplicatedMergeTree에서 DROP PARTITION이 이후 로그 엔트리에서 생성된 파트를 삭제하면서 발생하던 데이터 손실 문제를 수정했습니다. #94123 (Tuan Pham Anh).
  • 페이지 경계를 넘는 배열을 Parquet 리더 v3가 잘못 처리하던 문제가 수정되었습니다. 이는 예를 들어 Arrow가 페이지 통계나 페이지 인덱스를 활성화하지 않은 상태로 작성한 파일에서 발생합니다. 영향은 Array 데이터 타입의 컬럼에만 미칩니다. 대표적인 증상은 데이터 약 1 MB마다 배열 하나가 잘리는 것입니다. 이 수정이 적용되기 전에는 우회책으로 다음 설정을 사용하십시오: input_format_parquet_use_native_reader_v3 = 0. #94125 (Michael Kolupaev).
  • Log entry를 기다리는 동안 ReplicatedMergeTree에서 watch가 과도하게 생성되던 문제를 수정했습니다. #94133 (Azat Khuzhin).
  • 함수 arrayShuffle, arrayPartialShuffle, arrayRandomSample에서 const 컬럼을 구체화해 각 행마다 다른 결과를 반환하도록 했습니다. #94134 (Joanna Hulboj).
  • materialized view에서 테이블 함수를 평가할 때 발생하던 데이터 레이스를 수정했습니다. #94171 (Alexey Milovidov).
  • 쿼리가 잘못된 경우 PostgreSQL 데이터베이스 엔진에서 발생하는 nullptr 역참조 문제를 수정했습니다. #92887를 해결합니다. #94180 (Alexey Milovidov).
  • 여러 서브쿼리가 있는 SELECT 쿼리를 사용하는 갱신 가능 구체화 뷰의 메모리 누수를 수정했습니다. #94200 (Antonio Andelic).
  • DataPartStorageOnDiskBase::removesystem.parts 사이의 경쟁 상태(data race)를 수정했습니다. #49076를 해결합니다. #94262 (Alexey Milovidov).
  • 메모리 예외 발생 시 크래시(std::terminate)를 유발할 수 있는 HashTable 복사 대입의 잘못된 noexcept 지정자를 제거했습니다. #94275 (Nikita Taranov).
  • 이전에는 GROUP BY에 중복된 컬럼이 있는 프로젝션(예: GROUP BY c0, c0)을 생성하고 데이터를 삽입하면, optimize_row_order가 활성화된 경우 std::length_error가 발생했습니다. #94065를 해결합니다. #94277 (Alexey Milovidov).
  • 연결 시 멈춤 및 크래시를 유발하던 ZooKeeper 클라이언트의 발견하기 어려운 버그를 수정했습니다. #94320 (Azat Khuzhin).
  • 서브컬럼에 적용되지 않던 function to subcolumns 최적화 문제를 수정했습니다. #94323 (Pavel Kruglov).
  • enable_lazy_columns_replication이 활성화된 상태에서 중첩된 RIGHT JOIN에서 발생할 수 있던 잘못된 결과를 수정했습니다. 이 버그로 인해 복제된 컬럼의 모든 행이 각기 다른 값 대신 동일한 값을 잘못 반환했습니다. #93891을 해결했습니다. #94339 (Vladimir Cherkasov).
  • 등가 집합을 사용하는 SEMI JOIN의 필터 pushdown을 수정했습니다. 인수 타입이 변경된 경우에는 필터를 pushdown하지 않습니다. #93264를 수정했습니다. #94340 (Dmitry Novik).
  • DataLake 데이터베이스 엔진에서 DeltaLake CDF 사용을 수정했습니다(delta lake catalogs 통합). #94122를 해결했습니다. #94342 (Kseniia Sumarokova).
  • SLRU 캐시 정책 사용 시 현재 메트릭 FilesystemCacheSizeLimit의 값이 잘못 표시되던 문제를 수정했습니다. #94363 (Kseniia Sumarokova).
  • 이제 2개 미만의 인수로 Backup 데이터베이스 엔진을 생성하면 std::out_of_range: InlinedVector::at(size_type) const failed bounds check. 대신 Wrong number of arguments라는 더 명확한 오류 메시지가 반환됩니다. #94374 (Robert Schulze).
  • grant option이 있는 권한에 대해 데이터베이스 수준에서 전역 권한을 취소할 수 없는 경우 이를 무시합니다. #94386 (pufit).
  • compact 파트에서 희소 오프셋을 읽을 때 발생하던 문제를 수정했습니다. #94385를 해결했습니다. #94399 (Pavel Kruglov).
  • alter_column_secondary_index_modethrow 모드를 사용하더라도, 암시적 인덱스를 사용하는 컬럼에 대한 ALTER를 막지 않습니다. #94425 (Raúl Marín).
  • 여러 receivePacketsExpectQuery 호출에서 Protocol::Client::IgnoredPartUUIDs를 읽을 때 TCPHandler가 크래시 나는 문제를 수정했습니다. #94434 (Miсhael Stetsyuk).
  • system.functions에서 민감한 데이터 마스킹 문제를 수정했습니다. #94436 (Vitaly Baranov).
  • 비활성화된 send_profile_events에서 발생하던 nullptr 역참조 문제를 수정했습니다. 이 기능은 최근 ClickHouse Python driver에 도입되었습니다. #92488을 해결합니다. #94466 (Alexey Milovidov).
  • 머지 중 발생하는 text index .mrk 비호환성 문제를 수정했습니다. #94494 (Peng Jian).
  • read_in_order_use_virtual_row가 활성화되면, 인덱스가 잘렸는지 확인하지 않은 상태에서 코드가 전체 프라이머리 키(primary key) 크기를 기준으로 인덱스 컬럼에 접근해 use-after-free / 초기화되지 않은 메모리 문제가 발생했습니다. #85596를 해결합니다. #94500 (Alexey Milovidov).
  • 타입이 널 허용(Nullable)인 경우, GLOBAL IN을 사용하는 서브쿼리에 외부 테이블(external table)을 전송할 때 발생하던 타입 불일치 오류를 수정했습니다. #94097를 해결합니다. #94511 (Alexey Milovidov).
  • 이전 버전에서는 동일한 표현식에 대해 여러 인덱스 조건을 사용하는 쿼리에서 Not found column 예외가 잘못 발생할 수 있습니다. #60660을 해결했습니다. #94515 (Alexey Milovidov).
  • 런타임 필터에서 널 허용 조인 컬럼이 잘못 처리되던 문제를 수정했습니다. #94555 (Alexander Gololobov).
  • 현재 사용 중인 다른 워크로드 내에서 워크로드를 생성해도 더 이상 비정상 종료가 발생하지 않습니다. #94599 (Sergei Trifonov).
  • 존재하지 않는 컬럼에 대해 isNotNull을 평가할 때 ANY LEFT JOIN 최적화 중 발생하던 충돌을 수정했습니다. #94600 (Molly).
  • 계산된 기본값이 설정된 다른 컬럼을 참조할 때 기본 표현식 평가가 올바르게 이루어지지 않던 문제를 수정했습니다. #94615 (Alexey Milovidov).
  • BACKUP/RESTORE 작업에서 발생하던 권한 문제를 수정했습니다. #94617 (Pablo Marcos).
  • 데이터 타입이 Nullable(DateTime64)인 경우 잘못된 타입 변환으로 인해 발생하는 충돌을 수정했습니다. #94627 (Miсhael Stetsyuk).
  • ORDER BY가 포함된 특정 분산 쿼리에서 ALIAS 컬럼의 값이 서로 뒤바뀌어 반환되던 버그(즉, 컬럼 a에 컬럼 b의 데이터가 표시되고 그 반대도 발생하는 문제)를 수정했습니다. #94644 (filimonov).
  • keeper-bench 결과를 파일로 저장하는 문제를 수정했습니다. #94654 (Antonio Andelic).
  • 컬럼에 음수 부동소수점 값이 포함된 경우 MinMax 유형 통계에서 발생하는 잘못된 추정치를 수정했습니다. #94665 (zoomxi).
  • 맵의 key가 struct인 경우 Parquet 파일을 읽지 못하던 문제를 수정했습니다. #94670 (Konstantin Vedernikov).
  • 복잡한 ON 조건을 사용할 때 발생할 수 있는 잘못된 RIGHT JOIN 결과를 수정했습니다. #92913를 해결했습니다. #94680 (Vladimir Cherkasov).
  • 수직 병합 후에도 일정한 인덱스 세분화 수준(use_const_adaptive_granularity)이 유지되도록 했습니다. #94725 (Azat Khuzhin).
  • 스칼라 서브쿼리와 테이블 의존성과 관련된 mutation 버그를 수정했습니다. 테이블에 특정 컬럼에 대한 의존성(인덱스 또는 프로젝션)이 있으면 스칼라 서브쿼리가 데이터 없이 평가되어 캐시될 수 있었고, 이로 인해 잘못된 변경이 발생할 수 있었습니다. #94731 (Raúl Marín).
  • 오류 발생 시 AsynchronousMetrics cpu_pressure 폴백이 올바르게 동작하도록 수정했습니다. #94827 (Raúl Marín).
  • getURLHostRFC 함수는 포인터를 역참조하기 전에 경계 검사(bounds check)가 없었습니다. 빈 문자열이 domainRFC에 전달되면 초기화되지 않은 메모리를 읽게 되어 MSan 오류가 발생했습니다. #94851 (Alexey Milovidov).
  • 암호화된 디스크가 읽기 전용으로 처리되던 문제를 수정했습니다. #94852 (Azat Khuzhin).
  • 분산 테이블에서 이전 분석기를 사용할 때 소수형 LIMIT/OFFSET에 발생하던 논리 오류를 수정했습니다. #94712을 해결합니다. #94999 (Ahmed Gouda).
  • 기본적으로 JOIN 런타임 필터가 활성화된 경우 일부 조건에서 발생하던 충돌을 수정했습니다. #95000 (Alexander Gololobov).
  • 테이블 엔진 URL() 및 테이블 함수 url()에서 사용하는 URL의 비밀번호 마스킹을 개선했습니다. #95006 (Vitaly Baranov).
  • 함수 toStartOfInterval은 이제 enable_extended_results_for_datetime_functions가 활성화되어 있을 때, XDay, Week, Month, Quarter, Year인 경우 toStartOfX와 동일하게 동작합니다. #95011 (Kirill Kopnev).
  • 상수 문자열 비교에서 설정 cast_string_to_date_time_mode, bool_true_representation, bool_false_representation, input_format_null_as_default가 반영되지 않던 문제를 수정했습니다. #91681를 해결합니다. #95040 (Nihal Z. Miaji).
  • 파일 시스템 캐시의 데이터 레이스 문제를 수정합니다. #95064 (Alexey Milovidov).
  • Parquet 리더에서 드물게 발생하던 경쟁 상태 문제를 수정했습니다. #95068 (Alexey Milovidov).
  • LIMIT가 0일 때 top K 최적화에서 발생하던 충돌을 수정했습니다. #93893를 해결합니다. #95072 (Alexey Milovidov).
  • DateTime/정수에서 Time64로 변환할 때는 단조 함수가 아닌 toTime을 사용해 하루 중 시간 부분을 추출합니다. ToDateTimeMonotonicity 템플릿이 이 변환이 단조적이라고 잘못 판단하여, 디버그 빌드에서 “Invalid binary search result in MergeTreeSetIndex” 예외가 발생했습니다. #95125 (Alexey Milovidov).
  • 필요한 경우에만 manifest 파일 항목 목록을 다시 생성하도록 했습니다(이전에는 반복할 때마다 다시 생성되었습니다). #95162 (Daniil Ivanik).

빌드/테스트/패키징 개선

마지막 수정일 2026년 6월 10일