메인 콘텐츠로 건너뛰기

목차

ClickHouse 릴리스 v25.12, 2025-12-18
ClickHouse 릴리스 v25.11, 2025-11-27
ClickHouse 릴리스 v25.10, 2025-10-30
ClickHouse 릴리스 v25.9, 2025-09-25
ClickHouse 릴리스 v25.8 LTS, 2025-08-28
ClickHouse 릴리스 v25.7, 2025-07-24
ClickHouse 릴리스 v25.6, 2025-06-26
ClickHouse 릴리스 v25.5, 2025-05-22
ClickHouse 릴리스 v25.4, 2025-04-22
ClickHouse 릴리스 v25.3 LTS, 2025-03-20
ClickHouse 릴리스 v25.2, 2025-02-27
ClickHouse 릴리스 v25.1, 2025-01-28
2024년 변경 로그
2023년 변경 로그
2022년 변경 로그
2021년 변경 로그
2020년 변경 로그
2019년 변경 로그
2018년 변경 로그
2017년 변경 로그

ClickHouse 릴리스 25.12, 2025-12-18

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

  • ALTER MODIFY COLUMN은 이제 널 허용 컬럼을 널 비허용 타입으로 변환할 때 명시적인 DEFAULT를 요구합니다. 이전에는 이러한 ALTER가 cannot convert null to not null 오류로 중단될 수 있었지만, 이제 NULL은 컬럼의 기본 표현식으로 대체됩니다. #5985를 해결합니다. #84770 (Vladimir Cherkasov).
  • Ngram 토크나이저는 이제 설정된 길이 N보다 짧은 ngram을 반환하지 않습니다. 검색 토큰이 비어 있으면 Text Search는 행을 반환하지 않습니다. #89757 (George Larionov).
  • String에서 Nullable(String)로 COLUMN을 변경할 때는 데이터에 mutation을 수행하지 않습니다. 그러나 uniq 집계 함수는 서로 다른 데이터 구조를 사용합니다. 널 허용 컬럼에서는 중첩된 uniq 집계기를 포함한 AggregateFunctionNull을 사용합니다. AggregateFunctionNull은 추가적인 bool 플래그를 직렬화합니다. 이로 인해 statistics 파일이 호환되지 않게 됩니다. 해결 방법은 직렬화 중 널 허용 컬럼인지 기록하는 플래그를 추가하는 것입니다. statistics 포맷이 변경되었으며, 이전 포맷의 statistics가 있으면 server에서 실패할 수 있습니다. 이 PR #90904는 이 크래시를 수정하고, 기존 statistics가 legacy 포맷을 사용하는 경우 예외를 발생시킵니다. 예외를 피하려면 statistics를 다시 생성할 수 있도록 ALTER TABLE table MATERIALIZE STATISTICS ALL을 실행해야 합니다. #90311 (Han Fei).
  • 설정 allow_not_comparable_types_in_order_by/allow_not_comparable_types_in_comparison_functions이 제거되었습니다. ORDER BY 또는 비교 함수에서 비교할 수 없는 타입을 허용하면 논리적 오류나 예기치 않은 결과가 발생할 수 있습니다. #90028을 해결합니다. #90527 (Pavel Kruglov).
  • 설정 check_query_single_value_result의 기본값이 true에서 false로 변경되었습니다. 이에 따라 CHECK TABLE은 집계된 결과(1 = 정상, 0 = 오류 발견) 대신 파트별 상세 결과를 반환합니다. 이는 이전 동작보다 사용자가 기대하는 동작에 더 가깝습니다. #91009 (Robert Schulze).
  • 암시적 인덱스와 관련해 여러 수정이 적용되었습니다. 표시되거나 저장되는 스키마(Keeper 메타데이터)에는 add_minmax_index_for_numeric_columns 또는 add_minmax_index_for_string_columns 설정으로 생성된 것과 같은 암시적 인덱스가 포함되지 않습니다. 이로 인해 이전 릴리스의 레플리카가 있는 상태에서 더 최신 버전으로 ReplicatedMergeTree 테이블을 생성하거나 업데이트하면 메타데이터 오류가 발생할 수 있습니다. 이런 경우에는 클러스터 업그레이드가 완전히 끝날 때까지 이전 레플리카로 DDLs를 보내십시오. #91429 (Raúl Marín).
  • receive_timeout으로 인해 쿼리가 시간 초과되면 clickhouse-client가 0이 아닌 종료 코드(159 - TIMEOUT_EXCEEDED)를 반환하도록 업데이트했습니다. 이전에는 시간 초과 시 종료 코드 0(성공)을 반환해 스크립트와 자동화에서 시간 초과 실패를 감지하기 어려웠습니다. #91432 (Sav).
  • 이제 빈 ORDER BY 키로 특수 MergeTree 테이블(ReplacingMergeTree, CollapsingMergeTree 등)을 생성하는 것이 금지됩니다. 이러한 테이블에서는 머지 동작이 정의되지 않기 때문입니다. 그래도 이런 테이블을 생성해야 한다면 allow_suspicious_primary_key 설정을 활성화하십시오. #91569 (Anton Popov).
  • 시프트 크기가 자료형의 크기와 정확히 같은 경우 함수 bitShiftLeftbitShiftRight가 0 또는 빈 값을 반환하도록 수정했습니다. #91943 (Pablo Marcos).
  • #88380의 후속 변경입니다. 이 PR에서는 프로젝션에서 위치 인수를 비활성화한 것을 하위 호환되지 않는 변경 사항으로 표시합니다. 또한 프로젝션에 위치 인수가 있는 경우 ClickHouse 클러스터를 안전하게 업그레이드할 수 있도록 enable_positional_arguments_for_projections 설정을 도입합니다. #92007 (Dmitry Novik).
  • 기본적으로 JSON의 고급 shared data를 활성화합니다. 이 변경 이후에는 25.8 이전 버전으로 다운그레이드할 수 없습니다. 이러한 버전은 JSON 컬럼이 있는 새 데이터 파트를 읽을 수 없기 때문입니다. 안전한 업그레이드를 위해 compatibility 설정을 이전 버전으로 지정하거나 MergeTree 설정 dynamic_serialization_version='v2', object_serialization_version='v2'를 설정하는 것이 권장됩니다. #92511 (Pavel Kruglov).

새 기능

  • 이제 S3/Azure Queue 테이블(table)에서 기존의 파일 유지 또는 제거 옵션에 더해, 처리된 파일을 이동하거나 태그를 지정하도록 구성할 수 있습니다. #72944를 해결합니다. #86907 (Murat Khairulin).
  • S3/Azure Queue 스토리지에 설정 commit_on_select를 추가했습니다(처리된 데이터를 커밋해야 하는지와 after_processing 작업을 적용할지 여부를 정의하기 위한 설정). 기본값은 false이며, select 시 attached 상태인 mv 확인을 수정했습니다. #91450 (Kseniia Sumarokova).
  • XRay를 사용해 런타임에 계측을 추가하여 운영 환경에서 문제를 디버깅하고 결정론적으로 프로파일링할 수 있습니다. #74249를 해결합니다. #89173 (Pablo Marcos).
  • IN에서 상수가 아닌 두 번째 인수를 사용할 수 있습니다. 또한 두 번째 인수로 튜플도 지원합니다. #77906 (Yarik Briukhovetskyi).
  • Geometry 유형의 면적 및 둘레를 계산하는 함수입니다. #89047 (Konstantin Vedernikov).
  • 속성 값이 지정한 값과 일치하는 딕셔너리 키를 반환하는 dictGetKeys 함수를 구현했습니다. 반복 조회 속도를 높이기 위해 max_reverse_dictionary_lookup_cache_size_bytes 설정으로 조정되는 쿼리별 역방향 조회 캐시를 사용합니다. #89197 (Nihal Z. Miaji).
  • 입력 JSON을 JSON 타입의 명시적 타입 경로로 형변환할 수 없을 때, JSON 타입에 대한 삽입/타입 캐스트에서 예외를 비활성화하는 type_json_skip_invalid_typed_paths 설정이 추가되었습니다. 이 경우 해당 타입 경로의 NULL/0 값으로 대체됩니다. #89886 (Max Justus Spransy).
  • MergeTree 테이블에 대해 direct(중첩 루프) 조인을 지원합니다. 사용하려면 설정에서 이를 단일 옵션으로 지정하십시오: join_algorithm = 'direct'. #89920 (Vladimir Cherkasov).
  • Iceberg에 대해 CREATE 작업에서 ORDER BY를, INSERT에서는 정렬을 지원합니다. #89916을 해결했습니다. #90141 (Konstantin Vedernikov).
  • 프로젝션 수준 설정을 도입했습니다. 이 설정은 ALTER TABLE ... ADD PROJECTION의 새로운 WITH SETTINGS 절을 통해 사용할 수 있습니다. 이를 통해 프로젝션별로 특정 MergeTree 스토리지 매개변수(예: index_granularity, index_granularity_bytes)를 재정의할 수 있습니다. #90158 (Amos Bird).
  • #73900#38775의 일환으로 HMAC(algorithm, message, key) SQL 함수를 추가했습니다. #90837 (Mikhail f. Shiryaev).
  • 첫 번째 인수가 상수 배열인 경우 has 함수가 기본 키(primary key)와 데이터 스키핑 인덱스를 사용할 수 있도록 지원을 추가했습니다. #90980를 해결했습니다. #91023 (Nihal Z. Miaji).
  • 새로운 입출력 형식 Buffers를 구현했습니다. 이 형식은 Native와 유사하지만, Native와는 달리 컬럼 이름, 컬럼 타입, 추가 메타데이터를 저장하지 않습니다. #84017을 해결했습니다. #91156 (Nihal Z. Miaji).
  • Cluster 테이블 함수에서 파일을 병렬로 읽을 때 사용할 스트림 수를 제어하는 설정 max_streams_for_files_processing_in_cluster_functions을 추가했습니다. #90223를 해결했습니다. #91323 (Pavel Kruglov).
  • 행 수준 보안(Row-level security)을 위한 데이터 마스킹(ClickHouse Cloud에서만 사용 가능). clickhouse-client에서 이를 지원하기 위해 데이터 마스킹 정책 파서를 추가했습니다. #90552 (pufit).
  • windowFunnel 집계 함수에 allow_reentry 옵션을 추가했습니다. strict_order와 함께 활성화하면 순서를 위반하는 이벤트를 무시하고 퍼널 분석을 중단하지 않습니다. 이를 통해 새로고침(A->A->B)이나 뒤로 가기(A->B->A->C)가 포함된 사용자 여정도 처리할 수 있어 전환율 과소 집계를 방지합니다. #86916 (Lee ChaeRok).
  • ZooKeeper와의 Keeper 호환성: STATISTICS를 사용한 CREATE. #88797 (Konstantin Vedernikov).
  • ClickHouse Keeper에서 ZooKeeper 영구 watch를 지원합니다. 후속 작업 2편: https://github.com/ClickHouse/ClickHouse/pull/78207. #88813 (Konstantin Vedernikov).
  • 뮤테이션 수행 중 인덱스를 어떻게 처리할지 제어하는 MergeTree 설정 alter_column_secondary_index_mode를 추가했습니다. 가능한 값: throw, drop, rebuild, compatibility. #77797를 해결합니다. #89335 (Raúl Marín).
  • TimeTime64 데이터 타입이 이제 프로덕션 환경에서 사용할 수 있게 되어, enable_time_time64_type 설정이 기본적으로 활성화됩니다. #89345 (Yarik Briukhovetskyi).
  • delta_lake_snapshot_start_version, delta_lake_snapshot_end_version 설정을 사용해 deltaLake 테이블 함수로 DeltaLake CDF를 읽을 수 있도록 지원합니다. CDF(Change Data Feed, Delta 테이블의 버전 간 행 수준 데이터 변경(예: 삽입, 업데이트, 삭제)을 자동으로 캡처하고 쿼리할 수 있게 해주는 기능)는 DeltaLake에서 delta.enableChangeDataFeed를 통해 활성화됩니다. 데이터와 함께 제공되는 컬럼은 _change_type, _commit_version, _commit_timestamp입니다. #90431 (Kseniia Sumarokova).
  • 튜플 요소 접근에서 음수 인덱스를 지원합니다(예: tuple.-1). #91665 (Amos Bird).

실험적 기능

  • text index 포맷 v3를 도입하고 베타 상태로 승격합니다.
  • automatic_parallel_replicas_mode 설정으로 제어되는, 병렬 레플리카를 사용해 쿼리를 자동 실행하는 새로운 로직이 도입되었습니다. 일반적인 단일 노드 실행 중에는 ClickHouse가 이후 계획 단계에서 활용할 통계를 수집합니다. 통계상 병렬 레플리카가 유리할 가능성이 높다고 판단되면, ClickHouse가 해당 쿼리를 병렬 레플리카로 자동 실행합니다. 현재 지원되는 쿼리 범위는 아직 상당히 제한적입니다. #87541 (Nikita Taranov).
  • --login을 사용해 Cloud 자격 증명으로 ClickHouse Cloud 인스턴스에 액세스할 수 있습니다. #89261 (Krishna Mannem).
  • AggregateFunction 컬럼이 있는 테이블에 대한 INSERT 쿼리를 개선하기 위해 세션 수준 설정 aggregate_function_input_format을 추가했습니다. 이를 통해 직렬화된 상태, 원시 값 또는 배열 형태로 데이터를 삽입할 수 있습니다. #88088 (Punith Nandyappa Subashchandra).

성능 개선

  • 스킵 인덱스와 동적 임계값 필터를 사용해 ORDER BY...LIMIT N 쿼리를 최적화하고, 처리되는 행 수를 크게 줄였습니다. #89835 (Shankar Iyer).
  • ClickHouse는 이제 스킵 인덱스를 사용해 ANDOR가 혼합된 필터 조건이 있는 WHERE 절에 대해서도 인덱스 분석을 수행합니다. 이전에는 스킵 인덱스를 활용하려면 WHERE 절이 필터 조건의 논리곱(AND) 형태여야 했습니다. 새로운 설정 use_skip_indexes_for_disjunctions(기본값: on)으로 이 기능을 제어할 수 있습니다. (issue #75228). #87781 (Shankar Iyer).
  • LEFT/INNER JOIN 작업에서 왼쪽 테이블을 원래 순서대로 읽는 기능을 지원하며, 이후 단계에서 이를 활용할 수 있습니다. 이 기능은 설정 query_plan_read_in_order_through_join로 비활성화할 수 있습니다. LEFT/INNER JOIN에 대해 읽기 시 가상 행 최적화(설정 read_in_order_use_virtual_row 참조)도 지원합니다. #89815 (Vladimir Cherkasov).
  • 제한값을 늘려 지연 구체화되는 컬럼의 성능을 개선합니다. #90309 (Nikolai Kochetov).
  • 대규모 minmax 인덱스(수백만 개의 그래뉼)가 있는 경우 인덱스 분석 시 지연 시간이 더 낮아집니다. #90428 (Shankar Iyer).
  • INNER JOIN에 대한 단순한 DPsize 조인 재정렬 알고리즘을 구현했습니다. 새로운 실험적 설정을 통해 어떤 알고리즘을 어떤 순서로 사용할지 제어할 수 있습니다. 예를 들어 query_plan_optimize_join_order_algorithm='dpsize,greedy'는 먼저 DPsize를 시도하고, 이후 greedy로 폴백한다는 의미입니다. #91002 (Alexander Gololobov).
  • 쿼리가 행 제한에 도달하면 즉시 실패하도록 합니다. #61872를 해결합니다. #62804 (Sean Haynes).
  • #84477에서는 병렬 분산 실행을 위해 insert select from s3Cluster(...) 쿼리에서 사용할 수 있는 select 쿼리에 대한 제약을 추가했습니다. 이 변경으로 이전에도 가능했던 where를 사용할 수 있게 되었습니다. #84611 (Igor Nikonov).
  • 해시 테이블을 순회하는 동안 키를 프리페치하여 캐시 미스를 최소화합니다. #84708 (lgbo).
  • histogram 집계 함수를 최적화해 points 배열의 끝부분만 정렬하고 단조 입력에서는 정렬을 생략하도록 하여 약 10%의 성능 향상을 달성했습니다. #85760 (MakarDev).
  • 텍스트 인덱스에서 구성한 추가 사전 필터를 활용해 like, equals, has 등의 함수를 사용하는 프레디케이트의 필터링 성능을 개선했습니다. 이 최적화는 query_plan_text_index_add_hint 설정으로 활성화됩니다. Map 데이터 타입 컬럼에서 텍스트 인덱스를 활용하는 방식도 개선했습니다. #88550 (Anton Popov).
  • 미리 계산된 가능한 키 값 Set에 대해 더 빠른 조회를 수행해 반복되는 역방향 딕셔너리 조회를 최적화합니다. #7968을 해결했습니다. #88971 (Nihal Z. Miaji).
  • topK 집계 함수의 성능과 동작 방식을 개선했습니다. #90091 (Raúl Marín).
  • Decimal 비교 연산 성능을 개선했습니다. #28192를 해결합니다. #90153 (Konstantin Bogdanov).
  • https://github.com/ClickHouse/ClickHouse/pull/84423의 후속으로 Apache Paimon 함수에서 파티션 프루닝을 지원합니다. #90253 (JIaQi).
  • 동적 디스패치를 통해 논리 함수에 고급 SIMD 연산을 활용합니다. #90432 (Raúl Marín).
  • 불필요하게 결과 컬럼을 0으로 초기화하지 않도록 해 JIT 함수 성능을 개선했습니다. #90449 (Raúl Marín).
  • 동적 디스패치로 T64 압축 해제 속도를 높였습니다. #90610 (Raúl Marín).
  • MergeTree 리더의 인플레이스 필터링을 최적화합니다. #87119을 해결합니다. #90630 (Xiaozhe Yu).
  • 선택된 머지 후보의 폭을 줄이기 위한 추가 휴리스틱을 도입했습니다. 더 좁은 머지를 수행하면 쓰기 증폭은 증가하지만, 동시에 TOO_MANY_PARTS 오류를 방지하는 데 도움이 될 수 있습니다. #91163 (Mikhail Artemenko).
  • glob pattern으로 생성된 S3 테이블에서 _path 필터 값을 푸시다운해 S3 목록 조회 작업을 피할 수 있도록 함으로써 쿼리 성능을 개선합니다. 이 기능은 s3_path_filter_limit 설정으로 제어됩니다. #91165 (Eduard Karacharov).
  • 동적 디스패치를 통해 WHERE 절에서 컬럼을 bool로 변환하는 속도를 개선했습니다. #91203 (Raúl Marín).
  • 동적 디스패치를 통해 숫자로만 이루어진 단일 block의 정렬 속도를 높였습니다. #91213 (Raúl Marín).
  • 쿼리 계획에서 사용되지 않는 컬럼을 제거하는 최적화를 추가했습니다. #75152를 해결합니다. #76487 (János Benjamin Antal).
  • query_plan_optimize_join_order_limit의 기본값이 10으로 변경되었습니다. #89312 (Alexey Milovidov).
  • allow_statistics_optimize 설정이 기본값으로 활성화되어 조인 최적화기가 컬럼 통계(column statistics)를 사용합니다. #89332 (Alexey Milovidov).
  • ANTI JOIN에 대해서도 JOIN 런타임 필터를 지원합니다. 또한 잠금 경합을 줄이도록 런타임 필터 구현을 리팩터링했습니다. #89710 (Dmitry Novik).
  • min_bytes_for_wide_partvertical_merge_algorithm_min_bytes_to_activate를 128MB로 설정해 system.metric_log 테이블의 머지 중 메모리 사용량을 줄였습니다(기본적으로 활성화됨). #89811 (filimonov).
  • PREWHERE에서 inverted index를 사용할 수 있도록 했습니다. #89975를 해결합니다. #89977 (Peng Jian).
  • GCS에서 성능이 향상되는 GCP OAuth를 사용하는 경우 S3 공급자를 추가하지 않습니다. #91706 (Antonio Andelic).

개선 사항

  • 쿼리에서 final 이후에만 행 정책(row policy)을 적용할 수 있도록 하는 새로운 설정 apply_row_policy_after_final이 추가되었습니다. 이를 통해 행 정책이 있는 ReplacingMergeTree의 동작이 더 올바르게 됩니다. #90986를 수정했습니다. #91065 (Yarik Briukhovetskyi).
  • Pretty 포맷에서 이제 이름이 지정된 Tuple이 Pretty JSON으로 표시됩니다. 이로써 #65022가 해결됩니다. #91779 (Mostafa Mohamed Salah).
  • system.error_log 테이블(table)에 last_error_time, last_error_message, last_error_query_id, last_error_trace 필드를 추가했습니다. #89879 (Narasimha Pakeer).
  • 이제 CLI client에서 --no-server-client-version-message 또는 false를 지정해 ‘ClickHouse 서버 버전이 ClickHouse client보다 오래되었습니다. 이는 서버가 최신 상태가 아니어서 업그레이드가 필요할 수 있음을 나타낼 수 있습니다’ 메시지를 표시하지 않도록 할 수 있습니다. #87784 (Larry Snizek).
  • part가 중복 제거되었음을 알리는 오류 메시지를 추가했습니다. #80264 (Aleksandr Musorin).
  • Kafka 테이블의 구체화된 뷰(Materialized View) 대상 테이블을 보고할 수 있도록 system.kafka_consumersdependenciesmissing_dependencies 컬럼이 추가되었습니다. KafkaMVNotReady 카운터도 추가되었습니다. #85346 (Ilya Golshtein).
  • 이제 원격 및 네이티브 프로토콜을 통한 삽입에서도 테이블(table)의 기본 표현식이 올바르게 동작합니다. #87972을 해결했습니다. #88540 (Pervakov Grigorii).
  • PSI_*_* 비동기 메트릭 수집을 비활성화할 수 있도록 했습니다. #88557 (MikhailBurdukov).
  • Nullable 타입 컬럼에 대한 희소 직렬화 지원이 추가되었습니다. 이는 #44539의 연장선상에 있는 작업입니다. #88999 (Amos Bird).
  • plain-rewritable 디스크는 자체 구현과 레이아웃을 갖습니다. 일반 plain 디스크를 기반으로 하지 않도록 했습니다. #89807 (Mikhail Artemenko).
  • HTTP 예외에는 최종 0 청크가 절대 포함되어서는 안 됩니다. #89998 (Kaviraj Kanagaraj).
  • 핸드셰이크 중 last_zxid_seen (provided by the client) > last_processed_zxid인 경우 클라이언트를 거부하는 Keeper 서버 측 검사를 추가했습니다. 이를 통해 클라이언트가 지연된 레플리카에 다시 연결할 때 오래된 읽기가 발생하는 것을 방지합니다. #90016 (Miсhael Stetsyuk).
  • 새 데이터가 들어올 때까지 컨슈머가 대기하는 시간을 조정할 수 있도록 kafka_consumer_reschedule_ms를 조정 가능한 Kafka 테이블 엔진 설정으로 추가했습니다. #89204을 해결합니다. #90112 (Jeremy Aguilon).
  • 진단 기능을 개선하기 위해 system.mutations에 새 컬럼 parts_in_progress_names를 추가했습니다. #90155 (Shaohua Wang).
  • S3 라이브러리가 XML 응답을 파싱할 때 네트워크 오류가 발생하면 재시도합니다. #90216 (Sema Checherinda).
  • Keeper를 별도의 서버 프로세스에서 실행하고, 대규모 리전에서 Prometheus에 과도한 부하가 걸리지 않도록 Keeper 관련 메트릭만 계속 노출하려고 합니다. #90244 (Miсhael Stetsyuk).
  • 기존 ~/.clickhouse-client/ 위치 외에도 XDG Base Directory 경로(예: ~/.config/clickhouse/config.xml)에서 ClickHouse Client 구성을 로드할 수 있도록 지원을 추가했습니다. #89882를 해결합니다. #90306 (Wujun Jiang).
  • Keeper에 append 요청 배치의 바이트 크기 제한이 추가되었습니다. 이 제한은 keeper_server.coordination_settings.max_requests_append_bytes_size로 제어됩니다. #90342 (Antonio Andelic).
  • Iceberg에서 파티션 수가 지나치게 많아지는 것을 방지하는 설정을 추가했습니다. #90365 (Konstantin Vedernikov).
  • 가드레일 한도에 근접할 때 경고 메시지를 업데이트하여 현재 값과 throw 값을 표시합니다. #90438 (Nikita Fomichev).
  • system.filesystem_cache 테이블에서는 전체 캐시 상태를 담은 단일 청크 하나를 생성하는 대신 청크를 스트리밍합니다. 파일 시스템 캐시 상태를 읽는 작업은 캐시가 큰 경우 시간이 오래 걸리고 메모리를 많이 사용할 수 있으므로, 대규모 배포에서는 스트리밍이 필수적입니다. #90508 (Kseniia Sumarokova).
  • Hive 파티셔닝에서 잘못된 예외 메시지를 수정했습니다. 공백이 하나 누락되어 있었습니다. #90685 (Alexey Milovidov).
  • 벡터 유사도 인덱스 캐시의 항목은 이제 테이블 파트가 삭제되거나 최신 파트로 대체되면 함께 제거됩니다. 이전에는 이러한 항목이 캐시 축출(eviction)이 발생할 때만 지연 정리되었습니다. #90750 (Shankar Iyer).
  • chdig(ClickHouse용 명령줄 진단 도구)를 v25.12.1로 업데이트했습니다. #91394 (Azat Khuzhin).
  • 이제 S3에서 사전 서명된 URL을 사용할 수 있습니다. #65032을 해결했습니다. #90827 (Yarik Briukhovetskyi).
  • 이제 텍스트 인덱스를 ReplacingMergeTree 테이블에서도 사용할 수 있습니다. #90908 (Elmi Ahmadov).
  • 인증 전에 반환되는 HTTP 오류 응답에서 ClickHouse 서버 버전이 노출되지 않도록 했습니다. #91003 (filimonov).
  • 이제 HTTP 클라이언트 연결의 hard_limit에 도달하면 HTTP_CONNECTION_LIMIT_REACHED 예외가 발생합니다. 디스크 연결의 경우 이 값은 20000으로 설정됩니다. #91016 (Sema Checherinda).
  • 배경 작업에 대한 내부 검사 기능을 개선하기 위해 system.background_schedule_pool{,_log}를 도입했습니다. #91157 (Azat Khuzhin).
  • 이제 Web UI 쿼리 편집기에서 Ctrl+/(Mac에서는 Cmd+/)를 사용해 현재 선택한 줄을 빠르게 주석 처리하거나 주석 해제할 수 있어, 테스트 중 쿼리의 일부를 일시적으로 비활성화하기가 더 쉬워졌습니다. #91160 (Samuel K.).
  • 항상 접근할 수 있는 테이블 목록에 system.completions를 추가했습니다. #91166 (Yakov Olkhovskiy).
  • FailedInitialQueryFailedInitialSelectQuery profile events를 추가했습니다. #91172 (RinChanNOW).
  • 서브컬럼이 많은 JSON 컬럼의 컬럼 샘플을 읽을 때, 스레드 풀을 무조건 사용하는 대신 merge_tree_use_prefixes_deserialization_thread_pool 설정을 따르도록 변경하여 잠재적인 스레드 풀 기아 현상을 해결했습니다. #91208 (Raufs Dunamalijevs).
  • tupleElement에서 JSON 타입을 지원합니다. #81630를 해결합니다. #91327 (Pavel Kruglov).
  • 사용자 공간 페이지 캐시가 활성화되었을 때 잘못 발생하던 메모리 제한 오류를 수정했습니다. #91361 (Michael Kolupaev).
  • Ngrams 토크나이저는 이제 ngram_length = 1로도 생성할 수 있습니다. #91529 (George Larionov).
  • SELECT에서 이미 지원되는 것과 마찬가지로 INSERT INTO FUNCTION에서도 함수 내부 스토리지 설정을 지원합니다. #89386를 해결합니다. #91707 (Kseniia Sumarokova).
  • 데이터 레이크에 대한 TRUNCATE 쿼리에서 조용히 아무 작업도 하지 않는 대신 “not implemented” 예외를 발생시킵니다. #86604를 해결합니다. #91713 (Kseniia Sumarokova).
  • DB::Exception: apache::thrift::transport::TTransportException: MaxMessageSize reached 예외가 발생하지 않도록 Parquet v3 리더의 최대 메시지 크기를 설정했습니다. #91737 (Arthur Passos).
  • insert_select_deduplicate 설정을 추가했습니다. 이를 통해 INSERT SELECT 시 삽입 중복 제거를 어떻게 처리하는지 더 명확해졌습니다. 일반적으로 이러한 쿼리에는 중복 제거를 적용할 수 없지만, 테이블이 변경되지 않고 결과가 정렬되어 있다면 retry 시 중복 제거를 수행할 수 있습니다. 소스가 동일한지는 추적할 수 없지만, select 쿼리 결과가 정렬되어 있는지는 확인할 수 있습니다. 실제로는 일반적인 경우 이를 확인하기가 매우 어렵지만, ORDER BY ALL을 사용하는 단순한 경우는 쉽게 확인할 수 있습니다. 현재 이 로직은 실제로 잘못되어 있습니다. 중복 제거를 시도하지만, 대부분의 경우 select가 서로 다른 데이터를 반환하기 때문에 blocks 간 중복을 감지하지 못합니다. #91830 (Sema Checherinda).
  • ArrayQBit로 캐스팅할 때 암시적 형 변환이 허용됩니다. 이제 정수 및 부동소수점 배열을 QBit 컬럼에 명시적으로 형 변환하지 않아도 직접 삽입할 수 있습니다. #91846 (Raufs Dunamalijevs).
  • CapnProto 메시지 크기 제한이 추가되었습니다. 이 제한은 format_capn_proto_max_message_size로 변경할 수 있습니다. #91888 (Antonio Andelic).
  • 마크 캐시 메트릭이 쿼리만 추적하도록 다시 조정합니다(#83415 이후 MarkCacheHits/MarkCacheMisses도 머지에 대해 업데이트되도록 변경되었는데, 이 PR에서 이 동작을 원래대로 되돌립니다). #91910 (Azat Khuzhin).
  • 로컬 연결에서 client_info.interfaceTCP로 설정되던 문제를 수정했습니다. #91933 (Konstantin Bogdanov).
  • ACME 클라이언트 구성에서 refresh_certificates_task_interval 매개변수는 이제 초 단위 값을 받습니다. #92211 (Konstantin Bogdanov).
  • system.*_log에 대한 파트 이벤트를 system.part_log에 기록합니다. #92217 (Azat Khuzhin).

버그 수정(공식 안정 릴리스에서 사용자에게 드러나는 오동작)

  • TimeTime64 데이터 타입의 상위 타입과 관련된 PREWHERE 버그 일부를 수정합니다. #84544를 해결합니다. #84715 (Yarik Briukhovetskyi).
  • 사용자 정의 설정이 반영되도록 DNSResolver를 사용하기 전에 초기화합니다. #76296를 수정했습니다. #81302 (Zhigao Hong).
  • 일부 경우 이름에 점이 포함된 컬럼에서 서브컬럼을 읽지 못하던 문제를 수정했습니다. #81261, #82058, #88169을 해결합니다. #87205 (Pavel Kruglov).
  • 리터럴이 아닌 매개변수에서 발생하던 GenerateRandom 엔진 충돌 수정: LOGICAL_ERROR 대신 명확한 메시지와 함께 BAD_ARGUMENTS를 반환합니다. #88157 (Shafi Ahmed).
  • UNION이 있는 경우 사용되지 않는 프로젝션 컬럼이 제거되던 문제를 수정했습니다. #88180 문제를 해결했습니다. #88350 (Sema Checherinda).
  • 기본 키(primary key)가 내림차순으로 정렬된 경우 JOIN 최적화에서 발생하던 잘못된 세그먼트 분할을 수정했습니다. #88512을 해결합니다. #88794 (Amos Bird).
  • s3queue_keeper_fault_injection_probablility를 다시 활성화하고 관련 문제를 수정했습니다. #88800 (Kseniia Sumarokova).
  • TTL에서 컬럼이 조기에 제거되어 발생한 여러 문제를 수정했습니다. #88002를 해결합니다. #88860 (Amos Bird).
  • temporary_files_buffer_size가 0으로 설정된 경우 예외를 발생시킵니다. #88900을 해결합니다. #88917 (Vladimir Cherkasov).
  • 프레디케이트에 NULL 상수가 포함된 경우 Set 인덱스 분석 중 발생하던 Bad get 오류를 수정했습니다. 이 수정으로 #84856#82974가 해결됩니다. #89429 (Nikolai Kochetov).
  • Cannot add subcolumn X.Y: column with this name already exists 오류를 수정했습니다. #89599를 해결했습니다. #89602 (Azat Khuzhin).
  • 잘못된 결과가 발생하던 theilsUcontingency 함수의 버그를 수정했습니다. #89760 (Nihal Z. Miaji).
  • Alias 안정성 문제를 수정했습니다: SharedDatabaseCatalog의 StrictnessLevel을 수정하고, 대상도 별칭(alias)인 경우를 허용하지 않으며, 추가 인터페이스(getSerializationHints, supportsReplication, getStoragePolicy, totalBytesUncompressed, lifetimeRows, lifetimeBytes, storesDataOnDisk, tryLockForShare, lockForShare)를 구현했습니다. #89106을 해결합니다. #89812 (Kai Zhu).
  • ARRAY JOININ 내부에 있고 enable_lazy_columns_replication 설정이 활성화된 경우, 원격 쿼리 실행 중 발생할 수 있는 크래시를 수정했습니다. #90361을 해결합니다. #89997 (Pavel Kruglov).
  • 여러 조인을 사용할 때 analyzer_compatibility_join_using_top_level_identifier와 관련해 발생할 수 있는 논리적 오류를 수정했습니다. #90010 (Vladimir Cherkasov).
  • 일부 경우 텍스트 형식에서 String으로부터 잘못된 DateTime64 값을 추론하던 문제를 수정했습니다. #89368을 해결합니다. #90013 (Pavel Kruglov).
  • 집계 상태 및 기타 소스의 데이터를 역직렬화할 때 크기를 검사합니다. #90031 (Raúl Marín).
  • 콜드 볼륨에서 TTL 삭제 머지를 수행할 수 있도록 볼륨 특성에 따라 파트 범위를 분할합니다. 이 패치 이후에는 최대 TTL이 현재 시각보다 이른 파트가 콜드 스토리지에서 제거됩니다. 이 알고리즘은 단일 파트 삭제만 스케줄합니다. #90059 (Mikhail Artemenko).
  • Kafka table이 kafka_handle_error_mode = 'dead_letter_queue' 설정으로 생성되었고 system.dead_letter_queue table이 구성되지 않은 경우, server가 충돌할 수 있었습니다. 이 동작은 수정되었습니다. #87573를 해결합니다. #90064 (Nikita Mikhaylov).
  • ARRAY JOIN을 사용하고 enable_lazy_columns_replication 설정이 활성화된 상태에서 삽입 중 발생할 수 있는 Column with Array type is not represented by ColumnArray column: Replicated 오류를 수정했습니다. #90066 (Pavel Kruglov).
  • 잘못된 소멸 순서로 인해 서버를 정상 종료하는 과정에서 발생하던 충돌을 수정했습니다. #82420을 해결합니다. #90076 (Nikita Mikhaylov).
  • numbers 시스템 테이블에서 큰 간격을 사용할 때 발생하던 논리 오류와 나머지 연산 버그를 수정했습니다. #83398를 해결했습니다. #90123 (Nihal Z. Miaji).
  • 네이티브 라이터로 단일 스레드 쓰기를 사용할 때 Parquet 쓰기에서 원래 순서가 유지되지 않던 문제를 수정했습니다. https://github.com/ClickHouse/ClickHouse/pull/64424/files를 부분적으로 되돌립니다. #90126 (Arthur Passos).
  • LIMIT/OFFSET 표현식에는 상수 노드 최적화를 적용하지 않습니다. #89607을 수정했습니다. #90156 (Yakov Olkhovskiy).
  • 25.8에서 원활한 업그레이드를 막던 Hive 파티셔닝 비호환성을 수정했습니다(업그레이드 중 All hive partitioning columns must be present in the schema 오류가 발생하던 문제 해결). #90202 (Kseniia Sumarokova).
  • Glue catalog 사용 시 timestamp 컬럼이 있는 Iceberg table에서 발생하던 JSON Exception을 수정했습니다. #90210을 해결합니다. #90209 (Alsu Giliazova).
  • part에 있는 행 수가 index_granularity보다 적을 때 MergeTreeReaderIndex에서 발생하는 행 수 불일치를 수정합니다. #89691을 해결합니다. #90254 (Peng Jian).
  • nan/inf가 무한히 발생하는 WITH FILL 쿼리를 수정했습니다. #69261을 해결합니다. #90255 (Konstantin Bogdanov).
  • query_plan_use_logical_join_step=0 및 JOIN ON에 잔여 조건이 있는 경우 발생하는 ‘column not found’ 오류를 수정했습니다. #88635를 해결합니다. #90279 (Vladimir Cherkasov).
  • 집계 프로젝션 최적화와 관련된 일부 쿼리를 수정했습니다. #90288 (János Benjamin Antal).
  • 컴팩트 파트에서 JSON 서브컬럼을 읽을 때 CANNOT_READ_ALL_DATA 오류가 발생할 수 있던 버그를 수정했습니다. #90264를 해결합니다. #90302 (Pavel Kruglov).
  • 이제 manifest 파일에 정렬 순서가 지정되지 않았거나 테이블의 default_sort_order와 일치하지 않는 경우, ClickHouse는 Iceberg에 대해 read-in-order 최적화를 사용하지 않습니다. #89178를 수정했습니다. #90304 (alesapin).
  • 이제 Time 및 Time64는 DateTime 및 DateTime64에서 변환할 때 시간대를 올바르게 반영합니다(사용자에게 DateTime[64]로 표시될 때와 동일한 시간대로 시간이 표시되어야 합니다). #89896를 해결합니다. #90310 (Yarik Briukhovetskyi).
  • SELECT CAST(CAST(now(), 'Time'), 'Time64')가 잘못된 결과를 반환하던 버그를 수정했습니다. #88349를 해결합니다. #90324 (Yarik Briukhovetskyi).
  • randomStringUTF8에서 정수 오버플로우로 발생하던 충돌을 수정했습니다. #90326 (Michael Kolupaev).
  • multicluster_root_path를 사용하는 멀티클러스터 환경에서 지연 및 ZooKeeper 업데이트 누락이 발생하지 않도록 클러스터 디스커버리 업데이트 관련 문제를 수정했습니다. #90341 (RinChanNOW).
  • 존재하지 않는 JSON 경로에서 index_granularity_bytes=0일 때 prewhere에서 발생할 수 있는 논리 오류를 수정했습니다. #86924를 해결합니다. #90375 (Pavel Kruglov).
  • precision 인수가 유효 범위를 벗어날 때 충돌을 일으키던 L2DistanceTransposed의 버그를 수정했습니다. #90401을 해결합니다. #90405 (Raufs Dunamalijevs).
  • Array(Dynamic) 인수가 있는 arrayUnion의 잠재적인 논리 오류를 수정했습니다. #90270을 해결합니다. #90409 (Pavel Kruglov).
  • 하나의 ALTER에서 동일한 Nested 컬럼의 이름을 변경하고 수정할 때 발생할 수 있는 논리적 오류를 수정했습니다. #90406을 해결합니다. #90412 (Pavel Kruglov).
  • HTTP 매개변수로 전달된 JSON/Dynamic/Variant 값의 파싱 문제를 수정했습니다. #88925를 해결했습니다. #90430 (Pavel Kruglov).
  • 정적 KeyValuePairExtractor로 인해 동시 파일 읽기 중 데이터 손상이나 크래시가 발생하던 Hive 파티셔닝의 경쟁 상태(race condition)를 수정했습니다. #90474 (Paresh Joshi).
  • 배열 참조 벡터(기본값은 Array(Float64)))를 Float64가 아닌 요소 타입(Float32, BFloat16)의 QBit 컬럼과 함께 사용할 때 L2DistanceTransposed에서 거리 계산이 잘못되던 문제를 수정했습니다. 이제 이 함수는 참조 벡터를 QBit의 요소 타입에 맞게 자동으로 CAST합니다. #89976를 해결합니다. #90485 (Raufs Dunamalijevs).
  • 음수 인수에 대해 toDateTimeOrNull이 NULL을 반환하던 버그를 수정했습니다. #90490 (Yarik Briukhovetskyi).
  • Arrow 포맷으로 LowCardinality(Bool/Date32)를 출력할 때 발생할 수 있는 논리적 오류를 수정했습니다. #83883를 해결합니다. #90505 (Pavel Kruglov).
  • 일부 잘못된 입력에서 IPv4 parsing 함수(예: IPv4StringToNumOrDefault)가 엉뚱한 값을 반환하던 문제를 수정했습니다. #90544를 해결합니다. #87583를 해결합니다. #90545 (Michael Kolupaev).
  • 로컬 호스트 확인 중 주소를 확인할 수 없어 실패하는 경우 markReplicasActive를 재시도하도록 변경했습니다. DDLTask에서 자체 호스트 확인 중 예외가 발생하면 경고 로그를 출력합니다. DDLWorker::markReplicasActive에서는 로컬 호스트를 찾을 수 없지만 cluster에 host ID가 있는 경우, 재시도를 위해 예외를 발생시킵니다. #90556 (Tuan Pham Anh).
  • equals 함수의 드문 사례에서 발생하는 논리 오류를 수정했습니다. #88142를 해결합니다. #90557 (Nihal Z. Miaji).
  • test_ssh/test.py::test_paramiko_password에서 발생하던 Thread 새니타이저 충돌이 해결될 것으로 기대됩니다. #90612 (Govind R Nair).
  • const 비문자열 컬럼을 사용할 때 concatWithSeparator 함수의 논리 오류를 수정했습니다. #90596를 해결합니다. #90655 (Nihal Z. Miaji).
  • INTO OUTFILE 포맷팅을 수정합니다. #90207을 해결합니다. #90656 (Azat Khuzhin).
  • 서브쿼리와 allow_statistics_optimize=1을 사용하는 뮤테이션 실행 중 발생할 수 있는 잠재적 충돌을 수정했습니다. #90626을 해결합니다. #90664 (Azat Khuzhin).
  • LIMIT BYGROUP BY에 없는 컬럼을 사용할 때 NOT_FOUND_COLUMN_IN_BLOCK 대신 올바른 NOT_AN_AGGREGATE 오류가 발생하도록, GROUP BY와 함께 사용되는 LIMIT BY에 대한 분석기 검증을 수정했습니다. #89713을 해결했습니다. #90665 (xiaohuanlin).
  • 파티션 키에서 LowCardinality 컬럼을 사용할 때 발생하던 타입 캐스팅 오류를 수정했습니다. #89412를 해결했습니다. #90666 (xiaohuanlin).
  • 비결정적 함수(예: shardNum())에서 접혀 상수화된 필터 프레디케이트를 포함한 쿼리가 쿼리 조건 캐시를 잘못 사용할 수 있던 문제를 수정했습니다. #90692 (Eduard Karacharov).
  • JOIN ON 절에서 EXISTS 함수가 포함된 쿼리로 인해 발생하던 segfault를 수정했습니다. 이제 해당 쿼리는 INVALID_JOIN_ON_EXPRESSION 오류만 반환합니다. #90698를 종료했습니다. #90719 (Vladimir Cherkasov).
  • 테이블을 지정하지 않고 기본 데이터베이스를 사용할 때 AccessRightsElement에서 발생하는 논리 오류인 ‘Inconsistent AST formatting’을 수정했습니다. #90742 (Pablo Marcos).
  • 대상 호스트로 localhost를 사용하는 remote 테이블 함수를 사용할 때 ALTER UPDATE 쿼리의 접근 권한 검증을 수정했습니다. #90761 (pufit).
  • 이름이 지정된 컬렉션의 숨김 처리된 시크릿이 display_secrets_in_show_and_selectformat_display_secrets_in_show_and_select에 따라 결정되도록 수정했습니다. #90765 (Pablo Marcos).
  • 메모리 누수를 초래하므로 enable_shared_storage_snapshot_in_query를 비활성화했습니다. #90770 (Azat Khuzhin).
  • 병렬 레플리카가 활성화된 상태에서 분산 테이블에 대해 RIGHT JOIN을 사용할 때 발생하던 중복 데이터 문제를 수정했습니다. #90806 (zoomxi).
  • 논리적 오류와 예기치 않은 결과를 초래할 수 있는 JSON의 공유 데이터와 동적 경로에서 발생할 수 있는 불일치 상태를 수정했습니다. #90816 (Pavel Kruglov).
  • SharedCatalog용 CSE에서 dictGet() 및 딕셔너리 이름이 포함된 ALTER MODIFY QUERY 문제를 수정했습니다(Cloud 전용 기능). #90860 (Azat Khuzhin).
  • String 집계 상태의 인메모리 직렬화 호환성을 수정했습니다. 직렬화 방식이 서로 다르면 버전이 다른 인스턴스에서 집계 쿼리를 실행할 때 중복 결과가 발생할 수 있습니다. 새로운 직렬화 방식은 serialize_string_in_memory_with_zero_byte를 사용해 활성화할 수 있습니다. #90880 (Antonio Andelic).
  • INSERT가 빈번할 때 발생하던 Buffer의 백그라운드 플러시 문제를 수정했습니다. #90892 (Azat Khuzhin).
  • system.licenses에 contrib/ 상위 디렉터리를 표시하지 않습니다. #90901 (Raúl Marín).
  • JSON/Dynamic/Variant 컬럼을 읽을 때 발생하던 높은 메모리 사용량 문제를 수정했습니다. #90907 (Pavel Kruglov).
  • base58Decode 함수의 버퍼 할당을 수정했습니다. #90909 (Antonio Andelic).
  • finish=true 플래그가 설정된 응답을 보낸 후 레플리카로부터 또 다른 읽기 요청을 받았을 때 발생할 수 있는 논리적 오류를 수정했습니다. 이는 MergeTreeReadPoolParallelReplicas 내부의 논리적 레이스 컨디션으로 인해 발생할 수 있었지만, 실제로 일어날 가능성은 매우 낮았습니다. #90921 (Nikita Taranov).
  • 부분 REVOKE에 대한 와일드카드 권한 부여 확인을 수정했습니다. 테스트도 추가했습니다. #90922 (pufit).
  • Nested LowCardinality 컬럼에 대한 SummingMergeTree 집계 처리를 수정했습니다. #90927 (Ivan Babrou).
  • 와일드카드 권한 회수 시 전역 권한 처리 수정 와일드카드 권한을 회수할 때 CREATE USER와 같은 일부 전역 권한이 실수로 함께 회수될 수 있는 문제를 수정했습니다. #90928 (pufit).
  • Azure의 blob 목록 조회에서 발생할 수 있는 무한 루프를 수정했습니다. #90947 (Julia Kartseva).
  • 과도한 Buffer 플러시 문제 수정(CPU를 소모하고 로그를 대량으로 생성함). #91000 (Azat Khuzhin).
  • … adaptive_write_buffer_initial_size가 0으로 설정되지 않도록 했습니다. #91001 (Pedro Ferreira).
  • JSON에서 write_marks_for_substreams_in_compact_parts가 비활성화된 Compact 파트의 하위 객체를 읽는 중, 경로가 공유 데이터와 동적 경로 양쪽에 모두 존재할 수 있을 때 발생하던 버그를 수정했습니다. #91014 (Pavel Kruglov).
  • 인수가 없는 dictGet이 포함된 CTE에서 std::out_of_range 오류를 수정했습니다. #91027을 해결합니다. #91022 (Pavel Kruglov).
  • 뮤테이션에서 materialized 컬럼의 동적 서브컬럼을 읽는 문제를 수정했습니다. #90653을 해결했습니다. #91040 (Pavel Kruglov).
  • 빈 배열과 isNull 함수를 사용할 때 arrayFilter 함수가 작동하지 않는 문제를 수정했습니다. #73849를 닫습니다. #91105 (Nihal Z. Miaji).
  • 테이블 컬럼 중 하나가 빈 튜플 컬럼인 경우 ARRAY JOIN의 논리 오류를 수정했습니다. #90801을 해결합니다. #91123 (Nihal Z. Miaji).
  • 오래된 파트에서 alter add column으로 추가된 컬럼의 lazy materialization 문제를 수정했습니다. #91142 (Pavel Kruglov).
  • Summing/Aggregating/Coalescing MergeTree에서 JSON 컬럼 머지 문제를 수정했습니다. 이전에는 데이터 파트에 쓰는 과정에서 예기치 않은 동적 경로가 생성될 수 있었습니다. #91151 (Pavel Kruglov).
  • compact parts에 쓰는 동안 segfault를 유발할 수 있는 동적 구조의 불일치 가능성을 수정했습니다. #91152 (Pavel Kruglov).
  • 과학적 표기법으로 표시된 비정규 부동소수점 값의 파싱을 수정했습니다. #78903을 해결합니다. #91162 (Nihal Z. Miaji).
  • 암시적 스키마를 가진 소스가 포함된 서브쿼리에서 INSERT SELECT를 수행할 때 발생하던 잘못된 스키마 추론을 수정했습니다. #91204 (Pervakov Grigorii).
  • https://github.com/clickhouse/clickhouse/issues/91206 수정: statistics가 있는 테이블을 생성하고 데이터를 쓴 뒤 statistics 하나를 삭제하면, 다시 읽을 때 크래시가 발생하던 문제를 수정했습니다. 이는 serialize와 deserialize에 동일한 타입의 statistics가 있다고 가정했기 때문입니다. 이번 수정에서는 현재 메타데이터에 직렬화된 statistics가 포함되어 있는지 확인하고, 포함되어 있지 않으면 이를 건너뛰기 위해 가짜 statistics를 만들어 deserialize만 수행합니다. #91227 (Han Fei).
  • CoalescingMergeTree에서 JSON/Dynamic 및 LowCardinality의 Tuple을 포함한 컬럼에 삽입할 때 발생하던 문제를 수정했습니다. #91215를 해결합니다. #91270 (Pavel Kruglov).
  • SYSTEM DROP FILESYSTEM CACHE ON CLUSTER 문제를 수정했습니다. #91304 (Anton Ivashkin).
  • 잠재적인 논리 오류 “Bad cast from type DB::ColumnSparse to DB::ColumnNullable”를 수정했습니다. #91284를 해결합니다. #91309 (Pavel Kruglov).
  • 악의적으로 조작된 바이트 스트림이 중첩된 QBit 타입으로 역직렬화될 때 발생하던 크래시를 수정했습니다. 원래는 불가능해야 하지만, 악용되면 서버를 크래시시키는 데 사용될 수 있었습니다. #91313 (Raufs Dunamalijevs).
  • 복제된 데이터베이스에서 빈 인수를 사용하는 Alias 테이블 문제를 수정했습니다. #91378에서 해결되었습니다. #91382 (Kai Zhu).
  • 현재 이 설정은 false이므로 async insert 큐가 원격 서버로 플러시될 때 삽입은 항상 동기식으로 수행됩니다. 사용자별로 이 설정이 True여도 마찬가지입니다. #91386 (Mikhail f. Shiryaev).
  • 머지 알고리즘에서 헤더의 희소 컬럼을 제거했습니다. #91377을 해결했습니다. #91396 (Pavel Kruglov).
  • 25.8의 Hive 파티셔닝 버그를 수정하여 예외 A hive partitioned file can't contain only partition columns가 잘못 발생할 수 있는 문제를 해결했습니다. #91403 (Kseniia Sumarokova).
  • NULL로 인해 발생하던 dictGetDescendants 크래시를 수정했습니다. 이 문제는 딕셔너리 유형이 Hierarchy를 지원하지만 어떤 컬럼도 HIERARCHICAL이 아닐 때 발생했습니다. #92026을 해결했습니다. #92121을 해결했습니다. #91420 (Nihal Z. Miaji).
  • 람다와 비상수 튜플 인수를 사용할 때 IN 함수가 충돌하던 문제를 수정했습니다. #91379를 해결합니다. #91446 (Nihal Z. Miaji).
  • 이를 지원하지 않는 스토리지에 MaterializedView 삽입이 발생할 때 트리거되던 병렬 쓰기 문제를 수정했습니다. #91449 (Pervakov Grigorii).
  • Ytsaurus XML dictionaries의 NULL 값을 처리합니다. #91465 (MikhailBurdukov).
  • SET param_q=[1,2,3,4]; SELECT {q:QBit(Float32,4)}와 같은 쿼리 매개변수 사용 시 QBit 유형에서 실패하던 문제를 수정했습니다. #91488 (Raufs Dunamalijevs).
  • 상수 표현식에서 untuple 사용 시 발생하는 LOGICAL_ERROR를 수정했습니다. #91507 (Pervakov Grigorii).
  • librdkafka에서 발생할 수 있는 데이터 레이스 문제를 수정했습니다. #91521 (János Benjamin Antal).
  • remote 함수의 별표(*) 인수로 인해 발생한 논리 오류를 수정했습니다. #90568을 해결합니다. #91524 (Nihal Z. Miaji).
  • ORC 포맷에서 Date 및 DateTime64 타입을 읽는 중 발생하던 오버플로우를 수정합니다. #70976를 해결합니다. #91572 (Yarik Briukhovetskyi).
  • 객체 스토리지 테이블 엔진에서는 ALTER를 허용하지 않습니다. 예를 들어, 객체 스토리지 엔진은 프로젝션을 지원하지 않으므로 ALTER ADD PROJECTION을 사용하면 서버를 다시 시작하지 못할 수 있었습니다. #91573 (Nikolay Degterinsky).
  • 비상수 참조 벡터(예: table에서 가져온 벡터)를 사용할 때 L2DistanceTransposed가 잘못된 결과를 반환하던 문제가 수정되었습니다. #91517. #91593 (Raufs Dunamalijevs).
  • FALSE 조건의 조인이 디스패치 단계에서 LOGICAL_ERROR를 반환하던 버그를 수정합니다. 관련 이슈 #91173를 해결합니다. #91598 (Yarik Briukhovetskyi).
  • “additional filter”가 있는 join에서 메모리 사용량이 증가하던 문제를 수정하고, #91011을 해결했습니다. #91664 (Vladimir Cherkasov).
  • 뷰가 있고 병렬 레플리카가 활성화된 JOIN 쿼리의 문제를 수정했습니다. #91813 (Igor Nikonov).
  • 이전에 snapshot version을 사용한 적이 있는 경우, delta lake 설정 delta_lake_snapshot_version을 테이블 엔진(테이블 함수 아님)에서 값 -1(비활성화)과 함께 사용할 때 잘못된 결과를 반환할 수 있던 문제를 수정했습니다. #87676를 종료합니다. #91818 (Kseniia Sumarokova).
  • RecursiveCTEChunkGenerator의 LOGICAL_ERROR를 수정했습니다. #91827 (Pablo Marcos).
  • FINAL 및 PREWHERE를 사용하는 쿼리의 블록 구조 불일치를 수정했습니다. #91847 (Antonio Andelic).
  • join_use_nulls, 여러 조인 및 cross join과 관련된 논리 오류를 수정했습니다. #91853 (Vladimir Cherkasov).
  • https://github.com/ClickHouse/ClickHouse/pull/90816에서 수정된 버그로 인해 발생할 수 있었던, 공유 데이터와 동적 경로에 중복된 경로가 있는 JSON을 복구하는 메커니즘을 추가했습니다. #91886 (Pavel Kruglov).
  • DICTIONARY_V2로 인코딩되고 NULL 값만 포함한 문자열 컬럼을 읽을 때 발생하는 ORC 리더 버그를 수정했습니다. #91889 (Peng Jian).
  • Tuple 컬럼의 희소 하위 스트림과 널 허용 하위 스트림 간 직렬화 불일치를 수정하여, 읽는 중 파트가 손상되거나 충돌이 발생할 수 있는 문제를 해결했습니다. 이 수정은 https://github.com/ClickHouse/ClickHouse/pull/91851 을 해결합니다. @Algunenano 비공개 리포지토리의 스트레스 테스트 문제도 이 수정으로 해결되는지 확인 부탁드립니다. @CurtizJ 이 부분도 함께 검토 부탁드립니다. 감사합니다. #91932 (Amos Bird).
  • 일반적인 재기록 가능 디스크에서 백업을 생성할 때 Directory '{}' does not exist (LOGICAL_ERROR) 오류가 발생하던 문제를 수정했습니다. #91935 (Julia Kartseva).
  • 이름이 지정된 컬렉션을 사용해 MongoDB에 연결할 때 비정상 종료가 발생하지 않도록 했습니다. #91959 (Antonio Andelic).
  • 일부 ALTER 쿼리 이후 compact 파트에서 발생할 수 있었던 “TOO_MANY_MARKS” 오류를 수정했습니다. #91980 (alesapin).
  • https://github.com/clickhouse/clickhouse/issues/87417을 종료합니다. v1 포맷의 쓰기 스키마(schema)에 오류가 있습니다. 필수 항목이므로 “added_snapshot_id”의 유형은 “null, long”이 아니라 “long”이어야 합니다. spark와 같은 다른 시스템과 호환되지 않으므로 버그에 해당합니다. 해당 manifest 파일들을 혼합하면 이 버그가 발생합니다. #92078 (Han Fei).
  • 이전 버전에서 스타일이 잘못 적용되었던 readWKT, readWKB의 이름을 수정했습니다. #92094 (Alexey Milovidov).
  • midpoint 함수의 여러 논리 오류, 오버플로우 및 기능상 버그를 수정합니다. #91816을 해결합니다. #92102 (Nihal Z. Miaji).
  • 희소 인코딩으로 저장된 특정 서브컬럼(예: 문자열 크기)을 읽을 때 발생할 수 있던 잘못된 결과를 수정했습니다. #92156 (Pavel Kruglov).
  • 오류 No macro 'replica' in config로 인해 system.view_refreshes가 실패하던 문제를 수정했습니다. #92203 (Michael Kolupaev).
  • 포맷에서 UDF 대체 문제를 수정했습니다. #92210 (Raúl Marín).
  • ddlworker::markreplicasactive에서 활성 상태인 호스트를 찾지 못했지만 remote_servers에 일부 host_ids가 있는 경우, 예외를 발생시키는 대신 경고 로그를 출력합니다. #92223 (Tuan Pham Anh).
  • IN, NOT IN 연산자를 괄호로 둘러싸도록 했습니다. #85075를 수정했습니다. #92225 (Mikhail f. Shiryaev).
  • KeeperMap 및 Memory 테이블 백업 관련 문제를 수정했습니다. max_compress_block_size0으로 설정된 상태에서 이 두 엔진 중 하나를 사용하는 테이블의 백업을 생성하면 충돌이 발생할 수 있었습니다. #92237 (Antonio Andelic).
  • String 데이터와 Log 엔진의 .size 서브컬럼을 함께 읽을 때 발생하는 크래시를 수정했습니다. 이 수정은 #89909를 해결합니다. #92290의 일부 커밋도 포함되어 있습니다. #92341 (Amos Bird).
  • caseWithExpression 함수 인수에서 Nothing 타입을 사용해 발생하던 논리 오류를 수정했습니다. #85354를 해결합니다. #92351 (Nihal Z. Miaji).
  • MEMORY_LIMIT_EXCEEDED 이후 집계 함수에서 발생할 수 있는 비정상 종료 문제를 수정했습니다. #92390 (Azat Khuzhin).

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

ClickHouse 릴리스 25.11, 2025-11-27

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

  • 사용 중단된 Object 타입을 제거했습니다. #85718 (Pavel Kruglov).
  • 더 이상 사용되지 않는 LIVE VIEW 기능을 제거했습니다. LIVE VIEW를 사용 중이면 새 버전으로 업그레이드할 수 없습니다. #88706 (Alexey Milovidov).
  • 이전 버전에서는 Geometry 타입이 String의 alias였지만, 이제는 완전한 기능을 갖춘 타입이 되었습니다. #83344 (scanhex12).
  • MergeTree 테이블의 Wide 데이터 파트에서 Variant 타입 서브컬럼용으로 생성되는 파일 이름을 이스케이프하도록 변경했습니다. 이 변경으로 Variant/Dynamic/JSON 데이터 타입을 사용하는 기존 테이블과의 호환성이 깨집니다. 이 수정으로 Variant 내부에 특수 문자가 포함된 타입(예: \가 포함된 특정 시간대의 DateTime)을 저장할 수 있습니다. MergeTree 설정 escape_variant_subcolumn_filenames를 변경하면 이스케이프를 비활성화할 수 있습니다(호환성을 유지하려면 업그레이드 전에 MergeTree 구성에서 이 설정을 비활성화하거나 compatibility 설정을 이전 버전으로 지정하십시오). #69590을 해결합니다. #87300 (Pavel Kruglov).
  • String 데이터 타입에 대해 with_size_stream serialization 포맷을 기본적으로 활성화합니다. 이 변경은 하위 호환되지만, 새 serialization 포맷은 25.10 버전부터만 지원되므로 25.10 이전 버전으로는 다운그레이드할 수 없습니다. 25.9 및 그 이전 버전으로 다운그레이드할 가능성을 유지하려면 서버 구성의 merge_tree 섹션에서 serialization_info_versionbasic으로, string_serialization_versionsingle_stream으로 설정하십시오. #89329 (Alexey Milovidov).
  • 클라이언트가 예외를 더 안정적으로 parse할 수 있도록 HTTP 결과 응답에 대한 예외 태깅을 지원합니다. #75175를 해결합니다. 포맷 간 일관성을 위해 http_write_exception_in_output_format 설정은 기본적으로 비활성화되어 있습니다. #88818 (Kaviraj Kanagaraj). 기존 동작이 깨질 가능성은 없지만(최악의 경우 예외 메시지에 이상한 문자열이 추가되는 정도입니다), 일부 부실한 스크립트가 예외 메시지를 어떻게 parse할지 알 수 없으므로 주의를 환기하는 차원에서 changelog 카테고리를 “Backward Incompatible Change”로 두는 것이 여전히 타당합니다.
  • 공유 객체 스토리지 경로 위에 여러 개의 plain-rewritable 디스크를 생성하지 못하도록 했습니다. 서로 다른 메타데이터 스토리지 transaction이 충돌할 때 정의되지 않은 동작이 발생할 수 있기 때문입니다. #89038 (Mikhail Artemenko).
  • Kafka 스토리지의 SASL 설정 우선순위를 수정했습니다. 이제 CREATE TABLE 쿼리에서 지정한 테이블 수준 SASL 설정이 설정 파일의 consumer/producer별 설정보다 올바르게 우선 적용됩니다. #89401 (János Benjamin Antal).
  • 이제 시간대가 없는 Parquet timestamp(isAdjustedToUTC=false)는 DateTime64(…)가 아니라 DateTime64(…, ‘UTC’)로 읽습니다. 이렇게 하면 해당 UTC timestamp를 문자열로 변환할 때 올바른 로컬 시간 표현이 생성되므로, 이전보다 덜 부정확합니다. 이전 동작을 사용하려면 input_format_parquet_local_time_as_utc = 0을 사용하십시오. #87469를 해결합니다. #87872 (Michael Kolupaev).
  • T64 코덱에 대한 소규모 개선입니다. 이제 압축 요소 크기에 맞게 정렬되지 않은 데이터 타입은 허용하지 않으며, 그렇지 않으면 버그가 발생합니다. #89282를 해결합니다. #89432 (yanglongwei).

새 기능

  • Geometry 유형을 도입했습니다. 이 유형에서 WKBWKT 포맷 읽기를 지원합니다. 이전 버전에서는 Geometry 유형이 String의 별칭이었지만, 이제는 완전한 기능을 갖춘 유형이 되었습니다. #83344 (scanhex12).
  • 사용자 가장을 지원하는 새로운 SQL 문 EXECUTE AS를 추가했습니다. #39048을 해결했습니다. #70775 (Shankar).
  • ngram 기반 Naive Bayes를 사용해 텍스트를 분류하는 naiveBayesClassifier 함수를 추가했습니다. #88677 (Nihal Z. Miaji).
  • 테이블의 일부 비율을 선택할 수 있도록 분수형 LIMITOFFSET 지원을 추가했습니다. #81892를 해결합니다. #88755 (Ahmed Gouda).
  • Microsoft OneLake catalog용 ClickHouse 서브시스템. #89366 (scanhex12).
  • 배열에서 필요한 수의 차원을 언래핑하고 Tuple 컬럼 내부의 포인터를 스왑하는 flipCoordinates 함수를 추가했습니다. #79469을 해결했습니다. #79634 (Sachin Kumar Singh).
  • 유니코드 문자 목록과 각 문자의 속성을 포함하는 system.unicode 테이블을 추가했습니다. #80055를 해결합니다. #80857 (wxybear).
  • 머지 후 Wide part에서 데이터 타입에 지정된 매개변수와 관계없이 동적 서브컬럼 수를 제한할 수 있도록 새로운 MergeTree setting merge_max_dynamic_subcolumns_in_wide_part를 추가했습니다. #87646 (Pavel Kruglov).
  • cume_dist 윈도 함수 지원이 추가되었습니다. #86920을 해결합니다. #88102 (Manuel).
  • 이제 text index를 생성할 때 새 인수 preprocessor를 추가할 수 있습니다. 이 인수는 토큰화 전에 각 문서를 변환하는 임의의 표현식입니다. #88272 (Jimmy Aguilar Mena).
  • X-ClickHouse-ProgressX-ClickHouse-Summarymemory_usage 필드를 추가합니다. 이를 통해 클라이언트 측에서 쿼리의 메모리 사용량을 실시간으로 수집할 수 있습니다. #88393 (Christoph Wurm).
  • INTO OUTFILE용 설정 into_outfile_create_parent_directories를 추가해, 출력 경로가 없을 때 상위 디렉터리를 자동으로 생성하여 오류를 방지합니다. 이를 통해 쿼리 결과를 중첩 디렉터리에 기록하는 워크플로를 간소화할 수 있습니다. #88610을 해결합니다. #88795 (Saksham).
  • 임시 테이블에서 CREATE OR REPLACE 구문을 지원합니다. #35888를 해결합니다. #89450 (Aleksandr Musorin).
  • 배열 arr에서 elem와 같은 모든 요소를 제거하는 arrayRemove가 지원됩니다. 이는 Postgres 호환성을 위해서만 필요하며, ClickHouse에는 이미 훨씬 더 강력한 arrayFilter 함수가 있기 때문입니다. #52099를 해결합니다. #89585 (tiwarysaurav).
  • 평균을 계산하는 midpoint 스칼라 함수를 추가했습니다. #89029을 해결했습니다. #89679 (simonmichal).
  • 이제 Web UI에 다운로드 버튼이 제공됩니다. UI에 결과의 일부만 표시되어도 전체 결과를 다운로드할 수 있습니다. #89768 (Alexey Milovidov).
  • Dremio 및 명령형 디스크립터가 필요한 기타 Arrow Flight 서버를 지원하도록 arrow_flight_request_descriptor_type 설정을 추가합니다. #89523를 구현합니다. #89826 (Shreyas Ganesh).
  • 인수와 해당 극값을 반환하는 새로운 집계 함수 argAndMinargAndMax가 추가되었습니다. 이전 버전에서도 인수로 튜플을 사용해 동일한 작업을 수행할 수 있었습니다. #89884 (AbdAlRahman Gad).
  • Parquet 체크섬을 기록하고 검증하기 위한 설정. #79012 (Michael Kolupaev).
  • 메시지 페이로드를 파싱하기 전에 엔벌로프 헤더 바이트(예: AWS Glue Schema Registry의 19바이트 prefix)를 건너뛸 수 있도록 kafka_schema_registry_skip_bytes 설정이 Kafka 테이블 엔진에 추가되었습니다. 이를 통해 ClickHouse는 메타데이터 헤더를 추가하는 스키마 레지스트리의 메시지를 소비할 수 있습니다. #89621 (Taras Polishchuk).
  • geometry를 H3 육각형으로 채울 수 있는 h3PolygonToCells 함수를 추가했습니다. #33991을 해결했습니다. #66262 (Zacharias Knudsen).
  • S3의 blob과 연결된 모든 태그를 포함하는 새로운 가상 컬럼 _tags (Map(String, String))을 추가했습니다(참고: blob에 태그가 없으면 추가 요청을 수행하지 않습니다). #72945를 해결했습니다. #77773 (Zicong Qu).

실험적 기능

  • Let’s Encrypt와 같은 ACME 제공자에서 RFC 8555 기반 TLS 인증서를 가져오는 기능을 지원합니다. 이를 통해 분산 클러스터에서 TLS를 자동으로 구성할 수 있습니다. #66315 (Konstantin Bogdanov).
  • Prometheus HTTP Query API의 일부를 지원합니다. 이를 활성화하려면 설정 파일의 <prometheus> 섹션에 유형이 query_api인 규칙을 추가하십시오. 지원되는 핸들러는 /api/v1/query_range/api/v1/query입니다. #86132 (Nikita Mikhaylov).
  • 전문 검색이 이제 베타입니다(이전에는 실험 단계였음). #88928 (Robert Schulze).
  • Alias가 실험 상태로 전환되었으며, allow_experimental_alias_table_engine = 1로 활성화할 수 있습니다. #89712 (Kai Zhu).

성능 개선

  • Parquet 리더 v3는 기본적으로 활성화되어 있습니다. #88827 (Michael Kolupaev).
  • 분산 실행: 파일이 아니라 row group ID를 기준으로 작업을 분할하도록 개선되었습니다. #87508 (scanhex12).
  • 이제 RIGHTFULL JOIN에 ConcurrentHashJoin이 사용됩니다. 즉, 이러한 조인 유형이 더 높은 수준의 병렬성으로 실행됩니다. 다양한 RIGHTFULL JOIN 사례에서 성능이 최대 2배 향상됩니다. #78027을 해결합니다. #78462 (Yarik Briukhovetskyi).
  • 쿼리에서 상수 표현식의 값이 큰 경우를 위한 최적화입니다. #72880를 해결합니다. #81104 (Yakov Olkhovskiy).
  • 1만 개 이상의 파트가 있는 테이블에서 파티션 프루닝이 많이 발생하는 SELECT 쿼리가 최대 8배 빨라졌습니다. #85535 (James Morrison).
  • 쿼리가 집계 상태에 고정 hash 맵을 사용하는 경우(작은 정수로 group by하는 경우), ClickHouse는 쿼리 속도를 높이기 위해 집계 상태를 병렬로 머지합니다. #87366 (Jianfei Hu).
  • _part_offset를 SELECT하고 서로 다른 ORDER BY를 사용하는 프로젝션을 보조 인덱스로 사용할 수 있도록 했습니다. 이 기능을 활성화하면 특정 쿼리 프레디케이트를 사용해 프로젝션 파트에서 데이터를 읽고 비트맵을 생성하여 PREWHERE 단계에서 행을 효율적으로 필터링할 수 있습니다. 이는 #80343에 이어 프로젝션 인덱스를 구현하는 세 번째 단계입니다. #81021 (Amos Bird).
  • 드문 Aarch64 시스템 및 기타 일부 아키텍처/커널 조합에서 발생할 수 있는 VDSO 문제를 수정했습니다. #86096 (Tomas Hulata).
  • 코드를 단순화하고 선택 알고리즘을 조정해 LZ4 압축 해제 속도를 개선했습니다. #88360 (Raúl Marín).
  • S3는 키 이름 프리픽스를 기준으로 내부적으로 객체를 파티셔닝하며, 각 파티션에서 높은 요청률까지 자동으로 확장됩니다. 이 변경으로 두 개의 새로운 BACKUP 설정인 data_file_name_generator와 data_file_name_prefix_length가 도입되었습니다. data_file_name_generator=checksum인 경우, 백업 데이터 파일 이름은 내용의 해시를 사용해 지정됩니다. 예시: checksum = abcd1234ef567890abcd1234ef567890이고 data_file_name_prefix_length = 3이면 결과 경로는 abc/d1234ef567890abcd1234ef567890가 됩니다. 이렇게 생성된 키 분포는 S3 파티션 전반의 부하 분산을 개선하고 스로틀링 위험을 줄입니다. #88418 (Julia Kartseva).
  • 딕셔너리 블록을 캐시하고, 토큰 조회에 이진 검색 대신 해시 테이블을 사용해 텍스트 인덱스 성능을 개선했습니다. #88786 (Elmi Ahmadov).
  • 이제 쿼리에서 optimize_read_in_orderquery_plan_optimize_lazy_materialization을 동시에 활용할 수 있습니다. #88767을 해결했습니다. #88866 (Manuel).
  • DISTINCT가 포함된 쿼리에 집계 프로젝션을 사용합니다. #86925를 해결합니다. #88894 (Nihal Z. Miaji).
  • 포스팅 리스트를 캐싱해 연속 실행 시 성능을 개선했습니다. #88912 (Elmi Ahmadov).
  • 입력 정렬 순서가 LIMIT BY 키와 일치할 때는 streaming LIMIT BY 변환을 실행합니다. #88969 (Eduard Karacharov).
  • 일부 경우 ANY LEFT JOIN 또는 ANY RIGHT JOINALL INNER JOIN으로 재작성할 수 있도록 허용했습니다. #89403 (Dmitry Novik).
  • 로깅 오버헤드를 줄였습니다. 항목당 사용하는 원자적 연산 수를 줄였습니다. #89651 (Sergei Trifonov).
  • 여러 조인과 여러 런타임 필터가 있는 쿼리에서 런타임 필터가 활성화된 경우, 새로 추가된 필터 단계의 pushdown을 다른 단계보다 우선 적용합니다. #89725 (Alexander Gololobov).
  • 해시 테이블 병합 오버헤드를 줄여 일부 uniqExact 작업을 약간 더 빠르게 수행할 수 있도록 개선했습니다. #89727 (Raúl Marín).
  • lazy materialization의 행 수 제한을 10에서 100으로 늘렸습니다. #89772 (Alexey Milovidov).
  • 기본적으로 allow_special_serialization_kinds_in_output_formats 설정이 활성화됩니다. 일부 행 출력 포맷에서 Sparse/Replicated 컬럼을 출력할 때 메모리 사용량이 줄고 쿼리 속도가 향상됩니다. #89402 (Pavel Kruglov).
  • ALTER TABLE ... FREEZE 쿼리에 병렬 실행이 추가되었습니다. #71743 (Kirill).
  • bcrypt 인증용 캐시를 추가했습니다. #87115 (Nikolay Degterinsky).
  • FINAL 쿼리에서 사용되는 스킵 인덱스가 프라이머리 키(primary key)의 일부인 컬럼에 있을 경우, 다른 파트에서 프라이머리 키 교집합을 확인하는 추가 단계는 불필요하므로 이제 수행하지 않습니다. #85897를 해결합니다. #88368 (Shankar Iyer).
  • 최적화 enable_lazy_columns_replication이 이제 기본값으로 설정되어, 조인 시 메모리 사용량을 절감할 수 있습니다. #89316 (Alexey Milovidov).
  • 파트용 ColumnsDescription의 테이블별 캐시를 도입하여, 테이블에 파트와 컬럼이 많은 경우 메모리 사용량을 줄였습니다. #89352 (Azat Khuzhin).
  • I/O를 줄이고 쿼리 성능을 개선하기 위해 텍스트 인덱스의 역직렬화된 헤더용 캐시를 도입했습니다. 이 캐시는 새로운 서버 설정을 통해 구성할 수 있습니다: - text_index_header_cache_policy - text_index_header_cache_size - text_index_header_cache_max_entries - text_index_header_cache_size_ratio. #89513 (Elmi Ahmadov).

개선 사항

  • UNIONuse_variant_as_common_type가 설정된 경우 필요하면 Variant로 타입을 통일해야 합니다. #82772를 해결합니다. #83246 (Mithun p).
  • 이제 users.xml에 정의된 사용자에게 SQL에서 정의한 역할을 부여할 수 있습니다. #88139 (c-end).
  • 딕셔너리, 갱신 가능 구체화 뷰 등에서 실행되는 내부 쿼리를 기록하고, system.query_log에 새 is_internal 컬럼을 추가했습니다. #83277 (Miсhael Stetsyuk).
  • 개선된 IS NOT DISTINCT FROM (<=>) 연산자: 역방향 IS DISTINCT FROM 지원이 추가되었으며, 서로 다른 타입의 호환 가능한 숫자 피연산자(예: Nullable(UInt32)Nullable(Int64))도 지원합니다. #86763를 해결합니다. #87581 (yanglongwei).
  • clickhouse-clientclickhouse-local의 interactive mode에서는 명령줄에서 커서가 위치한 현재 식별자와 같은 이름의 식별자가 강조 표시됩니다. #89689 (Alexey Milovidov).
  • 이제 출력 형식 관련 설정은 쿼리 캐싱에 영향을 주지 않습니다. 또한 쿼리 캐싱은 http_response_headers 설정도 무시합니다. 이는 Web UI에서 캐시된 결과를 다운로드하는 기능 등을 구현할 수 있도록 하기 위해 필요합니다. #89756 (Alexey Milovidov).
  • 쿼리 결과 캐시가 사용되면 HTTP 인터페이스는 AgeExpires 헤더를 반환합니다. Age 헤더가 있으면 결과가 캐시에서 온 것인지 알 수 있으며, Expires는 최초 쓰기 시에도 설정됩니다. 새로운 프로필 이벤트가 도입되었습니다: QueryCacheAgeSeconds, QueryCacheReadRows, QueryCacheReadBytes, QueryCacheWrittenRows, QueryCacheWrittenBytes. #89759 (Alexey Milovidov).
  • disable_insertion_and_mutation이 활성화된 경우(즉, ClickHouse Cloud의 읽기 전용 웨어하우스인 경우)에도 원격 테이블과 데이터 레이크 테이블에 삽입할 수 있도록 허용합니다. #88549 (Alexander Tokmakov).
  • 쿼리 SYSTEM DROP TEXT INDEX CACHES가 추가되었습니다. #90287 (Anton Popov).
  • 더 나은 일관성 보장을 위해 기본적으로 enable_shared_storage_snapshot_in_query를 활성화합니다. 단점은 없을 것입니다. #82634 (Alexey Milovidov).
  • profile events를 사용하지 않을 때 클라이언트가 네트워크 트래픽을 줄일 수 있도록 send_profile_events 설정이 추가되었습니다. #89588 (Kaviraj Kanagaraj).
  • 쿼리별로 인접한 세그먼트의 백그라운드 다운로드를 비활성화할 수 있게 했습니다. #89524를 수정했습니다. #89668 (tanner-bruce).
  • 복제된 MergeTree 테이블에 손상된 디스크가 있어도 FETCH PARTITION을 허용합니다. #58663 (Duc Canh Le).
  • MySQL 데이터베이스 엔진에서 MySQL 테이블 스키마를 가져오는 중 처리되지 않은 예외가 발생하던 문제를 수정했습니다. #69358 (Duc Canh Le).
  • 이제 모든 DDL ON CLUSTER 쿼리는 접근 권한을 더 정확히 검증할 수 있도록 원래 쿼리를 실행한 사용자의 컨텍스트에서 실행됩니다. #71334 (pufit).
  • UUID 논리 유형을 사용하는 FixedString(16)로 표현된 경우 Parquet에서 UUID 지원이 추가되었습니다. #74484 (alekseev-maksim).
  • 기본적으로 서버용이 아닌 바이너리에서 ThreadFuzzer를 비활성화합니다. #89115 (Raúl Marín).
  • 머티리얼라이즈 시점을 늦춰 쿼리 계획 최적화가 상관 서브쿼리 입력 서브플랜에도 반영되도록 합니다. #79890의 일부입니다. #85455 (Dmitry Novik).
  • clickhouse-client에서 SELECT를 포함한 CREATE OR REPLACE TABLE 쿼리에 대해 진행률 표시줄, logs 및 성능 통계를 확인할 수 있습니다. SELECT에 상당한 시간이 걸리더라도 이제 이 쿼리에서는 timeout이 발생하지 않습니다. #38416을 해결했습니다. #87247 (Diskein).
  • 해시 함수에서 JSONDynamic 타입을 지원하도록 했습니다. #87734 문제를 해결했습니다. #87791 (Pavel Kruglov).
  • ArrowFlight 서버의 누락된 부분을 구현했습니다. #88013 (Vitaly Baranov).
  • 서버와 Keeper에 여러 개의 히스토그램 메트릭을 추가하여 Keeper 요청 실행 단계의 소요 시간을 계측합니다. 다음 메트릭이 서버에 추가됩니다: keeper_client_queue_duration_milliseconds, keeper_client_send_duration_milliseconds, keeper_client_roundtrip_duration_milliseconds. 다음 메트릭이 Keeper에 추가됩니다: keeper_server_preprocess_request_duration_milliseconds, keeper_server_process_request_duration_milliseconds, keeper_server_queue_duration_milliseconds, keeper_server_send_duration_milliseconds. #88158 (Miсhael Stetsyuk).
  • 각 단계에 입력 헤더를 추가할 수 있도록 EXPLAIN 쿼리에 input_headers 옵션을 추가했습니다. #88311 (János Benjamin Antal).
  • 스로틀러에 의해 지연된 S3 및 AzureBlobStorage 요청 수를 집계하는 profile events를 추가합니다. 디스크 관련 ThrottlerCount profile events와 비디스크 관련 ThrottlerCount profile events 간의 불일치를 수정합니다. 이제 AzureBlobStorage HTTP DELETE 요청에는 스로틀링이 적용되지 않습니다. #88535 (Sergei Trifonov).
  • 테이블 수준 통계에 대한 캐시를 도입하고, 2개의 설정을 추가했습니다. MergeTree 설정 refresh_statistics_interval은 통계 캐시의 갱신 인터벌을 의미하며, 0이면 캐시를 생성하지 않습니다. 세션 설정 use_statistics_cache는 쿼리에서 테이블 수준 통계를 사용할지 여부를 의미합니다. 더 나은 통계가 필요할 때는 이를 무시하도록 선택할 수도 있습니다. #88670 (Han Fei).
  • ArrayMap의 바이너리 역직렬화에서 크기 제한을 검증할 때 max_binary_string_size 대신 max_binary_array_size 설정을 사용하도록 수정했습니다. 이렇게 하면 RowBinary 포맷으로 읽을 때 올바른 제한이 적용됩니다. #88744 (Raufs Dunamalijevs).
  • LockGuardWithStopWatch 클래스를 도입하고, 머지를 실행하는 background pool에서 사용하도록 했습니다. 뮤텍스가 1초 동안 잠긴 상태로 유지되거나 어떤 스레드가 1초 안에 이를 획득하지 못해 대기하는 경우 경고 메시지가 출력됩니다. MergeTreeBackground 실행기에서 잠금을 너무 오래 잡고 있지 않도록 MergeMutateSelectedEntry의 destructor에 있던 무거운 코드를 finalize 메서드로 옮겼습니다. #88898 (Nikita Mikhaylov).
  • 엔드포인트에 리전이 지정되지 않은 경우 S3에서 opt-in AWS 리전을 자동으로 사용할 수 있도록 허용합니다. 참고: opt-in AWS regions. #88930 (Andrey Zvonov).
  • 이제 clickhouse-client에서 pager가 실행 중인 상태에서도 Ctrl-C를 눌러 쿼리를 취소할 수 있습니다. #80778을 해결했습니다. #88935 (Grigorii).
  • web UI는 값이 음수인 경우에도 테이블에 막대를 표시합니다. 따라서 음수 쪽과 양수 쪽의 막대를 서로 다른 색상으로 표시하는 양방향 막대 차트를 보여줄 수 있습니다. #89016 (Alexey Milovidov).
  • shared_merge_tree_create_per_replica_metadata_nodes를 비활성화하여 SharedMergeTree가 Keeper에 저장하는 메타데이터 양을 줄입니다. #89036 (Alexander Tokmakov).
  • S3Queuedisable_insertion_and_mutation 서버 설정을 따르도록 변경했습니다. #89048 (Raúl Marín).
  • 25.6에서 s3_retry_attempts의 기본값을 500으로 설정해, S3에서 재파티셔닝이 발생하고 S3가 10분 이상 SlowDown 오류를 반환하더라도 백업이 성공하도록 했습니다. #89051 (Nikita Mikhaylov).
  • 이제 두 Kafka 엔진 모두에서 kafka_compression_codeckafka_compression_level 설정을 사용해 Kafka 프로듀서의 압축 방식을 지정할 수 있습니다. #89073 (János Benjamin Antal).
  • system.columns에 새 컬럼 statistics를 추가하여, 이 테이블에 생성된 통계 타입을 나타냅니다. 통계 타입이 자동으로 생성되면 접미사에 (auto)로 표시됩니다. #89086 (Han Fei).
  • *Cluster 테이블 함수에 클러스터 이름 대신 일반 확장을 전달했을 때의 오류 메시지를 개선했습니다. #89093 (Konstantin Bogdanov).
  • YTsaurus: replicated_table을 데이터 소스로 사용할 수 있도록 지원합니다. #89107 (MikhailBurdukov).
  • 공백으로 시작하는 쿼리는 이제 CLI의 이력에 저장되지 않습니다. #89116 (Konstantin Bogdanov).
  • hasAnyTokens 또는 hasAllTokens 함수의 입력값으로 String 배열을 지원합니다. #89124 (Elmi Ahmadov).
  • plain-rewritable 디스크가 메모리에 메타데이터를 저장하는 방식을 수정하여, 디렉터리 중첩 등과 관련된 수많은 버그를 해결했습니다. #89125 (Mikhail Artemenko).
  • Iceberg 테이블을 쿼리할 때 IN 표현식에 포함된 서브쿼리는 파티션 프루닝 분석 전에 적절하게 미리 계산됩니다. #89177 (Daniil Ivanik).
  • 기본적으로 create_table_empty_primary_key_by_default를 활성화하도록 변경했습니다. 사용성 측면에서 이 편이 더 낫습니다. #89333 (Alexey Milovidov).
  • SHOW CREATE DATABASE 또는 system.databases에서 engine_full을 쿼리할 때 Backup 데이터베이스 엔진이 유효하지 않은 쿼리를 생성하던 문제를 수정했습니다. #89477를 해결합니다. #89341 (Alexey Milovidov).
  • 이전 버전에서는 CREATE TABLE 쿼리에서 테이블 엔진을 지정하지 않은 경우 create_table_empty_primary_key_by_default 설정이 적용되지 않았습니다. #89342 (Alexey Milovidov).
  • chdig를 v25.11.1로 업데이트했습니다. 로깅이 크게 개선되었고 그 밖의 다양한 개선 사항도 포함되었습니다(25.11 릴리스 노트). #89957 (Azat Khuzhin). (25.10 릴리스 노트). #89452 (Azat Khuzhin).
  • Web UI에서 쿼리 텍스트 영역의 크기 조절 핸들을 전체 너비로 확장해 조금 더 편리하게 사용할 수 있도록 했습니다. 또한 브라우저 네이티브 크기 조절 기능은 iPad의 Safari에서 사용할 수 없었지만, 이번 변경 후에는 적어도 텍스트 영역 하단을 드래그해 크기를 조절할 수 있습니다. #89457 (Alexey Milovidov).
  • 해시 조인 결과 생성 시 메모리 추적이 개선되었습니다. 이전에는 조인 결과를 생성하는 과정에서 발생하는 임시 할당이 제대로 추적되지 않아 메모리 제한을 초과할 수 있었습니다. #89560 (Azat Khuzhin).
  • 비동기 서버 로그: 플러시 시점을 앞당기고 기본 큐 크기를 늘렸습니다. #89597 (Raúl Marín).
  • system.asynchronous_metrics의 잘못된 FilesystemCacheBytes(및 기타 항목)를 수정했습니다. 파일 시스템 캐시에 대한 SYSTEM 쿼리는 한 번만 실행되도록 했습니다. system.filesystem_caches에서 동일한 경로를 가리키는 캐시를 위한 atomic 뷰를 추가했습니다. #89640 (Azat Khuzhin).
  • system.view_refreshes의 일부 컬럼 설명을 더 명확하게 했습니다. #89701 (Tuan Pham Anh).
  • STS endpoint와 상호 작용할 때 사용하는 S3 자격 증명을 캐시해, 서로 다른 함수 호출에서 재사용할 수 있도록 합니다. 캐시된 자격 증명의 양은 s3_credentials_provider_max_cache_size로 제어할 수 있습니다. #89734 (Antonio Andelic).
  • 하위에 여러 표현식 단계가 있는 경우 런타임 필터 푸시다운을 수정했습니다. #89741 (Alexander Gololobov).
  • 시스템 메모리가 5GB 미만이면 기본적으로 실행형에 대해 mlock을 수행하지 않습니다. #89751 (Alexey Milovidov).
  • Web UI에서 타입 힌트가 더 이상 테이블 헤더 영역으로 넘쳐 표시되지 않습니다. 또한 툴팁 표시를 수정하여 더 이상 테이블 헤더 뒤에 가려지지 않도록 했습니다. #89753 (Alexey Milovidov).
  • Web UI에 테이블 속성을 표시합니다. 행 수나 바이트 수를 클릭하면 system.tables의 쿼리가 표시됩니다. 테이블 엔진을 클릭하면 SHOW TABLES가 표시됩니다. #89771 (Alexey Milovidov).
  • append 방식 쓰기를 구현하지 않는 디스크를 사용하는 테이블에서 non_replicated_deduplication_window를 지원합니다. #87281을 해결합니다. #89796 (Tuan Pham Anh).
  • SYSTEM FLUSH ASYNC INSERT QUEUE 명령에 플러시할 테이블(table) 목록을 지정할 수 있는 기능이 추가되었습니다. #89915 (Sema Checherinda).
  • 중복 제거 블록의 ID를 system.part_log에 저장합니다. #89928 (Sema Checherinda).
  • 더 최적이어서 파일 시스템 캐시 설정 keep_free_space_remove_batch의 기본값을 10에서 100으로 변경했습니다. #90030 (Kseniia Sumarokova).
  • TTL DROP 머지 유형을 도입하고, 이런 종류의 머지 이후에는 다음 삭제 TTL 머지 일정을 갱신하지 않도록 했습니다. #90077 (Mikhail Artemenko).
  • S3Queue 정리 중 RemoveRecursive Keeper 요청의 노드 제한을 더 낮춥니다. #90201 (Antonio Andelic).
  • 로그가 비어 있더라도 SYSTEM FLUSH LOGS 쿼리가 테이블이 생성될 때까지 대기하도록 합니다. #89408 (János Benjamin Antal).
  • 여러 원격 세그먼트가 관련된 분산 병합 집계 또는 IN 서브쿼리가 있는 경우 rows_before_limit_at_least 값이 잘못되는 문제를 수정했습니다. 이 변경으로 #63280가 해결됩니다. #63511 (Amos Bird).
  • INSERT INTO ... SELECT 쿼리 후 0 rows in set가 표시되던 문제를 수정했습니다. #47800을 해결합니다. #79462 (Engel Danila).

버그 수정(공식 안정 릴리스에서 사용자에게 드러나는 오동작)

  • 상수 인수와 단락 평가에서 multiIf가 올바르게 동작하지 않던 문제를 수정했습니다. #72714를 해결합니다. #84546 (Yakov Olkhovskiy).
  • 서브쿼리 제약 조건이 있는 테이블을 조회할 때 발생하던 논리 오류를 수정했습니다. #84190을 해결했습니다. #85575 (Pervakov Grigorii).
  • 물음표가 포함된 URI를 사용하는 특수 쿼리에서 발생하던 버그를 수정했습니다. #85663 (Yarik Briukhovetskyi).
  • EXPLAIN indexes = 1 출력에서 간헐적으로 일부 컬럼이 누락되는 문제를 수정했습니다. #86696를 해결합니다. #87083 (Michael Kolupaev).
  • 병렬 레플리카에서 발생할 수 있는 “Cannot add subcolumn” 오류를 수정했습니다. #84888을 닫습니다. #87514 (Pavel Kruglov).
  • Parquet writer에서 created_by 문자열이 올바른 포맷으로 출력되도록 수정했습니다. 예: ClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f)(ClickHouse v25.9.1.1-testing 대신). 또한 오래된 parquet-mr이 생성한 잘못된 파일과의 Parquet 리더 호환성 문제를 수정했습니다. #87735 (Michael Kolupaev).
  • cramersV, cramersVBiasCorrected, theilsU, contingency에서 잘못된 결과가 나오던 phi-squared 계산을 수정했습니다. #87831 (Nihal Z. Miaji).
  • JSON에서 Float와 Bool이 혼합된 배열을 읽는 문제를 해결했습니다. 이전에는 이러한 데이터를 삽입하면 예외가 발생했습니다. #88008 (Pavel Kruglov).
  • TCPHandler에서 QueryState에 shared_ptr를 사용해 setProgressCallback, setFileProgressCallback 및 setBlockMarshallingCallback에서 state가 무효한지 감지합니다. #88201 (Tuan Pham Anh).
  • query_plan_optimize_join_order_limit > 1일 때 cross join 재정렬 시 발생하는 논리 오류를 수정하고, #89409를 닫았습니다. #88286 (Vladimir Cherkasov).
  • 수정 #88426 1. Alias에서는 명시적 컬럼 정의를 허용하지 않으며, 컬럼은 대상 테이블에서 자동으로 로드됩니다. 이렇게 하면 alias가 항상 대상 테이블의 스키마와 일치합니다. 2. IStorage에서 더 많은 메서드를 프록시합니다. #88552 (Kai Zhu).
  • 복구 후 복제된 데이터베이스 레플리카가 Failed to marked query-0004647339 as finished (finished=No node, synced=No node)와 같은 메시지를 출력하며 오랫동안 멈춘 상태로 있을 수 있었는데, 이 문제가 수정되었습니다. #88671 (Alexander Tokmakov).
  • 새 분석기에서 서브쿼리를 사용할 때 발생할 수 있는 “Context has expired” 문제를 수정했습니다. #88694 (Azat Khuzhin).
  • input_format_parquet_local_file_min_bytes_for_seek가 0으로 설정되었을 때 Parquet 리더에서 발생하던 세그멘테이션 폴트를 수정했습니다. #78456 문제를 해결했습니다. #88784 (Animesh).
  • PK가 역순인 경우 잘못된 min(PK)/max(PK) 결과를 수정합니다. 이로써 #83619이 해결됩니다. #88796 (Amos Bird).
  • 내부 테이블을 DROP할 때 settings max_table_size_to_drop 및 max_partition_size_to_drop의 크기 제한이 올바르게 전파되지 않던 문제를 수정했습니다. #88812 (Nikolay Degterinsky).
  • top_k가 단일 인수로 호출될 때도 임계값 매개변수가 적용되도록 수정했습니다. #88757를 해결했습니다. #88867 (Manuel).
  • SSL 연결이 필요한 ArrowFlight 엔드포인트 소스(예: AWS ALB 뒤에 있는 경우)가 이제 특정 데이터셋을 정상적으로 요청할 수 있습니다. #88868 (alex-shchetkov).
  • ALTER로 추가된 구체화되지 않은 Nested(Tuple(…)) 처리 문제를 수정했습니다. #83133를 해결합니다. #88879 (Azat Khuzhin).
  • 함수 reverseUTF8의 버그를 수정했습니다. 이전 버전에서는 4바이트 UTF-8 코드 포인트의 바이트 순서를 잘못 뒤집었습니다. 이로써 #88913이 해결되었습니다. #88914 (Alexey Milovidov).
  • icebergS3Cluster 프로토콜을 수정했습니다. iceberg cluster 함수에서 스키마 진화, 위치 기반 삭제 및 동등성 삭제를 지원하기 시작했습니다. #88287를 해결했습니다. #88919 (Yang Jiang).
  • 분산 테이블에 대한 병렬 레플리카 쿼리에서 parallel_replicas_support_projection을 비활성화합니다. #88899를 해결합니다. #88922 (zoomxi).
  • 내부 CAST에서 Context가 전파되도록 했습니다. cast 설정이 전파되지 않던 여러 문제를 수정했습니다. #88873를 해결합니다. #78025를 해결합니다. #88929 (Manuel).
  • file() 함수에서 글롭 패턴으로 파일 포맷을 가져오지 못하던 문제를 수정했습니다. #88920을 해결합니다. #88947 (Vitaly Baranov).
  • SQL SECURITY DEFINER로 VIEW를 생성할 때 SET DEFINER <current_user>:definer에 대한 접근 권한은 확인하지 않습니다. #88968 (pufit).
  • pNullable인 경우, 부분 QBit 읽기 최적화가 반환 유형에서 Nullable을 잘못 제거하던 L2DistanceTransposed(vec1, vec2, p)LOGICAL_ERROR를 수정했습니다. #88974 (Raufs Dunamalijevs).
  • 알 수 없는 카탈로그 유형으로 인한 충돌을 수정했습니다. #88819를 해결했습니다. #88987 (scanhex12).
  • 이 변경으로 #88081 문제가 해결되었습니다. #88988 (scanhex12).
  • 스키핑 인덱스 분석 시 발생하던 성능 저하를 수정했습니다. #89004 (Anton Popov).
  • 존재하지 않는 역할이 할당된 사용자가 clusterAllReplicas를 실행하려고 할 때 발생하던 ACCESS_ENTITY_NOT_FOUND 오류를 수정했습니다. #87670을 해결합니다. #89068 (pufit).
  • CHECK 제약 조건에서 희소 컬럼 처리 문제를 수정했습니다. #88637를 해결했습니다. #89076 (Eduard Karacharov).
  • MergeTreeReaderTextIndex에서 가상 컬럼을 채울 때 행 수가 잘못 계산되어 LOGICAL_ERROR와 함께 충돌이 발생하던 문제를 수정했습니다. #89095 (Peng Jian).
  • 머지 준비 과정에서 예외가 발생할 때 TTL 머지 카운터가 누수되는 문제를 방지합니다. #89019을 해결합니다. #89127 (save-my-heart).
  • base32/base58 인코딩 및 디코딩에 필요한 버퍼 크기 계산을 수정했습니다. #89133 (Antonio Andelic).
  • 종료 처리와 백그라운드 INSERT 사이의 경쟁 상태로 인해 Distributed에서 발생하는 use-after-free를 수정했습니다. #88640을 해결합니다. #89136 (Azat Khuzhin).
  • Parquet를 parsing하는 동안 변경 가능한 예외로 인해 발생할 수 있는 데이터 경합을 방지합니다. #88385를 해결했습니다. #89174 (Azat Khuzhin).
  • 갱신 가능 구체화 뷰: 갱신 중 원본 테이블이 완전히 삭제되면 드물게 발생하던 서버 충돌을 수정했습니다. #89203 (Michael Kolupaev).
  • HTTP 인터페이스에서 압축 스트림 도중 오류를 전송할 때 버퍼를 플러시합니다. #89256 (Alexander Tokmakov).
  • 쿼리 마스킹 규칙이 DDL 문에 잘못 적용되지 않도록 방지합니다. #89272 (MikhailBurdukov).
  • MergeTreeReaderTextIndex에서 가상 컬럼(virtual columns)을 채울 때 행 수가 잘못 계산되어 LOGICAL_ERROR와 함께 크래시가 발생하던 문제를 수정했습니다. #89095를 다시 엽니다. #89303 (Jimmy Aguilar Mena).
  • Statistics countmin에서 LowCardinality(Nullable(String))의 estimate 데이터 타입을 지원하지 않아 LOGICAL_ERROR가 발생하던 문제를 수정했습니다. #89343 (Han Fei).
  • IN 함수에서 프라이머리 키(primary key) 컬럼 타입이 IN 함수 오른쪽의 컬럼 타입과 다를 경우 크래시 또는 정의되지 않은 동작이 발생할 수 있습니다. 예시: SELECT string_column, int_column FROM test_table WHERE (string_column, int_column) IN (SELECT ‘5’, ‘not a number’). 많은 행이 선택되고 호환되지 않는 타입이 포함된 행이 있을 때 발생합니다. #89367 (Ilya Golshtein).
  • countIf(*) 인수가 잘리는 문제를 수정했습니다. #89372를 해결합니다. #89373 (Manuel).
  • 뮤테이션 통계의 비압축 체크섬이 손실되지 않도록 수정했습니다. #89381 (Azat Khuzhin).
  • p가 LowCardinality(Nullable(T))인 경우, 부분 QBit 읽기 최적화가 반환 유형에서 Nullable을 잘못 제거해 발생하던 L2DistanceTransposed(vec1, vec2, p)의 LOGICAL_ERROR를 수정했습니다. #88362를 해결합니다. #89397 (Raufs Dunamalijevs).
  • 이전 ClickHouse 버전에서 기록한 Tuple 자체의 잘못된 희소 직렬화를 가진 테이블(table)을 로드할 때 발생하던 문제를 수정했습니다. #89405 (Azat Khuzhin).
  • deduplicate_merge_projection_mode='ignore'를 사용할 때 비어 있지 않은 프로젝션을 가진 TTL로 비워진 파트의 잘못된 머지 처리를 수정했습니다. #89430을 해결합니다. #89458 (Amos Bird).
  • 중복 컬럼이 있는 full_sorting_merge join의 논리 오류를 수정했습니다. #86957 문제가 해결되었습니다. #89495 (Vladimir Cherkasov).
  • 로테이션 과정에서 changelog의 이름이 올바르게 변경되지 않은 경우, Keeper 시작 시 changelog를 읽는 문제를 수정했습니다. #89496 (Antonio Andelic).
  • 고유한 오른쪽 테이블 키가 있는 상태에서 OR 조건을 사용할 때 잘못된 JOIN 결과가 나오는 문제를 수정했습니다. #89391을 해결합니다. #89512 (Vladimir Cherkasov).
  • 분석기 및 PK IN (서브쿼리)에서 발생할 수 있는 “Context has expired” 문제를 수정합니다 (v2). #89433을 해결합니다. #89527 (Azat Khuzhin).
  • 대문자 컬럼 이름이 설정된 테이블의 MaterializedPostgreSQL 복제를 수정했습니다. #72363를 해결합니다. #89530 (Danylo Osipchuk).
  • 집계 함수의 상태(state)에 LowCardinality(String) 컬럼의 직렬화된 값이 포함된 경우 발생하던 충돌을 수정했습니다. #89550 (Pavel Kruglov).
  • enable_lazy_columns_replication 설정이 활성화된 경우 JOIN 오른쪽에서 ARRAY JOIN을 사용할 때 발생하던 충돌을 수정했습니다. #89551 (Pavel Kruglov).
  • query_plan_convert_join_to_in의 논리적 오류를 수정했습니다. #89066를 해결합니다. #89554 (Vladimir Cherkasov).
  • 변환할 수 없는 서로 다른 타입의 컬럼과 상수가 포함된 조건을 추정하려고 할 때 statistics 추정기에서 발생하던 예외를 수정했습니다. #89596 (Han Fei).
  • 런타임 필터는 지원되는 조인 알고리즘, 즉 해시 조인에만 추가합니다. 필터는 조인 알고리즘이 먼저 오른쪽을 완전히 읽은 다음 왼쪽을 읽을 때만 생성할 수 있지만, 예를 들어 FullSortingMergeJoin은 양쪽을 동시에 읽습니다. #89220을 수정합니다. #89652 (Alexander Gololobov).
  • sparseGrams 토크나이저에서 hasAnyTokens, hasAllTokens, tokens 함수가 동시 실행될 때 발생하던 문제를 수정했습니다. #89605를 해결합니다. #89665 (Elmi Ahmadov).
  • 일부 경우 join 런타임 필터와 관련해 발생하던 논리 오류/충돌을 수정했습니다. #89062를 해결합니다. #89666 (Alexander Gololobov).
  • enable_lazy_columns_replication이 활성화된 맵 컬럼에서 ARRAY JOIN 수행 시 발생할 수 있는 논리 오류를 수정했습니다. #89705를 해결합니다. #89717 (Pavel Kruglov).
  • 취소 중인 원격 쿼리에서 연결이 끊어진 뒤 원격 서버를 읽으면서 발생할 수 있던 충돌을 방지합니다. #89468을 해결합니다. #89740 (Azat Khuzhin).
  • 프로젝션 인덱스를 읽는 경로의 경쟁 상태 문제를 수정했습니다. #89497를 해결합니다. #89762 (Peng Jian).
  • 경쟁 조건을 일으킬 수 있던 프로젝션 인덱스 읽기 버그를 수정했습니다. #89497를 해결합니다. #89775 (Amos Bird).
  • 파티션이 없는 테이블에서 Paimon 테이블 함수 처리 문제를 수정했습니다. #89690를 해결합니다. #89793 (JIaQi).
  • 고급 JSON shared data 직렬화에서 경로와 해당 서브컬럼을 읽는 과정에서 발생할 수 있는 논리 오류를 수정했습니다. #89805를 해결했습니다. #89819 (Pavel Kruglov).
  • 데이터 타입의 바이너리 역직렬화 중 발생할 수 있는 스택 오버플로우를 수정했습니다. #88710 이슈를 종료합니다. #89822 (Pavel Kruglov).
  • IN 함수 내의 빈 튜플로 인한 논리 오류를 수정했습니다. #88343를 해결했습니다. #89850 (Nihal Z. Miaji).
  • 호환성을 위해 기존 분석기에서는 optimize_injective_functions_in_group_by 설정과 관계없이 GROUP BY에서 단사 함수를 제거합니다. #89854를 해결합니다. #89870 (Raufs Dunamalijevs).
  • 예를 들어 메모리 제한으로 인해 머지가 중단되면 merge mutate background executor는 락 없이 머지 작업에 cancel을 호출합니다. 하지만 이 경우 부분적으로 생성된 결과 part는 제거되지 않습니다(완료되지 않았고 이 단계에서는 아직 보이지 않았기 때문입니다). 그 후 머지 작업이 소멸되며, 이 과정에서 결과 part도 함께 소멸됩니다. 그러면 디스크 transaction이 롤백되고 S3의 데이터가 제거됩니다. 마지막으로 이 가비지 정리는 merge mutate background executor 락을 잡은 상태에서 실행되었습니다. #89875 (Mikhail Artemenko).
  • reverseCAST 함수에서 빈 tuple과 관련된 논리 오류를 수정했습니다. #89137를 해결합니다. #89908 (Nihal Z. Miaji).
  • 이제 ClickHouse는 기본적으로 SHOW DATABASES 쿼리에서 데이터 레이크 catalog 데이터베이스가 표시되도록 합니다. #89914 (alesapin).
  • 백업을 위해 GCS에서 네이티브 복사를 사용하도록 수정했습니다. 잘못된 클라이언트 복제로 인해 GCS 네이티브 복사가 항상 실패했으며, 그 결과 데이터를 수동으로 읽고 쓰는 덜 효율적인 방식이 사용되었습니다. #89923 (Antonio Andelic).
  • base32Encode의 버퍼 크기 계산을 수정했습니다. 크기가 5보다 작은 문자열 컬럼에 대해 base32Encode를 수행할 경우 충돌이 발생할 수 있었습니다. #89911을 해결합니다. #89929 (Antonio Andelic).
  • SHOW COLUMNSSHOW FUNCTIONS 쿼리의 잘못된 이스케이프 처리를 수정했습니다. #89942 (alesapin).
  • 사용자 이름에 ’@’ 문자가 포함된 경우 MongoDB engine의 URL 검증 문제를 수정했습니다. 이전에는 사용자 이름에 ’@‘가 있으면 잘못된 인코딩으로 인해 오류가 발생했습니다. #89970 (Kai Zhu).
  • #90592에 백포트됨: IN 내부에 ARRAY JOIN이 있고 enable_lazy_columns_replication 설정이 활성화된 경우, 원격 쿼리 수행 중 발생할 수 있는 크래시를 수정했습니다. #90361을 해결합니다. #89997 (Pavel Kruglov).
  • #90448에 백포트됨: 일부 경우 텍스트 형식에서 String의 잘못된 DateTime64 값을 추론하던 문제를 수정했습니다. #89368을 해결합니다. #90013 (Pavel Kruglov).
  • 빈 tuple 컬럼으로 인해 BSONEachRowMsgPack에서 발생하던 논리 오류를 수정했습니다. #89814를 해결했습니다. #71536를 해결했습니다. #90018 (Nihal Z. Miaji).
  • #90457에 백포트됨: 집계 상태 및 기타 소스에서 데이터를 역직렬화할 때 크기 검사를 수행합니다. #90031 (Raúl Marín).
  • JOIN에서 중복 컬럼으로 인해 발생할 수 있는 ‘Chunk의 행 수가 올바르지 않음’ 오류를 수정했습니다. #89411을 해결합니다. #90053 (Vladimir Cherkasov).
  • #90588에 백포트됨: ARRAY JOIN을 사용하고 enable_lazy_columns_replication 설정이 활성화된 상태에서 삽입할 때 발생할 수 있는 오류 Column with Array type is not represented by ColumnArray column: Replicated를 수정했습니다. #90066 (Pavel Kruglov).
  • user_files에서 점(.)으로 시작하는 파일을 허용합니다. #89662을 해결합니다. #90079 (Raúl Marín).
  • #90647에 백포트됨: 큰 간격 크기를 사용할 때 numbers 시스템 테이블(system table)에서 발생하는 논리 오류와 모듈로 버그를 수정했습니다. #83398을 해결합니다. #90123 (Nihal Z. Miaji).
  • 딕셔너리 인수 파싱 중 정수 오버플로우 문제를 수정했습니다. #78506를 해결합니다. #90171 (Raúl Marín).
  • #90468에서 백포트됨: 25.8에서 원활한 업그레이드를 막는 Hive 파티셔닝 호환성 문제를 수정했습니다(업그레이드 중 발생하는 오류 All hive partitioning columns must be present in the schema 수정). #90202 (Kseniia Sumarokova).
  • 쿼리 조건 캐시가 활성화된 SELECT 쿼리에서 경량 업데이트 후 잘못된 쿼리 결과가 반환될 수 있던 문제를 수정했습니다. #90176를 수정했습니다. #90054를 수정했습니다. #90204 (Anton Popov).
  • 잘못된 형식의 세그먼트 디렉터리 이름을 파싱하는 과정에서 StorageDistributed가 충돌하던 문제를 수정했습니다. #90243 (Aleksandr Musorin).
  • LogicalExpressionOptimizerPass에서 문자열을 정수 또는 불리언으로 암시적으로 변환하도록 처리합니다. #89803를 해결합니다. #90245 (Elmi Ahmadov).
  • 테이블 정의에서 특정 스킵 인덱스의 형식이 잘못되어 METADATA_MISMATCH를 유발하고 복제된 데이터베이스에서 새 레플리카를 생성하지 못하던 문제를 수정했습니다. #90251 (Nikolay Degterinsky).
  • #90381에서 백포트됨: part에 index_granularity보다 적은 행만 있는 경우 MergeTreeReaderIndex에서 발생하는 행 수 불일치를 수정합니다. #89691을 해결합니다. #90254 (Peng Jian).
  • #90608에 백포트: compact parts의 JSON에서 서브컬럼을 읽을 때 CANNOT_READ_ALL_DATA 오류가 발생할 수 있는 버그를 수정했습니다. #90264를 해결합니다. #90302 (Pavel Kruglov).
  • 인수 2개를 사용할 때 trim, ltrim, rtrim 함수가 동작하지 않던 문제를 수정했습니다. 이 수정으로 #90170이 해결되었습니다. #90305 (Nihal Z. Miaji).
  • #90625로 백포트됨: index&#95;granularity&#95;bytes=0일 때 존재하지 않는 JSON 경로에 대한 prewhere에서 발생할 수 있는 논리적 오류를 수정했습니다. #86924를 해결합니다. #90375 (Pavel Kruglov).
  • #90484로 백포트됨: L2DistanceTransposed에서 precision 인수가 유효한 범위를 벗어날 때 크래시가 발생하던 버그를 수정했습니다. #90401을 해결합니다. #90405 (Raufs Dunamalijevs).
  • #90577에서 백포트됨: 배열 참조 벡터(기본값은 Array(Float64)))를 Float64가 아닌 요소 타입(Float32, BFloat16)의 QBit 컬럼과 함께 사용할 때 L2DistanceTransposed에서 거리 계산이 잘못되던 문제를 수정했습니다. 이제 이 함수는 참조 벡터를 QBit의 요소 타입에 맞게 자동으로 CAST합니다. #89976을 해결합니다. #90485 (Raufs Dunamalijevs).
  • #90601에 백포트됨: equals 함수의 드문 경우로 인해 발생하는 논리 오류를 수정했습니다. #88142를 해결합니다. #90557 (Nihal Z. Miaji).
  • Tuple 타입에서의 CoalescingMergeTree 문제를 수정했습니다. #88828 (scanhex12).

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

  • Docker에서 initdb SQL 스크립트와 재정의한 TCP 포트를 사용해 ClickHouse를 실행할 때 발생하던 Connection refused 오류를 수정했습니다. #88042 (Grigorii).
  • ClickHouse의 새 플랫폼으로 e2k를 실험적으로 지원합니다. #90159 (Ramil Sattarov).
  • CMake에서 남아 있던 FindPackage 사용을 제거했습니다. 빌드가 시스템 패키지에 의존하지 않도록 했습니다. #89380 (Alexey Milovidov).
  • CMake 구성 중 빌드에서 컴파일러 캐시(예: protoc)를 사용합니다. #89613 (Konstantin Bogdanov).
  • FreeBSD 13.4 sysroot를 사용합니다. #89617 (Konstantin Bogdanov).

ClickHouse 릴리스 25.10, 2025-10-31

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

  • 기본 schema_inference_make_columns_nullable 설정이 모든 컬럼을 Nullable로 만드는 대신, Parquet/ORC/Arrow 메타데이터의 컬럼 Nullable 여부 정보를 반영하도록 변경되었습니다. 텍스트 형식에는 변경이 없습니다. #71499 (Michael Kolupaev).
  • 쿼리 결과 캐시는 log_comment 설정을 무시하므로, 이제 쿼리의 log_comment만 변경해서는 캐시 미스가 발생하지 않습니다. 일부 사용자가 log_comment를 다르게 지정해 의도적으로 캐시를 분리했을 가능성은 작지만 있습니다. 이번 변경으로 해당 동작이 달라지므로 이전 버전과 호환되지 않습니다. 이 용도에는 query_cache_tag 설정을 사용하십시오. #79878 (filimonov).
  • 이전 버전에서는 연산자 구현 함수와 이름이 같은 테이블 함수가 포함된 쿼리의 포맷이 일관되지 않았습니다. Closes #81601. Closes #81977. Closes #82834. Closes #82835. EXPLAIN SYNTAX 쿼리는 항상 연산자를 포맷하지는 않으며, 새로운 동작은 구문을 설명하는 목적을 더 잘 반영합니다. clickhouse-format, formatQuery 및 이와 유사한 도구는 쿼리에 함수 호출 형태로 포함된 함수를 연산자로 포맷하지 않습니다. #82825 (Alexey Milovidov).
  • JOIN 키에서 Dynamic 타입을 사용하는 것을 금지합니다. Dynamic 타입 값을 Dynamic이 아닌 타입과 비교하면 예기치 않은 결과가 발생할 수 있습니다. Dynamic 컬럼을 필요한 타입으로 캐스팅하는 것이 좋습니다. #86358 (Pavel Kruglov).
  • storage_metadata_write_full_object_key server 옵션은 이제 기본적으로 활성화되어 있으며 현재는 비활성화할 수 없습니다. 이는 하위 호환되는 변경 사항입니다. 참고용으로만 알려드립니다. 이 변경 사항은 25.x 릴리스에서만 순방향 호환됩니다. 즉, 새 릴리스를 롤백해야 하는 경우 25.x 릴리스로만 다운그레이드할 수 있습니다. #87335 (Sema Checherinda).
  • 삽입 속도가 낮을 때 ZooKeeper에 저장되는 znode 수를 줄이기 위해 replicated_deduplication_window_seconds를 1주에서 1시간으로 낮췄습니다. #87414 (Sema Checherinda).
  • 설정 query_plan_use_new_logical_join_stepquery_plan_use_logical_join_step로 이름 변경했습니다. #87679 (Vladimir Cherkasov).
  • 새 구문에서는 텍스트 인덱스의 토크나이저 매개변수를 더 유연하게 표현할 수 있습니다. #87997 (Elmi Ahmadov).
  • 기존 함수 hasToken과의 일관성을 높이기 위해 함수 searchAnysearchAll의 이름을 각각 hasAnyTokenshasAllTokens로 변경했습니다. #88109 (Robert Schulze).
  • 파일 시스템 캐시에서 cache_hits_threshold를 제거했습니다. 이 기능은 SLRU 캐시 정책이 도입되기 전에 외부 기여자가 추가한 것이며, 이제 SLRU 캐시 정책이 있으므로 두 가지를 모두 지원할 이유가 없습니다. #88344 (Kseniia Sumarokova).
  • min_free_disk_ratio_to_perform_insertmin_free_disk_bytes_to_perform_insert 설정의 동작 방식에 두 가지 작은 변경이 있습니다: - 삽입을 거부할지 판단할 때 available bytes 대신 예약되지 않은 바이트를 사용합니다. 백그라운드 머지와 뮤테이션을 위한 예약이 구성된 임계값에 비해 작다면 아주 중요한 차이는 아닐 수 있지만, 이 방식이 더 정확해 보입니다. - 이 설정은 시스템 테이블에는 적용하지 않습니다. 그 이유는 query_log 같은 테이블은 계속 업데이트되어야 하기 때문입니다. 이는 디버깅에 큰 도움이 됩니다. 시스템 테이블에 기록되는 데이터는 일반적으로 실제 데이터에 비해 작으므로, min_free_disk_ratio_to_perform_insert 임계값이 합리적으로 설정되어 있다면 훨씬 더 오랫동안 계속 기록할 수 있어야 합니다. #88468 (c-end).
  • Keeper의 내부 복제에 비동기 모드를 활성화합니다. 이를 통해 Keeper는 이전과 동일하게 동작하면서 성능이 향상될 수 있습니다. 23.9보다 이전 버전에서 업데이트하는 경우 먼저 23.9+로 업데이트한 후, 다시 25.10+로 업데이트해야 합니다. 또는 업데이트 전에 keeper_server.coordination_settings.async_replication을 0으로 설정한 뒤, 업데이트가 완료되면 이를 활성화할 수도 있습니다. #88515 (Antonio Andelic).

새 기능

  • 음수 LIMIT 및 음수 OFFSET 지원이 추가되었습니다. #28913이 해결되었습니다. #88411 (Nihal Z. Miaji).
  • Alias 엔진은 다른 테이블에 대한 프록시를 생성합니다. 모든 읽기 및 쓰기 작업은 대상 테이블로 전달되며, Alias 자체는 데이터를 저장하지 않고 대상 테이블에 대한 참조만 유지합니다. #87965 (Kai Zhu).
  • 연산자 IS NOT DISTINCT FROM (<=>)를 완전히 지원하게 되었습니다. #88155 (simonmichal).
  • MergeTree 테이블에서 통계를 생성할 수 있는 모든 적합한 컬럼에 대해 통계를 자동으로 생성하는 기능이 추가되었습니다. 생성할 통계 타입을 쉼표로 구분해 저장하는 테이블 수준 설정 auto_statistics_types도 추가되었습니다(예: auto_statistics_types = 'minmax, uniq, countmin'). #87241 (Anton Popov).
  • 텍스트용 새 블룸 필터 인덱스인 sparse_gram. #79985 (scanhex12).
  • 숫자를 서로 다른 진법으로 변환하는 새로운 conv 함수가 추가되었으며, 현재 2-36 진법을 지원합니다. #83058 (hp).
  • LIMIT BY ALL 구문 지원이 추가되었습니다. GROUP BY ALLORDER BY ALL과 마찬가지로, LIMIT BY ALL은 SELECT 절에 있는 모든 비집계 표현식을 LIMIT BY 키로 자동 확장합니다. 예를 들어 SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALLSELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name와 동일합니다. 이 기능을 사용하면 선택한 모든 비집계 컬럼을 명시적으로 나열하지 않고도 이를 기준으로 제한해야 할 때 쿼리를 더 간단하게 작성할 수 있습니다. #59152를 해결했습니다. #84079 (Surya Kant Ranjan).
  • ClickHouse에서 Apache Paimon을 쿼리할 수 있도록 지원을 추가했습니다. 이 통합을 통해 ClickHouse 사용자는 Paimon의 데이터 레이크 스토리지에 직접 액세스할 수 있습니다. #84423 (JIaQi).
  • studentTTestOneSample 집계 함수가 추가되었습니다. #85436 (Dylan).
  • 히스토그램 버킷의 상한과 누적 값을 인수로 받고, 분위수 위치가 속한 버킷의 상한과 하한 사이에서 선형 보간을 수행하는 집계 함수 quantilePrometheusHistogram이 추가되었습니다. 클래식 히스토그램에서 PromQL histogram_quantile 함수와 유사하게 동작합니다. #86294 (Stephen Chi).
  • delta lake 메타데이터 파일용 새 시스템 테이블(system table)입니다. #87263 (scanhex12).
  • ALTER TABLE REWRITE PARTS를 추가했습니다. 이 기능은 모든 새로운 설정을 사용해 테이블 파트를 처음부터 재작성합니다(일부 설정은 use_const_adaptive_granularity와 같이 새 파트에만 적용되기 때문입니다). #87774 (Azat Khuzhin).
  • ZooKeeper 연결을 강제로 끊은 뒤 다시 연결하도록 SYSTEM RECONNECT ZOOKEEPER 명령을 추가했습니다 (https://github.com/ClickHouse/ClickHouse/issues/87317). #87318 (Pradeep Chhetri).
  • 설정 max_named_collection_num_to_warnmax_named_collection_num_to_throw를 통해 이름이 지정된 컬렉션 수를 제한할 수 있습니다. 새 메트릭 NamedCollection 및 오류 TOO_MANY_NAMED_COLLECTIONS를 추가했습니다. #87343 (Pablo Marcos).
  • startsWithendsWith 함수에 대해 최적화된 대소문자 비구분 버전인 startsWithCaseInsensitive, endsWithCaseInsensitive, startsWithCaseInsensitiveUTF8, endsWithCaseInsensitiveUTF8가 추가되었습니다. #87374 (Guang Zhao).
  • 서버 구성 “resources_and_workloads” 섹션을 사용해 SQL에서 WORKLOADRESOURCE 정의를 지정하는 방법이 추가되었습니다. #87430 (Sergei Trifonov).
  • min_level_for_wide_part라는 새 테이블 설정을 추가해 part가 wide part로 생성되는 최소 level을 지정할 수 있게 했습니다. #88179 (Christoph Wurm).
  • Keeper client에 cp-cprmv-mvr 명령의 재귀 버전을 추가했습니다. #88570 (Mikhail Artemenko).
  • 삽입 시 스킵 인덱스를 머티리얼라이즈 대상에서 제외할 목록을 지정하는 세션 설정(exclude_materialize_skip_indexes_on_insert)이 추가되었습니다. 머지 중 스킵 인덱스를 머티리얼라이즈 대상에서 제외할 목록을 지정하는 MergeTree 테이블 설정(exclude_materialize_skip_indexes_on_merge)도 추가되었습니다. #87252 (George Larionov).

실험적 기능

  • 벡터를 비트 슬라이스 포맷으로 저장하는 QBit 데이터 타입과, 매개변수로 정확도와 속도 간 절충을 제어할 수 있는 근사 벡터 검색을 지원하는 L2DistanceTransposed 함수를 구현했습니다. #87922 (Raufs Dunamalijevs).
  • 이제 searchAllsearchAny 함수는 텍스트 컬럼이 없는 컬럼에서도 작동합니다. 이런 경우 기본 토크나이저를 사용합니다. #87722 (Jimmy Aguilar Mena).

성능 개선

  • JOIN 및 ARRAY JOIN에서 지연 컬럼 복제를 구현했습니다. 일부 출력 형식에서는 Sparse 및 Replicated 같은 특수 컬럼 표현을 일반 컬럼으로 변환하지 않도록 했습니다. 이를 통해 메모리에서 불필요한 데이터 복사를 방지합니다. #88752 (Pavel Kruglov).
  • 압축을 개선하고 서브컬럼에 효율적으로 접근할 수 있도록 MergeTree 테이블의 최상위 String 컬럼에 선택적 .size 서브컬럼 직렬화를 추가했습니다. 직렬화 버전을 제어하기 위한 새로운 MergeTree 설정과 빈 문자열에 대한 표현식 최적화를 도입했습니다. #82850 (Amos Bird).
  • Iceberg의 read in order 지원. #88454 (scanhex12).
  • 런타임에 오른쪽 서브트리에서 블룸 필터를 생성한 뒤, 이 필터를 왼쪽 서브트리의 스캔에 전달해 일부 JOIN 쿼리의 속도를 높였습니다. 이는 SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'와 같은 쿼리에서 유용할 수 있습니다. #84772 (Alexander Gololobov).
  • 쿼리 조건 캐시(Query Condition Cache, QCC)와 인덱스 분석의 적용 순서 및 통합 방식을 리팩터링하여 쿼리 성능을 개선했습니다. 이제 QCC 필터링이 프라이머리 키(primary key) 및 스킵 인덱스 분석보다 먼저 적용되어 불필요한 인덱스 계산을 줄입니다. 또한 인덱스 분석이 여러 범위 필터를 지원하도록 확장되었으며, 해당 필터링 결과도 이제 다시 QCC에 저장됩니다. 이에 따라 인덱스 분석이 실행 시간의 대부분을 차지하는 쿼리, 특히 스킵 인덱스(예: 벡터 인덱스 또는 역색인)에 의존하는 쿼리의 속도가 크게 향상됩니다. #82380 (Amos Bird).
  • 소규모 쿼리의 속도를 높이기 위한 여러 가지 세부 최적화가 적용되었습니다. #83096 (Raúl Marín).
  • 네이티브 프로토콜에서 logs와 profile events를 압축합니다. 레플리카가 100개 이상인 클러스터에서는 비압축 profile events가 초당 1..10 MB를 차지하며, 인터넷 연결이 느리면 진행 표시줄의 반응이 둔해집니다. 이로써 #82533가 해결됩니다. #83586 (Alexey Milovidov).
  • 가능한 경우 SIMD CPU 명령어를 활용하는 StringZilla 라이브러리를 사용해 대소문자를 구분하는 문자열 검색(WHERE URL LIKE '%google%'와 같은 filter 작업 등)의 성능을 개선했습니다. #84161 (Raúl Marín).
  • SimpleAggregateFunction(anyLast) 유형의 컬럼이 있는 테이블에서 FINAL을 사용해 aggregating merge tree 테이블을 조회할 때 메모리 할당과 메모리 복사를 줄였습니다. #84428 (Duc Canh Le).
  • OR 조건의 JOIN 프레디케이트를 푸시다운하는 로직을 제공합니다. 예시: TPC-H Q7에서 2개의 테이블 n1 및 n2에 대한 조건이 (n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE')와 같은 경우, 각 테이블에 대해 별도의 부분 필터를 추출합니다. n1에 대해서는 n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY', n2에 대해서는 n2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE'를 추출합니다. #84735 (Yarik Briukhovetskyi).
  • 새 기본 설정 optimize_rewrite_like_perfect_affix를 통해 접두사 또는 접미사가 있는 LIKE의 성능을 향상했습니다. #85920 (Guang Zhao).
  • 여러 문자열/숫자 컬럼으로 그룹화할 때 직렬화된 키가 너무 커서 발생하던 성능 저하를 수정했습니다. 이는 #83884의 후속 작업입니다. #85924 (李扬).
  • 키당 일치하는 항목이 많은 해시 조인에서 메모리 사용량을 줄이기 위해 새로운 joined_block_split_single_row 설정을 추가했습니다. 이 설정을 사용하면 왼쪽 테이블의 단일 행에 대한 일치 항목 내에서도 해시 조인 결과를 청크로 분할할 수 있으므로, 특히 왼쪽 테이블의 한 행이 오른쪽 테이블의 수천 개 또는 수백만 개의 행과 일치할 때 유용합니다. 이전에는 모든 일치 항목을 한 번에 메모리에 구체화해야 했습니다. 이로 인해 Peak memory usage는 줄어들지만 CPU 사용량은 증가할 수 있습니다. #87913 (Vladimir Cherkasov).
  • SharedMutex 개선(다수의 동시 쿼리에서 성능 향상). #87491 (Raúl Marín).
  • 대부분 출현 빈도가 낮은 토큰을 포함한 문서에서 텍스트 인덱스 구축 성능이 개선되었습니다. #87546 (Anton Popov).
  • Field destructor의 일반적인 경우를 최적화해 많은 수의 작은 쿼리에서 성능을 개선했습니다. #87631 (Raúl Marín).
  • JOIN 최적화 중 런타임 해시 테이블 통계 재계산을 건너뛰어 JOIN이 포함된 모든 쿼리의 성능을 개선했습니다. 새로운 프로파일 이벤트 JoinOptimizeMicrosecondsQueryPlanOptimizeMicroseconds를 추가했습니다. #87683 (Vladimir Cherkasov).
  • 캐시에 마크를 저장하도록 활성화하고 MergeTreeLazy 리더에서는 direct IO를 사용하지 않도록 했습니다. 이를 통해 ORDER BY와 작은 LIMIT를 사용하는 쿼리의 성능이 향상됩니다. #87989 (Nikita Taranov).
  • is_deleted 컬럼이 있는 ReplacingMergeTree 테이블에서 FINAL 절을 사용하는 SELECT 쿼리는, 기존의 두 가지 최적화에서 병렬화가 개선됨에 따라 이제 더 빠르게 실행됩니다. 1. part가 하나만 있는 테이블 파티션에 대한 do_not_merge_across_partitions_select_final 최적화, 2. 테이블의 다른 선택 범위를 intersecting / non-intersecting으로 분할하여, intersecting 범위만 FINAL 머지 변환을 거치도록 했습니다. #88090 (Shankar Iyer).
  • 디버깅이 활성화되지 않았을 때의 기본 코드 경로에서 fail points를 사용하지 않아 발생하는 영향을 줄였습니다. #88196 (Raúl Marín).
  • uuid로 필터링할 때 system.tables 전체 스캔을 피합니다(로그나 ZooKeeper 경로에 UUID만 있는 경우 유용할 수 있습니다). #88379 (Azat Khuzhin).
  • 함수 tokens, hasAllTokens, hasAnyTokens의 성능이 개선되었습니다. #88416 (Anton Popov).
  • 일부 경우 JOIN 성능을 약간 더 개선할 수 있도록 AddedColumns::appendFromBlock를 인라인 처리했습니다. #88455 (Nikita Taranov).
  • 클라이언트 자동 완성은 여러 시스템 테이블에 쿼리를 수행하는 대신 system.completions를 사용해 더 빠르고 일관성 있게 작동합니다. #84694 (|2ustam).
  • 딕셔너리 압축을 제어하는 새로운 dictionary_block_frontcoding_compression text index 매개변수가 추가되었습니다. 기본적으로 front-coding 압축을 사용하도록 설정되어 있습니다. #87175 (Elmi Ahmadov).
  • 설정 min_insert_block_size_rows_for_materialized_viewsmin_insert_block_size_bytes_for_materialized_views에 따라, 구체화된 뷰(materialized view)에 삽입하기 전에 모든 스레드의 데이터를 먼저 합칩니다. 이전에는 parallel_view_processing이 활성화되어 있으면 특정 구체화된 뷰에 삽입하는 각 스레드가 삽입 블록을 독립적으로 합쳤기 때문에, 생성되는 파트 수가 더 많아질 수 있었습니다. #87280 (Antonio Andelic).
  • 임시 파일 작성기에 사용되는 버퍼 크기를 제어할 수 있도록 temporary_files_buffer_size 설정을 추가했습니다. * LowCardinality 컬럼에 대해 scatter 작업(예를 들어 grace 해시 조인에서 사용됨)의 메모리 사용량을 최적화했습니다. #88237 (Vladimir Cherkasov).
  • 병렬 레플리카에서 텍스트 인덱스로부터 직접 읽기를 지원하도록 추가했습니다. 객체 스토리지에서 텍스트 인덱스를 읽는 성능을 개선했습니다. #88262 (Anton Popov).
  • 데이터 레이크 카탈로그의 테이블을 대상으로 하는 쿼리는 분산 처리에 병렬 레플리카를 사용합니다. #88273 (scanhex12).
  • “to_remove_small_parts_at_right”라는 이름의 백그라운드 머지 알고리즘 조정용 내부 휴리스틱이 이제 머지 범위 점수를 계산하기 전에 실행됩니다. 이전에는 머지 선택기가 wide 머지를 선택한 뒤 해당 suffix를 필터링했습니다. 수정: #85374. #88736 (Mikhail Artemenko).

개선 사항

  • 이제 generateSerialID 함수는 시리즈 이름을 받는 비상수 인수를 지원합니다. #83750를 해결합니다. #88270 (Alexey Milovidov).
  • generateSerialID 함수에 선택적 start_value 매개변수가 추가되어 새 series의 시작 값을 사용자 지정할 수 있게 되었습니다. #88085 (Manuel).
  • clickhouse-format에 쿼리 포맷 시 세미콜론이 새 줄이 아니라 마지막 줄에 오도록 하는 --semicolons_inline 옵션을 추가했습니다. #88018 (Jan Rada).
  • Keeper에서 구성이 재정의된 경우 서버 수준의 스로틀링을 구성할 수 있도록 했습니다. #73964를 해결했습니다. #74066 (JIaQi).
  • mannWhitneyUTest는 이제 두 sample에 동일한 값만 포함된 경우 더 이상 예외를 발생시키지 않습니다. 이제 SciPy와 일치하는 유효한 결과를 반환합니다. 이로써 다음 이슈가 해결되었습니다: #79814. #80009 (DeanNeaht).
  • 디스크 객체 스토리지 트랜잭션을 재작성할 때 메타데이터 트랜잭션이 커밋되면 기존 원격 blob을 제거합니다. #81787 (Sema Checherinda).
  • 최적화 전후 결과 유형의 LowCardinality가 달라지는 경우, 중복된 equal 표현식에 대한 최적화 패스를 수정했습니다. #82651 (Yakov Olkhovskiy).
  • HTTP 클라이언트가 Expect: 100-continue와 함께 헤더 X-ClickHouse-100-Continue: defer를 설정하면, ClickHouse는 할당량 검증을 통과한 뒤에야 클라이언트에 100 Continue 응답을 보냅니다. 따라서 어차피 버려질 요청 본문을 전송하느라 네트워크 대역폭을 낭비하는 일을 막을 수 있습니다. 이는 쿼리를 URL 쿼리 문자열로 보내고 데이터는 요청 본문으로 전송하는 INSERT 쿼리에서 특히 관련이 있습니다. 전체 본문을 보내기 전에 요청을 중단하면 HTTP/1.1에서는 연결 재사용이 불가능하지만, 새 연결을 여는 데 추가되는 지연 시간은 일반적으로 대량의 데이터를 삽입할 때의 전체 INSERT 소요 시간에 비하면 크지 않습니다. #84304 (c-end).
  • DATABASE ENGINE = Backup을 S3 storage와 함께 사용할 때 로그의 S3 자격 증명을 마스킹합니다. #85336 (Kenny Sun).
  • 머티리얼라이즈를 지연하여 상관 서브쿼리 입력 서브플랜에서 쿼리 계획(query plan) 최적화를 볼 수 있도록 했습니다. #79890의 일부입니다. #85455 (Dmitry Novik).
  • SYSTEM DROP DATABASE REPLICA 변경 사항: - 데이터베이스를 지정해 삭제하거나 전체 레플리카를 삭제할 때: 해당 데이터베이스의 각 테이블에 대한 레플리카도 함께 삭제됩니다 - ‘WITH TABLES’가 지정되면 각 스토리지의 레플리카를 삭제합니다 - 그 외의 경우 로직은 변경되지 않으며, 데이터베이스의 레플리카만 삭제합니다 - keeper 경로를 사용해 데이터베이스 레플리카를 삭제할 때: - ‘WITH TABLES’가 지정되면: - 데이터베이스를 Atomic으로 복원합니다 - Keeper의 statement에서 RMT 테이블을 복원합니다 - 데이터베이스를 삭제합니다(복원된 테이블도 함께 삭제됨) - 그 외의 경우 지정된 keeper 경로의 레플리카만 삭제합니다. #85637 (Tuan Pham Anh).
  • TTL에 materialize 함수가 포함될 때 발생하던 일관되지 않은 포맷 문제를 수정했습니다. #82828을 해결했습니다. #85749 (Alexey Milovidov).
  • Iceberg table 상태 정보는 이제 더 이상 스토리지 객체에 저장되지 않습니다. 이에 따라 ClickHouse의 Iceberg를 동시 쿼리 환경에서 사용할 수 있게 됩니다. #86062 (Daniil Ivanik).
  • use_persistent_processing_nodes = 1일 때의 처리 노드와 마찬가지로, S3Queue ordered 모드의 버킷 잠금을 영구 모드로 변경했습니다. 테스트에는 Keeper 결함 주입도 추가했습니다. #86628 (Kseniia Sumarokova).
  • 사용자가 포맷 이름을 잘못 입력한 경우 힌트를 제공합니다. #86761을 해결합니다. #87092 (flynn).
  • 프로젝션이 없으면 원격 레플리카는 인덱스 분석을 수행하지 않습니다. #87096 (zoomxi).
  • ytsaurus 테이블에서 utf8 인코딩을 비활성화할 수 있도록 했습니다. #87150 (MikhailBurdukov).
  • 기본값으로 s3_slow_all_threads_after_retryable_error를 비활성화했습니다. #87198 (Nikita Mikhaylov).
  • 테이블 함수 arrowflightarrowFlight로 이름 변경했습니다. #87249 (Vitaly Baranov).
  • clickhouse-benchmark가 CLI 플래그에서 _ 대신 -도 사용할 수 있도록 업데이트했습니다. #87251 (Ahmed Gouda).
  • 신호 처리 시 system.crash_log로 플러시하는 작업을 동기식으로 변경했습니다. #87253 (Miсhael Stetsyuk).
  • ORDER BY 절이 없는 최상위 SELECT 쿼리에 ORDER BY rand()를 자동으로 추가하는 설정 inject_random_order_for_select_without_order_by가 추가되었습니다. #87261 (Rui Zhang).
  • joinGet 오류 메시지를 개선하여 join_keys 개수가 right_table_keys 개수와 서로 다르다는 점을 정확히 나타내도록 했습니다. #87279 (Isak Ellmer).
  • write tx 중에 임의의 Keeper 노드의 stat을 확인할 수 있는 기능이 추가되었습니다. 이는 ABA 문제를 감지하는 데 도움이 될 수 있습니다. #87282 (Mikhail Artemenko).
  • 부하가 큰 ytsaurus 요청을 heavy 프록시로 리디렉션합니다. #87342 (MikhailBurdukov).
  • 디스크 트랜잭션의 메타데이터에 대해 가능한 모든 워크로드에서 unlink/rename/removeRecursive/removeDirectory/etc 작업의 롤백과 하드링크 수 처리를 수정하고, 다른 메타 저장소에서도 재사용할 수 있도록 인터페이스를 더 범용적으로 단순화했습니다. #87358 (Mikhail Artemenko).
  • Keeper에서 TCP_NODELAY를 비활성화할 수 있는 keeper_server.tcp_nodelay 구성 매개변수가 추가되었습니다. #87363 (Copilot).
  • clickhouse-benchmarks에서 --connection을 지원합니다. 이는 clickhouse-client에서 지원하는 방식과 동일하며, 명령줄 인수로 사용자 이름/비밀번호를 명시적으로 지정하지 않도록 클라이언트 config.xml/config.yamlconnections_credentials 경로 아래에 미리 정의된 연결을 지정할 수 있습니다. clickhouse-benchmark--accept-invalid-certificate 지원도 추가했습니다. #87370 (Azat Khuzhin).
  • 이제 Iceberg 테이블에서도 max_insert_threads 설정이 적용됩니다. #87407 (alesapin).
  • PrometheusMetricsWriter에 히스토그램과 차원 메트릭을 추가합니다. 이를 통해 PrometheusRequestHandler 핸들러가 필요한 핵심 메트릭을 모두 갖추게 되며, 클라우드 환경에서 신뢰할 수 있고 오버헤드가 낮은 메트릭 수집에 활용할 수 있습니다. #87521 (Miсhael Stetsyuk).
  • 함수 hasToken은 이제 빈 token에 대해 일치 항목 0개를 반환합니다(이전에는 예외를 발생시켰습니다). #87564 (Jimmy Aguilar Mena).
  • ArrayMap(mapKeysmapValues) 값에 대한 텍스트 인덱스 지원이 추가되었습니다. 지원되는 함수는 mapContainsKeyhas입니다. #87602 (Elmi Ahmadov).
  • 만료된 전역 ZooKeeper 세션 수를 나타내는 새 ZooKeeperSessionExpired 메트릭을 추가했습니다. #87613 (Miсhael Stetsyuk).
  • 백업 대상에 대한 서버 측(네이티브) 복사에는 백업 전용 설정(예: backup_slow_all_threads_after_retryable_s3_error)이 적용된 S3 storage 클라이언트를 사용합니다. s3_slow_all_threads_after_retryable_error는 더 이상 사용되지 않도록 합니다. #87660 (Julia Kartseva).
  • 실험적 make_distributed_plan을 사용할 때 쿼리 계획 직렬화 과정에서 max_joined_block_size_rowsmax_joined_block_size_bytes 설정이 잘못 처리되던 문제를 수정했습니다. #87675 (Vladimir Cherkasov).
  • 이제 enable_http_compression 설정이 기본값으로 적용됩니다. 즉, 클라이언트가 HTTP 압축을 허용하면 서버가 이를 사용합니다. 하지만 이 변경에는 몇 가지 단점이 있습니다. 클라이언트가 bzip2와 같이 부담이 큰 Compression method를 요청할 수 있는데, 이는 비합리적이며 서버의 리소스 사용량을 증가시킵니다(다만 큰 결과를 전송할 때에만 두드러집니다). 클라이언트가 gzip을 요청할 수도 있는데, 이것도 아주 나쁜 선택은 아니지만 zstd에 비하면 비효율적입니다. #71591을 해결합니다. #87703 (Alexey Milovidov).
  • ClickHouse가 연결할 수 있는 [Zoo]Keeper 호스트 목록을 표시하는 새 항목 keeper_hostssystem.server_settings에 추가되었습니다. #87718 (Nikita Mikhaylov).
  • 과거 이력 조사를 더 쉽게 할 수 있도록 시스템 대시보드에 fromto 값을 추가했습니다. #87823 (Mikhail f. Shiryaev).
  • Iceberg SELECT의 성능 추적 관련 정보를 추가했습니다. #87903 (Daniil Ivanik).
  • 파일 시스템 캐시 개선: 캐시에서 공간을 동시에 예약하는 여러 스레드가 캐시 우선순위 이터레이터를 재사용하도록 개선했습니다. #87914 (Kseniia Sumarokova).
  • Keeper의 요청 크기를 제한하는 기능을 추가했습니다(max_request_size 설정, ZooKeeperjute.maxbuffer와 동일하며 이전 버전과의 호환성을 위해 기본값은 OFF이고, 향후 릴리스에서 설정될 예정입니다). #87952 (Azat Khuzhin).
  • 기본적으로 오류 메시지에 스택트레이스가 포함되지 않도록 clickhouse-benchmark를 변경했습니다. #87954 (Ahmed Gouda).
  • 마크가 캐시에 있으면 스레드 풀 기반 비동기 마크 로딩(load_marks_asynchronously=1)을 사용하지 마십시오(풀이 과부하 상태일 수 있으므로, 마크가 이미 캐시에 있더라도 이로 인해 쿼리에 페널티가 발생할 수 있습니다). #87967 (Azat Khuzhin).
  • Ytsaurus: 일부 컬럼만으로 테이블/테이블 함수/딕셔너리를 생성할 수 있도록 지원합니다. #87982 (MikhailBurdukov).
  • 이제 system.zookeeper_connection_log가 기본적으로 활성화되며, Keeper 세션 정보를 가져오는 데 사용할 수 있습니다. #88011 (János Benjamin Antal).
  • 중복된 외부 테이블(external table)이 전달될 때 TCP와 HTTP의 동작을 일관되게 맞췄습니다. HTTP에서는 임시 테이블을 여러 번 전달할 수 있습니다. #88032 (Sema Checherinda).
  • Arrow/ORC/Parquet 읽기용 사용자 지정 MemoryPools를 제거했습니다. 이제는 모든 메모리 할당을 추적하므로 #84082 이후 이 구성 요소는 불필요해진 것으로 보입니다. #88035 (Nikita Mikhaylov).
  • Replicated 데이터베이스를 인수 없이 생성할 수 있게 했습니다. #88044 (Pervakov Grigorii).
  • clickhouse-keeper-client: clickhouse-keeper의 TLS 포트에 연결할 수 있도록 지원을 추가하고, 플래그 이름은 clickhouse-client와 동일하게 유지했습니다. #88065 (Pradeep Chhetri).
  • 메모리 제한 초과로 백그라운드 머지가 거부된 횟수를 추적하는 새로운 프로필 이벤트가 추가되었습니다. #88084 (Grant Holly).
  • CREATE/ALTER TABLE의 컬럼 기본값 표현식 검증에 분석기를 활성화합니다. #88087 (Max Justus Spransy).
  • 내부 쿼리 계획이 개선되었습니다: CROSS JOIN에 JoinStepLogical을 사용합니다. #88151 (Vladimir Cherkasov).
  • hasAnyTokens (hasAnyToken) 및 hasAllTokens (hasAllToken) 함수의 alias가 추가되었습니다. #88162 (George Larionov).
  • 기본적으로 전역 샘플링 프로파일러를 활성화합니다(즉, 쿼리와 관련되지 않은 서버 스레드에도 적용됨): CPU 시간과 실제 시간 기준으로 10초마다 모든 스레드의 스택트레이스를 수집합니다. #88209 (Alexander Tokmakov).
  • 복사 및 컨테이너 생성 기능에서 확인된 ‘Content-Length’ 문제 수정 사항을 포함하도록 Azure SDK를 업데이트했습니다. #88278 (Smita Kulkarni).
  • MySQL과의 호환성을 위해 함수 lag가 대소문자를 구분하지 않도록 했습니다. #88322 (Lonny Kapelushnik).
  • clickhouse-localclickhouse-server 디렉터리에서 시작할 수 있게 했습니다. 이전 버전에서는 Cannot parse UUID: . 오류가 발생했습니다. 이제 서버를 시작하지 않고도 clickhouse-local을 실행해 서버의 데이터베이스를 조작할 수 있습니다. #88383 (Alexey Milovidov).
  • keeper_server.coordination_settings.check_node_acl_on_remove 설정을 추가했습니다. 이 설정을 활성화하면 각 노드를 삭제하기 전에 해당 노드 자체와 부모 노드의 ACL을 모두 검증합니다. 활성화하지 않으면 부모 노드의 ACL만 검증합니다. #88513 (Antonio Andelic).
  • JSON 컬럼은 이제 Vertical 포맷 사용 시 보기 좋게 출력됩니다. #81794를 해결했습니다. #88524 (Frank Rosner).
  • clickhouse-client 파일(예: 쿼리 이력)을 홈 디렉터리의 루트가 아니라 XDG Base Directories 사양에 설명된 위치에 저장합니다. ~/.clickhouse-client-history가 이미 있으면 계속 사용됩니다. #88538 (Konstantin Bogdanov).
  • GLOBAL IN으로 인해 발생한 메모리 누수를 수정했습니다 (https://github.com/ClickHouse/ClickHouse/issues/88615). #88617 (pranavmehta94).
  • 문자열 입력도 허용하도록 hasAny/hasAllTokens에 오버로드가 추가되었습니다. #88679 (George Larionov).
  • 시스템 부팅 시 시작되도록 clickhouse-keeper용 postinstall 스크립트에 단계를 추가했습니다. #88746 (YenchangChan).
  • Web UI에서는 키를 누를 때마다가 아니라 붙여넣을 때만 자격 증명을 확인합니다. 이렇게 하면 LDAP 서버가 잘못 구성되어 있을 때 발생하는 문제를 방지할 수 있습니다. 이 변경으로 #85777가 해결됩니다. #88769 (Alexey Milovidov).
  • 제약 조건 위반 시 예외 메시지 길이를 제한합니다. 이전 버전에서는 매우 긴 문자열이 삽입되면 예외 메시지도 매우 길어질 수 있었고, 이 메시지가 query_log에 기록되었습니다. #87032을 해결합니다. #88801 (Alexey Milovidov).
  • 테이블 생성 시 ArrowFlight server에서 데이터셋 구조를 요청하는 동작을 수정했습니다. #87542 (Vitaly Baranov).

버그 수정(공식 안정 릴리스에서 사용자에게 드러나는 오동작)

  • 클라이언트 프로토콜 오류를 일으키던 GeoParquet 문제를 수정했습니다. #84020 (Michael Kolupaev).
  • 서브쿼리에서 shardNum()과 같은 호스트 종속 함수가 initiator 노드에서 해석되지 않던 문제를 수정했습니다. #84409 (Eduard Karacharov).
  • parseDateTime64BestEffort, change{Year,Month,Day}, makeDateTime64 등 다양한 날짜/시간 관련 함수에서 초의 소수 부분이 포함된 epoch 이전 날짜를 잘못 처리하던 문제가 수정되었습니다. 이전에는 초의 소수 부분을 초에 더해야 하는데 빼고 있었습니다. 예를 들어 parseDateTime64BestEffort('1969-01-01 00:00:00.468')1969-01-01 00:00:00.468 대신 1968-12-31 23:59:59.532를 반환했습니다. #85396 (xiaohuanlin).
  • 동일한 ALTER 문 내에서 컬럼 상태가 변경될 때 ALTER COLUMN IF EXISTS 명령이 실패하던 문제를 수정했습니다. 이제 DROP COLUMN IF EXISTS, MODIFY COLUMN IF EXISTS, COMMENT COLUMN IF EXISTS, RENAME COLUMN IF EXISTS와 같은 명령은 동일한 문의 앞선 명령으로 컬럼이 삭제된 경우도 올바르게 처리합니다. #86046 (xiaohuanlin).
  • 지원 범위를 벗어난 날짜에서 Date/DateTime/DateTime64를 추론하던 문제를 수정했습니다. #86184 (Pavel Kruglov).
  • 일부 유효한 사용자 제출 데이터가 AggregateFunction(quantileDD) 컬럼에 입력될 때 머지 작업이 무한 재귀에 빠져 충돌이 발생하던 문제를 수정했습니다. #86560 (Raphaël Thériault).
  • cluster 테이블 함수로 생성한 테이블에서 JSON/Dynamic 타입을 지원합니다. #86821 (Pavel Kruglov).
  • CTE에서 계산된 함수 결과가 쿼리에서 비결정적으로 처리되던 문제를 수정했습니다. #86967 (Yakov Olkhovskiy).
  • 프라이머리 키(primary key) 컬럼에서 pointInPolygon을 사용할 때 EXPLAIN에서 발생하는 LOGICAL_ERROR를 수정했습니다. #86971 (Michael Kolupaev).
  • 이름에 퍼센트 인코딩된 문자열이 포함된 데이터 레이크 테이블을 수정했습니다. #86626을 해결했습니다. #87020 (Anton Ivashkin).
  • optimize_functions_to_subcolumns 사용 시 OUTER JOIN의 널 허용 컬럼에서 발생하던 잘못된 IS NULL 동작을 수정하고, #78625를 해결했습니다. #87058 (Vladimir Cherkasov).
  • max_temporary_data_on_disk_size 제한 추적에서 임시 데이터 해제가 잘못 집계되던 문제를 수정했습니다. 관련 이슈 #87118. #87140 (JIaQi).
  • 함수 checkHeaders는 이제 제공된 헤더를 올바르게 검증하고 허용되지 않은 헤더를 거부합니다. 최초 작성자: Michael Anastasakis (@michael-anastasakis). #87172 (Raúl Marín).
  • 모든 숫자 타입에서 toDatetoDate32가 동일하게 동작하도록 합니다. int16에서 캐스팅할 때 발생하는 Date32 언더플로 검사 문제를 수정합니다. #87176 (Pervakov Grigorii).
  • 여러 JOIN이 포함된 쿼리에서, 특히 LEFT/INNER JOIN 뒤에 RIGHT JOIN이 오는 경우 발생하던 병렬 레플리카 관련 논리 오류를 수정했습니다. #87178 (Igor Nikonov).
  • 스키마 추론 캐시에서 input_format_try_infer_variants 설정을 반영합니다. #87180 (Pavel Kruglov).
  • pathStartsWith가 prefix 아래의 경로에서만 일치하도록 변경했습니다. #87181 (Raúl Marín).
  • _row_number 가상 컬럼과 Iceberg positioned deletes의 논리 오류를 수정했습니다. #87220 (Michael Kolupaev).
  • const와 non-const block이 혼합되어 있을 때 JOIN에서 발생하던 “Too large size passed to allocator” LOGICAL_ERROR를 수정했습니다. #87231 (Azat Khuzhin).
  • 다른 MergeTree 테이블을 읽는 서브쿼리가 포함된 경량 업데이트 문제를 수정했습니다. #87285 (Anton Popov).
  • ROW POLICY가 있을 때 작동하지 않던 move-to-prewhere 최적화를 수정했습니다. #85118의 후속 작업입니다. #69777을 종료합니다. #83748을 종료합니다. #87303 (Nikolai Kochetov).
  • 데이터 파트에 없는, 기본 표현식이 설정된 컬럼에 패치를 적용할 때 발생하던 문제가 수정되었습니다. #87347 (Anton Popov).
  • MergeTree 테이블에서 중복된 파티션 필드 이름을 사용할 때 발생하던 segmentation fault를 해결했습니다. #87365 (xiaohuanlin).
  • EmbeddedRocksDB 업그레이드 관련 문제를 수정했습니다. #87392 (Raúl Marín).
  • 객체 스토리지에서 텍스트 인덱스를 통한 직접 읽기 문제를 수정했습니다. #87399 (Anton Popov).
  • 존재하지 않는 엔진에 대한 권한이 생성되는 문제를 방지했습니다. #87419 (Jitendra).
  • s3_plain_rewritable에 대해서는 “찾을 수 없음” 오류만 무시합니다(그렇지 않으면 각종 문제가 발생할 수 있습니다). #87426 (Azat Khuzhin).
  • YTSaurus 소스 및 *range_hashed 레이아웃을 사용하는 딕셔너리를 수정했습니다. #87490 (MikhailBurdukov).
  • 빈 튜플 배열 생성 문제를 수정했습니다. #87520 (Pavel Kruglov).
  • 임시 테이블 생성 시 허용되지 않는 컬럼을 검사합니다. #87524 (Pavel Kruglov).
  • hive 파티션 컬럼이 포맷 헤더에 포함되지 않도록 했습니다. #87515를 수정했습니다. #87528 (Arthur Passos).
  • 텍스트 포맷 사용 시 DeltaLake에서 포맷 읽기 준비 과정의 문제를 수정했습니다. #87529 (Pavel Kruglov).
  • Buffer 테이블에서 select 및 삽입 시 접근 검증을 수정했습니다. #87545 (pufit).
  • S3 테이블에서는 데이터 스키핑 인덱스를 생성할 수 없도록 했습니다. #87554 (Bharat Nallan).
  • async 로깅(10시간 동안 약 100GiB의 큰 편차가 발생할 수 있음)과 text_log(거의 동일한 편차가 발생할 수 있음)에서 추적된 메모리가 누수되지 않도록 수정했습니다. #87584 (Azat Khuzhin).
  • 이 뷰가 비동기적으로 삭제된 뒤 백그라운드 정리가 완료되기 전에 서버가 다시 시작되면, View 또는 Materialized View의 SELECT 설정이 전역 서버 설정을 덮어쓸 수 있었던 버그를 수정했습니다. #87603 (Alexander Tokmakov).
  • 메모리 과부하 경고를 계산할 때는 (가능한 경우) 사용자 공간 페이지 캐시 바이트를 제외하도록 했습니다. #87610 (Bharat Nallan).
  • CSV 역직렬화 중 타입 순서가 잘못되어 LOGICAL_ERROR가 발생하던 버그를 수정했습니다. #87622 (Yarik Briukhovetskyi).
  • 실행형 딕셔너리에서 command_read_timeout이 잘못 처리되던 문제를 수정했습니다. #87627 (Azat Khuzhin).
  • 대체된 컬럼에 필터를 적용할 때 새 분석기에서 WHERE 절의 SELECT * REPLACE 동작이 잘못되던 문제를 수정했습니다. #87630 (xiaohuanlin).
  • Distributed 위에서 Merge를 사용할 때의 2단계 집계 문제를 수정했습니다. #87687 (c-end).
  • 오른쪽 행 목록을 사용하지 않을 때 HashJoin 알고리즘에서 출력 block이 올바르게 생성되지 않던 문제를 수정했습니다. #87401을 수정했습니다. #87699 (Dmitry Novik).
  • 인덱스 분석 적용 후 읽을 데이터가 없으면 병렬 레플리카 읽기 모드가 잘못 선택될 수 있었습니다. #87653을 해결합니다. #87700 (zoomxi).
  • Glue에서 timestamp / timestamptz 컬럼 처리 문제를 수정했습니다. #87733 (Andrey Zvonov).
  • 이 변경으로 #86587가 해결되었습니다. #87761 (scanhex12).
  • PostgreSQL interface에서 불리언 값을 쓰는 문제를 수정했습니다. #87762 (Artem Yurov).
  • CTE가 포함된 INSERT SELECT 쿼리에서 발생하던 알 수 없는 테이블 오류를 수정했습니다. #85368. #87789 (Guang Zhao).
  • Nullable 내부에 포함될 수 없는 Variant에서 NULL 맵 하위 컬럼을 읽는 문제를 수정했습니다. #87798 (Pavel Kruglov).
  • 보조 노드에서 클러스터 전체에 걸친 데이터베이스 삭제가 완전히 수행되지 않을 때 발생하던 처리 오류를 수정했습니다. #87802 (Tuan Pham Anh).
  • 여러 skip 인덱스 관련 버그를 수정했습니다. #87817 (Raúl Marín).
  • AzureBlobStorage에서 먼저 네이티브 복사를 시도하고, ‘Unauthroized’ 오류가 발생하면 읽기 및 쓰기 방식으로 전환하도록 업데이트했습니다(AzureBlobStorage에서 소스와 대상의 스토리지 계정이 서로 다르면 ‘인증되지 않음’ 오류가 발생합니다). 또한 구성에 endpoint가 정의된 경우 “use_native_copy”가 적용되도록 수정했습니다. #87826 (Smita Kulkarni).
  • ArrowStream 파일에 중복된 딕셔너리가 있으면 ClickHouse가 충돌합니다. #87863 (Ilya Golshtein).
  • approx_top_k 및 finalizeAggregation 사용 시 발생하던 치명적 오류를 수정했습니다. #87892 (Jitendra).
  • 마지막 블록이 비어 있을 때 프로젝션 머지 문제를 수정했습니다. #87928 (Raúl Marín).
  • 인수 타입이 GROUP BY에서 허용되지 않으면 GROUP BY에서 단사 함수를 제거하지 않도록 했습니다. #87958 (Pavel Kruglov).
  • 쿼리에서 session_timezone 설정을 사용할 때 datetime 기반 키에 대해 그래뉼/파티션이 잘못 제거되던 문제를 수정했습니다. #87987 (Eduard Karacharov).
  • PostgreSQL 인터페이스에서 쿼리 실행 후 영향을 받은 행 수를 반환합니다. #87990 (Artem Yurov).
  • 잘못된 결과가 발생할 수 있으므로 PASTE JOIN에서 filter pushdown 사용을 제한합니다. #88078 (Yarik Briukhovetskyi).
  • https://github.com/ClickHouse/ClickHouse/pull/84503에서 도입된 권한 부여 검사를 위해 평가 전에 URI 정규화를 적용합니다. #88089 (pufit).
  • 새 분석기에서 ARRAY JOIN COLUMNS()와 일치하는 컬럼이 없을 때 발생하던 논리 오류를 수정했습니다. #88091 (xiaohuanlin).
  • “ClickHouse 메모리 사용량이 높음” 경고를 수정했습니다(페이지 캐시 제외). #88092 (Azat Khuzhin).
  • 컬럼 TTL이 설정된 MergeTree 테이블에서 발생할 수 있는 데이터 손상 문제를 수정했습니다. #88095 (Anton Popov).
  • 외부 데이터베이스(PostgreSQL/SQLite/…)가 ATTACH되어 있고 그 안에 잘못된 테이블이 있는 경우, system.tables를 읽을 때 발생할 수 있는 처리되지 않은 예외를 수정했습니다. #88105 (Azat Khuzhin).
  • 빈 Tuple 인수로 호출될 때 mortonEncodehilbertEncode 함수가 충돌하던 문제를 수정했습니다. #88110 (xiaohuanlin).
  • 이제 클러스터에 비활성 레플리카가 있는 경우에도 ON CLUSTER 쿼리 실행 시간이 더 짧아집니다. #88153 (alesapin).
  • 이제 DDL worker가 레플리카 집합의 오래된 호스트를 정리합니다. 이렇게 하면 ZooKeeper에 저장되는 메타데이터의 양이 줄어듭니다. #88154 (alesapin).
  • cgroups 없이 ClickHouse를 실행할 때 발생하는 문제를 수정했습니다(비동기 메트릭으로 인해 cgroups가 의도치 않게 필수 요구 사항이 된 문제). #88164 (Azat Khuzhin).
  • 오류 발생 시 디렉터리 이동 작업이 올바르게 되돌려지도록 수정했습니다. 실행 중 변경된 모든 prefix.path 객체는 루트 객체뿐 아니라 모두 재작성해야 합니다. #88198 (Mikhail Artemenko).
  • ColumnLowCardinality에서 is_shared 플래그가 올바르게 전파되도록 수정했습니다. 해시 값이 이미 사전 계산되어 ReverseIndex에 캐시된 후 컬럼에 새 값이 삽입되면 group-by 결과가 잘못될 수 있습니다. #88213 (Nikita Taranov).
  • max_cpu_share workload setting 문제를 수정했습니다. 이제 max_cpus workload setting을 설정하지 않아도 사용할 수 있습니다. #88217 (Neerav).
  • 서브쿼리가 포함된 매우 무거운 뮤테이션이 prepare 단계에서 진행이 멈추던 버그를 수정했습니다. 이제 SYSTEM STOP MERGES로 이러한 뮤테이션을 중지할 수 있습니다. #88241 (alesapin).
  • 이제 객체 스토리지에서도 상관 서브쿼리를 사용할 수 있습니다. #88290 (alesapin).
  • system.projectionssystem.data_skipping_indices에 접근할 때 DataLake 데이터베이스 초기화를 시도하지 않도록 수정했습니다. #88330 (Azat Khuzhin).
  • 이제 데이터 레이크 카탈로그는 show_data_lake_catalogs_in_system_tables가 명시적으로 활성화된 경우에만 system 내부 검사 테이블에 표시됩니다. #88341 (alesapin).
  • DatabaseReplicated가 interserver_http_host 구성을 따르도록 수정했습니다. #88378 (xiaohuanlin).
  • 프로젝션을 정의하는 문맥에서는 위치 인수를 이제 명시적으로 비활성화합니다. 이 내부 쿼리 단계에서는 위치 인수가 적절하지 않기 때문입니다. 이로써 #48604가 수정되었습니다. #88380 (Amos Bird).
  • countMatches 함수의 이차 시간 복잡도 문제를 수정했습니다. #88400을 닫습니다. #88401 (Alexey Milovidov).
  • KeeperMap 테이블의 ALTER COLUMN ... COMMENT 명령이 복제되도록 변경하여, 복제된 데이터베이스 메타데이터에 커밋되고 모든 레플리카로 전파되게 했습니다. #88077을 해결했습니다. #88408 (Eduard Karacharov).
  • Replicated 데이터베이스의 materialized view에서 발생한 잘못된 순환 종속성 문제를 수정하여, 새 레플리카를 데이터베이스에 추가하지 못하던 문제를 해결했습니다. #88423 (Nikolay Degterinsky).
  • group_by_overflow_modeany로 설정된 경우 발생하던 희소 컬럼 집계 문제를 수정했습니다. #88440 (Eduard Karacharov).
  • 여러 개의 FULL JOIN USING 절에서 query_plan_use_logical_join_step=0을 사용할 때 발생하던 “컬럼을 찾을 수 없음” 오류를 수정했습니다. #88103을 해결합니다. #88473 (Vladimir Cherkasov).
  • 노드 수가 10개를 초과하는 대규모 클러스터에서는 오류 [941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again와 함께 복원에 실패할 가능성이 높습니다. 여러 호스트가 동시에 num_hosts 노드를 덮어쓰기 때문입니다. 이번 수정으로 시도 횟수를 제어하는 설정이 동적으로 조정되도록 했습니다. #87721을 닫습니다. #88484 (Mikhail f. Shiryaev).
  • 이 PR은 23.8 및 이전 버전과의 호환성을 확보하기 위한 것입니다. 이 호환성 문제는 다음 PR에서 도입되었습니다: https://github.com/ClickHouse/ClickHouse/pull/54240 이 SQL은 enable_analyzer=0일 때 실패합니다(23.8 이전에는 문제없었습니다). #88491 (JIaQi).
  • 큰 값을 DateTime으로 변환할 때 accurateCast 오류 메시지에서 발생하던 UBSAN 정수 오버플로우를 수정했습니다. #88520 (xiaohuanlin).
  • Tuple 타입에 대한 coalescing merge tree 문제를 수정했습니다. 이로써 #88469가 해결되었습니다. #88526 (scanhex12).
  • iceberg_format_version=1에서는 삭제를 허용하지 않습니다. 이로써 #88444가 해결되었습니다. #88532 (scanhex12).
  • 이 패치는 임의의 깊이를 가진 폴더에서 plain-rewritable 디스크의 이동 작업 문제를 수정합니다. #88586 (Mikhail Artemenko).
  • *cluster 함수의 SQL SECURITY DEFINER 문제를 수정했습니다. #88588 (Julian Maicher).
  • 내부 const PREWHERE 컬럼에 대한 동시 mutation으로 발생할 수 있는 잠재적 크래시를 수정했습니다. #88605 (Azat Khuzhin).
  • 텍스트 인덱스에서 읽는 동작과, use_skip_indexes_on_data_readuse_query_condition_cache 설정을 활성화했을 때의 쿼리 조건 캐시 관련 문제를 수정했습니다. #88660 (Anton Popov).
  • Poco::Net::HTTPChunkedStreamBuf::readFromDevice에서 Poco::TimeoutException 예외가 발생하면 SIGABRT와 함께 비정상 종료될 수 있습니다. #88668 (Miсhael Stetsyuk).
  • #88910에서 백포트되었습니다: 복구 후 복제된 데이터베이스 레플리카가 Failed to marked query-0004647339 as finished (finished=No node, synced=No node)와 같은 메시지를 출력하며 오랫동안 멈춰 있는 문제가 수정되었습니다. #88671 (Alexander Tokmakov).
  • 구성을 다시 로드한 후 ClickHouse가 처음 연결될 때 system.zookeeper_connection_log에 추가되지 않던 문제를 수정했습니다. #88728 (Antonio Andelic).
  • date_time_overflow_behavior = 'saturate'일 때 DateTime64를 Date로 변환하는 과정에서 시간대를 사용하는 경우, 범위를 벗어난 값에 대해 잘못된 결과가 나올 수 있던 버그를 수정했습니다. #88737 (Manuel).
  • S3 테이블 엔진에서 캐시가 활성화되었을 때 발생하는 “0바이트 오류”를 수정하려는 또 한 번의 시도입니다. #88740 (Kseniia Sumarokova).
  • loop 테이블 함수에서 select 시 접근 검증을 수정했습니다. #88802 (pufit).
  • 비동기 로깅 실패 시 프로그램이 중단되지 않도록 예외를 처리합니다. #88814 (Raúl Marín).
  • #89060에 백포트되었습니다: top_k가 단일 인수로 호출될 때 임계값 매개변수를 반영하도록 수정했습니다. #88757를 해결합니다. #88867 (Manuel).
  • #88944에 백포트됨: 함수 reverseUTF8의 버그를 수정했습니다. 이전 버전에서는 4바이트 길이의 UTF-8 코드 포인트에 대해 바이트 순서를 잘못 뒤집었습니다. 이로써 #88913이 해결되었습니다. #88914 (Alexey Milovidov).
  • #88980에 백포트됨: SQL SECURITY DEFINER로 뷰를 생성할 때 SET DEFINER <current_user>:definer에 대한 액세스 검사를 수행하지 않습니다. #88968 (pufit).
  • #89058에 백포트: 부분 QBit 읽기 최적화에서 pNullable일 때 반환 유형에서 Nullable을 잘못 제거하던 문제로 인해 L2DistanceTransposed(vec1, vec2, p)에서 발생하던 LOGICAL_ERROR를 수정했습니다. #88974 (Raufs Dunamalijevs).
  • #89167에서 백포트: 알 수 없는 catalog 유형으로 인한 충돌을 수정했습니다. #88819을 해결합니다. #88987 (scanhex12).
  • #89028에 백포트됨: 스키핑 인덱스 분석 시 발생하던 성능 저하를 수정했습니다. #89004 (Anton Popov).

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

  • postgres 라이브러리 버전 18.0을 사용합니다. #87647 (Konstantin Bogdanov).
  • FreeBSD에서 ICU를 활성화했습니다. #87891 (Raúl Marín).
  • SSE 4가 아니라 SSE 4.2로 동적 디스패치할 때는 SSE 4 대신 SSE 4.2를 사용합니다. #88029 (Raúl Marín).
  • Speculative Store Bypass Safe를 사용할 수 없는 경우 NO_ARMV81_OR_HIGHER 플래그를 요구하지 않습니다. #88051 (Konstantin Bogdanov).
  • ClickHouse를 ENABLE_LIBFIU=OFF로 빌드하면 failpoint 관련 함수는 no-op으로 동작하며 더 이상 성능에 영향을 주지 않습니다. 이 경우 SYSTEM ENABLE/DISABLE FAILPOINT 쿼리는 SUPPORT_IS_DISABLED 오류를 반환합니다. #88184 (c-end).

ClickHouse 릴리스 25.9, 2025-09-25

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

  • IPv4/IPv6에 대한 무의미한 이항 연산을 비활성화했습니다. 정수가 아닌 타입과 IPv4/IPv6 사이의 덧셈/뺄셈은 이제 허용되지 않습니다. 이전에는 부동소수점 타입과의 연산은 허용되었고, 일부 다른 타입(예: DateTime)에서는 논리 오류를 발생시켰습니다. #86336 (Raúl Marín).
  • 설정 allow_dynamic_metadata_for_data_lakes는 더 이상 사용이 권장되지 않습니다. 이제 모든 Iceberg 테이블은 각 쿼리를 실행하기 전에 스토리지에서 최신 테이블 스키마를 가져오려고 시도합니다. #86366 (Daniil Ivanik).
  • OUTER JOIN ... USING 절에서 병합된 컬럼을 해석하는 방식을 더 일관되게 변경했습니다. 이전에는 OUTER JOIN에서 USING 컬럼과 수식된 컬럼(a, t1.a, t2.a)을 모두 선택할 때, USING 컬럼이 잘못 t1.a로 해석되어 왼쪽 테이블에 일치하는 값이 없는 오른쪽 테이블의 행에 0/NULL이 표시되었습니다. 이제 USING 절의 식별자는 항상 병합된 컬럼으로 해석되며, 수식된 식별자는 쿼리에 다른 식별자가 무엇이 있든 병합되지 않은 컬럼으로 해석됩니다. 예시: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) — 이전: a=0, t1.a=0, t2.a=2 (잘못됨 - ‘a’가 t1.a로 해석됨) — 이후: a=2, t1.a=0, t2.a=2 (정상 - ‘a’는 병합됨). #80848 (Vladimir Cherkasov).
  • 복제된 중복 제거 윈도우를 최대 10000까지 늘렸습니다. 이는 완전히 호환되는 변경이지만, 테이블 수가 매우 많은 환경에서는 이 변경으로 인해 리소스 활용이 높아질 수 있는 시나리오도 있을 수 있습니다. #86820 (Sema Checherinda).

새 기능

  • 이제 NATS 엔진에서 nats_streamnats_consumer의 새로운 설정을 지정해 NATS JetStream의 메시지를 수신할 수 있습니다. #84799 (Dmitry Novikov).
  • arrowFlight 테이블 함수에 인증 및 SSL 지원이 추가되었습니다. #87120 (Vitaly Baranov).
  • AWS에서 지원하는 지능형 티어링을 지정할 수 있는 storage_class_name이라는 새 매개변수가 S3 테이블 엔진과 s3 테이블 함수에 추가되었습니다. 키-값 포맷과 위치 기반(비권장) 포맷 모두에서 지원됩니다). #87122 (alesapin).
  • Iceberg 테이블 엔진에서 ALTER UPDATE를 지원합니다. #86059 (scanhex12).
  • SELECT 문에서 Iceberg 메타데이터 파일을 조회할 수 있도록 시스템 테이블(system table) iceberg_metadata_log를 추가했습니다. #86152 (scanhex12).
  • IcebergDeltaLake 테이블은 스토리지 레벨 설정 disk를 통해 사용자 지정 디스크 구성을 지원합니다. #86778 (scanhex12).
  • 데이터 레이크 디스크에서 Azure를 지원합니다. #87173 (scanhex12).
  • Azure blob storage 기반의 Unity 카탈로그를 지원합니다. #80013 (Smita Kulkarni).
  • Iceberg 쓰기에서 더 많은 포맷(ORC, Avro)을 지원합니다. 이 변경으로 #86179가 해결됩니다. #87277 (scanhex12).
  • 데이터베이스 레플리카 정보를 제공하는 새 system table database_replicas를 추가했습니다. #83408 (Konstantin Morozov).
  • 한 배열을 집합으로 간주해 다른 배열에서 제외하는 arrayExcept 함수를 추가했습니다. #82368 (Joanna Hulboj).
  • 새로운 system.aggregated_zookeeper_log 테이블을 추가합니다. 이 테이블에는 세션 ID, 상위 경로, 작업 유형별로 그룹화된 ZooKeeper 작업의 통계(예: 작업 수, 평균 지연 시간, 오류 수)가 포함되며, 주기적으로 디스크에 플러시됩니다. #85102 #87208 (Miсhael Stetsyuk).
  • 새 함수 isValidASCII가 추가되었습니다. 입력 문자열 또는 FixedString에 ASCII 바이트(0x00–0x7F)만 포함되어 있으면 1을, 그렇지 않으면 0을 반환합니다. #85377를 해결합니다. … #85786 (rajat mohan).
  • 불리언 설정은 인수 없이 지정할 수 있습니다. 예를 들어 SET use_query_cache;는 값을 true로 설정하는 것과 같습니다. #85800 (thraeka).
  • 새로운 구성 옵션 logger.startupLevellogger.shutdownLevel을 사용하면 각각 ClickHouse의 시작 및 종료 시 로그 수준을 재정의할 수 있습니다. #85967 (Lennard Eijsackers).
  • 집계 함수 timeSeriesChangesToGridtimeSeriesResetsToGrid. timeSeriesRateToGrid와 비슷하게 동작하며, 시작 타임스탬프, 종료 타임스탬프, 간격, look back 윈도우에 대한 매개변수와 타임스탬프 및 값을 위한 2개의 인수를 받지만, 2개가 아니라 각 윈도우마다 최소 1개의 샘플만 필요합니다. PromQL changes/resets를 계산하며, 매개변수로 정의된 시간 그리드의 각 타임스탬프에 대해 지정된 윈도우에서 샘플 값이 변경되거나 감소한 횟수를 셉니다. 반환 유형은 Array(Nullable(Float64))입니다. #86010 (Stephen Chi).
  • 사용자가 임시 테이블과 비슷한 구문(CREATE TEMPORARY VIEW)을 사용해 임시 뷰를 생성할 수 있습니다. #86432 (Aly Kafoury).
  • system.warnings 테이블에 CPU 및 메모리 사용량 경고를 추가합니다. #86838 (Bharat Nallan).
  • Protobuf 입력에서 oneof 표시자를 지원합니다. oneof의 어떤 부분이 존재하는지 나타내기 위해 특수 컬럼을 사용할 수 있습니다. 메시지에 oneof가 포함되어 있고 input_format_protobuf_oneof_presence가 설정되면, ClickHouse는 oneof에서 어떤 필드가 발견되었는지를 나타내는 컬럼을 채웁니다. #82885 (Ilya Golshtein).
  • jemalloc의 내부 도구를 바탕으로 메모리 할당 프로파일링을 개선했습니다. 이제 config jemalloc_enable_global_profiler를 사용해 jemalloc 전역 프로파일러를 활성화할 수 있습니다. 샘플링된 전역 메모리 할당 및 메모리 해제 이벤트는 config jemalloc_collect_global_profile_samples_in_trace_log를 활성화하면 JemallocSample 유형으로 system.trace_log에 저장할 수 있습니다. 이제 setting jemalloc_enable_profiler를 사용해 각 쿼리별로 jemalloc 프로파일링을 독립적으로 활성화할 수 있습니다. system.trace_log에 샘플을 저장할지 여부는 setting jemalloc_collect_profile_samples_in_trace_log를 사용해 쿼리별로 제어할 수 있습니다. jemalloc을 새 버전으로 업데이트했습니다. #85438 (Antonio Andelic).
  • Iceberg 테이블 삭제 시 파일도 함께 삭제하는 새로운 설정입니다. 이는 #86211을 해결합니다. #86501 (scanhex12).

실험적 기능

  • 역텍스트 인덱스가 RAM에 들어가지 않는 데이터셋에도 확장 가능하도록 처음부터 다시 구현되었습니다. #86485 (Anton Popov).
  • 이제 JOIN 재정렬에 통계가 사용됩니다. 이 기능은 allow_statistics_optimize = 1query_plan_optimize_join_order_limit = 10을 설정하여 활성화할 수 있습니다. #86822 (Han Fei).
  • alter table ... materialize statistics all 지원이 추가되어 테이블의 모든 통계를 구체화할 수 있습니다. #87197 (Han Fei).

성능 개선

  • 읽기 시 스킵 인덱스를 사용해 데이터 파트를 필터링함으로써 불필요한 인덱스 읽기를 줄일 수 있도록 지원합니다. 이는 새로운 설정 use_skip_indexes_on_data_read로 제어되며(기본적으로 비활성화), #75774를 해결합니다. 여기에는 #81021과 공통으로 사용되는 일부 기반 작업도 포함됩니다. #81526 (Amos Bird).
  • 더 나은 성능을 위해 조인을 자동으로 재정렬할 수 있는 JOIN 순서 최적화가 추가되었습니다(query_plan_optimize_join_order_limit setting으로 제어됨). 현재 join order optimization은 통계 지원이 제한적이며, 주로 스토리지 엔진의 행 수 추정치에 의존합니다. 더 정교한 통계 수집과 카디널리티 추정은 향후 릴리스에서 추가될 예정입니다. 업그레이드 후 JOIN 쿼리에서 문제가 발생하는 경우, SET query_plan_use_new_logical_join_step = 0을 설정해 새 구현을 일시적으로 비활성화한 뒤, 조사를 위해 문제를 보고할 수 있습니다. USING 절의 식별자 해석에 관한 참고: OUTER JOIN ... USING 절에서 coalesced 컬럼을 해석하는 방식이 더 일관되도록 변경되었습니다. 이전에는 OUTER JOIN에서 USING 컬럼과 한정된 컬럼(a, t1.a, t2.a)을 함께 선택하면, USING 컬럼이 잘못 t1.a로 해석되어 왼쪽에 일치하는 행이 없는 오른쪽 테이블의 행에 대해 0/NULL이 표시되었습니다. 이제 USING 절의 식별자는 항상 coalesced 컬럼으로 해석되고, 한정된 식별자는 쿼리에 어떤 다른 식별자가 있든 관계없이 non-coalesced 컬럼으로 해석됩니다. 예시: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) — 이전: a=0, t1.a=0, t2.a=2 (잘못됨 - ‘a’가 t1.a로 해석됨) — 이후: a=2, t1.a=0, t2.a=2 (올바름 - ‘a’는 coalesced됨). #80848 (Vladimir Cherkasov).
  • 데이터 레이크용 분산 INSERT SELECT. #86783 (scanhex12).
  • func(primary_column) = 'xx'column in (xxx)와 같은 조건에서 PREWHERE 최적화를 개선했습니다. #85529 (李扬).
  • JOIN 재작성 기능이 구현되었습니다: 1. 일치하는 행 또는 일치하지 않는 행에 대해 filter condition이 항상 false인 경우 LEFT ANY JOINRIGHT ANY JOINSEMI/ANTI JOIN으로 변환합니다. 이 최적화는 새로운 설정 query_plan_convert_any_join_to_semi_or_anti_join으로 제어됩니다. 2. 한쪽의 일치하지 않는 행에 대해 filter condition이 항상 false인 경우 FULL ALL JOINLEFT ALL 또는 RIGHT ALL JOIN으로 변환합니다. #86028 (Dmitry Novik).
  • 경량한 삭제 실행 후 수직 병합 성능을 개선했습니다. #86169 (Anton Popov).
  • LEFT/RIGHT join에서 일치하지 않는 행이 많은 경우 HashJoin 성능이 소폭 개선되었습니다. #86312 (Nikita Taranov).
  • 기수 정렬(Radix sort): 컴파일러가 SIMD를 더 잘 활용하고 프리페치를 더 효율적으로 수행할 수 있도록 개선했습니다. Intel CPU에서만 소프트웨어 프리페치를 사용하도록 동적 디스패치를 활용합니다. https://github.com/ClickHouse/ClickHouse/pull/77029에서 @taiyang-li가 수행한 작업을 이어갑니다. #86378 (Raúl Marín).
  • 파트가 많은 테이블에서 실행되는 짧은 쿼리의 성능을 개선합니다(deque 대신 devector를 사용해 MarkRanges를 최적화). #86933 (Azat Khuzhin).
  • join 모드에서 패치 파트를 적용하는 성능이 개선되었습니다. #87094 (Anton Popov).
  • 선택도가 낮은 프레디케이트의 스캔 결과를 쿼리 조건 캐시에 삽입하지 않도록 제외하는 설정 query_condition_cache_selectivity_threshold(기본값: 1.0)이 추가되었습니다. 이를 통해 캐시 적중률이 다소 낮아지는 대신 쿼리 조건 캐시의 메모리 사용량을 줄일 수 있습니다. #86076 (zhongyuankai).
  • Iceberg 쓰기 시 메모리 사용량을 줄였습니다. #86544 (scanhex12).

개선 사항

  • 한 번의 삽입으로 Iceberg에 여러 데이터 파일을 쓸 수 있도록 지원합니다. 한도를 제어할 수 있도록 새로운 설정 iceberg_insert_max_rows_in_data_fileiceberg_insert_max_bytes_in_data_file를 추가했습니다. #86275 (scanhex12).
  • delta lake에 삽입되는 데이터 파일의 행 수/바이트 수 제한을 추가했습니다. delta_lake_insert_max_rows_in_data_filedelta_lake_insert_max_bytes_in_data_file 설정으로 제어됩니다. #86357 (Kseniia Sumarokova).
  • Iceberg 쓰기에서 파티션에 더 많은 타입을 지원합니다. 이로써 #86206이 해결되었습니다. #86298 (scanhex12).
  • S3 재시도 전략을 설정할 수 있게 하고, config XML 파일이 변경되면 S3 디스크 설정을 핫 리로드할 수 있도록 했습니다. #82642 (RinChanNOW).
  • S3(Azure)Queue 테이블 엔진을 개선하여 잠재적인 중복 없이 ZooKeeper 연결이 끊겨도 정상적으로 동작할 수 있도록 했습니다. S3Queue 설정 use_persistent_processing_nodes를 활성화해야 합니다(ALTER TABLE MODIFY SETTING으로 변경 가능). #85995 (Kseniia Sumarokova).
  • materialized view를 생성할 때 TO 뒤에 쿼리 매개변수를 사용할 수 있습니다. 예를 들어 다음과 같습니다: CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table. #84899 (Diskein).
  • Kafka2 테이블 엔진에 잘못된 설정이 지정된 경우 사용자 안내를 더 명확하게 개선했습니다. #83701 (János Benjamin Antal).
  • 이제 Time 유형에는 시간대를 지정할 수 없습니다(의미가 없기 때문입니다). #84689 (Yarik Briukhovetskyi).
  • best_effort 모드에서 Time/Time64 파싱과 관련된 로직을 단순화하고 일부 버그를 방지했습니다. #84730 (Yarik Briukhovetskyi).
  • deltaLakeAzureCluster 함수(deltaLakeAzure와 유사한 클러스터 모드용)와 deltaLakeS3Cluster 함수(deltaLakeCluster의 별칭)가 추가되었습니다. #85358를 해결했습니다. #85547 (Smita Kulkarni).
  • 일반 복사 작업에도 백업과 동일하게 azure_max_single_part_copy_size 설정을 적용합니다. #85767 (Ilya Golshtein).
  • S3 객체 스토리지에서 재시도 가능한 오류가 발생하면 S3 클라이언트 스레드의 처리 속도를 늦춥니다. 이는 이전 설정 backup_slow_all_threads_after_retryable_s3_error의 적용 범위를 S3 디스크로 확장하고, 이름을 더 일반적인 s3_slow_all_threads_after_retryable_error로 변경한 것입니다. #85918 (Julia Kartseva).
  • 설정 allow_experimental_variant/dynamic/json 및 enable_variant/dynamic/json을 사용 중단으로 표시했습니다. 이제 세 가지 타입은 모두 조건 없이 활성화됩니다. #85934 (Pavel Kruglov).
  • http_handlers에서 전체 URL 문자열(full_url 지시어, 스킴과 host:port 포함) 기준 필터링을 지원합니다. #86155 (Azat Khuzhin).
  • 새로운 설정 allow_experimental_delta_lake_writes가 추가되었습니다. #86180 (Kseniia Sumarokova).
  • init.d 스크립트에서 systemd 감지 로직을 수정했습니다(“Install packages” check 수정). #86187 (Azat Khuzhin).
  • 새로운 startup_scripts_failure_reason 차원 메트릭을 추가했습니다. 이 메트릭은 시작 스크립트 실패를 초래하는 여러 유형의 오류를 구분하는 데 필요합니다. 특히 알림을 위해서는 일시적 오류(예: MEMORY_LIMIT_EXCEEDED 또는 KEEPER_EXCEPTION)와 비일시적 오류를 구분해야 합니다. #86202 (Miсhael Stetsyuk).
  • Iceberg 테이블 파티션에서 identity 함수를 생략할 수 있게 했습니다. #86314 (scanhex12).
  • 특정 채널에서만 JSON 로깅을 활성화할 수 있도록 지원을 추가했습니다. 이를 위해 logger.formatting.channelsyslog/console/errorlog/log 중 하나로 설정합니다. #86331 (Azat Khuzhin).
  • WHERE에서 네이티브 숫자를 사용할 수 있도록 했습니다. 이미 논리 함수의 인수로도 사용할 수 있습니다. 이로써 필터 푸시다운과 move-to-prewhere 최적화가 간소화됩니다. #86390 (Nikolai Kochetov).
  • 손상된 메타데이터가 있는 Catalog를 대상으로 SYSTEM DROP REPLICA를 실행할 때 발생하던 오류를 수정했습니다. #86391 (Nikita Mikhaylov).
  • Azure에서는 액세스 권한이 프로비저닝되는 데 상당한 시간이 걸릴 수 있으므로 디스크 액세스 검사(skip_access_check = 0)에 대한 재시도를 추가했습니다. #86419 (Alexander Tokmakov).
  • timeSeries*() 함수의 staleness 윈도우를 좌개방, 우폐구간으로 변경했습니다. #86588 (Vitaly Baranov).
  • FailedInternal*Query profile events가 추가되었습니다. #86627 (Shane Andrade).
  • 구성 파일을 통해 추가할 때 이름에 점이 포함된 사용자를 처리하는 방식을 수정했습니다. #86633 (Mikhail Koviazin).
  • 쿼리 메모리 사용량에 대한 비동기 메트릭(QueriesMemoryUsageQueriesPeakMemoryUsage)을 추가했습니다. #86669 (Azat Khuzhin).
  • QPS와 기타 인터벌별 메트릭을 더 정확하게 보고할 수 있도록 clickhouse-benchmark --precise 플래그를 사용할 수 있습니다. 이 플래그는 쿼리 실행 시간이 보고 인터벌인 --delay D와 비슷한 경우에도 QPS를 일관되게 측정하는 데 도움이 됩니다. #86684 (Sergei Trifonov).
  • 일부 스레드(머지/변경, 쿼리, materialized view, ZooKeeper 클라이언트)에 더 높거나 낮은 우선순위를 할당할 수 있도록 Linux 스레드의 nice 값을 조정할 수 있게 했습니다. #86703 (Miсhael Stetsyuk).
  • 멀티파트 업로드 중 race condition으로 인해 원래 예외가 유실될 때 발생하는, 오해의 소지가 있는 “specified upload does not exist” 오류를 수정했습니다. #86725 (Julia Kartseva).
  • EXPLAIN 쿼리에서 쿼리 계획 설명을 제한합니다. EXPLAIN 이외의 쿼리에서는 해당 설명을 계산하지 않습니다. query_plan_max_step_description_length 설정이 추가되었습니다. #86741 (Nikolai Kochetov).
  • CANNOT&#95;CREATE&#95;TIMER를 완화하기 위해 보류 중인 시그널을 조정할 수 있는 기능을 추가했습니다(쿼리 프로파일러의 경우 query_profiler_real_time_period_ns/query_profiler_cpu_time_period_ns). 또한 내부 검사를 위해 /proc/self/status에서 SigQ도 수집합니다(ProcessSignalQueueSizeProcessSignalQueueLimit에 가까우면 CANNOT_CREATE_TIMER 오류가 발생할 가능성이 높습니다). #86760 (Azat Khuzhin).
  • Keeper에서 RemoveRecursive 요청 성능을 개선했습니다. #86789 (Antonio Andelic).
  • PrettyJSONEachRow의 JSON 타입 출력 중 불필요한 공백을 제거했습니다. #86819 (Pavel Kruglov).
  • 이제 일반 재기록 가능 디스크에서 디렉터리가 제거되면 prefix.path의 blob 크기를 기록합니다. #86908 (alesapin).
  • ClickHouse Cloud를 포함한 원격 ClickHouse 인스턴스에 대한 성능 테스트를 지원합니다. 사용 예시: tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user <username> --password <password> --host <hostname> --port <port> --secure. #86995 (Raufs Dunamalijevs).
  • 메모리를 많이 할당하는 것으로 알려진 일부 작업(>16MiB, 정렬, async inserts, 파일 로그)에서 메모리 제한을 준수하도록 개선했습니다. #87035 (Azat Khuzhin).
  • network_compression_method 설정이 지원되는 범용 코덱이 아니면 예외를 발생시킵니다. #87097 (Robert Schulze).
  • 시스템 테이블(system table) system.query_cache는 이제 모든 쿼리 결과 캐시(query result cache) 엔트리를 반환합니다. 이전에는 동일한 사용자와 역할에 속한 공유 엔트리 또는 비공유 엔트리만 반환했습니다. 이는 비공유 엔트리가 쿼리 결과를 노출하지 않도록 설계되어 있고, system.query_cache는 *쿼리 문자열(query strings)*을 반환하므로 문제되지 않습니다. 이로써 이 시스템 테이블의 동작이 system.query_log와 더욱 유사해집니다. #87104 (Robert Schulze).
  • parseDateTime 함수에 대한 단락 평가를 활성화했습니다. #87184 (Pavel Kruglov).
  • system.parts_columns에 새 컬럼 statistics이 추가되었습니다. #87259 (Han Fei).

버그 수정(공식 안정 릴리스에서 사용자에게 보이는 오동작)

  • 복제된 데이터베이스와 내부적으로 복제된 테이블에서는 ALTER 쿼리 결과를 initiator 노드에서만 검증합니다. 이 변경으로 이미 커밋된 ALTER 쿼리가 다른 노드에서 멈춰 버리던 문제가 해결됩니다. #83849 (János Benjamin Antal).
  • BackgroundSchedulePool에서 각 유형별 작업 수를 제한합니다. 모든 슬롯이 한 유형의 작업으로만 점유되어 다른 작업이 처리되지 못하는 상황을 방지합니다. 또한 작업이 서로를 기다릴 때 발생하는 교착 상태도 방지합니다. 이는 background_schedule_pool_max_parallel_tasks_per_type_ratio 서버 설정으로 제어됩니다. #84008 (Alexander Tokmakov).
  • 데이터베이스 레플리카 복구 시 테이블이 올바르게 종료되도록 수정했습니다. 잘못 종료되면 데이터베이스 레플리카 복구 중 일부 테이블 엔진에서 LOGICAL_ERROR가 발생했습니다. #84744 (Antonio Andelic).
  • 데이터베이스 이름에 대한 오타 수정 힌트를 생성할 때 접근 권한을 확인하도록 했습니다. #85371 (Dmitry Novik).
    1. hive 컬럼용 LowCardinality 2. 가상 컬럼보다 먼저 hive 컬럼 채우기(https://github.com/ClickHouse/ClickHouse/pull/81040에 필요) 3. hive의 빈 포맷에서 LOGICAL_ERROR 발생 #85528 4. hive 파티션 컬럼만 유일한 컬럼인 경우에 대한 검사 수정 5. 모든 hive 컬럼이 스키마에 지정되었는지 검증 6. hive의 parallel_replicas_cluster에 대한 부분 수정 7. hive 유틸리티의 extractkeyValuePairs에서 순서가 보장되는 컨테이너 사용(https://github.com/ClickHouse/ClickHouse/pull/81040에 필요). #85538 (Arthur Passos).
  • 배열 매핑을 사용할 때 간헐적으로 오류를 일으키던 IN 함수의 첫 번째 인수에 대한 불필요한 최적화를 방지합니다. #85546 (Yakov Olkhovskiy).
  • Iceberg source ID와 Parquet 이름 간의 매핑이 Parquet 파일 작성 시 schema에 맞게 조정되지 않았습니다. 이 PR은 현재 schema가 아니라 각 Iceberg 데이터 파일에 해당하는 schema를 처리합니다. #85829 (Daniil Ivanik).
  • 파일을 여는 작업과는 별도로 파일 크기를 읽도록 수정했습니다. 이는 5.10 릴리스 이전 Linux 커널의 버그에 대응해 도입된 https://github.com/ClickHouse/ClickHouse/pull/33372와 관련이 있습니다. #85837 (Konstantin Bogdanov).
  • 이제 커널 수준에서 IPv6가 비활성화된 시스템(예: ipv6.disable=1이 설정된 RHEL)에서도 ClickHouse Keeper가 더 이상 시작에 실패하지 않습니다. 초기 IPv6 리스너 시작에 실패하면 IPv4 리스너로 대체를 시도합니다. #85901 (jskong1124).
  • 이 PR은 #77990을 해결합니다. globalJoin에서 병렬 레플리카에 대한 TableFunctionRemote 지원을 추가합니다. #85929 (zoomxi).
  • orcschemareader::initializeifneeded()의 널 포인터 문제를 수정했습니다. 이 PR은 다음 이슈를 해결합니다: #85292 ### 사용자 대상 변경 사항에 대한 문서 항목입니다. #85951 (yanglongwei).
  • 외부 쿼리의 컬럼을 사용하는 경우에만 FROM 절에서 상관 서브쿼리를 허용하는 검사를 추가했습니다. #85469을 수정했습니다. #85402을 수정했습니다. #85966 (Dmitry Novik).
  • 다른 컬럼의 구체화된 표현식에서 하위 컬럼이 사용되는 컬럼에 대한 ALTER UPDATE를 수정했습니다. 이전에는 표현식에 하위 컬럼이 포함된 구체화된 컬럼(Materialized Column)이 제대로 업데이트되지 않았습니다. #85985 (Pavel Kruglov).
  • 서브컬럼이 PK 또는 파티션 표현식에 사용되는 컬럼은 변경할 수 없도록 합니다. #86005 (Pavel Kruglov).
  • 스토리지 DeltaLake에서 기본이 아닌 컬럼 매핑 모드를 사용할 때 서브컬럼을 읽지 못하던 문제를 수정했습니다. #86064 (Kseniia Sumarokova).
  • JSON 내부에서 Enum 힌트가 있는 경로에 잘못된 기본값이 사용되던 문제를 수정했습니다. #86065 (Pavel Kruglov).
  • 입력값 정제를 적용한 DataLake hive 카탈로그 URL 파싱. #86018을 해결했습니다. #86092 (rajat mohan).
  • 파일 시스템 캐시의 동적 크기 조정 중 발생하는 논리 오류를 수정했습니다. #86122를 해결합니다. https://github.com/ClickHouse/clickhouse-core-incidents/issues/473을 해결합니다. #86130 (Kseniia Sumarokova).
  • DatabaseReplicatedSettings의 logs_to_keep에는 NonZeroUInt64를 사용합니다. #86142 (Tuan Pham Anh).
  • 테이블(예: ReplacingMergeTree)이 설정 index_granularity_bytes = 0으로 생성된 경우, 스킵 인덱스가 있는 FINAL 쿼리에서 예외가 발생하던 문제가 있었습니다. 이제 해당 예외는 수정되었습니다. #86147 (Shankar Iyer).
  • UB를 제거하고 Iceberg 파티션 표현식 파싱 문제를 수정합니다. #86166 (Daniil Ivanik).
  • 하나의 INSERT에 const 및 non-const 블록이 함께 포함된 경우 발생하던 충돌을 수정했습니다. #86230 (Azat Khuzhin).
  • SQL에서 디스크를 생성할 때 기본적으로 /etc/metrika.xml의 include를 처리합니다. #86232 (alekar).
  • String에서 JSON으로의 accurateCastOrNull/accurateCastOrDefault 문제를 수정했습니다. #86240 (Pavel Kruglov).
  • Iceberg engine에서 ’/‘가 없는 디렉터리도 지원합니다. #86249 (scanhex12).
  • FixedString haystack와 빈 needle을 사용하는 replaceRegex에서 발생하던 충돌을 수정했습니다. #86270 (Raúl Marín).
  • ALTER UPDATE Nullable(JSON) 수행 중 발생하던 크래시를 수정했습니다. #86281 (Pavel Kruglov).
  • system.tables에서 누락된 definer 컬럼을 수정했습니다. #86295 (Raúl Marín).
  • LowCardinality(Nullable(T))에서 Dynamic으로 CAST하는 문제를 수정했습니다. #86365 (Pavel Kruglov).
  • DeltaLake에 쓰기 작업 중 발생하던 논리 오류를 수정했습니다. #86175를 해결합니다. #86367 (Kseniia Sumarokova).
  • plain_rewritable 디스크에서 Azure blob storage의 빈 blob을 읽을 때 발생하던 416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resource 오류를 수정했습니다. #86400 (Julia Kartseva).
  • Nullable(JSON)에 대한 GROUP BY 문제를 수정했습니다. #86410 (Pavel Kruglov).
  • 구체화된 뷰(Materialized View)의 버그를 수정했습니다. MV를 생성한 뒤 삭제하고 같은 이름으로 다시 생성하면 작동하지 않을 수 있었습니다. #86413 (Alexander Tokmakov).
  • 모든 레플리카를 사용할 수 없는 상태에서 *cluster 함수로 읽기를 수행하면 실패하도록 했습니다. #86414 (Julian Maicher).
  • Buffer 테이블로 인해 발생하던 MergesMutationsMemoryTracking 메모리 누수를 수정하고, Kafka(및 기타)에서 스트리밍할 때 query_views_log를 수정했습니다. #86422 (Azat Khuzhin).
  • alias 스토리지의 참조 테이블을 삭제한 후 show tables가 정상적으로 동작하도록 수정했습니다. #86433 (RinChanNOW).
  • send_chunk_header가 활성화된 상태에서 HTTP 프로토콜을 통해 UDF를 호출할 때 누락되던 청크 헤더를 수정했습니다. #86469 (Vladimir Cherkasov).
  • jemalloc profile 플러시가 활성화된 경우 발생할 수 있는 교착 상태를 수정했습니다. #86473 (Azat Khuzhin).
  • DeltaLake 테이블 엔진에서 서브컬럼 읽기 문제를 수정했습니다. #86204를 해결했습니다. #86477 (Kseniia Sumarokova).
  • DDL 작업 처리 시 충돌을 방지하도록 loopback host ID를 올바르게 처리합니다:. #86479 (Tuan Pham Anh).
  • Postgres 데이터베이스 엔진 테이블의 numeric/decimal 컬럼에 대한 detach/attach 문제를 수정했습니다. #86480 (Julian Maicher).
  • getSubcolumnType에서 초기화되지 않은 메모리를 사용하는 문제를 수정했습니다. #86498 (Raúl Marín).
  • 함수 searchAnysearchAll은 이제 빈 needle로 호출하면 true(즉, “모든 항목과 일치”)를 반환합니다. 이전에는 false를 반환했습니다. (이슈 #86300). #86500 (Elmi Ahmadov).
  • 첫 번째 버킷에 값이 없는 경우 함수 timeSeriesResampleToGridWithStaleness()의 문제를 수정했습니다. #86507 (Vitaly Baranov).
  • merge_tree_min_read_task_size가 0으로 설정되어 발생한 충돌을 수정했습니다. #86527 (yanglongwei).
  • 읽을 때 각 데이터 파일의 포맷을 Iceberg 메타데이터에서 가져오도록 변경했습니다(이전에는 테이블 인수에서 가져왔습니다). #86529 (Daniil Ivanik).
  • 종료 시 로그 플러시 중 발생하는 예외를 무시하고, 종료 과정을 더 안전하게 개선했습니다(SIGSEGV를 방지하기 위해). #86546 (Azat Khuzhin).
  • 크기가 0인 part 파일이 있을 때 쿼리에서 예외가 발생하던 Backup DB 엔진을 수정했습니다. #86563 (Max Justus Spransy).
  • send_chunk_header가 활성화되어 있고 UDF가 HTTP protocol을 통해 호출될 때 누락되던 청크 헤더를 수정했습니다. #86606 (Vladimir Cherkasov).
  • Keeper 세션 만료로 인해 발생하던 S3Queue 논리적 오류 “현재 processor 와 같아야 합니다”를 수정했습니다. #86615 (Kseniia Sumarokova).
  • 삽입 및 프루닝의 Nullability 버그를 수정했습니다. 이 변경으로 #86407이 해결됩니다. #86630 (scanhex12).
  • Iceberg 메타데이터 캐시가 비활성화되어 있으면 파일 시스템 캐시를 비활성화하지 마십시오. #86635 (Daniil Ivanik).
  • Parquet 리더 v3의 ‘Deadlock in Parquet::ReadManager (single-threaded)’ 오류를 수정했습니다. #86644 (Michael Kolupaev).
  • ArrowFlight의 listen_host에서 IPv6 지원 문제를 수정했습니다. #86664 (Vitaly Baranov).
  • ArrowFlight 처리기의 종료 문제를 수정했습니다. 이 PR은 #86596를 해결합니다. #86665 (Vitaly Baranov).
  • describe_compact_output=1 설정 시 발생하던 분산 쿼리 문제를 수정했습니다. #86676 (Azat Khuzhin).
  • 윈도우 정의 파싱 및 쿼리 매개변수 적용 문제를 수정했습니다. #86720 (Azat Khuzhin).
  • PARTITION BY로 테이블을 생성할 때 파티션 와일드카드는 없지만, 25.8 이전 버전에서는 동작하던 경우에 발생하던 예외 Partition strategy wildcard can not be used without a '_partition_id' wildcard.를 수정했습니다. https://github.com/ClickHouse/clickhouse-private/issues/37567 이슈를 해결합니다. #86748 (Kseniia Sumarokova).
  • 병렬 쿼리가 하나의 잠금을 획득하려고 할 때 발생하는 LogicalError를 수정했습니다. #86751 (Pervakov Grigorii).
  • RowBinary 입력 형식에서 JSON 공유 데이터에 NULL을 기록하는 문제를 수정하고 ColumnObject에 몇 가지 추가 유효성 검사를 더했습니다. #86812 (Pavel Kruglov).
  • limit 사용 시 빈 Tuple 순열 문제를 수정했습니다. #86828 (Pavel Kruglov).
  • 영속적 처리 노드에는 별도의 Keeper 노드를 사용하지 마십시오. https://github.com/ClickHouse/ClickHouse/pull/85995에 대한 수정입니다. #86406을 해결합니다. #86841 (Kseniia Sumarokova).
  • 복제된 데이터베이스에서 새 레플리카를 생성하지 못하게 하던 TimeSeries 엔진 테이블 문제를 수정했습니다. #86845 (Nikolay Degterinsky).
  • 작업에 특정 Keeper 노드가 없는 경우 system.distributed_ddl_queue를 쿼리할 때 발생하던 문제를 수정했습니다. #86848 (Antonio Andelic).
  • 압축 해제된 block의 끝에서 seek가 수행되던 문제를 수정했습니다. #86906 (Pavel Kruglov).
  • Iceberg Iterator의 비동기 실행 중 발생한 예외를 처리합니다. #86932 (Daniil Ivanik).
  • 대용량 전처리 XML 구성 저장 문제를 수정했습니다. #86934 (c-end).
  • system.iceberg_metadata_log 테이블에서 date 필드가 채워지지 않던 문제를 수정했습니다. #86961 (Daniil Ivanik).
  • WHERE가 포함된 TTL에서 발생하던 무한 재계산 문제를 수정했습니다. #86965 (Anton Popov).
  • ROLLUPCUBE 수정자와 함께 사용할 때 uniqExact 함수에서 잘못된 결과가 나올 수 있던 문제를 수정했습니다. #87014 (Nikita Taranov).
  • parallel_replicas_for_cluster_functions 설정이 1로 지정된 경우 url() 테이블 함수에서 테이블 스키마(schema)를 확인하는 과정에서 발생하던 문제를 수정했습니다. #87029 (Konstantin Bogdanov).
  • 여러 단계로 분할한 뒤 PREWHERE 출력이 올바르게 형 변환되도록 수정했습니다. #87040 (Antonio Andelic).
  • ON CLUSTER 절을 사용하는 경량 업데이트 문제를 수정했습니다. #87043 (Anton Popov).
  • 일부 집계 함수 상태가 String 인수와 호환되도록 수정했습니다. #87049 (Pavel Kruglov).
  • OpenAI의 모델 이름이 제대로 전달되지 않던 문제를 수정했습니다. #87100 (Kaushik Iska).
  • EmbeddedRocksDB: 경로는 user_files 디렉터리 내부에 있어야 합니다. #87109 (Raúl Marín).
  • 25.1 이전에 생성된 KeeperMap 테이블에서 DROP 쿼리 실행 후에도 ZooKeeper에 데이터가 남는 문제를 수정했습니다. #87112 (Nikolay Degterinsky).
  • Parquet를 읽을 때 맵과 배열 필드 ID를 처리하는 문제를 수정했습니다. #87136 (scanhex12).
  • lazy materialization에서 배열 크기 서브컬럼이 있는 배열을 읽는 문제를 수정했습니다. #87139 (Pavel Kruglov).
  • Dynamic 인수를 사용하는 CASE 함수를 수정했습니다. #87177 (Pavel Kruglov).
  • CSV에서 빈 문자열을 빈 배열로 읽지 못하던 문제를 수정했습니다. #87182 (Pavel Kruglov).
  • 비상관 EXISTS에서 잘못된 결과가 발생할 수 있는 문제를 수정했습니다. 이 문제는 https://github.com/ClickHouse/ClickHouse/pull/85481 에서 도입된 execute_exists_as_scalar_subquery=1로 인해 발생했으며, 25.8에 영향을 미칩니다. #86415을 수정합니다. #87207 (Nikolai Kochetov).
  • iceberg_metadata_log이 구성되지 않은 상태에서 사용자가 디버그용 Iceberg 메타데이터 정보를 가져오려고 하면 오류를 발생시킵니다. nullptr 접근 문제를 수정했습니다. #87250 (Daniil Ivanik).

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

ClickHouse 릴리스 25.8 LTS, 2025-08-28

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

  • JSON에서 서로 다른 타입의 값으로 이루어진 배열은 이름 없는 Tuple 대신 Array(Dynamic)으로 추론합니다. 이전 동작을 사용하려면 input_format_json_infer_array_of_dynamic_from_array_of_different_types 설정을 비활성화하십시오. #80859 (Pavel Kruglov).
  • 일관성과 단순성을 위해 S3 지연 시간 메트릭을 히스토그램으로 변경합니다. #82305 (Miсhael Stetsyuk).
  • 점이 포함된 식별자가 복합 식별자로 파싱되는 것을 방지하기 위해 기본 표현식에서는 해당 식별자를 backticks로 감싸야 합니다. #83162 (Pervakov Grigorii).
  • lazy materialization은 분석기(analyzer)가 활성화된 경우에만 사용됩니다(기본값). 이는 분석기 없이 유지할 경우 일부 문제가 발생하는 것으로 확인되었기 때문입니다(예: conditions에서 indexHint()를 사용하는 경우). #83791 (Igor Nikonov).
  • 기본적으로 Enum 타입 값을 Parquet 출력 형식에서 ENUM 논리 타입의 BYTE_ARRAY로 기록합니다. #84169 (Pavel Kruglov).
  • 기본적으로 MergeTree setting write_marks_for_substreams_in_compact_parts를 활성화합니다. 이 변경으로 새로 생성된 Compact 파트에서 서브컬럼 읽기 성능이 크게 향상됩니다. 버전이 25.5 미만인 서버는 새 Compact 파트를 읽을 수 없습니다. #84171 (Pavel Kruglov).
  • 이전 concurrent_threads_scheduler의 기본값은 round_robin이었지만, 단일 스레드 쿼리(예: INSERT)가 많은 경우에는 공정하지 않은 것으로 드러났습니다. 이 변경으로 더 안전한 대안인 fair_round_robin 스케줄러가 기본값이 됩니다. #84747 (Sergei Trifonov).
  • ClickHouse는 PostgreSQL 스타일의 heredoc 구문 $tag$ string contents... $tag$를 지원하며, 이는 dollar-quoted string literals라고도 합니다. 이전 버전에서는 태그 제약이 더 느슨하여 문장 부호와 공백을 포함한 임의의 문자를 사용할 수 있었습니다. 이로 인해 달러 문자로 시작할 수도 있는 식별자와 파싱상의 모호성이 발생합니다. 한편 PostgreSQL은 태그에 단어 문자만 허용합니다. 이 문제를 해결하기 위해 이제 heredoc 태그에는 단어 문자만 포함할 수 있도록 제한합니다. #84731을 해결합니다. #84846 (Alexey Milovidov).
  • azureBlobStorage, deltaLakeAzure, icebergAzure 함수가 AZURE 권한을 올바르게 검증하도록 업데이트되었습니다. 이제 모든 cluster 변형 함수(-Cluster 함수)는 대응되는 비클러스터 함수 기준으로 권한을 확인합니다. 또한 icebergLocaldeltaLakeLocal 함수는 이제 FILE 권한 검사도 강제합니다. #84938 (Nikita Mikhaylov).
  • 기본적으로 allow_dynamic_metadata_for_data_lakes 설정(테이블 엔진 수준 설정)을 활성화합니다. #85044 (Daniil Ivanik).
  • 기본적으로 JSON 포맷에서 64비트 정수를 따옴표로 감싸지 않도록 합니다. #74079 (Pavel Kruglov)

새 기능

  • PromQL 방언에 대한 기본 지원이 추가되었습니다. 사용하려면 clickhouse-client에서 dialect='promql'로 설정하고, promql_table_name='X' 설정으로 TimeSeries 테이블을 지정한 다음, rate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]와 같은 쿼리를 실행하십시오. 또한 PromQL 쿼리를 SQL로 감싸 사용할 수 있습니다: SELECT * FROM prometheusQuery('up', ...);. 현재는 rate, delta, increase 함수만 지원됩니다. 단항/이항 연산자는 지원되지 않습니다. HTTP API는 지원되지 않습니다. #75036 (Vitaly Baranov).
  • AI 기반 SQL 생성은 이제 사용 가능한 경우 env ANTHROPIC_API_KEY 및 OPENAI_API_KEY를 자동으로 인식할 수 있으며, 이를 통해 이 기능을 별도 설정 없이 사용할 수 있습니다. #83787 (Kaushik Iska).
  • 다음을 추가하여 ArrowFlight RPC 프로토콜 지원을 구현했습니다: - 새 테이블 함수 arrowflight. #74184 (zakr600).
  • 이제 모든 테이블에서 _table 가상 컬럼(virtual column)을 지원합니다(Merge 엔진이 있는 테이블만 해당하는 것은 아님). 이는 특히 UNION ALL을 사용하는 쿼리에서 유용합니다. #63665 (Xiaozhe Yu).
  • 외부 집계/정렬에 모든 스토리지 정책(예: S3와 같은 객체 스토리지)을 사용할 수 있도록 허용합니다. #84734 (Azat Khuzhin).
  • 명시적으로 지정한 IAM 역할로 AWS S3 인증을 구현합니다. GCS용 OAuth를 구현합니다. 이러한 기능은 최근까지 ClickHouse Cloud에서만 제공되었으나 이제 오픈 소스로 공개되었습니다. 객체 스토리지 연결 매개변수의 직렬화 등 일부 인터페이스를 동기화합니다. #84011 (Alexey Milovidov).
  • Iceberg TableEngine에서 position delete를 지원합니다. #83094 (Daniil Ivanik).
  • Iceberg Equality Deletes를 지원합니다. #85843 (Han Fei).
  • CREATE를 위한 Iceberg 쓰기 기능을 추가했습니다. #83927을 종료합니다. #83983 (Konstantin Vedernikov).
  • 쓰기용 Glue catalog. #84136 (Konstantin Vedernikov).
  • 쓰기용 Iceberg REST 카탈로그. #84684 (Konstantin Vedernikov).
  • 모든 Iceberg 포지션 삭제 파일을 데이터 파일로 머지합니다. 이렇게 하면 Iceberg 스토리지의 Parquet 파일 수와 파일 크기가 줄어듭니다. 구문: OPTIMIZE TABLE table_name. #85250 (Konstantin Vedernikov).
  • Iceberg에 대해 drop table을 지원합니다(REST/Glue 카탈로그에서 삭제하고 테이블 메타데이터도 제거). #85395 (Konstantin Vedernikov).
  • merge-on-read 포맷의 Iceberg에서 ALTER DELETE 뮤테이션을 지원합니다. #85549 (Konstantin Vedernikov).
  • DeltaLake 쓰기를 지원합니다. #79603을 해결합니다. #85564 (Kseniia Sumarokova).
  • 테이블 엔진 DeltaLake에서 특정 snapshot version을 읽을 수 있도록 하는 설정 delta_lake_snapshot_version이 추가되었습니다. #85295 (Kseniia Sumarokova).
  • 메타데이터(매니페스트 항목)에 더 많은 Iceberg 통계(컬럼 크기, 하한값 및 상한값)를 기록하여 min-max 프루닝을 지원합니다. #85746 (Konstantin Vedernikov).
  • Iceberg에서 단순 타입 컬럼의 추가/삭제/수정을 지원합니다. #85769 (Konstantin Vedernikov).
  • Iceberg: version-hint 파일 작성을 지원합니다. 이로써 #85097가 해결되었습니다. #85130 (Konstantin Vedernikov).
  • 이제 ephemeral 사용자가 생성한 뷰는 실제 사용자의 복사본을 저장하므로, ephemeral 사용자가 삭제된 뒤에도 더 이상 무효화되지 않습니다. #84763 (pufit).
  • 이제 벡터 유사성 인덱스가 이진 양자화를 지원합니다. 이진 양자화는 메모리 사용량을 크게 줄이고(더 빠른 거리 계산 덕분에) 벡터 인덱스 구축 속도도 높입니다. 또한 기존 설정 vector_search_postfilter_multiplier 는 더 이상 사용되지 않으며, 더 범용적인 설정인 vector_search_index_fetch_multiplier로 대체되었습니다. #85024 (Shankar Iyer).
  • s3 또는 s3Cluster 테이블 엔진/함수에서 키-값 인수 사용을 허용합니다. 예를 들어 s3('url', CSV, structure = 'a Int32', compression_method = 'gzip')와 같이 사용할 수 있습니다. #85134 (Kseniia Sumarokova).
  • Kafka와 같은 엔진에서 들어오는 잘못된 메시지를 보관하기 위한 새로운 시스템 테이블(system table)(“dead letter queue”). #68873 (Ilya Golshtein).
  • Replicated 데이터베이스를 위한 새로운 SYSTEM RESTORE DATABASE REPLICA가 추가되었습니다. 이는 ReplicatedMergeTree의 기존 복원 기능과 유사합니다. #73100 (Konstantin Morozov).
  • 이제 PostgreSQL 프로토콜에서 COPY 명령을 지원합니다. #74344 (Konstantin Vedernikov).
  • mysql 프로토콜용 C# 클라이언트를 지원합니다. 이 변경으로 #83992가 해결됩니다. #84397 (Konstantin Vedernikov).
  • hive 파티션 스타일 읽기 및 쓰기를 지원합니다. #76802 (Arthur Passos).
  • ZooKeeper 연결에 대한 이력 정보를 저장하는 zookeeper_connection_log 시스템 테이블을 추가했습니다. #79494 (János Benjamin Antal).
  • 서버 설정 cpu_slot_preemption은 워크로드에 대한 선점형 CPU 스케줄링을 활성화하고, 워크로드 간 CPU 시간이 max-min 공정하게 배분되도록 합니다. CPU 스로틀링을 위한 새로운 워크로드 설정 max_cpus, max_cpu_share, max_burst_cpu_seconds가 추가되었습니다. 자세한 내용은 https://clickhouse.com/docs/operations/workload-scheduling#cpu&#95;scheduling를 참조하십시오. #80879 (Sergei Trifonov).
  • 설정된 쿼리 수 또는 시간 임계값에 도달하면 TCP 연결을 종료합니다. 이렇게 하면 로드 밸런서 뒤에 있는 cluster 노드 간 연결이 더 균등하게 분산되도록 하는 데 도움이 됩니다. #68000을 해결했습니다. #81472 (Kenny Sun).
  • 이제 병렬 레플리카 쿼리에서 프로젝션을 지원합니다. #82659. #82807 (zoomxi).
  • DESCRIBE (SELECT …)뿐만 아니라 DESCRIBE SELECT도 지원합니다. #82947 (Yarik Briukhovetskyi).
  • mysql_port 및 postgresql_port에 대해 보안 연결을 강제합니다. #82962 (tiandiwonder).
  • 이제 JSONExtractCaseInsensitive(및 JSONExtract의 다른 변형)를 사용해 JSON 키를 대소문자 구분 없이 조회할 수 있습니다. #83770 (Alistair Evans).
  • system.completions 테이블이 도입되었습니다. #81889를 해결합니다. #83833 (|2ustam).
  • 새 함수 nowInBlock64가 추가되었습니다. 예시: SELECT nowInBlock64(6)2025-07-29 17:09:37.775725를 반환합니다. #84178 (Halersson Paris).
  • AzureBlobStorage에 extra_credentials를 추가해 client_id와 tenant_id를 사용한 인증을 지원합니다. #84235 (Pablo Marcos).
  • DateTime 값을 UUIDv7로 변환하는 dateTimeToUUIDv7 함수가 추가되었습니다. 사용 예시: SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56'))를 실행하면 0198af18-8320-7a7d-abd3-358db23b9d5c를 반환합니다. #84319 (samradovich).
  • timeSeriesDerivToGridtimeSeriesPredictLinearToGrid 집계 함수는 지정된 시작 타임스탬프, 종료 타임스탬프, 그리고 간격으로 정의된 시간 그리드에 맞게 데이터를 다시 샘플링하고, 각각 PromQL과 유사한 derivpredict_linear을 계산합니다. #84328 (Stephen Chi).
  • 새로운 TimeSeries 함수 2개를 추가했습니다: - timeSeriesRange(start_timestamp, end_timestamp, step), - timeSeriesFromGrid(start_timestamp, end_timestamp, step, values),. #85435 (Vitaly Baranov).
  • 새 구문 GRANT READ ON S3('s3://foo/.*') TO user이 추가되었습니다. #84503 (pufit).
  • 새로운 출력 형식인 Hash가 추가되었습니다. 이 형식은 결과의 모든 컬럼과 행에 대해 하나의 해시 값을 계산합니다. 이는 예를 들어 데이터 전송이 병목이 되는 경우 결과의 “지문”을 계산하는 데 유용합니다. 예시: SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hashe5f9e676db098fdb9530d2059d8c23ef를 반환합니다. #84607 (Robert Schulze).
  • Keeper Multi 쿼리에서 임의의 watch를 설정할 수 있는 기능이 추가되었습니다. #84964 (Mikhail Artemenko).
  • clickhouse-benchmark 도구에 병렬 쿼리 수를 점진적으로 늘리는 모드를 활성화하는 --max-concurrency 옵션을 추가했습니다. #85623 (Sergei Trifonov).
  • 부분 집계 메트릭을 지원합니다. #85328 (Mikhail Artemenko).

실험적 기능

  • 상관 서브쿼리 지원이 기본적으로 활성화되며, 더 이상 실험적 기능이 아닙니다. #85107 (Dmitry Novik).
  • Unity, Glue, Rest 및 Hive Metastore 데이터 레이크 카탈로그가 실험적 단계에서 베타로 승격되었습니다. #85848 (Melvyn Peignon).
  • 경량 업데이트와 삭제가 실험적 단계에서 베타로 승격되었습니다.
  • 벡터 유사성 인덱스를 사용하는 근사 벡터 검색이 이제 일반 제공됩니다. #85888 (Robert Schulze).
  • Ytsaurus 테이블 엔진 및 테이블 함수. #77606 (MikhailBurdukov).
  • 이전에는 텍스트 인덱스 데이터가 여러 세그먼트로 분리되었습니다(각 세그먼트의 기본 크기는 256 MiB). 이렇게 하면 텍스트 인덱스를 빌드할 때 메모리 활용을 줄일 수 있지만, 디스크 공간 요구량이 늘어나고 쿼리 응답 시간이 증가할 수 있습니다. #84590 (Elmi Ahmadov).

성능 개선

  • 새로운 Parquet 리더 구현입니다. 전반적으로 더 빠르며 페이지 수준 필터 푸시다운과 PREWHERE를 지원합니다. 현재는 실험적 기능입니다. 활성화하려면 input_format_parquet_use_native_reader_v3 설정을 사용하십시오. #82789 (Michael Kolupaev).
  • Azure 라이브러리의 공식 HTTP 전송 구현을 Azure Blob Storage용 자체 HTTP 클라이언트 구현으로 대체했습니다. S3의 설정을 반영한 이 클라이언트용 여러 설정도 추가했습니다. Azure와 S3 모두에 더 공격적인 연결 타임아웃을 도입했습니다. Azure 프로파일 이벤트와 메트릭에 대한 내부 검사를 개선했습니다. 새 클라이언트는 기본적으로 활성화되어 있으며, Azure Blob Storage 기반 콜드 쿼리의 지연 시간을 크게 개선합니다. 기존 Curl 클라이언트는 azure_sdk_use_native_client=false를 설정해 다시 사용할 수 있습니다. #83294 (alesapin). 이전 공식 Azure 클라이언트 구현은 5초에서 수분에 이르는 심각한 지연 시간 급증 문제로 인해 프로덕션 환경에 적합하지 않았습니다. 해당 구현은 과감히 폐기했으며, 이에 대해 매우 만족스럽게 생각합니다.
  • 파일 크기가 작은 순서대로 인덱스를 처리합니다. 전체 인덱스 정렬 순서에서는 minmax와 벡터 인덱스를 각각 단순성과 선택도를 이유로 우선하고, 그다음으로 작은 인덱스를 우선합니다. minmax/벡터 인덱스 내에서도 더 작은 인덱스를 우선합니다. #84094 (Maruth Goyal).
  • 기본적으로 MergeTree setting write_marks_for_substreams_in_compact_parts이 활성화됩니다. 이로 인해 새로 생성된 Compact 파트에서 서브컬럼 읽기 성능이 크게 향상됩니다. 25.5 미만 버전의 서버에서는 새로운 Compact 파트를 읽을 수 없습니다. #84171 (Pavel Kruglov).
  • azureBlobStorage 테이블 엔진: 가능하면 관리형 아이덴티티 인증 토큰을 캐시해 재사용하여 스로틀링을 피합니다. #79860 (Nick Blakely).
  • ALL LEFT/INNER JOIN은 오른쪽 측 데이터가 조인 키 컬럼으로 함수적으로 결정되는 경우(즉, 모든 행의 조인 키 값이 고유한 경우) 자동으로 RightAny로 변환됩니다. #84010 (Nikita Taranov).
  • 큰 컬럼이 있는 JOIN의 메모리 사용량을 제한할 수 있도록 max_joined_block_size_rows에 더해 max_joined_block_size_bytes를 추가했습니다. #83869 (Nikolai Kochetov).
  • 메모리 효율적 집계 중 일부 버킷을 순서와 무관하게 전송할 수 있도록 하는 새 로직(설정 enable_producing_buckets_out_of_order_in_aggregation으로 제어되며 기본적으로 활성화됨)이 추가되었습니다. 일부 집계 버킷이 다른 버킷보다 머지하는 데 훨씬 더 오래 걸리는 경우, 그 사이 initiator가 더 높은 버킷 ID를 가진 버킷을 머지할 수 있어 성능이 향상됩니다. 단점은 메모리 사용량이 다소 증가할 수 있다는 점이지만(크게 유의미하지는 않을 것으로 예상됨). #80179 (Nikita Taranov).
  • optimize_rewrite_regexp_functions 설정(기본적으로 활성화됨)을 도입했습니다. 이 설정을 사용하면 특정 정규식 패턴이 감지될 때 옵티마이저가 일부 replaceRegexpAll, replaceRegexpOne, extract 호출을 더 단순하고 효율적인 형태로 재작성할 수 있습니다. (이슈 #81981). #81992 (Amos Bird).
  • 해시 JOIN의 메인 루프 밖에서 max_joined_block_rows를 처리합니다. ALL JOIN에서 성능이 소폭 향상되었습니다. #83216 (Nikolai Kochetov).
  • 세분화 수준이 더 높은 MinMax 인덱스를 우선 처리합니다. #75381을 해결합니다. #83798 (Maruth Goyal).
  • DISTINCT 윈도우 집계가 선형 시간으로 실행되도록 개선하고 sumDistinct의 버그를 수정했습니다. #79792를 해결했습니다. #52253를 해결했습니다. #79859 (Nihal Z. Miaji).
  • 벡터 유사성 인덱스를 사용하는 벡터 검색 쿼리는 스토리지 읽기와 CPU 사용량이 줄어들어 지연 시간이 더 낮아집니다. #83803 (Shankar Iyer).
  • 병렬 레플리카 간 워크로드 분배의 캐시 지역성을 개선하기 위한 Rendezvous 해싱. #82511 (Anton Ivashkin).
  • If combinator에 addManyDefaults를 구현하여 이제 If combinator가 적용된 집계 함수가 더 빠르게 동작합니다. #83870 (Raúl Marín).
  • 여러 문자열 또는 숫자 컬럼으로 GROUP BY할 때 직렬화된 키를 열 지향 방식으로 계산합니다. #83884 (李扬).
  • 병렬 레플리카 읽기에서 인덱스 분석 결과 범위가 비어 있는 경우 발생하던 전체 스캔을 제거했습니다. #84971 (Eduard Karacharov).
  • 보다 안정적인 성능 테스트를 위해 -falign-functions=64를 시도합니다. #83920 (Azat Khuzhin).
  • 이제 columnArray 유형이 아닌 경우 has([c1, c2, ...], column)과 같은 조건에도 블룸 필터 인덱스를 사용할 수 있습니다. 이로써 이러한 쿼리의 성능이 향상되어 IN 연산자와 동일한 수준으로 효율적으로 처리됩니다. #83945 (Doron David).
  • CompressedReadBufferBase::readCompressedData에서 불필요한 memcpy 호출을 줄였습니다. #83986 (Raúl Marín).
  • 임시 데이터를 제거해 largestTriangleThreeBuckets를 최적화했습니다. #84479 (Alexey Milovidov).
  • 코드를 단순화해 문자열 역직렬화를 최적화했습니다. #38564를 해결합니다. #84561 (Alexey Milovidov).
  • 병렬 레플리카의 최소 작업 크기 계산 오류를 수정했습니다. #84752 (Nikita Taranov).
  • Join 모드에서 패치 파트 적용 성능을 개선했습니다. #85040 (Anton Popov).
  • 0 바이트를 제거했습니다. #85062를 해결합니다. 몇 가지 사소한 버그도 수정되었습니다. structureToProtobufSchema, structureToCapnProtoSchema 함수는 null 종료 바이트를 올바르게 추가하지 못하고 대신 줄바꿈 문자를 사용하고 있었습니다. 이로 인해 출력에서 줄바꿈이 누락되었고, 0 바이트에 의존하는 다른 함수(logTrace, demangle, extractURLParameter, toStringCutToZero, encrypt/decrypt 등)를 사용할 때 버퍼 오버플로우가 발생할 수 있었습니다. regexp_tree 딕셔너리 레이아웃은 0 바이트가 포함된 문자열 처리를 지원하지 않았습니다. Values 포맷으로 호출하거나, 행 끝에 줄바꿈이 없는 다른 포맷으로 호출한 formatRowNoNewline 함수는 출력의 마지막 문자를 잘못 잘라내고 있었습니다. stem 함수에는 예외 안전성과 관련된 오류가 있었으며, 매우 드문 시나리오에서 메모리 누수로 이어질 수 있었습니다. initcap 함수는 FixedString 인수에 대해 잘못 동작했습니다. 이전 문자열이 block에서 단어 문자로 끝난 경우, 문자열 시작 부분을 단어의 시작으로 인식하지 못했습니다. Apache ORC 포맷의 보안 취약점도 수정했으며, 이 취약점은 초기화되지 않은 메모리 노출로 이어질 수 있었습니다. replaceRegexpAll 함수와 해당 alias인 REGEXP_REPLACE의 동작이 변경되었습니다. 이제 이전 일치가 전체 문자열을 처리한 경우에도 ^a*|a*$ 또는 ^|.*와 같은 경우 문자열 끝에서 빈 일치를 수행할 수 있습니다. 이는 JavaScript, Perl, Python, PHP, Ruby의 의미론과 일치하지만 PostgreSQL의 의미론과는 다릅니다. 많은 함수의 구현을 단순화하고 최적화했습니다. 여러 함수의 문서 내용이 잘못되어 있었으며, 이제 수정되었습니다. String 컬럼과 String 컬럼으로 구성된 복합 타입에 대한 byteSize 출력이 변경되었다는 점에 유의하십시오(빈 문자열당 9바이트에서 8바이트로 변경). 이는 정상적인 동작입니다. #85063 (Alexey Milovidov).
  • 단일 행만 반환할 때 상수를 머티리얼라이즈하는 경우의 처리를 최적화했습니다. #85071 (Alexey Milovidov).
  • delta-kernel-rs 백엔드로 병렬 파일 처리 성능을 개선했습니다. #85642 (Azat Khuzhin).
  • 새로운 설정인 enable_add_distinct_to_in_subqueries가 도입되었습니다. 이 설정을 활성화하면 ClickHouse는 분산 쿼리에서 IN 절의 서브쿼리에 DISTINCT를 자동으로 추가합니다. 이렇게 하면 세그먼트 간에 전송되는 임시 테이블의 크기를 크게 줄여 네트워크 효율성을 높일 수 있습니다. 참고: 이는 트레이드오프입니다. 네트워크 전송량은 줄어들지만 각 노드에서 추가적인 병합(중복 제거) 작업이 필요합니다. 네트워크 전송이 병목이고 병합 비용을 감수할 수 있다면 이 설정을 활성화하세요. #81908 (fhw12345).
  • 실행형 사용자 정의 함수의 쿼리 메모리 추적 오버헤드를 줄였습니다. #83929 (Eduard Karacharov).
  • 스토리지 DeltaLake에 내부 delta-kernel-rs 필터링(통계 및 파티션 프루닝)을 구현했습니다. #84006 (Kseniia Sumarokova).
  • 온더플라이로 또는 패치 파트에 의해 업데이트되는 컬럼에 의존하는 스키핑 인덱스를 더 세밀하게 비활성화합니다. 이제 스키핑 인덱스는 온더플라이 뮤테이션이나 패치 파트의 영향을 받는 파트에서만 사용되지 않으며, 이전에는 이러한 인덱스가 모든 파트에서 비활성화되었습니다. #84241 (Anton Popov).
  • 암호화된 이름이 지정된 컬렉션용 encrypted_buffer에 필요한 최소 메모리만 할당합니다. #84432 (Pablo Marcos).
  • 첫 번째 인수가 상수 배열(집합)이고 두 번째 인수가 인덱스가 적용된 컬럼(부분 집합)인 경우 블룸 필터 인덱스(일반, ngram, token)를 활용할 수 있도록 지원을 개선하여, 더 효율적인 쿼리 실행이 가능해졌습니다. #84700 (Doron David).
  • Keeper의 스토리지 잠금 경합을 줄였습니다. #84732 (Antonio Andelic).
  • WHERE에서 누락되어 있던 read_in_order_use_virtual_row 지원을 추가했습니다. 이를 통해 필터가 PREWHERE로 완전히 푸시되지 않은 쿼리에서 추가 파트를 더 읽지 않고 건너뛸 수 있습니다. #84835 (Nikolai Kochetov).
  • 각 데이터 파일에 대한 객체를 명시적으로 저장하지 않고도 Iceberg 테이블의 객체를 비동기적으로 순회할 수 있습니다. #85369 (Daniil Ivanik).
  • 비상관 EXISTS를 스칼라 서브쿼리로 실행합니다. 이를 통해 스칼라 서브쿼리 캐시를 사용할 수 있고 결과를 상수 폴딩할 수 있어 인덱스에 유용합니다. 호환성을 위해 새로운 설정 execute_exists_as_scalar_subquery=1이 추가되었습니다. #85481 (Nikolai Kochetov).

개선 사항

  • DatabaseReplicatedSettings의 기본값을 정의하는 database_replicated 설정이 추가되었습니다. Replicated DB CREATE 쿼리에 이 설정이 없으면 database_replicated에 지정된 값이 사용됩니다. #85127 (Tuan Pham Anh).
  • web UI(실행)에서 테이블 컬럼의 너비를 조정할 수 있게 했습니다. #84012 (Doron David).
  • iceberg_metadata_compression_method 설정으로 압축된 .metadata.json 파일을 지원합니다. 모든 ClickHouse 압축 방식을 지원합니다. 이로써 #84895가 해결되었습니다. #85196 (Konstantin Vedernikov).
  • EXPLAIN indexes = 1 출력에 읽을 범위의 개수를 표시합니다. #79938 (Christoph Wurm).
  • ORC 압축 블록 크기를 설정하는 옵션을 도입하고, Spark 또는 Hive와의 일관성을 유지하기 위해 기본값을 64KB에서 256KB로 변경했습니다. #80602 (李扬).
  • 파트에 저장된 모든 서브스트림을 추적할 수 있도록 Wide 파트에 columns_substreams.txt 파일을 추가했습니다. 이를 통해 JSON 및 Dynamic 타입의 동적 스트림을 추적할 수 있으므로, 동적 스트림 목록을 가져오기 위해 이러한 컬럼의 샘플을 읽을 필요가 없어집니다(예: 컬럼 크기 계산 시). 또한 이제 모든 동적 스트림이 system.parts_columns에 반영됩니다. #81091 (Pavel Kruglov).
  • 기본적으로 민감한 데이터를 숨기도록 clickhouse format에 CLI 플래그 --show&#95;secrets를 추가합니다. #81524 (Nikolai Ryzhov).
  • max_remote_read_network_bandwidth_for_servermax_remote_write_network_bandwidth_for_server 스로틀링과 관련된 문제를 방지하기 위해, S3 읽기 및 쓰기 요청은 전체 S3 요청 단위가 아니라 HTTP socket 수준에서 스로틀링됩니다. #81837 (Sergei Trifonov).
  • 서로 다른 윈도우에서 동일한 컬럼에 대해 서로 다른 콜레이션(collation)을 혼용할 수 있도록 했습니다(윈도우 함수). #82877 (Yakov Olkhovskiy).
  • 머지 선택기를 시뮬레이션, 시각화, 비교할 수 있는 도구를 추가했습니다. #71496 (Sergei Trifonov).
  • address_expression 인수에 cluster가 지정된 경우, 병렬 레플리카와 함께 remote* 테이블 함수를 지원하도록 추가했습니다. 또한 #73295를 수정했습니다. #82904 (Igor Nikonov).
  • 백업 파일 작성과 관련된 모든 로그 메시지의 수준을 TRACE로 설정합니다. #82907 (Hans Krutzer).
  • 특이한 이름의 사용자 정의 함수와 코덱은 SQL 포매터에서 일관성 없이 포맷될 수 있습니다. 이 변경으로 #83092 문제가 해결되었습니다. #83644 (Alexey Milovidov).
  • 이제 JSON 타입에서 Time 및 Time64 타입을 사용할 수 있습니다. #83784 (Yarik Briukhovetskyi).
  • 병렬 레플리카를 사용하는 조인은 이제 join 논리 단계를 사용합니다. 병렬 레플리카를 사용하는 조인 쿼리에서 문제가 발생하면 SET query_plan_use_new_logical_join_step=0을 시도한 후 이슈를 보고해 주십시오. #83801 (Vladimir Cherkasov).
  • cluster_function_process_archive_on_multiple_nodes의 호환성 문제를 해결했습니다. #83968 (Kseniia Sumarokova).
  • S3Queue 테이블 수준에서 mv 삽입 설정 변경을 지원합니다. 새로운 S3Queue 수준 설정인 min_insert_block_size_rows_for_materialized_viewsmin_insert_block_size_bytes_for_materialized_views가 추가되었습니다. 기본적으로는 profile 수준 설정이 사용되며, S3Queue 수준 설정이 이를 재정의합니다. #83971 (Kseniia Sumarokova).
  • mutation에서 영향을 받은 행 수(예: ALTER UPDATE 또는 ALTER DELETE 쿼리에서 조건을 만족하는 전체 행 수)를 나타내는 프로파일 이벤트 MutationAffectedRowsUpperBound가 추가되었습니다. #83978 (Anton Popov).
  • cgroup 정보(해당 시, 즉 memory_worker_use_cgroup 설정과 cgroups를 사용할 수 있는 경우)를 사용해 메모리 추적기(memory_worker_correct_memory_tracker)를 보정합니다. #83981 (Azat Khuzhin).
  • MongoDB: 문자열을 숫자 타입으로 암시적으로 파싱합니다. 이전에는 ClickHouse 테이블의 숫자 컬럼에 대해 MongoDB source에서 문자열 값이 들어오면 예외가 발생했습니다. 이제 엔진이 문자열에서 숫자 값을 자동으로 파싱합니다. #81167을 해결합니다. #84069 (Kirill Nikiforov).
  • Pretty 포맷에서 Nullable 숫자의 자릿수 그룹을 강조 표시합니다. #84070 (Alexey Milovidov).
  • 대시보드: 상단의 툴팁이 컨테이너 밖으로 넘치지 않습니다. #84072 (Alexey Milovidov).
  • 대시보드의 점 표시가 약간 더 보기 좋아졌습니다. #84074 (Alexey Milovidov).
  • Dashboard의 파비콘이 이제 조금 더 개선되었습니다. #84076 (Alexey Milovidov).
  • 웹 UI: 브라우저에서 비밀번호를 저장할 수 있도록 했습니다. 또한 URL 값도 기억하도록 했습니다. #84087 (Alexey Milovidov).
  • 특정 Keeper 노드에 apply_to_children 구성을 사용해 추가 ACL을 적용할 수 있도록 지원합니다. #84137 (Antonio Andelic).
  • MergeTree에서 “compact” Variant 판별자 직렬화 사용을 수정했습니다. 이전에는 일부 경우에 사용할 수 있었는데도 사용되지 않았습니다. #84141 (Pavel Kruglov).
  • 복제된 데이터베이스의 기본 logs_to_keep 매개변수를 변경할 수 있도록, 데이터베이스의 복제 설정에 서버 설정 logs_to_keep가 추가되었습니다. 값을 낮추면 ZNode 수가 줄어들고(특히 데이터베이스가 많은 경우), 값을 높이면 누락된 레플리카가 더 오랜 시간이 지난 뒤에도 동기화를 따라잡을 수 있습니다. #84183 (Alexey Khatskevich).
  • JSON 타입을 파싱할 때 JSON 키의 점을 이스케이프하는 설정 json_type_escape_dots_in_keys를 추가했습니다. 이 설정은 기본적으로 비활성화되어 있습니다. #84207 (Pavel Kruglov).
  • 닫힌 연결에서 읽지 않도록 EOF를 확인하기 전에 연결이 취소되었는지 먼저 확인합니다. #83893을 수정했습니다. #84227 (Raufs Dunamalijevs).
  • web UI에서 텍스트 선택 색상이 약간 개선되었습니다. 차이는 다크 모드에서 선택한 테이블 셀에만 뚜렷하게 나타납니다. 이전 버전에서는 텍스트와 선택 배경 사이의 대비가 충분하지 않았습니다. #84258 (Alexey Milovidov).
  • 내부 확인 로직을 단순화해 서버 종료 시 클라이언트 연결 처리 방식을 개선했습니다. #84312 (Raufs Dunamalijevs).
  • 디버깅 시 테스트 로그 수준에서도 로그가 지나치게 많아질 수 있어, 표현식 visitor 로그를 비활성화하는 delta_lake_enable_expression_visitor_logging 설정이 추가되었습니다. #84315 (Kseniia Sumarokova).
  • 이제 cgroup 수준 메트릭과 시스템 전체 메트릭이 함께 보고됩니다. cgroup 수준 메트릭의 이름은 CGroup<Metric>이며, OS 수준 메트릭(procfs에서 수집됨)의 이름은 OS<Metric>입니다. #84317 (Nikita Taranov).
  • Web UI의 차트가 조금 더 나아졌습니다. 큰 변화는 아니지만 더 좋아졌습니다. #84326 (Alexey Milovidov).
  • 복제된 데이터베이스 설정 max_retries_before_automatic_recovery의 기본값을 10으로 변경해, 일부 경우 더 빠르게 복구되도록 했습니다. #84369 (Alexander Tokmakov).
  • 쿼리 매개변수를 사용하는 CREATE USER의 포맷팅을 수정했습니다(즉, CREATE USER {username:Identifier} IDENTIFIED WITH no_password). #84376 (Azat Khuzhin).
  • 백업 및 복원 작업 중 사용되는 S3 재시도 백오프 전략을 설정할 수 있도록 backup_restore_s3_retry_initial_backoff_ms, backup_restore_s3_retry_max_backoff_ms, backup_restore_s3_retry_jitter_factor를 도입했습니다. #84421 (Julia Kartseva).
  • S3Queue ordered 모드 수정: shutdown이 호출되면 더 일찍 종료합니다. #84463 (Kseniia Sumarokova).
  • pyiceberg에서 읽을 수 있는 Iceberg 쓰기를 지원합니다. #84466 (Konstantin Vedernikov).
  • KeyValue 스토리지 프라이머리 키(예: EmbeddedRocksDB, KeeperMap)에 IN / GLOBAL IN 필터를 푸시다운할 때 Set 값의 형 변환을 허용합니다. #84515 (Eduard Karacharov).
  • chdig를 25.7.1로 업데이트했습니다. #84521 (Azat Khuzhin).
  • 이제 UDF 실행 중 발생하는 저수준 오류는 UDF_EXECUTION_FAILED 오류 코드로 처리되며, 이전에는 서로 다른 오류 코드가 반환될 수 있었습니다. #84547 (Xu Jia).
  • KeeperClient에 get_acl 명령을 추가합니다. #84641 (Antonio Andelic).
  • 데이터 레이크 테이블 엔진에 스냅샷 버전 지원을 추가했습니다. #84659 (Pete Hampton).
  • 큐 유형(즉, 해당 큐의 용도)과 큐 id(즉, 현재 큐 인스턴스에 대해 무작위로 생성된 id)로 레이블이 지정된 ConcurrentBoundedQueue 크기용 차원 메트릭을 추가했습니다. #84675 (Miсhael Stetsyuk).
  • 이제 system.columns 테이블은 기존 name 컬럼에 대한 별칭으로 column을 제공합니다. #84695 (Yunchi Pang).
  • 파트 검색 범위를 예를 들어 로컬 메타데이터가 있는 디스크로 제한할 수 있는 새로운 MergeTree setting search_orphaned_parts_drives. #84710 (Ilya Golshtein).
  • Keeper에 수신된 요청의 로깅을 전환할 수 있는 4LW lgrq를 추가했습니다. #84719 (Antonio Andelic).
  • 외부 인증 forward_headers를 대소문자를 구분하지 않고 일치시킵니다. #84737 (ingodwerust).
  • encrypt_decrypt 도구가 이제 암호화된 ZooKeeper 연결을 지원하게 되었습니다. #84764 (Roman Vasin).
  • system.errors에 포맷 문자열 컬럼을 추가했습니다. 이 컬럼은 알림 규칙에서 동일한 오류 유형별로 그룹화하는 데 필요합니다. #84776 (Miсhael Stetsyuk).
  • clickhouse-format--hilite의 alias로 --highlight를 허용하도록 업데이트했습니다. - clickhouse-client--highlight의 alias로 --hilite를 허용하도록 업데이트했습니다. - 변경 사항을 반영해 clickhouse-format 문서를 업데이트했습니다. #84806 (Rishabh Bhardwaj).
  • 복합 타입에서 field ID를 기준으로 Iceberg를 읽는 동작을 수정했습니다. #84821 (Konstantin Vedernikov).
  • SlowDown과 같은 오류로 인해 재시도 폭주가 발생할 때 S3에 가해지는 부하를 줄이기 위해, 재시도 가능한 오류가 하나라도 발생하면 모든 thread의 속도를 늦추는 새로운 backup_slow_all_threads_after_retryable_s3_error 설정을 도입했습니다. #84854 (Julia Kartseva).
  • Replicated DB에서 non-append RMV DDL에 대해 기존 임시 테이블을 생성하고 이름을 변경하는 작업을 건너뜁니다. #84858 (Tuan Pham Anh).
  • keeper_server.coordination_settings.latest_logs_cache_entry_count_thresholdkeeper_server.coordination_settings.commit_logs_cache_entry_count_threshold를 사용해 항목 개수를 기준으로 Keeper 로그 항목 캐시 크기를 제한합니다. #84877 (Antonio Andelic).
  • 지원되지 않는 아키텍처에서도 simdjson을 사용할 수 있게 했습니다(이전에는 CANNOT_ALLOCATE_MEMORY 오류가 발생했음). #84966 (Azat Khuzhin).
  • 비동기 로깅: 제한값을 조정할 수 있도록 하고 내부 검사 기능을 추가합니다. #85105 (Raúl Marín).
  • 제거된 모든 객체를 수집해 객체 스토리지에서 단일 삭제 작업을 수행합니다. #85316 (Mikhail Artemenko).
  • Iceberg의 현재 positional delete 파일 구현은 모든 데이터를 RAM에 보관합니다. positional delete 파일은 대체로 크기가 큰 경우가 많아, 이는 상당한 비용으로 이어질 수 있습니다. 제가 구현한 방식은 Parquet delete 파일의 마지막 row-group만 RAM에 보관하므로 비용을 크게 줄일 수 있습니다. #85329 (Konstantin Vedernikov).
  • chdig: 화면에 남는 잔상 수정, 편집기에서 쿼리를 수정한 뒤 발생하던 크래시 수정, path에서 editor 검색, 25.8.1로 업데이트. #85341 (Azat Khuzhin).
  • Azure 구성에 누락되어 있던 partition_columns_in_data_file을 추가했습니다. #85373 (Arthur Passos).
  • timeSeries*ToGrid 함수에서 간격 0을 허용합니다. 이는 #75036의 일부입니다. #85390 (Vitaly Baranov).
  • system.tables에 데이터 레이크 테이블을 추가할지 제어하는 show_data_lake_catalogs_in_system_tables 플래그를 추가했습니다. #85384를 해결했습니다. #85411 (Smita Kulkarni).
  • remote_fs_zero_copy_zookeeper_path에 매크로 확장 지원이 추가되었습니다. #85437 (Mikhail Koviazin).
  • clickhouse-client의 AI가 조금 더 좋아 보입니다. #85447 (Alexey Milovidov).
  • 기존 배포에서도 trace_log.symbolize가 기본적으로 활성화되도록 변경했습니다. #85456 (Azat Khuzhin).
  • 복합 식별자에 대해 더 다양한 경우를 해석할 수 있도록 지원합니다. 특히 ARRAY JOIN의 기존 분석기와의 호환성을 개선합니다. 기존 동작을 유지하기 위해 새로운 설정 analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested를 도입합니다. #85492 (Nikolai Kochetov).
  • system.columns의 테이블 컬럼 크기를 가져올 때 UNKNOWN_DATABASE를 무시합니다. #85632 (Azat Khuzhin).
  • 패치 파트의 총 비압축 바이트 수에 대한 제한(테이블 설정 max_uncompressed_bytes_in_patches)이 추가되었습니다. 이 제한은 경량 업데이트 이후 SELECT 쿼리가 크게 느려지는 것을 방지하고, 경량 업데이트가 오용될 가능성도 방지합니다. #85641 (Anton Popov).
  • GRANT READ/WRITE의 소스 유형과 GRANT TABLE ENGINE의 테이블 엔진을 판별할 수 있도록 system.grantsparameter 컬럼을 추가했습니다. #85643 (MikhailBurdukov).
  • 매개변수가 있는 컬럼(예: Decimal(8)) 뒤에 오는 CREATE DICTIONARY 쿼리의 컬럼 목록에서 후행 쉼표가 올바르게 파싱되도록 수정했습니다. #85586을 해결합니다. #85653 (Nikolay Degterinsky).
  • 함수 nested가 내부 배열을 지원합니다. #85719 (Nikolai Kochetov).
  • 이제 외부 라이브러리에서 수행한 모든 메모리 할당이 ClickHouse의 메모리 추적기에서 표시되며, 메모리 사용량에 정확히 반영됩니다. 이로 인해 특정 쿼리에서 보고되는 메모리 사용량이 “증가한” 것으로 나타나거나 MEMORY_LIMIT_EXCEEDED 오류로 실패할 수 있습니다. #84082 (Nikita Mikhaylov).

버그 수정(공식 안정 릴리스에서 사용자에게 드러나는 오동작)

  • 이 PR은 REST 카탈로그를 통해 Iceberg 테이블을 쿼리할 때 메타데이터를 확인하는 방식을 수정합니다. … #80562 (Saurabh Kumar Ojha).
  • DDLWorker 및 DatabaseReplicatedDDLWorker의 markReplicasActive를 수정했습니다. #81395 (Tuan Pham Anh).
  • 파싱 실패 시 Dynamic 컬럼 롤백 문제를 수정했습니다. #82169 (Pavel Kruglov).
  • trim 함수가 모든 입력이 상수일 때 호출되면 이제 상수 문자열을 출력합니다. (버그 #78796). #82900 (Robert Schulze).
  • optimize_syntax_fuse_functions가 활성화된 경우 중복 서브쿼리로 인해 발생하던 논리 오류를 수정하고, #75511을 해결했습니다. #83300 (Vladimir Cherkasov).
  • WHERE ... IN (<subquery>) 절이 있는 쿼리에서 쿼리 조건 캐시(설정 use_query_condition_cache)가 활성화된 경우 잘못된 결과가 반환되던 문제를 수정했습니다. #83445 (LB7666).
  • 기존에는 gcs 함수를 사용하는 데 별도의 접근 권한이 필요하지 않았습니다. 이제 사용 시 GRANT READ ON S3 권한이 있는지 확인합니다. #70567를 해결합니다. #83503 (pufit).
  • s3Cluster()에서 복제된 MergeTree로 INSERT SELECT를 수행할 때 사용할 수 없는 노드를 건너뛰도록 했습니다. #83676 (Igor Nikonov).
  • plain_rewritable/plain 메타데이터 타입에서 append를 사용하는 쓰기(실험적 트랜잭션에 사용되는 MergeTree)의 문제를 수정했습니다. 이전에는 이들이 단순히 무시되었습니다. #83695 (Tuan Pham Anh).
  • Avro 스키마 레지스트리 인증 세부 정보가 사용자나 로그에 노출되지 않도록 마스킹했습니다. #83713 (János Benjamin Antal).
  • MergeTree 테이블을 add_minmax_index_for_numeric_columns=1 또는 add_minmax_index_for_string_columns=1로 생성한 뒤, 나중에 ALTER 작업 중 인덱스가 구체화되면서 새 레플리카에서 복제된 데이터베이스가 제대로 초기화되지 않던 문제를 수정했습니다. #83751 (Nikolay Degterinsky).
  • Decimal 타입에서 잘못된 통계값(min/max)을 출력하던 Parquet writer를 수정했습니다. #83754 (Michael Kolupaev).
  • LowCardinality(Float32|Float64|BFloat16) 유형에서 NaN 값 정렬 문제를 수정했습니다. #83786 (Pervakov Grigorii).
  • 백업에서 복원할 때 정의자 사용자가 함께 백업되지 않을 수 있으며, 이 경우 전체 백업을 사용할 수 없게 될 수 있습니다. 이를 해결하기 위해 복원 중에는 대상 테이블(target table) 생성 시의 권한 검사를 미루고, 런타임에만 검사하도록 했습니다. #83818 (pufit).
  • 잘못된 INSERT 후 connection이 끊어진 상태로 남아 클라이언트가 충돌하던 문제를 수정했습니다. #83842 (Azat Khuzhin).
  • 분석기가 활성화된 경우 remote 테이블 함수의 view(...) 인수에서 임의의 테이블을 참조할 수 있도록 합니다. #78717을 해결합니다. #79377을 해결합니다. #83844 (Dmitry Novik).
  • jsoneachrowwithprogress의 Onprogress 호출이 종료 처리와 동기화됩니다. #83879 (Sema Checherinda).
  • 이로써 #81303가 수정되었습니다. #83892 (Konstantin Vedernikov).
  • const 및 non-const 인자가 혼합된 경우 colorSRGBToOKLCH/colorOKLCHToSRGB 문제를 수정했습니다. #83906 (Azat Khuzhin).
  • NULL 값이 포함된 JSON 경로를 RowBinary 포맷으로 쓸 때 발생하던 문제를 수정했습니다. #83923 (Pavel Kruglov).
  • Date를 DateTime64로 캐스팅할 때 큰 값(>2106-02-07)에서 발생하던 오버플로우 문제가 수정되었습니다. #83982 (Yarik Briukhovetskyi).
  • filesystem_prefetches_limit를 항상 적용합니다(MergeTreePrefetchedReadPool에만 국한되지 않음). #83999 (Azat Khuzhin).
  • MATERIALIZE COLUMN 쿼리로 인해 checksums.txt에 예기치 않은 파일이 생성되고, 결국 분리된 데이터 파트가 생길 수 있던 드문 버그를 수정했습니다. #84007 (alesapin).
  • 한쪽 컬럼이 LowCardinality이고 다른 쪽이 상수일 때, 부등식 조건으로 JOIN을 수행하면 발생하는 논리 오류 Expected single dictionary argument for function를 수정했습니다. #81779를 해결합니다. #84019 (Alexey Milovidov).
  • 구문 강조가 적용된 interactive mode에서 clickhouse client 사용 시 발생하던 충돌을 수정했습니다. #84025 (Bharat Nallan).
  • 재귀 CTE와 함께 쿼리 조건 캐시를 사용할 때 잘못된 결과가 발생하던 문제를 수정했습니다 (이슈 #81506). #84026 (zhongyuankai).
  • 주기적인 파트 갱신 시 예외를 올바르게 처리합니다. #84083 (Azat Khuzhin).
  • 동등 비교의 피연산자 타입이 서로 다르거나 상수를 참조할 때 필터가 JOIN 조건에 병합되던 문제를 수정했습니다. #83432을 수정했습니다. #84145 (Dmitry Novik).
  • 테이블에 프로젝션이 있고 lightweight_mutation_projection_mode = 'rebuild'로 설정되어 있으며, 사용자가 테이블의 임의 block에서 모든 행을 삭제하는 lightweight delete를 실행할 때 드물게 발생하던 ClickHouse 크래시를 수정했습니다. #84158 (alesapin).
  • 백그라운드에서 취소를 확인하는 스레드로 인해 발생하던 교착 상태를 수정했습니다. #84203 (Antonio Andelic).
  • 잘못된 WINDOW 정의를 분석할 때 발생하는 무한 재귀를 수정했습니다. #83131를 해결합니다. #84242 (Dmitry Novik).
  • 잘못된 Bech32 Encoding 및 Decoding을 유발하던 버그를 수정했습니다. 이 버그는 테스트에 사용된 알고리즘의 온라인 구현에도 동일한 문제가 있어 처음에는 발견되지 않았습니다. #84257 (George Larionov).
  • array() 함수에서 빈 튜플이 잘못 구성되던 문제를 수정했습니다. 이로써 #84202가 해결됩니다. #84297 (Amos Bird).
  • 병렬 레플리카를 사용하는 쿼리에서 여러 개의 INNER 조인 뒤에 RIGHT 조인이 이어질 때 발생하는 LOGICAL_ERROR를 수정했습니다. 이러한 쿼리에는 병렬 레플리카를 사용하지 않도록 했습니다. #84299 (Vladimir Cherkasov).
  • 이전에는 set 인덱스가 각 그래뉼이 필터를 통과하는지 판단할 때 Nullable 컬럼을 고려하지 않았습니다(이슈 #75485). #84305 (Elmi Ahmadov).
  • 이제 ClickHouse는 테이블 유형이 소문자로 지정된 Glue Catalog의 테이블을 읽습니다. #84316 (alesapin).
  • JOIN 또는 서브쿼리가 있을 때는 테이블 함수를 해당 클러스터용 대안으로 대체하려고 하지 않습니다. #84335 (Konstantin Bogdanov).
  • IAccessStorage의 logger 사용을 수정했습니다. #84365 (Konstantin Bogdanov).
  • 테이블의 모든 컬럼을 업데이트하는 경량 업데이트에서 발생하던 논리 오류를 수정했습니다. #84380 (Anton Popov).
  • DoubleDelta 코덱은 이제 숫자형 컬럼에만 적용할 수 있습니다. 특히 FixedString 컬럼은 더 이상 DoubleDelta로 압축할 수 없습니다. (#80220 수정). #84383 (Jimmy Aguilar Mena).
  • MinMax 인덱스 평가 중 nan 값과 비교할 때 올바른 범위가 사용되지 않던 문제를 수정했습니다. #84386 (Elmi Ahmadov).
  • lazy materialization이 적용된 Variant 컬럼을 읽을 때 발생하던 문제를 수정했습니다. #84400 (Pavel Kruglov).
  • zoutofmemory를 하드웨어 오류로 처리하고, 그렇지 않으면 논리적 오류를 발생시킵니다. https://github.com/clickhouse/clickhouse-core-incidents/issues/877를 참조하십시오. #84420 (Han Fei).
  • no_password로 생성된 사용자가 서버 설정 allow_no_password가 0으로 변경된 후 로그인을 시도할 때 발생하던 서버 충돌을 수정했습니다. #84426 (Shankar Iyer).
  • Keeper changelog에 순서가 뒤바뀐 쓰기 문제가 수정되었습니다. 이전에는 changelog에 진행 중인 쓰기가 있을 수 있었지만, 롤백으로 인해 대상 파일이 동시에 변경될 수 있었습니다. 이로 인해 로그의 일관성이 깨지고 데이터 손실이 발생할 가능성이 있었습니다. #84434 (Antonio Andelic).
  • 이제 테이블에서 모든 TTL이 제거되면 MergeTree는 TTL 관련 작업을 수행하지 않습니다. #84441 (alesapin).
  • LIMIT이 포함된 병렬 분산 INSERT SELECT가 허용되었는데, 이는 올바르지 않으며 대상 테이블에 데이터 중복을 일으킵니다. #84477 (Igor Nikonov).
  • 데이터 레이크에서 가상 컬럼 기준 파일 프루닝 문제를 수정했습니다. #84520 (Kseniia Sumarokova).
  • RocksDB 스토리지를 사용하는 Keeper의 메모리 누수를 수정했습니다(이터레이터가 파기되지 않았음). #84523 (Azat Khuzhin).
  • ALTER MODIFY ORDER BY에서 정렬 키(sorting key)의 TTL 컬럼을 검증하지 않던 문제를 수정했습니다. 이제 ALTER 작업 중 ORDER BY 절에 TTL 컬럼을 사용하면 올바르게 거부되어 잠재적인 테이블 손상을 방지합니다. #84536 (xiaohuanlin).
  • 호환성을 위해 allow_experimental_delta_kernel_rs의 25.5 이전 값을 false로 변경했습니다. #84587 (Kseniia Sumarokova).
  • manifest 파일에서 schema를 가져오지 않고, 대신 각 snapshot별로 관련 schema를 독립적으로 저장합니다. 각 데이터 파일에 해당하는 관련 schema는 연결된 snapshot에서 추론합니다. 이전 동작은 기존 상태가 있는 manifest 파일 항목에 대한 Iceberg 사양을 위반했습니다. #84588 (Daniil Ivanik).
  • Keeper 설정 rotate_log_storage_interval = 0으로 인해 ClickHouse가 비정상 종료되던 문제를 수정했습니다. (이슈 #83975). #84637 (George Larionov).
  • S3Queue의 “Table is already registered” 논리 오류를 수정했습니다. #84433을 해결합니다. https://github.com/ClickHouse/ClickHouse/pull/83530 이후부터 문제가 발생했습니다. #84677 (Kseniia Sumarokova).
  • RefreshTask에서 ‘view’에서 ZooKeeper를 가져올 때 ‘뮤텍스’를 잠그도록 수정했습니다. #84699 (Tuan Pham Anh).
  • 지연 컬럼을 외부 정렬과 함께 사용할 때 발생하는 CORRUPTED_DATA 오류를 수정했습니다. #84738 (János Benjamin Antal).
  • DeltaLake 스토리지의 delta-kernel 사용 시 컬럼 프루닝 문제를 수정했습니다. #84543를 해결했습니다. #84745 (Kseniia Sumarokova).
  • DeltaLake 스토리지의 delta-kernel에서 자격 증명을 갱신합니다. #84751 (Kseniia Sumarokova).
  • 연결 문제 후 불필요한 내부 백업이 시작되던 문제를 수정했습니다. #84755 (Vitaly Baranov).
  • 지연된 원격 소스를 쿼리할 때 vector out of bounds 오류가 발생할 수 있던 문제를 수정했습니다. #84820 (George Larionov).
  • ngramno_op 토크나이저는 빈 입력 토큰이 있을 때 더 이상 (실험적) 텍스트 인덱스를 충돌시키지 않습니다. #84849 (Robert Schulze).
  • ReplacingMergeTreeCollapsingMergeTree 엔진을 사용하는 테이블에서 발생하던 경량 업데이트 문제를 해결했습니다. #84851 (Anton Popov).
  • 객체 큐 엔진을 사용하는 테이블에서 모든 설정이 테이블 메타데이터에 올바르게 저장되도록 수정했습니다. #84860 (Antonio Andelic).
  • Keeper가 반환하는 총 watch 개수 문제를 수정했습니다. #84890 (Antonio Andelic).
  • 25.7 미만 버전의 서버에서 생성된 ReplicatedMergeTree 엔진 테이블의 경량 업데이트 문제를 수정했습니다. #84933 (Anton Popov).
  • ALTER TABLE ... REPLACE PARTITION 쿼리 실행 후 비복제 MergeTree 엔진을 사용하는 테이블에서 발생하던 경량 업데이트 문제를 수정했습니다. #84941 (Anton Popov).
  • 불리언 리터럴의 컬럼 이름을 생성할 때 “1”/“0” 대신 “true”/“false”를 사용하도록 수정하여, 쿼리에서 불리언 리터럴과 정수 리터럴 간 컬럼 이름 충돌이 발생하지 않도록 했습니다. #84945 (xiaohuanlin).
  • background schedule pool 및 executor에서 발생하는 메모리 추적 오차를 수정했습니다. #84946 (Azat Khuzhin).
  • Merge 테이블 엔진에서 정렬이 부정확해질 수 있는 문제를 수정했습니다. #85025 (Xiaozhe Yu).
  • DiskEncrypted에 누락된 API를 구현합니다. #85028 (Azat Khuzhin).
  • 크래시를 방지하기 위해 분산 환경에서 상관 서브쿼리를 사용할 경우 확인하는 로직을 추가했습니다. #82205를 수정했습니다. #85030 (Dmitry Novik).
  • 이제 Iceberg는 select 쿼리 간에 관련 snapshot version을 캐시하지 않고, 항상 스냅샷을 다시 확인합니다. 이전에 Iceberg snapshot을 캐시하려던 시도는 time travel을 사용하는 Iceberg 테이블 사용 시 문제를 일으켰습니다. #85038 (Daniil Ivanik).
  • AzureIteratorAsync의 이중 해제 문제를 수정했습니다. #85064 (Nikita Taranov).
  • JWT로 식별되는 사용자를 생성하려 할 때 표시되는 오류 메시지를 개선했습니다. #85072 (Konstantin Bogdanov).
  • ReplicatedMergeTree에서 패치 파트 정리 문제가 수정되었습니다. 이전에는 패치 파트를 구체화하는 머지된 파트 또는 변이가 적용된 파트를 다른 레플리카에서 다운로드할 때까지 경량 업데이트 결과가 해당 레플리카에 일시적으로 보이지 않을 수 있었습니다. #85121 (Anton Popov).
  • 타입이 서로 다를 때 mv에서 발생하던 illegal_type_of_argument 문제를 수정했습니다. #85135 (Sema Checherinda).
  • delta-kernel 구현의 segfault를 수정했습니다. #85160 (Kseniia Sumarokova).
  • 메타데이터 파일 이동에 오랜 시간이 걸릴 때 복제된 데이터베이스 복구가 실패하던 문제를 수정했습니다. #85177 (Tuan Pham Anh).
  • additional_table_filters expression 설정에서 IN (subquery) 내부의 Not-ready Set 문제를 수정했습니다. #85210 (Nikolai Kochetov).
  • SYSTEM DROP REPLICA 쿼리에서 불필요한 getStatus() 호출을 제거했습니다. 테이블이 백그라운드에서 삭제될 때 Shutdown for storage is called 예외가 발생하던 문제를 수정했습니다. #85220 (Nikolay Degterinsky).
  • DeltaLake engine delta-kernel 구현의 race condition을 수정했습니다. #85221 (Kseniia Sumarokova).
  • DeltaLake 엔진에서 delta-kernel이 비활성화된 경우 파티션된 데이터를 읽지 못하던 문제를 수정했습니다. 이 문제는 25.7에서 발생했습니다(https://github.com/ClickHouse/ClickHouse/pull/81136). #85223 (Kseniia Sumarokova).
  • CREATE OR REPLACE 및 RENAME 쿼리에서 누락되었던 테이블 이름 길이 확인을 추가했습니다. #85326 (Michael Kolupaev).
  • DEFINER가 삭제된 경우 복제된 데이터베이스의 새 레플리카에서 RMV가 생성되지 않던 문제를 수정했습니다. #85327 (Nikolay Degterinsky).
  • 복합 타입의 Iceberg 쓰기 문제를 수정했습니다. #85330 (Konstantin Vedernikov).
  • 복합 타입에서는 하한 및 상한 기록이 지원되지 않습니다. #85332 (Konstantin Vedernikov).
  • 분산 테이블 또는 원격 테이블 함수로 객체 스토리지 함수에서 읽을 때 발생하던 논리 오류를 수정했습니다. 수정: #84658, 수정: #85173, 수정: #52022. #85359 (alesapin).
  • 손상된 프로젝션이 포함된 파트의 백업 문제를 수정했습니다. #85362 (Antonio Andelic).
  • 안정화되기 전까지는 릴리스에서 projection에 _part_offset 컬럼을 사용하지 못하도록 했습니다. #85372 (Sema Checherinda).
  • JSON에 대한 ALTER UPDATE 수행 중 발생하던 크래시와 데이터 손상을 수정했습니다. #85383 (Pavel Kruglov).
  • reading reverse in order 최적화를 사용하는 병렬 레플리카 쿼리에서 잘못된 결과가 반환될 수 있습니다. #85406 (Igor Nikonov).
  • String 역직렬화 중 MEMORY_LIMIT_EXCEEDED가 발생할 경우 생길 수 있는 UB(크래시)를 수정했습니다. #85440 (Azat Khuzhin).
  • 잘못 표시되던 메트릭 KafkaAssignedPartitions 및 KafkaConsumersWithAssignment를 수정했습니다. #85494 (Ilya Golshtein).
  • PREWHERE(명시적 또는 자동)를 사용할 때 processed bytes 통계가 실제보다 적게 집계되던 문제를 수정했습니다. #85495 (Michael Kolupaev).
  • S3 요청 속도 저하의 조기 반환 조건 수정: 재시도 가능한 오류로 인해 모든 스레드가 일시 중지되었을 때 속도 저하 동작이 활성화되려면, 기존처럼 두 조건이 모두 필요한 것이 아니라 s3_slow_all_threads_after_network_error 또는 backup_slow_all_threads_after_retryable_s3_error 중 하나만 true여도 되도록 수정했습니다. #85505 (Julia Kartseva).
  • 이 PR은 REST 카탈로그를 통해 Iceberg 테이블을 쿼리할 때 메타데이터 확인 과정의 문제를 수정합니다. … #85531 (Saurabh Kumar Ojha).
  • log_comment 또는 insert_deduplication_token 설정을 변경하는 asynchronous insert에서 드물게 발생하던 충돌을 수정했습니다. #85540 (Anton Popov).
  • HTTP에서 multipart/form-data를 사용할 때 date_time_input_format와 같은 매개변수가 무시되었습니다. #85570 (Sema Checherinda).
  • icebergS3Cluster 및 icebergAzureCluster 테이블 함수의 시크릿 마스킹 문제를 수정했습니다. #85658 (MikhailBurdukov).
  • JSON 숫자를 Decimal 타입으로 변환할 때 JSONExtract에서 발생하던 정밀도 손실 문제를 수정했습니다. 이제 숫자형 JSON 값은 정확한 소수 표현을 그대로 유지하여 부동소수점 반올림 오류를 방지합니다. #85665 (ssive7b).
  • DROP COLUMN 뒤의 동일한 ALTER 문에서 COMMENT COLUMN IF EXISTS를 사용할 때 발생하던 LOGICAL_ERROR를 수정했습니다. 이제 동일한 문 내에서 해당 컬럼이 이미 삭제된 경우 IF EXISTS 절이 주석 작업을 올바르게 건너뜁니다. #85688 (xiaohuanlin).
  • delta lake에서 cache의 count를 읽어오는 문제를 수정했습니다. #85704 (Kseniia Sumarokova).
  • 큰 문자열에서 발생하던 coalescing merge tree 세그폴트를 수정했습니다. 이로써 #84582가 해결되었습니다. #85709 (Konstantin Vedernikov).
  • Iceberg 쓰기 시 메타데이터 타임스탬프를 갱신합니다. #85711 (Konstantin Vedernikov).
  • distributed_depth를 *Cluster function의 판단 기준으로 사용하는 것은 잘못되었으며 데이터 중복을 일으킬 수 있습니다. 대신 client_info.collaborate_with_initiator를 사용하십시오. #85734 (Konstantin Bogdanov).
  • Spark는 포지션 삭제 파일을 읽을 수 없습니다. #85762 (Konstantin Vedernikov).
  • send_logs_source_regexp를 수정했습니다(#85105의 비동기 로깅 리팩터링 이후). #85797 (Azat Khuzhin).
  • MEMORY_LIMIT_EXCEEDED 오류 발생 시 update_field를 사용하는 Dictionaries에서 발생할 수 있는 불일치를 수정했습니다. #85807 (Azat Khuzhin).
  • Distributed 대상 테이블을 사용하는 병렬 분산 INSERT SELECT에서 WITH 구문의 전역 상수를 지원합니다. 이전에는 쿼리에서 Unknown expression identifier 오류가 발생할 수 있었습니다. #85811 (Nikolai Kochetov).
  • deltaLakeAzure, deltaLakeCluster, icebergS3Cluster, icebergAzureCluster의 자격 증명을 마스킹 처리합니다. #85889 (Julian Maicher).
  • DatabaseReplicated에서 CREATE ... AS (SELECT * FROM s3Cluster(...))를 시도할 때 발생하던 논리 오류를 수정했습니다. #85904 (Konstantin Bogdanov).
  • url() 테이블 함수가 수행하는 HTTP 요청이 비표준 포트에 접근할 때 Host 헤더에 포트 번호를 올바르게 포함하도록 수정했습니다. 이로써 개발 환경에서 흔히 사용되는 사용자 지정 포트에서 실행되는 MinIO와 같은 S3 호환 서비스와 presigned URL을 함께 사용할 때 발생하던 인증 실패 문제가 해결됩니다. (수정: #85898). #85921 (Tom Quist).
  • 이제 non-delta 테이블의 경우 Unity Catalog는 비정상적인 데이터 타입이 포함된 스키마를 무시합니다. #85699를 수정했습니다. #85950 (alesapin).
  • Iceberg의 필드 NULL 허용 여부를 수정했습니다. #85977 (Konstantin Vedernikov).
  • Replicated 데이터베이스 복구 과정에서 발생하던 버그를 수정했습니다. 테이블 이름에 % 기호가 포함되어 있으면, 복구 중 테이블이 다른 이름으로 다시 생성될 수 있었습니다. #85987 (Alexander Tokmakov).
  • Memory 테이블을 복원할 때 BACKUP_ENTRY_NOT_FOUND 오류로 백업 복원이 실패하는 문제를 수정했습니다. #86012 (Julia Kartseva).
  • 분산 테이블에 ALTER를 수행할 때 sharding_key에 대한 검사를 추가했습니다. 이전에는 잘못된 ALTER로 인해 테이블 정의가 손상되고 서버를 재시작할 수 없게 되었습니다. #86015 (Nikolay Degterinsky).
  • 빈 Iceberg 삭제 파일이 생성되지 않도록 수정했습니다. #86061 (Konstantin Vedernikov).
  • 큰 설정 값으로 인해 S3Queue 테이블이 손상되고 레플리카 재시작이 실패하던 문제를 수정했습니다. #86074 (Nikolay Degterinsky).

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

  • 이제 기본적으로 S3 테스트에 암호화된 디스크를 사용합니다. #59898 (Nikita Mikhaylov).
  • 스트립되지 않은 디버그 심볼을 사용하기 위해 통합 테스트에서 clickhouse 바이너리를 사용합니다. #83779 (Mikhail f. Shiryaev).
  • 내부 libxml2 버전을 2.14.4에서 2.14.5로 업데이트했습니다. #84230 (Robert Schulze).
  • 내부 curl 버전을 8.14.0에서 8.15.0으로 업데이트했습니다. #84231 (Robert Schulze).
  • 이제 CI에서 캐시에 사용하는 메모리를 줄였고, eviction 테스트도 개선했습니다. #84676 (alesapin).

ClickHouse 릴리스 25.7, 2025-07-24

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

  • extractKeyValuePairs 함수 변경: 따옴표로 묶이지 않은 키 또는 값을 읽는 중 quoting_character가 예기치 않게 발견되었을 때의 동작을 제어하는 새 인수 unexpected_quoting_character_strategy를 도입했습니다. 값은 invalid, accept, promote 중 하나일 수 있습니다. invalid는 키를 버리고 키를 기다리는 상태로 돌아갑니다. accept는 이를 키의 일부로 처리합니다. promote는 이전 문자를 버리고 따옴표로 묶인 키로 파싱을 시작합니다. 또한 따옴표로 묶인 값을 파싱한 후에는 쌍 구분자(pair delimiter)가 발견된 경우에만 다음 키를 파싱합니다. #80657 (Arthur Passos).
  • countMatches 함수에서 0바이트 일치를 지원합니다. 기존 동작을 유지하려는 사용자는 설정 count_matches_stop_at_empty_match를 활성화할 수 있습니다. #81676 (Elmi Ahmadov).
  • 백업 생성 시 전용 서버 설정(max_backup_bandwidth_for_server, max_mutations_bandwidth_for_server, max_merges_bandwidth_for_server)에 더해 로컬(max_local_read_bandwidth_for_server, max_local_write_bandwidth_for_server) 및 원격(max_remote_read_network_bandwidth_for_server, max_remote_write_network_bandwidth_for_server)용 서버 전체 스로틀러도 사용합니다. #81753 (Sergei Trifonov).
  • 삽입 가능한 컬럼이 없는 테이블의 생성을 금지합니다. #81835 (Pervakov Grigorii).
  • 아카이브 내부 파일 단위로 클러스터 함수를 병렬화합니다. 이전 버전에서는 전체 아카이브(zip, tar, 7z 등)가 작업 단위였습니다. 기본값이 true인 새 설정 cluster_function_process_archive_on_multiple_nodes를 추가했습니다. true로 설정하면 클러스터 함수에서 아카이브를 처리하는 성능이 향상됩니다. 이전 버전에서 아카이브와 함께 클러스터 함수를 사용하는 경우, 호환성을 유지하고 25.7+로 업그레이드하는 동안 오류를 방지하려면 false로 설정해야 합니다. #82355 (Kseniia Sumarokova).
  • SYSTEM RESTART REPLICAS 쿼리로 인해 해당 데이터베이스에 대한 접근 권한이 없어도 Lazy 데이터베이스의 테이블이 활성화되었고, 이는 해당 테이블이 동시에 삭제되는 동안 발생했습니다. 참고: 이제 SYSTEM RESTART REPLICASSHOW TABLES 권한이 있는 데이터베이스에서만 레플리카를 재시작하며, 이는 자연스러운 동작입니다. #83321 (Alexey Milovidov).

새 기능

  • MergeTree 계열 테이블에 경량 업데이트 지원이 추가되었습니다. 경량 업데이트는 새로운 구문인 UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>을 사용해 수행할 수 있습니다. 경량 업데이트를 기반으로 한 경량한 삭제 구현도 추가되었습니다. 이 기능은 lightweight_delete_mode = 'lightweight_update'를 설정하여 활성화할 수 있습니다. #82004 (Anton Popov).
  • Iceberg 스키마 진화에서 복합 타입을 지원합니다. #73714 (Konstantin Vedernikov).
  • Iceberg 테이블에 대한 INSERT 지원이 추가되었습니다. #82692 (Konstantin Vedernikov).
  • 필드 ID를 기준으로 Iceberg 데이터 파일을 읽습니다. 이를 통해 Iceberg와의 호환성이 향상됩니다. 메타데이터에서는 필드 이름을 변경하더라도, 기본 Parquet 파일의 서로 다른 이름에 계속 매핑할 수 있습니다. 이로써 #83065가 해결됩니다. #83653 (Konstantin Vedernikov).
  • 이제 ClickHouse는 Iceberg용 압축 metadata.json 파일을 지원합니다. #70874 문제가 수정되었습니다. #81451 (alesapin).
  • Glue catalog에서 TimestampTZ 지원이 추가되었습니다. 이 변경으로 #81654가 해결되었습니다. #83132 (Konstantin Vedernikov).
  • ClickHouse client에 AI 기반 SQL 생성 기능이 추가되었습니다. 이제 쿼리 앞에 ??를 붙여 자연어 설명으로부터 SQL 쿼리를 생성할 수 있습니다. OpenAI 및 Anthropic provider를 지원하며, 스키마(schema)를 자동으로 디스커버리합니다. #83314 (Kaushik Iska).
  • Geo 타입을 WKB 포맷으로 출력하는 함수를 추가했습니다. #82935 (Konstantin Vedernikov).
  • 소스에 대해 두 가지 새로운 액세스 유형인 READWRITE를 도입했으며, 소스 관련 기존 액세스 유형은 모두 더 이상 사용되지 않습니다. 이전에는 GRANT S3 ON *.* TO user를 사용했지만, 이제는 GRANT READ, WRITE ON S3 TO user를 사용합니다. 또한 이를 통해 소스에 대한 READWRITE 권한을 분리할 수 있습니다. 예: GRANT READ ON * TO user, GRANT WRITE ON S3 TO user. 이 기능은 access_control_improvements.enable_read_write_grants 설정으로 제어되며, 기본적으로 비활성화되어 있습니다. #73659 (pufit).
  • NumericIndexedVector: 비트 슬라이싱 및 Roaring 비트맵 압축을 기반으로 하는 새로운 벡터 데이터 구조로, 생성, 분석, 원소별 산술 연산을 위한 20개 이상의 함수를 함께 제공합니다. 희소 데이터에서 저장 공간을 줄이고 조인, 필터, 집계 성능을 높일 수 있습니다. #70582 및 VLDB 2024의 T. Xiong과 Y. Wang가 작성한 “Large-Scale Metric Computation in Online Controlled Experiment Platform” 논문을 구현합니다. #74193 (FriendLey).
  • workload setting max_waiting_queries를 이제 지원합니다. 이 설정은 쿼리 큐의 크기를 제한하는 데 사용할 수 있습니다. 제한에 도달하면 그 이후의 모든 쿼리는 SERVER_OVERLOADED 오류로 종료됩니다. #81250 (Oleg Doronin).
  • 재무 관련 함수를 추가했습니다: financialInternalRateOfReturnExtended (XIRR), financialInternalRateOfReturn (IRR), financialNetPresentValueExtended (XNPV), financialNetPresentValue (NPV). #81599 (Joanna Hulboj).
  • 두 다각형이 서로 교차하는지 확인하는 지리공간 함수 polygonsIntersectCartesianpolygonsIntersectSpherical를 추가했습니다. #81882 (Paul Lamb).
  • MergeTree 계열 테이블에서 _part_granule_offset 가상 컬럼을 지원합니다. 이 컬럼은 각 행이 해당 데이터 파트 내에서 속한 granule/mark의 0부터 시작하는 인덱스를 나타냅니다. 이는 #79572를 해결합니다. #82341 (Amos Bird). #82341 (Amos Bird)
  • sRGB와 OkLCH 색 공간 간 색상을 변환하는 SQL 함수 colorSRGBToOkLCHcolorOkLCHToSRGB가 추가되었습니다. #83679 (Fgrtue).
  • 사용자 이름에 CREATE USER 쿼리 매개변수를 사용할 수 있습니다. #81387 (Diskein).
  • 이제 system.formats 테이블에 HTTP 콘텐츠 유형, 스키마 추론 기능 등 포맷에 관한 확장된 정보가 포함됩니다. #81505 (Alexey Milovidov).

실험적 기능

  • 텍스트 인덱스를 검색하기 위한 범용 도구인 searchAnysearchAll 함수를 추가했습니다. #80641 (Elmi Ahmadov).
  • 이제 텍스트 인덱스에서 새로운 split 토크나이저를 지원합니다. #81752 (Elmi Ahmadov).
  • text 인덱스의 기본 인덱스 세분화 수준 값을 64로 변경했습니다. 이 변경으로 내부 벤치마크에서 평균적인 테스트 쿼리의 예상 성능이 향상됩니다. #82162 (Jimmy Aguilar Mena).
  • 256비트 비트맵은 state의 outgoing label을 정렬된 순서로 저장하지만, outgoing state는 해시 테이블에 나타나는 순서대로 디스크에 저장됩니다. 따라서 디스크에서 읽는 동안 label이 잘못된 다음 state를 가리킬 수 있었습니다. #82783 (Elmi Ahmadov).
  • 텍스트 인덱스의 FST 트리 blob에 zstd 압축을 적용했습니다. #83093 (Elmi Ahmadov).
  • vector similarity index를 베타로 승격했습니다. vector similarity index를 사용하려면 반드시 활성화해야 하는 alias 설정 enable_vector_similarity_index를 도입했습니다. #83459 (Robert Schulze).
  • 실험적인 zero-copy 복제와 관련된 실험적 send_metadata 로직을 제거했습니다. 이 로직은 실제로 사용된 적이 없었고, 이 코드를 지원하는 사람도 없었습니다. 관련 테스트도 전혀 없었기 때문에 오래전에 이미 깨졌을 가능성이 매우 높습니다. #82508 (alesapin).
  • StorageKafka2system.kafka_consumers에 통합했습니다. #82652 (János Benjamin Antal).
  • 예를 들어 (a < 1 and a > 0) or b = 3와 같은 복잡한 CNF/DNF를 통계를 사용해 추정합니다. #82663 (Han Fei).

성능 개선

  • 비동기 로깅을 도입했습니다. 로그를 느린 장치에 출력하더라도 더 이상 쿼리가 지연되지 않습니다. #82516 (Raúl Marín). 큐에 유지되는 항목의 최대 개수를 제한합니다. #83214 (Raúl Marín).
  • 각 세그먼트에서 INSERT SELECT를 독립적으로 실행하는 모드에서는 병렬 분산 INSERT SELECT가 기본적으로 활성화됩니다. parallel_distributed_insert_select 설정을 참조하십시오. #83040 (Igor Nikonov).
  • 집계 쿼리에 널 허용이 아닌 Nullable이 아닌 컬럼에 대한 단일 count() 함수만 포함된 경우, 해시 테이블 프로빙 중 집계 로직이 완전히 인라인됩니다. 이로 인해 집계 상태를 할당하거나 유지할 필요가 없어지므로 메모리 사용량과 CPU 오버헤드가 크게 줄어듭니다. 이는 #81982를 부분적으로 해결합니다. #82104 (Amos Bird).
  • 일반적으로 키 컬럼이 하나뿐인 경우에는 hash maps에 대한 추가 루프를 제거해 HashJoin 성능을 최적화했으며, 항상 true/false인 경우 null_mapjoin_mask 검사도 제거했습니다. #82308 (Nikita Taranov).
  • -If combinator에 대한 경미한 최적화. #78454 (李扬).
  • 벡터 유사도 인덱스를 사용하는 벡터 검색 쿼리는 스토리지 읽기와 CPU 사용량이 줄어들어 더 짧은 지연 시간으로 완료됩니다. #79103 (Shankar Iyer).
  • filterPartsByQueryConditionCache에서 merge_tree_min_{rows,bytes}_for_seek를 적용해, 인덱스로 필터링하는 다른 메서드와 동작을 일치시켰습니다. #80312 (李扬).
  • TOTALS 단계 이후의 파이프라인을 멀티스레드화했습니다. #80331 (UnamedRus).
  • RedisKeeperMap 스토리지에서 key 기준 필터링을 수정했습니다. #81833 (Pervakov Grigorii).
  • JOIN 입력 및 출력 블록의 최소 크기(행 수 기준)를 제어하는 새로운 설정 min_joined_block_size_rows를 추가했습니다(min_joined_block_size_bytes와 유사하며 기본값은 65409이고, 조인 알고리즘이 이를 지원하는 경우 적용됩니다). 작은 블록은 더 큰 블록으로 합쳐집니다. #81886 (Nikita Taranov).
  • ATTACH PARTITION이 더 이상 모든 캐시가 삭제되는 현상을 일으키지 않습니다. #82377 (Alexey Milovidov).
  • 등가 클래스(equivalence classes)를 사용해 중복된 JOIN 연산을 제거함으로써 상관 서브쿼리에 대해 생성된 실행 계획을 최적화합니다. 모든 상관 컬럼에 대해 등가 표현식이 있으면, query_plan_correlated_subqueries_use_substitution 설정이 활성화된 경우 CROSS JOIN이 생성되지 않습니다. #82435 (Dmitry Novik).
  • 함수 EXISTS의 인수로 사용되는 상관 서브쿼리에서 필요한 컬럼만 읽도록 개선했습니다. #82443 (Dmitry Novik).
  • 쿼리 분석 단계에서 쿼리 트리 비교 속도를 약간 개선했습니다. #82617 (Nikolai Kochetov).
  • false sharing을 줄이기 위해 ProfileEvents의 Counter에 메모리 정렬을 추가했습니다. #82697 (Jiebin Sun).
  • #82308null_mapJoinMask 최적화가 여러 개의 OR 조건을 포함한 JOIN에도 적용되었습니다. 또한 KnownRowsHolder 자료 구조도 최적화되었습니다. #83041 (Nikita Taranov).
  • 플래그에 접근할 때마다 hash를 계산하지 않기 위해 join 플래그에는 일반 std::vector<std::atomic_bool>를 사용합니다. #83043 (Nikita Taranov).
  • HashJoinlazy 출력 모드를 사용할 때는 결과 컬럼용 메모리를 미리 할당하지 마십시오. 특히 매칭 수가 적을 때는 비효율적입니다. 또한 조인이 완료되면 정확한 매칭 개수를 알 수 있으므로, 메모리를 더 정확하게 사전 할당할 수 있습니다. #83304 (Nikita Taranov).
  • 파이프라인 구성 중 포트 헤더의 메모리 복사를 최소화했습니다. 원본 PR 작성: heymind. #83381 (Raúl Marín).
  • rocksdb 스토리지를 사용하는 clickhouse-keeper의 시작 성능을 개선했습니다. #83390 (Antonio Andelic).
  • 동시 부하가 높은 환경에서 락 경합을 줄이기 위해 스토리지 스냅샷 데이터를 생성하는 동안에는 락을 유지하지 않도록 개선했습니다. #83510 (Duc Canh Le).
  • 파싱 오류가 없을 때 serializer를 재사용하도록 하여 ProtobufSingle 입력 형식의 성능을 개선했습니다. #83613 (Eduard Karacharov).
  • 짧은 쿼리의 처리 속도를 높이기 위해 파이프라인 구성 성능을 개선했습니다. #83631 (Raúl Marín).
  • 짧은 쿼리 성능을 높이는 MergeTreeReadersChain::getSampleBlock를 최적화했습니다. #83875 (Raúl Marín).
  • 비동기 요청을 통해 데이터 카탈로그에서 테이블 목록을 조회하는 속도를 개선했습니다. #81084 (alesapin).
  • s3_slow_all_threads_after_network_error 구성이 활성화되면 S3 재시도 메커니즘에 지터를 추가합니다. #81849 (zoomxi).

개선 사항

  • 가독성을 높이기 위해 괄호를 여러 색으로 구분해 표시합니다. #82538 (Konstantin Bogdanov).
  • 입력 중 LIKE/REGEXP 패턴의 메타문자를 강조 표시합니다. 이 기능은 이미 clickhouse-formatclickhouse-client의 echo 출력에서 제공되었으며, 이제 명령 프롬프트에서도 지원됩니다. #82871 (Alexey Milovidov).
  • clickhouse-format과 클라이언트의 echo에서의 하이라이트는 명령줄 프롬프트의 하이라이트와 동일하게 작동합니다. #82874 (Alexey Milovidov).
  • 이제 plain_rewritable 디스크를 데이터베이스 메타데이터용 디스크로 사용할 수 있습니다. 이를 데이터베이스 디스크로 지원하기 위해 plain_rewritablemoveFilereplaceFile 메서드를 구현했습니다. #79424 (Tuan Pham Anh).
  • PostgreSQL, MySQL, DataLake 데이터베이스의 백업을 허용합니다. 이러한 데이터베이스를 백업하면 정의만 저장되고 내부 데이터는 저장되지 않습니다. #79982 (Nikolay Degterinsky).
  • 설정 allow_experimental_join_condition은 이제 항상 허용되므로 obsolete로 표시되었습니다. #80566 (Vladimir Cherkasov).
  • ClickHouse 비동기 메트릭에 압력 메트릭을 추가했습니다. #80779 (Xander Garbett).
  • 마크 캐시 축출을 추적하기 위한 메트릭 MarkCacheEvictedBytes, MarkCacheEvictedMarks, MarkCacheEvictedFiles가 추가되었습니다. (issue #60989). #80799 (Shivji Kumar Jha).
  • 사양에 따라 Parquet enum을 바이트 배열로 기록할 수 있도록 지원합니다. #81090 (Arthur Passos).
  • DeltaLake 테이블 엔진이 개선되었습니다. delta-kernel-rs에는 ExpressionVisitor API가 있으며, 이 PR에서 이를 구현해 파티션 컬럼 표현식 변환에 적용했습니다(이로써 기존 코드에서 사용하던 delta-kernel-rs의 오래된 deprecated 방식을 대체합니다). 앞으로 이 ExpressionVisitor를 통해 통계 기반 프루닝과 일부 Delta Lake 고유 기능도 구현할 수 있게 됩니다. 또한 이번 변경의 목적은 DeltaLakeCluster 테이블 엔진에서 파티션 프루닝을 지원하는 것입니다(파싱된 표현식의 결과인 ActionsDAG는 직렬화되어 데이터 경로와 함께 initiator에서 전송됩니다. 프루닝에 필요한 이런 정보는 데이터 파일 목록의 메타 정보로만 제공되며, 이 목록화는 initiator에서만 수행되지만 실제로는 각 읽기 server의 데이터에 적용되어야 하기 때문입니다). #81136 (Kseniia Sumarokova).
  • 이름이 지정된 Tuple의 supertype을 유도할 때 요소 이름을 유지합니다. #81345 (lgbo).
  • StorageKafka2에서 이전에 커밋된 오프셋에 의존하지 않도록 소비된 메시지 수를 수동으로 계산합니다. #81662 (János Benjamin Antal).
  • ClickHouse Keeper 데이터를 관리하고 분석하기 위한 새로운 명령줄 도구 clickhouse-keeper-utils가 추가되었습니다. 이 도구는 스냅샷과 changelog에서 상태를 덤프하고, changelog 파일을 분석하며, 특정 로그 범위를 추출하는 기능을 지원합니다. #81677 (Antonio Andelic).
  • 전체 및 사용자별 네트워크 스로틀러는 재설정되지 않으므로, max_network_bandwidth_for_all_usersmax_network_bandwidth_for_all_users 제한을 초과하지 않도록 보장합니다. #81729 (Sergei Trifonov).
  • GeoParquet을 출력 형식으로 사용할 수 있도록 지원합니다. #81784 (Konstantin Vedernikov).
  • 현재 완료되지 않은 데이터 mutation의 영향을 받고 있는 컬럼의 이름을 변경하는 RENAME COLUMN alter mutation은 시작할 수 없도록 합니다. #81823 (Mikhail Artemenko).
  • Connection 헤더는 연결을 유지해야 하는지 확인된 경우 헤더 끝에 전송됩니다. #81951 (Sema Checherinda).
  • listen_backlog(기본값 4096)에 맞춰 TCP 서버 큐(기본값 64)를 조정합니다. #82045 (Azat Khuzhin).
  • server를 재시작하지 않고 max_local_read_bandwidth_for_servermax_local_write_bandwidth_for_server를 즉시 다시 로드할 수 있는 기능이 추가되었습니다. #82083 (Kai Zhu).
  • TRUNCATE TABLE system.warnings를 사용해 system.warnings 테이블의 모든 경고를 비울 수 있도록 지원을 추가했습니다. #82087 (Vladimir Cherkasov).
  • 데이터 레이크 클러스터 함수의 파티션 프루닝을 수정했습니다. #82131 (Kseniia Sumarokova).
  • DeltaLakeCluster 테이블 함수에서 파티션된 데이터를 읽는 문제를 수정했습니다. 이 PR에서는 cluster 함수의 프로토콜 버전을 높여 initiator에서 레플리카로 추가 정보를 전송할 수 있도록 했습니다. 이 추가 정보에는 파티션 컬럼(향후에는 생성된 컬럼 등 다른 항목도 포함)을 파싱하는 데 필요한 delta-kernel transform 표현식이 포함됩니다. #82132 (Kseniia Sumarokova).
  • reinterpret 함수가 이제 T가 고정 크기 데이터 타입인 경우 Array(T)로 변환할 수 있습니다(이슈 #82621). #83399 (Shankar Iyer).
  • 이제 Datalake 데이터베이스에서 더 적절한 예외를 발생시킵니다. #81211을 수정했습니다. #82304 (alesapin).
  • HashJoin::needUsedFlagsForPerRightTableRow가 false를 반환하게 하여 CROSS JOIN을 개선했습니다. #82379 (lgbo).
  • 맵 컬럼을 튜플의 배열로 읽고 쓸 수 있도록 지원합니다. #82408 (MikhailBurdukov).
  • system.licensesRust 크레이트의 라이선스 목록을 추가합니다. #82440 (Raúl Marín).
  • {uuid} 같은 매크로를 이제 S3Queue 테이블 엔진의 keeper_path 설정에서 사용할 수 있습니다. #82463 (Nikolay Degterinsky).
  • Keeper 개선: 백그라운드 스레드에서 디스크 간에 changelog 파일을 이동합니다. 이전에는 changelog를 다른 디스크로 옮기면 이동이 완료될 때까지 Keeper 전체가 차단되었습니다. 이로 인해 이동에 오랜 시간이 걸리는 경우(예: S3 디스크로 이동) 성능이 저하되었습니다. #82485 (Antonio Andelic).
  • Keeper 개선: 새 설정 keeper_server.cleanup_old_and_ignore_new_acl이 추가되었습니다. 이 설정을 활성화하면 모든 노드의 ACL이 제거되고 새 요청에 대한 ACL은 무시됩니다. 노드에서 ACL을 완전히 제거하는 것이 목적이라면 새 snapshot이 생성될 때까지 이 설정을 활성화된 상태로 유지하는 것이 중요합니다. #82496 (Antonio Andelic).
  • S3Queue 테이블 엔진을 사용하는 테이블에서 스트리밍을 비활성화하는 새 서버 설정 s3queue_disable_streaming이 추가되었습니다. 이 설정은 서버를 재시작하지 않고도 변경할 수 있습니다. #82515 (Kseniia Sumarokova).
  • 파일 시스템 캐시의 동적 크기 조정 기능을 리팩터링했습니다. 내부 검사를 위해 로그를 더 추가했습니다. #82556 (Kseniia Sumarokova).
  • 설정 파일 없이 실행된 clickhouse-server도 기본 설정과 마찬가지로 PostgreSQL 포트 9005에서 수신 대기합니다. #82633 (Alexey Milovidov).
  • ReplicatedMergeTree::executeMetadataAlter에서는 StorageID를 가져온 뒤 DDLGuard를 사용하지 않은 상태로 IDatabase::alterTable을 호출하려고 시도합니다. 그 사이 해당 테이블이 다른 테이블과 EXCHANGE되었을 수 있으므로, 정의를 가져올 때 잘못된 정의를 얻을 수 있습니다. 이를 방지하기 위해 IDatabase::alterTable을 호출할 때 UUID가 일치하는지 확인하는 별도의 검사를 추가했습니다. #82666 (Nikolay Degterinsky).
  • 읽기 전용 원격 디스크를 사용하는 데이터베이스를 ATTACH할 때는 DatabaseCatalog에 테이블 UUID를 수동으로 추가합니다. #82670 (Tuan Pham Anh).
  • NumericIndexedVector에서 사용자가 naninf를 사용하지 못하도록 했습니다. #82239을 수정하고 그 외 몇 가지도 추가로 개선했습니다. #82681 (Raufs Dunamalijevs).
  • X-ClickHouse-ProgressX-ClickHouse-Summary 헤더 포맷에서 0 값도 생략하지 않도록 했습니다. #82727 (Nikita Mikhaylov).
  • Keeper 개선: world:anyone ACL에서 특정 권한을 지원합니다. #82755 (Antonio Andelic).
  • SummingMergeTree에서 합산할 컬럼으로 명시적으로 지정된 컬럼과 관련된 RENAME COLUMN 또는 DROP COLUMN은 허용되지 않습니다. #81836을 해결합니다. #82821 (Alexey Milovidov).
  • Decimal에서 Float32로 변환할 때의 precision(정밀도)을 개선했습니다. Decimal에서 BFloat16으로 변환하는 기능을 구현했습니다. #82660을 해결했습니다. #82823 (Alexey Milovidov).
  • web UI의 스크롤바가 약간 더 개선됩니다. #82869 (Alexey Milovidov).
  • clickhouse-server에서 내장 구성을 사용하면 HTTP OPTIONS 응답을 제공해 Web UI를 사용할 수 있습니다. #82870 (Alexey Milovidov).
  • config에서 경로별 추가 Keeper ACL을 지정할 수 있도록 지원이 추가되었습니다. 특정 경로에 추가 ACL을 적용하려면 config의 zookeeper.path_acls 아래에 정의하면 됩니다. #82898 (Antonio Andelic).
  • 이제 뮤테이션 스냅샷은 보이는 파트의 스냅샷을 기반으로 생성됩니다. 또한 스냅샷에서 사용되는 뮤테이션 카운터는 포함된 뮤테이션을 기준으로 다시 계산됩니다. #82945 (Mikhail Artemenko).
  • soft memory limit으로 인해 Keeper가 쓰기를 거부할 때 ProfileEvent를 추가합니다. #82963 (Xander Garbett).
  • 컬럼 commit_time, commit_idsystem.s3queue_log에 추가되었습니다. #83016 (Kseniia Sumarokova).
  • 메트릭에 여러 차원이 필요한 경우가 있습니다. 예를 들어, 단일 카운터만 두는 대신 오류 코드별로 실패한 머지나 뮤테이션을 집계해야 할 수 있습니다. 이를 위해 정확히 그 역할을 하는 system.dimensional_metrics를 도입했으며, 첫 번째 차원 메트릭인 failed_merges도 추가했습니다. #83030 (Miсhael Stetsyuk).
  • clickhouse client의 알 수 없는 설정 경고를 모아 요약 형태로 기록합니다. #83042 (Bharat Nallan).
  • clickhouse client는 이제 connection 오류가 발생하면 로컬 포트를 표시합니다. #83050 (Jianfei Hu).
  • AsynchronousMetrics의 오류 처리가 조금 더 개선되었습니다. /sys/block 디렉터리가 존재하지만 접근할 수 없는 경우, 서버는 블록 디바이스 모니터링 없이 시작됩니다. #79229를 해결합니다. #83115 (Alexey Milovidov).
  • 일반 테이블 이후에 SystemLogs를 종료하도록 변경했습니다(기존처럼 일반 테이블 이전이 아니라, 시스템 테이블 이전에 종료). #83134 (Kseniia Sumarokova).
  • S3Queue 종료 과정에 대한 logs를 추가합니다. #83163 (Kseniia Sumarokova).
  • TimeTime64MM:SS, M:SS, SS 또는 S 형식으로 파싱할 수 있습니다. #83299 (Yarik Briukhovetskyi).
  • distributed_ddl_output_mode='*_only_active'인 경우, 복제 지연(replication lag)이 max_replication_lag_to_enqueue보다 큰 새 레플리카나 복구된 레플리카는 기다리지 않습니다. 이렇게 하면 새 레플리카가 초기화 또는 복구를 마친 뒤 활성화되었지만, 초기화 중에 대량의 복제 로그를 누적한 경우 DDL task is not finished on some hosts가 발생하는 것을 방지하는 데 도움이 됩니다. 또한 복제 로그가 max_replication_lag_to_enqueue 미만이 될 때까지 대기하는 SYSTEM SYNC DATABASE REPLICA STRICT 쿼리도 구현했습니다. #83302 (Alexander Tokmakov).
  • 예외 메시지에 표현식 작업에 대한 지나치게 긴 설명을 출력하지 않도록 했습니다. #83164를 해결합니다. #83350 (Alexey Milovidov).
  • part의 접두사와 접미사를 파싱하고, 비상수 컬럼에 대한 커버리지도 확인할 수 있는 기능을 추가했습니다. #83377 (Mikhail Artemenko).
  • 이름이 지정된 컬렉션 사용 시 ODBC와 JDBC의 매개변수 이름을 통일했습니다. #83410 (Andrey Zvonov).
  • 스토리지가 종료되는 중에는 getStatusErrorCodes::ABORTED 예외를 발생시킵니다. 이전에는 이로 인해 select 쿼리가 실패했습니다. 이제는 ErrorCodes::ABORTED 예외를 포착해 의도적으로 무시하도록 변경했습니다. #83435 (Miсhael Stetsyuk).
  • MergeParts 항목의 part_log 프로필 이벤트에 프로세스 리소스 메트릭(예: UserTimeMicroseconds, SystemTimeMicroseconds, RealTimeMicroseconds)을 추가했습니다. #83460 (Vladimir Cherkasov).
  • Keeper에서 create_if_not_exists, check_not_exists, remove_recursive 기능 플래그를 기본적으로 활성화하여 새로운 유형의 요청을 사용할 수 있게 했습니다. #83488 (Antonio Andelic).
  • 서버 종료 시 어떤 테이블이든 종료하기 전에 S3(Azure/etc)Queue streaming을 먼저 종료합니다. #83530 (Kseniia Sumarokova).
  • JSON 입력 형식에서 Date/Date32를 정수로 처리할 수 있도록 지원합니다. #83597 (MikhailBurdukov).
  • 특정 상황에서 프로젝션 로딩 및 추가 시 표시되는 예외 메시지를 더 읽기 쉽게 개선했습니다. #83728 (Robert Schulze).
  • clickhouse-server의 바이너리 체크섬 무결성 검사를 건너뛸 수 있는 구성 옵션을 추가했습니다. #83637을 해결합니다. #83749 (Rafael Roquetto).

버그 수정(공식 안정 릴리스에서 사용자에게 드러나는 오동작)

  • clickhouse-benchmark--reconnect 옵션에 설정된 잘못된 기본값을 수정했습니다. 이 값은 #79465에서 실수로 변경되었습니다. #82677 (Alexey Milovidov).
  • CREATE DICTIONARY의 포맷이 일관되지 않던 문제를 수정합니다. #82105를 해결합니다. #82829 (Alexey Milovidov).
  • materialize 함수가 포함된 TTL의 포맷이 일관되지 않던 문제를 수정했습니다. #82828을 해결합니다. #82831 (Alexey Milovidov).
  • INTO OUTFILE과 같은 출력 옵션이 포함된 서브쿼리에서 EXPLAIN AST의 포맷이 일관되지 않던 문제를 수정했습니다. #82826을 해결합니다. #82840 (Alexey Milovidov).
  • 별칭이 허용되지 않는 경우 Context에서 별칭이 포함된 괄호 표현식의 포맷이 일관되지 않던 문제를 수정했습니다. Closes #82836. Closes #82837. #82867 (Alexey Milovidov).
  • 집계 함수 state와 IPv4를 곱할 때 올바른 오류 코드를 사용하도록 수정했습니다. #82817을 해결했습니다. #82818 (Alexey Milovidov).
  • 파일 시스템 캐시의 논리 오류 수정: “0바이트인데 범위가 아직 끝나지 않았습니다”. #81868 (Kseniia Sumarokova).
  • minmax_count_projection과 같이 이를 기반으로 하는 알고리즘의 정확성을 보장하기 위해, TTL로 인해 행 수가 줄어들 때 MinMax 인덱스를 재계산합니다. 이로써 #77091이 해결되었습니다. #77166 (Amos Bird).
  • ORDER BY ... LIMIT BY ... LIMIT N 조합의 쿼리에서 ORDER BY가 PartialSorting으로 실행되면, 카운터 rows_before_limit_at_least는 이제 정렬 변환이 처리한 행 수가 아니라 LIMIT 절이 소비한 행 수를 반영합니다. #78999 (Eduard Karacharov).
  • alternation을 포함하고 첫 번째 대안이 리터럴이 아닌 정규식을 사용하는 token/ngram 인덱스 필터링에서 발생하던 과도한 granule 스키핑을 수정했습니다. #79373 (Eduard Karacharov).
  • <=> 연산자와 Join 스토리지 관련 논리 오류를 수정하여, 이제 쿼리가 올바른 오류 코드를 반환합니다. #80165 (Vladimir Cherkasov).
  • remote 함수 계열과 함께 사용할 때 loop 함수에서 발생하던 충돌을 수정했습니다. loop(remote(...))에서 LIMIT 절이 올바르게 적용되도록 수정했습니다. #80299 (Julia Kartseva).
  • Unix epoch(1970-01-01) 이전 날짜와 최대 날짜(2106-02-07 06:28:15) 이후의 날짜를 처리할 때 to_utc_timestampfrom_utc_timestamp 함수에서 발생하던 잘못된 동작을 수정했습니다. 이제 이 함수는 값을 각각 epoch 시작 시점과 최대 날짜로 올바르게 제한합니다. #80498 (Surya Kant Ranjan).
  • 병렬 레플리카로 실행된 일부 쿼리에서는 순차 읽기 최적화가 initiator에는 적용될 수 있지만 원격 노드에는 적용될 수 없습니다. 그 결과 병렬 레플리카 coordinator(initiator 측)와 원격 노드에서 서로 다른 읽기 모드가 사용되는데, 이는 논리적 오류입니다. #80652 (Igor Nikonov).
  • 컬럼 유형이 널 허용(Nullable)으로 변경되었을 때 프로젝션을 구체화하는 과정에서 발생하던 논리 오류를 수정했습니다. #80741 (Pavel Kruglov).
  • TTL을 업데이트할 때 TTL GROUP BY에서 발생하는 잘못된 TTL 재계산 문제를 수정했습니다. #81222 (Evgeniy Ulasik).
  • WHERE function(key) IN (...)와 같은 조건을 WHERE key IN (...)처럼 잘못 적용하던 Parquet 블룸 필터 문제를 수정했습니다. #81255 (Michael Kolupaev).
  • 머지 중 예외가 발생했을 때 Aggregator가 충돌할 수 있던 문제를 수정했습니다. #81450 (Nikita Taranov).
  • 필요한 경우 InterpreterInsertQuery::extendQueryLogElemImpl가 데이터베이스 및 테이블 이름에 백쿼트를 다시 추가하도록 수정했습니다(예: 이름에 -와 같은 특수 문자가 포함된 경우). #81528 (Ilia Shvyrialkin).
  • 왼쪽 인수가 null이고 서브쿼리 결과가 NULL을 허용하지 않는 경우 transform_null_in=1에서 IN 실행을 수정했습니다. #81584 (Pavel Kruglov).
  • 기존 테이블을 읽을 때 default/materialize 표현식을 실행하는 동안 실험적이거나 의심스러운 타입을 검증하지 않습니다. #81618 (Pavel Kruglov).
  • TTL 표현식에 dict를 사용할 때 머지 중 발생하던 “Context has expired” 문제를 수정했습니다. #81690 (Azat Khuzhin).
  • CAST 함수의 단조성 문제를 수정했습니다. #81722 (zoomxi).
  • 스칼라 상관 서브쿼리 처리 과정에서 필수 컬럼을 읽지 못하는 문제를 수정했습니다. #81716를 해결합니다. #81805 (Dmitry Novik).
  • 이전 버전에서는 서버가 /js 요청에 대해 과도한 콘텐츠를 반환했습니다. 이로써 #61890이 해결되었습니다. #81895 (Alexey Milovidov).
  • 이전에는 MongoDB 테이블 엔진 정의의 host:port 인수에 경로 구성 요소가 포함될 수 있었지만, 이는 조용히 무시되었습니다. mongodb 통합은 이러한 테이블의 로드를 거부합니다. 이번 수정으로 MongoDB 엔진에 인수가 5개 있는 경우에는 이러한 테이블의 로드를 허용하고 경로 구성 요소를 무시하며, 인수에 지정된 데이터베이스 이름을 사용합니다. 참고: 이 수정은 새로 생성된 테이블이나 mongo 테이블 함수를 사용하는 쿼리에는 적용되지 않으며, 딕셔너리 소스와 이름이 지정된 컬렉션에도 적용되지 않습니다. #81942 (Vladimir Cherkasov).
  • 머지 중 예외가 발생할 경우 Aggregator에서 발생할 수 있는 크래시를 수정했습니다. #82022 (Nikita Taranov).
  • 쿼리에서 상수 별칭 컬럼만 사용하는 경우 필터 분석이 올바르게 동작하지 않던 문제를 수정했습니다. #79448. #82037 (Dmitry Novik).
  • 동일한 컬럼을 GROUP BY와 SET의 TTL에 사용할 때 발생하던 LOGICAL_ERROR와 그에 따른 충돌을 수정했습니다. #82054 (Pablo Marcos).
  • 시크릿 마스킹에서 S3 테이블 함수 인수 검증을 수정해 발생할 수 있는 LOGICAL_ERROR를 방지하고, #80620을 해결했습니다. #82056 (Vladimir Cherkasov).
  • Iceberg의 데이터 경합 문제를 수정했습니다. #82088 (Azat Khuzhin).
  • DatabaseReplicated::getClusterImpl를 수정했습니다. hosts의 첫 번째 요소(또는 여러 요소)의 id == DROPPED_MARK이고 동일한 세그먼트에 속한 다른 요소가 없는 경우, shards의 첫 번째 요소가 빈 벡터가 되어 std::out_of_range가 발생합니다. #82093 (Miсhael Stetsyuk).
  • arraySimilarity의 복사-붙여넣기 오류를 수정하고, UInt32 및 Int32 가중치 사용을 금지했습니다. 테스트와 문서도 업데이트했습니다. #82103 (Mikhail f. Shiryaev).
  • WHERE 조건에서 IndexSet과 함께 arrayJoin을 사용하는 쿼리에서 발생하던 Not found column 오류를 수정했습니다. #82113 (Nikolai Kochetov).
  • Glue catalog 통합의 버그를 수정했습니다. 이제 ClickHouse는 일부 서브컬럼에 Decimal이 포함된 중첩 데이터 타입을 가진 테이블도 읽을 수 있습니다. 예: map<string, decimal(9, 2)>. #81301을 수정했습니다. #82114 (alesapin).
  • https://github.com/ClickHouse/ClickHouse/pull/79051에서 25.5에 도입된 SummingMergeTree의 성능 저하 문제를 수정했습니다. #82130 (Pavel Kruglov).
  • URI를 통해 설정을 전달하면 마지막 값이 적용됩니다. #82137 (Sema Checherinda).
  • Iceberg에서 발생하던 “Context has expired” 문제를 수정했습니다. #82146 (Azat Khuzhin).
  • 메모리 압박 상황에서 서버가 원격 쿼리를 처리할 때 발생할 수 있는 교착 상태를 수정했습니다. #82160 (Kirill).
  • 큰 수에 적용할 때 발생하던 numericIndexedVectorPointwiseAdd, numericIndexedVectorPointwiseSubtract, numericIndexedVectorPointwiseMultiply, numericIndexedVectorPointwiseDivide 함수의 오버플로우를 수정했습니다. #82165 (Raufs Dunamalijevs).
  • Materialized Views에서 INSERT 쿼리를 놓치게 하던 테이블 종속성 버그를 수정했습니다. #82222 (Nikolay Degterinsky).
  • 제안 스레드와 메인 클라이언트 스레드 사이에서 발생할 수 있는 데이터 레이스를 수정했습니다. #82233 (Azat Khuzhin).
  • 이제 ClickHouse는 스키마 진화 후에도 Glue catalog의 Iceberg table을 읽을 수 있습니다. #81272 문제가 수정되었습니다. #82301 (alesapin).
  • 비동기 메트릭 설정 asynchronous_metrics_update_period_sasynchronous_heavy_metrics_update_period_s에 대한 유효성 검사 문제를 수정했습니다. #82310 (Bharat Nallan).
  • 여러 JOIN이 있는 쿼리에서 matcher를 해석할 때 발생하는 논리 오류를 수정하고, #81969을 해결했습니다. #82421 (Vladimir Cherkasov).
  • AWS ECS 토큰을 다시 로드할 수 있도록 만료 시간을 추가했습니다. #82422 (Konstantin Bogdanov).
  • CASE 함수에서 NULL 인수와 관련된 버그를 수정합니다. #82436 (Yarik Briukhovetskyi).
  • 클라이언트에서 데이터 레이스(data race)(전역 Context를 사용하지 않음)와 session_timezone 재정의 문제를 수정했습니다(이전에는 예를 들어 users.xml/클라이언트 옵션에서 session_timezone이 비어 있지 않은 값으로 설정되고, 쿼리 Context에서는 빈 값으로 설정된 경우 잘못되게도 users.xml의 값이 사용되었지만, 이제는 쿼리 Context가 항상 전역 Context보다 우선합니다). #82444 (Azat Khuzhin).
  • 외부 테이블 엔진에서 캐시된 버퍼의 경계 정렬을 비활성화하는 기능을 수정했습니다. 이 문제는 https://github.com/ClickHouse/ClickHouse/pull/81868에서 발생했습니다. #82493 (Kseniia Sumarokova).
  • 키-값 저장소가 타입 변환된 키와 조인될 때 발생하던 충돌을 수정했습니다. #82497 (Pervakov Grigorii).
  • logs/query_log에서 명명된 컬렉션 값이 숨겨지지 않던 문제를 수정했습니다. #82405를 해결합니다. #82510 (Kseniia Sumarokova).
  • 세션 종료 시 user_id가 간혹 비어 있을 수 있어 로깅 중 발생할 수 있는 충돌을 수정했습니다. #82513 (Bharat Nallan).
  • Time 파싱으로 인해 msan 문제가 발생할 수 있던 사례를 수정했습니다. 관련 수정: #82477. #82514 (Yarik Briukhovetskyi).
  • 서버 작업이 중단되지 않도록 threadpool_writer_pool_size를 0으로 설정하지 못하도록 했습니다. #82532 (Bharat Nallan).
  • 상관 컬럼에 대한 행 정책 표현식 분석 과정에서 발생하던 LOGICAL_ERROR를 수정했습니다. #82618 (Dmitry Novik).
  • enable_shared_storage_snapshot_in_query = 1일 때 mergeTreeProjection 테이블 함수에서 부모 메타데이터를 잘못 사용하던 문제를 수정했습니다. 이는 #82634에 대한 수정입니다. #82638 (Amos Bird).
  • 함수 trim{Left,Right,Both}는 이제 “FixedString(N)” 타입의 입력 문자열도 지원합니다. 예를 들어, 이제 SELECT trimBoth(toFixedString('abc', 3), 'ac')도 작동합니다. #82691 (Robert Schulze).
  • AzureBlobStorage에서 네이티브 복사 시 인증 메서드를 비교하는 과정에서 예외가 발생하면, 읽어서 복사하는 방식(즉, 네이티브가 아닌 복사)으로 폴백하도록 코드를 업데이트했습니다. #82693 (Smita Kulkarni).
  • 빈 요소가 있는 경우 groupArraySample/groupArrayLast의 역직렬화를 수정했습니다(입력이 비어 있으면 역직렬화 중 바이너리 데이터의 일부를 건너뛸 수 있었고, 이로 인해 데이터를 읽는 동안 손상이 발생하거나 TCP protocol에서 UNKNOWN_PACKET_FROM_SERVER 오류가 발생할 수 있었습니다). 이 문제는 숫자 및 날짜/시간 타입에는 영향을 주지 않습니다. #82763 (Pedro Ferreira).
  • Memory 테이블을 백업할 때 BACKUP_ENTRY_NOT_FOUND 오류로 인해 백업 복원이 실패하던 문제를 수정했습니다. #82791 (Julia Kartseva).
  • union/intersect/except_default_mode 재작성 과정의 예외 안전성 문제를 수정했습니다. #82664를 닫습니다. #82820 (Alexey Milovidov).
  • 비동기 테이블 로딩 작업의 개수를 추적합니다. 실행 중인 작업이 있으면 TransactionLog::removeOldEntries에서 tail_ptr를 업데이트하지 않습니다. #82824 (Tuan Pham Anh).
  • Iceberg의 데이터 레이스를 수정했습니다. #82841 (Azat Khuzhin).
  • use_skip_indexes_if_final_exact_mode 최적화 설정은 MergeTree 엔진 설정 / 데이터 분포에 따라 관련 후보 범위를 선택하지 못할 수 있었는데, 이 문제가 이제 해결되었습니다. #82879 (Shankar Iyer).
  • 유형이 SCRAM_SHA256_PASSWORD인 AST에서 파싱할 때 인증 데이터의 salt를 설정합니다. #82888 (Tuan Pham Anh).
  • 캐싱이 없는 Database 구현을 사용하는 경우, 컬럼이 반환된 뒤 해당 테이블의 메타데이터가 삭제되고 참조가 무효화됩니다. #82939 (buyval01).
  • storage Merge를 사용하는 테이블이 포함된 JOIN 표현식이 있는 쿼리에서 필터 수정이 올바르게 처리되지 않던 문제를 해결했습니다. #82092를 수정했습니다. #82950 (Dmitry Novik).
  • QueryMetricLog의 LOGICAL_ERROR 수정: 뮤텍스는 NULL이 될 수 없습니다. #82979 (Pablo Marcos).
  • 가변 길이 서식 지정자(예: %M)와 함께 서식 지정자 %f를 사용할 때 함수 formatDateTime의 출력이 잘못되던 문제를 수정했습니다. #83020 (Robert Schulze).
  • 보조 쿼리가 VIEW에서 항상 모든 컬럼을 읽는 경우, 활성화된 분석기에서 발생하던 성능 저하를 수정했습니다. #81718. #83036 (Dmitry Novik).
  • 읽기 전용 디스크에서 백업을 복원할 때 표시되는 오해의 소지가 있는 오류 메시지를 수정했습니다. #83051 (Julia Kartseva).
  • 의존성이 없는 테이블을 생성할 때는 순환 의존성을 검사하지 않도록 했습니다. 이로써 https://github.com/ClickHouse/ClickHouse/pull/65405에서 도입된, 수천 개의 테이블을 생성하는 사용 사례에서의 성능 저하를 해결합니다. #83077 (Pavel Kruglov).
  • 테이블로 음수 Time 값을 암시적으로 읽어오는 문제를 수정하고, 문서가 혼동을 주지 않도록 개선했습니다. #83091 (Yarik Briukhovetskyi).
  • lowCardinalityKeys 함수에서 공유 딕셔너리의 무관한 파트를 사용하지 않도록 수정했습니다. #83118 (Alexey Milovidov).
  • Materialized View에서 서브컬럼 사용 시 발생하던 회귀 문제가 수정되었습니다. 이 변경으로 다음 문제가 해결됩니다: #82784. #83221 (Nikita Mikhaylov).
  • 잘못된 INSERT 후 연결이 끊어진 상태로 남아 클라이언트가 충돌하던 문제를 수정했습니다. #83253 (Azat Khuzhin).
  • 빈 컬럼이 포함된 블록의 크기를 계산할 때 발생하던 충돌을 수정했습니다. #83271 (Raúl Marín).
  • UNION의 Variant 유형에서 발생할 수 있는 비정상 종료 문제를 수정했습니다. #83295 (Pavel Kruglov).
  • 지원되지 않는 SYSTEM 쿼리로 인해 clickhouse-local에서 발생하던 LOGICAL_ERROR를 수정했습니다. #83333 (Surya Kant Ranjan).
  • S3 클라이언트의 no_sign_request를 수정했습니다. 이를 사용하면 S3 요청에 명시적으로 서명하지 않도록 할 수 있습니다. 또한 엔드포인트 기반 설정을 사용해 특정 엔드포인트에 대해서도 정의할 수 있습니다. #83379 (Antonio Andelic).
  • CPU 스케줄링이 활성화된 상태에서 부하가 있는 환경에서 실행될 때, 설정 ‘max_threads=1’이 적용된 쿼리에서 발생할 수 있는 크래시를 수정합니다. #83387 (Fan Ziqi).
  • CTE 정의가 같은 이름을 가진 다른 테이블 표현식을 참조할 때 발생하는 TOO_DEEP_SUBQUERIES 예외를 수정했습니다. #83413 (Dmitry Novik).
  • REVOKE S3 ON system.* 실행 시 *.*에 대한 S3 권한까지 취소되던 잘못된 동작을 수정했습니다. 이로써 #83417이 해결되었습니다. #83420 (pufit).
  • 쿼리 간에 async_read_counters를 공유하지 않도록 수정했습니다. #83423 (Azat Khuzhin).
  • 서브쿼리에 FINAL이 포함되어 있으면 병렬 레플리카를 비활성화합니다. #83455 (zoomxi).
  • 설정 role_cache_expiration_time_seconds 구성에서 발생하던 경미한 정수 오버플로우를 해결했습니다(이슈 #83374). #83461 (wushap).
  • https://github.com/ClickHouse/ClickHouse/pull/79963에서 도입된 버그를 수정했습니다. definer가 지정된 MV에 삽입할 때는 권한 검사에 definer의 권한 부여를 사용해야 합니다. 이로써 #79951도 해결됩니다. #83502 (pufit).
  • Iceberg 배열 요소와 Iceberg 맵 값, 그리고 그 안에 중첩된 모든 하위 필드에 대한 경계 기반 파일 프루닝을 비활성화했습니다. #83520 (Daniil Ivanik).
  • 임시 데이터 저장소로 사용할 때 발생할 수 있는 「파일 캐시가 초기화되지 않음」 오류를 수정했습니다. #83539 (Bharat Nallan).
  • Keeper 수정: 세션 종료 시 ephemeral 노드가 삭제될 때 전체 watch 개수가 올바르게 업데이트되도록 했습니다. #83583 (Antonio Andelic).
  • max_untracked_memory 관련 잘못된 메모리 처리를 수정합니다. #83607 (Azat Khuzhin).
  • UNION ALL을 사용하는 INSERT SELECT는 드문 경우 널 포인터 역참조를 일으킬 수 있었습니다. 이로써 #83618이 해결되었습니다. #83643 (Alexey Milovidov).
  • 논리적 오류를 일으킬 수 있으므로 max_insert_block_size에 0 값을 허용하지 않도록 했습니다. #83688 (Bharat Nallan).
  • block_size_bytes=0일 때 estimateCompressionRatio()에서 발생하는 무한 루프를 수정했습니다. #83704 (Azat Khuzhin).
  • IndexUncompressedCacheBytes/IndexUncompressedCacheCells/IndexMarkCacheBytes/IndexMarkCacheFiles 메트릭을 수정했습니다(이전에는 Cache 접두사 없이 메트릭에 포함되어 있었습니다). #83730 (Azat Khuzhin).
  • BackgroundSchedulePool 종료 중 발생할 수 있는 비정상 종료(작업에서 스레드를 조인하는 과정으로 인해 발생)와 단위 테스트에서의 멈춤 현상을 수정했습니다. #83769 (Azat Khuzhin).
  • 이름 충돌 시 새 분석기가 WITH 절에서 외부 별칭을 참조할 수 있도록 하는 하위 호환성 설정을 도입했습니다. #82700을 수정했습니다. #83797 (Dmitry Novik).
  • 라이브러리 브리지 정리 중 Context를 재귀적으로 잠그면서 종료 시 발생하던 데드락을 수정했습니다. #83824 (Azat Khuzhin).

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

  • ClickHouse 렉서를 위한 최소 C 라이브러리(10 KB)를 빌드합니다. 이는 #80977에 필요합니다. #81347 (Alexey Milovidov). standalone 렉서용 테스트를 추가하고 테스트 태그 fasttest-only를 추가합니다. #82472 (Yakov Olkhovskiy).
  • Nix submodule 입력에 대한 check를 추가합니다. #81691 (Konstantin Bogdanov).
  • localhost에서 통합 테스트를 실행할 때 발생할 수 있는 여러 문제를 수정합니다. #82135 (Oleg Doronin).
  • Mac 및 FreeBSD에서 SymbolIndex를 컴파일합니다. (하지만 실제로는 ELF 시스템인 Linux와 FreeBSD에서만 동작합니다.) #82347 (Alexey Milovidov).
  • Azure SDK를 v1.15.0으로 업데이트했습니다. #82747 (Smita Kulkarni).
  • google-cloud-cpp의 storage 모듈을 빌드 시스템에 추가합니다. #82881 (Pablo Marcos).
  • Docker Official Library의 요구 사항에 맞게 clickhouse-server용 Dockerfile.ubuntu를 변경합니다. #83039 (Mikhail f. Shiryaev).
  • curl clickhouse.com에 builds를 업로드할 때 발생하는 문제를 수정하기 위한 #83158의 후속 작업입니다. #83463 (Mikhail f. Shiryaev).
  • clickhouse/clickhouse-server 및 공식 clickhouse 이미지에 busybox 바이너리와 설치 도구를 추가합니다. #83735 (Mikhail f. Shiryaev).
  • ClickHouse 서버 호스트를 지정할 수 있도록 CLICKHOUSE_HOST 환경 변수 지원을 추가해, 기존 CLICKHOUSE_USERCLICKHOUSE_PASSWORD 환경 변수와 일관성을 맞췄습니다. 이를 통해 클라이언트나 설정 파일을 직접 수정하지 않고도 더 쉽게 구성할 수 있습니다. #83659 (Doron David).

ClickHouse 릴리스 25.6, 2025-06-26

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

  • 이전에는 패턴이 이를 허용하더라도 함수 countMatches가 첫 번째 빈 일치에서 개수를 세는 것을 중단했습니다. 이 문제를 해결하기 위해 이제 countMatches는 빈 일치가 발생하면 한 문자 앞으로 이동한 뒤 계속 실행됩니다. 기존 동작을 유지하려는 사용자는 설정 count_matches_stop_at_empty_match를 활성화할 수 있습니다. #81676 (Elmi Ahmadov).
  • 사소한 변경: backup_threadsrestore_threads 서버 설정이 0이 될 수 없도록 했습니다. #80224 (Raúl Marín).
  • 사소한 변경: String에 대한 bitNot가 내부 메모리 표현에서 널 종료 문자열을 반환하도록 수정했습니다. 이는 사용자에게 보이는 동작에는 영향을 주지 않지만, 작성자가 이 변경 사항을 강조하고자 했습니다. #80791 (Azat Khuzhin).

새로운 기능

  • 새로운 데이터 타입 Time ([H]HH:MM:SS) 및 Time64 ([H]HH:MM:SS[.fractional])와 기본 CAST 함수, 그리고 다른 데이터 타입과 상호 운용하기 위한 함수가 추가되었습니다. 기존 함수 toTime와의 호환성을 위한 설정도 추가되었습니다. 현재는 기존 동작을 유지하기 위해 use_legacy_to_time 설정이 적용됩니다. #81217 (Yarik Briukhovetskyi). Time/Time64 간 비교를 지원합니다. #80327 (Yarik Briukhovetskyi).
  • 새로운 CLI 도구 chdig - ClickHouse의 일부인, ClickHouse용 TUI interface(top과 유사). #79666 (Azat Khuzhin).
  • 테이블 메타데이터 파일을 저장할 디스크를 지정하는 disk 설정이 AtomicOrdinary 데이터베이스 엔진에서 지원됩니다. #80546 (Tuan Pham Anh). 이를 통해 외부 소스의 데이터베이스를 ATTACH할 수 있습니다.
  • 새로운 MergeTree 유형인 CoalescingMergeTree입니다. 이 엔진은 백그라운드 머지 중에 NULL이 아닌 첫 번째 값을 선택합니다. 이로써 #78869가 해결됩니다. #79344 (scanhex12).
  • WKB를 읽는 함수를 지원합니다(“Well-Known Binary”는 GIS 애플리케이션에서 사용되는 다양한 Geometry 타입의 바이너리 인코딩 포맷입니다). #43941을 참조하십시오. #80139 (scanhex12).
  • 워크로드용 쿼리 슬롯 스케줄링이 추가되었습니다. 자세한 내용은 워크로드 스케줄링을 참조하십시오. #78415 (Sergei Trifonov).
  • timeSeries* 도우미 함수로 시계열 데이터를 다룰 때 일부 시나리오를 더 빠르게 처리할 수 있습니다: - 지정된 시작 timestamp, 종료 timestamp, 간격에 맞춰 데이터를 시간 그리드로 다시 샘플링 - PromQL과 유사한 delta, rate, idelta, irate를 계산. #80590 (Alexander Gololobov).
  • 맵 값으로 필터링할 수 있는 mapContainsValuesLike/mapContainsValues/mapExtractValuesLike 함수를 추가하고, 블룸 필터 기반 인덱스도 이를 지원합니다. #78171 (UnamedRus).
  • 이제 설정 제약 조건에 허용되지 않는 값의 집합을 지정할 수 있습니다. #78499 (Bharat Nallan).
  • 단일 쿼리의 모든 서브쿼리에서 동일한 스토리지 스냅샷을 공유할 수 있도록 설정 enable_shared_storage_snapshot_in_query가 추가되었습니다. 이를 통해 하나의 쿼리에서 동일한 테이블이 여러 번 참조되더라도 일관된 읽기가 보장됩니다. #79471 (Amos Bird).
  • ParquetJSON 컬럼을 쓰고, Parquet에서 JSON 컬럼을 직접 읽을 수 있도록 지원합니다. #79649 (Nihal Z. Miaji).
  • pointInPolygonMultiPolygon 지원이 추가되었습니다. #79773 (Nihal Z. Miaji).
  • 로컬 파일 시스템에 마운트된 Delta 테이블을 deltaLakeLocal 테이블 함수로 쿼리할 수 있도록 지원을 추가했습니다. #79781 (roykim98).
  • String에서 DateTime으로 cast할 때 사용할 파싱 모드를 선택할 수 있는 새로운 설정 cast_string_to_date_time_mode를 추가했습니다. #80210 (Pavel Kruglov). 예를 들어, 이를 best effort 모드로 설정할 수 있습니다.
  • Bitcoin의 Bech 알고리즘을 처리하기 위한 bech32Encodebech32Decode 함수를 추가했습니다(이슈 #40381). #80239 (George Larionov).
  • MergeTree 파트 이름을 분석하기 위한 SQL 함수를 추가했습니다. #80573 (Mikhail Artemenko).
  • 새 가상 컬럼 _disk_name``을 도입해, 쿼리 대상으로 선택된 파트를 해당 파트가 저장된 디스크를 기준으로 필터링할 수 있게 했습니다. #80650 (tanner-bruce).
  • 내장 웹 도구 목록을 보여주는 랜딩 페이지를 추가했습니다. 브라우저와 유사한 user agent로 요청하면 이 페이지가 열립니다. #81129 (Alexey Milovidov).
  • 함수 arrayFirst, arrayFirstIndex, arrayLast, arrayLastIndex는 필터 표현식에서 반환된 NULL 값을 제외합니다. 이전 버전에서는 널 허용 필터 결과를 지원하지 않았습니다. #81113을 수정했습니다. #81197 (Lennard Eijsackers).
  • 이제 USE name 대신 USE DATABASE name 구문을 사용할 수 있습니다. #81307 (Yarik Briukhovetskyi).
  • 사용 가능한 코덱을 확인할 수 있는 새로운 시스템 테이블(system table) system.codecs가 추가되었습니다. (이슈 #81525). #81600 (Jimmy Aguilar Mena).
  • laglead 윈도우 함수를 지원합니다. #9887를 해결합니다. #82108 (Dmitry Novik).
  • 함수 tokens가 이제 로그에 적합한 새 토크나이저 split을 지원합니다. #80195 (Robert Schulze).
  • clickhouse-local--database 인수 지원이 추가되었습니다. 이전에 생성한 데이터베이스로 전환할 수 있습니다. 이로써 #44115가 해결되었습니다. #81465 (Alexey Milovidov).

실험적 기능

  • ClickHouse Keeper를 사용해 Kafka2에 Kafka 리밸런싱과 유사한 로직을 구현했습니다. 각 레플리카는 두 가지 유형의 파티션 잠금, 즉 영구 잠금과 임시 잠금을 지원합니다. 레플리카는 가능한 한 영구 잠금을 오래 유지하려고 합니다. 어느 시점에서든 한 레플리카가 보유하는 영구 잠금 수는 all_topic_partitions / active_replicas_count를 넘지 않습니다(all_topic_partitions는 전체 파티션 수, active_replicas_count는 활성 레플리카 수). 이를 초과하면 레플리카는 일부 파티션을 해제합니다. 일부 파티션은 레플리카가 임시로 보유합니다. 한 레플리카의 임시 잠금 최대 수는 다른 레플리카도 일부 파티션을 영구 잠금으로 가져갈 수 있도록 동적으로 변경됩니다. 임시 잠금을 갱신할 때 레플리카는 임시 잠금을 모두 해제한 뒤 다시 일부를 획득하려고 시도합니다. #78726 (Daria Fomina).
  • 실험적 전문 검색 인덱스가 개선되었습니다. 이제 명시적 매개변수를 key-value 쌍으로 지원합니다. 현재 지원되는 매개변수는 필수 tokenizer와 선택 사항인 max_rows_per_postings_list, ngram_size입니다. #80262 (Elmi Ahmadov).
  • 이전에는 세그먼트 ID를 디스크의 .gin_sid 파일을 읽고 쓰면서 즉시 갱신했기 때문에 전문 검색 인덱스에서 packed 저장소를 지원하지 않았습니다. packed 저장소에서는 커밋되지 않은 파일에서 값을 읽을 수 없어 문제가 발생했습니다. 이제는 지원됩니다. #80852 (Elmi Ahmadov).
  • gin 유형의 실험적 인덱스(PostgreSQL 해커들의 내부 농담이라 개인적으로는 마음에 들지 않는 이름)는 text로 이름이 변경되었습니다. 기존 gin 유형 인덱스는 계속 로드할 수 있지만, 검색에 사용하려고 하면 예외를 발생시키며 대신 text 인덱스를 사용하라고 안내합니다. #80855 (Robert Schulze).

성능 개선

  • 여러 PROJECTION을 part 수준 필터링에 사용할 수 있도록 다중 PROJECTION 필터링 지원을 활성화했습니다. 이를 통해 #55525를 해결합니다. 이는 #78429에 이은 projection 인덱스 구현의 두 번째 단계입니다. #80343 (Amos Bird).
  • 기본적으로 파일 시스템 캐시에서 SLRU 캐시 정책을 사용하도록 변경했습니다. #75072 (Kseniia Sumarokova).
  • 쿼리 파이프라인의 Resize 단계에서 발생하는 경합을 제거했습니다. #77562 (Zhiguo Zhou).
  • 네트워크 connection에 연결된 단일 스레드가 아니라 파이프라인 스레드에서 블록의 압축/압축 해제와 직렬화/역직렬화를 오프로드해 처리하는 옵션이 도입되었습니다. 이 옵션은 enable_parallel_blocks_marshalling 설정으로 제어됩니다. initiator와 원격 노드 간에 대량의 데이터를 전송하는 분산 쿼리의 속도를 높일 것으로 예상됩니다. #78694 (Nikita Taranov).
  • 모든 블룸 필터 타입의 성능이 개선되었습니다. OpenHouse 컨퍼런스 영상 #79800 (Delyan Kratunov).
  • 집합 중 하나가 비어 있을 때 UniqExactSet::merge에 빠른 경로를 추가했습니다. 또한 이제 LHS 집합이 2레벨이고 RHS가 단일 레벨인 경우, RHS를 2레벨로 변환하지 않습니다. #79971 (Nikita Taranov).
  • 2단계 해시 테이블을 사용할 때 메모리 재사용 효율을 높이고 페이지 폴트를 줄였습니다. 이를 통해 GROUP BY 성능을 향상했습니다. #80245 (Jiebin Sun).
  • 쿼리 조건 캐시의 불필요한 업데이트를 줄이고 잠금 경합을 완화했습니다. #80247 (Jiebin Sun).
  • concatenateBlocks에 대한 사소한 최적화입니다. 병렬 해시 조인에도 도움이 될 가능성이 높습니다. #80328 (李扬).
  • 기본 키(primary key) 범위에서 mark 범위를 선택할 때 기본 키가 함수로 감싸져 있으면 이진 검색을 사용할 수 없습니다. 이 PR은 이러한 제약을 개선합니다. 기본 키가 항상 단조인 함수 체인으로 감싸져 있거나 RPN에 항상 참인 요소가 포함된 경우에도 이진 검색을 적용할 수 있습니다. #45536를 해결합니다. #80597 (zoomxi).
  • Kafka 엔진의 종료 속도를 개선했습니다(여러 Kafka 테이블이 있는 경우 발생하던 추가 3초 지연 제거). #80796 (Azat Khuzhin).
  • Async inserts: 메모리 사용량을 줄이고 삽입 쿼리 성능을 개선합니다. #80972 (Raúl Marín).
  • 로그 테이블이 비활성화된 경우 프로세서 프로파일링을 수행하지 않습니다. #81256 (Raúl Marín). 그 결과 매우 짧은 쿼리의 속도가 향상됩니다.
  • 소스가 요청된 값과 정확히 일치할 때 toFixedString 처리 속도를 개선합니다. #81257 (Raúl Marín).
  • 사용자에게 적용된 제한이 없으면 quota 값을 처리하지 않습니다. #81549 (Raúl Marín). 이로 인해 매우 짧은 쿼리가 더 빨라집니다.
  • 메모리 추적의 성능 회귀를 수정했습니다. #81694 (Michael Kolupaev).
  • 분산 쿼리의 세그먼트 분할 키 최적화가 개선되었습니다. #78452 (fhw12345).
  • 병렬 레플리카: 모든 읽기 작업이 다른 레플리카에 할당된 경우, 사용되지 않는 느린 레플리카를 기다리지 않도록 개선했습니다. #80199 (Igor Nikonov).
  • 병렬 레플리카는 별도의 연결 타임아웃을 사용합니다. parallel_replicas_connect_timeout_ms 설정을 참조하세요. 이전에는 connect_timeout_with_failover_ms/connect_timeout_with_failover_secure_ms 설정이 병렬 레플리카 쿼리의 연결 타임아웃 값으로 사용되었으며, 기본값은 1초였습니다. #80421 (Igor Nikonov).
  • 저널링 파일 시스템에서는 mkdir이 디스크에 영구 저장되는 파일 시스템 저널에 기록됩니다. 디스크가 느리면 이 작업에 시간이 오래 걸릴 수 있습니다. 이를 reserve lock 범위 밖으로 옮겼습니다. #81371 (Kseniia Sumarokova).
  • Iceberg manifest 파일 읽기를 첫 읽기 쿼리가 실행될 때까지 미룹니다. #81619 (Daniil Ivanik).
  • 해당하는 경우 GLOBAL [NOT] IN 프레디케이트를 PREWHERE 절로 이동하도록 허용합니다. #79996 (Eduard Karacharov).

개선 사항

  • EXPLAIN SYNTAX는 이제 새로운 분석기를 사용합니다. 쿼리 트리에서 생성된 AST를 반환합니다. 쿼리 트리를 AST로 변환하기 전에 실행할 패스 수를 제어하는 query_tree_passes 옵션이 추가되었습니다. #74536 (Vladimir Cherkasov).
  • Native 형식에서 Dynamic 및 JSON용 평탄화된 serialization을 구현하여, Dynamic의 shared variant나 JSON의 shared data 같은 특수 구조 없이도 Dynamic 및 JSON 데이터를 serialize/deserialize할 수 있게 했습니다. 이 serialization은 output_format_native_use_flattened_dynamic_and_json_serialization을 설정해 활성화할 수 있습니다. 이 serialization을 사용하면 다양한 언어의 클라이언트에서 TCP protocol의 Dynamic 및 JSON 지원을 더 쉽게 구현할 수 있습니다. #80499 (Pavel Kruglov).
  • AuthenticationRequired 오류 발생 후 S3 자격 증명을 갱신합니다. #77353 (Vitaly Baranov).
  • system.asynchronous_metrics에 딕셔너리 메트릭이 추가되었습니다. - DictionaryMaxUpdateDelay - 딕셔너리 업데이트의 최대 지연 시간(초) - DictionaryTotalFailedUpdates - 모든 딕셔너리에서 마지막 성공적 로딩 이후 발생한 오류 수 #78175 (Vlad).
  • 손상된 테이블을 보관하기 위해 생성되었을 가능성이 있는 데이터베이스에 대한 경고를 추가했습니다. #78841 (János Benjamin Antal).
  • S3Queue, AzureQueue 엔진에 _time 가상 컬럼이 추가되었습니다. #78926 (Anton Ivashkin).
  • CPU 과부하 시 연결 종료를 제어하는 설정을 핫 리로드 가능하도록 개선했습니다. #79052 (Alexey Katsman).
  • Azure blob storage의 일반 디스크에 대해 system.tables에 표시되는 데이터 경로에 컨테이너 접두사를 추가하여, S3 및 GCP와 일관되게 표시되도록 합니다. #79241 (Julia Kartseva).
  • 이제 clickhouse-client와 local에서는 param_<name>(밑줄)뿐 아니라 param-<name>(대시) 형식의 쿼리 매개변수도 허용합니다. 이 변경으로 #63093가 해결되었습니다. #79429 (Engel Danila).
  • 체크섬이 활성화된 상태에서 로컬에서 원격 S3로 데이터를 복사할 때 발생하는 대역폭 차감에 관한 상세 경고 메시지. #79464 (VicoWu).
  • 이전에는 input_format_parquet_max_block_size = 0(잘못된 값)으로 설정하면 ClickHouse가 멈췄습니다. 이제 이 동작이 수정되었습니다. 이로써 #79394가 해결되었습니다. #79601 (abashkeev).
  • startup_scriptsthrow_on_error 설정이 추가되었습니다. throw_on_error가 true이면 모든 쿼리가 성공적으로 완료되지 않는 한 서버가 시작되지 않습니다. 기본적으로 throw_on_error는 false이므로 이전 동작이 유지됩니다. #79732 (Aleksandr Musorin).
  • 모든 유형의 http_handlers에서 http_response_headers를 추가할 수 있도록 했습니다. #79975 (Andrey Zvonov).
  • 함수 reverse가 이제 Tuple 데이터 타입을 지원합니다. #80053를 해결했습니다. #80083 (flynn).
  • #75817 해결: system.zookeeper 테이블에서 auxiliary_zookeepers 데이터를 가져올 수 있도록 지원합니다. #80146 (Nikolay Govorov).
  • 서버의 TCP 소켓 관련 비동기 메트릭을 추가했습니다. 이를 통해 관측성이 향상됩니다. #80187을 해결했습니다. #80188 (Alexey Milovidov).
  • SimpleAggregateFunction에서 anyLast_respect_nullsany_respect_nulls를 지원합니다. #80219 (Diskein).
  • 복제된 데이터베이스에서 불필요한 adjustCreateQueryForBackup 호출을 제거했습니다. #80282 (Vitaly Baranov).
  • clickhouse-local에서 등호 없이도 추가 옵션(-- 뒤에 오는 -- --config.value='abc'와 같은 형식)을 허용합니다. #80292를 해결합니다. #80293 (Alexey Milovidov).
  • SHOW ... LIKE 쿼리에서 메타문자가 강조 표시되도록 했습니다. 이로써 #80275 문제가 해결되었습니다. #80297 (Alexey Milovidov).
  • clickhouse-local에서 SQL UDF를 영구적으로 유지할 수 있게 했습니다. 이전에 생성된 함수는 시작 시 로드됩니다. 이로써 #80085가 해결됩니다. #80300 (Alexey Milovidov).
  • 예비 DISTINCT 단계에 대한 EXPLAIN 계획 설명을 수정했습니다. #80330 (UnamedRus).
  • ODBC/JDBC에서 이름이 지정된 컬렉션을 사용할 수 있게 했습니다. #80334 (Andrey Zvonov).
  • 읽기 전용(readonly) 및 손상된 디스크 수를 위한 메트릭입니다. DiskLocalCheckThread가 시작되면 이를 알리는 로그가 기록됩니다. #80391 (VicoWu).
  • 프로젝션이 있는 s3_plain_rewritable 스토리지 지원이 추가되었습니다. 이전 버전에서는 프로젝션을 참조하는 S3 메타데이터 객체가 이동될 때 업데이트되지 않았습니다. #70258를 해결했습니다. #80393 (Sav).
  • SYSTEM UNFREEZE 명령은 readonly 및 write-once 디스크에서 파트를 찾으려고 시도하지 않습니다. 이로써 #80430이 해결되었습니다. #80432 (Alexey Milovidov).
  • 병합된 파트 관련 메시지의 로그 수준을 낮췄습니다. #80476 (Hans Krutzer).
  • Iceberg 테이블에 대한 파티션 프루닝의 기본 동작을 변경했습니다. #80583 (Melvyn Peignon).
  • 인덱스 검색 알고리즘의 관측성을 위해 두 개의 새로운 ProfileEvents인 IndexBinarySearchAlgorithmIndexGenericExclusionSearchAlgorithm을 추가했습니다. #80679 (Pablo Marcos).
  • 오래된 커널에서 MADV_POPULATE_WRITE를 지원하지 않더라도 logs에 경고를 남기지 않도록 했습니다(로그 오염 방지). #80704 (Robert Schulze).
  • TTL 표현식에서 Date32DateTime64를 지원하도록 개선되었습니다. #80710 (Andrey Zvonov).
  • max_merge_delayed_streams_for_parallel_write의 호환성 관련 값을 조정했습니다. #80760 (Azat Khuzhin).
  • 크래시를 수정했습니다. 소멸자에서 임시 파일을 제거하려고 시도하는 중 예외가 발생하면(이 파일은 디스크에 임시 데이터를 스필하는 데 사용됩니다) 프로그램이 종료될 수 있던 문제입니다. #80776 (Alexey Milovidov).
  • SYSTEM SYNC REPLICAIF EXISTS 수정자가 추가되었습니다. #80810 (Raúl Marín).
  • 「Having zero bytes, but read range is not finished…」 관련 예외 메시지를 확장하고, system.filesystem_cache에 finished_download_time 컬럼을 추가했습니다. #80849 (Kseniia Sumarokova).
  • EXPLAIN을 indexes = 1과 함께 사용할 때 출력에 검색 알고리즘 섹션이 추가됩니다. 그러면 “이진 검색” 또는 “일반 제외 검색”이 표시됩니다. #80881 (Pablo Marcos).
  • 2024년 초에는 새 분석기가 기본적으로 활성화되어 있지 않았기 때문에 MySQL handler에서 prefer_column_name_to_alias가 true로 하드코딩되어 있었습니다. 이제는 이 하드코딩을 제거할 수 있습니다. #80916 (Yarik Briukhovetskyi).
  • 이제 system.iceberg_history에서 glue 또는 iceberg rest와 같은 catalog 데이터베이스의 이력을 표시합니다. 또한 일관성을 위해 system.iceberg_historytable_namedatabase_name 컬럼 이름이 각각 tabledatabase로 변경되었습니다. #80975 (alesapin).
  • merge 테이블 함수에서 읽기 전용 모드를 사용할 수 있도록 하여, 이를 사용할 때 CREATE TEMPORARY TABLE 권한이 필요하지 않게 했습니다. #80981 (Miсhael Stetsyuk).
  • 인메모리 캐시에 대한 내부 검사가 개선되었습니다(system.asynchronouse_metrics의 불완전한 정보 대신 system.metrics에 캐시 정보를 노출). dashboard.html에 인메모리 캐시 크기(바이트 단위)를 추가했습니다. VectorSimilarityIndexCacheSize/IcebergMetadataFilesCacheSizeVectorSimilarityIndexCacheBytes/IcebergMetadataFilesCacheBytes로 이름이 변경되었습니다. #81023 (Azat Khuzhin).
  • system.rocksdb를 읽을 때 RocksDB 테이블을 포함할 수 없는 엔진을 사용하는 데이터베이스는 무시합니다. #81083 (Pervakov Grigorii).
  • clickhouse-local 설정 파일에서 filesystem_cachesnamed_collections를 허용합니다. #81105 (Alexey Milovidov).
  • INSERT 쿼리에서 PARTITION BY 구문 강조 표시를 수정했습니다. 이전 버전에서는 PARTITION BY가 키워드로 강조되지 않았습니다. #81106 (Alexey Milovidov).
  • Web UI의 소규모 개선 2가지: - CREATE, INSERT처럼 결과 출력이 없는 쿼리를 올바르게 처리합니다(최근까지는 이런 쿼리를 실행하면 스피너가 무한히 표시되었습니다); - 테이블을 더블클릭하면 맨 위로 스크롤합니다. #81131 (Alexey Milovidov).
  • MemoryResidentWithoutPageCache 메트릭은 사용자 공간 페이지 캐시를 제외한 서버 프로세스의 물리 메모리 사용량을 바이트 단위로 제공합니다. 이는 사용자 공간 페이지 캐시를 사용할 때 실제 메모리 사용량을 더 정확하게 파악하는 데 도움이 됩니다. 사용자 공간 페이지 캐시가 비활성화되면 이 값은 MemoryResident와 같습니다. #81233 (Jayme Bird).
  • 클라이언트, 로컬 서버, Keeper 클라이언트 및 disks app에서 수동으로 기록된 예외를 이미 기록된 것으로 표시해, 중복 기록되지 않도록 합니다. #81271 (Miсhael Stetsyuk).
  • 이제 use_skip_indexes_if_finaluse_skip_indexes_if_final_exact_mode 설정의 기본값은 True입니다. 이제 FINAL 절이 있는 쿼리는 스킵 인덱스(적용 가능한 경우)를 사용해 그래뉼을 선별하고, 일치하는 기본 키(primary key) 범위에 해당하는 추가 그래뉼도 읽습니다. 근사치 또는 부정확한 결과를 반환하던 이전 동작이 필요한 경우에는 충분히 검토한 후 use_skip_indexes_if_final_exact_mode를 FALSE로 설정할 수 있습니다. #81331 (Shankar Iyer).
  • web UI에 여러 개의 쿼리가 있으면 커서가 위치한 쿼리가 실행됩니다. #80977의 후속 작업입니다. #81354 (Alexey Milovidov).
  • 이 PR은 변환 함수의 단조성 검사에서 is_strict 구현과 관련된 문제를 해결합니다. 현재 toFloat64(UInt32)toDate(UInt8)와 같은 일부 변환 함수는 is_strict가 true여야 하지만, 잘못하여 false를 반환하고 있습니다. #81359 (zoomxi).
  • 연속된 범위에 KeyCondition이 일치하는지 확인할 때, 키가 비엄격 함수 체인으로 감싸져 있으면 Constraint::POINTConstraint::RANGE로 변환해야 할 수 있습니다. 예를 들어 toDate(event_time) = '2025-06-03'event_time에 대해 [‘2025-06-03 00:00:00’, ‘2025-06-04 00:00:00’) 범위를 의미합니다. 이 PR은 이러한 동작을 수정합니다. #81400 (zoomxi).
  • clickhouse/ch 별칭은 --host 또는 --port가 지정되면 clickhouse-local 대신 clickhouse-client를 호출합니다. #79422의 후속 작업입니다. #65252를 닫습니다. #81509 (Alexey Milovidov).
  • 이제 Keeper 응답 시간 분포 데이터를 확보했으므로 메트릭 히스토그램 버킷을 조정할 수 있습니다. #81516 (Miсhael Stetsyuk).
  • 프로파일 이벤트 PageCacheReadBytes를 추가했습니다. #81742 (Kseniia Sumarokova).
  • 파일 시스템 캐시의 논리적 오류를 수정했습니다: “0바이트이지만 범위가 아직 완료되지 않음”. #81868 (Kseniia Sumarokova).

버그 수정(공식 안정 릴리스에서 사용자에게 나타나는 오동작)

  • SELECT EXCEPT 쿼리에서 매개변수화된 뷰 문제를 수정합니다. #49447를 해결합니다. #57380 (Nikolay Degterinsky).
  • 분석기: join에서 컬럼 타입 승격 후 컬럼 프로젝션 이름을 수정했습니다. #63345를 해결합니다. #63519 (Dmitry Novik).
  • analyzer_compatibility_join_using_top_level_identifier가 활성화된 경우, 컬럼 이름 충돌 시 발생하던 논리적 오류를 수정했습니다. #75676 (Vladimir Cherkasov).
  • allow_push_predicate_ast_for_distributed_subqueries가 활성화된 경우 푸시다운된 프레디케이트에서 CTE 사용이 올바르게 처리되도록 수정했습니다. #75647을 수정했습니다. #79672를 수정했습니다. #77316 (Dmitry Novik).
  • 지정된 레플리카가 존재하지 않아도 SYSTEM SYNC REPLICA LIGHTWEIGHT ‘foo’가 성공한 것으로 보고되던 문제를 수정했습니다. 이제 이 명령은 동기화를 시도하기 전에 Keeper에서 해당 레플리카의 존재 여부를 올바르게 확인합니다. #78405 (Jayme Bird).
  • 아주 제한적인 상황에서 ON CLUSTER 쿼리의 CONSTRAINT 섹션에 currentDatabase 함수가 사용될 때 발생하던 크래시를 수정했습니다. #78100를 해결합니다. #79070 (pufit).
  • 서버 간 쿼리에서 외부 역할이 전달되도록 수정했습니다. #79099 (Andrey Zvonov).
  • SingleValueDataGeneric에서 Field 대신 IColumn을 사용하도록 변경했습니다. 이를 통해 Dynamic/Variant/JSON 타입에서 argMax와 같은 일부 집계 함수의 잘못된 반환값을 수정합니다. #79166 (Pavel Kruglov).
  • Azure blob storage에 대해 use_native_copy 및 allow_azure_native_copy 설정 적용 문제를 수정하고, 자격 증명이 일치할 때만 네이티브 복사를 사용하도록 업데이트하여 #78964를 해결했습니다. #79561 (Smita Kulkarni).
  • 이 컬럼이 연관되어 있는지 확인하는 과정에서 발생하던, 컬럼의 알 수 없는 origin 범위 관련 논리 오류를 수정했습니다. #78183를 수정했습니다. #79451를 수정했습니다. #79727 (Dmitry Novik).
  • ColumnConst 및 분석기를 사용하는 grouping sets에서 발생하던 잘못된 결과를 수정했습니다. #79743 (Andrey Zvonov).
  • 로컬 레플리카가 오래된 상태일 때 분산 테이블을 읽으면 로컬 세그먼트 결과가 중복되는 문제를 수정했습니다. #79761 (Eduard Karacharov).
  • 음수 부호 비트를 가진 NaN의 정렬 순서를 수정했습니다. #79847 (Pervakov Grigorii).
  • 이제 GROUP BY ALL에서는 GROUPING 부분이 고려되지 않습니다. #79915 (Yarik Briukhovetskyi).
  • TopK / TopKWeighted 함수에서 상태 병합이 잘못되어, 용량이 소진되지 않았는데도 과도한 오류 값이 발생하던 문제를 수정했습니다. #79939 (Joel Höner).
  • azure_blob_storage 객체 스토리지에서 readonly 설정이 적용되도록 수정했습니다. #79954 (Julia Kartseva).
  • 백슬래시로 이스케이프한 문자를 사용해 match(column, '^…')를 사용할 때 발생하던 잘못된 쿼리 결과와 메모리 부족으로 인한 충돌을 수정했습니다. #79969 (filimonov).
  • 데이터 레이크용 Hive 파티셔닝 비활성화. https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937를 부분적으로 해결합니다. #80005 (Daniil Ivanik).
  • 람다 표현식이 포함된 스킵 인덱스가 적용되지 않던 문제를 수정했습니다. 인덱스 정의의 상위 수준 함수가 쿼리의 함수와 정확히 일치할 때 발생하던 경우를 수정했습니다. #80025 (Nikolai Kochetov).
  • 복제 로그에서 ATTACH_PART 명령을 실행하는 레플리카가 파트를 ATTACH할 때 메타데이터 버전을 수정했습니다. #80038 (Aleksei Filatov).
  • 실행형 사용자 정의 함수(eUDF)의 이름은 다른 함수와 달리 system.query_log 테이블의 used_functions 컬럼에 추가되지 않습니다. 이 PR에서는 요청에 eUDF가 사용된 경우 해당 eUDF 이름도 추가되도록 구현했습니다. #80073 (Kyamran).
  • LowCardinality(FixedString)의 Arrow 형식에서 발생하는 논리 오류를 수정했습니다. #80156 (Pavel Kruglov).
  • Merge 엔진에서 서브컬럼을 읽을 때 발생하던 문제를 수정했습니다. #80158 (Pavel Kruglov).
  • KeyCondition에서 숫자 타입 간 비교 관련 버그를 수정했습니다. #80207 (Yarik Briukhovetskyi).
  • 프로젝션이 있는 테이블에 lazy materialization이 적용될 때 발생하는 AMBIGUOUS_COLUMN_NAME 문제를 수정했습니다. #80251 (Igor Nikonov).
  • 암시적 프로젝션을 사용할 때 LIKE ‘ab_c%‘와 같은 문자열 prefix filter에 대한 잘못된 count 최적화를 수정했습니다. 이 변경으로 #80250 문제가 해결됩니다. #80261 (Amos Bird).
  • MongoDB 문서에서 중첩된 숫자 필드가 문자열로 잘못 직렬화되는 문제를 수정했습니다. MongoDB 문서의 최대 깊이 제한을 제거했습니다. #80289 (Kirill Nikiforov).
  • 복제된 데이터베이스의 RMT에 대한 메타데이터 검사를 완화합니다. #80296을 해결합니다. #80298 (Nikolay Degterinsky).
  • PostgreSQL 스토리지에서 DateTime 및 DateTime64의 텍스트 표현을 수정했습니다. #80301 (Yakov Olkhovskiy).
  • StripeLog 테이블에서 시간대를 포함한 DateTime을 허용합니다. 이로써 #44120이 해결되었습니다. #80304 (Alexey Milovidov).
  • 쿼리 계획 단계에서 행 수가 변경되는 경우, 비결정적 함수가 포함된 프레디케이트의 filter-push-down을 비활성화합니다. #40273를 수정했습니다. #80329 (Nikolai Kochetov).
  • 서브컬럼이 포함된 프로젝션에서 발생할 수 있는 논리 오류와 비정상 종료 문제를 수정했습니다. #80333 (Pavel Kruglov).
  • ON 표현식이 단순한 동등 비교가 아닌 경우, 논리적 JOIN sep의 filter-push-down 최적화로 인해 발생하는 NOT_FOUND_COLUMN_IN_BLOCK 오류를 수정했습니다. #79647, #77848을 수정했습니다. #80360 (Nikolai Kochetov).
  • 파티션된 테이블에서 역순으로 정렬된 키를 읽을 때 잘못된 결과가 반환되는 문제를 수정했습니다. 이 변경으로 #79987이 해결됩니다. #80448 (Amos Bird).
  • 널 허용 키가 있고 optimize_read_in_order가 활성화된 테이블에서 정렬이 잘못되던 문제를 수정했습니다. #80515 (Pervakov Grigorii).
  • SYSTEM STOP REPLICATED VIEW를 사용해 뷰를 일시 중지한 경우, 갱신 가능 구체화 뷰의 DROP 작업이 멈추는 문제가 수정되었습니다. #80543 (Michael Kolupaev).
  • 분산 쿼리에서 상수 튜플 사용 시 발생하는 ‘Cannot find column’ 문제를 수정했습니다. #80596 (Yakov Olkhovskiy).
  • join_use_nulls 사용 시 분산 테이블의 shardNum 함수를 수정했습니다. #80612 (János Benjamin Antal).
  • Merge 엔진에서 테이블 부분 집합에만 존재하는 컬럼을 읽을 때 잘못된 결과가 반환되던 문제를 수정했습니다. #80643 (Pavel Kruglov).
  • replxx에서 멈춤이 발생해 생길 수 있는 SSH 프로토콜 문제를 수정했습니다. #80688 (Azat Khuzhin).
  • 이제 iceberg_history 테이블의 타임스탬프가 올바르게 처리됩니다. #80711 (Melvyn Peignon).
  • 딕셔너리 등록 실패 시 발생할 수 있는 크래시를 수정했습니다(CREATE DICTIONARYCANNOT_SCHEDULE_TASK와 함께 실패하면 딕셔너리 레지스트리에 댕글링 포인터가 남을 수 있고, 이후 크래시로 이어질 수 있습니다). #80714 (Azat Khuzhin).
  • 객체 스토리지 테이블 함수에서 단일 요소 enum 글롭 패턴의 처리 문제를 수정했습니다. #80716 (Konstantin Bogdanov).
  • Tuple(Dynamic) 및 String 비교 함수의 반환 유형이 잘못되어 논리 오류가 발생하던 문제를 수정했습니다. #80728 (Pavel Kruglov).
  • Unity Catalog에 누락되어 있던 데이터 타입 timestamp_ntz 지원을 추가합니다. #79535, #79875를 수정합니다. #80740 (alesapin).
  • IN cte를 사용하는 분산 쿼리에서 THERE_IS_NO_COLUMN 오류를 수정했습니다. #75032를 해결합니다. #80757 (Nikolai Kochetov).
  • 외부 ORDER BY에서 파일 수가 과도하게 많아져 과도한 메모리 사용량으로 이어지던 문제를 수정했습니다. #80777 (Azat Khuzhin).
  • 이 PR로 #80742가 해결될 수 있습니다. #80783 (zoomxi).
  • get_member_id()가 NULL로부터 std::string을 생성하면서 발생하던 Kafka 충돌을 수정했습니다(브로커 연결에 실패한 경우에만 발생했을 가능성이 높습니다). #80793 (Azat Khuzhin).
  • Kafka engine를 종료하기 전에 consumer가 올바르게 종료될 때까지 대기하도록 수정했습니다(종료 후에도 활성 상태인 consumer는 다양한 디버그 assertion을 유발할 수 있으며, 테이블이 삭제되거나 분리된 뒤에도 백그라운드에서 brokers의 데이터를 읽을 수 있음). #80795 (Azat Khuzhin).
  • predicate-push-down 최적화로 인해 발생하는 NOT_FOUND_COLUMN_IN_BLOCK를 수정했습니다. #80443를 해결합니다. #80834 (Nikolai Kochetov).
  • JOIN에서 USING과 함께 테이블 함수를 사용할 때 별표(*) 매처를 해석하는 과정에서 발생하던 논리 오류를 수정했습니다. #80894 (Vladimir Cherkasov).
  • Iceberg 메타데이터 파일 캐시의 메모리 사용량 집계를 수정했습니다. #80904 (Azat Khuzhin).
  • 널 허용 파티션 키 사용 시 잘못된 파티셔닝 문제를 수정했습니다. #80913 (Pervakov Grigorii).
  • 원본 테이블이 initiator에 없을 때, 푸시다운된 프레디케이트가 있는 분산 쿼리(allow_push_predicate_ast_for_distributed_subqueries=1)에서 발생하던 Table does not exist 오류를 수정했습니다. #77281을 수정합니다. #80915 (Nikolai Kochetov).
  • 이름이 지정된 윈도우를 사용하는 중첩 함수의 논리 오류를 수정했습니다. #80926 (Pervakov Grigorii).
  • 널 허용 및 부동소수점 컬럼의 extremes 관련 문제를 수정했습니다. #80970 (Pervakov Grigorii).
  • system.tables를 쿼리할 때 발생할 수 있는 크래시를 수정했습니다(메모리 부족 상황에서 발생할 가능성이 높습니다). #80976 (Azat Khuzhin).
  • 파일 확장자에서 압축 방식이 추론되는 파일에 대해, TRUNCATE와 함께 사용할 때의 atomic rename 문제를 수정했습니다. #80979 (Pablo Marcos).
  • ErrorCodes::getName 문제를 수정했습니다. #81032 (RinChanNOW).
  • 사용자에게 모든 테이블에 대한 권한이 없을 때 Unity Catalog에서 테이블 목록을 볼 수 없던 버그를 수정했습니다. 이제 모든 테이블이 정상적으로 나열되며, 접근이 제한된 테이블을 읽으려고 하면 예외가 발생합니다. #81044 (alesapin).
  • 이제 ClickHouse는 SHOW TABLES 쿼리에서 데이터 레이크 카탈로그가 반환하는 오류 및 예기치 않은 응답을 무시합니다. #79725를 수정했습니다. #81046 (alesapin).
  • JSONExtract 및 JSON 타입 파싱에서 정수 값의 DateTime64 파싱 문제를 수정했습니다. #81050 (Pavel Kruglov).
  • 스키마 추론 캐시에 date_time_input_format 설정값을 반영합니다. #81052 (Pavel Kruglov).
  • 쿼리가 시작된 후 컬럼이 전송되기 전에 테이블이 삭제된 경우 INSERT 중 발생하던 크래시를 수정했습니다. #81053 (Azat Khuzhin).
  • quantileDeterministic에서 초기화되지 않은 값을 사용하는 문제를 수정했습니다. #81062 (Azat Khuzhin).
  • metadatastoragefromdisk 디스크 트랜잭션에서 하드링크 수 관리 문제를 수정했습니다. 테스트도 추가했습니다. #81066 (Sema Checherinda).
  • 사용자 정의 함수(UDF) 이름은 다른 함수와 달리 system.query_log 테이블에 기록되지 않습니다. 이 PR에서는 요청에서 UDF가 사용된 경우 두 컬럼 used_executable_user_defined_functions 또는 used_sql_user_defined_functions 중 하나에 UDF 이름이 추가되도록 구현했습니다. #81101 (Kyamran).
  • 텍스트 형식(JSON, Values, …)을 사용하고 Enum 필드가 생략된 경우, http protocol을 통한 삽입 시 발생하던 Too large size ... passed to allocator 오류 및 잠재적 크래시를 수정했습니다. #81145 (Anton Popov).
  • non-MT MV로 푸시되는 INSERT 블록의 희소 컬럼에서 발생하는 LOGICAL_ERROR를 수정했습니다. #81161 (Azat Khuzhin).
  • 교차 복제 환경에서 distributed_product_mode_local=local 사용 시 발생하던 Unknown table expression identifier 문제를 수정했습니다. #81162 (Nikolai Kochetov).
  • 필터링 후 Parquet 파일의 행 수가 잘못 캐시되던 문제를 수정했습니다. #81184 (Michael Kolupaev).
  • 상대 cache 경로를 사용할 때 fs cache의 max_size_to_total_space 설정 문제를 수정했습니다. #81237 (Kseniia Sumarokova).
  • Parquet 포맷으로 const 튜플 또는 맵을 출력할 때 clickhouse-local이 충돌하는 문제를 수정했습니다. #81249 (Michael Kolupaev).
  • 네트워크를 통해 수신된 배열 오프셋을 검증합니다. #81269 (Azat Khuzhin).
  • 빈 테이블을 조인하고 윈도우 함수를 사용하는 쿼리의 특정 예외 사례를 수정했습니다. 이 버그로 인해 병렬 스트림 수가 급증해 OOM이 발생합니다. #81299 (Alexander Gololobov).
  • 데이터 레이크 Cluster 함수(deltaLakeCluster, icebergCluster 등) 관련 수정 사항: (1) 기존 분석기와 함께 Cluster 함수를 사용할 때 DataLakeConfiguration에서 발생할 수 있는 segfault 문제 수정, (2) 중복된 데이터 레이크 메타데이터 업데이트(불필요한 객체 스토리지 요청) 제거, (3) 포맷이 명시적으로 지정되지 않았을 때 객체 스토리지에서 발생하던 불필요한 목록 조회를 수정(이는 비클러스터 데이터 레이크 엔진에는 이미 적용되어 있었음). #81300 (Kseniia Sumarokova).
  • force_restore_data 플래그로 손실된 Keeper 메타데이터를 복구할 수 있게 합니다. #81324 (Raúl Marín).
  • delta-kernel의 region 오류를 수정했습니다. #79914를 해결했습니다. #81353 (Kseniia Sumarokova).
  • divideOrNull의 잘못된 JIT를 비활성화했습니다. #81370 (Raúl Marín).
  • MergeTree 테이블의 파티션 컬럼 이름이 길 때 발생하는 삽입 오류를 수정했습니다. #81390 (hy123q).
  • #81957에서 백포트됨: 머지 중 예외가 발생할 경우 Aggregator에서 발생할 수 있던 크래시를 수정했습니다. #81450 (Nikita Taranov).
  • 여러 manifest 파일의 내용을 메모리에 저장하지 않도록 했습니다. #81470 (Daniil Ivanik).
  • 백그라운드 풀(background_.*pool_size) 종료 중 발생할 수 있는 크래시를 수정했습니다. #81473 (Azat Khuzhin).
  • URL 엔진(engine)을 사용하는 테이블(table)에 쓰는 과정에서 발생하던 Npy 포맷의 범위를 벗어난 읽기 문제를 수정했습니다. 이로써 #81356가 해결되었습니다. #81502 (Alexey Milovidov).
  • Web UI에 NaN%가 표시되는 경우가 있습니다(전형적인 JavaScript 문제). #81507 (Alexey Milovidov).
  • database_replicated_enforce_synchronous_settings=1일 때 DatabaseReplicated 문제를 수정했습니다. #81564 (Azat Khuzhin).
  • LowCardinality(Nullable(…)) 타입의 정렬 순서를 바로잡았습니다. #81583 (Pervakov Grigorii).
  • 요청을 소켓에서 끝까지 읽지 않은 경우 서버가 HTTP 연결을 유지해서는 안 됩니다. #81595 (Sema Checherinda).
  • 상관된 스칼라 서브쿼리가 프로젝션 표현식의 널 허용 결과를 반환하도록 했습니다. 상관된 서브쿼리가 빈 결과 집합을 반환할 때의 문제를 수정했습니다. #81632 (Dmitry Novik).
  • ReplicatedMergeTreeATTACH하는 중 발생하는 Unexpected relative path for a deduplicated part 문제를 수정했습니다. #81647 (Azat Khuzhin).
  • 쿼리 설정 use_iceberg_partition_pruning은 쿼리 Context가 아니라 전역 Context를 사용하므로 Iceberg 스토리지에서는 적용되지 않습니다. 기본값이 true이므로 심각한 문제는 아닙니다. 이 PR로 이를 수정할 수 있습니다. #81673 (Han Fei).
  • #82128에 백포트: TTL 표현식에서 dict를 사용할 때 머지 중 발생하는 “Context has expired” 문제를 수정했습니다. #81690 (Azat Khuzhin).
  • MergeTree 설정 merge_max_block_size가 0이 아닌지 확인하는 검증을 추가했습니다. #81693 (Bharat Nallan).
  • clickhouse-local에서 DROP VIEW 쿼리가 멈추는 문제를 수정했습니다. #81705 (Bharat Nallan).
  • 일부 경우 StorageRedis join 문제를 수정했습니다. #81736 (Pervakov Grigorii).
  • USING () 사용 시 기존 분석기가 활성화된 상태에서 발생하던 ConcurrentHashJoin 충돌 문제를 수정했습니다. #81754 (Nikita Taranov).
  • Keeper 수정: logs에 잘못된 엔트리가 있으면 새 logs의 커밋을 차단합니다. 이전에는 leader가 일부 logs를 잘못 적용해도 follower는 digest 불일치를 감지하고 중단했지만, leader는 계속 새 logs를 커밋했습니다. #81780 (Antonio Andelic).
  • 스칼라 상관 서브쿼리 처리 중 필요한 컬럼을 읽지 못하는 문제를 수정했습니다. #81716 문제를 해결합니다. #81805 (Dmitry Novik).
  • 코드 여기저기에 들어가 있던 Kusto를 정리했습니다. 이로써 #81643를 해결했습니다. #81885 (Alexey Milovidov).
  • 이전 버전에서는 서버가 /js 요청에 대해 과도하게 많은 콘텐츠를 반환했습니다. 이 변경으로 #61890이 해결되었습니다. #81895 (Alexey Milovidov).
  • 이전에는 MongoDB 테이블 엔진 정의에서 host:port 인수에 경로 구성 요소를 포함할 수 있었지만, 이는 별다른 경고 없이 무시되었습니다. MongoDB 통합은 이러한 테이블의 로드를 거부합니다. 이번 수정으로 MongoDB 엔진에 인수가 5개 있는 경우, 인수에 지정된 데이터베이스 이름을 사용하여 이러한 테이블도 로드할 수 있으며 경로 구성 요소는 무시됩니다. 참고: 이 수정은 새로 생성된 테이블이나 mongo 테이블 함수를 사용하는 쿼리에는 적용되지 않으며, 딕셔너리 소스와 이름이 지정된 컬렉션에도 적용되지 않습니다. #81942 (Vladimir Cherkasov).
  • 머지 중 예외가 발생할 경우 Aggregator에서 발생할 수 있는 크래시를 수정했습니다. #82022 (Nikita Taranov).
  • arraySimilarity의 복사-붙여넣기 오류를 수정하고, UInt32Int32 가중치 사용을 금지했습니다. 테스트와 문서도 업데이트했습니다. #82103 (Mikhail f. Shiryaev).
  • 제안 스레드와 메인 클라이언트 스레드 간에 발생할 수 있는 데이터 레이스를 수정했습니다. #82233 (Azat Khuzhin).

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

ClickHouse 릴리스 25.5, 2025-05-22

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

  • 이제 함수 geoToH3는 입력을 (lat, lon, res) 순서로 받습니다(다른 기하 함수에서 일반적으로 사용하는 순서). 기존 결과 순서인 (lon, lat, res)를 유지하려면 설정 geotoh3_argument_order = 'lon_lat'를 지정할 수 있습니다. #78852 (Pratima Patel).
  • 파일 시스템 캐시 설정 allow_dynamic_cache_resize를 추가했습니다. 기본값은 false이며, 파일 시스템 캐시를 동적으로 리사이즈할 수 있게 합니다. 이유: 특정 환경(ClickHouse Cloud)에서는 모든 스케일링 이벤트가 프로세스 재시작을 통해 발생하므로, 동작을 더 세밀하게 제어하고 안전장치로 삼기 위해 이 기능이 명시적으로 비활성화되어 있기를 원합니다. 이전 버전에서는 별도 설정 없이 동적 캐시 리사이즈가 기본적으로 동작했으므로, 이 PR은 하위 호환되지 않는 변경 사항으로 표시되었습니다. #79148 (Kseniia Sumarokova).
  • 레거시 인덱스 타입 annoyusearch 지원을 제거했습니다. 두 타입 모두 오랫동안 스텁 상태였으며, 즉 레거시 인덱스를 사용하려는 모든 시도는 결국 오류를 반환했습니다. 아직 annoyusearch 인덱스가 남아 있다면 삭제하십시오. #79802 (Robert Schulze).
  • format_alter_commands_with_parentheses 서버 설정을 제거했습니다. 이 설정은 24.2에서 도입되었으며 기본적으로 비활성화되어 있었습니다. 25.2에서는 기본적으로 활성화되었습니다. 새 포맷을 지원하지 않는 LTS 버전이 더 이상 없으므로 이 설정을 제거할 수 있습니다. #79970 (János Benjamin Antal).
  • DeltaLake 스토리지의 delta-kernel-rs 구현을 기본적으로 활성화했습니다. #79541 (Kseniia Sumarokova).
  • URL에서 읽을 때 여러 번 리디렉션되는 경우, 설정 enable_url_encoding이 리디렉션 체인의 모든 단계에 올바르게 적용됩니다. #79563 (Shankar Iyer). 이제 설정 enble_url_encoding의 기본값은 false입니다. #80088 (Shankar Iyer).

새로운 기능

  • WHERE 절에서 스칼라 상관 서브쿼리를 지원합니다. #6697를 해결합니다. #79600 (Dmitry Novik). 단순한 경우 프로젝션 목록에서도 상관 서브쿼리를 지원합니다. #79925 (Dmitry Novik). #76078 (Dmitry Novik). 이제 TPC-H 테스트 스위트를 100% 통과합니다.
  • 벡터 유사성 인덱스를 사용한 벡터 검색이 이제 베타 상태입니다(이전에는 experimental이었습니다). #80164 (Robert Schulze).
  • Parquet 포맷에서 geo 타입을 지원합니다. #75317이 해결되었습니다. #79777 (scanhex12).
  • 인덱싱 및 검색을 위해 부분 문자열을 추출하는 강건한 알고리즘인 “희소 ngrams”를 계산하는 새로운 함수 sparseGrams, sparseGramsHashes, sparseGramsHashesUTF8, sparseGramsUTF8가 추가되었습니다. #79517 (scanhex12).
  • 처리할 입력 데이터가 있으면 이제 clickhouse-local(및 축약 별칭 ch)은 암시적 FROM table을 사용합니다. 이로써 #65023가 해결되었습니다. 또한 --input-format이 지정되지 않았고 일반 파일을 처리하는 경우 clickhouse-local에서 포맷 추론이 활성화되었습니다. #79085 (Alexey Milovidov).
  • 무작위이거나 암호화되었을 가능성이 있는 데이터를 검색할 수 있도록 stringBytesUniqstringBytesEntropy 함수를 추가했습니다. #79350 (Sachin Kumar Singh).
  • base32 인코딩과 디코딩을 위한 함수가 추가되었습니다. #79809 (Joanna Hulboj).
  • getServerSettinggetMergeTreeSetting 함수를 추가했습니다. #78318을 해결했습니다. #78439 (NamNguyenHoai).
  • version-hint.text 파일을 활용할 수 있도록 새로운 iceberg_enable_version_hint 설정을 추가했습니다. #78594 (Arnaud Briche).
  • 데이터베이스에서 LIKE 키워드로 필터링하여 특정 테이블을 TRUNCATE할 수 있게 되었습니다. #78597 (Yarik Briukhovetskyi).
  • MergeTree 계열 테이블에서 _part_starting_offset 가상 컬럼을 지원합니다. 이 컬럼은 현재 파트 목록을 기준으로 쿼리 시점에 계산되며, 앞선 모든 파트의 누적 행 수를 나타냅니다. 누적 값은 쿼리 실행 전반에 걸쳐 유지되며, 파트 프루닝 이후에도 계속 유효합니다. 이 동작을 지원하도록 관련 내부 로직도 리팩터링되었습니다. #79417 (Amos Bird).
  • 오른쪽 인수가 0인 경우 NULL을 반환하는 divideOrNull,moduloOrNull, intDivOrNull,positiveModuloOrNull 함수를 추가했습니다. #78276 (kevinyhzou).
  • ClickHouse 벡터 검색은 이제 프리필터링과 포스트필터링을 모두 지원하며, 보다 세밀하게 제어할 수 있도록 관련 설정도 제공합니다. (이슈 #78161). #79854 (Shankar Iyer).
  • icebergHashicebergBucket 함수를 추가합니다. bucket transfom으로 파티셔닝된 Iceberg 테이블에서 데이터 파일 프루닝을 지원합니다. #79262 (Daniil Ivanik).

실험적 기능

  • 새로운 Time/Time64 데이터 타입: Time(HHH:MM:SS) 및 Time64(HHH:MM:SS.<fractional>)와 함께, 몇 가지 기본 CAST 함수와 다른 데이터 타입과 상호 운용하기 위한 함수가 추가되었습니다. 또한 CAST 함수에 toTime 함수가 필요해짐에 따라, 기존 함수 이름을 toTime에서 toTimeWithFixedDate로 변경했습니다. #75735 (Yarik Briukhovetskyi). 72459).
  • Iceberg datalake용 Hive metastore catalog. #77677 (scanhex12).
  • full_text 타입의 인덱스 이름이 gin으로 변경되었습니다. 이는 PostgreSQL 및 다른 데이터베이스에서 더 익숙한 용어를 따른 것입니다. 기존 full_text 타입 인덱스도 계속 로드할 수 있지만, 검색에 사용하려고 하면 예외를 발생시키며 대신 gin 인덱스를 사용하라는 안내가 표시됩니다. #79024 (Robert Schulze).

성능 개선

  • 개별 서브컬럼을 읽을 수 있도록 각 substream의 마크를 저장하는 방식으로 Compact part 포맷이 변경되었습니다. 이전 Compact 포맷도 읽기에는 계속 지원되며, 쓰기에는 MergeTree setting write_marks_for_substreams_in_compact_parts를 사용해 활성화할 수 있습니다. 이 변경은 compact 파트 스토리지를 바꾸므로, 더 안전한 업그레이드를 위해 기본적으로 비활성화되어 있습니다. 향후 릴리스 중 하나에서는 기본적으로 활성화될 예정입니다. #77940 (Pavel Kruglov).
  • 서브컬럼이 있는 조건을 prewhere로 이동할 수 있도록 했습니다. #79489 (Pavel Kruglov).
  • 여러 그래뉼에 대해 보조 인덱스 표현식을 한 번에 평가해 보조 인덱스 성능을 향상했습니다. #64109 (Alexey Milovidov).
  • compile_expressions(일반 표현식 조각용 JIT 컴파일러)를 기본값으로 활성화합니다. 이 변경으로 #51264, #56386, #66486가 해결됩니다. #79907 (Alexey Milovidov).
  • 새로운 설정이 도입되었습니다: use_skip_indexes_in_final_exact_mode. ReplacingMergeTree 테이블에 대한 쿼리에 FINAL 절이 있는 경우, 스킵 인덱스를 기준으로 테이블 범위만 읽으면 잘못된 결과가 반환될 수 있습니다. 이 설정을 사용하면 스킵 인덱스가 반환한 프라이머리 키(primary key) 범위와 겹치는 최신 파트를 스캔하여 올바른 결과를 반환하도록 할 수 있습니다. 비활성화하려면 0, 활성화하려면 1로 설정하십시오. #78350 (Shankar Iyer).
  • 객체 스토리지 클러스터 테이블 함수(예: s3Cluster)는 이제 일관 해시를 기준으로 읽을 파일을 레플리카에 할당해 캐시 지역성을 개선합니다. #77326 (Andrej Hoos).
  • S3Queue/AzureQueue의 성능을 개선하여 데이터 INSERT를 병렬로 수행할 수 있도록 했습니다(parallel_inserts=true 큐 설정으로 활성화할 수 있습니다). 이전에는 S3Queue/AzureQueue가 파이프라인의 첫 단계(다운로드, 파싱)만 병렬로 처리할 수 있었고, INSERT는 단일 스레드로 수행되었습니다. 또한 INSERT는 거의 항상 병목입니다. 이제 processing_threads_num에 거의 선형적으로 비례해 확장됩니다. #77671 (Azat Khuzhin). S3Queue/AzureQueue에서 max_processed_files_before_commit이 더 공정하게 동작하도록 개선했습니다. #79363 (Azat Khuzhin).
  • 오른쪽 테이블의 크기가 임계값 미만일 때 hash 알고리즘으로 폴백하도록 하는 임계값(설정 parallel_hash_join_threshold로 제어)을 도입했습니다. #76185 (Nikita Taranov).
  • 이제 병렬 레플리카가 활성화된 읽기에서 작업 크기를 결정할 때 레플리카 수를 사용합니다. 이렇게 하면 읽어야 할 데이터 양이 그리 많지 않을 때 레플리카 간 작업 분배가 더 개선됩니다. #78695 (Nikita Taranov).
  • 분산 집계의 최종 단계에서 uniqExact 상태를 병렬로 병합할 수 있도록 개선했습니다. #78703 (Nikita Taranov).
  • 키 기반 집계에서 uniqExact 상태를 병렬로 병합할 때 발생할 수 있는 성능 저하를 수정했습니다. #78724 (Nikita Taranov).
  • Azure 스토리지의 List Blobs API 호출 수를 줄였습니다. #78860 (Julia Kartseva).
  • 병렬 레플리카를 사용하는 분산 INSERT SELECT 성능을 개선했습니다. #79441 (Azat Khuzhin).
  • LogSeriesLimiter가 생성될 때마다 정리를 수행하지 않도록 하여, 잠금 경합을 피하고 높은 동시성 시나리오에서의 성능 저하를 방지합니다. #79864 (filimonov).
  • 단순 count 최적화로 쿼리 속도를 높입니다. #79945 (Raúl Marín).
  • 일부 Decimal 연산의 인라이닝이 개선되었습니다. #79999 (Konstantin Bogdanov).
  • 기본적으로 input_format_parquet_bloom_filter_push_down를 true로 설정했습니다. 또한 설정 변경 이력의 오류를 수정했습니다. #80058 (Alexey Milovidov).
  • 모든 행을 삭제해야 하는 파트의 ALTER ... DELETE 뮤테이션을 최적화했습니다. 이제 이런 경우에는 뮤테이션을 실행하지 않고 원본 파트 대신 빈 파트를 생성합니다. #79307 (Anton Popov).
  • 가능한 경우 Compact part에 삽입할 때 block을 추가로 복사하지 않도록 개선했습니다. #79536 (Pavel Kruglov).
  • 입력 형식에서 생성되는 블록의 크기를 바이트 단위로 제한하는 설정 input_format_max_block_size_bytes가 추가되었습니다. 이 설정은 행에 큰 값이 포함된 경우 데이터 가져오기 중 메모리 사용량이 과도하게 증가하는 것을 방지하는 데 도움이 될 수 있습니다. #79495 (Pavel Kruglov).
  • 스레드와 async_socket_for_remote/use_hedge_requests의 가드 페이지를 제거합니다. FiberStack의 할당 메서드를 mmap에서 aligned_alloc로 변경합니다. 이는 VMA를 분할하므로 높은 부하에서는 vm.max_map_count 한도에 도달할 수 있기 때문입니다. #79147 (Sema Checherinda).
  • 병렬 레플리카를 사용한 Lazy Materialization. #79401 (Igor Nikonov).

개선

  • 경량한 삭제를 실시간으로 적용할 수 있는 기능이 추가되었습니다(설정 lightweight_deletes_sync = 0, apply_mutations_on_fly = 1 사용). #79281 (Anton Popov).
  • 터미널에 Pretty 형식의 데이터가 표시될 때, 다음 블록의 컬럼 너비가 같으면 커서를 위로 이동해 이전 블록에 이어 붙여 표시할 수 있습니다. 이로써 #79333이 해결됩니다. 이 기능은 새로운 설정 output_format_pretty_glue_chunks로 제어됩니다. #79339 (Alexey Milovidov).
  • isIPAddressInRange 함수가 String, IPv4, IPv6, Nullable(String), Nullable(IPv4), Nullable(IPv6) 데이터 타입도 지원하도록 확장되었습니다. #78364 (YjyJeff).
  • PostgreSQL 엔진 연결 풀 설정을 동적으로 변경할 수 있게 했습니다. #78414 (Samay Sharma).
  • 일반 PROJECTION에서 _part_offset을 지정할 수 있게 했습니다. 이는 PROJECTION 인덱스를 구축하는 첫 단계입니다. #58224와 함께 사용할 수 있으며, #63207 개선에도 도움이 될 수 있습니다. #78429 (Amos Bird).
  • system.named_collections에 새 컬럼(create_querysource)을 추가했습니다. #78179를 해결했습니다. #78582 (MikhailBurdukov).
  • 시스템 테이블(system table) system.query_condition_cache에 새 필드 condition이 추가되었습니다. 이 필드는 쿼리 조건 캐시에서 키로 사용되는 해시 계산에 사용되는 평문 조건을 저장합니다. #78671 (Robert Schulze).
  • 이제 BFloat16 컬럼에서도 벡터 유사성 인덱스를 생성할 수 있습니다. #78850 (Robert Schulze).
  • DateTime64의 best effort 파싱에서 소수 부분이 포함된 Unix 타임스탬프를 지원합니다. #78908 (Pavel Kruglov).
  • 스토리지 DeltaLake delta-kernel 구현에서 컬럼 매핑 모드 관련 수정이 이루어졌으며, 스키마 진화 테스트가 추가되었습니다. #78921 (Kseniia Sumarokova).
  • 값 변환을 더 정확히 수행하도록 개선하여 Values 형식에서 Variant 컬럼으로의 삽입을 개선했습니다. #78923 (Pavel Kruglov).
  • tokens 함수가 추가 “토크나이저” 인수와 토크나이저별 추가 인수를 받을 수 있도록 확장되었습니다. #79001 (Elmi Ahmadov).
  • SHOW CLUSTER 문은 이제 인수에 포함된 매크로가 있으면 이를 확장합니다. #79006 (arf42).
  • 이제 해시 함수는 배열, 튜플, 맵 내의 NULL을 지원합니다. (이슈 #48365#48623). #79008 (Michael Kolupaev).
  • cctz를 2025a로 업데이트했습니다. #79043 (Raúl Marín).
  • UDF의 기본 stderr 처리 방식을 “log_last”로 변경했습니다. 사용성이 개선됩니다. #79066 (Alexey Milovidov).
  • Web UI에서 탭 작업을 되돌릴 수 있게 합니다. 이로써 #71284가 해결됩니다. #79084 (Alexey Milovidov).
  • recoverLostReplica 중 설정을 https://github.com/ClickHouse/ClickHouse/pull/78637에서와 동일한 방식으로 제거했습니다. #79113 (Nikita Mikhaylov).
  • Parquet 인덱스 프루닝을 프로파일링할 수 있도록 profile events에 ParquetReadRowGroupsParquetPrunedRowGroups를 추가합니다. #79180 (flynn).
  • 클러스터에서 데이터베이스에 ALTER를 수행하는 기능을 지원합니다. #79242 (Tuan Pham Anh).
  • QueryMetricLog에 대한 통계 수집에서 누락된 실행은 명시적으로 건너뜁니다. 그렇지 않으면 로그가 현재 시점을 따라잡는 데 오랜 시간이 걸립니다. #79257 (Mikhail Artemenko).
  • Arrow 기반 포맷 읽기 관련 소규모 최적화 몇 가지입니다. #79308 (Bharat Nallan).
  • 설정 allow_archive_path_syntax가 실수로 Experimental로 표시되었습니다. 실험적 설정이 기본적으로 활성화되지 않도록 하는 테스트를 추가했습니다. #79320 (Alexey Milovidov).
  • 페이지 캐시 설정을 쿼리별로 조정할 수 있게 했습니다. 이는 더 빠르게 실험하고, 높은 처리량과 낮은 지연 시간이 중요한 쿼리를 세밀하게 튜닝할 수 있도록 하기 위해 필요합니다. #79337 (Alexey Milovidov).
  • 대부분의 64비트 해시처럼 보이는 숫자에는 Pretty 형식에서 숫자 힌트를 출력하지 않도록 했습니다. 이로써 #79334가 해결되었습니다. #79338 (Alexey Milovidov).
  • 고급 대시보드의 그래프 색상은 해당 쿼리의 해시값을 바탕으로 결정됩니다. 이렇게 하면 대시보드를 스크롤할 때 그래프를 더 쉽게 기억하고 찾을 수 있습니다. #79341 (Alexey Milovidov).
  • 비동기 메트릭 FilesystemCacheCapacity를 추가했습니다. 이는 cache 가상 파일 시스템의 총 용량을 나타내며, 전역 인프라 모니터링에 유용합니다. #79348 (Alexey Milovidov).
  • system.parts 접근을 최적화했습니다(요청한 경우에만 컬럼/인덱스 크기를 읽습니다). #79352 (Azat Khuzhin).
  • 모든 필드가 아니라 쿼리 'SHOW CLUSTER <name>'에 필요한 필드만 계산합니다. #79368 (Tuan Pham Anh).
  • DatabaseCatalog의 스토리지 설정을 지정할 수 있게 되었습니다. #79407 (Kseniia Sumarokova).
  • DeltaLake에서 로컬 스토리지를 지원합니다. #79416 (Kseniia Sumarokova).
  • delta-kernel-rs를 활성화하는 쿼리 수준 설정 allow_experimental_delta_kernel_rs이 추가되었습니다. #79418 (Kseniia Sumarokova).
  • Azure/S3 blob storage의 blob 목록을 조회할 때 발생할 수 있는 무한 루프를 수정했습니다. #79425 (Alexander Gololobov).
  • 파일 시스템 캐시 설정 max_size_ratio_to_total_space가 추가되었습니다. #79460 (Kseniia Sumarokova).
  • clickhouse-benchmarkreconnect 옵션을 재연결 방식에 따라 0, 1 또는 N 값을 받을 수 있도록 재구성했습니다. #79465 (Sachin Kumar Singh).
  • 서로 다른 plain_rewritable 디스크에 있는 테이블에서도 ALTER TABLE ... MOVE|REPLACE PARTITION을 허용합니다. #79566 (Julia Kartseva).
  • 이제 참조 벡터가 Array(BFloat16) 유형인 경우에도 벡터 유사도 인덱스가 사용됩니다. #79745 (Shankar Iyer).
  • system.error_log 테이블에 last_error_message, last_error_trace, query_id 컬럼을 추가합니다. 관련 티켓 #75816. #79836 (Andrei Tinikov).
  • 기본적으로 크래시 보고서 전송을 활성화합니다. 이는 서버의 설정 파일에서 비활성화할 수 있습니다. #79838 (Alexey Milovidov).
  • 시스템 테이블(system table) system.functions에 이제 각 함수가 처음 도입된 ClickHouse 버전이 표시됩니다. #79839 (Robert Schulze).
  • access_control_improvements.enable_user_name_access_type 설정이 추가되었습니다. 이 설정을 사용하면 https://github.com/ClickHouse/ClickHouse/pull/72246 에서 도입된 사용자/역할에 대한 세분화된 권한 부여를 활성화하거나 비활성화할 수 있습니다. 25.1보다 이전 버전의 레플리카가 포함된 클러스터가 있는 경우에는 이 설정을 끄는 것이 좋을 수 있습니다. #79842 (pufit).
  • ASTSelectWithUnionQuery::clone() 메서드의 올바른 구현이 이제 is_normalized 필드도 고려하도록 반영되었습니다. 이는 #77569에 도움이 될 수 있습니다. #79909 (Nikita Mikhaylov).
  • EXCEPT 연산자가 포함된 일부 쿼리의 일관되지 않은 포맷을 수정했습니다. EXCEPT 연산자의 왼쪽이 *로 끝나면 포맷된 쿼리에서 괄호가 사라지고, 이후 EXCEPT 수정자가 적용된 *로 파싱됩니다. 이러한 쿼리는 퍼저로 발견되었으며, 실제로는 발견될 가능성이 낮습니다. 이 변경으로 #79950이 해결되었습니다. #79952 (Alexey Milovidov).
  • Variant 역직렬화 순서 캐시를 사용해 JSON 유형 파싱을 소폭 개선했습니다. #79984 (Pavel Kruglov).
  • 설정 s3_slow_all_threads_after_network_error를 추가했습니다. #80035 (Vitaly Baranov).
  • 머지 대상으로 선택된 파트에 대한 로깅 수준이 잘못 지정되어 있었습니다(Information). #80061을 해결합니다. #80062 (Alexey Milovidov).
  • trace-visualizer: 툴팁과 상태 메시지에 런타임/Share 항목을 추가했습니다. #79040 (Sergei Trifonov).
  • trace-visualizer: ClickHouse 서버에서 데이터를 불러옵니다. #79042 (Sergei Trifonov).
  • 실패하는 머지 관련 메트릭을 추가했습니다. #79228 (Miсhael Stetsyuk).
  • clickhouse-benchmark는 최대 반복 횟수가 지정된 경우 이를 기준으로 백분율을 표시합니다. #79346 (Alexey Milovidov).
  • system.parts 테이블용 시각화 도구를 추가했습니다. #79437 (Sergei Trifonov).
  • 쿼리 지연 시간 분석 도구를 추가했습니다. #79978 (Sergei Trifonov).

버그 수정(공식 안정 릴리스에서 사용자가 인지할 수 있는 오동작)

  • part에 없는 컬럼 이름 변경 문제를 수정했습니다. #76346 (Anton Popov).
  • materialized view가 너무 늦게 시작될 수 있습니다. 예를 들어, 해당 materialized view로 스트리밍하는 Kafka 테이블이 시작된 후에 시작될 수 있습니다. #72123 (Ilya Golshtein).
  • 분석기가 활성화된 상태에서 VIEW를 생성할 때 SELECT 쿼리 재작성이 올바르게 동작하지 않던 문제를 수정했습니다. #75956를 해결합니다. #76356 (Dmitry Novik).
  • 서버에서 apply_settings_from_server를 통해 async_insert를 적용할 때 발생하던 문제를 수정했습니다(이전에는 클라이언트에서 Unknown packet 11 from server 오류가 발생했습니다). #77578 (Azat Khuzhin).
  • 새로 추가된 레플리카에서 작동하지 않던 복제된 데이터베이스의 갱신 가능 구체화 뷰 문제를 수정했습니다. #77774 (Michael Kolupaev).
  • 갱신 가능 구체화 뷰로 인해 백업이 깨지던 문제를 수정했습니다. #77893 (Michael Kolupaev).
  • transform의 기존 논리 오류를 수정했습니다. #78247 (Yarik Briukhovetskyi).
  • 분석기에서 보조 인덱스가 적용되지 않던 일부 사례를 수정했습니다. #65607, #69373을 수정했습니다. #78485 (Nikolai Kochetov).
  • 압축이 활성화된 HTTP protocol에서 프로파일 이벤트(NetworkSendElapsedMicroseconds/NetworkSendBytes)를 덤프할 때 발생하던 문제를 수정했습니다(오류는 버퍼 크기(일반적으로 약 1MiB)보다 커서는 안 됩니다). #78516 (Azat Khuzhin).
  • JOIN … USING에 ALIAS 컬럼이 포함될 때 분석기가 LOGICAL_ERROR를 발생시키던 문제를 수정하고, 적절한 오류를 발생시키도록 개선했습니다. #78618 (Yakov Olkhovskiy).
  • 분석기 수정: SELECT에 위치 인수가 포함되면 CREATE VIEW … ON CLUSTER가 실패하던 문제를 수정했습니다. #78663 (Yakov Olkhovskiy).
  • SELECT에 스칼라 서브쿼리가 있을 때, 스키마 추론이 적용된 테이블 함수에 INSERT SELECT를 수행할 경우 발생하는 Block structure mismatch 오류를 수정했습니다. #78677 (Pervakov Grigorii).
  • 분석기 수정: SELECT 쿼리에서 분산 테이블에 prefer_global_in_and_join=1이 설정된 경우, in 함수가 globalIn으로 대체되도록 수정했습니다. #78749 (Yakov Olkhovskiy).
  • MongoDB engine 또는 mongodb 테이블 함수로 읽는 테이블에 대한 여러 유형의 SELECT 쿼리를 수정했습니다. 여기에는 WHERE 절에서 상수 값이 암시적으로 변환되는 쿼리(예: WHERE datetime = '2025-03-10 00:00:00')와 LIMITGROUP BY가 포함된 쿼리가 해당됩니다. 이전에는 이러한 쿼리가 잘못된 결과를 반환할 수 있었습니다. #78777 (Anton Popov).
  • 서로 다른 JSON 타입 간 변환을 수정했습니다. 이제 String으로 변환한 뒤 다시 변환하는 단순 CAST를 통해 수행됩니다. 효율은 다소 떨어지지만 100% 정확합니다. #78807 (Pavel Kruglov).
  • Dynamic type을 인터벌로 변환하는 과정에서 발생하던 논리 오류를 수정했습니다. #78813 (Pavel Kruglov).
  • JSON 파싱 오류 시 컬럼 롤백 문제를 수정했습니다. #78836 (Pavel Kruglov).
  • 상수 별칭 컬럼을 사용해 JOIN할 때 발생하던 ‘bad cast’ 오류를 수정했습니다. #78848 (Vladimir Cherkasov).
  • 뷰와 대상 테이블(target table) 간에 타입이 다른 컬럼에 대해서는 materialized view에서 prewhere를 허용하지 않습니다. #78889 (Pavel Kruglov).
  • Variant 컬럼의 잘못된 바이너리 데이터 파싱 중 발생하던 논리 오류를 수정했습니다. #78982 (Pavel Kruglov).
  • Parquet 배치 크기가 0으로 설정되면 예외를 발생시킵니다. 이전에는 output_format_parquet_batch_size = 0으로 설정하면 ClickHouse가 멈췄습니다. 이제 이 동작은 수정되었습니다. #78991 (daryawessely).
  • compact 파트에서 basic 포맷 사용 시 Variant 판별자의 역직렬화 문제를 수정했습니다. 이는 https://github.com/ClickHouse/ClickHouse/pull/55518에서 도입되었습니다. #79000 (Pavel Kruglov).
  • complex_key_ssd_cache 유형의 딕셔너리는 이제 block_sizewrite_buffer_size 매개변수에 0 또는 음수를 허용하지 않습니다(이슈 #78314). #79028 (Elmi Ahmadov).
  • SummingMergeTree에서 집계되지 않은 컬럼에는 Field를 사용하지 마십시오. 그러면 SummingMergeTree에서 사용하는 Dynamic/Variant 타입과 관련해 예기치 않은 오류가 발생할 수 있습니다. #79051 (Pavel Kruglov).
  • 분석기에서 대상 테이블이 분산이고 헤더가 다른 Materialized View에서 읽을 때 발생하던 문제를 수정했습니다. #79059 (Pavel Kruglov).
  • 배치 삽입이 있었던 테이블에서 arrayUnion()이 불필요한(잘못된) 값을 추가로 반환하던 버그를 수정했습니다. #75057를 수정했습니다. #79079 (Peter Nguyen).
  • OpenSSLInitializer에서 발생하는 세그폴트를 수정했습니다. #79092를 해결합니다. #79097 (Konstantin Bogdanov).
  • S3 ListObject에는 항상 prefix를 설정하도록 했습니다. #79114 (Azat Khuzhin).
  • 배치 삽입이 수행된 테이블에서 arrayUnion()이 잘못된 값을 추가로 반환하던 버그를 수정했습니다. #79157을 수정했습니다. #79158 (Peter Nguyen).
  • filter pushdown 후 발생하던 논리 오류를 수정했습니다. #79164 (Pervakov Grigorii).
  • HTTP 기반 엔드포인트에서 사용되는 delta-kernel 구현과 관련된 DeltaLake 테이블 엔진 문제를 수정하고, NOSIGN도 수정했습니다. #78124를 해결합니다. #79203 (Kseniia Sumarokova).
  • Keeper 수정: 실패한 multi 요청 시 watch가 트리거되지 않도록 수정했습니다. #79247 (Antonio Andelic).
  • IN에서 Dynamic 및 JSON 타입을 금지합니다. 현재 IN 구현에서는 잘못된 결과가 나올 수 있습니다. IN에서 이러한 타입을 제대로 지원하려면 구현이 복잡하므로, 향후 지원될 수 있습니다. #79282 (Pavel Kruglov).
  • JSON 타입 파싱 시 중복 경로 검사 로직을 수정했습니다. #79317 (Pavel Kruglov).
  • SecureStreamSocket 연결 문제를 해결했습니다. #79383 (Konstantin Bogdanov).
  • 데이터가 포함된 plain_rewritable 디스크가 로드되지 않던 문제를 수정했습니다. #79439 (Julia Kartseva).
  • MergeTree의 Wide 파트에서 동적 서브컬럼 디스커버리 과정에서 발생하던 크래시를 수정했습니다. #79466 (Pavel Kruglov).
  • 테이블 이름 길이는 초기 CREATE 쿼리에서만 검증합니다. 하위 호환성 문제를 피하기 위해 후속 CREATE 쿼리에서는 이를 검증하지 않습니다. #79488 (Miсhael Stetsyuk).
  • 희소 컬럼이 있는 테이블에서 여러 경우에 발생하던 Block structure mismatch 오류를 수정했습니다. #79491 (Anton Popov).
  • “Logical Error: Can’t set alias of * of Asterisk on alias” 오류가 발생하던 두 가지 경우를 수정했습니다. #79505 (Raúl Marín).
  • Atomic 데이터베이스의 이름을 변경할 때 잘못된 경로를 사용하던 문제를 해결했습니다. #79569 (Tuan Pham Anh).
  • JSON 컬럼과 다른 컬럼을 함께 사용하는 ORDER BY 문제를 수정했습니다. #79591 (Pavel Kruglov).
  • 원격에서 읽는 중 use_hedged_requestsallow_experimental_parallel_reading_from_replicas가 모두 비활성화되어 있을 때 결과가 중복되는 문제를 수정했습니다. #79599 (Eduard Karacharov).
  • Unity Catalog 사용 시 delta-kernel 구현에서 발생하던 충돌을 수정했습니다. #79677 (Kseniia Sumarokova).
  • 자동 디스커버리 클러스터의 매크로가 올바르게 해석되도록 수정했습니다. #79696 (Anton Ivashkin).
  • 잘못 설정된 page_cache_limits를 적절히 처리합니다. #79805 (Bharat Nallan).
  • 가변 길이 포매터(예: 요일인 Monday, Tuesday 등을 나타내는 %W) 다음에 복합 포매터(한 번에 여러 구성 요소를 출력하는 포매터, 예: 미국식 날짜 05/04/25를 나타내는 %D)가 올 때 SQL 함수 formatDateTime의 결과를 수정합니다. #79835 (Robert Schulze).
  • IcebergS3는 count 최적화를 지원하지만, IcebergS3Cluster는 지원하지 않습니다. 따라서 클러스터 모드에서 반환되는 count() 결과는 레플리카 수의 배수로 나타날 수 있습니다. #79844 (wxybear).
  • 프로젝션 시점까지 쿼리 실행에 컬럼이 전혀 사용되지 않는 경우, lazy materialization에서 발생하는 AMBIGUOUS_COLUMN_NAME 오류를 수정했습니다. 예시: SELECT * FROM t ORDER BY rand() LIMIT 5. #79926 (Igor Nikonov).
  • 쿼리 CREATE DATABASE datalake ENGINE = DataLakeCatalog(\'http://catalog:8181\', \'admin\', \'password\')에서 비밀번호를 숨깁니다. #79941 (Han Fei).
  • JOIN USING에서 별칭을 지정할 수 있습니다. 컬럼 이름이 변경된 경우(예: ARRAY JOIN으로 인해)에는 이 별칭을 지정하십시오. #73707을 수정했습니다. #79942 (Nikolai Kochetov).
  • UNION이 포함된 구체화된 뷰(Materialized View)가 새 레플리카에서 올바르게 작동하도록 했습니다. #80037 (Samay Sharma).
  • SQL 함수 parseDateTime의 포맷 지정자 %e가 이제 한 자릿수 일자(예: 3)도 인식합니다. 이전에는 공백 패딩(예: 3)이 필요했습니다. 이 변경으로 MySQL과 동작이 호환됩니다. 이전 동작을 유지하려면 setting parsedatetime_e_requires_space_padding = 1을 설정하십시오. (이슈 #78243). #80057 (Robert Schulze).
  • ClickHouse 로그에 표시되는 Cannot find 'kernel' in '[...]/memory.stat' 경고를 수정했습니다(이슈 #77410). #80129 (Robert Schulze).
  • 스택 오버플로우로 인한 충돌을 방지하기 위해 FunctionComparison에서 스택 크기를 확인하도록 했습니다. #78208 (Julia Kartseva).
  • system.workloads에서 SELECT를 수행할 때 발생하는 경쟁 상태를 수정했습니다. #78743 (Sergei Trifonov).
  • 수정: 분산 쿼리의 lazy materialization. #78815 (Igor Nikonov).
  • Array(Bool)Array(FixedString)으로 변환하는 문제를 수정했습니다. #78863 (Nikita Taranov).
  • Parquet 버전 선택 시 혼란을 줄입니다. #78818 (Michael Kolupaev).
  • ReservoirSampler의 자체 병합 문제를 수정했습니다. #79031 (Nikita Taranov).
  • 클라이언트 Context에서 삽입 대상 테이블 저장을 수정했습니다. #79046 (Pervakov Grigorii).
  • AggregatingSortedAlgorithmSummingSortedAlgorithm의 데이터 멤버의 소멸 순서를 수정했습니다. #79056 (Nikita Taranov).
  • enable_user_name_access_typeDEFINER 액세스 유형에 영향을 미쳐서는 안 됩니다. #80026 (pufit).
  • system 데이터베이스 메타데이터가 Keeper에 있으면 system 데이터베이스에 대한 쿼리가 중단될 수 있습니다. #79304 (Mikhail Artemenko).

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

ClickHouse 25.4 릴리스, 2025-04-22

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

  • allow_materialized_view_with_bad_selectfalse일 때 materialized view의 모든 컬럼이 대상 테이블과 일치하는지 확인합니다. #74481 (Christoph Wurm).
  • dateTrunc가 음수 Date/DateTime 인수와 함께 사용되는 경우를 수정했습니다. #77622 (Yarik Briukhovetskyi).
  • 기존 MongoDB 통합이 제거되었습니다. 서버 설정 use_legacy_mongodb_integration은 더 이상 사용되지 않으며 이제 아무 동작도 하지 않습니다. #77895 (Robert Schulze).
  • 파티션 또는 정렬 키에 사용되는 컬럼은 집계에서 제외하도록 SummingMergeTree 검증을 개선했습니다. #78022 (Pervakov Grigorii).

새로운 기능

  • 워크로드용 CPU 슬롯 스케줄링이 추가되었습니다. 자세한 내용은 문서를 참조하십시오. #77595 (Sergei Trifonov).
  • clickhouse-local--path 명령줄 인수를 지정하면 재시작 후에도 데이터베이스를 유지합니다. 이 변경으로 #50647이 해결되었습니다. 이 변경으로 #49947도 해결되었습니다. #71722 (Alexey Milovidov).
  • 서버에 과부하가 걸리면 쿼리를 거부합니다. 판단은 대기 시간(OSCPUWaitMicroseconds)과 바쁜 시간(OSCPUVirtualTimeMicroseconds)의 비율을 기준으로 이루어집니다. 이 비율이 min_os_cpu_wait_time_ratio_to_throwmax_os_cpu_wait_time_ratio_to_throw 사이이면 쿼리는 일정 확률로 거부됩니다(이 값들은 쿼리 수준 설정입니다). #63206 (Alexey Katsman).
  • Iceberg의 time travel: 특정 timestamp 시점의 Iceberg 테이블을 쿼리할 수 있는 설정을 추가했습니다. #71072 (Brett Hoerner). #77439 (Daniil Ivanik).
  • Iceberg 메타데이터를 위한 인메모리 캐시로, manifest 파일/목록과 metadata.json을 저장해 쿼리 속도를 높입니다. #77156 (Han Fei).
  • Azure Blob Storage용 DeltaLake 테이블 엔진을 지원합니다. #68043를 해결했습니다. #74541 (Smita Kulkarni).
  • 역직렬화된 벡터 유사성 인덱스를 위한 인메모리 캐시가 추가되었습니다. 이에 따라 반복되는 근사 최근접 이웃(ANN) 검색 쿼리가 더 빨라집니다. 새 캐시의 크기는 서버 설정 vector_similarity_index_cache_sizevector_similarity_index_cache_max_entries로 제어됩니다. 이 기능은 이전 릴리스의 스키핑 인덱스 캐시 기능을 대체합니다. #77905 (Shankar Iyer).
  • DeltaLake에서 파티션 프루닝을 지원합니다. #78486 (Kseniia Sumarokova).
  • 읽기 전용 MergeTree 테이블에서 백그라운드 갱신을 지원하여, 사실상 무제한의 분산 리더로 업데이트 가능한 테이블을 쿼리할 수 있습니다(ClickHouse 네이티브 데이터 레이크). #76467 (Alexey Milovidov).
  • 데이터베이스 메타데이터 파일 저장에 사용자 지정 디스크를 사용할 수 있도록 지원합니다. 현재는 서버 전역 수준에서만 구성할 수 있습니다. #77365 (Tuan Pham Anh).
  • plain_rewritable 디스크에서 ALTER TABLE … ATTACH|DETACH|MOVE|REPLACE PARTITION을 지원합니다. #77406 (Julia Kartseva).
  • Kafka 테이블 엔진에 SASL 구성과 자격 증명을 위한 테이블 설정이 추가되었습니다. 이를 통해 설정 파일이나 이름이 지정된 컬렉션을 사용하지 않고도 CREATE TABLE 문에서 직접 Kafka 및 Kafka 호환 시스템의 SASL 기반 인증을 구성할 수 있습니다. #78810 (Christoph Wurm).
  • MergeTree 테이블에서 default_compression_codec 설정을 사용할 수 있도록 했습니다. 지정된 컬럼에 대해 CREATE 쿼리에서 이를 명시적으로 정의하지 않으면 이 설정이 사용됩니다. 이로써 #42005가 해결되었습니다. #66394 (gvoelfin).
  • ClickHouse가 분산 연결에 특정 네트워크를 사용하도록 clusters 구성에 bind_host 설정을 추가했습니다. #74741 (Todd Yocum).
  • system.tables에 새 컬럼 parametrized_view_parameters를 추가했습니다. https://github.com/clickhouse/clickhouse/issues/66756 이슈를 해결합니다. #75112 (NamNguyenHoai).
  • 데이터베이스 주석을 변경할 수 있게 했습니다. #73351을 해결합니다. ### 사용자 대상 변경 사항에 대한 문서 항목. #75622 (NamNguyenHoai).
  • PostgreSQL 호환 프로토콜에서 SCRAM-SHA-256 인증을 지원합니다. #76839 (scanhex12).
  • 함수 arrayLevenshteinDistance, arrayLevenshteinDistanceWeighted, arraySimilarity를 추가했습니다. #77187 (Mikhail f. Shiryaev).
  • parallel_distributed_insert_select 설정은 ReplicatedMergeTree에 대한 INSERT SELECT에도 적용됩니다(이전에는 Distribued 테이블이 필요했습니다). #78041 (Igor Nikonov).
  • toInterval 함수를 추가했습니다. 이 함수는 2개의 인수(value 및 unit)를 받아 값을 특정 Interval 유형으로 변환합니다. #78723 (Andrew Davis).
  • Iceberg 테이블 함수와 엔진에서 루트 metadata.json 파일을 찾을 수 있는 몇 가지 편리한 방법을 추가했습니다. #78455를 해결합니다. #78475 (Daniil Ivanik).
  • ClickHouse의 SSH 프로토콜에서 비밀번호 기반 인증을 지원합니다. #78586 (Nikita Mikhaylov).

실험적 기능

  • WHERE 절의 EXISTS 표현식 인수로 상관 서브쿼리를 지원합니다. #72459를 해결했습니다. #76078 (Dmitry Novik).
  • ASCII 및 UTF8 버전의 sparseGramssparseGramsHashes 함수가 추가되었습니다. 작성자: scanhex12. #78176 (Pervakov Grigorii). 사용하지 마십시오. 구현이 향후 버전에서 변경될 예정입니다.

성능 개선

  • ORDER BY 및 LIMIT 적용 후 데이터를 읽는 lazy 컬럼을 통해 성능을 최적화합니다. #55518 (Xiaozhe Yu).
  • 쿼리 조건 캐시를 기본적으로 활성화했습니다. #79080 (Alexey Milovidov).
  • col->insertFrom() 호출을 디버추얼라이즈하여 JOIN 결과 생성 속도를 높였습니다. #77350 (Alexander Gololobov).
  • 가능하면 filter 쿼리 계획 단계에 있는 동등 조건을 JOIN 조건에 머지하여, 이를 해시 테이블 키로 사용할 수 있도록 했습니다. #78877 (Dmitry Novik).
  • 두 파트 모두에서 JOIN 키가 PK의 접두사일 경우, JOIN에 동적 세그먼트 분할을 사용합니다. 이 최적화는 query_plan_join_shard_by_pk_ranges 설정으로 활성화됩니다(기본값은 비활성화). #74733 (Nikolai Kochetov).
  • 컬럼의 하한값과 상한값을 기준으로 Iceberg 데이터 프루닝을 지원합니다. #77638을 수정했습니다. #78242 (alesapin).
  • Iceberg에 단순 count 최적화를 적용했습니다. 이제 필터 없이 count()를 사용하는 쿼리가 더 빠르게 실행됩니다. #77639을 해결합니다. #78090 (alesapin).
  • max_merge_delayed_streams_for_parallel_write를 사용해 병합 작업이 병렬로 플러시할 수 있는 컬럼 수를 설정할 수 있는 기능이 추가되었습니다(이를 통해 S3로의 수직 병합에서 메모리 사용량을 약 25배 줄일 수 있습니다). #77922 (Azat Khuzhin).
  • 캐시가 머지와 같은 작업에서 수동적으로 사용되는 경우 filesystem_cache_prefer_bigger_buffer_size를 비활성화합니다. 이렇게 하면 머지 시 메모리 사용량이 줄어듭니다. #77898 (Kseniia Sumarokova).
  • 이제 병렬 레플리카가 활성화된 읽기에서 작업 크기를 결정할 때 레플리카 수를 사용합니다. 이를 통해 읽을 데이터 양이 그다지 많지 않을 때 레플리카 간 작업 분배가 더욱 개선됩니다. #78695 (Nikita Taranov).
  • 원격 IO 지연 시간을 감춰 전체 성능을 향상시키는 ORC 포맷의 비동기 IO 프리페치를 지원합니다. #70534 (李扬).
  • 성능 향상을 위해 비동기 삽입에 사용되는 메모리를 미리 할당하도록 개선했습니다. #74945 (Ilya Golshtein).
  • multiRead를 사용할 수 있는 곳에서는 단일 get 요청 사용을 없애 Keeper 요청 수를 줄였습니다. 이는 레플리카 수가 늘어날 때 Keeper에 상당한 부하를 줄 수 있었습니다. #56862 (Nikolay Degterinsky).
  • 널 허용 인수에서 함수를 실행할 때의 소폭 최적화입니다. #76489 (李扬).
  • arraySort 최적화. #76850 (李扬).
  • 잠금 사용을 줄이기 위해 동일한 파트의 마크를 머지한 뒤 한 번에 쿼리 조건 캐시에 기록합니다. #77377 (zhongyuankai).
  • 괄호 확장이 1개인 쿼리에 대한 s3Cluster 성능을 최적화했습니다. #77686 (Tomáš Hromada).
  • 단일 널 허용 또는 LowCardinality 컬럼의 ORDER BY를 최적화했습니다. #77789 (李扬).
  • Native 포맷의 메모리 사용량을 최적화했습니다. #78442 (Azat Khuzhin).
  • 사소한 최적화: 형 변환이 필요한 경우 count(if(...))countIf로 재작성하지 않습니다. #78564를 종료했습니다. #78565 (李扬).
  • 이제 hasAll 함수는 tokenbf_v1, ngrambf_v1 전문 텍스트 스킵 인덱스를 활용할 수 있습니다. #77662 (UnamedRus).
  • 벡터 유사성 인덱스는 메인 메모리를 최대 2배까지 과다 할당할 수 있었습니다. 이번 수정으로 메모리 할당 방식을 개선해 메모리 사용량을 줄이고 벡터 유사성 인덱스 캐시의 효율을 높였습니다. (issue #78056). #78394 (Shankar Iyer).
  • system.metric_log 테이블에 스키마 유형을 지정하는 설정 schema_type이 도입되었습니다. 허용되는 스키마는 세 가지입니다. wide — 현재 스키마로, 각 메트릭/이벤트를 별도의 컬럼에 저장합니다(개별 컬럼 읽기에 가장 효율적임), transposedsystem.asynchronous_metric_log와 유사한 스키마로, 메트릭/이벤트를 행으로 저장합니다. 그리고 가장 주목할 만한 transposed_with_wide_viewtransposed 스키마의 기반 테이블(underlying table)을 생성하면서, 쿼리를 기반 테이블로 변환하는 wide 스키마의 뷰도 함께 도입합니다. transposed_with_wide_view에서는 뷰의 subsecond 해상도가 지원되지 않으며, event_time_microseconds는 하위 호환성을 위한 alias일 뿐입니다. #78412 (alesapin).

개선 사항

  • Distributed 쿼리의 쿼리 계획을 직렬화합니다. 새로운 설정 serialize_query_plan이 추가되었습니다. 이 설정을 활성화하면 Distributed 테이블의 쿼리는 원격 쿼리 실행 시 직렬화된 쿼리 계획을 사용합니다. 이에 따라 TCP 프로토콜에 새로운 패킷 유형이 도입되며, 이 패킷을 처리할 수 있도록 서버 설정에 <process_query_plan_packet>true</process_query_plan_packet>를 추가해야 합니다. #69652 (Nikolai Kochetov).
  • 뷰에서 JSON 유형과 서브컬럼을 읽을 수 있도록 지원합니다. #76903 (Pavel Kruglov).
  • ALTER DATABASE ... ON CLUSTER를 지원합니다. #79242 (Tuan Pham Anh).
  • 이제 갱신 가능 구체화 뷰의 갱신 내역이 system.query_log에 기록됩니다. #71333 (Michael Kolupaev).
  • 사용자 정의 함수(UDFs)는 이제 구성의 새로운 설정을 통해 결정적인 것으로 표시할 수 있습니다. 또한 이제 쿼리 캐시는 쿼리 내에서 호출된 UDFs가 결정적인지 확인합니다. 이 경우 쿼리 결과를 캐시합니다. (이슈 #59988). #77769 (Jimmy Aguilar Mena).
  • 모든 유형의 복제된 작업에 백오프 로직을 적용했습니다. 이를 통해 CPU 사용량, 메모리 사용량, 로그 파일 크기를 줄일 수 있습니다. max_postpone_time_for_failed_replicated_fetches_ms, max_postpone_time_for_failed_replicated_merges_ms, max_postpone_time_for_failed_replicated_tasks_ms라는 새로운 설정을 추가했으며, 이는 max_postpone_time_for_failed_mutations_ms와 유사합니다. #74576 (MikhailBurdukov).
  • query_idsystem.errors에 추가했습니다. #75815를 해결했습니다. #76581 (Vladimir Baikov).
  • UInt128IPv6로 변환하는 기능 지원이 추가되었습니다. 이제 IPv6에 대해 bitAnd 연산과 산술 연산을 수행한 뒤 다시 IPv6로 변환할 수 있습니다. #76752를 해결합니다. 또한 IPv6에 대한 bitAnd 연산 결과 역시 다시 IPv6로 변환할 수 있습니다. 관련 항목: #57707. #76928 (Muzammil Abdul Rehman).
  • 기본적으로 Variant 유형의 텍스트 형식에서는 특수 Bool 값을 파싱하지 않습니다. 설정 allow_special_bool_values_inside_variant를 사용하면 이를 활성화할 수 있습니다. #76974 (Pavel Kruglov).
  • 세션 수준과 서버 수준에서 낮은 priority 쿼리의 작업별 대기 시간을 설정할 수 있도록 지원합니다. #77013 (VicoWu).
  • JSON 데이터 타입 값의 비교를 구현했습니다. 이제 JSON 객체를 맵과 유사하게 비교할 수 있습니다. #77397 (Pavel Kruglov).
  • system.kafka_consumers에 대한 권한 지원이 개선되었습니다. 내부 librdkafka 오류를 그대로 전달합니다(참고로 이 라이브러리는 형편없습니다). #77700 (Ilya Golshtein).
  • Buffer 테이블 엔진 설정에 대한 유효성 검사가 추가되었습니다. #77840 (Pervakov Grigorii).
  • HDFS에서 pread를 활성화하거나 비활성화할 수 있도록 enable_hdfs_pread 설정을 추가했습니다. #77885 (kevinyhzou).
  • ZooKeeper multi 읽기 및 쓰기 요청 횟수에 대한 profile events를 추가했습니다. #77888 (JackyWoo).
  • disable_insertion_and_mutation이 활성화되어 있어도 임시 테이블을 생성하고 여기에 삽입할 수 있도록 허용합니다. #77901 (Xu Jia).
  • max_insert_delayed_streams_for_parallel_write를 100으로 낮췄습니다. #77919 (Azat Khuzhin).
  • Joda 문법에서 yyy와 같은 연도 파싱을 수정했습니다(참고로 이는 Java에서 사용하는 방식입니다). #77973 (李扬).
  • MergeTree 테이블의 파트를 ATTACH할 때는 블록 순서에 따라 수행되며, 이는 ReplacingMergeTree와 같은 특수한 머지 알고리즘에 중요합니다. 이로써 #71009가 해결되었습니다. #77976 (Alexey Milovidov).
  • 이제 쿼리 마스킹 규칙은 일치가 발생하면 LOGICAL_ERROR를 발생시킬 수 있습니다. 이를 통해 사전 정의된 비밀번호가 logs 어디에서든 유출되는지 확인할 수 있습니다. #78094 (Nikita Mikhaylov).
  • MySQL과의 호환성을 높이기 위해 information_schema.tablesindex_length_column 컬럼이 추가되었습니다. #78119 (Paweł Zakrzewski).
  • 새로운 메트릭 TotalMergeFailuresNonAbortedMergeFailures 2개를 도입했습니다. 이 메트릭은 짧은 시간 동안 머지가 지나치게 많이 실패하는 경우를 감지하는 데 필요합니다. #78150 (Miсhael Stetsyuk).
  • path-style 방식에서 key가 지정되지 않았을 때 발생하던 잘못된 S3 URL 파싱을 수정했습니다. #78185 (Arthur Passos).
  • BlockActiveTime, BlockDiscardTime, BlockWriteTime, BlockQueueTime, BlockReadTime 비동기 메트릭 값이 잘못 보고되던 문제를 수정했습니다(변경 전에는 1초가 잘못 보고되어 0.001로 표시되었습니다). #78211 (filimonov).
  • StorageS3(Azure)Queue에서 materialized view로 푸시하는 동안 발생하는 오류에 loading_retries 제한을 적용합니다. 이전에는 이러한 오류가 무기한으로 재시도되었습니다. #78313 (Kseniia Sumarokova).
  • delta-kernel-rs 구현을 사용하는 DeltaLake에서 성능 및 진행률 표시줄 문제를 수정했습니다. #78368 (Kseniia Sumarokova).
  • 런타임 디스크에서 include, from_env, from_zk를 지원합니다. #78177를 해결합니다. #78470 (Kseniia Sumarokova).
  • 오랫동안 실행 중인 뮤테이션에 대해 system.warnings 테이블에 동적 경고를 추가했습니다. #78658 (Bharat Nallan).
  • 시스템 테이블(system table) system.query_condition_cachecondition 필드가 추가되었습니다. 이 필드는 쿼리 조건 캐시에서 키로 사용되는 해시에 해당하는 평문 조건을 저장합니다. #78671 (Robert Schulze).
  • Hive 파티셔닝에서 빈 값을 허용합니다. #78816 (Arthur Passos).
  • BFloat16IN 절 타입 강제 변환 문제를 수정했습니다(즉, SELECT toBFloat16(1) IN [1, 2, 3];가 이제 1을 반환합니다). #78754를 해결합니다. #78839 (Raufs Dunamalijevs).
  • disk = ...가 설정된 경우 MergeTree는 다른 디스크의 파트를 확인하지 않습니다. #78855 (Azat Khuzhin).
  • system.query_logused_data_type_families에서 데이터 타입이 표준 이름으로 기록되도록 했습니다. #78972 (Kseniia Sumarokova).
  • recoverLostReplica 중 정리 설정을 #78637에서 처리한 것과 동일하게 조정했습니다. #79113 (Nikita Mikhaylov).
  • INFILE의 스키마 추론에 삽입 컬럼을 사용합니다. #78490 (Pervakov Grigorii).

버그 수정(공식 안정 릴리스에서 사용자에게 드러나는 오동작)

  • 집계 프로젝션에서 count(Nullable)을 사용할 때 발생하는 잘못된 프로젝션 분석을 수정합니다. 이 변경으로 #74495가 해결됩니다. 또한 이 PR에서는 프로젝션이 사용되는 이유와 사용되지 않는 이유를 더 명확히 파악할 수 있도록 프로젝션 분석 관련 logs를 일부 추가합니다. #74498 (Amos Bird).
  • DETACH PART 수행 중 Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED) 오류가 발생하던 문제를 수정했습니다. #76039 (Aleksei Filatov).
  • 분석기에서 리터럴을 포함한 표현식이 있는 스킵 인덱스가 작동하지 않던 문제를 수정하고, 인덱스 분석 과정에서 불필요한 단순 CAST를 제거했습니다. #77229 (Pavel Kruglov).
  • close_session 쿼리 매개변수가 아무런 효과를 내지 않아 이름이 지정된 세션이 session_timeout 이후에만 닫히던 버그를 수정했습니다. #77336 (Alexey Katsman).
  • attached 상태인 Materialized View가 없는 경우 NATS 서버에서 메시지를 수신하지 못하던 문제를 수정했습니다. #77392 (Dmitry Novikov).
  • FileLog에서 merge 테이블 함수를 통해 읽을 때 발생하던 논리 오류를 수정하고 #75575를 해결했습니다. #77441 (Vladimir Cherkasov).
  • shared variant의 Dynamic 직렬화에 기본 포맷 설정을 사용하도록 수정했습니다. #77572 (Pavel Kruglov).
  • 로컬 디스크에 테이블 데이터 경로가 존재하는지 확인하는 동작을 수정했습니다. #77608 (Tuan Pham Anh).
  • 일부 타입에서 상수 값을 원격으로 전송할 때 발생하던 문제를 수정했습니다. #77634 (Pavel Kruglov).
  • S3/AzureQueue에서 만료된 Context로 인해 발생하는 충돌을 수정했습니다. #77720 (Kseniia Sumarokova).
  • RabbitMQ, Nats, Redis, AzureQueue 테이블 엔진의 자격 증명을 숨깁니다. #77755 (Kseniia Sumarokova).
  • argMin/argMax에서 NaN 비교 시 발생하는 정의되지 않은 동작을 수정했습니다. #77756 (Raúl Marín).
  • 작업에서 쓸 블록이 생성되지 않더라도 머지와 뮤테이션이 취소되었는지 정기적으로 확인합니다. #77766 (János Benjamin Antal).
  • 복제된 데이터베이스에서 새로 추가한 레플리카에서 갱신 가능 구체화 뷰가 작동하지 않는 문제를 수정했습니다. #77774 (Michael Kolupaev).
  • NOT_FOUND_COLUMN_IN_BLOCK 오류 발생 시 발생할 수 있는 비정상 종료 문제를 수정했습니다. #77854 (Vladimir Cherkasov).
  • 데이터를 채우는 과정에서 S3/AzureQueue에 발생하던 비정상 종료를 수정했습니다. #77878 (Bharat Nallan).
  • SSH 서버의 이력에 대한 퍼지 검색을 비활성화합니다(skim 라이브러리가 필요하기 때문입니다). #78002 (Azat Khuzhin).
  • 벡터 유사도 인덱스가 정의된 다른 벡터 컬럼이 테이블에 있는 경우, 인덱스가 없는 컬럼에 대한 벡터 검색 쿼리가 잘못된 결과를 반환하던 버그를 수정했습니다. (이슈 #77978). #78069 (Shankar Iyer).
  • 사소한 오류가 있던 “요청한 출력 형식 은 바이너리입니다… 그래도 출력하시겠습니까? [y/N]” 프롬프트를 수정했습니다. #78095 (Azat Khuzhin).
  • origin 인수가 0일 때 toStartOfInterval에서 발생하는 버그를 수정했습니다. #78096 (Yarik Briukhovetskyi).
  • HTTP 인터페이스에서 비어 있는 session_id 쿼리 매개변수를 지정할 수 없도록 합니다. #78098 (Alexey Katsman).
  • ALTER 쿼리 직후 실행된 RENAME 쿼리로 인해 발생할 수 있던 Replicated 데이터베이스의 메타데이터 덮어쓰기 문제를 수정했습니다. #78107 (Nikolay Degterinsky).
  • NATS 엔진에서 발생하던 충돌을 수정했습니다. #78108 (Dmitry Novikov).
  • SSH용 내장 클라이언트에서는 history_file 생성을 시도하지 않도록 변경했습니다(이전 버전에서는 생성을 시도했지만 항상 실패했습니다). #78112 (Azat Khuzhin).
  • RENAME DATABASE 또는 DROP TABLE 쿼리 이후 system.detached_tables에 잘못된 정보가 표시되던 문제를 수정했습니다. #78126 (Nikolay Degterinsky).
  • #77274 이후 Replicated 데이터베이스에서 테이블 수가 과도한지 확인하는 검사에 대한 수정입니다. 또한 ReplicatedMergeTree 또는 KeeperMap의 경우 Keeper에 집계되지 않는 노드가 생성되지 않도록 스토리지를 생성하기 전에 검사를 수행합니다. #78127 (Nikolay Degterinsky).
  • 동시 S3Queue 메타데이터 초기화로 인해 발생할 수 있는 크래시를 수정했습니다. #78131 (Azat Khuzhin).
  • groupArray* 함수는 이제 max_size 인수에 Int 유형의 값 0이 지정되면, 이미 UInt의 경우와 동일하게 이를 실행하려고 시도하는 대신 BAD_ARGUMENTS 오류를 반환합니다. #78140 (Eduard Karacharov).
  • 로컬 테이블이 분리되기 전에 제거된 경우, 손실된 레플리카를 복구하는 과정에서 발생할 수 있던 크래시를 방지합니다. #78173 (Raúl Marín).
  • system.s3_queue_settings에서 “alterable” 컬럼이 항상 false를 반환하는 문제를 수정했습니다. #78187 (Kseniia Sumarokova).
  • Azure access signature가 사용자에게나 로그에 노출되지 않도록 마스킹합니다. #78189 (Kseniia Sumarokova).
  • Wide 파트에서 프리픽스가 있는 하위 스트림의 프리페치 문제를 수정했습니다. #78205 (Pavel Kruglov).
  • LowCardinality(Nullable) 유형의 키 배열에서 mapFromArrays가 충돌을 일으키거나 잘못된 결과를 반환하던 문제를 수정했습니다. #78240 (Eduard Karacharov).
  • delta-kernel-rs 인증 옵션을 수정했습니다. #78255 (Kseniia Sumarokova).
  • 레플리카의 disable_insertion_and_mutation이 true이면 갱신 가능 구체화 뷰 작업을 예약하지 않도록 수정했습니다. 작업은 삽입 작업의 일종이므로 disable_insertion_and_mutation이 true이면 실패합니다. #78277 (Xu Jia).
  • Merge 엔진의 기반 테이블에 대한 접근 권한을 검증합니다. #78339 (Pervakov Grigorii).
  • Distributed 테이블을 쿼리할 때 FINAL 수정자가 무시될 수 있습니다. #78428 (Yakov Olkhovskiy).
  • bitmapMin은 비트맵이 비어 있으면 uint32_max를 반환하고(입력 타입이 더 크면 uint64_max), 이는 빈 roaring_bitmap의 최솟값 동작과 일치합니다. #78444 (wxybear).
  • distributed_aggregation_memory_efficient가 활성화된 경우 FROM을 읽은 직후 쿼리 처리의 병렬화를 비활성화합니다. 그렇지 않으면 논리적 오류가 발생할 수 있습니다. #76934을 해결합니다. #78500 (flynn).
  • max_streams_to_max_threads_ratio 설정을 적용한 후 계획된 스트림 수가 0개가 되는 경우에도, 읽기를 위해 최소 1개의 스트림이 설정되도록 했습니다. #78505 (Eduard Karacharov).
  • 스토리지 S3Queue에서 논리 오류 “Cannot unregister: table uuid is not registered”를 수정했습니다. 해당 수정으로 #78285가 해결됩니다. #78541 (Kseniia Sumarokova).
  • 이제 ClickHouse는 cgroups v1과 v2가 모두 활성화된 시스템에서도 자체 cgroup v2를 식별할 수 있습니다. #78566 (Grigory Korolev).
  • -Cluster 테이블 함수가 테이블 수준 설정과 함께 사용될 때 실패하던 문제가 수정되었습니다. #78587 (Daniil Ivanik).
  • INSERT 시 ReplicatedMergeTree에서 트랜잭션이 지원되지 않는 경우에 대한 검사 개선. #78633 (Azat Khuzhin).
  • ATTACH 시 쿼리 설정을 정리합니다. #78637 (Raúl Marín).
  • 잘못된 경로가 iceberg_metadata_file_path에 지정되었을 때 발생하던 비정상 종료를 수정했습니다. #78688 (alesapin).
  • DeltaLake 테이블 엔진의 delta-kernel-s 구현에서, 읽기 스키마가 테이블 스키마와 다르면서 동시에 파티션 컬럼도 있는 경우 "not found column" 오류가 발생하던 문제를 수정했습니다. #78690 (Kseniia Sumarokova).
  • 이름이 지정된 session의 종료를 예약한 뒤(timeout 만료 전), 같은 이름의 새 named session을 생성하면 첫 번째 session의 종료 예정 시점에 새 session도 함께 종료되던 문제를 수정했습니다. #78698 (Alexey Katsman).
  • MongoDB engine 또는 mongodb 테이블 함수에서 읽는 여러 유형의 SELECT 쿼리를 수정했습니다. 여기에는 WHERE 절에서 상수 값이 암시적으로 변환되는 쿼리(예: WHERE datetime = '2025-03-10 00:00:00')와 LIMITGROUP BY를 사용하는 쿼리가 포함됩니다. 이전에는 이러한 쿼리가 잘못된 결과를 반환할 수 있었습니다. #78777 (Anton Popov).
  • CHECK TABLE 실행 중 테이블 종료가 차단되지 않도록 수정했습니다. #78782 (Raúl Marín).
  • Keeper 수정: 모든 경우의 ephemeral 개수를 수정했습니다. #78799 (Antonio Andelic).
  • view 이외의 테이블 함수를 사용할 때 StorageDistributed에서 발생하는 잘못된 CAST 문제를 수정합니다. #78464를 해결합니다. #78828 (Konstantin Bogdanov).
  • tupleElement(*, 1) 포맷의 일관성을 수정했습니다. #78639를 해결했습니다. #78832 (Konstantin Bogdanov).
  • ssd_cache 유형의 Dictionaries는 이제 block_sizewrite_buffer_size 매개변수에 0 또는 음수 값이 지정되면 이를 허용하지 않습니다(이슈 #78314). #78854 (Elmi Ahmadov).
  • 비정상 종료 후 ALTER 수행 시 갱신 가능 MATERIALIZED VIEW에서 발생하던 충돌을 수정했습니다. #78858 (Azat Khuzhin).
  • CSV 포맷에서 잘못된 DateTime 값 파싱을 수정했습니다. #78919 (Pavel Kruglov).
  • Keeper 수정: 실패한 multi 요청에서는 watch가 트리거되지 않도록 수정했습니다. #79247 (Antonio Andelic).
  • min-max 값이 명시적으로 지정되어 있지만 NULL인 경우 Iceberg 테이블을 읽는 데 실패하던 문제를 수정했습니다. Go Iceberg 라이브러리가 이렇게 잘못된 파일을 생성하는 것으로 확인되었습니다. #78740을 닫습니다. #78764 (flynn).

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

  • Rust에서 CPU 타깃 기능을 반영하고 모든 크레이트에서 LTO를 활성화합니다. #78590 (Raúl Marín).

ClickHouse 25.3 LTS 릴리스, 2025-03-20

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

새 기능

  • JSON 데이터 타입은 프로덕션 환경에서 사용할 수 있습니다. https://jsonbench.com/을 참조하십시오. DynamicVariant 데이터 타입은 프로덕션 환경에서 사용할 수 있습니다. #77785 (Alexey Milovidov).
  • clickhouse-server에 SSH 프로토콜 지원을 추가했습니다. 이제 모든 SSH 클라이언트를 사용해 ClickHouse에 연결할 수 있습니다. 이로써 다음 이슈가 해결되었습니다: #74340. #74989 (George Gamezardashvili).
  • 병렬 레플리카가 활성화된 경우 테이블 함수를 해당 -Cluster 대체 항목으로 대체합니다. #65024을 수정했습니다. #70659 (Konstantin Bogdanov).
  • OS 페이지 캐시에 의존하는 대신 프로세스 내 메모리에 데이터를 캐시할 수 있는 사용자 공간 페이지 캐시의 새로운 구현이 추가되었습니다. 이 기능은 로컬 파일 시스템 캐시를 사용할 수 없는 원격 가상 파일 시스템에 데이터가 저장된 경우 유용합니다. #70509 (Michael Kolupaev).
  • concurrent_threads_scheduler 서버 설정이 추가되었습니다. 이 설정은 동시 실행 중인 쿼리 간에 CPU 슬롯을 어떻게 분배할지 제어합니다. round_robin(이전 동작) 또는 fair_round_robin으로 설정해 INSERT와 SELECT 간의 CPU 분배가 불공정한 문제를 해결할 수 있습니다. #75949 (Sergei Trifonov).
  • estimateCompressionRatio 집계 함수를 추가했습니다. #70801 #76661 (Tariq Almawash).
  • 함수 arraySymmetricDifference가 추가되었습니다. 이 함수는 여러 배열 인수에서 모든 인수에 공통으로 포함되지 않는 모든 요소를 반환합니다. 예시: SELECT arraySymmetricDifference([1, 2], [2, 3])[1, 3]을 반환합니다. (이슈 #61673). #76231 (Filipp Abapolov).
  • 스토리지/테이블 함수 설정 iceberg_metadata_file_path 을 사용해 Iceberg에서 읽을 메타데이터 파일을 명시적으로 지정할 수 있게 했습니다. #47412을 해결했습니다. #77318 (alesapin).
  • 블록체인 구현, 특히 EVM 기반 시스템에서 널리 사용되는 keccak256 해시 함수를 추가했습니다. #76669 (Arnaud Briche).
  • 새 함수 3개를 추가했습니다. 사양에 따라 icebergTruncate를 추가했습니다. https://iceberg.apache.org/spec/#truncate-transform-details, toYearNumSinceEpochtoMonthNumSinceEpoch를 추가했습니다. Iceberg 엔진의 파티션 프루닝에서 truncate 변환을 지원합니다. #77403 (alesapin).
  • LowCardinality(Decimal) 데이터 타입 지원 #72256. #72833 (zhanglistar).
  • FilterTransformPassedRowsFilterTransformPassedBytes profile events는 쿼리 실행 중 필터링된 행 수와 바이트 수를 보여줍니다. #76662 (Onkar Deshpande).
  • 히스토그램 메트릭 유형을 지원합니다. 인터페이스는 Prometheus 클라이언트와 매우 유사하여, observe(value)만 호출하면 해당 값이 속한 버킷의 카운터가 증가합니다. 히스토그램 메트릭은 system.histogram_metrics를 통해 노출됩니다. #75736 (Miсhael Stetsyuk).
  • 명시적 값 분기를 위한 비상수 CASE 지원. #77399 (Yarik Briukhovetskyi).

실험적 기능

  • AWS S3 및 로컬 파일 시스템의 DeltaLake 테이블에 대한 Unity Catalog 지원을 추가했습니다. #76988 (alesapin).
  • Iceberg 테이블용 AWS Glue 서비스 카탈로그와의 실험적 통합을 도입했습니다. #77257 (alesapin).
  • 동적 클러스터 자동 디스커버리 지원이 추가되었습니다. 이는 기존 node 자동 디스커버리 기능을 확장한 것입니다. 이제 ClickHouse는 <multicluster_root_path>를 사용해 공통 ZooKeeper 경로 아래의 새로운 _clusters_를 자동으로 감지하고 등록할 수 있습니다. #76001 (Anton Ivashkin).
  • 새로운 설정 enable_replacing_merge_with_cleanup_for_min_age_to_force_merge를 통해, 구성 가능한 timeout이 지난 뒤 전체 파티션에 대한 자동 cleanup 머지를 허용합니다. #76440 (Christoph Wurm).

성능 개선

  • 반복되는 조건을 사용하는 쿼리의 성능을 높이기 위해 쿼리 조건 캐시를 구현했습니다. 조건을 만족하지 않는 데이터 구간의 범위를 메모리에 임시 인덱스로 저장하며, 이후 쿼리에서 이 인덱스를 사용합니다. Close #67768 #69236 (zhongyuankai).
  • 파트 제거 시 캐시에서 데이터를 적극적으로 제거합니다. 데이터 양이 적다면 캐시가 최대 크기까지 커지지 않도록 합니다. #76641 (Alexey Milovidov).
  • 산술 계산에서 Int256 및 UInt256을 clang 내장 i256으로 대체해 성능을 개선했습니다 #70502. #73658 (李扬).
  • 일부 경우(예: 빈 배열 컬럼) 데이터 파트에 빈 파일이 포함될 수 있습니다. 테이블이 메타데이터 스토리지와 객체 스토리지가 분리된 디스크에 있을 때는 ObjectStorage에 빈 blob을 쓰지 않고, 해당 파일의 메타데이터만 저장할 수 있습니다. #75860 (Alexander Gololobov).
  • Decimal32/Decimal64/DateTime64의 min/max 성능을 개선했습니다. #76570 (李扬).
  • 이제 쿼리 컴파일(설정 compile_expressions) 시 머신 유형을 고려합니다. 이에 따라 해당 쿼리의 속도가 크게 향상됩니다. #76753 (ZhangLiStar).
  • arraySort를 최적화했습니다. #76850 (李扬).
  • 머지처럼 캐시가 수동적으로 사용되는 경우 filesystem_cache_prefer_bigger_buffer_size를 비활성화합니다. #77898 (Kseniia Sumarokova).
  • 코드 일부 위치에 preserve_most 속성을 적용해 코드 생성이 약간 더 개선되도록 했습니다. #67778 (Nikita Taranov).
  • ClickHouse 서버 종료 속도가 더 빨라졌습니다(2.5초 지연 제거). #76550 (Azat Khuzhin).
  • ReadBufferFromS3 및 기타 원격 읽기 버퍼에서 불필요한 할당을 줄여 메모리 사용량을 절반으로 낮췄습니다. #76692 (Sema Checherinda).
  • zstd를 1.5.5에서 1.5.7로 업데이트했으며, 그에 따라 일부 성능 개선이 있을 수 있습니다. #77137 (Pradeep Chhetri).
  • Wide 파트의 JSON 컬럼 프리페치 중 메모리 사용량을 줄였습니다. 이는 ClickHouse Cloud처럼 ClickHouse가 공유 스토리지 위에서 사용되는 환경에서 의미가 있습니다. #77640 (Pavel Kruglov).

개선 사항

  • TRUNCATEINTO OUTFILE과 함께 사용할 때 원자적으로 이름을 변경할 수 있도록 지원합니다. #70323를 해결합니다. #77181 (Onkar Deshpande).
  • 이제 부동소수점 값 설정에 NaN이나 inf를 더 이상 사용할 수 없습니다. 애초에 그다지 의미 있는 사용 방식도 아니었습니다. #77546 (Yarik Briukhovetskyi).
  • compatibility 설정과 관계없이, 분석기가 비활성화된 경우 기본적으로 병렬 레플리카를 비활성화합니다. 다만 parallel_replicas_only_with_analyzer를 명시적으로 false로 설정하여 이 동작을 변경할 수 있습니다. #77115 (Igor Nikonov).
  • 클라이언트 요청 헤더에서 외부 HTTP 인증자로 전달할 헤더 목록을 정의할 수 있는 기능이 추가되었습니다. #77054 (inv2004).
  • 튜플 컬럼의 필드에 대해 컬럼명을 대소문자 구분 없이 매칭하도록 합니다. https://github.com/apache/incubator-gluten/issues/8324를 종료합니다. #73780 (李扬).
  • 이제 Gorilla 코덱의 매개변수는 항상 .sql 파일에 있는 테이블(table) 메타데이터에 저장됩니다. 이 변경으로 다음 이슈가 해결됩니다: #70072. #74814 (Nikita Mikhaylov).
  • 일부 데이터 레이크의 파싱을 개선했습니다(시퀀스 ID 파싱: manifest 파일의 시퀀스 식별자를 파싱하는 기능을 추가하고, Avro 메타데이터 파싱: 향후 개선 사항에도 쉽게 확장할 수 있도록 Avro 메타데이터 파서를 재설계했습니다). #75010 (Daniil Ivanik).
  • system.opentelemetry_span_log의 기본 ORDER BY에서 trace_id를 삭제했습니다. #75907 (Azat Khuzhin).
  • 이제 암호화(encrypted_by 속성)를 모든 설정 파일(config.xml, users.xml, 중첩된 설정 파일)에 적용할 수 있습니다. 이전에는 최상위 config.xml 파일에만 적용되었습니다. #75911 (Mikhail Gorshkov).
  • system.warnings 테이블을 개선하고, 추가·업데이트·제거할 수 있는 동적 경고 메시지를 일부 추가했습니다. #76029 (Bharat Nallan).
  • 이 PR에서는 모든 DROP 작업이 순서상 먼저 와야 하므로 ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES 쿼리를 실행할 수 없게 됩니다. #76242 (pufit).
  • SYNC REPLICA 관련 다양한 개선 사항(개선된 오류 메시지, 강화된 테스트, 기본 검증). #76307 (Azat Khuzhin).
  • 백업 중 Access Denied로 인해 S3로의 멀티파트 복사가 실패할 때 올바른 폴백이 사용되도록 했습니다. 자격 증명이 서로 다른 버킷 간에 백업을 수행하면 멀티파트 복사 중 Access Denied 오류가 발생할 수 있습니다. #76515 (Antonio Andelic).
  • librdkafka(엉망인 소프트웨어)를 버전 2.8.0으로 업그레이드하고(그래도 딱히 나아지지는 않습니다), Kafka 테이블의 종료 시퀀스를 개선하여 테이블 삭제 및 server 재시작 시 지연을 줄였습니다. 이제 engine=Kafka는 테이블이 삭제될 때 더 이상 consumer group을 명시적으로 떠나지 않습니다. 대신 consumer는 비활성 상태가 session_timeout_ms(기본값: 45초) 동안 이어진 뒤 자동으로 제거될 때까지 그룹에 남아 있습니다. #76621 (filimonov).
  • S3 요청 설정에 대한 유효성 검사 문제를 수정했습니다. #76658 (Vitaly Baranov).
  • server_settings 또는 settings와 같은 시스템 테이블에는 편리한 default 값 컬럼이 있습니다. 이를 merge_tree_settingsreplicated_merge_tree_settings에도 추가했습니다. #76942 (Diego Nieto).
  • ProfileEvents::QueryPreempted가 추가되었으며, 로직은 CurrentMetrics::QueryPreempted와 유사합니다. #77015 (VicoWu).
  • 이전에는 복제된 데이터베이스(Replicated database)에서 쿼리에 지정된 자격 증명이 로그에 기록될 수 있었습니다. 이 동작은 수정되었습니다. 이로써 #77123가 해결되었습니다. #77133 (Nikita Mikhaylov).
  • plain_rewritable disk에서 ALTER TABLE DROP PARTITION을 사용할 수 있도록 했습니다. #77138 (Julia Kartseva).
  • 백업/복원 설정 allow_s3_native_copy는 이제 3가지 값을 지원합니다: - False - S3 네이티브 복사를 사용하지 않습니다; - True (기존 기본값) - ClickHouse는 먼저 S3 네이티브 복사를 시도하고, 실패하면 읽기+쓰기 방식으로 폴백합니다; - 'auto' (새 기본값) - ClickHouse는 먼저 source와 대상의 자격 증명을 비교합니다. 같으면 ClickHouse는 S3 네이티브 복사를 시도한 후 읽기+쓰기 방식으로 폴백할 수 있습니다. 다르면 ClickHouse는 바로 읽기+쓰기 방식을 사용합니다. #77401 (Vitaly Baranov).
  • DeltaLake 테이블 엔진용 delta kernel에서 AWS 세션 토큰과 환경 자격 증명 사용을 지원합니다. #77661 (Kseniia Sumarokova).

버그 수정(공식 안정 릴리스에서 사용자에게 보이는 오동작)

  • 비동기 분산 INSERT에서 대기 중인 배치를 처리하는 동안 멈추는 문제를 수정했습니다(예: No such file or directory가 발생하는 경우). #72939 (Azat Khuzhin).
  • 암시적 Date→DateTime 변환에 포화 동작을 적용해 인덱스 분석 중 datetime 변환을 개선했습니다. 이를 통해 datetime 범위 제한으로 인해 발생할 수 있는 인덱스 분석의 부정확성을 해결합니다. 이 수정은 #73307을 해결합니다. 또한 기본값(default value)인 date_time_overflow_behavior = 'ignore'일 때의 명시적 toDateTime 변환도 수정합니다. #73326 (Amos Bird).
  • UUID와 테이블 이름 간 경합으로 인해 발생하는 각종 버그를 수정합니다(예를 들어 RENAMERESTART REPLICA 사이의 경합이 해결됩니다. SYSTEM RESTART REPLICA와 동시에 RENAME이 수행되면 잘못된 레플리카가 재시작되거나, 테이블 중 하나가 Table X is being restarted 상태로 남을 수 있습니다). #76308 (Azat Khuzhin).
  • async insert를 활성화한 상태에서 block 크기가 서로 다른 insert into ... from file ...을 수행할 때, 첫 번째 block 크기가 < async_max_size이고 두 번째 block이 > async_max_size이면 두 번째 block이 삽입되지 않던 데이터 손실 문제를 수정했습니다. 해당 데이터는 squashing에 남아 있었습니다. #76343 (Han Fei).
  • system.data_skipping_indices에서 필드 ‘marks’가 ‘marks_bytes’로 이름이 변경되었습니다. #76374 (Robert Schulze).
  • 축출 중 발생하는 예기치 않은 오류 처리와 관련된 동적 파일 시스템 캐시 크기 조정 문제를 수정했습니다. #76466 (Kseniia Sumarokova).
  • 병렬 hash에서 used_flag 초기화를 수정했습니다. 이 문제로 server가 충돌할 수 있었습니다. #76580 (Nikita Taranov).
  • 프로젝션 내에서 defaultProfiles 함수를 호출할 때 발생하는 논리 오류를 수정했습니다. #76627 (pufit).
  • Web UI의 브라우저에서 대화형 basic auth를 요청하지 않도록 했습니다. #76319을 해결했습니다. #76637 (Alexey Milovidov).
  • 분산 테이블에서 불리언 리터럴을 선택할 때 발생하던 THERE_IS_NO_COLUMN 예외를 수정했습니다. #76656 (Yakov Olkhovskiy).
  • 테이블 디렉터리 내부의 하위 경로를 더욱 정교하게 선택하도록 개선했습니다. #76681 (Daniil Ivanik).
  • PK에 서브컬럼이 포함된 테이블을 변경한 후 발생하던 오류 Not found column in block를 수정했습니다. https://github.com/ClickHouse/ClickHouse/pull/72644 이후에는 https://github.com/ClickHouse/ClickHouse/pull/74403가 필요합니다. #76686 (Nikolai Kochetov).
  • NULL 단락 평가 관련 성능 테스트를 추가하고 버그를 수정했습니다. #76708 (李扬).
  • 출력 쓰기 버퍼를 마무리하기 전에 플러시합니다. 일부 출력 형식(예: JSONEachRowWithProgressRowOutputFormat)을 마무리하는 과정에서 발생하던 LOGICAL_ERROR를 수정했습니다. #76726 (Antonio Andelic).
  • MongoDB의 바이너리 UUID 지원을 추가했습니다(#74452) - 테이블 함수를 사용할 때 MongoDB에 대한 WHERE pushdown을 수정했습니다(#72210) - MongoDB의 바이너리 UUID를 ClickHouse의 UUID로만 파싱할 수 있도록 MongoDB - ClickHouse type mapping을 변경했습니다. 이렇게 하면 앞으로 발생할 수 있는 모호성이나 예기치 않은 동작을 방지할 수 있습니다. - OID 매핑을 수정하면서 하위 호환성은 유지했습니다. #76762 (Kirill Nikiforov).
  • JSON 서브컬럼의 프리픽스를 병렬로 역직렬화할 때 예외 처리를 수정했습니다. #76809 (Pavel Kruglov).
  • 음의 정수에서 lgamma 함수의 동작을 수정했습니다. #76840 (Ilya Kataev).
  • 명시적으로 정의된 기본 키(primary key)에 대한 역방향 키 분석 문제를 수정했습니다. #76654와 유사합니다. #76846 (Amos Bird).
  • JSON 포맷에서 Bool 값이 가독성 있게 출력되지 않던 문제를 수정했습니다. #76905 (Pavel Kruglov).
  • async inserts 중 오류 발생 시 잘못된 JSON 컬럼 롤백 때문에 발생할 수 있는 충돌을 수정했습니다. #76908 (Pavel Kruglov).
  • 이전에는 multiIf가 계획 단계와 실제 실행 단계에서 서로 다른 타입의 컬럼을 반환할 수 있었습니다. 이로 인해 C++ 관점에서 코드가 정의되지 않은 동작을 일으킬 수 있었습니다. #76914 (Nikita Taranov).
  • MergeTree에서 상수 널 허용 키의 직렬화가 잘못되던 문제를 수정했습니다. 이로써 #76939 문제가 해결됩니다. #76985 (Amos Bird).
  • BFloat16 값의 정렬을 수정했습니다. 이로써 #75487이 해결되었습니다. 이로써 #75669이 해결되었습니다. #77000 (Alexey Milovidov).
  • part 일관성 검사에서 임시 서브컬럼을 건너뛰도록 확인 로직을 추가해, Variant 서브컬럼이 있는 JSON 관련 문제를 수정했습니다. #72187. #77034 (Smita Kulkarni).
  • 타입이 일치하지 않을 때 Values 형식에서 템플릿을 파싱하는 과정에서 발생하던 충돌을 수정했습니다. #77071 (Pavel Kruglov).
  • 기본 키에 서브컬럼이 포함된 EmbeddedRocksDB 테이블은 생성할 수 없도록 했습니다. 이전에는 이런 테이블을 생성할 수 있었지만 SELECT 쿼리가 실패했습니다. #77074 (Pavel Kruglov).
  • 원격 측으로 프레디케이트를 푸시다운할 때 리터럴 타입이 제대로 반영되지 않아 발생하던 분산 쿼리의 잘못된 비교를 수정했습니다. #77093 (Duc Canh Le).
  • 예외로 인해 Kafka 테이블 생성 중 발생하던 크래시를 수정했습니다. #77121 (Pavel Kruglov).
  • Kafka 및 RabbitMQ 엔진에서 JSON과 서브컬럼을 지원합니다. #77122 (Pavel Kruglov).
  • MacOS에서 예외 처리 시 스택 언와인딩 문제를 수정했습니다. #77126 (Eduard Karacharov).
  • getSubcolumn 함수에서 ‘null’ 서브컬럼을 읽을 때 발생하던 문제를 수정했습니다. #77163 (Pavel Kruglov).
  • 배열(Array) 및 지원되지 않는 함수와 관련된 블룸 필터 인덱스 문제를 수정했습니다. #77271 (Pavel Kruglov).
  • 테이블 개수 제한은 초기 CREATE 쿼리에서만 확인해야 합니다. #77274 (Nikolay Degterinsky).
  • 버그가 아닙니다: SELECT toBFloat16(-0.0) == toBFloat16(0.0)는 이제 이전의 false 대신 올바르게 true를 반환합니다. 이로써 동작이 Float32Float64와 일치하게 되었습니다. #77290 (Shankar Iyer).
  • 초기화되지 않은 key_index 변수를 잘못 참조할 수 있는 문제를 수정했습니다. 이 문제는 디버그 빌드에서 충돌을 일으킬 수 있습니다(이 초기화되지 않은 참조는 이후 코드에서 오류를 발생시킬 가능성이 높으므로 릴리스 빌드에서는 문제가 되지 않을 가능성이 큽니다.) ### 사용자에게 표시되는 변경 사항에 대한 문서 항목입니다. #77305 (wxybear).
  • Bool 값 파티션의 이름을 수정했습니다. 이 문제는 https://github.com/ClickHouse/ClickHouse/pull/74533에서 발생했습니다. #77319 (Pavel Kruglov).
  • 내부에 널 허용 요소가 포함된 튜플과 문자열의 비교를 수정했습니다. 예를 들어, 변경 전에는 Tuple (1, null)과 String '(1,null)'을 비교할 때 오류가 발생했습니다. 또 다른 예로, a가 Nullable 컬럼인 Tuple (1, a)와 String '(1, 2)'을 비교하는 경우가 있었습니다. 이번 변경으로 이러한 문제가 해결되었습니다. #77323 (Alexey Katsman).
  • ObjectStorageQueueSource의 충돌을 수정했습니다. 이 문제는 https://github.com/ClickHouse/ClickHouse/pull/76358에서 도입되었습니다. #77325 (Pavel Kruglov).
  • input 사용 시 async_insert 문제를 수정했습니다. #77340 (Azat Khuzhin).
  • 수정: WITH FILL은 정렬 컬럼이 플래너에 의해 제거되면 NOT_FOUND_COLUMN_IN_BLOCK 오류로 실패할 수 있습니다. INTERPOLATE 표현식에 대해 계산된 DAG가 일관되지 않아 발생하는 유사한 문제도 수정했습니다. #77343 (Yakov Olkhovskiy).
  • 잘못된 AST 노드에 alias를 설정할 때 발생하던 여러 LOGICAL_ERROR를 수정했습니다. #77445 (Raúl Marín).
  • 파일 시스템 캐시 구현에서 파일 세그먼트 쓰기 중 발생하는 오류 처리 문제를 수정했습니다. #77471 (Kseniia Sumarokova).
  • DatabaseIceberg가 catalog에서 제공된 올바른 메타데이터 파일을 사용하도록 수정했습니다. #75187를 해결했습니다. #77486 (Kseniia Sumarokova).
  • 이제 쿌리 캐시는 UDF를 비결정적인 것으로 간주합니다. 따라서 UDF가 포함된 쿼리의 결과는 더 이상 캐시되지 않습니다. 이전에는 사용자가 비결정적 UDF를 정의할 수 있었고, 그 결과가 잘못 캐시되는 문제가 있었습니다(issue #77553). #77633 (Jimmy Aguilar Mena).
  • enable_filesystem_cache_log 설정이 있을 때만 작동하던 system.filesystem_cache_log 문제를 수정했습니다. #77650 (Kseniia Sumarokova).
  • 프로젝션 내에서 defaultRoles 함수를 호출할 때 발생하는 논리적 오류를 수정했습니다. #76627의 후속 수정입니다. #77667 (pufit).
  • 함수 arrayResize의 두 번째 인수로 Nullable 유형은 이제 허용되지 않습니다. 이전에는 두 번째 인수로 Nullable을 사용하면 오류가 발생하거나 잘못된 결과가 나오는 등 다양한 문제가 생길 수 있었습니다. (issue #48398). #77724 (Manish Gill).
  • 작업에서 기록할 블록이 생성되지 않더라도 머지와 뮤테이션이 취소되었는지 정기적으로 확인합니다. #77766 (János Benjamin Antal).

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

ClickHouse 릴리스 25.2, 2025-02-27

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

  • 기본적으로 async_load_databases를 완전히 활성화했습니다(config.xml을 업그레이드하지 않는 설치도 포함). #74772 (Azat Khuzhin).
  • JSONCompactEachRowWithProgressJSONCompactStringsEachRowWithProgress 포맷을 추가했습니다. #69989의 후속 작업입니다. JSONCompactWithNamesJSONCompactWithNamesAndTypes는 더 이상 “합계”를 출력하지 않습니다. 구현상 실수였던 것으로 보입니다. #75037 (Alexey Milovidov).
  • ALTER 명령 목록의 의미를 더 명확히 구분할 수 있도록 format_alter_operations_with_parentheses의 기본값을 true로 변경했습니다(https://github.com/ClickHouse/ClickHouse/pull/59532 참조). 이 변경으로 24.3 이전 클러스터와의 복제가 중단됩니다. 이전 릴리스를 사용하는 클러스터를 업그레이드하는 경우 서버 구성에서 이 설정을 끄거나 먼저 24.3으로 업그레이드하십시오. #75302 (Raúl Marín).
  • 정규식을 사용한 로그 메시지 필터링 기능을 제거했습니다. 구현 과정에서 데이터 레이스가 발생했기 때문에 제거해야 합니다. #75577 (János Benjamin Antal).
  • 이제 min_chunk_bytes_for_parallel_parsing 설정값은 0일 수 없습니다. 이 변경으로 #71110이 수정됩니다. #75239 (Nikita Mikhaylov).
  • 캐시 구성의 설정 유효성을 검사합니다. 이전에는 존재하지 않는 설정이 무시되었지만, 이제는 오류를 발생시키므로 제거해야 합니다. #75452 (Kseniia Sumarokova).

새로운 기능

  • Nullable(JSON) 타입을 지원합니다. #73556 (Pavel Kruglov).
  • DEFAULT 및 MATERIALIZED 표현식에서 서브컬럼을 지원합니다. #74403 (Pavel Kruglov).
  • output_format_parquet_write_bloom_filter 설정을 사용해 Parquet 블룸 필터를 기록할 수 있습니다(기본적으로 활성화됨). #71681 (Michael Kolupaev).
  • 웹 UI에서 이제 대화형 데이터베이스 탐색을 사용할 수 있습니다. #75777 (Alexey Milovidov).
  • 스토리지 정책에서 읽기 전용 디스크와 읽기-쓰기 디스크를 함께 조합할 수 있습니다(여러 볼륨 또는 여러 디스크 형태). 이를 통해 전체 볼륨에서 데이터를 읽을 수 있으며, 삽입은 쓰기 가능한 디스크를 우선 사용합니다(즉, Copy-on-Write 스토리지 정책). #75862 (Azat Khuzhin).
  • 백업에서 테이블/데이터베이스를 즉시 ATTACH할 수 있는 새로운 데이터베이스 엔진 DatabaseBackup,을 추가했습니다. #75725 (Maksim Kita).
  • Postgres wire 프로토콜에서 prepared statements를 지원합니다. #75035 (scanhex12).
  • 데이터베이스 레이어 없이 테이블을 ATTACH하는 기능을 추가했습니다. 이 기능은 Web, S3 및 이와 유사한 외부 가상 파일 시스템에 있는 MergeTree 테이블에 유용합니다. #75788 (Azat Khuzhin).
  • 두 문자열의 일부를 비교하는 새로운 문자열 비교 함수 compareSubstrings를 추가했습니다. 예시: SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result 는 “첫 번째 문자열의 오프셋 0과 두 번째 문자열의 오프셋 5부터 시작해 문자열 ‘Saxon’과 ‘Anglo-Saxon’의 6바이트를 사전식으로 비교한다”는 뜻입니다. #74070 (lgbo).
  • 새로운 함수 initialQueryStartTime이 추가되었습니다. 이 함수는 현재 쿼리의 시작 시간을 반환합니다. 분산 쿼리 동안에는 모든 세그먼트에서 값이 동일합니다. #75087 (Roman Lomonosov).
  • MySQL용 명명된 컬렉션과 함께 SSL 인증을 지원합니다. #59111을 해결합니다. #59452 (Nikolay Degterinsky).

실험적 기능

  • 동일한 쿼리에서 여러 Grace JOIN의 총 메모리 사용량을 모니터링하고, MEMORY_LIMIT_EXCEEDED를 방지하기 위해 외부 스토리지로 적응적으로 스필할 수 있도록 하는 새로운 설정 enable_adaptive_memory_spill_scheduler가 추가되었습니다. #72728 (lgbo).
  • 새로운 실험적 Kafka 테이블 엔진이 Keeper 기능 플래그를 완전히 따르도록 개선했습니다. #76004 (János Benjamin Antal).
  • 라이선스 문제로 v24.10에서 제거되었던 (Intel) QPL 코덱을 복원했습니다. #76021 (Konstantin Bogdanov).
  • HDFS 통합에 dfs.client.use.datanode.hostname 구성 옵션 지원이 추가되었습니다. #74635 (Mikhail Tiukavkin).

성능 개선

  • S3의 Wide 파트에서 전체 JSON 컬럼 읽기 성능을 개선했습니다. 서브컬럼 프리픽스 역직렬화를 위한 프리페치 추가, 역직렬화된 프리픽스 캐시, 서브컬럼 프리픽스의 병렬 역직렬화를 통해 구현되었습니다. 그 결과 SELECT data FROM table와 같은 쿼리에서는 S3의 JSON 컬럼 읽기 속도가 4배, SELECT data FROM table LIMIT 10와 같은 쿼리에서는 약 10배 향상됩니다. #74827 (Pavel Kruglov).
  • max_rows_in_join = max_bytes_in_join = 0일 때 parallel_hash에서 발생하던 불필요한 경합을 수정했습니다. #75155 (Nikita Taranov).
  • 옵티마이저가 조인 양측을 스왑할 때 ConcurrentHashJoin에서 발생하던 이중 사전 할당을 수정했습니다. #75149 (Nikita Taranov).
  • 일부 조인 시나리오의 성능을 소폭 개선했습니다. 출력 행 수를 미리 계산하고 그에 맞는 메모리를 예약합니다. #75376 (Alexander Gololobov).
  • WHERE a < b AND b < c AND c < 5와 같은 쿼리에서는 더 나은 필터링을 위해 새로운 비교 조건(a < 5 AND b < 5)을 추론할 수 있습니다. #73164 (Shichao Jin).
  • Keeper 개선: 성능 향상을 위해 인메모리 스토리지에 커밋할 때는 digest 계산을 비활성화했습니다. keeper_server.digest_enabled_on_commit 설정으로 활성화할 수 있습니다. 요청 전처리 시에는 여전히 digest를 계산합니다. #75490 (Antonio Andelic).
  • 가능한 경우 JOIN ON의 filter 표현식을 푸시다운합니다. #75536 (Vladimir Cherkasov).
  • MergeTree에서 컬럼과 인덱스 크기를 지연 계산합니다. #75938 (Pavel Kruglov).
  • MATERIALIZE TTL에서 ttl_only_drop_parts를 다시 준수하도록 했습니다. TTL 재계산에 필요한 컬럼만 읽고, 파트를 빈 파트로 교체해 삭제합니다. #72751 (Andrey Zvonov).
  • plain_rewritable 메타데이터 파일의 쓰기 버퍼 크기를 줄였습니다. #75758 (Julia Kartseva).
  • 일부 윈도우 함수의 메모리 사용량을 줄였습니다. #65647 (lgbo).
  • Parquet 블룸 필터와 min/max 인덱스를 함께 평가합니다. 이는 data = [1, 2, 4, 5]일 때 x = 3 or x > 5를 올바르게 지원하는 데 필요합니다. #71383 (Arthur Passos).
  • Executable 스토리지에 전달되는 쿼리는 더 이상 단일 스레드 실행으로 제한되지 않습니다. #70084 (yawnt).
  • ALTER TABLE FETCH PARTITION에서 파트를 병렬로 가져옵니다(스레드 풀 크기는 max_fetch_partition_thread_pool_size로 제어합니다). #74978 (Azat Khuzhin).
  • indexHint 함수를 사용하는 프레디케이트를 PREWHERE로 이동할 수 있도록 했습니다. #74987 (Anton Popov).

개선

  • LowCardinality 컬럼의 메모리 크기 계산을 수정했습니다. #74688 (Nikita Taranov).
  • processors_profile_log 테이블에는 이제 TTL 30일의 기본 구성이 적용됩니다. #66139 (Ilya Yatsishin).
  • 클러스터 구성에서 세그먼트에 이름을 지정할 수 있습니다. #72276 (MikhailBurdukov).
  • Prometheus 원격 쓰기 응답의 성공 상태 코드를 200/OK에서 204/NoContent로 변경합니다. #74170 (Michael Dempsey).
  • 서버를 재시작하지 않고도 max_remote_read_network_bandwidth_for_servemax_remote_write_network_bandwidth_for_server를 실행 중에 다시 로드할 수 있는 기능이 추가되었습니다. #74206 (Kai Zhu).
  • 백업 생성 시 blob 경로를 사용해 체크섬을 계산할 수 있습니다. #74729 (Vitaly Baranov).
  • system.query_cache에 쿼리 ID 컬럼을 추가했습니다(#68205 해결). #74982 (NamHoaiNguyen).
  • KILL QUERY를 사용하거나 시간 제한(max_execution_time)에 따라 자동으로 ALTER TABLE ... FREEZE ... 쿼리를 취소할 수 있습니다. #75016 (Kirill).
  • SimpleAggregateFunction에서 groupUniqArrayArrayMap을 지원하도록 추가했습니다. #75034 (Miel Donkers).
  • 데이터베이스 엔진 Iceberg에서 카탈로그 자격 증명 설정을 숨기도록 했습니다. #74559를 해결합니다. #75080 (Kseniia Sumarokova).
  • intExp2 / intExp10: 정의되지 않은 동작을 명시합니다. 인수가 너무 작으면 0을 반환하고, 너무 크면 18446744073709551615를 반환하며, nan이면 예외를 발생시킵니다. #75312 (Vitaly Baranov).
  • DatabaseIceberg의 카탈로그 설정에서 s3.endpoint를 네이티브로 지원합니다. #74558를 해결했습니다. #75375 (Kseniia Sumarokova).
  • SYSTEM DROP REPLICA를 실행하는 사용자에게 필요한 권한이 충분하지 않을 때 아무런 알림 없이 실패하지 않도록 했습니다. #75377 (Bharat Nallan).
  • 시스템 logs 중 하나라도 플러시에 실패한 횟수를 나타내는 ProfileEvent를 추가했습니다. #75466 (Alexey Milovidov).
  • 복호화 및 압축 해제 시 검사를 추가하고 로깅을 강화했습니다. #75471 (Vitaly Baranov).
  • parseTimeDelta 함수에 마이크로 기호(U+00B5) 지원이 추가되었습니다. 이제 마이크로 기호(U+00B5)와 그리스 문자 뮤(U+03BC) 모두 마이크로초를 나타내는 유효한 표기로 인식되며, 이에 따라 ClickHouse의 동작이 Go 구현과 일치합니다(time.go 참조time/format.go). #75472 (Vitaly Orlov).
  • 클라이언트 측 코드(예: INSERT 데이터 파싱 및 쿼리 출력 포맷팅)에서 서버의 users.xml 및 사용자 프로필의 설정을 사용할지 여부를 제어하는 클라이언트 설정(apply_settings_from_server)으로 서버 설정(send_settings_to_client)을 대체했습니다. 그렇지 않으면 클라이언트 명령줄, 세션, 쿼리의 설정만 사용합니다. 이는 네이티브 클라이언트에만 적용되며(예: HTTP에는 적용되지 않음), 쿼리 처리의 대부분(서버에서 수행됨)에는 적용되지 않습니다. #75478 (Michael Kolupaev).
  • 구문 오류에 대한 오류 메시지가 개선되었습니다. 이전에는 쿼리가 너무 크고, 길이 제한을 초과한 token이 매우 긴 문자열 리터럴인 경우 원인에 대한 메시지가 그 매우 긴 token의 두 예시 사이에 묻혀 보이지 않았습니다. 오류 메시지에서 UTF-8이 포함된 쿼리가 잘못 잘리는 문제를 수정했습니다. 쿼리 조각에 따옴표가 과도하게 붙는 문제를 수정했습니다. 이로써 #75473이 해결되었습니다. #75561 (Alexey Milovidov).
  • 스토리지 S3(Azure)Queue에 profile events를 추가했습니다. #75618 (Kseniia Sumarokova).
  • 호환성을 위해 서버에서 클라이언트로 설정을 전송하는 기능을 비활성화했습니다(send_settings_to_client=false)(이 기능은 추후 사용성을 개선하기 위해 클라이언트 설정으로 다시 구현될 예정입니다). #75648 (Michael Kolupaev).
  • 백그라운드 스레드가 주기적으로 읽는 여러 소스의 정보를 사용해 내부 memory tracker를 보정할 수 있도록 memory_worker_correct_memory_tracker 설정을 추가했습니다. #75714 (Antonio Andelic).
  • 컬럼 normalized_query_hashsystem.processes에 추가합니다. 참고: normalizedQueryHash 함수로 즉시 쉽게 계산할 수 있지만, 이는 후속 변경을 대비해 필요합니다. #75756 (Alexey Milovidov).
  • 더 이상 존재하지 않는 데이터베이스를 대상으로 생성된 Merge 테이블이 있어도 system.tables를 쿼리할 때 예외가 발생하지 않습니다. 복잡한 작업을 수행하지 못하도록 Hive 테이블에서 getTotalRows 메서드를 제거합니다. #75772 (Alexey Milovidov).
  • Backup의 start_time/end_time을 마이크로초 단위까지 저장합니다. #75929 (Aleksandr Musorin).
  • RSS로 보정되지 않은 내부 전역 메모리 트래커의 값을 나타내는 MemoryTrackingUncorrected 메트릭을 추가했습니다. #75935 (Antonio Andelic).
  • PostgreSQL 또는 MySQL 테이블 함수에서 localhost:1234/handle과 같은 엔드포인트를 파싱할 수 있도록 했습니다. 이는 https://github.com/ClickHouse/ClickHouse/pull/52503 에서 도입된 회귀 문제를 수정합니다. #75944 (Nikita Mikhaylov).
  • 알 수 없는 값으로 설정된 workload 설정이 있는 쿼리의 동작을 선택할 수 있는 서버 설정 throw_on_unknown_workload가 추가되었습니다. 무제한 액세스를 허용(기본값)하거나 RESOURCE_ACCESS_DENIED 오류를 발생시키도록 설정할 수 있습니다. 이 설정은 모든 쿼리에서 workload scheduling을 사용하도록 강제할 때 유용합니다. #75999 (Sergei Trifonov).
  • 필요하지 않다면 ARRAY JOIN에서 서브컬럼을 getSubcolumn으로 재작성하지 않습니다. #76018 (Pavel Kruglov).
  • 테이블을 로드하는 중 coordination 오류가 발생하면 재시도합니다. #76020 (Alexander Tokmakov).
  • SYSTEM FLUSH LOGS에서 개별 로그를 플러시할 수 있도록 지원합니다. #76132 (Raúl Marín).
  • /binary server 페이지를 개선했습니다. Morton curve 대신 Hilbert curve를 사용하도록 변경했습니다. 정사각형에 512 MB 분량의 주소를 표시해 정사각형이 더 잘 채워지도록 했습니다(이전 버전에서는 주소가 정사각형의 절반만 채웠습니다). 주소 색상은 함수 이름보다 라이브러리 이름에 더 가깝게 지정했습니다. 영역 바깥쪽으로도 조금 더 스크롤할 수 있게 했습니다. #76192 (Alexey Milovidov).
  • TOO_MANY_SIMULTANEOUS_QUERIES 오류 발생 시 ON CLUSTER 쿼리를 재시도합니다. #76352 (Patrick Galbraith).
  • 서버의 상대적인 CPU 부족량을 계산하는 비동기 메트릭 CPUOverload를 추가했습니다. #76404 (Alexey Milovidov).
  • output_format_pretty_max_rows의 기본값을 10000에서 1000으로 변경했습니다. 사용성 면에서 이 편이 더 낫다고 생각합니다. #76407 (Alexey Milovidov).

버그 수정(공식 안정 릴리스에서 사용자에게 드러나는 오동작)

  • 쿼리 해석 중 예외가 발생할 경우, 지정된 사용자 정의 포맷으로 예외가 출력되도록 수정했습니다. 이전 버전에서는 쿼리에 지정한 포맷이 아니라 기본 포맷으로 예외가 출력되었습니다. 이 변경으로 #55422가 해결되었습니다. #74994 (Alexey Milovidov).
  • SQLite의 타입 매핑을 수정(integer 타입은 int64로, 부동소수점 타입은 float64로). #73853 (Joanna Hulboj).
  • 상위 스코프에서의 식별자 해석을 수정했습니다. WITH 절에서 표현식에 별칭을 사용하는 것을 허용합니다. #58994를 수정했습니다. #62946를 수정했습니다. #63239를 수정했습니다. #65233를 수정했습니다. #71659를 수정했습니다. #71828를 수정했습니다. #68749를 수정했습니다. #66143 (Dmitry Novik).
  • negate 함수의 단조성 문제를 수정했습니다. 이전 버전에서는 x가 프라이머리 키인 경우 쿼리 select * from a where -x = -42;가 잘못된 결과를 반환할 수 있습니다. #71440 (Michael Kolupaev).
  • arrayIntersect의 빈 Tuple 처리 문제를 수정했습니다. 이 수정으로 #72578가 해결됩니다. #72581 (Amos Bird).
  • 잘못된 접두사가 있는 JSON 하위 객체 서브컬럼을 읽는 문제를 수정했습니다. #73182 (Pavel Kruglov).
  • 클라이언트-서버 통신에서 Native 형식 설정이 올바르게 전달되도록 수정했습니다. #73924 (Pavel Kruglov).
  • 일부 스토리지에서 지원되지 않는 타입을 검사합니다. #74218 (Pavel Kruglov).
  • macOS의 PostgreSQL 인터페이스에서 INSERT INTO SELECT 쿼리 실행 중 발생하던 충돌을 수정했습니다(이슈 #72938). #74231 (Artem Yurov).
  • 복제된 데이터베이스에서 초기화되지 않은 max_log_ptr를 수정했습니다. #74336 (Konstantin Morozov).
  • 인터벌 삽입 시 발생하던 비정상 종료를 수정했습니다(이슈 #74299). #74478 (NamHoaiNguyen).
  • 상수 JSON 리터럴 포맷팅을 수정했습니다. 이전에는 쿼리를 다른 서버로 전송할 때 구문 오류가 발생할 수 있었습니다. #74533 (Pavel Kruglov).
  • 암시적 프로젝션이 활성화된 상태에서 상수 파티션 표현식을 사용할 때 CREATE 쿼리가 잘못 생성되던 문제를 수정했습니다. 이 수정으로 #74596 문제가 해결됩니다. #74634 (Amos Bird).
  • INSERT가 예외와 함께 종료된 후 연결이 깨진 상태로 남는 문제를 방지합니다. #74740 (Azat Khuzhin).
  • 중간 상태에 남아 있던 연결은 재사용하지 않도록 했습니다. #74749 (Azat Khuzhin).
  • 타입 이름이 대문자가 아닐 경우 JSON 타입 선언을 구문 분석하는 중 발생하던 충돌을 수정했습니다. #74784 (Pavel Kruglov).
  • Keeper: 연결이 설정되기 전에 이미 종료된 경우 발생하던 logical_error를 수정했습니다. #74844 (Michael Kolupaev).
  • AzureBlobStorage를 사용하는 테이블(table)이 있을 때 서버가 시작되지 않던 문제를 수정했습니다. 이제 Azure에 요청을 보내지 않고도 테이블을 로드합니다. #74880 (Alexey Katsman).
  • BACKUP 및 RESTORE 작업에서 query_logused_privilegesmissing_privileges 필드가 누락되던 문제를 수정했습니다. #74887 (Alexey Katsman).
  • HDFS SELECT 요청 중 SASL 오류가 발생하면 HDFS krb 티켓을 갱신합니다. #74930 (inv2004).
  • startup_scripts의 복제된 데이터베이스 관련 쿼리를 수정했습니다. #74942 (Azat Khuzhin).
  • null-safe 비교를 사용할 때 JOIN ON 절에서 별칭 처리된 표현식 유형과 관련된 문제를 수정했습니다. #74970 (Vladimir Cherkasov).
  • remove 작업이 실패한 경우 part의 state를 deleting에서 다시 outdated로 되돌립니다. #74985 (Sema Checherinda).
  • 이전 버전에서는 스칼라 서브쿼리가 있을 때 HTTP headers가 기록되기 전에 수행되는 데이터 포맷 초기화 중에 (서브쿼리 처리에서 누적된) 진행 정보를 기록하기 시작했습니다. 이로 인해 X-ClickHouse-QueryId, X-ClickHouse-Format, Content-Type과 같은 HTTP headers가 손실되었습니다. #74991 (Alexey Milovidov).
  • database_replicated_allow_replicated_engine_arguments=0으로 설정된 경우 CREATE TABLE AS... 쿼리를 수정했습니다. #75000 (Bharat Nallan).
  • INSERT 중 예외 발생 후 클라이언트 연결이 비정상 상태로 남는 문제를 수정했습니다. #75030 (Azat Khuzhin).
  • PSQL 복제에서 잡히지 않은 예외로 인해 발생하던 충돌을 수정했습니다. #75062 (Azat Khuzhin).
  • Sasl은 어떤 RPC 호출에서도 실패할 수 있으며, 이 수정으로 krb5 티켓이 만료된 경우 해당 호출을 재시도할 수 있습니다. #75063 (inv2004).
  • optimize_function_to_subcolumns 설정이 활성화된 경우 Array, Map, Nullable(..) 컬럼에서 인덱스(프라이머리 및 세컨더리) 사용이 수정되었습니다. 이전에는 이러한 컬럼의 인덱스가 무시될 수 있었습니다. #75081 (Anton Popov).
  • 내부 테이블이 있는 materialized view를 생성할 때는 flatten_nested를 비활성화하십시오. 그렇지 않으면 이렇게 평탄화된 컬럼을 사용할 수 없습니다. #75085 (Christoph Wurm).
  • forwarded_for 필드의 일부 IPv6 주소(예: ::ffff:1.1.1.1)가 잘못 해석되어 예외가 발생하면서 클라이언트 연결이 끊어지던 문제를 수정했습니다. #75133 (Yakov Olkhovskiy).
  • LowCardinality의 널 허용 데이터 타입에 대한 nullsafe JOIN 처리를 수정했습니다. 이전에는 IS NOT DISTINCT FROM, <=>, a IS NULL AND b IS NULL OR a == b와 같은 nullsafe 비교를 사용하는 JOIN ON 절이 LowCardinality 컬럼에서 올바르게 동작하지 않았습니다. #75143 (Vladimir Cherkasov).
  • NumRowsCache의 total_number_of_rows를 계산할 때 key_condition이 지정되지 않았는지 확인합니다. #75164 (Daniil Ivanik).
  • 새 분석기에서 사용되지 않는 보간이 포함된 쿼리 문제를 수정했습니다. #75173 (János Benjamin Antal).
  • Insert가 포함된 CTE에서 발생하던 충돌 버그를 수정했습니다. #75188 (Shichao Jin).
  • Keeper 수정: 로그를 롤백할 때 손상된 changelog에 기록하지 않도록 했습니다. #75197 (Antonio Andelic).
  • 적절한 경우 BFloat16을 상위 타입(supertype)으로 사용합니다. 이 변경으로 다음 이슈가 해결됩니다: #74404. #75236 (Nikita Mikhaylov).
  • any_join_distinct_right_table_keys 및 JOIN ON의 OR 연산에서 JOIN 결과의 예상치 못한 기본값 문제를 수정했습니다. #75262 (Vladimir Cherkasov).
  • azureblobstorage 테이블 엔진의 자격 증명을 마스킹합니다. #75319 (Garrett Thomas).
  • ClickHouse가 PostgreSQL, MySQL, SQLite 같은 외부 데이터베이스에 필터 pushdown을 잘못 적용할 수 있던 문제를 수정했습니다. 이로써 다음 이슈가 해결되었습니다: #71423. #75320 (Nikita Mikhaylov).
  • Protobuf 형식으로 출력하는 도중과 병렬 쿼리 SYSTEM DROP FORMAT SCHEMA CACHE 실행 중에 발생할 수 있는 Protobuf 스키마 캐시 충돌을 수정했습니다. #75357 (Pavel Kruglov).
  • 병렬 레플리카 사용 시 HAVING의 필터가 푸시다운되면 발생할 수 있는 논리 오류 또는 초기화되지 않은 메모리 문제를 수정했습니다. #75363 (Vladimir Cherkasov).
  • icebergS3, icebergAzure 테이블 함수 및 테이블 엔진에서 민감한 정보를 숨기도록 개선했습니다. #75378 (Kseniia Sumarokova).
  • TRIM 함수에서 계산 결과가 빈 문자열인 트림 문자가 이제 올바르게 처리됩니다. 예시: SELECT TRIM(LEADING concat('') FROM 'foo') (Issue #69922). #75399 (Manish Gill).
  • IOutputFormat의 데이터 레이스 문제를 수정했습니다. #75448 (Pavel Kruglov).
  • Array 유형의 JSON 서브컬럼을 분산 테이블에 대한 JOIN에 사용할 때 발생할 수 있는 오류 Elements ... and ... of Nested data structure ... (Array columns) have different array sizes를 수정했습니다. #75512 (Pavel Kruglov).
  • CODEC(ZSTD, DoubleDelta) 사용 시 발생하던 데이터 손상을 수정했습니다. #70031 문제를 해결했습니다. #75548 (Konstantin Bogdanov).
  • allow_feature_tier와 compatibility MergeTree 설정 간의 상호작용을 수정했습니다. #75635 (Raúl Marín).
  • 파일이 재시도된 경우 system.s3queue_log의 processed_rows 값이 잘못 기록되는 문제를 수정했습니다. #75666 (Kseniia Sumarokova).
  • materialized view가 URL 엔진에 기록하는 중 연결 문제가 발생할 경우 materialized_views_ignore_errors가 적용되도록 수정했습니다. #75679 (Christoph Wurm).
  • 서로 다른 타입의 컬럼 간에 여러 비동기 RENAME 쿼리(alter_sync = 0 사용)를 수행한 뒤 MergeTree 테이블을 읽는 과정에서 드물게 발생하던 크래시를 수정했습니다. #75693 (Anton Popov).
  • UNION ALL 사용 시 일부 쿼리에서 발생하던 Block structure mismatch in QueryPipeline stream 오류를 수정했습니다. #75715 (Nikolai Kochetov).
  • PK 컬럼을 alter modify할 때 해당 프로젝션을 다시 빌드하도록 수정했습니다. 이전에는 프로젝션 PK에 사용된 컬럼을 alter modify한 후 select를 수행하면 CANNOT_READ_ALL_DATA 오류가 발생할 수 있었습니다. #75720 (Pavel Kruglov).
  • 분석기 사용 시 스칼라 서브쿼리에서 ARRAY JOIN 결과가 잘못되던 문제를 수정했습니다. #75732 (Nikolai Kochetov).
  • DistinctSortedStreamTransform에서 널 포인터 역참조 문제를 수정했습니다. #75734 (Nikita Taranov).
  • allow_suspicious_ttl_expressions의 동작을 수정했습니다. #75771 (Aleksei Filatov).
  • 함수 translate에서 초기화되지 않은 메모리 읽기를 수정했습니다. 이로써 #75592가 해결되었습니다. #75794 (Alexey Milovidov).
  • Native 형식에서 문자열 포맷팅으로 처리되는 JSON에 포맷 설정이 전파되도록 했습니다. #75832 (Pavel Kruglov).
  • 설정 변경 이력에 v24.12에서 parallel hash가 기본 조인 알고리즘으로 활성화되었음을 기록했습니다. 즉, v24.12보다 이전 호환성 수준이 구성된 경우 ClickHouse는 계속 non-parallel hash를 사용해 조인을 수행합니다. #75870 (Robert Schulze).
  • 자동으로 추가된 min-max 인덱스가 있는 테이블을 새 테이블에 복사할 수 없던 버그를 수정했습니다(이슈 #75677). #75877 (Smita Kulkarni).
  • clickhouse-library-bridge는 파일 시스템에서 임의의 라이브러리를 열 수 있으므로, 격리된 환경 내에서만 실행하는 것이 안전합니다. clickhouse-library-bridge가 clickhouse-server와 가까운 환경에서 실행될 때 발생할 수 있는 취약점을 방지하기 위해, 라이브러리 경로를 구성에 지정된 위치로 제한합니다. 이 취약점은 Arseniy DuginClickHouse Bug Bounty Program을 통해 발견했습니다. #75954 (Alexey Milovidov).
  • 일부 메타데이터에 JSON serialization을 사용했는데, 이는 실수였습니다. JSON은 문자열 리터럴 안에서 0바이트를 포함한 binary data를 지원하지 않기 때문입니다. SQL 쿼리에는 binary data와 유효하지 않은 UTF-8이 포함될 수 있으므로, 메타데이터 파일도 이를 지원해야 합니다. 한편 ClickHouse의 JSONEachRow 및 유사한 포맷은 binary data를 손실 없이 완전히 roundtrip할 수 있도록 JSON 표준에서 일부 벗어나는 방식을 사용합니다. 배경은 여기에서 확인할 수 있습니다: https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790. 해결 방법은 Poco::JSON library가 ClickHouse의 JSON 포맷 serialization과 일관되도록 하는 것입니다. 이 변경으로 #73668이 해결되었습니다. #75963 (Alexey Milovidov).
  • S3Queue 스토리지의 커밋 제한 검사 로직 수정. #76104 (Kseniia Sumarokova).
  • 자동 인덱스(add_minmax_index_for_numeric_columns/add_minmax_index_for_string_columns)가 있는 MergeTree 테이블을 ATTACH할 때 발생하던 문제를 수정했습니다. #76139 (Azat Khuzhin).
  • job의 부모 스레드에서 스택 트레이스(enable_job_stack_trace 설정)가 출력되지 않던 문제를 수정했습니다. enable_job_stack_trace 설정이 스레드에 올바르게 전파되지 않아 스택 트레이스 내용이 이 설정을 항상 반영하지 않던 문제를 수정했습니다. #76191 (Yakov Olkhovskiy).
  • ALTER RENAMECREATE USER grant가 필요하다고 잘못 확인하던 권한 검사 문제를 수정했습니다. #74372를 해결했습니다. #76241 (pufit).
  • 빅 엔디언 아키텍처에서 FixedString 사용 시 reinterpretAs 문제를 수정했습니다. #76253 (Azat Khuzhin).
  • S3Queue의 논리 오류 “현재 processor 는 버킷 에 대해 와 같아야 합니다”를 수정했습니다. #76358 (Kseniia Sumarokova).
  • Memory 데이터베이스에서 ALTER 시 발생하던 교착 상태를 수정했습니다. #76359 (Azat Khuzhin).
  • WHEREpointInPolygon 함수가 있는 조건식이 포함된 경우 인덱스 분석의 논리 오류를 수정했습니다. #76360 (Anton Popov).
  • signal handler 내의 잠재적으로 안전하지 않은 호출을 수정했습니다. #76549 (Yakov Olkhovskiy).
  • PartsSplitter의 reverse key 지원 문제를 수정했습니다. 이로써 #73400 문제가 해결됩니다. #73418 (Amos Bird).

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

  • ARM 및 Intel 기반 Mac 모두에서 HDFS 빌드를 지원합니다. #74244 (Yan Xin).
  • Darwin용 크로스 컴파일 시 ICU와 GRPC를 활성화합니다. #75922 (Raúl Marín).
  • 내장 LLVM 19로 업데이트했습니다. #75148 (Konstantin Bogdanov).
  • Docker image에서 default 사용자의 네트워크 접근을 비활성화합니다. #75259 (Mikhail f. Shiryaev). 모든 clickhouse-server 관련 작업을 함수로 만들고, entrypoint.sh에서 기본 바이너리를 시작할 때만 실행하도록 했습니다. 오래 미뤄졌던 이 개선은 #50724에서 제안되었습니다. users.xml에서 값을 가져오기 위한 --users 스위치를 clickhouse-extract-from-config에 추가했습니다. #75643 (Mikhail f. Shiryaev).
  • 바이너리에서 약 20MB의 불필요한 코드를 제거했습니다. #76226 (Alexey Milovidov).

ClickHouse 25.1 릴리스, 2025-01-28

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

  • JSONEachRowWithProgress는 진행 상황이 갱신될 때마다 이를 기록합니다. 이전 버전에서는 결과의 각 block 뒤에서만 진행 상황이 표시되어 사실상 쓸모가 없었습니다. 진행 상황 표시 방식도 변경되어 이제 0 값은 표시되지 않습니다. 이 변경으로 #70800이 해결되었습니다. #73834 (Alexey Milovidov).
  • Merge 테이블은 컬럼의 union을 사용하고 공통 타입을 도출하여 기반 테이블의 구조를 통합합니다. 이 변경으로 #64864가 해결되었습니다. 특정 경우에는 이 변경이 하위 호환되지 않을 수 있습니다. 예를 들어 테이블 간 공통 타입은 없지만 첫 번째 테이블의 타입으로는 여전히 변환할 수 있는 경우가 있으며, UInt64와 Int64 또는 임의의 숫자 타입과 String 조합이 이에 해당합니다. 이전 동작으로 되돌리려면 merge_table_max_tables_to_look_for_schema_inference1로 설정하거나 compatibility24.12 또는 그 이전으로 설정하십시오. #73956 (Alexey Milovidov).
  • Parquet 출력 형식은 Date 및 DateTime 컬럼을 원시 숫자로 기록하는 대신 Parquet가 지원하는 날짜/시간 타입으로 변환합니다. DateTimeDateTime64(3)이 됩니다(이전: UInt32). output_format_parquet_datetime_as_uint32 설정을 사용하면 이전 동작으로 되돌릴 수 있습니다. DateDate32가 됩니다(이전: UInt16). #70950 (Michael Kolupaev).
  • 기본적으로 ORDER BY 및 비교 함수 less/greater/equal/etc에서는 비교할 수 없는 타입(JSON/Object/AggregateFunction 등)을 허용하지 않습니다. #73276 (Pavel Kruglov).
  • 더 이상 사용되지 않는 MaterializedMySQL 데이터베이스 엔진이 제거되어 이제 사용할 수 없습니다. #73879 (Alexey Milovidov).
  • mysql 딕셔너리 소스는 더 이상 SHOW TABLE STATUS 쿼리를 수행하지 않습니다. 최근 MySQL 버전의 InnoDB 테이블에서는 이 쿼리가 아무런 유용한 정보를 제공하지 않기 때문입니다. 이 변경으로 #72636이 해결되었습니다. 이 변경은 하위 호환되지만, 사용자가 알아차릴 수 있도록 이 범주에 포함했습니다. #73914 (Alexey Milovidov).
  • 이제 CHECK TABLE 쿼리에는 별도의 CHECK grant가 필요합니다. 이전 버전에서는 이러한 쿼리를 실행하려면 SHOW TABLES grant만으로 충분했습니다. 하지만 CHECK TABLE 쿼리는 부담이 클 수 있으며, SELECT 쿼리에 적용되는 일반적인 query complexity 제한도 적용되지 않습니다. 이로 인해 DoS가 발생할 가능성이 있었습니다. #74471 (Alexey Milovidov).
  • 함수 h3ToGeo()는 이제 결과를 (lat, lon) 순서로 반환합니다(이는 기하 함수의 표준 순서입니다). 기존 결과 순서인 (lon, lat)를 유지하려면 설정 h3togeo_lon_lat_result_order = true를 지정할 수 있습니다. #74719 (Manish Gill).
  • 이제 새로운 MongoDB driver가 기본값입니다. 기존 driver를 계속 사용하려면 서버 설정 use_legacy_mongodb_integration을 true로 설정할 수 있습니다. #73359 (Robert Schulze).

새로운 기능

  • SELECT 쿼리를 제출한 직후 실행하는 동안, 아직 완료되지 않은(백그라운드 프로세스에서 아직 구체화되지 않은) 뮤테이션을 즉시 적용할 수 있는 기능이 추가되었습니다. 이 기능은 apply_mutations_on_fly를 설정하여 활성화할 수 있습니다. #74877 (Anton Popov).
  • Iceberg에서 시간 관련 변환 파티션 연산에 대한 Iceberg 테이블의 파티션 프루닝을 구현했습니다. #72044 (Daniil Ivanik).
  • MergeTree 정렬 키와 스킵 인덱스에서 서브컬럼을 지원합니다. #72644 (Pavel Kruglov).
  • Apache Arrow/Parquet/ORC에서 HALF_FLOAT 값을 읽을 수 있도록 지원합니다(Float32로 읽어들입니다). 이로써 #72960이 해결되었습니다. IEEE-754 half float는 BFloat16과 같지 않다는 점에 유의하십시오. #73835를 해결합니다. #73836 (Alexey Milovidov).
  • system.trace_log 테이블에는 심볼화된 스택 트레이스를 담는 새로운 2개의 컬럼 symbolslines가 추가됩니다. 이를 통해 프로파일 정보의 수집 및 내보내기를 쉽게 수행할 수 있습니다. 이 동작은 trace_log 내부의 서버 구성 값 symbolize로 제어되며, 기본적으로 활성화되어 있습니다. #73896 (Alexey Milovidov).
  • 테이블에서 자동 증가 번호를 생성하는 데 사용할 수 있는 새 함수 generateSerialID를 추가했습니다. kazalika#64310을 이어 작업했습니다. 이로써 #62485가 해결됩니다. #73950 (Alexey Milovidov).
  • DDL 쿼리에 query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryN 구문이 추가되었습니다. 이는 서브쿼리 {query1, query2, ... queryN}를 서로 병렬로 실행할 수 있으며, 그렇게 하는 것이 권장된다는 의미입니다. #73983 (Vitaly Baranov).
  • 역직렬화된 스키핑 인덱스 그래뉼을 위한 인메모리 캐시가 추가되었습니다. 이를 통해 스키핑 인덱스를 사용하는 반복적인 쿼리의 속도가 더 빨라집니다. 새 캐시의 크기는 서버 설정 skipping_index_cache_sizeskipping_index_cache_max_entries로 제어됩니다. 이 캐시는 원래 벡터 유사성 인덱스의 성능 개선을 위해 도입되었으며, 그 결과 이제 해당 인덱스가 훨씬 더 빨라졌습니다. #70102 (Robert Schulze).
  • 이제 내장 Web UI는 쿼리 실행 중 진행률 표시줄을 표시합니다. 쿼리를 취소할 수도 있습니다. 총 레코드 수와 속도에 대한 추가 정보를 표시합니다. 데이터가 도착하는 즉시 테이블을 점진적으로 렌더링할 수 있습니다. HTTP 압축을 활성화했습니다. 테이블 렌더링이 더 빨라졌습니다. 테이블 헤더가 고정됩니다. 셀을 선택하고 화살표 키로 이동할 수 있습니다. 선택한 셀의 외곽선 때문에 셀이 더 작아지는 문제를 수정했습니다. 이제 셀은 마우스를 올렸을 때는 확장되지 않고 선택했을 때만 확장됩니다. 들어오는 데이터 렌더링을 언제 중지할지는 서버가 아니라 클라이언트에서 결정합니다. 숫자의 자릿수 구분을 강조 표시합니다. 전반적인 디자인을 새로 고쳐 더 대담해졌습니다. 서버에 연결 가능한지와 자격 증명이 올바른지 확인하고 서버 버전과 업타임을 표시합니다. 클라우드 아이콘은 Safari를 포함한 모든 글꼴에서 외곽선이 표시됩니다. 중첩된 데이터 타입의 큰 정수가 더 잘 렌더링됩니다. inf/nan을 올바르게 표시합니다. 마우스를 컬럼 헤더 위에 올리면 데이터 타입을 표시합니다. #74204 (Alexey Milovidov).
  • 숫자 컬럼에는 add_minmax_index_for_numeric_columns 설정을, 문자열 컬럼에는 add_minmax_index_for_string_columns 설정을 사용해, MergeTree가 관리하는 컬럼에 기본적으로 min-max(스키핑) 인덱스를 생성하는 기능이 추가되었습니다. 현재는 두 설정이 모두 비활성화되어 있으므로 아직 동작 변화는 없습니다. #74266 (Smita Kulkarni).
  • script_query_numberscript_line_number 필드를 system.query_log, 네이티브 프로토콜의 ClientInfo, 그리고 서버 로그에 추가했습니다. 이로써 #67542가 해결되었습니다. 제보: 앞서 #68133에서 이 기능을 먼저 시작한 pinsvin00. #74477 (Alexey Milovidov).
  • 패턴에서 가장 긴 이벤트 연쇄와 일치하는 이벤트의 타임스탬프를 반환하는 집계 함수 sequenceMatchEvents를 추가했습니다. #72349 (UnamedRus).
  • arrayNormalizedGini 함수가 추가되었습니다. #72823 (flynn).
  • DateTime64 값 간은 물론 DateTime과의 뺄셈도 가능하도록 DateTime64에 마이너스 연산자 지원을 추가했습니다. #74482 (Li Yin).

실험적 기능

  • BFloat16 데이터 타입은 정식 운영 환경에서 사용할 수 있습니다. #73840 (Alexey Milovidov).

성능 개선

  • 함수 indexHint를 최적화했습니다. 이제 indexHint 함수의 인수로만 사용되는 컬럼은 테이블에서 읽지 않습니다. #74314 (Anton Popov). indexHint 함수가 엔터프라이즈 데이터 아키텍처의 핵심 요소라면, 이 최적화가 큰 도움이 될 것입니다.
  • parallel_hash JOIN 알고리즘에서 max_joined_block_size_rows 설정이 더 정확하게 반영되도록 개선되었습니다. 이로써 hash 알고리즘과 비교했을 때 메모리 사용량이 증가하는 현상을 방지하는 데 도움이 됩니다. #74630 (Nikita Taranov).
  • 쿼리 계획 수준에서 MergingAggregated 단계에 대한 프레디케이트 push down 최적화를 지원합니다. 이를 통해 분석기를 사용하는 일부 쿼리의 성능이 향상됩니다. #74073 (Nikolai Kochetov).
  • 왼쪽 테이블 블록의 해시 기반 분할이 parallel_hash JOIN 알고리즘의 프로브 단계에서 제거되었습니다. #73089 (Nikita Taranov).
  • RowBinary 입력 형식을 최적화했습니다. #63805를 해결했습니다. #65059 (Pavel Kruglov).
  • optimize_on_insert가 활성화되면 파트를 레벨 1로 기록합니다. 이를 통해 새로 생성된 파트에 대해 FINAL이 포함된 쿼리에 여러 최적화를 적용할 수 있습니다. #73132 (Anton Popov).
  • 일부 저수준 최적화를 통해 문자열 역직렬화 속도를 개선했습니다. #65948 (Nikita Taranov).
  • 머지 시와 같이 레코드 간 동등성 비교를 수행할 때는, 서로 다를 가능성이 가장 높은 컬럼부터 행 비교를 시작합니다. #63780 (UnamedRus).
  • 키를 기준으로 오른쪽 조인 테이블을 다시 정렬해 grace hash join 성능을 개선했습니다. #72237 (kevinyhzou).
  • arrayROCAUCarrayAUCPR이 전체 곡선의 일부 면적을 계산할 수 있도록 지원하여, 매우 큰 데이터셋에서도 계산을 병렬화할 수 있게 했습니다. #72904 (Emmanuel).
  • 유휴 스레드가 너무 많이 생성되는 것을 방지했습니다. #72920 (Guo Wangyang).
  • 테이블 함수에서 중괄호 확장만 있는 경우에는 blob storage 키를 나열하지 않도록 했습니다. #73333을 해결했습니다. #73518 (Konstantin Bogdanov).
  • 널 허용 인수에서 실행되는 함수에 대한 단락 평가 최적화. #73820 (李扬).
  • 함수가 아닌 컬럼에는 maskedExecute를 적용하지 않도록 하고, 단락 평가 실행 성능을 개선했습니다. #73965 (lgbo).
  • 성능 향상을 위해 Kafka/NATS/RabbitMQ/FileLog의 입력 형식에서 헤더 자동 감지를 비활성화했습니다. #74006 (Azat Khuzhin).
  • grouping sets를 사용한 집계 후 파이프라인을 더 높은 수준의 병렬성으로 실행합니다. #74082 (Nikita Taranov).
  • MergeTreeReadPool의 크리티컬 섹션을 줄였습니다. #74202 (Guo Wangyang).
  • 병렬 레플리카 성능이 개선되었습니다. 이제 병렬 레플리카 프로토콜과 관련되지 않은 패킷의 역직렬화는 쿼리 initiator에서 항상 파이프라인 스레드에서 이루어집니다. 이전에는 파이프라인 스케줄링을 담당하는 스레드에서 이루어질 수 있었고, 이로 인해 initiator의 응답성이 떨어지며 파이프라인 실행이 지연될 수 있었습니다. #74398 (Igor Nikonov).
  • Keeper에서 대규모 멀티 요청의 성능을 개선했습니다. #74849 (Antonio Andelic).
  • 로그 래퍼는 값으로 사용하고 힙에는 할당하지 않도록 했습니다. #74034 (Mikhail Artemenko).
  • MySQL 및 Postgres 딕셔너리 레플리카에 대한 connection을 백그라운드에서 다시 설정해, 해당 딕셔너리에 대한 요청이 지연되지 않도록 했습니다. #71101 (Yakov Olkhovskiy).
  • 병렬 레플리카는 레플리카 선택을 개선하기 위해 레플리카 가용성에 대한 이력 정보를 사용했지만, connection을 사용할 수 없을 때는 레플리카의 오류 수를 갱신하지 않았습니다. 이 PR은 connection을 사용할 수 없을 때도 레플리카의 오류 수를 갱신하도록 합니다. #72666 (zoomxi).
  • 머지 시 스킵 인덱스 생성을 억제하는 MergeTree 설정 materialize_skip_indexes_on_merge가 추가되었습니다. 이를 통해 스킵 인덱스를 생성할 시점을(ALTER TABLE [..] MATERIALIZE INDEX [...]를 통해) 명시적으로 제어할 수 있습니다. 스킵 인덱스의 생성 비용이 큰 경우(예: 벡터 유사성 인덱스) 유용할 수 있습니다. #74401 (Robert Schulze).
  • Storage(S3/Azure)Queue의 Keeper 요청을 최적화했습니다. #74410 (Kseniia Sumarokova). #74538 (Kseniia Sumarokova).
  • 기본값으로 최대 1000개의 병렬 레플리카를 사용합니다. #74504 (Konstantin Bogdanov).
  • S3 디스크에서 읽을 때 HTTP 세션 재사용을 개선했습니다 (#72401). #74548 (Julian Maicher).

개선 사항

  • 암시적 ENGINE가 있는 CREATE TABLE 쿼리에서 SETTINGS를 지원하며, 엔진 설정과 쿼리 설정을 함께 사용할 수 있도록 지원합니다. #73120 (Raúl Marín).
  • use_hive_partitioning을 기본값으로 활성화했습니다. #71636 (Yarik Briukhovetskyi).
  • 매개변수가 서로 다른 JSON 타입 간 CAST 및 ALTER를 지원합니다. #72303 (Pavel Kruglov).
  • JSON 컬럼 값의 동등 비교를 지원합니다. #72991 (Pavel Kruglov).
  • 불필요한 백쿼트를 사용하지 않도록 JSON 서브컬럼이 포함된 식별자의 포맷을 개선했습니다. #73085 (Pavel Kruglov).
  • 대화형 메트릭이 개선되었습니다. 병렬 레플리카의 메트릭이 완전히 표시되지 않던 문제를 수정했습니다. 메트릭은 가장 최근 업데이트된 순서로 먼저 표시하고, 이후에는 이름의 사전식 순서로 표시합니다. 오래된 메트릭은 표시하지 않습니다. #71631 (Julia Kartseva).
  • 기본적으로 JSON 출력 형식을 보기 좋게 표시합니다. 이를 제어하기 위한 새로운 설정 output_format_json_pretty_print를 추가하고, 기본적으로 활성화했습니다. #72148 (Pavel Kruglov).
  • 기본적으로 LowCardinality(UUID)를 허용합니다. 이는 ClickHouse Cloud 고객 환경에서 실용적인 것으로 입증되었습니다. #73826 (Alexey Milovidov).
  • 설치 중 표시되는 메시지가 더 좋아졌습니다. #73827 (Alexey Milovidov).
  • ClickHouse Cloud 비밀번호 재설정 메시지를 개선했습니다. #73831 (Alexey Milovidov).
  • 파일에 데이터를 추가할 수 없는 File 테이블의 오류 메시지를 개선했습니다. #73832 (Alexey Milovidov).
  • 사용자가 터미널에서 바이너리 형식(예: Native, Parquet, Avro)으로 출력을 실수로 요청한 경우 확인 메시지를 표시합니다. 이로써 #59524가 해결되었습니다. #73833 (Alexey Milovidov).
  • 터미널에서 가독성을 높일 수 있도록 Pretty 및 Vertical 형식의 후행 공백을 강조 표시합니다. 이는 output_format_pretty_highlight_trailing_spaces 설정으로 제어됩니다. 초기 구현은 Braden Burns#72996에서 수행했습니다. #71590을 해결합니다. #73847 (Alexey Milovidov).
  • clickhouse-clientclickhouse-local은 stdin이 파일에서 리디렉션되면 입력 데이터의 압축을 자동으로 감지합니다. 이로써 #70865가 해결되었습니다. #73848 (Alexey Milovidov).
  • 기본적으로 Pretty 형식에서는 너무 긴 컬럼 이름을 잘라 표시합니다. 이는 output_format_pretty_max_column_name_width_cut_tooutput_format_pretty_max_column_name_width_min_chars_to_cut 설정으로 제어됩니다. 이는 tanmaydatta#66502에서 진행한 작업을 이어간 것입니다. 이로써 #65968이 해결되었습니다. #73851 (Alexey Milovidov).
  • Pretty 포맷의 가독성을 개선했습니다. 이전 블록이 출력된 지 얼마 지나지 않았다면 블록을 병합합니다. 이는 새로운 설정 output_format_pretty_squash_consecutive_ms(기본값 50 ms)와 output_format_pretty_squash_max_wait_ms(기본값 1000 ms)로 제어됩니다. #49537의 후속 작업입니다. 이로써 #49153가 해결되었습니다. #73852 (Alexey Milovidov).
  • 현재 병합 중인 소스 파트 수에 대한 메트릭을 추가했습니다. 이로써 #70809가 해결되었습니다. #73868 (Alexey Milovidov).
  • 출력이 터미널로 표시될 경우 Vertical 포맷에서 컬럼을 강조 표시합니다. 이는 output_format_pretty_color 설정으로 비활성화할 수 있습니다. #73898 (Alexey Milovidov).
  • MySQL 호환성이 한층 개선되어 이제 mysqlsh(Oracle에서 제공하는 강력한 MySQL CLI)로도 ClickHouse에 연결할 수 있습니다. 이는 테스트를 더 수월하게 수행하는 데 필요합니다. #73912 (Alexey Milovidov).
  • Pretty 형식은 테이블 셀 내에서 여러 줄 필드를 렌더링할 수 있어 가독성이 향상됩니다. 이 기능은 기본적으로 활성화되어 있으며, output_format_pretty_multiline_fields 설정으로 제어할 수 있습니다. Volodyachan#64094에서 진행한 작업을 이어받은 것입니다. 이로써 #56912가 종료됩니다. #74032 (Alexey Milovidov).
  • 브라우저에서 JavaScript가 X-ClickHouse HTTP 헤더에 접근할 수 있도록 노출했습니다. 이를 통해 애플리케이션을 더 편리하게 작성할 수 있습니다. #74180 (Alexey Milovidov).
  • JSONEachRowWithProgress 포맷에는 메타데이터가 포함된 이벤트와 함께 합계 및 극값도 포함됩니다. 또한 rows_before_limit_at_leastrows_before_aggregation도 포함됩니다. 이 포맷은 부분 결과가 먼저 출력된 뒤 예외가 도착하더라도 예외를 올바르게 출력합니다. 이제 진행 정보에는 경과한 나노초도 포함됩니다. 마지막에 최종 진행 이벤트가 1개 더 출력됩니다. 쿼리 런타임 중 진행 정보는 interactive_delay 설정값보다 더 짧은 간격으로 출력되지 않습니다. #74181 (Alexey Milovidov).
  • Play UI의 모래시계가 부드럽게 회전하도록 개선되었습니다. #74182 (Alexey Milovidov).
  • HTTP 응답이 압축되어 있더라도, 패킷이 도착하는 즉시 전송합니다. 이렇게 하면 브라우저가 Progress 패킷과 압축된 데이터를 받을 수 있습니다. #74201 (Alexey Milovidov).
  • 출력 레코드 수가 N = output_format_pretty_max_rows보다 많으면, 처음 N개 행만 표시하는 대신 출력 테이블의 중간을 생략하고 앞의 N/2개 행과 뒤의 N/2개 행을 표시합니다. #64200의 후속 작업입니다. 이 변경으로 #59502가 해결되었습니다. #73929 (Alexey Milovidov).
  • 해시 조인 알고리즘이 활성화된 경우, 더 범용적인 조인 계획 알고리즘을 사용할 수 있도록 했습니다. #71926 (János Benjamin Antal).
  • 데이터 타입이 DateTime64인 컬럼에 bloom_filter 인덱스를 생성할 수 있게 되었습니다. #66416 (Yutong Xiao).
  • min_age_to_force_merge_secondsmin_age_to_force_merge_on_partition_only가 모두 활성화된 경우, 파트 병합은 최대 바이트 제한을 무시합니다. #73656 (Kai Zhu).
  • 추적성을 강화하기 위해 OpenTelemetry 스팬 로그 테이블에 HTTP 헤더를 추가했습니다. #70516 (jonymohajanGmail).
  • 항상 GMT time zone으로만 쓰는 것이 아니라, 사용자 지정 time zone으로 orc 파일을 쓸 수 있도록 지원합니다. #70615 (kevinyhzou).
  • 여러 클라우드에 걸쳐 백업을 저장할 때 IO scheduling 설정을 준수합니다. #71093 (János Benjamin Antal).
  • system.asynchronous_metricsmetric 컬럼의 별칭 name을 추가했습니다. #71164 (megao).
  • 과거에는 어떤 이유에서인지 쿼리 ALTER TABLE MOVE PARTITION TO TABLE가 전용 ALTER_MOVE_PARTITION 대신 SELECTALTER DELETE 권한을 확인했습니다. 이 PR에서는 이 접근 유형을 사용하도록 했습니다. 호환성을 위해 SELECTALTER DELETE가 부여된 경우 이 권한도 암묵적으로 부여되지만, 이 동작은 향후 릴리스에서 제거될 예정입니다. #16403을 닫습니다. #71632 (pufit).
  • 정렬 순서가 깨지는 것을 허용하는 대신, 정렬 키의 컬럼을 구체화하려고 하면 예외를 발생시킵니다. #71891 (Peter Nguyen).
  • EXPLAIN QUERY TREE에서 민감한 정보를 숨기도록 개선했습니다. #72025 (Yakov Olkhovskiy).
  • “네이티브” 리더에서 Parquet의 정수 논리 타입을 지원합니다. #72105 (Arthur Passos).
  • 기본 사용자에 비밀번호가 설정된 경우, 브라우저에서 대화형으로 자격 증명을 요청합니다. 이전 버전에서는 server가 HTTP 403을 반환했지만, 이제는 HTTP 401을 반환합니다. #72198 (Alexey Milovidov).
  • 액세스 유형 CREATE_USER, ALTER_USER, DROP_USER, CREATE_ROLE, ALTER_ROLE, DROP_ROLE를 전역 방식에서 매개변수화된 방식으로 전환했습니다. 이제 액세스 관리 권한을 더 세밀하게 부여할 수 있습니다:. #72246 (pufit).
  • system.mutationslatest_fail_error_code_name 컬럼을 추가합니다. 이 컬럼은 정체된 뮤테이션에 대한 새 메트릭을 도입하고, 이를 사용해 클라우드에서 발생한 오류 그래프를 생성하며, 선택적으로 노이즈가 더 적은 새 알림을 추가하는 데 필요합니다. #72398 (Miсhael Stetsyuk).
  • ATTACH PARTITION 쿼리의 메모리 할당을 줄였습니다. #72583 (Konstantin Morozov).
  • max_bytes_before_external_sort 제한이 전체 쿼리 메모리 사용량을 기준으로 적용되도록 변경했습니다(이전에는 정렬 스레드 하나의 정렬 블록 바이트 수를 의미했지만, 이제는 max_bytes_before_external_group_by와 같은 의미로, 모든 스레드를 포함한 전체 쿼리 메모리의 총 제한을 뜻합니다). 또한 디스크상의 블록 크기를 제어하는 설정 min_external_sort_block_bytes도 추가했습니다. #72598 (Azat Khuzhin).
  • trace collector에 의한 메모리 제한을 무시합니다. #72606 (Azat Khuzhin).
  • system.server_settings에 서버 설정인 dictionaries_lazy_loadwait_dictionaries_load_at_startup을 추가했습니다. #72664 (Christoph Wurm).
  • BACKUP/RESTORE 쿼리에서 지정할 수 있는 설정 목록에 max_backup_bandwidth를 추가합니다. #72665 (Christoph Wurm).
  • 복제 클러스터에서 생성되는 로그 양을 줄이는 데 도움이 되도록 ReplicatedMergeTree 엔진에서 새로 생성되는 복제된 파트에 대한 로그 수준을 낮춤. #72876 (mor-akamai).
  • 논리합에서 공통 표현식 추출을 개선했습니다. 모든 논리합 항에 공통 부분 표현식이 없더라도 결과 필터 표현식을 단순화할 수 있도록 했습니다. #71537의 후속 작업입니다. #73271 (Dmitry Novik).
  • Storage S3Queue/AzureQueue에서는 설정 없이 생성된 테이블에도 설정을 추가할 수 있게 되었습니다. #73283 (Kseniia Sumarokova).
  • 함수 leastgreatestNULL 인수를 처리할 때 무조건 NULL을 반환할지(true), 아니면 이를 무시할지(false)를 제어하는 설정 least_greatest_legacy_null_behavior(기본값: false)를 도입했습니다. #73344 (Robert Schulze).
  • ObjectStorageQueueMetadata의 정리 스레드에서 Keeper 멀티 요청을 사용하도록 했습니다. #73357 (Antonio Andelic).
  • ClickHouse가 cgroup에서 실행되더라도 시스템 부하, 프로세스 스케줄링, 메모리 등과 관련된 시스템 전체의 비동기 메트릭은 계속 수집됩니다. 이러한 메트릭은 리소스 사용량이 높은 프로세스가 호스트에서 ClickHouse뿐인 경우 유용한 신호가 될 수 있습니다. #73369 (Nikita Taranov).
  • 스토리지 S3Queue에서 24.6 이전에 생성된 기존 ordered 테이블을 버킷이 있는 새 구조로 이전할 수 있게 되었습니다. #73467 (Kseniia Sumarokova).
  • 기존 system.s3queue와 유사한 system.azure_queue를 추가했습니다. #73477 (Kseniia Sumarokova).
  • 함수 parseDateTime64(및 그 변형)는 이제 1970년 이전 또는 2106년 이후의 입력 날짜에 대해서도 올바른 결과를 반환합니다. 예시: SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS'). #73594 (zhanglistar).
  • 사용자들이 제기한 clickhouse-disks의 일부 사용성 문제를 개선합니다. #67136를 닫습니다. #73616 (Daniil Ivanik).
  • S3(Azure)Queue 스토리지에서 커밋 설정을 변경할 수 있게 했습니다. (커밋 설정: max_processed_files_before_commit, max_processed_rows_before_commit, max_processed_bytes_before_commit, max_processing_time_sec_before_commit). #73635 (Kseniia Sumarokova).
  • S3(Azure)Queue 스토리지에서 커밋 한도 설정과 비교할 수 있도록 소스 간 진행률을 집계합니다. #73641 (Kseniia Sumarokova).
  • BACKUP/RESTORE 쿼리에서 핵심 설정 지원이 추가되었습니다. #73650 (Vitaly Baranov).
  • Parquet 출력 시 output_format_compression_level을 반영합니다. #73651 (Arthur Passos).
  • Apache Arrow의 fixed_size_list를 지원되지 않는 유형으로 처리하는 대신 Array로 읽도록 지원을 추가했습니다. #73654 (Julian Meyers).
  • 두 가지 백업 엔진을 추가했습니다: Memory(현재 사용자 세션 내에 백업을 보관) 및 Null(백업을 어디에도 보관하지 않음)이며, 테스트용입니다. #73690 (Vitaly Baranov).
  • concurrent_threads_soft_limit_numconcurrent_threads_soft_limit_num_ratio_to_cores는 서버를 재시작하지 않고도 변경할 수 있습니다. #73713 (Sergei Trifonov).
  • formatReadable 함수에 확장 숫자 타입(Decimal, 큰 정수) 지원을 추가했습니다. #73765 (Raúl Marín).
  • Postgres wire 프로토콜 호환성을 위한 TLS를 지원합니다. #73812 (scanhex12).
  • 함수 isIPv4String은 올바른 IPv4 주소 뒤에 0 바이트가 이어지는 경우 true를 반환했지만, 이런 경우에는 false를 반환해야 합니다. #65387의 후속 작업입니다. #73946 (Alexey Milovidov).
  • MySQL wire protocol의 오류 코드가 MySQL과 호환되도록 개선했습니다. #56831의 후속 작업입니다. #50957를 해결합니다. #73948 (Alexey Milovidov).
  • IN, NOT IN과 같은 연산자에서 enum 리터럴을 enum 타입에 대해 검증하고, 리터럴이 유효한 enum 값이 아니면 예외를 발생시키도록 설정 validate_enum_literals_in_opearators를 추가했습니다. #73985 (Vladimir Cherkasov).
  • Storage S3(Azure)Queue에서는 커밋 설정으로 정의된 단일 배치에 포함된 모든 파일을 하나의 Keeper 트랜잭션으로 커밋합니다. #73991 (Kseniia Sumarokova).
  • 실행형 UDF와 Dictionaries에 대한 헤더 감지를 비활성화합니다(이로 인해 Function ‘X’: 잘못된 결과, 예상 행 수는 Y개이지만 실제는 Y-1개인 문제가 발생할 수 있음). #73992 (Azat Khuzhin).
  • EXPLAIN PLAN.distributed 옵션이 추가되었습니다. 이제 EXPLAIN distributed=1 ... 을 사용하면 ReadFromParallelRemote* 단계에 원격 실행 계획이 추가됩니다. #73994 (Nikolai Kochetov).
  • Dynamic 인수와 함께 사용하는 not/xor에 올바른 반환 유형이 사용되도록 수정했습니다. #74013 (Pavel Kruglov).
  • 테이블 생성 후에도 add_implicit_sign_column_constraint_for_collapsing_engine을 변경할 수 있게 했습니다. #74014 (Christoph Wurm).
  • materialized view의 SELECT 쿼리에서 서브컬럼을 지원합니다. #74030 (Pavel Kruglov).
  • 이제 clickhouse-client에서 사용자 지정 프롬프트를 설정하는 간단한 방법이 3가지 있습니다. 1. 명령줄 매개변수 --prompt를 통해, 2. 설정 파일에서 <prompt>[...]</prompt> 설정을 통해, 3. 설정 파일에서 연결별 설정 <connections_credentials><prompt>[...]</prompt></connection_credentials>를 통해 설정할 수 있습니다. #74168 (Christoph Wurm).
  • ClickHouse Client에서 9440 포트로 연결할 때 보안 연결을 자동으로 감지합니다. #74212 (Christoph Wurm).
  • http_handlers에서 사용자 이름만으로도 인증할 수 있도록 했습니다(이전에는 비밀번호도 함께 입력해야 했습니다). #74221 (Azat Khuzhin).
  • 대체 쿼리 언어인 PRQL 및 KQL 지원은 Experimental로 표시되었습니다. 이를 사용하려면 설정 allow_experimental_prql_dialect = 1allow_experimental_kusto_dialect = 1을 지정하십시오. #74224 (Robert Schulze).
  • 더 많은 집계 함수가 기본 Enum 유형을 반환할 수 있도록 지원합니다. #74272 (Raúl Marín).
  • OPTIMIZE TABLE에서 이제 기존 키워드 FINAL 대신 키워드 FORCE를 지정할 수 있습니다. #74342 (Robert Schulze).
  • 서버 종료에 시간이 너무 오래 걸릴 때 알림을 발생시키는 데 필요한 IsServerShuttingDown 메트릭을 추가합니다. #74429 (Miсhael Stetsyuk).
  • EXPLAIN에 Iceberg 테이블 이름이 추가되었습니다. #74485 (alekseev-maksim).
  • 기존 분석기에서 RECURSIVE CTE를 사용할 때 표시되는 오류 메시지를 개선했습니다. #74523 (Raúl Marín).
  • system.errors에 상세 오류 메시지를 표시합니다. #74574 (Vitaly Baranov).
  • clickhouse-keeper와의 클라이언트 통신에 비밀번호를 사용할 수 있도록 지원합니다. 서버와 클라이언트에 적절한 SSL 구성을 지정한 경우 이 기능은 크게 유용하지 않지만, 일부 경우에는 여전히 도움이 될 수 있습니다. 비밀번호는 16자를 초과할 수 없습니다. 이는 Keeper Auth 모델과는 관련이 없습니다. #74673 (alesapin).
  • config reloader에 대한 오류 코드를 추가했습니다. #74746 (Garrett Thomas).
  • MySQL 및 PostgreSQL 테이블 함수와 엔진에서 IPv6 주소를 지원합니다. #74796 (Mikhail Koviazin).
  • divideDecimal에 쇼트 서킷 최적화를 구현했습니다. #74280를 수정했습니다. #74843 (Kevin Mingtarja).
  • 이제 시작 스크립트 내에서 사용자를 지정할 수 있습니다. #74894 (pufit).
  • Azure SAS Tokens 지원이 추가되었습니다. #72959 (Azat Khuzhin).

버그 수정(공식 안정 릴리스에서 사용자에게 드러나는 오동작)

  • Parquet 압축 수준은 압축 코덱이 지원하는 경우에만 설정합니다. #74659 (Arthur Passos).
  • 수정자와 함께 Collation 로캘을 사용할 때 오류가 발생하던 회귀 문제가 수정되었습니다. 예를 들어, SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shifted가 이제 정상적으로 작동합니다. #73544 (Robert Schulze).
  • keeper-client에서 SEQUENTIAL 노드를 생성할 수 없던 문제를 수정했습니다. #64177 (Duc Canh Le).
  • position 함수에서 잘못된 문자 수 계산을 수정했습니다. #71003 (思维).
  • 처리되지 않은 부분 권한 취소로 인해 액세스 엔터티에 대한 RESTORE 작업에 필요 이상으로 많은 권한이 필요했습니다. 이 PR은 이 문제를 수정합니다. #71853를 종료합니다. #71958 (pufit).
  • ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE 이후 일시 중지가 발생하지 않도록 합니다. 백그라운드 작업 스케줄링에 올바른 설정을 가져오도록 수정했습니다. #72024 (Aleksei Filatov).
  • 일부 입력 및 출력 형식(예: Parquet, Arrow)에서 빈 튜플이 처리되는 방식을 수정했습니다. #72616 (Michael Kolupaev).
  • 와일드카드 데이터베이스/테이블에 대한 컬럼 수준 GRANT SELECT/INSERT SQL 문은 이제 오류를 반환합니다. #72646 (Johann Gan).
  • 대상 액세스 엔터티에 암시적으로 부여된 권한 때문에 사용자가 REVOKE ALL ON *.*를 실행할 수 없는 문제를 수정했습니다. #72872 (pufit).
  • formatDateTime 스칼라 함수에서 양수 시간대가 포맷되는 방식을 수정했습니다. #73091 (ollidraese).
  • PROXYv1를 통해 연결이 이루어지고 auth_use_forwarded_address가 설정된 경우 원본 포트가 올바르게 반영되도록 수정했습니다. 이전에는 프록시 포트가 잘못 사용되었습니다. currentQueryID() 함수를 추가했습니다. #73095 (Yakov Olkhovskiy).
  • TCPHandler의 NativeWriter에 포맷 설정을 전달하여 output_format_native_write_json_as_string과 같은 설정이 올바르게 적용되도록 했습니다. #73179 (Pavel Kruglov).
  • StorageObjectStorageQueue에서 발생하는 충돌을 수정했습니다. #73274 (Kseniia Sumarokova).
  • 서버 종료 중 갱신 가능 구체화 뷰에서 드물게 발생하던 충돌을 수정했습니다. #73323 (Michael Kolupaev).
  • 이제 함수 formatDateTime%f 플레이스홀더는 항상 6자리의 (초 미만) 숫자를 생성합니다. 이로써 동작이 MySQL DATE_FORMAT 함수와 호환됩니다. 이전 동작은 설정 formatdatetime_f_prints_scale_number_of_digits = 1을 사용해 복원할 수 있습니다. #73324 (ollidraese).
  • s3 스토리지와 테이블 함수에서 읽을 때 _etag 컬럼 필터링이 올바르게 동작하도록 수정했습니다. #73353 (Anton Popov).
  • 기존 분석기 사용 시 IN (subquery)JOIN ON 표현식에서 사용할 때 발생하던 Not-ready Set is passed as the second argument for function 'in' 오류를 수정했습니다. #73382 (Nikolai Kochetov).
  • Dynamic 및 JSON 컬럼의 squashin 준비 과정 문제를 수정했습니다. 이전에는 일부 경우 타입/경로 제한에 도달하지 않았더라도 새 타입이 shared variant/shared data에 삽입될 수 있었습니다. #73388 (Pavel Kruglov).
  • 과도하게 큰 메모리 할당을 방지하기 위해 types 바이너리 디코딩 중 손상된 크기 값을 검사하도록 수정했습니다. #73390 (Pavel Kruglov).
  • 병렬 레플리카가 활성화된 단일 레플리카 클러스터에서 읽을 때의 논리 오류를 수정했습니다. #73403 (Michael Kolupaev).
  • ZooKeeper 및 구버전 Keeper에서 발생하는 ObjectStorageQueue 문제를 수정했습니다. #73420 (Antonio Andelic).
  • Hive 파티셔닝이 기본적으로 활성화되도록 필요한 수정 사항을 적용했습니다. #73479 (Yarik Briukhovetskyi).
  • 벡터 유사도 인덱스를 생성할 때 발생하던 데이터 레이스를 수정했습니다. #73517 (Antonio Andelic).
  • 딕셔너리의 소스에 잘못된 데이터가 있는 함수가 포함된 경우 발생하는 segfault를 수정했습니다. #73535 (Yarik Briukhovetskyi).
  • storage S3(Azure)Queue에서 실패한 삽입 시 재시도 문제를 수정했습니다. #70951을 해결합니다. #73546 (Kseniia Sumarokova).
  • LowCardinality 요소를 포함한 튜플에서, 설정 optimize_functions_to_subcolumns가 활성화된 일부 경우에 발생할 수 있는 tupleElement 함수의 오류를 수정했습니다. #73548 (Anton Popov).
  • range 항목이 뒤따르는 enum glob의 파싱을 수정했습니다. #73473를 해결했습니다. #73569 (Konstantin Bogdanov).
  • 비복제 테이블의 서브쿼리에서 parallel&#95;replicas&#95;for&#95;non&#95;replicated&#95;merge&#95;tree 설정이 무시되던 문제가 수정되었습니다. #73584 (Igor Nikonov).
  • 작업을 예약할 수 없을 때 발생하는 std::logical_error 수정. 스트레스 테스트에서 발견되었습니다. #73629 (Alexander Gololobov).
  • 분산 쿼리에서 잘못된 처리 단계로 인해 발생하는 논리 오류를 방지하기 위해 EXPLAIN SYNTAX에서는 쿼리를 해석하지 않도록 했습니다. 수정: #65205. #73634 (Dmitry Novik).
  • Dynamic 컬럼에서 발생할 수 있는 데이터 불일치 문제를 수정했습니다. Nested columns sizes are inconsistent with local_discriminators column size 논리적 오류가 발생할 수 있는 문제를 수정했습니다. #73644 (Pavel Kruglov).
  • FINALSAMPLE이 포함된 쿼리에서 NOT_FOUND_COLUMN_IN_BLOCK 오류를 수정했습니다. CollapsingMergeTree에서 FINAL을 사용하는 SELECT의 잘못된 결과를 수정하고 FINAL 최적화를 활성화했습니다. #73682 (Anton Popov).
  • LIMIT BY COLUMNS에서 발생하던 크래시를 수정했습니다. #73686 (Raúl Marín).
  • 일반 프로젝션을 강제로 사용하도록 했고, 쿼리가 정의된 프로젝션과 정확히 동일함에도 프로젝션이 선택되지 않아 오류가 발생하던 버그를 수정했습니다. #73700 (Shichao Jin).
  • Dynamic/Object 구조의 역직렬화 문제를 수정했습니다. 이로 인해 CANNOT_READ_ALL_DATA 예외가 발생할 수 있었습니다. #73767 (Pavel Kruglov).
  • 백업에서 파트를 복원할 때 metadata_version.txt를 건너뜁니다. #73768 (Vitaly Baranov).
  • Enum으로 CAST할 때 LIKE와 함께 사용하면 발생하던 segmentation fault를 수정했습니다. #73775 (zhanglistar).
  • 디스크로 작동하지 않던 S3 Express 버킷 문제 수정. #73777 (Sameer Tamsekar).
  • CollapsingMergeTree 테이블에서 잘못된 sign 컬럼 값을 가진 행을 머지할 수 있도록 합니다. #73864 (Christoph Wurm).
  • 오프라인 레플리카가 있는 상태에서 DDL을 쿼리할 때 오류가 발생하는 문제를 수정했습니다. #73876 (Tuan Pham Anh).
  • 중첩된 튜플에 명시적인 이름(‘keys’,‘values’)이 없는 Map을 생성할 수 있어 map() 타입 비교가 간헐적으로 실패하던 문제를 수정했습니다. #73878 (Yakov Olkhovskiy).
  • GROUP BY ALL 절을 해석할 때 윈도우 함수를 무시하도록 했습니다. #73501을 수정했습니다. #73916 (Dmitry Novik).
  • 암시적 권한을 수정했습니다(이전에는 와일드카드로 동작했습니다). #73932 (Azat Khuzhin).
  • 중첩된 맵 생성 시 메모리 사용량이 높아지는 문제를 수정했습니다. #73982 (Pavel Kruglov).
  • 빈 키가 있는 중첩 JSON 파싱 문제를 수정했습니다. #73993 (Pavel Kruglov).
  • 수정: 별칭이 다른 별칭에서 참조되고 역순으로 선택된 경우, 해당 별칭이 프로젝션에 추가되지 않는 문제를 수정했습니다. #74033 (Yakov Olkhovskiy).
  • Azure에서 plain_rewritable 디스크를 초기화하는 동안 발생하는 객체를 찾을 수 없음 오류를 무시합니다. #74059 (Julia Kartseva).
  • enum 타입 및 빈 테이블에서 anyanyLast의 동작을 수정했습니다. #74061 (Joanna Hulboj).
  • Kafka 테이블 엔진에서 키워드 인수를 지정할 때 발생하던 문제를 수정했습니다. #74064 (Yarik Briukhovetskyi).
  • Storage S3Queue 설정에서 “s3queue_” 접두사가 있는 경우와 없는 경우를 서로 바꿔 적용할 때 발생하던 문제를 수정했습니다. #74075 (Kseniia Sumarokova).
  • 설정 allow_push_predicate_ast_for_distributed_subqueries를 추가했습니다. 이를 통해 분석기에서 분산 쿼리에 대한 AST 기반 프레디케이트 푸시다운을 사용할 수 있습니다. 이는 쿼리 계획 직렬화를 사용하는 분산 쿼리가 지원될 때까지 적용하는 임시 해결책입니다. #66878 #69472 #65638 #68030 #73718을 해결합니다. #74085 (Nikolai Kochetov).
  • #73095 이후 forwarded_for 필드에 포트가 포함될 수 있어, 포트가 포함된 호스트 이름을 해석할 수 없던 문제를 수정했습니다. #74116 (Yakov Olkhovskiy).
  • ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...)의 잘못된 포맷을 수정했습니다. #74126 (Han Fei).
  • 이슈 #66112 수정. #74128 (Anton Ivashkin).
  • CREATE TABLE에서 더 이상 Loop를 테이블 엔진으로 사용할 수 없습니다. 이 조합은 이전에 segfault를 일으켰습니다. #74137 (Yarik Briukhovetskyi).
  • postgresql 및 sqlite 테이블 함수에서 SQL 인젝션을 방지하도록 보안 문제를 수정했습니다. #74144 (Pablo Marcos).
  • 압축된 Memory 엔진 테이블에서 하위 컬럼을 읽을 때 발생하던 충돌을 수정했습니다. #74009를 해결합니다. #74161 (Nikita Taranov).
  • system.detached_tables 쿼리에서 발생하던 무한 루프를 수정했습니다. #74190 (Konstantin Morozov).
  • 파일을 실패 상태로 설정하는 과정에서 s3queue의 논리 오류를 수정했습니다. #74216 (Kseniia Sumarokova).
  • 기준 백업에서 RESTORE할 때 네이티브 복사 설정(allow_s3_native_copy/allow_azure_native_copy) 문제를 수정했습니다. #74286 (Azat Khuzhin).
  • 데이터베이스의 분리된 테이블 수가 max_block_size의 배수일 때 발생하는 문제를 수정했습니다. #74289 (Konstantin Morozov).
  • 소스와 대상의 자격 증명이 서로 다를 때 ObjectStorage(즉, S3)를 통한 복사가 올바르게 작동하도록 수정했습니다. #74331 (Azat Khuzhin).
  • GCS의 네이티브 복사에서 “JSON API에서 Rewrite 메서드 사용”을 감지하는 기능을 수정했습니다. #74338 (Azat Khuzhin).
  • BackgroundMergesAndMutationsPoolSize가 잘못 계산되던 문제를 수정했습니다(실제 값보다 2배 크게 계산되었습니다). #74509 (alesapin).
  • Cluster Discovery를 활성화하면 Keeper watch가 누수되던 버그를 수정했습니다. #74521 (RinChanNOW).
  • UBSan에서 보고된 메모리 정렬 문제를 수정했습니다 #74512. #74534 (Arthur Passos).
  • 테이블 생성 중 KeeperMap의 동시 정리 작업 문제를 수정했습니다. #74568 (Antonio Andelic).
  • 올바른 쿼리 결과를 유지하기 위해 EXCEPT 또는 INTERSECT가 있을 때 서브쿼리에서 사용되지 않는 프로젝션 컬럼을 제거하지 않도록 수정했습니다. #73930을 수정했습니다. #66465을 수정했습니다. #74577 (Dmitry Novik).
  • Tuple 컬럼을 포함하고 희소 직렬화가 활성화된 테이블 간 INSERT SELECT 쿼리 문제를 수정했습니다. #74698 (Anton Popov).
  • right 함수는 상수 음수 오프셋에서 올바르게 동작하지 않습니다. #74701 (Daniil Ivanik).
  • 클라이언트 측의 결함 있는 압축 해제로 인해 gzip으로 압축된 데이터 삽입이 간헐적으로 실패하던 문제를 수정했습니다. #74707 (siyuan).
  • 와일드카드 권한 부여가 있는 경우 부분적으로 권한을 회수하면 예상보다 더 많은 권한이 제거될 수 있었습니다. #74263을 해결합니다. #74751 (pufit).
  • Keeper 수정: 디스크에서 로그 항목을 읽을 때 발생하던 문제를 수정했습니다. #74785 (Antonio Andelic).
  • SYSTEM REFRESH/START/STOP VIEW에 대한 권한 검사를 수정하여, 이제 특정 뷰에 대해 쿼리를 실행할 때는 *.*에 대한 이 권한이 필요하지 않으며 해당 뷰에 대한 권한만 있으면 됩니다. #74789 (Alexander Tokmakov).
  • hasColumnInTable 함수가 별칭 컬럼을 고려하지 못하던 문제를 수정해, 별칭 컬럼에서도 작동하도록 했습니다. #74841 (Bharat Nallan).
  • Azure Blob Storage에서 빈 컬럼이 있는 테이블의 데이터 파트 머지 중 발생하는 FILE_DOESNT_EXIST 오류를 수정했습니다. #74892 (Julia Kartseva).
  • 임시 테이블을 조인할 때 프로젝션 컬럼 이름을 수정하여 #68872를 해결했습니다. #74897 (Vladimir Cherkasov).

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

  • 범용 설치 스크립트가 이제 macOS에서도 설치를 제안하도록 변경되었습니다. #74339 (Alexey Milovidov).
마지막 수정일 2026년 6월 10일