메인 콘텐츠로 건너뛰기

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

쿼리 및 구문 변경 사항

  • 잘못된 별칭 치환으로 인해 쿼리 포맷이 일관되지 않던 문제가 수정되었습니다. 참고: 분석기가 비활성화된 경우, 별칭 참조와 함께 IN을 사용하는 일부 CREATE VIEW 쿼리는 더 이상 처리되지 않을 수 있습니다. 이를 방지하려면 분석기가 활성화되어 있는지 확인하십시오(24.3부터는 기본적으로 활성화되어 있습니다). #82838 (Alexey Milovidov).
  • JOIN USING ()의 빈 컬럼 목록은 이제 구문 오류로 처리됩니다. 이전에는 쿼리 실행 시 INVALID_JOIN_ON_EXPRESSION으로 보고되었으며, 일부 경우에는(Join 스토리지와 조인하는 경우 등) LOGICAL_ERROR를 유발할 수 있었습니다. #92371 (Vladimir Cherkasov).
  • 이제 ORDER BY 및 기타 테이블 키 표현식에서는 서브쿼리를 사용할 수 없습니다. #96847 (Alexey Milovidov).

데이터 타입 변경 사항

  • Nullable(Tuple) 지원이 추가되었습니다. 이를 활성화하려면 allow_experimental_nullable_tuple_type = 1로 설정하십시오. #89643 (Nihal Z. Miaji).
  • JSON 타입의 고급 shared data 기능이 이제 기본적으로 활성화됩니다. 이전 버전은 새 JSON 포맷으로 작성된 데이터 파트를 읽을 수 없으므로, 25.8보다 낮은 버전으로는 다운그레이드할 수 없습니다. 안전하게 업그레이드하려면 compatibility 설정을 이전 버전으로 지정하거나, MergeTree 설정 dynamic_serialization_version='v2'object_serialization_version='v2'를 설정하십시오. #92511 (Pavel Kruglov).
  • JSON 타입의 SKIP REGEXP는 이제 기본적으로 부분 일치를 사용합니다. #92847 (Pavel Kruglov).
  • Variant 타입 불일치 시 발생하던 논리 오류를 수정했습니다. #95811 (Bharat Nallan).
  • PostgreSQL의 DATE 컬럼은 이제 ClickHouse에서 Date32로 자동 추론됩니다(이전에는 Date로 추론되었으며, 이 경우 제한된 범위를 벗어난 값에서 오버플로우가 발생할 수 있었습니다). 이제 Date32 값을 다시 PostgreSQL에 삽입하는 것도 지원됩니다. #95999 (Alexey Milovidov).

스토리지 및 인덱스 변경 사항

  • 역텍스트 인덱스의 스토리지 레이아웃이 개선되어 객체 스토리지에서 더 효율적으로 읽을 수 있게 되었으며, 역텍스트 인덱스가 있는 테이블의 머지 성능도 향상되었습니다. 25.12 이전 버전에서 Experimental 텍스트 인덱스를 사용한 경우, 업그레이드 전에 해당 인덱스를 삭제한 후 새 버전에서 다시 빌드해야 합니다. #91518 (Anton Popov).
  • 통계의 저장 포맷이 변경되었습니다. 이제 모든 통계는 단일 파일에 저장됩니다. #93414 (Anton Popov).
  • 이제 인덱스 파일 이름은 파트 손상을 방지하기 위해 이스케이프 처리됩니다. 이전 버전에서 생성된 인덱스 중 이름에 비ASCII 문자가 포함된 경우 ClickHouse에서 로드하지 못합니다. 이 문제를 처리하려면 MergeTree setting escape_index_filenames를 사용하십시오. #94079 (Raúl Marín).

제거된 기능

  • DEFLATE_QPLZSTD_QAT 코덱이 제거되었습니다. 업그레이드하기 전에 이 코덱으로 압축된 기존 데이터를 다른 코덱으로 변환하십시오. 참고로, 이전에 이 코덱을 사용하려면 enable_deflate_qpl_codec 또는 enable_zstd_qat_codec를 활성화해야 했습니다. #92150 (Robert Schulze).
  • 단순 ALIAS 컬럼에 INSERT하는 기능은 더 이상 지원되지 않습니다(#84154 되돌림). 이 기능은 사용자 지정 포맷에서는 작동하지 않았고, 이를 제어하는 설정도 없었습니다. #92849 (Azat Khuzhin).
  • Lazy 데이터베이스 엔진이 제거되어 더 이상 사용할 수 없습니다. #93627 (Alexey Milovidov).
  • 사용할 수 없게 만드는 버그로 인해 metric_logtransposed_with_wide_view 모드가 제거되었습니다. 이제 system.metric_log를 이 모드로 정의할 수 없습니다. #93867 (Alexey Milovidov).

설정 및 구성 변경 사항

  • 데이터 레이크 카탈로그가 객체 스토리지에 접근할 수 없을 경우 오류를 발생시키는 새로운 설정이 추가되었습니다. #93606 (Konstantin Vedernikov).
  • 워크로드의 CPU 스케줄링은 이제 기본적으로 선점형입니다. cpu_slot_preemption 서버 설정을 참조하십시오. #94060 (Sergei Trifonov).
  • exact_rows_before_limit, rows_before_aggregation, cross_to_inner_join_rewrite, regexp_dict_allow_hyperscan, regexp_dict_flag_case_insensitive, regexp_dict_flag_dotall, dictionary_use_async_executor 설정이 포맷 설정에서 일반 설정으로 재분류되었습니다. 이는 대부분 내부 변경이므로, 사용자에게 보이는 영향은 없습니다. 다만 이러한 설정을 Iceberg, DeltaLake, Kafka, S3, S3Queue, Azure, Hive, RabbitMQ, Set, FileLog 또는 NATS 테이블 엔진 정의에 지정한 경우에는 이제 조용히 무시되지 않고 오류가 발생합니다. #94106 (Robert Schulze).
  • do_not_merge_across_partitions_select_final의 의미가 단순화되었습니다. 이전에는 이 기능이 명시적으로 설정되지 않았더라도 자동으로 활성화될 수 있어 혼란과 운영 환경 문제를 일으켰습니다. 이제 1로 설정하면 기능이 무조건 활성화되며, 0으로 설정하면 새로운 설정 enable_automatic_decision_for_merging_across_partitions_for_final(기본값 1)을 따릅니다. #96110 (Nikita Taranov).
  • S3 스키마 검증이 추가되었습니다. #96194 (Konstantin Vedernikov).
  • apply_row_policy_after_final 설정은 이제 기본적으로 활성화되며, 이에 따라 ROW POLICY가 원래 동작처럼 FINAL을 따르게 됩니다. 이전에 FINAL보다 먼저 행 정책을 적용하기 위해 optimize_move_to_prewhere_if_final=1에 의존했다면, 이제 대신 apply_row_policy_after_final=0을 사용하십시오. #97279 (Nikolai Kochetov).

보안 및 액세스 제어 변경 사항

  • 이제 joinGet/joinGetOrNull은 기반 Join 테이블에 대해 SELECT 권한을 적용합니다. joinGet('db.table', 'column', key)를 실행하려면 키 컬럼과 가져오려는 속성 컬럼 모두에 대한 SELECT 권한이 필요합니다. 이러한 권한이 없으면 쿼리는 ACCESS_DENIED와 함께 실패합니다. 마이그레이션하려면 전체 테이블 액세스에는 GRANT SELECT ON db.join_table TO user를 사용하고, 컬럼 수준 액세스에는 GRANT SELECT(key_col, attr_col) ON db.join_table TO user를 사용하여 권한을 부여하십시오. #94307 (Vladimir Cherkasov).
  • 이제 CREATE TABLE ... AS ... 쿼리에는 이전에 잘못 확인되던 SHOW TABLES 대신 SHOW COLUMNS 권한이 필요합니다. #94556 (pufit).

삽입 및 중복 제거 변경 사항

  • 이제 모든 삽입에 기본적으로 중복 제거가 적용됩니다. 이전에는 async inserts와 materialized views에서는 비활성화되어 있었고 sync inserts에서는 활성화되어 있었습니다. 기존 동작을 유지하려면 deduplicate_insert='backward_compatible_choice'를 명시적으로 설정하십시오(deduplicate_blocks_in_dependent_materialized_views도 동일하게 설정). #95970 (Sema Checherinda).

시스템 테이블 변경 사항

  • S3Queue 및 AzureQueue의 인메모리 메타데이터가 이제 제한적으로 유지됩니다. 시스템 테이블 이름이 변경되었습니다. system.s3queue는 이제 system.s3queue_metadata_cache로, system.azure_queue는 이제 system.azure_queue_metadata_cache로 변경되었습니다. #95809 (Kseniia Sumarokova).

기타 비호환 변경 사항

  • 잘못된 입력값으로 호출하면 충돌하거나 멈출 수 있던 H3 인덱스 함수를 수정했습니다. #93657 (Michael Kolupaev).

새 기능

인증

  • 시간 기반 일회용 비밀번호(TOTP)가 인증 메서드로 지원되도록 추가되었습니다. #71273 (Vladimir Cherkasov).

함수

  • 지정된 구분자로 구분된 문자열에서 부분 문자열의 순서를 뒤집는 reverseBySeparator 함수를 추가했습니다. #91780 (Xuewei Wang).
  • sRGB와 OKLAB 색 공간 사이를 변환하는 colorOKLABToSRGBcolorSRGBToOKLAB 함수를 추가했습니다. #93361 (Pranav Tiwari).
  • 두 점 사이의 cosine distance를 근사하는 cosineDistanceTransposed 함수를 추가했습니다. #93621 (Raufs Dunamalijevs).
  • xxh3_128 해시 함수를 추가했습니다. #96055 (Raúl Marín).
  • MergeTree 인덱스 사용 분석을 위한 mergeTreeAnalyzeIndex() 함수를 추가했습니다. #92954 (Azat Khuzhin).
  • 이제 함수가 새로운 FunctionVariantAdaptor를 통해 Variant 타입을 지원합니다. #90900 (Bharat Nallan).
  • 이제 일부 함수는 SQL에서 괄호 없이 호출할 수 있습니다. #94678 (Aly Kafoury).

시스템 테이블

  • UDF의 로딩 상태와 구성을 모니터링하기 위한 system.user_defined_functions 테이블을 추가했습니다. #90340 (Xu Jia).
  • system.zookeeper_info 테이블을 추가했습니다. #90809 (Smita Kulkarni).
  • 오름차순 소수를 포함하는 system.primes 테이블과 primes 테이블 함수를 추가했습니다. #92776 (Nihal Z. Miaji).
  • 각 데이터 파트의 파일 수를 보여주는 files 컬럼을 system.parts에 추가했습니다. #94337 (Match).
  • 기존 failpoint와 활성화 여부를 확인할 수 있는 system.fail_points 테이블을 추가했습니다. #96762 (Pedro Ferreira).

테이블 엔진 및 스토리지

  • Array 컬럼에 텍스트 인덱스 지원이 추가되었습니다. #89895 (Jimmy Aguilar Mena).
  • Paimon REST 카탈로그 지원이 추가되었습니다. #92011 (JIaQi Tang).
  • icebergLocalCluster 테이블 함수가 추가되었습니다. #93323 (Anton Ivashkin).
  • lazy_load_tables 데이터베이스 설정이 추가되었습니다. 활성화하면 데이터베이스 시작 시 테이블을 로드하지 않고, 대신 경량 StorageTableProxy를 생성하며 실제 테이블 엔진은 처음 접근할 때 구체화됩니다. #96283 (xiaohuanlin).
  • DatabaseReplicated에 보조 ZooKeeper를 지원합니다. #91683 (RinChanNOW).
  • 이제 캐시의 데이터 파일과 시스템 파일을 각각 별도 세그먼트로 분할할 수 있습니다. #87834 (MikhailBurdukov).
  • 중복 파일 다운로드를 방지해 읽기 성능을 개선하는 Parquet 메타데이터용 새로운 SLRU 캐시가 추가되었습니다. 이 캐시는 SYSTEM DROP PARQUET METADATA CACHE로 삭제할 수 있습니다. #89750 (Grant Holly).
  • 이제 데이터 레이크 테이블이 Parquet 리더 v3에서 PREWHERE 및 다단계 PREWHERE를 지원합니다. #93542 (Konstantin Vedernikov).
  • 공유 스토리지와 대용량 데이터 환경에 유용한, 여러 레플리카에 걸친 분산 인덱스 분석이 추가되었습니다. #86786 (Azat Khuzhin).

삽입 및 중복 제거

  • 이제 async insert 중복 제거가 종속된 구체화된 뷰(Materialized View)에서도 작동합니다. block_id 충돌이 발생하면 원본 block을 필터링하여 충돌한 block_id와 연결된 행을 제거하고, 남은 행은 해당하는 모든 구체화된 뷰 쿼리를 통해 변환됩니다. #89140 (Sema Checherinda).
  • 이제 async inserts가 병렬 quorum을 지원합니다. 삽입된 데이터는 quorum까지 복제되며, 중복이 발견되면 쿼리는 이전에 삽입된 데이터도 복제될 때까지 대기합니다. #93356 (Sema Checherinda).
  • 통합된 중복 제거 해시로 마이그레이션할 수 있도록 insert_deduplication_version 서버 설정이 추가되었습니다. #95409 (Sema Checherinda).
  • 중복 제거 해시 마이그레이션이 시작되었습니다. #97562 (Sema Checherinda).

SQL 및 쿼리 기능

  • 기존 SYSTEM DROP [...] CACHE의 더 명확한 대안으로 SYSTEM CLEAR [...] CACHE 구문이 추가되었습니다. 기존 구문도 계속 사용할 수 있습니다. #93727 (Pranav Tiwari).
  • 결과 파트를 커밋하지 않고 머지를 시뮬레이션하는 OPTIMIZE <table> DRY RUN PARTS <part names> 쿼리가 추가되었습니다. 머지의 정확성을 검증하고, 머지 관련 버그를 재현하며, 머지 성능을 벤치마크하는 데 유용합니다. #96122 (Anton Popov).
  • ignore_on_cluster_for_replicated_database 설정이 활성화되면 이제 ON CLUSTER가 포함된 DDL 쿼리를 복제된 데이터베이스에서 실행할 수 있습니다. 이때 클러스터 이름은 무시됩니다. #92872 (Kirill).
  • 프로젝션 인덱스 기능을 단순화하고 확장하기 위한 새로운 구문과 프레임워크가 도입되었습니다. #91844 (Amos Bird).

설정 및 구성

  • 삽입되는 블록의 형성을 더욱 세밀하게 제어할 수 있도록 max_insert_block_size_bytes 설정이 추가되었습니다. #92833 (Kirill Kopnev).
  • use_primary_key 설정이 추가되었습니다. 프라이머리 키(primary key) 기반의 granule 프루닝을 비활성화하려면 이 값을 false로 설정하십시오. #93319 (Nihal Z. Miaji).
  • default_dictionary_database 설정이 추가되었습니다. 이 설정을 사용하면 데이터베이스 한정자 없이 참조된 외부 딕셔너리를 지정된 기본 데이터베이스에서 ClickHouse가 확인할 수 있습니다. 이를 통해 XML로 정의된 전역 딕셔너리에서 SQL로 정의된 데이터베이스별 딕셔너리로 마이그레이션하는 작업이 간소화됩니다. #91412 (Dmitrii Plotnikov).
  • 테이블(table)에서 사용 중인 이름이 지정된 컬렉션이 삭제되지 않도록 방지하기 위해 check_named_collection_dependencies 설정이 추가되었습니다(기본적으로 활성화됨). #96181 (Pablo Marcos).
  • 제한된 CPU 슬롯을 두고 많은 쿼리가 경쟁하는 높은 과구독 상태에서 더 나은 공정성을 제공하는, 동시성 제어용 max-min 공정 스케줄러가 추가되었습니다. 이제 concurrent_threads_scheduler 서버 설정(server setting)의 기본값은 fair_round_robin이 아니라 max_min_fair이며, 이에 따라 짧게 실행되는 쿼리가 오래 실행되는 쿼리 때문에 더 이상 불이익을 받지 않습니다. #94732 #95300 (Sergei Trifonov).
  • ClickHouse 시작 시와 종료 시의 콘솔 로그 레벨을 각각 재정의할 수 있도록 logger.startup_console_levellogger.shutdown_console_level 구성 옵션이 추가되었습니다. #95919 (Garrett Thomas).

모니터링

  • 버전 정보가 포함된 ClickHouse_Info 메트릭이 Prometheus /metrics 엔드포인트에 추가되어, 시간 경과에 따른 상세 버전 정보를 추적하는 차트를 만들 수 있게 되었습니다. #91125 (Christoph Wurm).

실험적 기능

  • 이제 벡터 검색에서 클러스터 내 레플리카 전체에 부하를 분산할 수 있어, 단일 VM의 메모리 용량을 초과하는 대규모 벡터 인덱스도 지원할 수 있습니다. #95876 (Shankar Iyer).
  • ast_fuzzer_runsast_fuzzer_any_query 설정으로 제어되는 서버 측 AST 퍼저가 추가되었습니다. 활성화하면 서버는 각 쿼리를 정상적으로 실행한 뒤 해당 쿼리의 무작위 변형도 실행하고, 그 결과는 폐기합니다. #97568 (Alexey Milovidov).

개선 사항

쿼리 및 SQL

  • 상관 서브쿼리가 이제 더 많은 테이블 엔진과 데이터 소스 유형을 지원합니다. #90175 (Dmitry Novik).
  • 상수가 아닌 IN이 이제 스칼라에서도 지원됩니다(예: val1 NOT IN if(cond, val2, val3)). #93495 (Yarik Briukhovetskyi).
  • JOIN에서 확장된 테이블 별칭 지원이 추가되었습니다(예: SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = b). #95331 (Yarik Briukhovetskyi).
  • 이제 EXPLAIN indices = 1EXPLAIN indexes = 1의 별칭으로 사용할 수 있습니다. #92774 (Pranav Tiwari).
  • numbersprimes 테이블 함수의 filter pushdown이 개선되었습니다 — ClickHouse는 이제 WHERE 조건에서 보수적인 값 범위를 추론해 시퀀스 생성을 제한함으로써, 범위 제한 없는 스캔을 방지할 수 있습니다. #96115 (Nihal Z. Miaji).
  • 이제 동등 집합 최적화가 여러 개의 연속된 INNER JOIN 작업에 걸쳐 동작하므로, 체인 내 임의의 테이블에 적용된 필터가 모든 관련 테이블로 자동으로 푸시다운됩니다. #96596 (Vladimir Cherkasov).
  • 이제 FROM의 단일 서브쿼리에서 자동 클러스터 테이블 함수가 사용됩니다. #96332 (phulv94).
  • 접두사가 ASCII 문자로만 이루어진 경우, 이제 startsWithUTF8로 필터링할 때 프라이머리 키 인덱스(primary key index)가 사용됩니다. #97055 (vkcku).
  • assumeNotNull, coalesce, ifNull로 키 컬럼을 감싼 경우, 이제 범위 프레디케이트에서 기본 키(primary key) 및 스킵 인덱스 프루닝이 가능해졌습니다. #94754 (Nihal Z. Miaji).
  • 이제 MergeTree에서 읽을 때는 읽기 단계에서 사용되지 않는 컬럼도 제거되며, 이는 특히 필터가 PREWHERE로 푸시다운된 경우에 유용합니다. #89982 (János Benjamin Antal).
  • use_join_disjunctions_push_down 최적화가 이제 기본적으로 활성화됩니다. #89313 (Alexey Milovidov).
  • enable_join_runtime_filters 최적화는 이제 기본적으로 활성화됩니다. #89314 (Alexey Milovidov).
  • 블룸 필터에서 설정된 비트가 너무 많거나 필터링되는 행 수가 너무 적으면 필터를 자동으로 비활성화하여 JOIN 런타임 필터 오버헤드가 줄어들었습니다. #91578 (Alexander Gololobov).
  • 조인 재정렬에 런타임 해시 테이블 크기 통계를 사용할지 제어하는 use_hash_table_stats_for_join_reordering 설정이 추가되었습니다(기본적으로 활성화됨). #93912 (Vladimir Cherkasov).
  • 인덱스 분석은 이제 쿼리가 로컬에서 실행되든 병렬 레플리카로 실행되든 관계없이 한 번만 수행됩니다. #94854 (Nikita Taranov).
  • FINAL 쿼리에서 스킵 인덱스의 대상이 프라이머리 키(primary key)를 구성하는 컬럼인 경우, 이제 다른 파트에서의 추가 프라이머리 키 교집합 검사를 건너뜁니다. #93899 (Shankar Iyer).
  • DROP DATABASE는 이제 의존 관계의 역순으로 테이블을 삭제하므로, 데이터베이스에 로딩 의존성이 있는 테이블이 포함된 경우에도 충돌 안전성이 향상됩니다. #97057 (Alexey Milovidov).
  • 이제 뮤테이션을 동기적으로 기다릴 때 쿼리 취소 및 시간 제한을 준수합니다. #96756 (Alexey Milovidov).
  • DROP COLUMN mutation 직후 ADD COLUMN을 빠르게 실행하면 삭제된 데이터가 다시 살아나는 문제를 방지했습니다. #96713 (Alexey Milovidov).
  • UPDATERENAME COLUMN과 충돌하는 ALTER 표현식은 이제 논리 오류가 아니라 적절한 예외를 발생시킵니다. #96022 (Alexey Milovidov).
  • 이제 집계 키 컬럼의 예상 총 행 수와 NDV(고유 값 개수) 통계가 수집됩니다. #92812 (Alexander Gololobov).
  • 이제 병렬 레플리카 읽기 시 모든 레플리카가 처리되지 않은 ranges를 병렬로 가져올 수 있어, 부하 분산이 개선되고 테일 지연 시간이 줄어듭니다. #91374 (zoomxi).
  • 선택성이 매우 높은 PREWHERE 필터에 대한 자동 병렬 레플리카의 추정 정확도가 향상되었습니다. #97231 (Nikita Taranov).
  • joinGet이 이제 임시 테이블도 지원합니다. #92973 (Eduard Karacharov).
  • 외부 집계, 정렬 및 조인이 이제 모든 컨텍스트에서 temporary_files_codec 쿼리 설정을 따릅니다. #92388 (Vladimir Cherkasov).
  • 벡터 유사도 검색 계획 최적화는 이제 검색 대상 컬럼에 인덱스가 있는 경우에만 적용됩니다. #94998 (Eduard Karacharov).

테이블 엔진 및 스토리지

  • StorageEmbeddedRocksDB가 이제 여러 컬럼을 기본 키로 지원합니다. #33917 (usurai).
  • ALTER TABLE <table> ATTACH PART <part_name> FROM <directory_name> 구문이 추가되어, 파일 시스템에서 이름을 수동으로 변경하지 않고도 detached/의 임의 하위 디렉터리(예: broken-on-start 또는 unexpected 프리픽스가 있는 파트)에서 파트를 ATTACH할 수 있습니다. #74816 (Anton Popov).
  • min_free_disk_bytes_to_perform_insert가 이제 JBOD 볼륨에서 올바르게 동작합니다. #90878 (Aleksandr Musorin).
  • max_parts_to_merge_at_once가 이제 TTL 삭제 파트 병합 중에도 준수됩니다. #95315 (Kseniia Sumarokova).
  • 백그라운드 작업(mutate, merge)은 이제 default 프로필을 통해 일반 쿼리와 설정을 공유하는 대신, background 프로필로 각각 독립적으로 구성할 수 있습니다. #93905 (Arsen Muk).
  • 올바른 크기 계산이 적용되도록 subcolumn 읽기를 개선하여 메모리 사용량을 줄이고 속도를 향상했습니다. #96251 (Pavel Kruglov).
  • 과도한 메모리 사용을 방지하기 위해 split_intersecting_parts_ranges_into_layers로 생성되는 pipeline 스트림 수를 제한했습니다. #96478 (Nikita Taranov).
  • 텍스트 인덱스가 이제 일반 제공 상태입니다. #96794 (Robert Schulze).
  • QBit이 이제 일반 제공 상태입니다. #95358 (Raufs Dunamalijevs).
  • 이제 QBit의 동등성 비교를 지원합니다. #94078 (Raufs Dunamalijevs).
  • enable_positional_arguments_for_projections를 사용해 테이블 스키마를 저장할 때, 이제 위치 인수 대신 표현식이 치환되므로 해당 설정을 비활성화한 상태에서도 서버를 다시 시작할 수 있습니다. #96372 (Alexey Milovidov).
  • 복제된 데이터베이스에서는 더 이상 모든 더미 쿼리마다 캐시된 클러스터가 갱신되지 않습니다. #96897 (Tuan Pham Anh).
  • DDLWorker 상태를 재설정하는 SYSTEM RESET DDL WORKER [ON CLUSTER] 쿼리가 추가되었습니다. 이 쿼리는 호스트 ID가 업데이트되었을 때 레플리카 활동을 갱신하는 데 유용합니다. #93780 (Tuan Pham Anh).

데이터 레이크

  • DeltaLake 삭제 벡터 지원이 추가되었습니다. #93852 (Kseniia Sumarokova).
  • 이제 deltaLakeCluster에서도 삭제 벡터를 지원합니다. #94365 (Kseniia Sumarokova).
  • 이제 DeltaLake를 macOS에서 사용할 수 있습니다. #95985 (Alexey Milovidov).
  • 이제 DeltaLake가 메타데이터의 count() 결과를 사용해 system.tables에 올바른 테이블 통계(총 바이트 수/행 수)를 표시합니다. #96190 (Kseniia Sumarokova).
  • system.tables에서 DeltaLake 테이블을 쿼리할 때 객체 스토리지 읽기를 건너뛰도록 했습니다. #95899 (Antonio Andelic).
  • delta-kernel 로깅 디버깅을 위한 SYSTEM RELOAD DELTA KERNEL TRACING <level> 명령이 추가되었습니다. #96763 (Kseniia Sumarokova).
  • Glue 메타데이터에 metadata_location이 지정되지 않은 경우, 이제 Iceberg 테이블 메타데이터 위치를 자동으로 추론합니다. #91994 (Andrey Zvonov).
  • 이제 Iceberg manifest 파일 항목이 포지션 삭제 파일 이름의 하한 및 상한을 파싱하여 데이터 파일 선택을 개선합니다. #93980 (Daniil Ivanik).
  • Iceberg 테이블에 PREWHERE 최적화 지원이 추가되었습니다. #95476 (Konstantin Vedernikov).
  • 이제 Iceberg 테이블에서 데이터 파일 리더와 포지션 삭제 파일 리더가 스레드 및 메모리 제한을 공유합니다. #94701 (Yang Jiang).
  • Iceberg 테이블에 ALTER TABLE RENAME COLUMN 지원이 추가되었습니다. #97455 (murphy-4o).
  • 데이터 레이크에 Google Cloud Storage 지원이 추가되었습니다. #93866 (Konstantin Vedernikov).
  • 이제 Unity Catalog 사용 시 장시간 실행되는 쿼리 동안 S3 액세스 토큰이 동적으로 갱신됩니다. #95069 (Konstantin Vedernikov).
  • aws_role_arnaws_role_session_name 설정을 통해 Glue catalog에 대한 역할 기반 접근이 추가되었습니다. #90825 (Antonio Andelic).

S3Queue

  • S3Queue가 이제 ordered 모드에서 Hive 파티셔닝을 추적합니다. #81040 (Anton Ivashkin).
  • 버킷을 활용하도록 S3Queue ordered 모드 처리를 리팩터링하여 Keeper 요청 수를 줄이고 성능을 개선했습니다. #92889 (Kseniia Sumarokova).
  • S3Queue ordered 모드에 보다 범용적인 파티셔닝 지원을 추가했습니다. #94321 (Bharat Nallan).
  • ordered 모드의 S3Queue에 파티션 키 기반 버킷팅을 추가했습니다. #94698 (Bharat Nallan).
  • keeper_path 설정을 통해 S3Queue의 보조 ZooKeeper를 지원합니다. #95203 (Diego Nieto).
  • S3(Azure)Queue ordered 모드는 이제 한도를 추적해 실패한 노드를 정리합니다. #94412 (Kseniia Sumarokova).

S3 및 객체 스토리지

  • S3 x-amz-server-side-encryption 헤더는 더 이상 HeadObject, UploadPart, CompleteMultipartUpload 요청에 전달되지 않습니다. #64577 (Francisco J. Jurado Moreno).
  • 이제 S3 테이블 엔진과 s3 테이블 함수에 대해 이름이 지정된 컬렉션에서 storage_class_name을 지정할 수 있습니다. #91926 (János Benjamin Antal).
  • 인스턴스 프로필 자격 증명을 사용해 동시에 많은 S3 쿼리를 실행할 때 발생하던 EC2 metadata endpoint 스로틀링 문제를 수정했습니다. 이제 자격 증명 provider가 캐시되어 모든 쿼리에서 공유됩니다. #92891 (Sav).
  • AWS S3 C++ SDK에 MinIO 전용 오류용 오류 코드 매핑을 포함한 MinIO 호환성 지원을 추가해, 자체 호스팅 MinIO cluster의 안정성을 높였습니다. #93082 (XiaoBinMu).
  • 자격 증명을 확인하라는 안내를 포함하도록 S3 authentication 오류 메시지를 개선했습니다. #95648 (Gerald Latkovic).
  • 이제 Azure Blob Storage는 네이티브 복사가 어떤 오류로든 실패하면 읽기-쓰기 복사로 대체됩니다(이전에는 인증되지 않음 오류일 때만 대체됨). #92888 (Smita Kulkarni).

함수

  • avg()가 이제 Date, DateTime, Time 값을 인수로 지원합니다. #87845 (Yarik Briukhovetskyi).
  • mapContainsKeyLikemapContainsValueLike가 이제 mapKeys() 또는 mapValues()의 텍스트 인덱스를 활용할 수 있습니다. #93049 (Michael Jarrett).
  • flipCoordinates가 이제 Geometry 타입을 지원합니다. #93303 (Bharat Nallan).
  • hasAnyTokenshasAllTokens 함수의 64개 token 제한을 제거했습니다. #95152 (Elmi Ahmadov).
  • 다른 거리 함수와의 일관성을 위해 cosineDistance의 별칭으로 distanceCosine을 추가했습니다. #96065 (Raufs Dunamalijevs).
  • ClickHouse KQL에 iif 함수를 추가했습니다. #94790 (happyso).
  • use_variant_as_common_type가 이제 기본적으로 활성화되어, Array, UNION 쿼리, if/multiIf/case 분기 내에서 서로 호환되지 않는 타입도 허용합니다. #90677 (Alexey Milovidov).

설정 및 구성

  • use_skip_indexes_on_data_read는 이제 기본적으로 활성화되어 있습니다. #93407 (Shankar Iyer).
  • add_minmax_index_for_time_columns 설정이 추가되었습니다 — 활성화하면 모든 Date, Date32, Time, Time64, DateTime, DateTime64 컬럼에 대해 MinMax 인덱스를 자동으로 생성합니다. #93355 (Michael Jarrett).
  • materialize_statistics_on_merge 설정(기본값은 활성화됨)이 추가되어, 머지 중에 통계를 구체화할지 여부를 제어할 수 있습니다. #93379 (Han Fei).
  • 악의적인 페이로드를 방지하기 위해 바이너리 형식으로 디코딩할 수 있는 전체 타입 노드 수를 제한하는 input_format_binary_max_type_complexity 설정이 추가되었습니다. #92519 (Raufs Dunamalijevs).
  • 특정 이벤트 이름만 대상으로 trace_profile_event 트레이싱을 제한할 수 있도록 trace_profile_events_list 설정이 추가되었습니다. #92298 (Alexey Milovidov).
  • 하나는 리터럴이고 다른 하나는 중첩 객체인 경우 JSON에서 중복된 경로를 허용하는 type_json_allow_duplicated_key_with_literal_and_nested_object 설정이 추가되었습니다. 이는 경로 중복 제거가 강제되기 전에 생성된 데이터와의 하위 호환성을 유지하기 위한 것입니다. #93604 (Pavel Kruglov).
  • 머지 및 파싱 중 JSON 컬럼의 동적 서브컬럼 수를 제한하는 merge_max_dynamic_subcolumns_in_compact_part MergeTree setting과 max_dynamic_subcolumns_in_json_type_parsing 쿼리 수준 setting이 추가되었습니다. #94184 (Pavel Kruglov).
  • use_primary_keyuse_skip_indexes와의 일관성을 위해 allow_statistics_optimize의 별칭으로 use_statistics를 추가했습니다. #94366 (Robert Schulze).
  • 요소 존재 여부를 확인할 수 있도록 Numbers-to-Enum 변환에 input_format_numbers_enum_on_conversion_error를 활성화했습니다. #94384 (Elmi Ahmadov).
  • 테이블에 행 정책이 있지만 현재 사용자에게 적용되는 정책이 하나도 없을 때 예외를 발생시키는 설정이 추가되었습니다. 이를 통해 잠재적인 구성 오류를 감지할 수 있습니다. #95014 (Vitaly Baranov).
  • enable_max_bytes_limit_for_min_age_to_force_merge는 이제 호환성 버전 26.2 이상에서 기본값으로 활성화됩니다. #95917 (Christoph Wurm).
  • core_dump.size_limit은 이제 서버를 재시작하지 않고도 핫 리로드할 수 있습니다. #96524 (Miсhael Stetsyuk).
  • 구성을 다시 로드할 때 이제 명령줄 재정의가 적용됩니다. #80295 (Alexey Milovidov).
  • 서버 로그에 대해 복합 로테이션 전략(크기 + 시간)을 추가했습니다. #87620 (Jianmei Zhang).
  • 이제 파트 수(distributed_index_analysis_min_parts_to_activate)와 인덱스 크기(distributed_index_analysis_min_indexes_size_to_activate)를 기준으로 분산 인덱스 분석을 활성화할 수 있게 되었습니다. #95216 (Azat Khuzhin).
  • Statistics 캐시는 이제 기본적으로 활성화되며, 업데이트 주기는 300초입니다. #95841 (Han Fei).
  • path 구성 매개변수는 이제 시작 시 작업 디렉터리를 기준으로 상대적으로 해석되므로, 데이터 디렉터리가 비정상적인 위치에 생성되는 것을 방지합니다. #96305 (Alexey Milovidov).

시스템 테이블 및 모니터링

  • 진단 기능을 개선하기 위해 system.mutationsparts_postpone_reasons 컬럼을 추가했습니다. #92206 (Shaohua Wang).
  • system.data_skipping_indicescreation(implicit/explicit) 컬럼을 추가했습니다. #92378 (Raúl Marín).
  • 이제 실행 중인 작업이 system.background_schedule_pool 및 해당 로그 테이블에 반영됩니다. #92587 (Azat Khuzhin).
  • 실행 중인 내부 쿼리가 아닌 쿼리 수를 추적하는 QueryNonInternal 메트릭을 추가하여 max_concurrent_queries 제한에 대한 동시성 모니터링에 도움이 되도록 했습니다. #94284 (Ashwath Singh).
  • 가장 오래 실행 중인 머지의 경과 시간을 나타내는 비동기 메트릭을 추가했습니다. #94825 (Raúl Marín).
  • 물리적 연결을 반영하도록 query_logconnection_addressconnection_port를 추가했습니다(프록시를 통해 연결된 경우 유용함). #95471 (Yakov Olkhovskiy).
  • system.crash_log에 더 많은 정보를 추가했습니다. #94112 (Miсhael Stetsyuk).
  • system.aggregated_zookeeper_log에 component 이름을 추가했습니다. #95882 (Antonio Andelic).
  • 사용 가능한 모든 토크나이저를 보여주는 system.tokenizers 테이블을 추가했습니다. #96753 (Robert Schulze).
  • jemalloc 메모리 allocator 통계를 대화형으로 시각화할 수 있도록 system.jemalloc_stats 테이블과 /jemalloc.html HTTP endpoint를 추가했습니다. #97077 (Antonio Andelic).
  • raw, symbolized, collapsed 출력 형식을 지원하며 jemalloc heap profile을 읽고 분석할 수 있는 system.jemalloc_profile_text 테이블을 추가했습니다. #97218 (Antonio Andelic).
  • MUTATE_PARTMUTATE_PART_START 이벤트에 대해 system.part_logmutation_ids를 추가했습니다. #93811 (Shaohua Wang).
  • 중첩된 전역 server settings(예: logger.level)가 이제 system.server_settings에 부분적으로 표시됩니다. #94001 (Hechem Selmi).
  • 이제 view_duration_ms는 thread Duration의 합계가 아니라 그룹이 활성 상태였던 시간을 보여줍니다. #94966 (Sema Checherinda).
  • 이제 system.blob_storage_log를 Azure Blob Storage, Local, HDFS에서 사용할 수 있습니다. error_code 컬럼도 추가했습니다. #93105 (Alexey Milovidov).
  • 평균보다 느린 Background 작업은 이제 구성 가능한 임계값(background_schedule_pool_log.duration_threshold_milliseconds, 기본값 30ms)을 기준으로 로그에 기록됩니다. #92965 (Azat Khuzhin).
  • URL storage의 password는 더 이상 쿼리 로그에 표시되지 않습니다. #93245 (Konstantin Vedernikov).

ClickHouse Keeper

  • 마지막으로 커밋된 인덱스보다 앞선 로그에 대해 Keeper 로그 엔트리의 간격(gaps)을 올바르게 처리합니다. #90403 (Antonio Andelic).
  • Keeper 요청에 대한 OpenTelemetry tracing이 추가되었습니다. #91332 (Miсhael Stetsyuk).
  • 새로운 Keeper 메트릭이 추가되었습니다: KeeperChangelogWrittenBytes, KeeperChangelogFileSyncMicroseconds, KeeperSnapshotWrittenBytes, KeeperSnapshotFileSyncMicroseconds, KeeperBatchSizeElements, KeeperBatchSizeBytes. #92149 (Miсhael Stetsyuk).
  • CHECK_STATTRY_REMOVE Keeper 확장이 이제 기본적으로 활성화됩니다. #93886 (Mikhail Artemenko).
  • Keeper는 이제 손상된 snapshot 또는 일관되지 않은 changelog를 감지하면 중단하는 대신 예외를 발생시켜, 더 안전한 복구를 위해 수동 개입이 필요하도록 합니다. #94168 (Antonio Andelic).
  • getChildren Keeper 요청에 with_datawith_stat 확장이 추가되어, 단일 작업으로 하위 항목과 해당 데이터 및 통계를 함께 가져올 수 있습니다. #94826 (Nikolay Degterinsky).
  • cluster 조립 실패로 이어질 수 있는 Keeper 오구성을 확인하는 검사 기능이 추가되었습니다. #94682 (Konstantin Bogdanov).
  • Database Replicated에서 table 가져오기를 개선하기 위해 with_data Keeper 확장 지원이 추가되었습니다. #96090 (Nikolay Degterinsky).
  • 이제 system.zookeeper를 통해 보조 ZooKeeper에 삽입할 수 있습니다. #92092 (RinChanNOW).

메모리 관리

  • 파일 시스템 캐시 공간 예약을 최적화했습니다 — 이제 unique lock을 잡은 상태를 유지하지 않고도 축출 후보를 수집합니다. #82764 (Kseniia Sumarokova).
  • 원격 테이블 엔진/함수용 파일 시스템 캐시 읽기 버퍼에서 병렬 읽기를 활성화했습니다. #71781 (Kseniia Sumarokova).
  • jemalloc dirty page를 즉시 제거하도록 하여 Linux 이외의 시스템에서 메모리 사용량을 줄였습니다. #93360 (Eduard Karacharov).
  • 이제 jemalloc dirty page 제거는 메인 MemoryWorker 스레드와 분리된 별도 스레드에서 실행됩니다. 총 메모리 사용 비율을 기준으로 제거를 수행하기 위한 memory_worker_purge_total_memory_threshold_ratio 구성을 추가했습니다. #94902 (Antonio Andelic).
  • 이제 ClickHouse가 지속적인 메모리 압박 상태에 있으면 jemalloc dirty page decay가 동적으로 비활성화됩니다. #95145 (Antonio Andelic).
  • MergeTree에서 데이터를 읽기 전에 명시적인 메모리 사용량 검사를 추가했으며, 운영 환경에서의 경험을 바탕으로 스레드 풀 큐 크기도 줄였습니다. #94692 (Nikita Mikhaylov).
  • 이제 사용자 인증 전에 총 메모리 제한을 검사하며, 제한을 초과하면 memory limit exceeded를 발생시킵니다. #95003 (Nikolai Kochetov).
  • 쿼리 conditions 캐시의 잘못된 메모리 계산을 수정했습니다. #95478 (Nikita Mikhaylov).
  • 집계/정렬 중 디스크로 스필할 때 쿼리 메모리 사용량을 감지하는 기능을 더욱 안정적으로 개선했습니다. #92500 (Azat Khuzhin).
  • 이제 스케줄러는 CPU 기아 상태에서 프로세스를 보호하기 위해 MemoryWorker 스레드에 우선순위를 부여합니다. #94864 (Nikita Mikhaylov).
  • 일부 경우 테이블에서 읽을 때 ClickHouse가 메모리 제한을 준수하지 않던 문제를 수정했습니다. #93715 (Nikita Mikhaylov).

데이터 포맷

  • 이제 Parquet 리더에서 Tuple 또는 Map 컬럼을 JSON으로 읽을 수 있습니다. #92864 (Michael Kolupaev).
  • 이제 Parquet 리더가 빈 튜플을 지원합니다. #92868 (Michael Kolupaev).
  • 이제 Date 타입은 Arrow/ArrowStream 포맷에서 Arrow의 네이티브 date32 타입으로 직렬화됩니다(기존에는 uint16). 이전 동작은 output_format_arrow_date_as_uint16 설정으로 복원할 수 있습니다. #96860 (Alexey Milovidov).
  • 이제 Hash 출력 형식은 블록 크기와 무관합니다. #94503 (Alexey Milovidov).
  • Pretty JSON 포맷에서 단순 타입은 더 이상 별도 줄에 출력되지 않습니다. #93836 (Pavel Kruglov).
  • 이제 스키마 추론은 allow_experimental_nullable_tuple_type를 반영합니다. 이 설정을 활성화하면 누락된 중첩 객체는 NULL 요소로 이루어진 튜플 대신 NULL이 될 수 있습니다. #95525 (Nihal Z. Miaji).
  • 이제 SQL formatter는 SELECT를 괄호로 감싸는 대신 AS SELECT 앞에 COMMENT를 출력합니다. #96293 (Alexey Milovidov).
  • simdcomp를 사용해 postings list 압축을 최적화했습니다. #92871 (Peng Jian).

백업 및 복원

  • 갱신 가능 구체화 뷰의 데이터를 백업할지 여부를 제어하는 backup_data_from_refreshable_materialized_view_targets 백업 설정이 추가되었습니다. APPEND 갱신 전략을 사용하는 RMV의 대상은 항상 백업됩니다. #93658 (Julia Kartseva).
  • S3 및 Azure Blob Storage에 대해 BACKUP/RESTORE에서 SQL로 정의된 이름이 지정된 컬렉션을 지원하도록 추가되었습니다. #94605 (Pablo Marcos).

이름이 지정된 컬렉션 및 딕셔너리

  • 이제 MongoDB 테이블 함수에서 이름이 지정된 컬렉션 매개변수 재정의를 허용합니다. #89616 (vanchaklar).
  • YTsaurus 딕셔너리와 테이블에서 이름이 지정된 컬렉션을 사용할 수 있게 되었습니다. #94582 (MikhailBurdukov).
  • 이제 YTsaurus 동적 테이블 딕셔너리 소스에 컬럼 설명을 전달할 수 있게 되었습니다. #92391 (MikhailBurdukov).
  • 매개변수화된 뷰의 스키마를 명시적으로 지정한 경우 이제 표시됩니다. #90220 (Grigorii Sokolik).

중복 제거

  • 이전 버전과의 호환성 옵션을 추가할 수 있도록 insert_select_deduplicate 설정을 개편했습니다. #92951 (Sema Checherinda).
  • 이제 materialized view가 포함된 경우에도 async inserts에서 중복 제거가 허용됩니다. #93957 (Sema Checherinda).

기타 개선 사항

  • SYSTEM INSTRUMENT ADD/REMOVE의 UX를 개선했습니다. 이제 함수 이름에 문자열 리터럴을 사용하고, 일치하는 모든 함수에 패치가 적용되며, REMOVE에서 function_name도 지원합니다. #93345 (Pablo Marcos).
  • 일시 중지 가능한 failpoint를 위한 SYSTEM NOTIFY FAILPOINT와 PAUSE/RESUME를 위한 SYSTEM WAIT FAILPOINT를 추가했습니다. #92368 (Shaohua Wang).
  • system.trace_log, system.symbols, demangle 함수에서 C++ 함수 이름이 이제 올바르게 표시됩니다. #93075 (Alexey Milovidov).
  • jemalloc 프로파일이 이제 심볼과 함께 기록되므로 힙 프로파일 생성 시 binary가 더 이상 필요하지 않습니다. #93099 (Azat Khuzhin).
  • 스택 언와인딩 중 dropReplicationSlot에서 예외가 발생할 때 MaterializedPostgreSQL 데이터베이스에 테이블을 ATTACH하는 과정에서 발생하던 크래시를 수정했습니다. #96871 (Alexey Milovidov).
  • CREATE TABLE이 실패할 때 잔여 항목이 남을 수 있던 문제를 수정했습니다. #94174 (Azat Khuzhin).
  • password로 보호된 TLS key를 사용할 때 발생하던 초기화되지 않은 메모리 접근 문제를 수정했습니다. #94182 (Konstantin Bogdanov).
  • alter table ... modify setting ...이 잠금 획득 중 timeout되면, 이제 논리 오류가 아니라 timeout 오류를 반환합니다. #93856 (Han Fei).
  • socket timeout과 함께 사용할 때 CPU 및 real-time 프로파일러의 상호 운용성을 개선했습니다. #96601 (Sergei Trifonov).
  • 릴리스 빌드(release builds)에서 빠른 libcxx 하드닝(주로 범위 밖 검사)을 활성화했으며, 눈에 띄는 성능 영향은 없습니다. #94757 (Miсhael Stetsyuk).

성능 개선

JOIN 성능

  • ColumnVector::replicate에 동적 디스패치를 구현하여 일부 해시 조인 작업의 성능을 개선했습니다. #79573 (Raúl Marín).
  • 이제 더 많은 필터가 JOIN까지 푸시다운됩니다. #85556 (Nikita Taranov).
  • 필터가 한쪽 입력만 사용하는 경우, ANY, SEMI, ANTI 조인에 대해 JOIN ON 조건에서의 필터 푸시다운을 확장했습니다. #92584 (Dmitry Novik).
  • 이제 등가 집합을 사용해 SEMI JOIN에 대한 필터를 푸시다운할 수 있습니다. #92837 (Dmitry Novik).
  • 복잡한 프레디케이트에 대해 ParallelHashJoin에서 조인되지 않은 행 처리의 병렬화를 지원하며, 이는 parallel_non_joined_rows_processing 설정으로 제어됩니다(기본적으로 활성화됨). #92068 (Yarik Briukhovetskyi).
  • 이제 오른쪽이 비어 있으면 해시 조인이 왼쪽을 아예 읽지 않고 건너뛰므로, 과도한 필터링이나 집계로 인한 불필요한 작업을 피할 수 있습니다. #94062 (Alexander Gololobov).
  • 이제 RIGHT OUTER JOIN에서 JOIN 런타임 필터를 지원합니다. #96183 (Hechem Selmi).
  • 이제 PREWHERE 최적화가 JOIN 런타임 필터 최적화 이후에 수행되므로, 런타임 필터도 PREWHERE까지 푸시다운할 수 있습니다. #95838 (Alexander Gololobov).

쿼리 최적화

  • 파티션 키가 정렬 키와 같거나 그 접두사인 경우, 윈도우 함수의 정렬 순서 최적화를 비활성화해 병렬 실행 성능을 개선했습니다. #87299 (Nikita Taranov).
  • 이제 외부 필터 조건이 뷰 내부로 푸시다운되어 로컬 노드와 원격 노드 모두에서 PREWHERE를 적용할 수 있습니다. #88316 (Igor Nikonov).
  • 소수 값의 LIMITOFFSET에 대한 성능과 메모리 사용량을 최적화했습니다. #91167 (Ahmed Gouda).
  • 가상 컬럼에 대한 상수 필터는 더 이상 중복 평가되지 않습니다. #91588 (c-end).
  • 이제 프라이머리 키의 모든 결정적 표현식(예: ORDER BY cityHash64(user_id))을 데이터 스키핑에 사용할 수 있습니다. ClickHouse는 쿼리 상수에 해당 표현식을 적용하고, 그 결과를 =, IN, has에 대한 프라이머리 키 인덱스 조회에 사용합니다. 단사 표현식의 경우 부정 형태(!=, NOT IN, NOT has)도 지원합니다. #92952 (Nihal Z. Miaji).
  • 이제 read-in-order 최적화는 WHERE 조건 때문에 ORDER BY 컬럼이 상수가 되는 경우를 인식하여 역순 읽기도 효율적으로 수행할 수 있습니다. 이는 WHERE tenant='42' ORDER BY tenant, event_time DESC와 같은 멀티 테넌트 쿼리에 도움이 됩니다. #94103 (matanper).
  • 프라이머리 키 조건 다음에 스킵 인덱스가 사용되는 FINAL 쿼리의 경우, 이제 PrimaryKeyExpand 단계는 처음에 추려진 프라이머리 키 범위만 검사합니다. #94903 (Shankar Iyer).
  • 이제 lazy materialization 최적화가 UNION ALL 쿼리의 첫 번째 분기뿐 아니라 모든 분기에 적용되어, 서로 다른 MergeTree 테이블에서 여러 정렬 읽기와 제한된 읽기를 결합하는 쿼리의 I/O를 줄입니다. #96832 (Federico Ginosa).

함수 및 집계 성능

  • 이제 JIT 컴파일이 더 많은 함수에 적용됩니다. #88770 (Alexey Milovidov).
  • distinctJSONPaths 집계 함수를 최적화하여 전체 JSON 컬럼 대신 데이터 파트의 JSON 경로만 읽도록 했습니다. #92196 (Pavel Kruglov).
  • 동일한 요소가 연속해서 자주 나타나는 경우 uniqExact를 최적화했습니다. #93268 (Alexey Milovidov).
  • 모든 입력 값이 ASCII인 경우 isValidASCII를 최적화했습니다. #93347 (Robert Schulze).
  • 가능한 경우 삽입을 배칭 처리하여 숫자 타입에서의 uniq를 더 빠르게 했습니다(NULL 아님, -If 없음, GROUP BY 없음, IPv6 또는 String 없음). #95904 (Raúl Marín).

스토리지 및 I/O 성능

  • Parquet Reader V3 Prefetcher가 더 빠른 랜덤 읽기 로직을 사용하도록 수정했습니다. #91435 (Arsen Muk).
  • icebergCluster의 성능을 개선했습니다. #91537 (Yang Jiang).
  • 적응형 쓰기 버퍼를 활성화해 Wide 파트를 사용하는 매우 넓은 테이블의 INSERT 및 머지 메모리 사용량을 줄였습니다. 또한 암호화된 디스크에 대한 적응형 쓰기 버퍼 지원도 추가했습니다. #92250 (Azat Khuzhin).
  • 검색하는 토큰 수를 줄여 텍스트 인덱스와 sparseGrams 토크나이저를 사용하는 전체 텍스트 검색 성능을 개선했습니다. #93078 (Anton Popov).
  • x86에서 동적 디스패치를 사용해 T64 코덱 압축 속도를 높였습니다. #95881 (Raúl Marín).
  • x86에서 32바이트 블록의 LZ4 압축 해제 속도를 높였습니다. #96778 (Raúl Marín).
  • 이제 텍스트 인덱스 직접 읽기 최적화가 부분적으로 동작합니다 — 구체화된 텍스트 인덱스가 있는 파트는 이를 사용하고, 없는 파트는 기존 필터 표현식으로 처리됩니다. #96411 (Anton Popov).
  • 불필요한 데이터 복사를 제거하고 숫자 컬럼에 대한 벡터화된 최소/최대 계산을 활성화해 INSERTminmax 스킵 인덱스 계산을 최적화했습니다. #97392 (Raúl Marín).
  • 더 빠른 필터링을 위해 시스템 로그 테이블의 시간 컬럼에 minmax 보조 인덱스를, query_id/initial_query_id 컬럼에 bloom_filter 인덱스를 추가했습니다. #96712 (Alexey Milovidov).
  • 중복 제거가 활성화되지 않았을 때 INSERT에서 발생하던 메모리 사용량 회귀를 방지했습니다. #96503 (Alexey Milovidov).

메모리 최적화

  • 하이라이트와 VALUES parsing이 활성화되지 않은 경우, 사용되지 않는 필드를 제거해 ASTLiteral의 메모리 사용량을 줄였습니다. #93974 (Ilya Yatsishin).
  • 범용 ASTLiteral 자식 요소 대신 값 매개변수를 문자열/정수 쌍으로 저장하는 전용 Enum AST 클래스를 도입해 메모리 사용량을 줄였습니다. #94178 (Ilya Yatsishin).
  • 범용 AST 리터럴 노드 대신 컬럼 이름을 문자열로 직접 저장하도록 해 named tuple AST 객체의 메모리 사용량을 최적화했습니다. #94704 (Ilya Yatsishin).
  • CachedOnDiskReadBufferFromFile 구조체의 크기를 약 50배 줄였습니다. #96098 (Azat Khuzhin).
  • 이제 HashTable::resize는 테이블이 비어 있을 때 기존 데이터를 복사하지 않습니다. #96180 (Raúl Marín).

내부 최적화

  • 쿼리 파이프라인 내부에서 데이터를 파티셔닝하기 위해 “fastrange”(Daniel Lemire) 메서드를 도입하여 병렬 정렬과 조인 성능을 개선했습니다. #93080 (Alexey Milovidov).
  • 추가 링커 옵션을 통해 devirtualization을 개선했습니다. #94737 (Nikita Taranov).
  • ZooKeeper 요청을 배칭하여 파트가 많은 ReplicatedMergeTree 테이블의 레플리카 클론 성능을 개선했습니다. #94847 (c-end).
  • 더 빠른 해싱과 lock-free 카운터로 전환하여 observeOperations에서 ZooKeeper 수신 스레드의 CPU 사용량을 20% 이상 줄였습니다. #95962 (Miсhael Stetsyuk).

버그 수정

JOIN 버그 수정

  • outer-to-inner join 최적화가 적용될 때 Join 스토리지에서 발생하던 INCOMPATIBLE_TYPE_OF_JOIN 오류를 수정했습니다. #84292 (Vladimir Cherkasov).
  • USING 절과 join_use_nulls를 사용하는 여러 조인이 있는 쿼리의 논리 오류를 수정했습니다. #92251 (Vladimir Cherkasov).
  • join_use_nulls 사용 시 join 재정렬 과정에서 발생하던 논리 오류를 수정했습니다. #92289 (Vladimir Cherkasov).
  • join_on_disk_max_files_to_merge 설정으로 인해 발생할 수 있는 비정상 종료 문제를 수정했습니다. #92335 (Bharat Nallan).
  • 외부 조인을 내부 조인으로 변환할 때 쿼리 계획이 의도치 않게 변경되어 발생하던 LOGICAL_ERROR를 수정했습니다. 또한 조인 중 집계 키에 injective 함수가 사용되는 경우에도 적용되도록 최적화 요구 사항을 완화했습니다. #92503 (János Benjamin Antal).
  • 상수 조건에서 여러 조인을 사용할 때 발생하던 join_use_nulls 관련 논리 오류를 수정했습니다. #92892 (Vladimir Cherkasov).
  • LowCardinality(Nullable(T)) 컬럼의 full_sorting_join에서 NULL != NULL 처리 문제를 수정했습니다. #92924 (Vladimir Cherkasov).
  • 오른쪽 join 키가 희소 컬럼인 경우의 join 결과를 수정했습니다. #93038 (Amos Bird).
  • LEFT ANTI JOIN에 추가적인 후행 조건이 있는 경우 런타임 필터가 잘못 작동하던 문제가 수정되었습니다. #91824 (Alexander Gololobov).
  • 오른쪽 테이블에 대한 합계가 있는 쿼리에서 런타임 필터를 사용할 때 발생하는 논리 오류를 수정했습니다. #93330 (Alexander Gololobov).
  • 일부 경우 join runtime filters가 쿼리 계획에 추가될 때 중복된 const 컬럼이 잘못 반환되어 발생하던 논리 오류를 수정했습니다. #93144 (Alexander Gololobov).
  • 일부 정상적인 경우에도 ILLEGAL_TYPE_OF_ARGUMENT를 반환하던 join 런타임 필터용 __applyFilter 함수가 수정되었습니다. #93187 (Alexander Gololobov).
  • 이미 채워진 오른쪽 테이블과 조인할 때 런타임 필터가 추가되지 않던 문제를 수정했습니다. #93211 (Alexander Gololobov).
  • 런타임 필터가 활성화된 상태에서 조인된 테이블이 동일한 컬럼을 여러 번 반환할 때 발생하던 NOT_FOUND_COLUMN_IN_BLOCK 오류를 수정했습니다. #93526 (Alexander Gololobov).
  • Merge 테이블에 join 런타임 필터가 적용될 때 FilterStep이 제대로 추가되지 않던 문제를 수정했습니다. #94021 (Alexander Gololobov).
  • USING 절이 있는 Join 스토리지의 JOIN 작업 중 슈퍼타입으로의 형 변환 문제를 수정했습니다. #94000 (Dmitry Novik).
  • 병렬 레플리카 및 MergeTree가 아닌 테이블과의 JOIN을 사용하는 쿼리를 수정했습니다. #93902 (Igor Nikonov).
  • 런타임 필터에서 널 허용 조인 컬럼과 관련된 경쟁 상태를 수정했습니다. #95775 (Hechem Selmi).
  • Join 테이블에서 Nullable(String) 키를 사용할 때 빈 문자열이 NULL이 되던 문제를 수정했습니다. #96002 (Alexey Milovidov).
  • 비어 있는 MergeTree 테이블에서 direct 조인 알고리즘 사용 시 발생하던 NOT_SUPPORTED 오류를 수정했습니다. #95935 (Vladimir Cherkasov).
  • 외부 조인의 ON 조건이 앞서 조인된 여러 테이블의 컬럼을 참조할 때, 잘못된 조인 재정렬로 인해 여러 INNER JOIN과 함께 사용된 외부 조인이 포함된 쿼리에서 잘못된 결과가 반환되던 문제를 수정했습니다. #96193 (Vladimir Cherkasov).
  • 널 허용 하위 필드가 있는 Tuple 컬럼에서 발생하던 런타임 필터 예외를 수정했습니다. #96509 (Alexey Milovidov).
  • CROSS JOIN을 사용하고 병렬 레플리카가 활성화된 쿼리에서 잘못된 결과가 반환되던 문제를 수정했습니다. #96848 (Igor Nikonov).
  • INNER JOIN 및 WHERE 절과 함께 사용할 때 중복 행이 생성되던 arrayJoin 문제를 수정했습니다. 이 문제는 부분 프레디케이트 푸시다운으로 인해 arrayJoin이 포함된 필터가 JOIN 아래로 잘못 푸시되어 발생했습니다. #96989 (Alexey Milovidov).
  • JOIN 양쪽의 컬럼을 WHERE 절의 arrayJoin이 참조할 때 발생하던 LOGICAL_ERROR를 수정했습니다. #97239 (Alexey Milovidov).
  • USING을 포함한 JOIN의 VALUES 절에서 람다 함수 내부에 매처(*)를 사용할 때 발생하던 논리 오류를 수정했습니다. #95661 (Vladimir Cherkasov).
  • USING 컬럼의 타입이 서로 다른 경우 matcher (*, table.*) 및 analyzer_compatibility_join_using_top_level_identifier와 관련해 발생할 수 있는 논리 오류를 수정했습니다. #95808 (Vladimir Cherkasov).
  • analyzer_compatibility_join_using_top_level_identifier와 ALIAS 컬럼 관련 논리 오류를 수정했습니다. #97297 (Vladimir Cherkasov).
  • 기존 분석기에서 중복된 별칭이 있는 JOIN을 사용할 때 발생하던 충돌을 수정했습니다. #96405 (Ilya Golshtein).

쿼리 및 분석기 수정 사항

  • 미리 정의된 쿼리 핸들러에서 후행 공백이 삽입 작업 중 데이터로 해석되던 버그를 수정했습니다. #83604 (Fabian Ponce).
  • Enum 요소 확장과 같은 메타데이터 전용 ALTER 이후 프로젝션을 사용하는 집계에서 예외가 발생하는 문제를 수정했습니다. #84143 (Alexey Milovidov).
  • 윈도우 함수와 여러 인수에 대한 count_distinct_optimization 패스가 수정되었습니다. #92376 (Raúl Marín).
  • 부정 리터럴이 있는 arrayElement의 일관되지 않던 AST 형식화를 수정했습니다. #92293 (Pavel Kruglov).
  • 상수가 아닌 배열 인수를 사용할 때 NOT IN이 잘못된 값을 반환하던 문제가 수정되었습니다. #93314 (Yarik Briukhovetskyi).
  • Nothing 유형과 관련된 null-safe 비교 오류를 수정했습니다. #91884 (Yarik Briukhovetskyi).
  • use_top_k_dynamic_filtering 최적화와 관련된 Not found column 오류를 수정했습니다. #93316 (Nikolai Kochetov).
  • 스칼라 상관 서브쿼리가 있을 때 서브쿼리에서 사용되지 않는 컬럼이 제거되던 문제를 수정했습니다. #93273 (Dmitry Novik).
  • 키가 부호 있는 정수형일 때 분산 쿼리에서 optimize_inverse_dictionary_lookup가 작동하지 않던 문제가 수정되었습니다. #93848 (Nihal Z. Miaji).
  • 분산 remote() 쿼리에서 lag/lead가 작동하지 않는 문제를 수정했습니다. #93858 (Nihal Z. Miaji).
  • WHERE에서 not match(...)를 사용할 때 데이터 스키핑 로직 문제로 잘못된 결과가 발생하던 버그를 수정했습니다. #92726 (Nihal Z. Miaji).
  • WHERE 절에서 not materialize(...) 또는 not CAST(...)를 사용할 경우 잘못된 결과가 발생하던 데이터 스키핑 로직의 버그를 수정했습니다. #93017 (Nihal Z. Miaji).
  • 빈 배열이 has 함수에 사용될 때 발생하던 인덱스 분석 중의 논리 오류를 수정했습니다. #92995 (Nihal Z. Miaji).
  • 빈 튜플을 Map 컬럼과 함께 사용할 때 발생하던 드문 논리 오류를 수정했습니다. #93814 (Nihal Z. Miaji).
  • 거짓 조건에서 PK 세그먼트 분할을 사용하는 쿼리가 실패하던 문제를 수정했습니다. #92815 (Yarik Briukhovetskyi).
  • 로컬 테이블과 원격/분산 테이블을 함께 머지할 때 hostName()에서 ILLEGAL_COLUMN 오류를 발생시키던 Merge 테이블 엔진의 쿼리 계획 문제가 수정되었습니다. #93286 (Jinlin).
  • 별칭이 있는 테이블을 대상으로 하는 Merge 엔진에서 발생하던 NO_SUCH_COLUMN_IN_TABLE 오류를 수정했습니다. #92910 (Pavel Kruglov).
  • 여러 컬럼에 대한 프레디케이트, 블룸 필터 스킵 인덱스, 그리고 ORNOT 조건을 함께 사용하는 SELECT 쿼리에서 일관되지 않은 결과가 반환되던 문제를 수정했습니다. #94026 (Shankar Iyer).
  • 서브컬럼이 포함된 필터가 있을 때 프로젝션이 적용되지 않던 문제를 수정했습니다. #93141 (Pavel Kruglov).
  • 머지 중 프로젝션이 다시 빌드될 때 발생하던 _part_offset 손상을 수정하고, 불필요한 읽기를 줄여 프로젝션 처리를 최적화했습니다. #93827 (Amos Bird).
  • 실질적으로 동일한 컬럼의 별칭인 서로 다른 보간 컬럼이 block 내에서 같은 컬럼으로 축약되지 않도록 했습니다. #93197 (Yakov Olkhovskiy).
  • 머지 중 projection을 재구축할 때 사용되지 않는 컬럼을 제거해 메모리 사용량을 줄이고 임시 파트 생성 수를 줄였습니다. #93233 (Nikolai Kochetov).
  • 분산 쿼리에서 음수 LIMIT/OFFSET를 사용한 일부 경우에 발생하던 논리 오류를 수정했습니다. #95357 (Nihal Z. Miaji).
  • 분산 쿼리에서 소수값 LIMIT/OFFSET를 사용했을 때 일부 경우에 발생하던 논리적 오류를 수정했습니다. #96475 (Nihal Z. Miaji).
  • transform_null_in이 활성화된 상태에서 IN 함수가 NULL 값에 대해 잘못된 결과를 반환하던 문제를 수정했습니다. #95674 (Nihal Z. Miaji).
  • 단일 컬럼 참조에서 UNSUPPORTED_METHOD 오류로 실패하던 IN (col) 문제를 수정했습니다. #97646 (Alexey Milovidov).
  • 집계 인수가 LowCardinality(Nullable)일 때 optimize_syntax_fuse_functionssum/count/avgsumCount()로 재작성하던 문제를 수정했습니다. #96239 (Nihal Z. Miaji).
  • not INnot has 함수의 잘못된 파티션 프루닝을 수정했습니다. #96241 (Nihal Z. Miaji).
  • prewhere의 람다 표현식으로 인해 발생한 prewhere 필터 오류를 수정했습니다. #95395 (Xiaozhe Yu).
  • 구체적인 값이 필요한 위치에 람다 표현식이 전달될 때 쿼리 분석기에서 발생하던 LOGICAL_ERROR를 수정했습니다. #96892 (Alexey Milovidov).
  • 람다 함수가 포함된 특정 표현식에서 발생하던 널 포인터 역참조 문제를 수정했습니다. #96479 (Alexey Milovidov).
  • CTE와 서브쿼리에서 file과 같은 테이블 함수에 각 서브쿼리의 SETTINGS가 적용되지 않던 문제가 수정되었습니다. #96882 (Alexey Milovidov).
  • 잘못된 쿼리 결과를 초래할 수 있었던 CTE folded constants 관련 쿼리 조건 캐시 해시 충돌을 수정했습니다. #96172 (Alexey Milovidov).
  • 분석기가 활성화된 상태에서 merge() 테이블 함수를 통해 ALIAS 컬럼 안에 람다 표현식이 있는 테이블을 쿼리할 때 발생하던 BAD_ARGUMENTS 오류를 수정했습니다. #97551 (Alexey Milovidov).
  • EXCEPT ALLINTERSECT ALL이 행의 중복 횟수를 무시하고 DISTINCT 버전처럼 동작하던 문제가 수정되었습니다. #96876 (Alexey Milovidov).
  • PRECEDING 오프셋이 큰 경우 WindowTransform에서 발생하던 assertion failure를 수정했습니다. #96026 (Alexey Milovidov).
  • group_by_use_nulls = 1CUBE/ROLLUP/GROUPING SETS와 함께 윈도우 함수를 사용할 때 발생하던 예외 문제를 수정했습니다. #96878 (Alexey Milovidov).
  • GROUPING SETS, group_by_use_nulls, 그리고 LowCardinality가 적용된 Tuple의 상호작용으로 인해 예상치 못한 블록 구조가 생성되던 문제를 수정했습니다. #96358 (Alexey Milovidov).
  • Nullable(Tuple(...)) 내부에 LowCardinality(Nullable(...))가 포함된 키를 사용할 때 GROUP BY ... WITH ROLLUP/CUBE에서 발생하던 논리 오류를 수정했습니다. #97647 (Alexey Milovidov).
  • if 또는 transformNullable(String)을 반환할 때 IfTransformStringsToEnumPass에서 발생하는 assertion failure 문제를 수정했습니다. #97002 (Alexey Milovidov).
  • optimize_inverse_dictionary_lookupdictGet(...) 프레디케이트를 재작성할 때 CREATE TEMPORARY TABLE 권한이 없는 사용자에게 발생하던 ACCESS_DENIED 문제를 수정했습니다. #97484 (Nihal Z. Miaji).
  • PREWHERE와 타입 추론이 함께 사용되는 분산 쿼리의 드문 경우에 발생하던 UInt64Int32if 함수 타입 불일치를 수정했습니다. #96012 (Alexey Milovidov).
  • Bool 타입이 포함된 JIT 컴파일 쿼리 관련 문제가 수정되었습니다. #96013 (Alexey Milovidov).
  • JIT로 컴파일된 표현식에서 DateTimeDateTime64로 변환될 때 잘못된 결과가 나오던 문제를 수정했습니다(예: CASE/if/multiIf에서 DateTime 타입이 혼합된 경우). #96879 (Alexey Milovidov).
  • 가변 폭 포맷터를 사용할 때 formatDateTime에서 발생하던 초기화되지 않은 값 사용 문제를 수정했습니다. #96133 (Alexey Milovidov).
  • 호환되지 않는 타입으로 호출했을 때 indexOfAssumeSorted에서 std::terminate가 발생하던 문제를 수정했습니다. #96877 (Alexey Milovidov).
  • 이제 Geometry 함수는 Geometry variant type 외에도 개별 Geometry 하위 타입을 허용합니다. #97571 (Alexey Milovidov).
  • row policy/PREWHERE 및 FINAL이 포함된 쿼리에서 인덱스로 인해 결과가 달라지던 문제를 수정했습니다. #97076 (Yarik Briukhovetskyi).
  • read-in-order 최적화에서 행 정책을 사용할 수 있게 했습니다. #97538 (Janos Benjamin Antal).
  • QUALIFY 절과 함께 텍스트 인덱스가 적용된 컬럼을 사용할 때 발생하던 LOGICAL_ERROR를 수정했습니다. #97313 (Alexey Milovidov).
  • WHERE 절에 AND/OR 표현식이 32개를 초과하는 경우 발생할 수 있던 크래시를 수정했습니다. #97698 (Shankar Iyer).
  • FINAL을 사용하는 테이블에서 star expansion과 함께 indexHint를 사용할 때 removeUnusedColumns 최적화의 블록 구조 불일치 문제를 수정했습니다. #97622 (Alexey Milovidov).
  • 괄호 안의 별칭이 있는 tuple 리터럴에서 AST 포맷 왕복 시 발생하던 불일치 문제를 수정했습니다. #97418 (Alexey Milovidov).
  • NOT (1, 1, 1)에 대한 AST 포맷의 불일치를 수정했습니다. #97653 (Alexey Milovidov).

MergeTree 및 스토리지 버그 수정

  • 파일 시스템이 대소문자를 구분하지 않는 경우, MergeTree에서 파일 이름을 항상 해시로 대체하도록 변경했습니다. 이전에는 macOS에서 컬럼/서브컬럼 이름이 대소문자만 다른 경우 데이터 손상으로 이어질 수 있었습니다. #86559 (Pavel Kruglov).
  • materialized view는 이제 생성된 데이터베이스를 실행 컨텍스트로 사용하므로, 뷰의 SELECT 쿼리에서 데이터베이스를 명시적으로 지정하지 않아도 됩니다. #88193 (Dmitry Kovalev).
  • materialized view 내에서 사용하는 기반 쿼리에 대해 CREATE 단계에서 전체 권한 검사를 추가했습니다. #89180 (pufit).
  • 트랜잭션 없이 수행된 mutation이 이후 롤백된 활성 트랜잭션의 파트에 적용되던 논리 오류를 수정했습니다. #90469 (Shaohua Wang).
  • 일반 데이터베이스를 atomic 데이터베이스로 변환한 후 system.warnings가 올바르게 갱신되지 않던 문제를 수정했습니다. #90473 (sdk2).
  • ATTACH AS REPLICATED 수행 중 발생하던 LOGICAL_ERROR: Storage does not support transaction 오류를 수정했습니다. #91772 (Shaohua Wang).
  • ratio_of_defaults_for_sparse_serialization=0.0인 희소 컬럼에 mutation을 수행한 뒤 발생할 수 있던 FILE_DOESNT_EXIST 오류를 수정했습니다. #92860 (Pavel Kruglov).
  • alter로 ratio_of_defaults_for_sparse_serialization1.0으로 변경한 뒤 희소 컬럼 mutation 이후 발생할 수 있던 FILE_DOESNT_EXIST 오류를 수정했습니다. #93016 (Pavel Kruglov).
  • 공유 파트에서 TOCTOU 경쟁 상태로 인해 오래된 파트가 사용될 수 있던 문제를 수정했습니다. #93022 (Azat Khuzhin).
  • MergeTree에서 mutation 중 원본 파트의 직렬화 정보 설정을 상속하도록 변경하여, 데이터 타입 직렬화 변경 후 mutation이 적용된 파트에서 잘못된 쿼리 결과가 발생할 수 있던 문제를 수정했습니다. #92419 (Pavel Kruglov).
  • 같은 이름의 컬럼과 하위 컬럼 간 충돌로 인해 잘못된 직렬화와 쿼리 실패가 발생할 수 있던 문제를 수정했습니다. #92453 (Pavel Kruglov).
  • 파티션 표현식에 하위 컬럼이 포함된 테이블에 데이터를 삽입할 때 발생하던 NOT_FOUND_COLUMN_IN_BLOCK를 수정했습니다. #92905 (Pavel Kruglov).
  • 원본 테이블을 alter하는 동안 MV에서 subcolumn이 누락될 수 있던 문제를 수정했습니다. #93276 (Pavel Kruglov).
  • 중복 제거 경합으로 인해 ReplicatedMergeTree를 복원할 때 발생하던 LOGICAL_ERROR를 수정했습니다. #93612 (Pablo Marcos).
  • 직접 역직렬화 시 TTL 업데이트에 희소 컬럼을 사용하도록 수정하여 Unexpected type of result TTL column 오류를 방지했습니다. #93619 (Pavel Kruglov).
  • TTL 집계 중 필요 시 SET 표현식 결과의 LowCardinality 래퍼를 복원했습니다. #92971 (Seva Potapov).
  • ALTER TABLE REWRITE PARTS에서 발생하던 Cannot add action to empty ExpressionActionsChain 문제를 수정했습니다. #92754 (Azat Khuzhin).
  • ON CLUSTER를 사용할 때 CREATE USER 인증 메서드에서 발생하던 쿼리 매개변수 치환 문제를 수정했습니다. #92777 (xiaohuanlin).
  • MergeTree 테이블이 읽기 전용 디스크에 있는 경우, 시작 시 임시 디렉터리를 삭제하려는 시도를 더 이상 하지 않습니다. #92748 (Alexey Milovidov).
  • 서브컬럼 기반으로 생성된 스킵 인덱스의 머티리얼라이즈 문제를 수정했습니다. #93708 (Anton Popov).
  • 종속 인덱스가 있는 CLEAR COLUMN 문제를 수정했습니다. #94057 (Raúl Marín).
  • 재시작 후 interserver host가 변경되면 복제된 데이터베이스가 ATTACH되지 않던 문제를 수정했습니다. #93779 (Tuan Pham Anh).
  • CREATE TABLE ... AS urlCluster()Replicated 데이터베이스 엔진 관련 논리 오류를 수정했습니다. #92418 (Kseniia Sumarokova).
  • REPLACE PARTITION과 백그라운드 뮤테이션 사이의 경쟁 상태를 수정하여 기존 데이터와 새 데이터가 동시에 보일 수 있던 문제를 해결했습니다. #96955 (Alexey Milovidov).
  • REPLACE PARTITION과 백그라운드 뮤테이션 사이에 남아 있던 경쟁 상태를 수정해, 이전 데이터가 다시 나타날 수 있는 문제를 해결했습니다. #97105 (Alexey Milovidov).
  • PartCheckThread가 이미 뮤테이션이 적용된 파트에 대해 GET_PART를 다시 큐에 넣으면서 발생하던 멈춰 있던 뮤테이션 문제를 수정했습니다. #97162 (Alexey Milovidov).
  • 이전에 동일한 컬럼에 경량 업데이트가 수행된 경우 ALTER TABLE DROP COLUMN이 실패하던 문제를 수정했습니다. #96861 (Anton Popov).
  • 경량 업데이트 중 patch parts를 적용할 때 발생하던 null 포인터 역참조 문제를 수정했습니다. #97583 (Alexey Milovidov).
  • 알 수 없는 프로젝션이 있는 파트는 더 이상 영구 손실로 표시되지 않습니다. #95952 (Mikhail Artemenko).
  • CREATE TABLE ... CLONE AS ...가 원본 테이블의 전체 한정 이름을 무시하던 문제를 수정했습니다. #96415 (Hasyimi Bahrudin).
  • 메타데이터 변경 시 복제된 테이블에서 암시적 인덱스가 재생성되던 문제를 수정했습니다. #96600 (Raúl Marín).
  • 별칭 컬럼이 있는 암시적 인덱스를 수정하고, 생성 전에 전체 유효성 검사를 수행하도록 했습니다. #97115 (Raúl Marín).
  • TTL 머지 후 모든 행이 필터링되었을 때 _minmax_count_projection을 통해 min(timestamp)가 epoch(1970-01-01)을 반환하던 문제를 수정했습니다. #96703 (Raquel Barbadillo).
  • use_const_adaptive_granularityindex_granularity_bytes의 조합(비적응형 세분화 수준)으로 인해 계산 오류가 발생하던 문제를 수정했습니다. #96143 (Alexey Milovidov).
  • 비적응형 인덱스 세분화 수준을 사용하는 테이블을 ORDER BY ... LIMIT로 읽을 때 발생하던 Number of rows in lazy chunk does not match number of offsets 예외를 수정했습니다. #97270 (Alexey Milovidov).
  • 다른 레플리카가 공유 파트를 가져오는 작업을 마치기 전에 삭제될 수 있었던 zero-copy 복제의 회귀 문제가 수정되었습니다. #95597 (filimonov).
  • SYSTEM RESTART REPLICA에서 ZooKeeper 이외의 예외로 테이블 재생성에 실패할 경우 데이터베이스에서 테이블이 누락되어 DatabaseReplicated의 메타데이터 다이제스트 불일치가 발생하던 문제를 수정했습니다. #97276 (Alexey Milovidov).
  • ALTER TABLE MODIFY COLUMN으로 컬럼 유형이 변경된 뒤 컬럼 통계를 생성할 때 발생하던 assert_cast 예외를 수정했습니다. #97027 (Alexey Milovidov).
  • 테이블에 정의된 통계 정보가 없으면 ClickHouse는 더 이상 이를 로드하려고 시도하지 않아 불필요한 오버헤드를 피합니다. #96233 (Han Fei).
  • 분산 DDL을 기다리는 중 복제된 데이터베이스를 동시에 삭제할 때 발생하던 There was an error: Cannot obtain error message 논리 오류를 수정했습니다. #95664 (Alexander Tokmakov).
  • 테이블에 널 허용 기본 키(primary key)가 있고, 쿼리에서 첫 번째 인수로 상수를 사용하는 coalesce를 쓸 때 KeyCondition에서 발생하던 논리 오류를 수정했습니다. #96340 (Alexey Milovidov).

데이터 타입 및 직렬화(serialization) 버그 수정

  • Dynamic/JSON 타입에서 size 서브컬럼을 읽을 때 발생할 수 있던 오류를 수정했습니다. #95573 (Pavel Kruglov).
  • JSON 배열에 tupleElement를 적용할 때 발생하던 크래시를 수정했습니다. #95647 (Pavel Kruglov).
  • 중첩 경로를 가진 JSON에서 tupleElement를 실행할 때 잘못된 결과를 반환하던 문제를 수정했습니다. #95907 (Pavel Kruglov).
  • 경로에 type hint가 지정된 JSON에서 tupleElement가 예외를 발생시키는 문제를 수정했습니다. #97728 (Pavel Kruglov).
  • JSON 데이터 타입의 스키핑 경로를 수정했습니다 — 이전에는 JSON(SKIP path)path 접두사로 시작하는 모든 키(pathpath 같은 키 포함)를 건너뛰어 데이터 손실이 발생할 수 있었습니다. 이제는 정확히 일치하는 키만 건너뜁니다. #95948 (Pavel Kruglov).
  • JSON의 형식이 지정된 경로에 type_json_allow_duplicated_key_with_literal_and_nested_object가 적용되도록 수정했습니다. #97422 (Pavel Kruglov).
  • JSON 타입에서 호환되지 않는 타입 지정 경로 검사 관련 문제를 수정했습니다. #92539 (Pavel Kruglov).
  • JSON에서 경로 ‘skip’의 type hint 생성 문제를 수정했습니다. #92842 (Pavel Kruglov).
  • 분석기에서 컬럼 별칭 내 동적 서브컬럼 해석 문제를 수정했습니다. #92583 (Pavel Kruglov).
  • Variant 컬럼에 대한 잘못된 in-place filtering 최적화로 인해 발생한 Nested columns sizes are inconsistent with local_discriminators 오류를 수정했습니다. #96410 (Alexey Milovidov).
  • GROUP BY에서 Variant 인수를 사용한 ifNull에서 발생하던 충돌을 수정했습니다. #96790 (Alexey Milovidov).
  • arrayROCAUC와 같이 const 인수가 필요한 함수에서 발생하던 FunctionVariantAdaptor의 논리 오류를 수정했습니다. #97116 (Bharat Nallan).
  • FunctionVariantAdaptor에서 함수가 Nothing 유형을 반환할 때 발생하던 LOGICAL_ERROR를 수정했습니다. #97213 (Alexey Milovidov).
  • NULL을 LowCardinality 타입을 포함한 Variant 컬럼과 비교할 때 발생하던 논리 예외를 수정했습니다. #97379 (Alexey Milovidov).
  • 인수에 내부적으로 LowCardinality를 포함한 Variant 유형이 있을 때 concat에서 발생하던 LOGICAL_ERROR를 수정했습니다. #97654 (Alexey Milovidov).
  • LowCardinality 컬럼이 널 허용으로 변환될 때 잘못된 결과가 반환되던 문제가 수정되었습니다. #96483 (Nihal Z. Miaji).
  • cast_keep_nullable가 활성화되었을 때 CAST에서 LowCardinality Nullable 타입을 올바르게 처리하도록 수정했습니다. #95747 (Alexey Milovidov).
  • 복잡한 중첩 타입을 캐스팅할 때 발생하던 ColumnNullable is not compatible with original 예외를 수정했습니다. #96924 (Alexey Milovidov).
  • Nullable(Tuple(... Nullable(T) ...)) 타입의 서브컬럼에 isNull/isNotNull를 사용할 때 발생하던 LOGICAL_ERROR를 수정했습니다. #97582 (Alexey Milovidov).
  • 배열을 QBit로 변환할 때 발생하던 LOGICAL_ERROR를 수정했습니다. #97413 (Alexey Milovidov).
  • 희소 컬럼과 해당 서브컬럼을 함께 읽을 때 발생하던 LOGICAL_ERROR를 수정했습니다. #97515 (Pavel Kruglov).
  • PREWHERE가 있는 Tuple에서 희소 Nullable(String).size 서브컬럼을 읽을 때 발생하던 LOGICAL_ERROR를 수정했습니다. #97264 (Alexey Milovidov).
  • 내부 희소 서브컬럼이 있는 컬럼을 처리할 때 SetMergeTreeIndexSet에서 발생하던 assertion 실패를 수정했습니다. #97493 (Alexey Milovidov).
  • 빈 Tuple 컬럼을 정렬할 때 발생할 수 있던 오류 SIZES_OF_COLUMNS_DOESNT_MATCH를 수정했습니다. #92520 (Pavel Kruglov).
  • 반복도가 매우 높은 문자열 데이터에 영향을 미치던 네이티브 Parquet 리더의 DELTA_BYTE_ARRAY 디코딩 버그를 수정했습니다. #91929 (Daniel Muino).
  • Parquet 파일을 읽는 동안 prewhere 표현식의 일부가 쿼리의 다른 위치에서도 사용될 때 발생하던 assertion을 수정했습니다. #90635 (Max Kainov).
  • PREWHERE filter 컬럼에 불리언이 아닌 UInt8 값이 포함된 경우 Parquet V3 네이티브 리더에서 발생하던 LOGICAL_ERROR를 수정했습니다. #96594 (Alexey Milovidov).
  • Tuple 컬럼 뒤에 JSON 컬럼이 오는 경우 이전 리더의 Parquet 스키마 추론 문제를 수정했습니다. #92867 (Michael Kolupaev).
  • glob 스키마 추론 시 추론된 파일에만이 아니라 모든 파일에 대해 스키마가 캐시되던 문제를 수정했습니다. #92006 (Pavel Kruglov).
  • 빈 파일에서 ProtobufList 포맷을 읽을 때 발생하던 문제와 빈 테이블에서 유령 레코드가 생성되던 문제를 수정했습니다. #96007 (Alexey Milovidov).
  • Gorilla 코덱에서 명시적으로 지정한 크기가 데이터 타입 크기와 일치하지 않을 때 발생하던 회귀 문제가 수정되었습니다. #96118 (Alexey Milovidov).
  • 이제 PostgreSQL engine에서 BOOLEAN[]를 올바르게 읽을 수 있습니다. #96006 (Alexey Milovidov).
  • SQLite TEXT 컬럼에서 UUID 컬럼을 읽을 때 발생하던 논리 오류를 수정했습니다. #96016 (Alexey Milovidov).
  • SQLite engine의 DateTime, Date, UUID 및 기타 타입 변환 문제를 수정했습니다. #96017 (Alexey Milovidov).
  • SQLite 및 PostgreSQL에 대한 쿼리에서 FixedString 값이 잘못 이스케이프되던 문제를 수정했습니다. #96019 (Alexey Milovidov).
  • 숫자를 enum으로 변환하기 위한 input_format_numbers_enum_on_conversion_error 설정이 추가되었습니다. #56240 (Nikolay Degterinsky).

텍스트 인덱스 및 스킵 인덱스 버그 수정

  • 행 수가 4,294,967,295개를 초과하는 파트가 있는 테이블에서는 잘못된 쿼리 결과를 방지하기 위해 텍스트 인덱스 생성 및 구체화가 일시적으로 비활성화되었습니다. #92644 (Anton Popov).
  • MergeTree 테이블의 텍스트 인덱스 머지 중 발생하던 여러 크래시를 수정했습니다. #92925 (Anton Popov).
  • 복잡한 표현식(예: concat(col1, col2))을 기반으로 생성된 텍스트 인덱스의 머지 문제를 수정했습니다. #93073 (Anton Popov).
  • 인덱스에 토큰이 하나도 없을 때 발생하던 배열 컬럼의 텍스트 인덱스 분석 문제를 수정했습니다. #93457 (Anton Popov).
  • 서브컬럼을 기반으로 생성된 텍스트 인덱스의 재구성 문제가 수정되었습니다. #93326 (Anton Popov).
  • 중복 검색 쿼리에서 텍스트 인덱스 직접 읽기 문제를 수정했습니다. #93516 (Anton Popov).
  • has, mapContainsKey, mapContainsValue 함수에서 텍스트 인덱스 사용 여부에 따라 서로 다른 결과가 반환될 수 있었던 텍스트 인덱스 분석상의 불일치를 수정했습니다. #93578 (Anton Popov).
  • system.parts의 텍스트 인덱스의 압축되지 않은 크기 계산을 수정했습니다. #92832 (Anton Popov).
  • ngram 길이가 > 8인 ngrambf_v1 인덱스에서 예외가 발생하던 문제를 해결했습니다. #92672 (Robert Schulze).
  • UTF-8이 아닌 데이터에서 ngram_bf 인덱스로 인해 초기화되지 않은 메모리를 읽던 문제가 수정되었습니다. #93663 (Alexey Milovidov).
  • 벡터 유사도 인덱스에서 stack-use-after-scope 문제를 수정했습니다. #96259 (Alexey Milovidov).
  • 스킵 인덱스 표현식의 결과로 상수 컬럼이 생성될 때 발생하던 논리 오류를 수정했습니다. #96880 (Alexey Milovidov).
  • 빈 표현식 ()을 인덱스로 지정해 테이블을 생성할 때 유효하지 않은 메모리 접근이 발생하던 문제를 수정했습니다. #96363 (Alexey Milovidov).
  • 비활성화된 use_primary_key와 매우 많은 수의 OR 조건이 있는 인덱스 분석에서 발생하던 use-after-free 문제를 수정했습니다. #96112 (Alexey Milovidov).
  • 경량 업데이트에서 WHEREIN 절 서브쿼리와 함께 사용할 때 프라이머리 인덱스 사용을 수정했습니다. #92838 (Anton Popov).
  • hypothesis 인덱스를 검증할 때 올바른 오류 코드를 사용하도록 수정했습니다. #92559 (Raúl Marín).

데이터 레이크 버그 수정

  • split-by-buckets 모드에서 Iceberg를 읽을 때 단일 노드 클러스터에서 발생하던 충돌 문제를 수정했습니다. #91553 (Konstantin Vedernikov).
  • Iceberg에서 ORDER BY 튜플 문제를 수정했습니다. #93225 (Konstantin Vedernikov).
  • DataLakeCatalog의 Azure ADLS Gen2 발급 자격 증명 지원을 수정했습니다 — Iceberg REST 카탈로그에서 adls.sas-token.* 키를 파싱하고 ABFSS URL 파싱 문제를 해결했습니다. #93477 (Karun Anantharaman).
  • Iceberg용 DateDate32로 변경했습니다. #95322 (Konstantin Vedernikov).
  • Iceberg의 ORDER BY에서 발생하던 크래시를 수정했습니다. #96484 (Konstantin Vedernikov).
  • Iceberg 파티셔닝 문제를 수정했습니다. #96620 (Konstantin Vedernikov).
  • Iceberg 매니페스트 항목에서 position delete reference가 NULL인 경우 데이터 파일의 잘못된 범위를 수정했습니다. #96061 (Daniil Ivanik).
  • Iceberg의 루트 메타데이터 파일 설정에 대한 추가 유효성 검사를 도입했습니다. #96754 (Daniil Ivanik).
  • Iceberg 카탈로그에 더 이상 자격 증명이 기록되지 않습니다. #96831 (Konstantin Vedernikov).
  • 파티션된 Delta Lake 데이터의 squashing 문제를 수정했습니다. #95773 (Kseniia Sumarokova).
  • 잘못된 auth_header로 인해 system.tables가 작동하지 않던 RESTful datalake catalog 문제를 수정했습니다. #96680 (Han Fei).

S3/Azure/객체 스토리지 수정 사항

  • 비결정적 함수가 있을 때 S3 테이블 엔진의 파티션 키 캐싱 문제를 수정했습니다. #92844 (Miсhael Stetsyuk).
  • 캐시가 활성화된 경우 발생하던 ReadBufferFromS3의 assert 실패를 수정했습니다. #93809 (Kseniia Sumarokova).
  • DiskObjectStorage 정리 스레드에서 발생할 수 있는 오류를 수정했습니다. #87411 (Kseniia Sumarokova).
  • DiskObjectStorageTransaction에서 발생할 수 있는 교착 상태를 해결했습니다. #93810 (Kseniia Sumarokova).
  • 많은 오류가 발생할 때 DiskObjectStorage 정리 스레드가 실패할 수 있던 문제를 수정했습니다. #94048 (Kseniia Sumarokova).
  • copyS3File의 multipart_tags에서 발생하던 데이터 레이스를 수정했습니다. #97227 (Azat Khuzhin).
  • 객체 스토리지 기반 파일형 테이블(S3, Azure)에서 잘못된 ALTER UPDATE mutation을 실행할 때 더 이상 nullptr 역참조가 발생하지 않도록 수정되었습니다. #96162 (Alexey Milovidov).

S3Queue 버그 수정

  • S3Queue ordered mode에서 발생하던 Failed to set file processing within 100 retries 오류를 수정했으며, 이제는 오류 대신 경고로 표시됩니다. #92814 (Kseniia Sumarokova).
  • S3Queue 설정 s3queue_migrate_old_metadata_to_buckets의 버그를 수정했습니다. #93232 (Kseniia Sumarokova).
  • S3Queue/AzureQueue 엔진의 메타데이터 문제를 수정했습니다. #90498 (Kseniia Sumarokova).
  • S3Queue/AzureQueue 스토리지에서 발생하는 데이터 레이스를 수정했습니다. #95385 (Kseniia Sumarokova).
  • S3Queue/AzureQueue 엔진에서 스트리밍할 때 발생하던 중복 제거 문제를 수정했습니다. #95467 (Kseniia Sumarokova).

보안 및 접근 제어 버그 수정

  • SYSTEM SYNC FILE CACHE에서 누락되어 있던 접근 권한 확인을 수정했습니다. #92372 (Kseniia Sumarokova).
  • 지나치게 제한적이었던 와일드카드 권한 부여의 액세스 권한 검사 로직 오류를 수정했습니다. #92725 (pufit).
  • merge 테이블 엔진을 사용하더라도 SHOW COLUMNS 권한 없이 테이블의 컬럼 목록을 가져오지 못하도록 했습니다. #93695 (János Benjamin Antal).
  • groupConcat state를 역직렬화하는 과정에서 메모리 안전성 문제를 일으킬 수 있는 정수 오버플로우 취약점을 수정했습니다. #93426 (Raufs Dunamalijevs).
  • 압축 해제된 버퍼 크기가 예상대로인지 검증하도록 수정했습니다. #93690 (Raúl Marín).
  • 기본 역할 해제 문제를 수정했습니다. #96103 (Vitaly Baranov).
  • 일부 권한이 REVOKE된 경우 AccessRights::contains가 잘못된 결과를 반환하던 문제를 수정했습니다. #96170 (pufit).
  • 분산 쿼리에서 최초 사용자에게 할당된 행 정책이 업데이트되지 않던 문제를 수정했습니다. #95469 (Vitaly Baranov).
  • 이제 redis 테이블 함수의 password 인수는 로그와 시스템 테이블(system tables)에서 마스킹됩니다. #95325 (Janos Benjamin Antal).
  • X509 인증서를 읽을 때 발생하던 BIO 객체의 메모리 누수를 해결했습니다. #96885 (Alexey Milovidov).
  • 버퍼 오버플로우를 방지하기 위해 bech32의 witness version을 검증했습니다. #96671 (Raúl Marín).
  • 여러 데이터베이스에 대해 제한된 권한만 가진 사용자로 시스템 테이블을 쿼리할 때 성능이 느려지던 문제를 수정했습니다. #95874 (pufit).

Backup 및 복원 버그 수정

  • 잘못된 아카이브 항목 크기 헤더로 인해 발생한 Couldn't pack tar archive: Failed to write all bytes 오류를 수정했습니다. #92122 (Julia Kartseva).
  • 많은 동시 백업이 동일한 파일을 두고 경합하면서 서버가 크래시되던 문제를 수정했습니다. #93659 (Alexey Milovidov).
  • plain_rewritable 객체 스토리지 디스크에서 아카이브 기반 백업(.zip, .tzst)을 생성할 때 발생하던 스택 오버플로우 문제를 수정했습니다. #96872 (Alexey Milovidov).
  • 디스크 공간 부족 또는 기타 I/O 오류로 Backup이 실패할 때 발생하던 서버 충돌을 수정했습니다. #96873 (Alexey Milovidov).
  • use-after-free로 인해 StorageKeeperMap 백업 중 발생하던 segfault를 수정했습니다. #97336 (Alexey Milovidov).

크래시 및 안정성 수정

  • 연결이 끊어진 Connection에서 읽는 중 발생하던 충돌을 수정했습니다. #92807 (Raufs Dunamalijevs).
  • 두 번째 인수가 NULL인 경우 tokens() 함수에서 발생할 수 있는 비정상 종료를 수정했습니다. #92586 (Raúl Marín).
  • 상수가 아닌 토크나이저 매개변수로 tokens를 호출할 때 발생하던 서버 충돌을 수정했습니다. #93383 (Robert Schulze).
  • 동시에 컬럼 축소 또는 필터링이 수행되는 동안 기반 const PREWHERE 컬럼을 원본 위치에서 직접 변경해 발생할 수 있던 잠재적 크래시를 수정했습니다. #92588 (Arsen Muk).
  • background schedule pool 종료 시 발생할 수 있던 멈춤 문제를 수정했으며, 이로 인해 shutdown 시 server가 멈출 수 있었습니다. #93008 (Azat Khuzhin).
  • 분산 쿼리를 미리 취소한 후 연결이 비정상 상태로 남는 문제를 수정했습니다. #93029 (Azat Khuzhin).
  • estimateCompressionRatio()에서 발생할 수 있는 Cannot finalize buffer after cancellation 문제를 수정했습니다. #93068 (Azat Khuzhin).
  • 종료 시 발생할 수 있는 멈춤 현상을 해결하기 위해 ZooKeeper가 종료 과정에서 정상적으로 마무리되도록 했습니다. #93602 (Azat Khuzhin).
  • ZooKeeper 스토리지를 사용하는 환경에서 백그라운드로 이름이 지정된 컬렉션을 다시 로드하는 중 발생하던 처리되지 않은 예외를 수정했습니다. #92717 (Kseniia Sumarokova).
  • ReadWriteBufferFromHTTP에서 초기화되지 않은 값을 사용하는 문제를 수정했습니다. #94058 (Alexey Milovidov).
  • TraceSender 버퍼 크기가 갱신되지 않아 서로 다른 스레드의 플러시가 뒤섞이던 문제를 수정했습니다. #93966 (Miсhael Stetsyuk).
  • PipelineExecutor가 살아 있는 동안 IStorage 객체가 파괴되지 않도록 QueryPipeline에 storage shared pointer를 저장하도록 했습니다. #93746 (Miсhael Stetsyuk).
  • 취소 시 분산 쿼리에서 발생할 수 있는 크래시를 수정했습니다. #95466 (Aleksandr Musorin).
  • DROP WORKLOAD가 쿼리와 동시에 실행될 때 발생하던 비정상 종료 문제를 수정했습니다. #95856 (Alexey Milovidov).
  • DROP WORKLOAD의 데이터 레이스를 수정했습니다. #96614 (Sergei Trifonov).
  • ThreadPoolCallbackRunnerLocal 사용과 관련된 여러 치명적인 버그를 수정했습니다. #95818 (Raúl Marín).
  • 메모리 오버커밋 트래커가 작동할 때 잠금 역전으로 인해 ProcessList에서 발생할 수 있던 교착 상태를 수정했습니다. #96182 (Antonio Andelic).
  • max_execution_time가 큰 쿼리에서 취소 확인 스레드의 라이브락 문제를 수정했습니다. #96450 (Sergei Trifonov).
  • race condition으로 인해 MemoryWorker 정리 스레드가 멈추던 문제가 수정되었습니다. #96819 (Antonio Andelic).
  • 캐시된 저장소 스냅샷이 조기에 파기되어 발생한 clearCaches 충돌을 수정했습니다. #96995 (Alexey Milovidov).
  • 제약 조건이 있는 CREATE TABLE에서 발생하던 heap-use-after-free 문제를 수정했습니다. #96669 (Nikita Taranov).
  • StorageKafka2에서 발생할 수 있는 use-after-free를 수정했습니다. #97520 (Bharat Nallan).
  • DatabaseMaterializedPostgreSQLshutdown_called에서 발생하던 데이터 레이스를 수정했습니다. #97554 (Alexey Milovidov).
  • 세그먼트형 HASHED 딕셔너리의 병렬 로딩 중 일부 행이 로드되지 않을 수 있던 경쟁 상태 문제를 수정했습니다. #96953 (Alexey Milovidov).
  • 한 딕셔너리가 자신을 재귀적으로 참조하는 Merge 테이블을 참조할 때 발생하던 교착 상태를 해결했습니다. #96120 (Alexey Milovidov).
  • 더 최신 버전의 server가 쿼리 계획 역직렬화 중 알 수 없는 설정을 전송할 때 발생하던 BaseSettings::readBinary의 범위 밖 접근 문제가 수정되었습니다. #97585 (Michael Stetsyuk).
  • 스택 언와인딩 과정에서 dropReplicationSlot이 예외를 발생시키는 경우 MaterializedPostgreSQL 데이터베이스에 테이블을 ATTACH할 때 발생하던 충돌을 수정했습니다. #96871 (Alexey Milovidov).
  • HTTP connection이 닫히지 않도록 insert select에서 요청 스트림을 해제했습니다. #92175 (Sema Checherinda).
  • Backup 데이터베이스의 SHOW CREATE DATABASE에서 발생하던 데드락을 수정했습니다. #92541 (Azat Khuzhin).

기타 버그 수정

  • hasAllTokenshasAnyTokens 함수에서 handleAllTokens의 빈 배열 처리 문제를 수정했습니다. #93328 (Anton Popov).
  • 전역 프로파일러의 주기를 수정했습니다 — 설정된 값 대신 절삭된 값이 사용되어 더 자주 깨어났습니다. #96048 (Antonio Andelic).
  • system.asynchronous_metric_logevent_date를 수정했습니다. #95947 (Raúl Marín).
  • 내부 함수에서 system.functionscategories = 'Internal' 대신 빈 문자열이 표시되던 문제를 수정했습니다. #97315 (Robert Schulze).
  • 키 유형이 String이 아닌 경우 ip_trie 딕셔너리에서 발생할 수 있는 논리적 오류를 수정했습니다. #97555 (Bharat Nallan).
  • system.query_log.exception에서 stderr 캡처를 활성화해 UDF 디버깅 문제를 수정했습니다. #92209 (Xu Jia).
  • 값이 항상 false인 프레디케이트에 대해 filterPartsByVirtualColumns를 수정했습니다. #97620 (Bharat Nallan).
  • ColumnConst가 squashing 전에 구체화되지 않던 문제를 수정했습니다. #97019 (Hasyimi Bahrudin).
마지막 수정일 2026년 6월 10일