본문으로 바로가기
본문으로 바로가기

변경 내역 2026

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

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

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

새 기능

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

실험적 기능

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

성능 개선

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

개선 사항

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

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

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

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

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

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

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

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

새 기능

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

실험적 기능

성능 개선

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

개선 사항

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

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

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

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