기본적으로 모든 삽입에 대해 중복 제거가 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=0 및 enable_automatic_decision_for_merging_across_partitions_for_final=1로 설정되었습니다. #96110 (Nikita Taranov).
명시적으로 컬럼을 지정해 S3 테이블을 생성할 때, 이제 ClickHouse는 해당 컬럼 이름이 원격 파일의 스키마(schema)에 실제로 존재하는지 검증합니다. 이전에는 컬럼 이름이 일치하지 않아도 동작하던 쿼리가 이제 테이블 생성 시점에 실패합니다. 이를 통해 #96089가 해결되었습니다. #96194 (Konstantin Vedernikov).
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).
lazy_load_tables 데이터베이스 설정을 추가합니다. 이 설정을 활성화하면 데이터베이스 시작 시 테이블을 로드하지 않고, 대신 경량 StorageTableProxy를 생성하며 실제 테이블 엔진은 처음 접근할 때 구체화됩니다. #96283 (xiaohuanlin).
데이터 블록을 timeout에 따라 내보낼 수 있도록 input_format_max_block_wait_ms 설정을 추가했으며, HTTP connection이 예기치 않게 종료되더라도 남은 데이터를 처리할 수 있도록 했습니다. #94509 (Mostafa Mohamed Salah).
사용 가능한 모든 토크나이저를 보여주는 시스템 테이블 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).
머지 결과 파트를 커밋하지 않고 머지를 시뮬레이션할 수 있는 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).
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).
양자화된 비트 패킹 벡터 저장소(근사 최근접 이웃 검색에 사용됨)를 위한 QBit 데이터 타입이 이제 정식 지원되며, 더 이상 실험적 설정을 활성화할 필요가 없습니다. #95358 (Raufs Dunamalijevs).
이제 ClickHouse의 벡터 검색은 클러스터의 레플리카를 사용해 부하를 _분산_하고 벡터 인덱스 파트를 검색할 수 있습니다. 이를 통해 ClickHouse는 단일 VM의 메모리 용량을 초과하는 대규모 벡터 인덱스를 지원할 수 있습니다. #95876 (Shankar Iyer).
ast_fuzzer_runs 및 ast_fuzzer_any_query settings으로 제어되는 서버 측 AST 퍼저를 추가했습니다. 이 설정을 활성화하면 서버는 각 쿼리를 정상적으로 실행한 후 무작위 뮤테이션을 수행하고, 결과는 폐기합니다. #97568 (Alexey Milovidov).
이제 스키마 추론은 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).
concurrent_threads_scheduler의 기본값이 이제 fair_round_robin 대신 max_min_fair로 변경되었습니다. 이 변경으로 할당된 슬롯이 더 적은 쿼리를 우선시하여 높은 부하 상태에서의 공정성이 개선되므로, 짧게 실행되는 쿼리가 오래 실행되는 쿼리 때문에 불이익을 받지 않게 됩니다. #95300 (Sergei Trifonov).
FINAL 쿼리가 필터링에 기본 키 조건을 사용하고, 나머지 조건에는 스킵 인덱스를 사용하는 경우, 이제 PrimaryKeyExpand 처리 단계에서는 초기에 선별된 기본 키 범위의 교차 여부만 검사합니다. #94903 (Shankar Iyer).
s3(...)와 같은 테이블 함수를 병렬 레플리카와 함께 사용할 때, 이제 테이블 함수를 단일 서브쿼리로 감싼 쿼리도 레플리카 전반에 걸쳐 자동으로 병렬화되며, 이전에는 테이블 함수를 직접 참조한 경우에만 병렬화되었습니다. #92264를 해결합니다. #96332 (phulv94).
ColumnVector::replicate에 동적 디스패치를 구현하여 일부 해시 조인 연산을 더 빠르게 처리할 수 있도록 개선했습니다. #79573 (Raúl Marín).
복잡한 조건자가 있는 경우 병렬 hash 조인의 성능이 개선되었습니다. 이전에는 조인되지 않은 행을 하나의 스레드에서 처리했는데, 이는 비효율적이었습니다. 이번 최적화는 조인되지 않은 행의 처리를 여러 스레드로 병렬화하는 방식입니다. parallel_non_joined_rows_processing 설정으로 켜고 끌 수 있습니다. 기본적으로 활성화됩니다. #92068 (Yarik Briukhovetskyi).
ZooKeeper 요청을 배치 처리해 파트가 많은 ReplicatedMergeTree 테이블의 레플리카 클론 성능을 개선합니다. #94847 (c-end).
read step에 이미 PREWHERE 필터가 있으면 새 필터를 추가할 수 없었습니다. 이번 변경으로 PREWHERE 최적화를 JOIN runtime 필터 최적화 이후로 미루어, runtime 필터도 PREWHERE로 푸시다운할 수 있게 했습니다. #95838 (Alexander Gololobov).
가능한 경우(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_map과 std::mutex 대신 std::array<std::atomic<UInt32>, N>를 사용합니다. #95962 (Miсhael Stetsyuk).
메모리 절약을 위해 ProfileEvents::Counter의 64바이트 정렬을 제거했습니다. #96097 (Azat Khuzhin).
메모리 최적화: CachedOnDiskReadBufferFromFile 구조체 크기를 50배 줄였습니다. #96098 (Azat Khuzhin).
이전에는 모든 파트에 구체화된 텍스트 인덱스가 있는 경우에만 텍스트 인덱스 직접 읽기 최적화가 적용되었습니다. 이 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).
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).
mongodb 테이블 함수에서 이름이 지정된 컬렉션 매개변수에 대한 키-값 재정의를 허용합니다. #89616 (vanchaklar).
이제 Iceberg 테이블의 순차 읽기 최적화는 단순한 컬럼 참조뿐 아니라 icebergBucket, icebergTruncate와 같은 복잡한 정렬 함수에도 적용됩니다. #90256 (Konstantin Vedernikov).
진단을 개선하기 위해 system.mutations에 파트의 지연 사유를 보여주는 parts_postpone_reasons라는 새 컬럼을 추가했습니다. #92206 (Shaohua Wang).
DataflowStatisticsCache에서 읽어야 할 행 수의 변화(삽입/삭제 또는 쿼리 조건 cache 사용으로 인한)를 추적합니다. #93636 (Nikita Taranov).
SYSTEM RESET DDL WORKER [ON CLUSTER] 쿼리를 지원합니다. 이 쿼리는 DDLWorker의 메인 스레드 상태를 재설정하도록 요청합니다. host ID가 업데이트될 때 레플리카의 활성 상태를 갱신하는 데 도움이 됩니다. #93780 (Tuan Pham Anh).
MUTATE_PART 및 MUTATE_PART_START 이벤트 타입에 대해 system.part_log에서 mutation_ids를 지원합니다. #93811 (Shaohua Wang).
이제 백그라운드 작업(Mutate, Merge)은 'background' profile을 통해 독립적으로 구성할 수 있습니다. 이전에는 이러한 작업이 'default' profile을 통해 일반 쿼리와 설정을 공유했습니다. #93905 (Arsen Muk).
실행 중인 비내부 쿼리 수를 추적하기 위한 새로운 QueryNonInternal metric이 추가되었습니다. 이 metric은 ClickHouseMetrics_QueryNonInternal으로 노출되며, 비내부 쿼리에만 적용되는 max_concurrent_queries 제한에 대해 오퍼레이터가 쿼리 동시성을 모니터링하는 데 도움이 됩니다. #94284 (Ashwath Singh).
RuntimeDataflowStatisticsCacheUpdater에서 compact 파트의 컬럼에 대한 입력 바이트 통계 수집을 지원합니다. #94626 (Nikita Taranov).
사용자 인증 전에 총 메모리 제한을 검사하고, 총 제한이 허용치를 초과하는 경우 (total) memory limit exceeded 오류를 발생시킵니다. #95003 (Nikolai Kochetov).
throw_on_unmatched_row_policies 구성 옵션이 추가되었습니다. 이 설정을 활성화하면, 사용자에게 행 정책이 설정된 테이블을 조회할 때 해당 사용자에게 적용되는 정책이 하나도 없을 경우 예외가 발생합니다. 이를 통해 접근 제어 구성 오류로 인해 모든 행이 반환되는 불명확한 동작을 방지합니다. #95014 (Vitaly Baranov).
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).
물리적 연결을 반영할 수 있도록 query_log에 connection_address 및 connection_port를 추가했습니다(address 및 port는 프록시를 통해 연결되고 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).
numbers 및 primes에 대한 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).
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).
stringJaccardIndexUTF8의 UTF8 문자열 처리 문제를 수정하고 성능을 개선했습니다. #94613 (Joanna Hulboj).
WITH FILL STALENESS에서 발생할 수 있는 오버플로를 수정했습니다(이로 인해 정의되지 않은 동작(UB) 또는 무한 루프가 발생할 수 있습니다). 큰 폭의 점프로 인해 발생할 수 있는 무한 루프를 수정했습니다. 이전 analyzer 지원을 추가했습니다(주로 스트레스 테스트용). #94663 (Azat Khuzhin).
호스트명이 여러 주소로 조회되고 원격 레플리카가 멈춘 경우 발생할 수 있는 분산 쿼리 정지 문제를 수정했습니다. #94726 (c-end).
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).
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.a와 t2.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_mode가 any로 설정된 경우 희소 컬럼에 대한 sum 및 시계열 집계를 수정했습니다. #95301 (Mikhail Koviazin).
plain_rewritable 디스크 정책에서 메타데이터 파일 연결 해제 도중 네트워크 오류가 발생하면 저장소가 불일치 상태로 남을 수 있던 신뢰성 문제를 수정했습니다. #95302 (Mikhail Artemenko).
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 권한이 없는 사용자가 해당 프로젝션의 데이터를 읽을 수 있었습니다. 이번 수정으로 mergeTreeIndex 및 mergeTreeAnalyzeIndexes에 이미 적용된 것과 동일한 접근 검사(access check)가 추가됩니다. #95480 (Alexey Milovidov).
Dynamic/JSON 타입의 동적 서브컬럼에서 size 서브컬럼을 읽을 때 발생할 수 있는 논리 오류를 수정했습니다. #95573 (Pavel Kruglov).
#94262에서 도입된 (실험적) 제로‑카피 복제의 회귀 문제를 수정했습니다. 이 문제로 인해 다른 레플리카가 공유 파트를 모두 가져오기도 전에 해당 파트가 삭제될 수 있었습니다. #95597 (filimonov).
분산 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).
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).
JSON 데이터 타입의 경로 스키핑 문제를 수정했습니다. 이전에는 JSON(SKIP path)를 사용할 경우 접두사 path를 가진 모든 JSON 키가 스키핑되어 "pathpath"와 같은 키까지 제외되었으므로, 삽입 시 이러한 경로에서 데이터가 손실될 수 있었습니다. 이제 이 문제가 수정되어 키 "path"만 스키핑됩니다. #95948 (Pavel Kruglov).
동시에 실행되는 비동기 삽입이 동일한 매개변수 이름을 사용하지만 서로 다른 값을 포함할 때 발생할 수 있는 데이터 손상 버그를 수정했습니다. #96035 (Seva Potapov).
전역 프로파일러(global_profiler_real_time_period_ns 및 global_profiler_cpu_time_period_ns로 제어됨)의 주기를 수정했습니다. 설정된 값 대신 절삭된 값이 사용되어 프로파일러가 의도한 것보다 더 자주 깨어나는 문제가 있었습니다. #96048 (Antonio Andelic).
이전에는 position delete에 대한 Iceberg manifest 파일 내의 reference data 파일이 엔트리에 존재하지만 null인 경우, 해당 데이터 파일의 올바른 경계값을 가져오지 못했습니다. 이 PR은 이 버그를 수정합니다. #96061 (Daniil Ivanik).
비활성화된 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_granularity와 index_granularity_bytes의 조합(즉 "비적응형 granularity"를 의미함)으로 인해 읽어야 할 행 수가 잘못 계산되어 예외가 발생했습니다. #96143 (Alexey Milovidov).
S3 및 Azure와 같은 객체 스토리지의 파일형 테이블에서 잘못된 ALTER UPDATE 뮤테이션을 실행하면 nullptr 역참조가 발생할 수 있었습니다. #92994를 해결했습니다. #96162 (Alexey Milovidov).
일부 권한 취소 시 AccessRights::contains가 잘못된 결과를 반환하는 문제를 수정했습니다. #96170 (pufit).
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_functions가 sum/count/avg를 sumCount()로 재작성하지 않도록 수정했습니다. #95390을 해결합니다. #96239 (Nihal Z. Miaji).
테이블에 널 허용 기본 키가 있고, 첫 번째 인수가 상수인 coalesce 함수를 사용하는 쿼리에서 발생하는 KeyCondition의 논리 오류를 수정합니다. #96340 (Alexey Milovidov).
GROUPING SETS, group_by_use_nulls, 그리고 내부에 LowCardinality를 포함하는 Tuple 타입이 상호작용하면서 쿼리 pipeline에서 예상치 못한 block 구조가 생성되어 논리 오류가 발생할 수 있었습니다. 이 문제는 널 허용 Tuple이 도입된 이후 나타났습니다. #96358 (Alexey Milovidov).
앞서 동일한 컬럼에 경량 업데이트가 수행된 경우 ALTER TABLE DROP COLUMN 쿼리가 실패하던 문제가 수정되었습니다. #96861 (Anton Popov).
plain_rewritable 객체 스토리지 디스크에 아카이브 기반 백업(.zip, .tzst)을 생성할 때 발생하는 스택 오버플로(충돌)를 수정했습니다. #96872 (Alexey Milovidov).
대상 파일 시스템에서 디스크 공간 부족이나 기타 I/O 오류로 백업에 실패할 때 서버가 충돌하던 문제를 수정했습니다. #96873 (Alexey Milovidov).
행의 중복도를 무시하고 DISTINCT와 동일하게 동작하던 EXCEPT ALL 및 INTERSECT 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 컴파일된 표현식이 DateTime을 DateTime64로 변환할 때 잘못된 결과가 발생하던 문제를 수정했습니다(예: 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).
구체적인 값이 필요한 위치(예: 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 CUBE 및 group_by_use_nulls = true를 사용하는 경우) IfTransformStringsToEnumPass에서 발생하는 assertion failure를 수정했습니다. #97002 (Alexey Milovidov).
INSERT ... SELECT에서 UNION ALL 및 JOIN을 사용할 때 block squashing 이후 상수 문자열 컬럼에 잘못된 값이 들어가 잘못된 데이터가 기록되던 문제를 수정했습니다. #97019 (Hasyimi Bahrudin).
ALTER TABLE MODIFY COLUMN으로 컬럼 타입이 변경된 후 컬럼 통계를 생성할 때 발생하던 assert_cast 예외(또는 릴리스 빌드에서의 무음 데이터 손상)를 수정했습니다. #97027 (Alexey Milovidov).
Azure Blob Storage, SSH 프로토콜 및 Arrow Flight 인터페이스에서 초기화되지 않은 메모리에 대한 읽기를 수정했습니다. #97053 (Alexey Milovidov).
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 절의 arrayJoin이 JOIN 양쪽의 컬럼을 참조할 때 발생하던 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_settings의 readonly 필드는 이제 일부 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).
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).
외부 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).
optimize_inverse_dictionary_lookup 최적화가 dictGet(...) 조건자를 재작성할 때, CREATE TEMPORARY TABLE 권한이 없는 사용자에게 발생하던 ACCESS_DENIED 문제를 해결했습니다. 이제 ClickHouse는 재작성을 건너뛰고 원래 식을 실행합니다. #97269를 해결합니다. #97484 (Nihal Z. Miaji).
내부 희소 서브컬럼이 있는 컬럼(예: 희소 직렬화 프로필이 서로 다른 MergeTree 파트의 Tuple 컬럼)을 처리할 때 Set 및 MergeTreeIndexSet에서 발생하던 assertion failure(디버그/sanitizer 빌드에서는 예외)를 수정했습니다. #97493 (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).
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).
stateless 기능 테스트 인프라에 Kafka 3.9.0을 추가하여 ClickHouse Keeper를 ZooKeeper로 사용해 Kafka 및 Kafka2 테이블 엔진을 직접 테스트할 수 있게 했습니다. 6개의 새로운 stateless 테스트는 기본적인 produce/consume, 가상 컬럼, INSERT, 여러 형식, 손상된 메시지 처리, 그리고 Keeper 기반 오프셋 저장을 다룹니다. #96997 (Alexey Milovidov).
개별 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.h를 typeid_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).
formatter에서 별칭(alias)을 잘못 치환하여 발생한 일관성 없는 서식을 수정합니다. 이 변경으로 #82833이(가) 해결됩니다. #82832도 해결됩니다. #68296도 해결됩니다. 이 변경으로 인해 잠재적인 하위 호환성 문제가 발생할 수 있습니다. analyzer가 비활성화된 경우, IN 절에서 별칭을 참조하는 일부 CREATE VIEW 쿼리는 처리되지 않습니다. 이러한 비호환성을 방지하려면 analyzer를 활성화해야 합니다(24.3부터 기본값으로 활성화되어 있습니다). #82838 (Alexey Milovidov).
코덱 DEFLATE_QPL 및 ZSTD_QAT가 제거되었습니다. 업그레이드하기 전에 DEFLATE_QPL 또는 ZSTD_QAT로 압축된 기존 데이터를 다른 코덱으로 변환할 것을 권장합니다. 이 코덱들을 사용하려면 enable_deflate_qpl_codec 및 enable_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).
버그로 인해 사용할 수 없어 metric_log의 transposed_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). 이로 인해 이전 버전과 비교했을 때 출력되는 해시 값이 달라진다는 점에 유의하십시오.
비동기 INSERT 중복 제거가 이제 의존하는 materialized view와 함께 동작합니다. block_id 충돌이 발생하면, 원래 블록에서 해당 block_id와 연결된 행을 제거하도록 필터링하고, 남은 행에 관련된 모든 materialized view의 SELECT 쿼리를 적용합니다. 이를 통해 충돌하는 행이 없는 원래 블록이 다시 생성됩니다. #89140 (Sema Checherinda). materialized view가 관련된 경우에도 비동기 INSERT와 함께 중복 제거를 사용할 수 있습니다. #93957 (Sema Checherinda).
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).
각 데이터 파트에 포함된 파일 수를 보여주는 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).
해시 조인에서 오른쪽 입력이 비어 있는 경우 이제 왼쪽 입력 읽기를 건너뜁니다. 이전에는 비어 있지 않은 첫 번째 블록을 찾을 때까지 왼쪽 입력을 계속 읽었기 때문에, 필터링이나 집계가 많이 이루어지는 경우 불필요한 작업이 많이 발생할 수 있었습니다. #94062 (Alexander Gololobov).
쿼리 파이프라인 내부에서 데이터를 파티션으로 분할하기 위해 "fastrange" (Daniel Lemire) 방법을 사용합니다. 이를 통해 병렬 정렬 및 조인 작업이 개선될 수 있습니다. #93080 (Alexey Milovidov).
PARTITION BY 절이 정렬 키와 일치하거나 정렬 키의 접두사인 경우 윈도 함수 성능을 향상합니다. #87299 (Nikita Taranov).
FINAL 쿼리에서 사용되는 skip 인덱스가 기본 키의 일부인 컬럼에 설정되어 있는 경우, 다른 파트에서 기본 키 교집합을 확인하는 추가 단계를 수행할 필요가 없으므로 이제 수행되지 않습니다. #85897이(가) 해결되었습니다. #93899 (Shankar Iyer).
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).
max_server_memory_usage 대비 더티 페이지 크기 비율이 memory_worker_purge_dirty_pages_threshold_ratio를 초과하면 jemalloc arena를 강제로 정리(purge)합니다. #93500 (Eduard Karacharov).
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).
프로덕션 환경 운영 경험을 바탕으로 스레드 풀 대기열 크기를 줄였습니다. 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).
Local 및 HDFS용 blob_storage_log를 구현합니다. S3Queue가 blob_storage_log에 로깅할 때 디스크 이름이 아닌 다른 값을 사용하는 경우 발생하던 오류를 수정합니다. blob_storage_log에 error_code 컬럼을 추가합니다. 로컬 테스트를 단순화하기 위해 테스트용 구성 파일을 분리합니다. #93106 (Alexey Milovidov).
clickhouse-client 및 clickhouse-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, UploadPart 및 CompleteMultipartUpload S3 요청으로 전달되지 않도록 했습니다. #64577 (Francisco J. Jurado Moreno).
새로운 설정인 trace_profile_events_list를 추가하여 trace_profile_event 추적을 지정된 이벤트 이름 목록으로만 제한합니다. 이를 통해 대규모 워크로드에서 더 정밀한 데이터 수집이 가능합니다. #92298 (Alexey Milovidov).
일시 중지 가능한 failpoint에서 SYSTEM NOTIFY FAILPOINT를 지원합니다. - SYSTEM WAIT FAILPOINT fp PAUSE/RESUME를 지원합니다. #92368 (Shaohua Wang).
#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).
Parquet 리더는 이제 Tuple 또는 맵 컬럼을 JSON으로 읽을 수 있습니다. 따라서 f.parquet에서 컬럼 x의 타입이 tuple 또는 map이어도 select x from file(f.parquet, auto, 'x JSON') 쿼리가 정상적으로 동작합니다. #92864 (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_log 및 system.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).
SYSTEM INSTRUMENT ADD/REMOVE의 UX를 개선했습니다. FUNCTION 이름에는 String 리터럴을 사용하고, 일치하는 모든 FUNCTION에 패치를 적용하며, REMOVE에서 function_name을 사용할 수 있도록 했습니다. #93345 (Pablo Marcos).
머지 중 통계를 구체화할지 여부를 제어하는 새로운 설정 materialize_statistics_on_merge가 추가되었습니다. 기본값은 1입니다. #93379 (Han Fei).
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).
조인 재정렬 시 런타임 해시 테이블 크기 통계를 사용할지 여부를 제어하는 use_hash_table_stats_for_join_reordering 설정을 추가했습니다. 이 설정은 기본적으로 활성화되어 있으며, collect_hash_table_stats_during_joins의 기존 동작을 유지합니다. #93912 (Vladimir Cherkasov).
이제 system.server_settings 테이블에서 중첩된 전역 서버 설정(예: logger.level)을 일부까지 조회할 수 있습니다. 이는 고정된 구조를 가진 설정에만 적용되며, 목록, 열거형, 반복 등이 포함된 설정은 제외됩니다. #94001 (Hechem Selmi).
Keeper가 손상된 스냅샷 또는 불일치하는 변경 로그를 감지하면, 프로세스를 수동으로 중단하거나 파일을 자동으로 정리하는 대신 예외를 발생시킵니다. 이를 통해 수동 개입을 전제로 하는 Keeper의 동작이 더 안전해집니다. #94168 (Antonio Andelic).
allow_statistics_optimize 설정에 대한 별칭인 use_statistics를 추가했습니다. 이는 기존 설정인 use_primary_key 및 use_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).
가장 오래 실행 중인 머지 작업의 경과 시간을 나타내는 비동기 메트릭을 추가합니다. #94825 (Raúl Marín).
IcebergBitmapPositionDeleteTransform를 사용해 position delete를 적용하기 전에 position delete가 해당 파일에 속하는지 확인하는 검사를 추가했습니다. #94897 (Yang Jiang).
이제 view_duration_ms는 그룹 내 스레드 지속 시간의 합이 아니라, 그룹이 활성 상태였던 시간을 보여줍니다. #94966 (Sema Checherinda).
hasAnyTokens 및 hasAllTokens 함수에서 검색 토큰의 최대 개수 제한(기존 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).
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).
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).
Ordered 모드의 storage S3Queue에서 발생하던 논리적 오류 Failed to set file processing within 100 retries를 수정했습니다. 이제 이 오류는 경고로 대체됩니다. 이 오류는 25.10 버전 이전에는 keeper 세션이 만료된 경우 발생할 수 있었으며, 25.10+ 버전에서도 Ordered 모드에서 처리 동시성이 매우 높은 경우 이 오류가 이론적으로 여전히 발생할 수 있으므로 계속해서 경고로 유지됩니다. #92814 (Kseniia Sumarokova).
ratio_of_defaults_for_sparse_serialization=0.0으로 설정된 희소 컬럼에 대한 뮤테이션(mutation) 이후 발생할 수 있는 FILE_DOESNT_EXIST 오류를 수정합니다. #92633 이슈를 해결합니다. #92860 (Pavel Kruglov).
기본값으로 사용되지 않는 이전 Parquet 리더에서 Tuple 컬럼 뒤에 JSON 컬럼이 오는 경우 Parquet 스키마 추론 문제를 수정했습니다. 또한 이 리더가 비어 있는 Tuple을 처리할 때 실패하던 문제를 수정했습니다. #92867 (Michael Kolupaev).
백그라운드 스케줄 풀 종료 시 발생할 수 있는 정지(hang) 문제를 수정했습니다(서버 종료 시 서버가 정지 상태에 빠질 수 있음). #93008 (Azat Khuzhin).
희소 컬럼 mutation 이후 ALTER를 통해 설정인 ratio_of_defaults_for_sparse_serialization을 1.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).
머지 작업 중 프로젝션을 다시 빌드할 때 사용되지 않는 컬럼을 제거합니다. 이렇게 하면 메모리 사용량이 줄어들고 생성되는 임시 파트의 개수가 줄어듭니다. #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).
hasAllTokens 및 hasAnyTokens 함수에서 두 번째 인자가 빈 배열일 때의 처리를 수정했습니다. #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).
텍스트 인덱스에서 중복된 검색 쿼리를 사용할 때 발생하던 직접 읽기 동작을 수정했습니다. #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).
머지 작업 중 프로젝션이 재구축될 때 발생하던 _part_offset 손상 문제를 수정하고, _part_offset 컬럼에 대한 불필요한 읽기를 피하고 프로젝션 계산에서 불필요한 컬럼을 건너뛰어 프로젝션 처리 성능을 최적화했습니다. 이는 #93233에서 도입된 최적화를 이어 가는 변경입니다. #93827 (Amos Bird).
https://github.com/ClickHouse/ClickHouse/pull/89173 에서 TraceSender가 내부 파이프를 통해 전송하는 구조체에 필드를 하나 더 추가했습니다. 하지만 버퍼 크기는 업데이트되지 않았습니다(여기 참조). 이로 인해 buffer_size보다 더 많은 데이터를 버퍼에 기록하게 되었고, 그 결과 버퍼가 여러 번 flush됩니다. 그리고 TraceSender::send가 서로 다른 스레드에서 호출되기 때문에, 서로 다른 스레드에서의 flush가 서로 섞일 수 있으며, 이는 수신 측(TraceCollector)이 의존하는 불변 조건을 깨뜨리게 됩니다. #93966 (Miсhael Stetsyuk).
병렬 환경에서(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, arrayPartialShuffle 및 arrayRandomSample가 상수 컬럼을 구체화하여 각 행이 서로 다른 결과를 얻도록 합니다. #94134 (Joanna Hulboj).
materialized view에서 table functions를 평가하는 과정에서 발생하는 데이터 레이스를 수정합니다. #94171 (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).
두 개 미만의 인수로 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).
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).
테이블 엔진 URL() 및 테이블 함수 url()에서 사용되는 URL에 포함된 비밀번호 마스킹을 개선합니다. #95006 (Vitaly Baranov).
이제 enable_extended_results_for_datetime_functions 설정이 켜져 있을 때 FUNCTION toStartOfInterval은 toStartOfX와 동일하게 동작하며, 이때 X는 Day, 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).
DateTime/정수에서 Time64로 변환할 때 toTime을 사용해 시각(time-of-day) 구성 요소를 추출하는데, 이 함수는 단조(monotonic)가 아닙니다. ToDateTimeMonotonicity 템플릿이 이 변환이 단조라고 잘못 표시하여 디버그 빌드에서 "Invalid binary search result in MergeTreeSetIndex" 예외가 발생했습니다. #95125 (Alexey Milovidov).
필요한 경우에만 manifest 파일 항목 목록을 다시 생성하도록 변경했습니다(이전에는 각 반복 시마다 다시 생성했습니다). #95162 (Daniil Ivanik).
ClickHouse SQL 파서에서 jemalloc의 힙 프로파일링 기능을 사용해 메모리 할당을 프로파일링하기 위한 도구 세트를 추가했습니다. #94072 (Ilya Yatsishin).
파서에서 메모리 할당 디버깅을 단순화하는 도구를 추가했습니다. 이 도구는 쿼리를 AST 표현으로 파싱하기 전후의 jemalloc stats.allocated 지표를 사용해 어떤 메모리가 할당되었는지 보여줍니다. 또한 메모리 프로파일링 모드를 지원하여, 파싱 전후의 프로파일을 덤프하고, 할당이 발생한 위치를 보여주는 보고서를 생성할 수 있습니다. #93523 (Ilya Yatsishin).