2025 변경 내역
목차
ClickHouse 릴리스 v25.12, 2025-12-18
ClickHouse 릴리스 v25.11, 2025-11-27
ClickHouse 릴리스 v25.10, 2025-10-30
ClickHouse 릴리스 v25.9, 2025-09-25
ClickHouse 릴리스 v25.8 LTS, 2025-08-28
ClickHouse 릴리스 v25.7, 2025-07-24
ClickHouse 릴리스 v25.6, 2025-06-26
ClickHouse 릴리스 v25.5, 2025-05-22
ClickHouse 릴리스 v25.4, 2025-04-22
ClickHouse 릴리스 v25.3 LTS, 2025-03-20
ClickHouse 릴리스 v25.2, 2025-02-27
ClickHouse 릴리스 v25.1, 2025-01-28
2024년 변경 로그
2023년 변경 로그
2022년 변경 로그
2021년 변경 로그
2020년 변경 로그
2019년 변경 로그
2018년 변경 로그
2017년 변경 로그
ClickHouse 릴리스 25.12, 2025-12-18
하위 호환되지 않는 변경
- 이제 ALTER MODIFY COLUMN으로 널 허용 컬럼을 NULL 비허용 타입으로 변환할 때는 명시적인 DEFAULT 값이 필요합니다. 이전에는 이러한 ALTER 작업이 「cannot convert null to not null」 오류로 인해 중단될 수 있었으나, 이제는 NULL이 컬럼의 기본값 표현식 결과로 대체됩니다. 문제 #5985가 해결되었습니다. #84770 (Vladimir Cherkasov).
- Ngram tokenizer는 설정된 길이 N보다 짧은 ngram을 더 이상 반환하지 않습니다. Text Search는 검색 토큰이 비어 있으면 아무 행도 반환하지 않습니다. #89757 (George Larionov).
String에서Nullable(String)으로 컬럼을ALTER할 때 데이터에 대한 mutation 작업은 수행하지 않습니다. 하지만uniq집계 함수의 경우 널 허용 컬럼에 대해 서로 다른 데이터 구조를 사용합니다. 널 허용 컬럼에 대해서는 중첩된 uniq 집계기를 포함하는AggregateFunctionNull을 사용하며,AggregateFunctionNull은 추가적인 불리언(boolean) 플래그를 직렬화합니다. 이로 인해 통계 파일이 호환되지 않게 됩니다. 이를 수정하기 위해 직렬화 시 널 허용 컬럼인지 여부를 기록하는 플래그를 추가했습니다. STATISTICS 형식이 변경되었으며, 서버가 이전 형식의 STATISTICS를 가지고 있는 경우 실패할 수 있습니다. PR #90904는 이러한 비정상 종료를 수정하고, 기존 STATISTICS가 레거시 형식을 사용하는 경우 예외를 발생시킵니다. 예외를 피하려면ALTER TABLE table MATERIALIZE STATISTICS ALL을 실행하여 STATISTICS를 재생성해 문제를 해결해야 합니다. #90311 (Han Fei).allow_not_comparable_types_in_order_by/allow_not_comparable_types_in_comparison_functions설정을 제거했습니다. ORDER BY 절이나 비교 함수에서 비교 불가능한 타입을 허용하면 논리 오류와 예기치 않은 결과가 발생할 수 있습니다. 이 변경으로 #90028 이슈가 해결되었습니다. #90527 (Pavel Kruglov).check_query_single_value_resultSETTING의 기본값을true에서false로 변경했습니다. 이에 따라CHECK TABLE이 집계된 결과(1 = 정상, 0 = 오류 발견) 대신 파트별 상세 결과를 반환합니다. 이전 동작과 비교하면, 이는 사용자가 기대하는 동작과 더 잘 부합할 것으로 보입니다. #91009 (Robert Schulze).- 암시적 인덱스 처리와 관련된 여러 가지 수정이 포함됩니다. 표시되거나 저장되는 스키마(Keeper 메타데이터)에는
add_minmax_index_for_numeric_columns또는add_minmax_index_for_string_columns설정으로 생성되는 암시적 인덱스가 포함되지 않습니다. 이로 인해 새 버전에서 ReplicatedMergeTree 테이블을 생성하거나 업데이트할 때, 이전 릴리스에 레플리카가 남아 있는 경우 메타데이터 오류가 발생할 수 있습니다. 이러한 경우에는 클러스터가 완전히 업그레이드될 때까지 이전 레플리카로 DDL을 전송하십시오. #91429 (Raúl Marín). receive_timeout으로 인해 쿼리가 타임아웃될 때 clickhouse-client가 0이 아닌 종료 코드(159 - TIMEOUT_EXCEEDED)를 반환하도록 업데이트했습니다. 이전에는 타임아웃이 종료 코드 0(성공)을 반환하여 스크립트와 자동화에서 타임아웃 실패를 감지하기가 어려웠습니다. #91432 (Sav).- 이제 병합 동작이 정의되어 있지 않기 때문에 빈
ORDER BY키를 사용하는 특수MergeTree테이블(예:ReplacingMergeTree,CollapsingMergeTree등)을 생성하는 것은 금지됩니다. 이러한 테이블을 반드시 생성해야 하는 경우allow_suspicious_primary_key설정을 활성화하십시오. #91569 (Anton Popov). bitShiftLeft및bitShiftRightFUNCTION이 타입 크기와 정확히 같은 비트 수로 시프트하는 경우 0 또는 빈 값을 반환하도록 변경했습니다. #91943 (Pablo Marcos).- #88380의 후속 변경입니다. 이 PR은 프로젝션에서 비활성화된 positional arguments(위치 기반 인수)를 하위 호환되지 않는 변경 사항으로 간주합니다. 추가로, 프로젝션에 positional arguments(위치 기반 인수)가 존재하는 경우에도 ClickHouse 클러스터를 안전하게 업그레이드할 수 있도록
enable_positional_arguments_for_projections설정을 도입합니다. #92007 (Dmitry Novik). - 기본값으로 JSON에 대해 고급 shared data 기능을 활성화합니다. 이 변경 이후에는 25.8 이전 버전으로 다운그레이드할 수 없습니다. 이는 해당 버전들이 JSON 컬럼이 있는 새로운 데이터 파트를 읽을 수 없기 때문입니다. 안전한 업그레이드를 위해서는
compatibility설정을 이전 버전으로 지정하거나 MergeTree 설정인dynamic_serialization_version='v2', object_serialization_version='v2'를 설정하는 것이 권장됩니다. #92511 (Pavel Kruglov).
새 기능
- 이제 S3/Azure Queue 테이블에서 처리된 파일을 이동하거나 태그하도록 구성할 수 있으며, 이전처럼 파일을 유지하거나 삭제하는 옵션도 그대로 사용할 수 있습니다. #72944를 해결합니다. #86907 (Murat Khairulin).
- S3/Azure Queue 스토리지에
commit_on_select설정을 추가합니다(처리된 데이터를 커밋할지 여부와after_processing액션을 적용할지 여부를 지정). 기본값은false이며, SELECT 중에 연결된 구체화된 뷰(Materialized View)를 확인하는 로직을 수정합니다. #91450 (Kseniia Sumarokova). - 프로덕션 환경에서 발생하는 문제를 디버그하고 결정론적 방식으로 프로파일링할 수 있도록 XRay를 사용해 런타임에 계측을 추가합니다. #74249를 해결합니다. #89173 (Pablo Marcos).
IN연산자의 두 번째 인수에 상수가 아닌 값을 사용할 수 있습니다. 또한 두 번째 인수로 튜플도 지원합니다. #77906 (Yarik Briukhovetskyi).- geometry 타입의 면적과 둘레를 계산하는 함수. #89047 (Konstantin Vedernikov).
dictGetKeysFUNCTION을 구현하여, 속성이 지정된 값과 동일한 하나 이상의 딕셔너리 키를 반환합니다. 이 FUNCTION은max_reverse_dictionary_lookup_cache_size_bytesSETTING으로 조정되는 쿼리 단위 역방향 조회 캐시(reverse-lookup cache)를 사용하여 반복 조회를 가속화합니다. #89197 (Nihal Z. Miaji).- 입력 JSON이 JSON type의 명시적으로 타입이 지정된 path로 캐스팅될 수 없을 때 JSON type으로의 insert/형변환에서 예외를 발생시키지 않도록 하는
type_json_skip_invalid_typed_paths설정을 추가합니다. 이 경우 해당 typed path의 null/zero 값으로 대체됩니다. #89886 (Max Justus Spransy). - MergeTree 테이블에 대해
direct(중첩 루프) 조인을 지원합니다. 이를 사용하려면 설정에서 이 옵션 하나만 지정하면 됩니다:join_algorithm = 'direct'. #89920 (Vladimir Cherkasov). - Iceberg용
CREATE연산에서ORDER BY를 지원하고,INSERT시 정렬을 지원합니다. #89916 문제를 해결합니다. #90141 (Konstantin Vedernikov). ALTER TABLE ... ADD PROJECTION의 새로운WITH SETTINGS절에서 사용할 수 있는 프로젝션 수준 설정을 도입했습니다. 이러한 설정을 사용하면 각 프로젝션별로 특정 MergeTree 스토리지 파라미터(예:index_granularity,index_granularity_bytes)를 프로젝션 단위로 재정의할 수 있습니다. #90158 (Amos Bird).HMAC(algorithm, message, key)SQL FUNCTION을 #73900 및 #38775의 일부로서 추가합니다. #90837 (Mikhail f. Shiryaev).- 첫 번째 인자가 상수 배열일 때 기본 키와 데이터 스키핑 인덱스를 사용할 수 있도록
has함수에 대한 지원을 추가했습니다. #90980를 해결했습니다. #91023 (Nihal Z. Miaji). - 새로운 입출력 포맷
Buffers를 구현했습니다. 이 포맷은Native와 유사하지만,Native와는 달리 컬럼 이름, 컬럼 타입 또는 기타 메타데이터를 저장하지 않습니다. #84017을(를) 해결합니다. #91156 (Nihal Z. Miaji). - Cluster 테이블 함수에서 파일을 병렬로 읽을 때 사용할 스트림 개수를 제어하는 설정
max_streams_for_files_processing_in_cluster_functions를 추가했습니다. #90223을(를) 종료했습니다. #91323 (Pavel Kruglov). - 행 수준 보안(Row-level security)을 위한 데이터 마스킹 기능을 제공합니다(ClickHouse Cloud에서만 사용 가능합니다). 이를 지원하기 위해 clickhouse-client에 데이터 마스킹 정책 파서를 추가합니다. #90552 (pufit).
windowFunnel집계 함수에allow_reentry옵션이 추가되었습니다. 이를strict_order와 함께 사용하도록 설정하면, 퍼널 분석을 중단하는 대신 순서를 위반하는 이벤트를 무시합니다. 이를 통해 새로고침이 포함된 사용자 여정(A->A->B)이나 뒤로 가기(A->B->A->C)를 처리하면서 전환율이 과소 집계되지 않도록 할 수 있습니다. #86916 (Lee ChaeRok).- Keeper의 ZooKeeper 호환성: CREATE STATISTICS를 사용해 생성. #88797 (Konstantin Vedernikov).
- ClickHouse Keeper에서 ZooKeeper persistent watch를 지원합니다. 이어서 2부: https://github.com/ClickHouse/ClickHouse/pull/78207. #88813 (Konstantin Vedernikov).
- 뮤테이션 실행 시 인덱스를 어떻게 처리할지 제어하기 위해 MergeTree 설정
alter_column_secondary_index_mode를 추가했습니다. 가능한 값은 throw, drop, rebuild, compatibility입니다. #77797 이슈를 종료합니다. #89335 (Raúl Marín). Time및Time64데이터 타입이 프로덕션 환경에서 사용할 수 있는 상태가 되었으므로, 설정enable_time_time64_type이 이제 기본값으로 활성화됩니다. #89345 (Yarik Briukhovetskyi).delta_lake_snapshot_start_version,delta_lake_snapshot_end_version설정과 함께deltaLake테이블 함수로 DeltaLake CDF를 읽는 기능을 지원합니다. CDF(Change Data Feed, Delta 테이블의 버전 간에 발생하는 행 단위 데이터 변경 사항—예: insert, update, delete—을 자동으로 캡처하고 쿼리할 수 있게 해 주는 기능)는 DeltaLake에서delta.enableChangeDataFeed설정을 통해 활성화됩니다. 데이터와 함께 제공되는 컬럼은_change_type,_commit_version,_commit_timestamp입니다. #90431 (Kseniia Sumarokova).- 튜플 요소 접근 시 음수 인덱스를 지원합니다(예:
tuple.-1). #91665 (Amos Bird).
실험적 기능
- TODO: Text 인덱스 포맷 v3을 도입하고 Beta 단계로 격상합니다.
automatic_parallel_replicas_mode설정으로 제어되는 새로운 로직이 도입되어, 병렬 레플리카를 사용해 쿼리를 자동으로 실행합니다. 일반적인 단일 노드 실행 중에는 ClickHouse가 이후 플래닝 단계에서 고려할 통계를 수집합니다. 통계에 비추어 병렬 레플리카 사용이 유리할 가능성이 높다고 판단되면, ClickHouse는 해당 쿼리를 병렬 레플리카로 자동 실행합니다. 현재는 지원되는 쿼리 집합이 상당히 제한적입니다. #87541 (Nikita Taranov).- Cloud 자격 증명과
--login을 사용해 ClickHouse Cloud 인스턴스에 액세스할 수 있습니다. #89261 (Krishna Mannem). - 세션 단위 설정
aggregate_function_input_format을 추가하여AggregateFunction컬럼이 있는 테이블로의INSERT쿼리를 개선하고, 데이터를 직렬화된 상태, 원시 값(raw values), 배열 형태로 삽입할 수 있도록 합니다. #88088 (Punith Nandyappa Subashchandra).
성능 향상
- skip 인덱스와 동적 임계값 필터를 사용하여 처리해야 하는 행 수를 크게 줄이도록
ORDER BY...LIMIT N쿼리를 최적화했습니다. #89835 (Shankar Iyer). - ClickHouse는 이제 스킵 인덱스를 사용하여
AND및OR가 혼합된 필터 조건이 있는 WHERE 절에 대해 인덱스 분석을 수행합니다. 이전에는 스킵 인덱스를 활용하려면 WHERE 절이 필터 조건들의AND결합(논리곱)이어야 했습니다. 새로운 설정use_skip_indexes_for_disjunctions(기본값: on)이 이 기능을 제어합니다. (issue #75228). #87781 (Shankar Iyer). - LEFT/INNER JOIN 연산에서 왼쪽 테이블로부터의 순차적(정렬된) 읽기를 유지하도록 지원하며, 이후 단계에서 이를 활용할 수 있습니다. 이 동작은 설정
query_plan_read_in_order_through_join을 사용해 비활성화할 수 있습니다. LEFT/INNER JOIN에 대해 읽기 최적화 시 가상 행을 지원합니다(설정read_in_order_use_virtual_row참조). #89815 (Vladimir Cherkasov). - 더 큰 제한값을 설정하여 지연 materialized 컬럼의 성능을 향상합니다. #90309 (Nikolai Kochetov).
- 대규모
minmax인덱스(수백만 개의 그래뉼)가 존재하는 경우 인덱스 분석 지연 시간이 더 짧아집니다. #90428 (Shankar Iyer). - INNER JOIN에 대해 단순한 DPsize 조인 순서 재정렬 알고리즘을 구현했습니다. 어떤 알고리즘을 어떤 순서로 사용할지 제어하는 새로운 실험적 설정이 추가되었습니다. 예를 들어
query_plan_optimize_join_order_algorithm='dpsize,greedy'는 DPsize를 우선적으로 사용하고, 그렇지 않은 경우 greedy를 사용하는 것을 의미합니다. #91002 (Alexander Gololobov). - 쿼리가 행 제한에 도달하면 즉시 실패 처리되도록 했습니다. #61872을(를) 해결했습니다. #62804 (Sean Haynes).
- #84477에서는 병렬 분산 실행을 위해
insert select from s3Cluster(...)쿼리에서 사용할 수 있는select쿼리에 대한 제약 조건을 추가했습니다. 이 변경으로 이전에는 사용할 수 없었던where를 사용할 수 있게 되었습니다. #84611 (Igor Nikonov). - 해시 테이블을 순회(iteration)하는 동안 키를 미리 가져와(prefetch) 캐시 미스를 최소화합니다. #84708 (lgbo).
histogram집계 FUNCTION을 최적화하여 points 배열의 끝부분만 정렬하고, 단조 입력인 경우에는 정렬을 생략함으로써 약 10%의 성능 향상을 달성합니다. #85760 (MakarDev).like,equals,has등과 같은 함수가 포함된 조건식에 대해 텍스트 인덱스를 기반으로 구성한 추가 사전 필터를 활용하여 필터링 성능을 개선했습니다. 이 최적화는query_plan_text_index_add_hint설정을 통해 활성화됩니다.Map데이터 타입(맵 데이터 타입) 컬럼에 대한 텍스트 인덱스의 활용도도 개선했습니다. #88550 (Anton Popov).- 역방향 딕셔너리 조회를 반복하는 경우, 가능한 키 값들로 미리 계산해 둔 Set에 대해 더 빠르게 조회하도록 최적화했습니다. #7968을(를) 해결합니다. #88971 (Nihal Z. Miaji).
topK집계 함수의 성능과 동작이 개선되었습니다. #90091 (Raúl Marín).Decimal비교 연산의 성능을 향상했습니다. #28192를 해결했습니다. #90153 (Konstantin Bogdanov).- Apache Paimon 함수에 대한 파티션 프루닝을 지원하도록 개선했으며, https://github.com/ClickHouse/ClickHouse/pull/84423 의 후속 작업입니다. #90253 (JIaQi).
- 논리 함수에 고급 SIMD 연산을 적용하기 위해 동적 디스패치를 사용합니다. #90432 (Raúl Marín).
- 결과 컬럼을 불필요하게 0으로 초기화하지 않아 JIT 함수의 성능을 개선합니다. #90449 (Raúl Marín).
- 동적 디스패치를 사용하여
T64압축 해제 속도를 향상했습니다. #90610 (Raúl Marín). - MergeTree 리더의 in-place 필터링을 최적화합니다. #87119를 해결합니다. #90630 (Xiaozhe Yu).
- 선택된 머지 작업의 범위를 줄이기 위한 추가 휴리스틱을 도입합니다. 더 좁은 범위로 머지를 수행하면 쓰기 증폭(write amplification)이 증가하지만, 동시에
TOO_MANY_PARTS오류가 발생하는 것을 방지하는 데 도움이 될 수 있습니다. #91163 (Mikhail Artemenko). - glob 패턴으로 생성된 S3 테이블에 대해
_path필터 값을 푸시다운하여 쿼리 성능을 향상하며, 이를 통해 S3 목록 조회 작업을 피할 수 있습니다.s3_path_filter_limit설정으로 제어됩니다. #91165 (Eduard Karacharov). - 동적 디스패치를 사용하여 WHERE 절에서 컬럼을 bool 타입으로 변환하는 작업을 가속했습니다. #91203 (Raúl Marín).
- 동적 디스패치를 통해 단일 숫자 블록 정렬 속도를 향상했습니다. #91213 (Raúl Marín).
- 쿼리 플랜에서 사용되지 않는 컬럼을 제거하는 최적화를 추가했습니다. #75152를 해결했습니다. #76487 (János Benjamin Antal).
query_plan_optimize_join_order_limit의 기본값을10으로 변경했습니다. #89312 (Alexey Milovidov).- 기본값으로
allow_statistics_optimize설정을 활성화하여 조인 최적화기가 컬럼 통계를 사용하도록 했습니다. #89332 (Alexey Milovidov). ANTI조인에 대한 조인 런타임 필터를 지원하도록 했습니다. 또한 락 경합(lock contention)을 줄이기 위해 런타임 필터 구현을 리팩터링했습니다. #89710 (Dmitry Novik).system.metric_log테이블(기본적으로 활성화됨)에서 머지 시min_bytes_for_wide_part및vertical_merge_algorithm_min_bytes_to_activate를 128MB로 설정하여 메모리 사용량을 줄입니다. #89811 (filimonov).- PREWHERE에서 역인덱스를 사용할 수 있도록 했습니다. #89975를 해결했습니다. #89977 (Peng Jian).
- GCP OAuth 사용 시 S3 provider를 추가하지 않도록 하여 GCS 성능을 개선했습니다. #91706 (Antonio Andelic).
개선사항
apply_row_policy_after_final이라는 새로운 설정을 추가하여, 쿼리가FINAL이후에만 ROW POLICY를 적용하도록 설정할 수 있게 했습니다. 이를 통해 ROW POLICY가 있는 ReplacingMergeTree의 동작이 보다 올바르게 됩니다. #90986을(를) 수정했습니다. #91065 (Yarik Briukhovetskyi).Pretty포맷에서 이름이 지정된 튜플이 이제 Pretty JSON으로 출력됩니다. 이로써 #65022가 해결되었습니다. #91779 (Mostafa Mohamed Salah).system.error_log테이블에last_error_time,last_error_message,last_error_query_id,last_error_trace열을 추가했습니다. #89879 (Narasimha Pakeer).- CLI 클라이언트는 이제
--no-server-client-version-message또는false를 지정하여 'ClickHouse server version is older than ClickHouse client. It may indicate that the server is out of date and can be upgraded' 메시지가 출력되지 않도록 할 수 있습니다. #87784 (Larry Snizek). - 파트가 중복 제거되었음을 알리는 오류 메시지를 추가합니다. #80264 (Aleksandr Musorin).
- Kafka 테이블의 materialized view 대상 테이블을 보고하도록
system.kafka_consumers에dependencies및missing_dependencies컬럼을 추가했습니다. 또한KafkaMVNotReady카운터를 추가했습니다. #85346 (Ilya Golshtein). - 이제 테이블의 기본 표현식이 remote 및 native 프로토콜을 사용하는 INSERT 작업에서도 올바르게 동작합니다. #87972가 해결되었습니다. #88540 (Pervakov Grigorii).
PSI_*_*비동기 메트릭 수집을 비활성화할 수 있게 했습니다. #88557 (MikhailBurdukov).Nullable타입 컬럼에 대해 희소 직렬화 지원을 추가했습니다. 이 변경은 #44539을(를) 이어갑니다. #88999 (Amos Bird).plain-rewritable디스크는 자체 구현과 레이아웃을 사용합니다. 일반plain디스크를 기반으로 구현되지 않습니다. #89807 (Mikhail Artemenko).- HTTP 예외 응답에는 최종 0 청크가 포함되지 않도록 했습니다. #89998 (Kaviraj Kanagaraj).
- 핸드셰이크 과정에서 Keeper 서버 측 검사를 추가하여, 클라이언트가 제공한
last_zxid_seen값이last_processed_zxid보다 큰 경우 해당 클라이언트를 거부합니다. 이를 통해 지연 중인 레플리카에 클라이언트가 다시 연결될 때 오래된 읽기가 발생하는 것을 방지합니다. #90016 (Miсhael Stetsyuk). - 소비자가 새 데이터를 폴링하며 대기하는 시간을 조절할 수 있도록 튜닝 가능한
Kafka테이블 엔진 설정으로kafka_consumer_reschedule_ms를 추가했습니다. #89204을(를) 해결합니다. #90112 (Jeremy Aguilon). - 진단을 개선하기 위해
system.mutations시스템 테이블에 새 컬럼parts_in_progress_names를 추가합니다. #90155 (Shaohua Wang). - S3 라이브러리가 XML 응답을 파싱하는 동안 발생하는 네트워크 오류를 재시도하도록 했습니다. #90216 (Sema Checherinda).
- Keeper를 별도의 서버 프로세스에서 실행하고자 하며, 대규모 리전에서 Prometheus에 과부하가 발생하는 것을 피하기 위해 앞으로도 Keeper 관련 메트릭만 계속 노출해야 합니다. #90244 (Miсhael Stetsyuk).
- 기존
~/.clickhouse-client/위치뿐 아니라 XDG Base Directory 경로(예:~/.config/clickhouse/config.xml)에서도 ClickHouse Client 설정을 로드할 수 있도록 지원을 추가합니다. #89882를 해결합니다. #90306 (Wujun Jiang). - Keeper에서 append 요청 배치의 바이트 크기 제한을 추가했습니다. 이 제한은
keeper_server.coordination_settings.max_requests_append_bytes_size설정으로 제어됩니다. #90342 (Antonio Andelic). - Iceberg에서 과도한 파티션 개수를 방지하는 설정을 추가했습니다. #90365 (Konstantin Vedernikov).
- 가드레일 제한에 근접했을 때 경고 메시지를 개선하여 현재 값과
throw값이 모두 표시되도록 했습니다. #90438 (Nikita Fomichev). - 캐시 상태 전체를 단일 청크로 생성하는 대신
system.filesystem_cache테이블에서 청크 단위로 스트리밍합니다. 대규모 캐시의 경우 파일시스템 캐시 상태를 읽는 데 시간이 오래 걸리고 메모리를 많이 소모할 수 있으므로, 스트리밍 방식은 대규모 배포 환경에서 필수적입니다. #90508 (Kseniia Sumarokova). - Hive 파티셔닝에서 잘못된 예외 메시지를 수정했습니다. 공백이 하나 누락되어 있었습니다. #90685 (Alexey Milovidov).
- 벡터 유사도 인덱스 캐시의 항목은 이제 테이블 파트가 삭제되거나 더 새로운 파트로 교체될 때 제거됩니다. 이전에는 캐시 제거(eviction)가 발생할 때에만 지연(lazy) 방식으로 정리되었습니다. #90750 (Shankar Iyer).
- chdig(명령줄 ClickHouse 진단 도구)을 v25.12.1로 업데이트합니다. #91394 (Azat Khuzhin).
- 이제 S3에서 pre-signed URL을 사용할 수 있습니다. #65032를 해결합니다. #90827 (Yarik Briukhovetskyi).
- 텍스트 인덱스는 이제
ReplacingMergeTree테이블에서도 작동합니다. #90908 (Elmi Ahmadov). - 인증 이전에 반환되는 HTTP 오류 응답에서 ClickHouse 서버 버전이 노출되지 않도록 변경했습니다. #91003 (filimonov).
- 이제 HTTP 클라이언트 연결에 대한
hard_limit에 도달하면HTTP_CONNECTION_LIMIT_REACHED예외가 발생합니다. 디스크 연결의 경우 이 한도는20000으로 설정됩니다. #91016 (Sema Checherinda). - 백그라운드 작업을 더 잘 관찰하고 분석할 수 있도록
system.background_schedule_pool{,_log}을(를) 도입합니다. #91157 (Azat Khuzhin). - 이제 Web UI 쿼리 편집기에서
Ctrl+/(Mac에서는Cmd+/)를 사용하여 현재 선택한 줄을 빠르게 주석 처리하거나 해제할 수 있습니다. 이를 통해 테스트하는 동안 쿼리의 일부를 일시적으로 비활성화하기가 더 쉬워졌습니다. #91160 (Samuel K.). system.completions를 항상 접근할 수 있는 테이블 목록에 추가합니다. #91166 (Yakov Olkhovskiy).- 프로파일 이벤트
FailedInitialQuery및FailedInitialSelectQuery를 추가합니다. #91172 (RinChanNOW). - JSON 컬럼에 서브컬럼이 많은 경우 컬럼 샘플을 읽을 때 스레드 풀을 무조건 사용하는 대신
merge_tree_use_prefixes_deserialization_thread_pool설정을 따르도록 변경하여, 잠재적인 스레드 풀 고갈 문제를 수정했습니다. #91208 (Raufs Dunamalijevs). tupleElement에서JSON타입을 지원합니다. #81630을(를) 해결합니다. #91327 (Pavel Kruglov).- userspace page cache(사용자 공간 페이지 캐시)가 활성화되어 있을 때 불필요하게 발생하던 메모리 제한 오류를 수정했습니다. #91361 (Michael Kolupaev).
- 이제 ngram_length = 1로 Ngrams 토크나이저를 생성할 수 있습니다. #91529 (George Larionov).
INSERT INTO FUNCTION에서 함수 내부의 storage settings를SELECT에서와 마찬가지 방식으로 지원하도록 했습니다. #89386을(를) 해결했습니다. #91707 (Kseniia Sumarokova).- 데이터 레이크 대상 truncate 쿼리에 대해 아무 작업도 하지 않고 조용히 넘어가는 대신 "not implemented" 예외를 던지도록 했습니다. #86604 이슈를 종료합니다. #91713 (Kseniia Sumarokova).
- Parquet v3 리더에 최대 메시지 크기 제한을 설정하여
DB::Exception: apache::thrift::transport::TTransportException: MaxMessageSize reached예외가 발생하지 않도록 했습니다. #91737 (Arthur Passos). insert_select_deduplicate설정이 추가되었습니다. INSERT SELECT 시 삽입 중복 제거를 어떻게 처리하는지 더 명확히 하기 위한 설정입니다. 일반적으로 이러한 쿼리에서는 중복 제거를 할 수 없지만, 테이블이 변경되지 않고 결과가 정렬되어 있다면 재시도 시 중복 제거를 수행할 수 있습니다. 소스가 동일한지는 추적할 수 없지만, SELECT 쿼리 결과가 정렬되어 있는지는 확인할 수 있습니다. 실제로 일반적인 경우에는 이를 확인하는 것이 매우 어렵지만,ORDER BY ALL이 사용된 단순한 경우는 쉽게 처리할 수 있습니다. 현재 이 부분의 로직은 사실상 올바르게 동작하지 않습니다. 중복 제거를 시도하긴 하지만, 대부분의 경우 SELECT가 서로 다른 데이터를 반환하기 때문에 블록 간의 중복을 감지하지 못합니다. #91830 (Sema Checherinda).Array를QBit로 캐스팅할 때 암시적 타입 변환을 허용합니다. 이제 정수형 및 부동소수점형 배열을 명시적인 타입 캐스트 없이 바로QBit컬럼에 삽입할 수 있습니다. #91846 (Raufs Dunamalijevs).CapnProto메시지 크기 제한을 추가했습니다. 이 제한은format_capn_proto_max_message_size로 변경할 수 있습니다. #91888 (Antonio Andelic).- mark cache 메트릭을 쿼리만 추적하도록 정교하게 조정합니다(#83415 이후
MarkCacheHits/MarkCacheMisses가 머지 작업에도 집계되도록 업데이트되었으나, 이 PR은 동작을 이전 상태로 되돌립니다). #91910 (Azat Khuzhin). - 로컬 연결에서
client_info.interface가TCP로 설정되던 문제를 수정했습니다. #91933 (Konstantin Bogdanov). - ACME 클라이언트 설정의
refresh_certificates_task_interval매개변수는 이제 값을 초 단위로 지정해야 합니다. #92211 (Konstantin Bogdanov). system.*_log에 대한 파트 이벤트를system.part_log에 기록합니다. #92217 (Azat Khuzhin).
버그 수정(공식 안정 릴리스에서 사용자가 인지할 수 있는 잘못된 동작)
Time및Time64데이터 타입의 슈퍼타입과 관련된 PREWHERE 버그 일부를 수정합니다. #84544를 해결합니다. #84715 (Yarik Briukhovetskyi).- 사용 전에
DNSResolver를 초기화하여 사용자 정의 설정이 적용되도록 했습니다. #76296을(를) 수정했습니다. #81302 (Zhigao Hong). - 일부 상황에서 이름에 점이 포함된 컬럼의 서브컬럼을 읽는 기능을 수정했습니다. #81261, #82058, #88169을(를) 해결합니다. #87205 (Pavel Kruglov).
- 리터럴이 아닌 매개변수에서 GenerateRandom 엔진이 크래시가 발생하던 문제를 수정했습니다. 이제 LOGICAL_ERROR 대신 명확한 메시지와 함께 BAD_ARGUMENTS를 반환합니다. #88157 (Shafi Ahmed).
UNION이 있는 경우 사용되지 않는 프로젝션 컬럼이 제거되지 않던 문제를 수정합니다. #88180을(를) 해결합니다. #88350 (Sema Checherinda).- 기본 키가 내림차순으로 정렬된 경우
JOIN최적화 과정에서 세그먼트가 잘못 계산되던 문제를 수정했습니다. #88512을(를) 해결합니다. #88794 (Amos Bird). - s3queue_keeper_fault_injection_probablility 설정을 다시 활성화하고 관련 문제를 수정했습니다. #88800 (Kseniia Sumarokova).
- TTL에서 컬럼이 조기에 제거되어 발생했던 여러 문제를 수정했습니다. #88002를 해결합니다. #88860 (Amos Bird).
- temporary_files_buffer_size가 0으로 설정된 경우 예외를 던지도록 합니다. #88900을(를) 해결합니다. #88917 (Vladimir Cherkasov).
- 조건에
NULL상수가 포함된 경우Set인덱스 분석 중 발생하던Bad get오류를 수정했습니다. #84856 및 #82974를 해결했습니다. #89429 (Nikolai Kochetov). Cannot add subcolumn X.Y: column with this name already exists오류를 수정했습니다. #89599를 해결했습니다. #89602 (Azat Khuzhin).theilsU및contingencyFUNCTION에서 결과가 잘못 나오던 버그를 수정했습니다. #89760 (Nihal Z. Miaji).- Alias 안정성 문제를 수정합니다: SharedDatabaseCatalog에서 StrictnessLevel을 수정하고, 대상이 또 다른 alias인 경우를 허용하지 않으며, 추가 인터페이스(getSerializationHints, supportsReplication, getStoragePolicy, totalBytesUncompressed, lifetimeRows, lifetimeBytes, storesDataOnDisk, tryLockForShare, lockForShare)를 구현합니다. #89106을(를) 해결합니다. #89812 (Kai Zhu).
enable_lazy_columns_replication설정이 활성화된 상태에서IN내부에ARRAY JOIN이 있는 원격 쿼리를 실행할 때 발생할 수 있는 크래시를 수정합니다. #90361를 해결합니다. #89997 (Pavel Kruglov).analyzer_compatibility_join_using_top_level_identifier를 여러 조인과 함께 사용하는 경우 발생할 수 있는 잠재적인 논리 오류를 수정했습니다. #90010 (Vladimir Cherkasov).- 일부 상황에서 텍스트 포맷의
String값에서 잘못된DateTime64값을 추론하던 문제를 수정합니다. #89368을(를) 해결합니다. #90013 (Pavel Kruglov). - 집계 상태 및 기타 소스에서 데이터를 역직렬화할 때 크기를 확인합니다. #90031 (Raúl Marín).
- 볼륨 특성에 따라 파트 범위를 분할하여 콜드 볼륨에서 TTL 드롭 머지를 사용할 수 있도록 했습니다. 이 패치 이후로는 max TTL < now인 파트가 콜드 스토리지에서 제거됩니다. 이 알고리즘은 단일 파트 드롭만을 스케줄합니다. #90059 (Mikhail Artemenko).
kafka_handle_error_mode = 'dead_letter_queue'setting을 사용해 Kafka 테이블을 생성했지만system.dead_letter_queue테이블이 구성되어 있지 않은 경우 서버가 충돌할 수 있었습니다. 이 동작을 수정했습니다. #87573를 해결합니다. #90064 (Nikita Mikhaylov).ARRAY JOIN을 사용한 데이터 삽입 시enable_lazy_columns_replication설정이 활성화되어 있을 때 발생할 수 있는Column with Array type is not represented by ColumnArray column: Replicated오류를 수정합니다. #90066 (Pavel Kruglov).- 잘못된 소멸 순서로 인해 서버를 정상적으로 종료하는 과정에서 발생하던 크래시를 수정했습니다. #82420를 해결합니다. #90076 (Nikita Mikhaylov).
- 큰 step 값을 사용할 때
numberssystem 테이블에서 발생하던 논리적 오류와 모듈로(modulo) 버그를 수정합니다. #83398를 해결합니다. #90123 (Nihal Z. Miaji). - 네이티브 writer로 단일 스레드 쓰기를 사용할 때 Parquet 쓰기에서 원래 순서를 보존하지 못하던 문제를 수정합니다. https://github.com/ClickHouse/ClickHouse/pull/64424/files 변경 사항을 부분적으로 되돌립니다. #90126 (Arthur Passos).
- LIMIT/OFFSET 표현식에는 상수 노드 최적화를 적용하지 않습니다. #89607를 수정합니다. #90156 (Yakov Olkhovskiy).
- 25.8 버전으로의 원활한 업그레이드를 방해하던 hive 파티셔닝과의 비호환성을 수정했습니다(업그레이드 중 발생하던
All hive partitioning columns must be present in the schema오류를 해결). #90202 (Kseniia Sumarokova). - glue catalog를 사용할 때 timestamp 컬럼이 있는 iceberg 테이블에서 발생하던 JSON 예외를 수정합니다. #90210을(를) 해결합니다. #90209 (Alsu Giliazova).
- part의 행 수가 index_granularity보다 적을 때 MergeTreeReaderIndex에서 발생하던 행 수 불일치 문제를 수정합니다. #89691을(를) 해결합니다. #90254 (Peng Jian).
- 무한대
nan/inf값이 포함된WITH FILL쿼리 동작을 수정합니다. #69261를 해결합니다. #90255 (Konstantin Bogdanov). - query_plan_use_logical_join_step=0 설정 및 JOIN ON 절의 잔여 조건(residual condition)을 사용할 때 발생하던 「column not found」 오류를 수정했습니다. #88635을(를) 해결했습니다. #90279 (Vladimir Cherkasov).
- 집계 프로젝션 최적화가 적용된 일부 쿼리를 수정합니다. #90288 (János Benjamin Antal).
- compact 파트에서 JSON 서브컬럼을 읽을 때
CANNOT_READ_ALL_DATA오류가 발생할 수 있는 버그를 수정합니다. #90264를 해결합니다. #90302 (Pavel Kruglov). - 이제 ClickHouse는 테이블의
default_sort_order와 동일한 정렬 순서가 매니페스트 파일에 지정되지 않았거나 일치하지 않는 Iceberg 테이블에 대해서는 read-in-order 최적화를 사용하지 않습니다. #89178 문제를 수정했습니다. #90304 (alesapin). - 이제 Time 및 Time64가 DateTime 및 DateTime64에서 변환할 때 타임존을 올바르게 처리합니다(사용자에게 DateTime[64]로 표시되는 시간과 동일한 타임존의 시간을 표시해야 합니다). #89896를 해결합니다. #90310 (Yarik Briukhovetskyi).
SELECT CAST(CAST(now(), 'Time'), 'Time64')가 잘못된 결과를 반환하던 버그를 수정합니다. #88349 이슈를 해결합니다. #90324 (Yarik Briukhovetskyi).- randomStringUTF8에서 정수 오버플로가 발생할 때 크래시가 나던 문제를 수정했습니다. #90326 (Michael Kolupaev).
multicluster_root_path를 사용하는 멀티클러스터 환경에서 클러스터 디스커버리 업데이트를 수정하여 지연이 발생하거나 ZooKeeper 업데이트가 누락되는 문제를 방지했습니다. #90341 (RinChanNOW).- 존재하지 않는 JSON 경로에 대해
index_granularity_bytes=0인 경우prewhere에서 발생할 수 있는 논리 오류를 수정합니다. #86924를 해결합니다. #90375 (Pavel Kruglov). L2DistanceTransposed에서 정밀도 인수가 유효 범위를 초과할 때 발생하던 충돌 버그를 수정했습니다. #90401 이슈를 해결합니다. #90405 (Raufs Dunamalijevs).Array(Dynamic)인자를 사용하는arrayUnion에서 발생할 수 있는 잠재적인 논리적 오류를 수정했습니다. #90270을 해결했습니다. #90409 (Pavel Kruglov).- 하나의 ALTER에서 동일한 Nested 컬럼에 대해 이름 변경과 수정을 동시에 수행할 때 발생할 수 있는 논리적 오류를 수정했습니다. #90406을(를) 해결합니다. #90412 (Pavel Kruglov).
- HTTP 매개변수에서 JSON/Dynamic/Variant 값을 파싱하는 동작을 수정합니다. #88925을(를) 해결합니다. #90430 (Pavel Kruglov).
- 정적
KeyValuePairExtractor로 인해 동시 파일 읽기 작업 중 데이터 손상 또는 충돌이 발생하던 Hive 파티셔닝의 경쟁 상태(race condition)를 수정했습니다. #90474 (Paresh Joshi). - 배열 참조 벡터(기본값은
Array(Float64)))를Float32,BFloat16과 같이Float64가 아닌 요소 타입의QBit컬럼과 함께 사용할 때L2DistanceTransposed에서 잘못된 거리 계산이 발생하던 문제를 수정했습니다. 이제 함수가 참조 벡터를QBit의 요소 타입에 맞게 자동으로 캐스팅합니다. #89976 문제를 해결합니다. #90485 (Raufs Dunamalijevs). toDateTimeOrNull가 음수 인자를 받을 때 NULL을 반환하던 버그를 수정합니다. #90490 (Yarik Briukhovetskyi).Arrow포맷에서LowCardinality(Bool/Date32)출력 시 발생할 수 있는 논리 오류를 수정합니다. #83883를 해결합니다. #90505 (Pavel Kruglov).- 일부 잘못된 입력에 대해 의미 없는 값을 반환하던 IPv4 파싱 함수(예:
IPv4StringToNumOrDefault)를 수정했습니다. #90544을 해결했습니다. #87583을 해결했습니다. #90545 (Michael Kolupaev). - 로컬 호스트 검사 중 주소 확인에 실패할 때 markReplicasActive를 다시 시도하도록 했습니다: DDLTask에서 자기 호스트(self host) 검사 중 예외가 발생하면 경고 로그를 출력합니다. DDLWorker::markReplicasActive에서는 로컬 호스트를 찾지 못했지만 클러스터에 호스트 ID가 있는 경우 예외를 발생시켜 재시도하도록 합니다. #90556 (Tuan Pham Anh).
equalsFUNCTION에서 드문 특정 경우에 발생하던 논리 오류를 수정합니다. #88142를 해결합니다. #90557 (Nihal Z. Miaji).test_ssh/test.py::test_paramiko_password에서 발생하던 thread sanitizer 크래시를 수정했습니다. #90612 (Govind R Nair).- const가 적용된 비문자열 컬럼을 사용할 때
concatWithSeparator함수에서 발생하던 논리 오류를 수정했습니다. #90596 이슈를 해결했습니다. #90655 (Nihal Z. Miaji). INTO OUTFILE의 포맷을 수정하여 #90207을(를) 해결합니다. #90656 (Azat Khuzhin).- 서브쿼리를 포함한 뮤테이션을
allow_statistics_optimize=1로 설정된 상태에서 실행할 때 발생할 수 있는 잠재적인 비정상 종료 문제를 수정합니다. #90626을(를) 해결합니다. #90664 (Azat Khuzhin). GROUP BY와 함께 사용하는LIMIT BY에 대한 analyzer 검증 로직을 수정하여,LIMIT BY가GROUP BY에 없는 컬럼을 사용할 때NOT_FOUND_COLUMN_IN_BLOCK대신 올바른NOT_AN_AGGREGATE오류를 발생시키도록 했습니다. #89713 이슈를 해결했습니다. #90665 (xiaohuanlin).LowCardinality컬럼을 파티션 키로 사용할 때 발생하던 타입 캐스팅 오류를 수정합니다. #89412를 해결합니다. #90666 (xiaohuanlin).shardNum()과 같은 비결정적 함수로부터 상수 폴딩된 필터 프레디케이트가 있는 쿼리에서 쿼리 조건 캐시가 잘못 사용되던 문제를 수정합니다. #90692 (Eduard Karacharov).EXISTSFUNCTION이 포함된 JOIN ON 절의 쿼리에서 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. 이제 쿼리는 단순히INVALID_JOIN_ON_EXPRESSION오류를 반환합니다. #90698을(를) 닫습니다. #90719 (Vladimir Cherkasov).- 기본 데이터베이스를 테이블 없이 사용할 때 AccessRightsElement에서 발생하던 논리 오류 'Inconsistent AST formatting'을(를) 수정했습니다. #90742 (Pablo Marcos).
- 대상 호스트로
localhost를 사용하는remote테이블 함수를 사용할 때ALTER UPDATE쿼리의 접근 권한 검증을 수정했습니다. #90761 (pufit). display_secrets_in_show_and_select및format_display_secrets_in_show_and_select설정에 따라 named collection에 숨겨진 secret이 처리되도록 수정했습니다. #90765 (Pablo Marcos).enable_shared_storage_snapshot_in_query를 비활성화합니다(메모리 누수를 유발하기 때문입니다). #90770 (Azat Khuzhin).- 병렬 레플리카가 활성화된 상태에서 분산 테이블에
RIGHT JOIN을 수행할 때 발생하던 중복 데이터 문제를 수정했습니다. #90806 (zoomxi). - JSON에서 공유 데이터와 동적 경로가 불일치한 상태가 되어 논리적 오류와 예기치 않은 결과가 발생할 수 있는 문제를 수정했습니다. #90816 (Pavel Kruglov).
- SharedCatalog(Cloud 전용 기능)에 대해 CSE에서 dictGet() 및 딕셔너리 이름을 사용하는 ALTER MODIFY QUERY 처리를 수정합니다. #90860 (Azat Khuzhin).
String집계 상태의 메모리 내 직렬화 방식 간 호환성을 수정했습니다. 서로 다른 직렬화 방식은 서로 다른 버전의 인스턴스에서 집계 쿼리를 실행할 때 중복 결과를 초래할 수 있습니다. 새 직렬화 방식은serialize_string_in_memory_with_zero_byte설정으로 활성화할 수 있습니다. #90880 (Antonio Andelic).- INSERT가 자주 발생하는 경우 Buffer의 백그라운드 플러시 동작을 수정합니다. #90892 (Azat Khuzhin).
- system.licenses에서 contrib/ 상위 폴더를 나열하지 않도록 했습니다. #90901 (Raúl Marín).
- JSON/Dynamic/Variant 컬럼을 읽는 동안 발생하는 높은 메모리 사용량 문제를 수정합니다. #90907 (Pavel Kruglov).
- base58Decode 함수의 버퍼 할당을 수정했습니다. #90909 (Antonio Andelic).
finish=true플래그가 설정된 응답을 보낸 이후 레플리카로부터 또 다른 읽기 요청을 받았을 때 발생할 수 있었던 논리 오류를 수정합니다. 이는MergeTreeReadPoolParallelReplicas내부의 논리적 경쟁 상태(race condition) 때문에 가능했으나, 실제로 발생할 가능성은 매우 낮았습니다. #90921 (Nikita Taranov).- 부분적인 권한 회수 시 와일드카드 권한 검사가 올바르게 동작하지 않던 문제를 수정했습니다. 더 많은 테스트를 추가했습니다. #90922 (pufit).
NestedLowCardinality컬럼에 대한SummingMergeTree집계 동작을 수정했습니다. #90927 (Ivan Babrou).- 와일드카드
REVOKE사용 시 전역 권한 처리 방식 수정. 와일드카드 권한을REVOKE할 때CREATE USER와 같은 일부 전역 수준 권한이 실수로 함께 취소될 수 있던 문제를 수정합니다. #90928 (pufit). - Azure blob 나열 시 발생할 수 있었던 무한 루프를 수정했습니다. #90947 (Julia Kartseva).
- CPU를 과도하게 사용하고 대량의 로그를 생성하던 과도한 Buffer 플러시 문제를 수정합니다. #91000 (Azat Khuzhin).
- ...
adaptive_write_buffer_initial_size를 0으로 설정하지 않도록 했습니다. #91001 (Pedro Ferreira). write_marks_for_substreams_in_compact_parts가 비활성화된 Compact 파트에서 하위 객체를 읽을 때, 경로가 공유 데이터와 동적 경로 양쪽에 모두 존재할 수 있는 경우 JSON에서 발생하던 버그를 수정했습니다. #91014 (Pavel Kruglov).- 인수 없이 dictGet를 사용하는 CTE에서 발생하는 std::out_of_range 예외를 수정했습니다. #91027 이슈를 종료했습니다. #91022 (Pavel Kruglov).
- 뮤테이션에서 materialized 컬럼의 동적 서브컬럼 읽기를 수정합니다. #90653 이슈를 해결합니다. #91040 (Pavel Kruglov).
- 빈 배열과
isNull함수를 함께 사용할 때arrayFilter함수가 동작하지 않던 문제를 수정합니다. 이슈 #73849를 해결합니다. #91105 (Nihal Z. Miaji). - 테이블 컬럼 중 하나가 빈 튜플 컬럼인 경우
ARRAY JOIN에서 발생하던 논리 오류를 수정합니다. #90801을(를) 해결합니다. #91123 (Nihal Z. Miaji). - 기존 파트에서
alter add column으로 추가된 컬럼의 지연 구체화 동작을 수정합니다. #91142 (Pavel Kruglov). - Summing/Aggregating/Coalescing MergeTree에서 JSON 컬럼 병합 시 동작을 수정했습니다. 이전에는 데이터 파트에 데이터를 기록하는 동안 예기치 않은 동적 경로가 생성되는 문제가 발생할 수 있었습니다. #91151 (Pavel Kruglov).
- compact 파트에 데이터를 기록하는 동안 동적 구조가 일관되지 않아 segfault가 발생할 수 있던 문제를 수정했습니다. #91152 (Pavel Kruglov).
- 과학적 표기법으로 표현된 서브노멀 부동소수점 값의 파싱을 수정합니다. #78903 이슈를 해결합니다. #91162 (Nihal Z. Miaji).
- 암시적 스키마를 가진 소스를 사용하는 서브쿼리를 대상으로 한 INSERT SELECT에서 잘못된 스키마 추론 문제를 수정했습니다. #91204 (Pervakov Grigorii).
- https://github.com/clickhouse/clickhouse/issues/91206 문제를 수정합니다. 통계를 사용하여 테이블을 CREATE하고 일부 데이터를 기록한 뒤 통계 항목 하나를 DROP하면, 다시 읽을 때 충돌이 발생했습니다. 직렬화(serialize)와 역직렬화(deserialize)가 동일한 유형의 통계가 있다고 가정했기 때문입니다. 이번 수정에서는 현재 메타데이터에 직렬화된 통계가 포함되어 있는지 확인하고, 포함되어 있지 않다면 임시(mock) 통계를 생성한 뒤 해당 통계를 건너뛰기 위해 역직렬화만 수행하도록 합니다. #91227 (Han Fei).
- JSON/Dynamic과 LowCardinality로 구성된 Tuple 타입 컬럼에 INSERT 할 때 CoalescingMergeTree 테이블에서 발생하던 문제를 수정합니다. #91215를 해결합니다. #91270 (Pavel Kruglov).
- SYSTEM DROP FILESYSTEM CACHE ON CLUSTER 명령을 수정했습니다. #91304 (Anton Ivashkin).
- 「Bad cast from type DB::ColumnSparse to DB::ColumnNullable」라는 잠재적인 논리적 오류를 수정하여 #91284 문제를 해결했습니다. #91309 (Pavel Kruglov).
- 악의적으로 조작된 바이트 스트림이 중첩된 QBit 타입으로 역직렬화되는, 원래는 불가능해야 하지만 서버를 비정상 종료시키는 데 악용될 수 있었던 문제를 수정합니다. #91313 (Raufs Dunamalijevs).
- Replicated 데이터베이스에서 인수가 비어 있는 Alias 테이블을 수정했습니다. #91378에서 보고된 문제를 해결했습니다. #91382 (Kai Zhu).
- 현재 이 설정은 false로 설정되어 있어서 비동기 INSERT 큐가 원격 서버로 플러시될 때 INSERT는 항상 동기식으로 수행됩니다. 이는 설정이 True로 되어 있는 사용자에 대해서도 마찬가지입니다. #91386 (Mikhail f. Shiryaev).
- 병합 알고리즘에서 헤더의 희소 컬럼을 제거합니다. 이 변경으로 #91377 이슈를 해결합니다. #91396 (Pavel Kruglov).
- 25.8 버전의 hive 파티셔닝 버그를 수정하여
A hive partitioned file can't contain only partition columns예외가 잘못 발생할 수 있던 문제를 해결했습니다. #91403 (Kseniia Sumarokova). - Hierarchy를 지원하지만 어떤 컬럼도
HIERARCHICAL이 아닌 딕셔너리 타입에서NULL값으로 인해 발생하던dictGetDescendants크래시를 수정합니다. #92026 이슈를 해결합니다. #92121 이슈를 해결합니다. #91420 (Nihal Z. Miaji). - lambda 및 non-const 튜플 인자를 사용할 때
IN함수에서 발생하던 크래시를 수정합니다. #91379 이슈를 해결합니다. #91446 (Nihal Z. Miaji). MaterializedView를 통해 병렬 쓰기를 지원하지 않는 스토리지에 데이터를 삽입할 때 잘못 트리거되던 병렬 쓰기를 수정했습니다. #91449 (Pervakov Grigorii).- Ytsaurus XML 사전에서 null 값을 처리합니다. #91465 (MikhailBurdukov).
SET param_q=[1,2,3,4]; SELECT {q:QBit(Float32,4)}와 같은 쿼리 파라미터를 사용할 때QBit타입이 동작하지 않던 문제를 수정했습니다. #91488 (Raufs Dunamalijevs).- 상수 표현식에서
untuple을 사용할 때 발생하는LOGICAL_ERROR를 수정합니다. #91507 (Pervakov Grigorii). librdkafka의 잠재적인 데이터 레이스를 수정합니다. #91521 (János Benjamin Antal).remoteFUNCTION에서 별표 인자로 인해 발생한 논리 오류를 수정합니다. #90568 이슈를 종료합니다. #91524 (Nihal Z. Miaji).- Date 및 DateTime64 타입을 ORC 포맷에서 읽을 때 발생하던 오버플로우를 수정합니다. #70976을(를) 해결합니다. #91572 (Yarik Briukhovetskyi).
- 객체 스토리지를 사용하는 테이블 엔진에서 ALTER를 허용하지 않도록 했습니다. 예를 들어, 객체 스토리지 엔진은 프로젝션을 지원하지 않기 때문에 ALTER ADD PROJECTION을 수행하면 서버를 다시 시작하지 못하는 문제가 발생할 수 있었습니다. #91573 (Nikolay Degterinsky).
- 상수가 아닌 참조 벡터(예: 테이블에서 가져온 벡터)를 사용할 때
L2DistanceTransposed가 잘못된 결과를 반환하던 문제를 수정했습니다. #91517. #91593 (Raufs Dunamalijevs). - 디스패치 단계에서 FALSE 조건이 있는 조인에서
LOGICAL_ERROR가 반환되던 버그를 수정했습니다. #91173 이슈를 해결합니다. #91598 (Yarik Briukhovetskyi). - "additional filter"가 있는 join에서 증가한 메모리 사용량 문제를 수정하고, #91011을(를) 종료했습니다. #91664 (Vladimir Cherkasov).
- 뷰를 사용하고 병렬 레플리카가 활성화된 JOIN 쿼리의 문제를 수정합니다. #91813 (Igor Nikonov).
- delta lake 설정인
delta_lake_snapshot_version을(를) 수정합니다. 이 설정은 테이블 함수가 아닌 테이블 엔진(table engine)과 함께 사용되고, 이전에 특정 스냅샷 버전을 사용한 뒤 값이 -1(비활성화)로 설정된 경우 잘못된 결과를 반환할 수 있었습니다. #87676를 해결합니다. #91818 (Kseniia Sumarokova). - RecursiveCTEChunkGenerator의 LOGICAL_ERROR를 수정했습니다. #91827 (Pablo Marcos).
- FINAL 및 PREWHERE를 사용하는 쿼리에서 블록 구조 불일치 문제를 수정합니다. #91847 (Antonio Andelic).
join_use_nulls및 CROSS JOIN을 포함한 다중 조인에서 발생하던 논리 오류를 수정했습니다. #91853 (Vladimir Cherkasov).- https://github.com/ClickHouse/ClickHouse/pull/90816 에서 수정된 버그로 인해 공유 데이터와 동적 경로에서 경로가 중복된 JSON이 발생할 수 있었는데, 이를 복구하기 위한 메커니즘을 추가했습니다. #91886 (Pavel Kruglov).
- DICTIONARY_V2로 인코딩되고 NULL 값만 포함하는 문자열 컬럼을 읽을 때 발생하던 ORC 리더 버그를 수정했습니다. #91889 (Peng Jian).
- Tuple 컬럼에서 희소 및 널 허용 서브스트림 간 직렬화 불일치를 수정하여, 이로 인해 발생할 수 있는 파트 손상이나 읽기 중 크래시를 방지합니다. 이 변경은 https://github.com/ClickHouse/ClickHouse/pull/91851 을 해결합니다. @Algunenano 비공개 리포지토리의 스트레스 테스트가 이 수정으로 해결되는지 확인해 주실 수 있을까요? @CurtizJ 도 함께 검토를 도와주실 수 있을까요? 감사합니다. #91932 (Amos Bird).
- plain-rewritable 디스크에서 백업 생성 시
Directory '{}' does not exist (LOGICAL_ERROR)오류가 발생하던 문제를 수정합니다. #91935 (Julia Kartseva). - 이름이 지정된 컬렉션을 사용하여 MongoDB에 연결할 때 발생하던 비정상 종료를 방지합니다. #91959 (Antonio Andelic).
- compact 파트에서 일부
ALTER쿼리를 실행한 이후에 발생할 수 있던 "TOO_MANY_MARKS" 오류를 수정했습니다. #91980 (alesapin). - https://github.com/clickhouse/clickhouse/issues/87417 이슈를 닫습니다. v1 포맷의 쓰기 스키마에 오류가 있었는데, 필수 필드이므로 "added_snapshot_id"의 타입은 "null, long"이 아니라 "long"이어야 합니다. 이 버그는 Spark와 같은 다른 시스템과 호환되지 않기 때문에 발생합니다. 서로 다른 시스템의 manifest 파일을 함께 사용할 때 이 버그가 발생합니다. #92078 (Han Fei).
- 이전 버전에서 스타일이 잘못 적용되어 있던
readWKT,readWKB함수 이름을 올바르게 수정합니다. #92094 (Alexey Milovidov). midpointFUNCTION의 여러 논리 오류, 오버플로 및 기능상의 버그를 수정했습니다. #91816 이슈를 해결했습니다. #92102 (Nihal Z. Miaji).- 일부 서브컬럼(예: 문자열 크기)을 희소 인코딩으로 읽을 때 잘못된 결과가 나타날 수 있는 문제를 수정합니다. #92156 (Pavel Kruglov).
system.view_refreshes가No macro 'replica' in config오류로 인해 실패하던 문제를 수정했습니다. #92203 (Michael Kolupaev).- FORMAT에서 UDF 치환 문제를 수정했습니다. #92210 (Raúl Marín).
ddlworker::markreplicasactive에서 활성 호스트를 찾지 못했지만remote_servers에 일부 host_id가 있는 경우, 예외를 던지는 대신 경고 로그를 출력하도록 변경했습니다. #92223 (Tuan Pham Anh).- 연산자
IN,NOT IN을 괄호로 둘러싸도록 수정했습니다. #85075를 수정합니다. #92225 (Mikhail f. Shiryaev). - KeeperMap 및 Memory 테이블 백업 문제를 수정했습니다. 이 두 엔진 중 하나를 사용하는 테이블에서
max_compress_block_size를0으로 설정한 상태로 백업을 생성하면 충돌이 발생할 수 있었습니다. #92237 (Antonio Andelic). - Log 엔진에서 String 데이터와 .size 서브컬럼을 동시에 읽을 때 발생하던 크래시를 수정합니다. 이는 #89909 이슈를 해결합니다. 여기에는 #92290의 일부 커밋이 포함됩니다. #92341 (Amos Bird).
caseWithExpressionFUNCTION의 인수에서Nothing타입 사용으로 인해 발생한 논리 오류를 수정합니다. #85354를 해결합니다. #92351 (Nihal Z. Miaji).- MEMORY_LIMIT_EXCEEDED 이후 집계 함수에서 발생할 수 있는 크래시를 수정합니다. #92390 (Azat Khuzhin).
빌드/테스트/패키징 개선
- CI에서
clang-21을 사용합니다. #87074 (Konstantin Bogdanov). - 크로스 컴파일 시 CMake를 통해 파일을 다운로드하지 않도록 합니다. #90506 (Raúl Marín).
ClickHouse 25.11 릴리스, 2025-11-27
하위 호환성이 깨지는 변경 사항
- 더 이상 사용되지 않는
Object타입을 제거합니다. #85718 (Pavel Kruglov). - 폐지된
LIVE VIEW기능을 제거합니다.LIVE VIEW를 사용하는 경우 새 버전으로 업그레이드할 수 없습니다. #88706 (Alexey Milovidov). - 이전 버전에서는
Geometry타입이String의 별칭이었지만, 이제는 완전한 기능을 갖춘 독립적인 타입입니다. #83344 (scanhex12). - MergeTree 테이블의 Wide data part에서
Variant타입 서브컬럼에 대해 생성되는 파일 이름을 이스케이프합니다. 이 변경으로 Variant/Dynamic/JSON 데이터 타입을 사용하는 기존 테이블과의 호환성이 깨집니다. 이 변경은 Variant 내부에 특수 문자가 포함된 타입(예:\를 포함하는 특정 타임존을 가진 DateTime)을 저장할 때 발생하는 문제를 수정합니다. 이스케이프 처리는 MergeTree 설정escape_variant_subcolumn_filenames를 변경하여 비활성화할 수 있습니다(호환성을 유지하려면 MergeTree 설정 파일에서 이 설정을 비활성화하거나, 업그레이드 전에compatibility설정을 이전 버전으로 지정하십시오). #69590를 해결합니다. #87300 (Pavel Kruglov). - 기본적으로
String데이터 타입에 대해with_size_stream직렬화 포맷을 활성화합니다. 이 변경은 이전 버전과 호환되지만, 새 직렬화 포맷은 버전 25.10부터만 지원되므로 25.10보다 이전 버전으로는 다운그레이드할 수 없습니다. 25.9 및 그 이전 버전으로의 다운그레이드 가능성을 유지하려면 서버 설정의merge_tree섹션에서serialization_info_version을basic으로,string_serialization_version을single_stream으로 설정하십시오. #89329 (Alexey Milovidov). - 클라이언트가 예외를 더 안정적으로 파싱할 수 있도록 HTTP 결과 응답에 대한 예외 태깅을 지원합니다. #75175를 해결합니다. 설정
http_write_exception_in_output_format는 포맷 간 일관성을 위해 기본적으로 비활성화되어 있습니다. #88818 (Kaviraj Kanagaraj). 원칙적으로 기존 동작을 깨뜨리지 않도록 설계되었지만(최악의 경우 예외 메시지에 다소 이상한 문자열이 추가되는 정도), 예외 메시지를 파싱하는 일부 스크립트가 어떻게 동작할지 예측하기 어렵기 때문에, 인지 차원에서 변경 로그 카테고리를 「하위 호환성이 깨지는 변경 사항」으로 두는 것이 타당합니다. - 공유 객체 스토리지 경로 위에 여러 개의
plain-rewritable디스크를 생성하지 못하도록 금지합니다. 이렇게 구성할 경우 서로 다른 메타데이터 스토리지 트랜잭션이 충돌할 때 정의되지 않은 동작이 발생할 수 있습니다. #89038 (Mikhail Artemenko). - Kafka 스토리지 SASL 설정의 우선순위를 수정합니다. 이제 CREATE TABLE 쿼리에서 지정한 테이블 수준 SASL 설정이 설정 파일에 정의된 consumer/producer 전용 설정을 올바르게 재정의합니다. #89401 (János Benjamin Antal).
- Parquet no-timezone 타임스탬프(isAdjustedToUTC=false)는 이제 DateTime64(...)가 아니라 DateTime64(..., 'UTC')로 읽습니다. 이러한 UTC 타임스탬프를 문자열로 변환할 때 올바른 로컬 시간 표현이 생성되므로, 이 방식이 기존 동작보다 덜 부정확합니다. 이전 동작을 사용하려면
input_format_parquet_local_time_as_utc = 0을 사용하십시오. #87469를 해결합니다. #87872 (Michael Kolupaev). T64코덱에 대한 작은 개선 사항입니다. 이제 압축 요소 크기와 정렬되지 않은 데이터 타입은 더 이상 허용하지 않으며, 그렇지 않을 경우 버그가 발생했습니다. #89282를 해결합니다. #89432 (yanglongwei).
새 기능
Geometry타입을 도입합니다. 이 타입에 대해WKB및WKT형식 읽기를 지원합니다. 이전 버전에서는Geometry타입이String의 별칭이었지만, 이제는 완전한 기능을 갖춘 독립적인 타입입니다. #83344 (scanhex12).- 사용자 가장(User impersonation)을 지원하는 새로운 SQL 문
EXECUTE AS를 추가했습니다. #39048 이슈를 해결합니다. #70775 (Shankar). naiveBayesClassifier함수를 추가하여 n그램을 기반으로 Naive Bayes를 사용해 텍스트를 분류할 수 있습니다. #88677 (Nihal Z. Miaji).- 테이블의 일부를 선택할 수 있도록
LIMIT및OFFSET에 분수 값을 지원합니다. #81892 이슈를 해결합니다. #88755 (Ahmed Gouda). - Microsoft OneLake 카탈로그용 ClickHouse 서브시스템. #89366 (scanhex12).
- 배열에서 필요한 차원 수만큼 전개하고 Tuple 컬럼 내부의 포인터를 서로 바꾸는
flipCoordinates함수를 추가했습니다. #79469를 해결합니다. #79634 (Sachin Kumar Singh). system.unicode테이블을 추가하여 Unicode 문자 목록과 해당 속성을 제공합니다. #80055 이슈를 해결합니다. #80857 (wxybear).- 병합 후 Wide 파트에서 데이터 타입에 지정된 매개변수와 관계없이 동적 서브컬럼 개수를 제한할 수 있도록 새로운 MergeTree 설정
merge_max_dynamic_subcolumns_in_wide_part를 추가합니다. #87646 (Pavel Kruglov). cume_dist윈도우 함수 지원이 추가되었습니다. #86920 문제를 수정했습니다. #88102 (Manuel).- 이제 텍스트 인덱스를 구성할 때
preprocessor라는 새 인수를 추가할 수 있습니다. 이 인수는 토큰화 전에 각 문서를 변환하는 임의의 표현식입니다. #88272 (Jimmy Aguilar Mena). X-ClickHouse-Progress및X-ClickHouse-Summary에memory_usage필드를 추가합니다. 이 필드는 클라이언트 측에서 쿼리의 메모리 사용량을 실시간으로 수집하는 데 사용할 수 있습니다. #88393 (Christoph Wurm).into_outfile_create_parent_directories설정을 추가하여INTO OUTFILE사용 시 상위 디렉터리를 자동으로 생성하고, 출력 경로가 존재하지 않을 때 발생하는 오류를 방지합니다. 이를 통해 쿼리가 결과를 중첩 디렉터리에 기록하는 작업 흐름이 단순해집니다. #88610을(를) 해결합니다. #88795 (Saksham).- 임시 테이블에 대해
CREATE OR REPLACE구문을 지원합니다. #35888 이슈를 해결합니다. #89450 (Aleksandr Musorin). - 배열
arr에서elem과 같은 값의 모든 요소를 제거하는arrayRemove지원이 추가되었습니다. 이는 ClickHouse에 이미 훨씬 더 강력한arrayFilterFUNCTION이 존재하기 때문에 Postgres와의 호환성을 위해서만 필요합니다. #52099을(를) 해결합니다. #89585 (tiwarysaurav). - 평균을 계산하는
midpoint스칼라 FUNCTION을 추가합니다. #89029를 해결합니다. #89679 (simonmichal). - 이제 Web UI에 다운로드 버튼이 추가되었습니다. UI에 결과의 일부만 표시되더라도 전체 결과를 다운로드합니다. #89768 (Alexey Milovidov).
arrow_flight_request_descriptor_type설정을 추가하여 command 스타일 descriptor를 요구하는 Dremio 및 기타 Arrow Flight 서버를 지원합니다. #89523을(를) 구현합니다. #89826 (Shreyas Ganesh).- 인자와 그에 대응하는 극값을 함께 반환하는 새로운 집계 함수
argAndMin및argAndMax가 추가되었습니다. 이전 버전에서도 튜플을 인자로 사용하여 동일한 동작을 구현할 수 있었습니다. #89884 (AbdAlRahman Gad). - Parquet 체크섬을 기록하고 검증하는 설정. #79012 (Michael Kolupaev).
- Kafka 테이블 엔진에
kafka_schema_registry_skip_bytes설정을 추가하여, 메시지 페이로드를 파싱하기 전에 인캡슐레이션 헤더 바이트(예: AWS Glue Schema Registry의 19바이트 접두사)를 건너뛸 수 있도록 했습니다. 이를 통해 메타데이터 헤더를 추가하는 스키마 레지스트리에서 전송되는 메시지를 ClickHouse가 수신하여 처리할 수 있게 됩니다. #89621 (Taras Polishchuk). - 지오메트리 영역을 h3 육각형으로 채울 수 있는
h3PolygonToCellsFUNCTION을 추가했습니다. #33991를 해결했습니다. #66262 (Zacharias Knudsen). - S3에 있는 blob과 연관된 모든 태그를 포함하는 새로운 가상 컬럼
_tags(Map(String, String))를 추가합니다(참고: blob에 태그가 하나도 없으면 추가적인 요청은 수행되지 않습니다). #72945를 해결합니다. #77773 (Zicong Qu).
실험적 기능
- ACME 제공자(예: Let's Encrypt)로부터 TLS 인증서를 발급·가져오는 기능을 지원합니다(RFC 8555). 이를 통해 분산 클러스터에서 TLS를 자동으로 구성할 수 있습니다. #66315 (Konstantin Bogdanov).
- Prometheus HTTP Query API의 일부를 지원합니다. 이를 활성화하려면 설정 파일의
<prometheus>섹션에query_api유형의 규칙을 추가하십시오. 지원되는 핸들러는/api/v1/query_range와/api/v1/query입니다. #86132 (Nikita Mikhaylov). - 전문 검색(Full-text search)이 이제 베타 단계로 전환되었습니다(기존 실험적 단계에서 승격). #88928 (Robert Schulze).
Alias가 실험적 기능으로 이동되었으며,allow_experimental_alias_table_engine = 1로 활성화할 수 있습니다. #89712 (Kai Zhu).
성능 개선
- Parquet 리더 v3가 기본값으로 활성화되었습니다. #88827 (Michael Kolupaev).
- 분산 실행: 작업을 파일이 아니라 행 그룹 ID(row groups IDs) 단위로 더 효율적으로 분할합니다. #87508 (scanhex12).
RIGHT및FULL조인이 이제 ConcurrentHashJoin을 사용합니다. 이는 이러한 유형의 조인이 더 높은 수준의 병렬 처리로 실행된다는 의미입니다. RIGHT 및 FULL 조인에서 다양한 경우의 성능이 최대 두 배까지 향상되었습니다. #78027를 해결합니다. #78462 (Yarik Briukhovetskyi).- 쿼리에서 상수 표현식에 큰 값이 사용되는 경우를 위한 최적화입니다. 관련 이슈 #72880을(를) 종료합니다. #81104 (Yakov Olkhovskiy).
- 1만 개 이상의 파트가 있는 테이블에서 파티션 프루닝이 집중적으로 적용될 때
SELECT쿼리가 최대 8배 더 빨라집니다. #85535 (James Morrison). - 쿼리가 집계 상태를 위해 고정 해시 맵을 사용하는 경우 (작은 정수에 대해 GROUP BY를 수행), ClickHouse는 쿼리 속도를 높이기 위해 집계 상태를 병렬로 병합합니다. #87366 (Jianfei Hu).
_part_offset에 대한 SELECT와 다른 ORDER BY를 사용하는 프로젝션을 보조 인덱스로 사용할 수 있도록 허용합니다. 이 기능을 활성화하면, 특정 쿼리 프레디킷을 사용해 프로젝션 파트에서 데이터를 읽고 비트맵을 생성하여 PREWHERE 단계에서 행을 효율적으로 필터링할 수 있습니다. 이는 #80343에 이어 프로젝션 인덱스를 구현하는 세 번째 단계입니다. #81021 (Amos Bird).- 드물게 사용되는 Aarch64 시스템 및 기타 아키텍처/커널 조합에서의 VDSO를 수정했습니다. #86096 (Tomas Hulata).
- 코드를 단순화하고 선택 알고리즘을 조정하여 LZ4 디컴프레션 속도를 개선합니다. #88360 (Raúl Marín).
- S3는 내부적으로 키 이름 접두사를 기준으로 객체를 파티션하며, 파티션당 높은 요청률을 자동으로 처리할 수 있도록 확장됩니다. 이 변경 사항은 두 가지 새로운 BACKUP 설정인
data_file_name_generator와data_file_name_prefix_length를 도입합니다.data_file_name_generator=checksum인 경우, 백업 데이터 파일 이름은 내용의 해시를 사용해 생성됩니다. 예를 들어 checksum =abcd1234ef567890abcd1234ef567890이고data_file_name_prefix_length = 3인 경우, 결과 경로는abc/d1234ef567890abcd1234ef567890가 됩니다. 이와 같은 키 분포는 S3 파티션 전반에 걸친 부하 분산을 향상시키고, 요청 제한(throttling) 발생 위험을 줄여 줍니다. #88418 (Julia Kartseva). - 딕셔너리 블록을 캐시하고 토큰 조회에 이진 검색 대신 해시 테이블을 사용하여 텍스트 인덱스의 성능을 개선했습니다. #88786 (Elmi Ahmadov).
- 쿼리가 이제
optimize_read_in_order와query_plan_optimize_lazy_materialization의 이점을 동시에 활용할 수 있게 되었습니다. #88767 문제를 해결합니다. #88866 (Manuel). DISTINCT를 사용하는 쿼리에 집계 프로젝션을 사용합니다. #86925를 해결합니다. #88894 (Nihal Z. Miaji).- 연속 실행 시 성능 향상을 위해 posting list를 캐시하도록 했습니다. #88912 (Elmi Ahmadov).
- 입력 정렬 순서가 LIMIT BY 키와 일치하는 경우 스트리밍 LIMIT BY 변환이 실행되도록 변경되었습니다. #88969 (Eduard Karacharov).
- 특정 경우
ANY LEFT JOIN또는ANY RIGHT JOIN을ALL INNER JOIN으로 다시 작성할 수 있도록 허용합니다. #89403 (Dmitry Novik). - 로그 오버헤드를 줄이기 위해 항목당 사용하는 원자 연산 수를 줄였습니다. #89651 (Sergei Trifonov).
- 쿼리에서 런타임 필터가 활성화되어 있고 여러 개의 조인과 여러 개의 런타임 필터가 추가되는 경우, 새로 추가된 필터 단계를 다른 단계보다 우선적으로 푸시다운하도록 구현했습니다. #89725 (Alexander Gololobov).
- 해시 테이블 병합 시 발생하는 오버헤드를 줄여 일부
uniqExact연산 속도를 소폭 향상했습니다. #89727 (Raúl Marín). - lazy materialization에서 처리하는 행 수 제한을 10개에서 100개로 늘렸습니다. #89772 (Alexey Milovidov).
- 기본값으로
allow_special_serialization_kinds_in_output_formats설정을 활성화합니다. 이를 통해 메모리 사용량이 감소하고, 일부 행 기반 출력 포맷에서 희소/복제된 컬럼 출력의 쿼리 실행 속도가 향상됩니다. #89402 (Pavel Kruglov). ALTER TABLE ... FREEZE쿼리에 대한 병렬 실행을 추가했습니다. #71743 (Kirill).- bcrypt 인증용 캐시를 추가했습니다. #87115 (Nikolay Degterinsky).
FINAL이 지정된 쿼리에서 사용되는 스킵 인덱스가 기본 키의 일부인 컬럼에 적용되어 있는 경우, 다른 파트에서 기본 키의 교집합을 확인하는 추가 단계는 불필요하므로 이제 수행되지 않습니다. #85897를 해결합니다. #88368 (Shankar Iyer).- 최적화 옵션
enable_lazy_columns_replication이 이제 기본적으로 활성화되어 조인에서 메모리 사용량을 줄입니다. #89316 (Alexey Milovidov). - 파트를 위한
ColumnsDescription의 테이블별 캐시를 도입하여 테이블에 파트와 컬럼이 매우 많을 때 메모리 사용량을 줄입니다. #89352 (Azat Khuzhin). - 텍스트 인덱스의 역직렬화된 헤더에 대한 캐시를 도입하여 I/O를 줄이고 쿼리 성능을 향상했습니다. 캐시는 새로운 서버 설정을 통해 구성할 수 있습니다: -
text_index_header_cache_policy-text_index_header_cache_size-text_index_header_cache_max_entries-text_index_header_cache_size_ratio. #89513 (Elmi Ahmadov).
개선 사항
use_variant_as_common_type가 설정된 경우, 필요하면 UNION이 타입을Variant로 통일하도록 합니다. #82772 이슈를 해결합니다. #83246 (Mithun p).- SQL에서 정의한 역할(Role)을 이제
users.xml에 정의한 사용자에게 부여할 수 있습니다. #88139 (c-end). - 사전, 갱신 가능 구체화 뷰 등에서 내부적으로 실행되는 쿼리를 기록하고,
system.query_log에 새로운is_internal컬럼을 추가합니다. #83277 (Miсhael Stetsyuk). - 향상된
IS NOT DISTINCT FROM(<=>) 연산자: 역 연산인IS DISTINCT FROM도 지원하고, 서로 다른 타입의 숫자 피연산자(예:Nullable(UInt32)와Nullable(Int64))를 상호 호환되도록 지원합니다. #86763을(를) 해결했습니다. #87581 (yanglongwei). - 대화형 모드에서는
clickhouse-client및clickhouse-local이(가) 커서가 위치한 현재 식별자와 동일한 이름을 가진 명령줄의 식별자를 강조 표시합니다. #89689 (Alexey Milovidov). - 이제 출력 형식과 관련된 설정은 쿼리 캐시에 영향을 주지 않습니다. 또한 쿼리 캐시는
http_response_headers설정을 무시합니다. 이는 Web UI에서 캐시된 결과를 다운로드하는 등의 기능을 구현할 수 있도록 하기 위해서입니다. #89756 (Alexey Milovidov). - HTTP 인터페이스에서 쿼리 결과 캐시가 사용될 때
Age및Expires헤더를 제공합니다.Age헤더의 존재 여부로 결과가 캐시에서 반환되었는지 알 수 있으며,Expires헤더는 최초 기록 시에 설정됩니다. 새로운 프로파일 이벤트를 도입합니다:QueryCacheAgeSeconds,QueryCacheReadRows,QueryCacheReadBytes,QueryCacheWrittenRows,QueryCacheWrittenBytes. #89759 (Alexey Milovidov). disable_insertion_and_mutation이 활성화되어 있는 경우(즉, ClickHouse Cloud에서 읽기 전용 웨어하우스인 경우)에도 remote 및 데이터 레이크 테이블에 대한 INSERT를 허용하도록 했습니다. #88549 (Alexander Tokmakov).SYSTEM DROP TEXT INDEX CACHES쿼리를 추가했습니다. #90287 (Anton Popov).- 더 나은 일관성 보장을 위해 기본적으로
enable_shared_storage_snapshot_in_query를 활성화하도록 했습니다. 눈에 띄는 단점은 없습니다. #82634 (Alexey Milovidov). - 프로파일 이벤트를 사용하지 않을 때 클라이언트가 네트워크 트래픽을 줄일 수 있도록 하는
send_profile_events설정을 추가했습니다. #89588 (Kaviraj Kanagaraj). - 쿼리 단위로 인접 세그먼트의 백그라운드 다운로드를 비활성화할 수 있도록 했습니다. #89524를 수정합니다. #89668 (tanner-bruce).
- 복제된 MergeTree 테이블에서 디스크가 손상된 경우에도
FETCH PARTITION을 허용하도록 했습니다. #58663 (Duc Canh Le). - MySQL 데이터베이스 엔진에서 MySQL 테이블 스키마를 가져올 때 발생하던 처리되지 않은 예외를 수정했습니다. #69358 (Duc Canh Le).
- 모든 DDL
ON CLUSTER쿼리는 이제 접근 권한 검증을 개선하기 위해 원래 쿼리를 실행한 사용자 컨텍스트로 실행됩니다. #71334 (pufit). - 논리 타입
UUID를 가진FixedString(16)으로 표현된 경우Parquet에서UUID를 지원하도록 했습니다. #74484 (alekseev-maksim). - 기본 설정으로 서버가 아닌 바이너리에서는 ThreadFuzzer를 비활성화합니다. #89115 (Raúl Marín).
- 상관 서브쿼리의 입력 서브플랜에서도 쿼리 플랜 최적화를 적용할 수 있도록, 구체화 시점을 늦춥니다. #79890의 일부입니다. #85455 (Dmitry Novik).
- clickhouse-client에서
SELECT를 포함하는CREATE OR REPLACE TABLE쿼리에 대해 진행률 표시줄, 로그 및 성능 통계를 확인할 수 있습니다.SELECT가 상당한 시간이 걸리더라도 이제 이 쿼리로 인해 더 이상 타임아웃이 발생하지 않습니다. #38416을(를) 해결합니다. #87247 (Diskein). - 해시 함수에서
JSON및Dynamic타입을 지원합니다. #87734 이슈를 해결했습니다. #87791 (Pavel Kruglov). - ArrowFlight 서버의 누락된 부분을 구현했습니다. #88013 (Vitaly Baranov).
- 서버와 Keeper에 여러 히스토그램 메트릭을 추가하여 Keeper 요청 실행 단계의 소요 시간을 계측하도록 했습니다. 다음 메트릭이 서버에 추가되었습니다:
keeper_client_queue_duration_milliseconds,keeper_client_send_duration_milliseconds,keeper_client_roundtrip_duration_milliseconds. 다음 메트릭이 Keeper에 추가되었습니다:keeper_server_preprocess_request_duration_milliseconds,keeper_server_process_request_duration_milliseconds,keeper_server_queue_duration_milliseconds,keeper_server_send_duration_milliseconds. #88158 (Miсhael Stetsyuk). EXPLAIN쿼리에input_headers옵션을 추가하여 각 단계에 입력 헤더를 포함합니다. #88311 (János Benjamin Antal).- throttler에 의해 지연된 S3 및 AzureBlobStorage 요청 수를 집계하는 프로파일 이벤트(profile event)를 추가합니다. 디스크 관련 및 비디스크 관련 ThrottlerCount 프로파일 이벤트 간의 불일치를 수정합니다. 이제 AzureBlobStorage HTTP DELETE 요청에는 throttling이 적용되지 않습니다. #88535 (Sergei Trifonov).
- 테이블 수준 통계를 캐시에 저장하고, 두 가지 설정을 추가합니다. MergeTree 설정
refresh_statistics_interval은 통계 캐시를 새로 고치는 간격을 의미하며, 0으로 설정하면 캐시가 생성되지 않습니다. 세션 설정use_statistics_cache는 쿼리에서 테이블 수준 통계를 사용할지 여부를 의미합니다. 더 나은 통계가 필요한 경우 이 캐시를 무시하도록 설정할 수 있습니다. #88670 (Han Fei). Array및Map의 바이너리 역직렬화에서 크기 제한을 검증할 때max_binary_string_size대신max_binary_array_size설정을 사용하도록 수정했습니다. 이를 통해RowBinary포맷을 읽을 때 적절한 제한이 적용되도록 합니다. #88744 (Raufs Dunamalijevs).LockGuardWithStopWatch클래스를 도입하고 머지 실행을 위한 백그라운드 풀에서 이를 사용했습니다. mutex가 1초 이상 유지되었거나 어떤 스레드가 1초 이내에 mutex를 획득하지 못해 지연되는 경우 경고 메시지가 출력되도록 했습니다.MergeMutateSelectedEntry소멸자(destructor)에 있던 비용이 큰 코드를finalize메서드로 옮겨,MergeTreeBackgroundexecutor에서 락을 지나치게 오래 잡지 않도록 했습니다. #88898 (Nikita Mikhaylov).- 엔드포인트에 리전이 명시되지 않은 경우 S3 사용 시 opt-in AWS 리전을 자동으로 사용하도록 합니다. 참고: opt-in AWS regions. #88930 (Andrey Zvonov).
- 이제 pager 실행 중에도 Ctrl-C를 눌러 clickhouse-client에서 쿼리를 취소할 수 있습니다. 이 변경으로 #80778 이슈가 해결되었습니다. #88935 (Grigorii).
- Web UI는 값이 음수인 경우에도 테이블에 막대를 표시합니다. 이에 따라 음수와 양수 영역에 서로 다른 색상의 막대를 사용하는 양방향 막대 차트를 표시할 수 있습니다. #89016 (Alexey Milovidov).
shared_merge_tree_create_per_replica_metadata_nodes를 비활성화하여 Keeper에SharedMergeTree가 저장하는 메타데이터 양을 줄입니다. #89036 (Alexander Tokmakov).S3Queue가disable_insertion_and_mutation서버 SETTING을 준수하도록 수정했습니다. #89048 (Raúl Marín).- 25.6에서 기본
s3_retry_attempts값을 500으로 설정하여, S3 재파티셔닝으로 인해 S3가 10분 넘게 「SlowDown」 오류를 반환하는 경우에도 백업이 성공하도록 했습니다. #89051 (Nikita Mikhaylov). kafka_compression_codec및kafka_compression_level설정을 이제 두 Kafka 엔진 모두에서 Kafka 프로듀서의 압축을 지정하는 데 사용할 수 있게 되었습니다. #89073 (János Benjamin Antal).system.columns에statistics라는 새 컬럼을 추가하여 이 테이블에 대해 생성된 통계 유형을 나타냅니다. 통계 유형이 자동으로 생성된 경우 접미사로 (auto)가 표시됩니다. #89086 (Han Fei).*Cluster테이블 함수에 클러스터 이름 대신 일반 확장(generic expansion)이 전달된 경우 표시되는 오류 메시지를 개선했습니다. #89093 (Konstantin Bogdanov).- YTsaurus:
replicated_table을 데이터 소스로 사용할 수 있게 했습니다. #89107 (MikhailBurdukov). - CLI에서 공백 문자로 시작하는 쿼리는 더 이상 명령 기록에 저장되지 않습니다. #89116 (Konstantin Bogdanov).
hasAnyTokens및hasAllTokensFUNCTION에서 Array of String 입력을 지원합니다. #89124 (Elmi Ahmadov).- plain-rewritable 디스크가 메타데이터를 메모리에 저장하는 방식을 변경하여 디렉터리 중첩 및 그와 관련된 여러 버그를 해결합니다. #89125 (Mikhail Artemenko).
- Iceberg 테이블에 대해 쿼리를 실행할 때
IN표현식에 사용되는 서브쿼리는 파티션 프루닝 분석 전에 올바르게 사전 계산됩니다. #89177 (Daniil Ivanik). create_table_empty_primary_key_by_default가 기본적으로 활성화되도록 했습니다. 이는 사용성을 개선합니다. #89333 (Alexey Milovidov).SHOW CREATE DATABASE를 실행하거나system.databases에서engine_full을 쿼리할 때 잘못된 쿼리가 생성될 수 있던Backup데이터베이스 엔진의 잘못된 코드를 수정합니다. #89477을(를) 해결합니다. #89341 (Alexey Milovidov).- 이전 버전에서는 CREATE TABLE 쿼리에서 테이블 엔진을 지정하지 않으면 설정
create_table_empty_primary_key_by_default이 적용되지 않았습니다. #89342 (Alexey Milovidov). chdig를 v25.11.1로 업데이트합니다 - 로깅 기능에 대한 주요 개선 사항과 기타 다양한 향상이 포함됩니다(25.11 릴리스 노트). #89957 (Azat Khuzhin). (25.10 릴리스 노트). #89452 (Azat Khuzhin).- Web UI의 쿼리 텍스트 영역 리사이저를 전체 너비로 확장하여 사용 편의성을 약간 개선했습니다. 또한 브라우저 기본 리사이저는 iPad의 Safari에서는 사용할 수 없었는데, 이 변경 후에는 그 방법을 알고 있다면 최소한 텍스트 영역의 하단을 드래그해 크기를 조정할 수 있습니다. #89457 (Alexey Milovidov).
- 해시 조인 결과 생성 시 메모리 사용량 추적이 개선되었습니다. 이전에는 조인 결과를 생성하는 동안 발생하는 임시 메모리 할당이 제대로 추적되지 않아 메모리 제한을 초과할 수 있었습니다. #89560 (Azat Khuzhin).
- 비동기 서버 로그: 플러시를 더 이른 시점에 수행하고 기본 큐 크기를 늘렸습니다. #89597 (Raúl Marín).
system.asynchronous_metrics에서 잘못된FilesystemCacheBytes(및 기타 값)을 수정했습니다. 파일 시스템 캐시에 대해서는SYSTEM쿼리를 한 번만 실행하도록 했습니다. 캐시용 원자적 뷰를 제공하여system.filesystem_caches의 동일한 경로를 가리키도록 했습니다. #89640 (Azat Khuzhin).system.view_refreshes의 일부 컬럼 설명을 보다 명확하게 다듬었습니다. #89701 (Tuan Pham Anh).- STS 엔드포인트와 상호 작용할 때 S3 자격 증명을 캐시하여 서로 다른 함수 호출에서도 재사용할 수 있습니다. 캐시되는 자격 증명의 개수는
s3_credentials_provider_max_cache_size로 제어할 수 있습니다. #89734 (Antonio Andelic). - 여러 개의 expression 단계가 그 아래에 있을 때 runtime filter pushdown이 올바르게 동작하도록 수정했습니다. #89741 (Alexander Gololobov).
- 시스템 메모리가 5GB 미만인 경우, 기본적으로 실행 파일에
mlock을 적용하지 않습니다. #89751 (Alexey Milovidov). - Web UI의 타입 힌트가 더 이상 테이블 헤더 영역으로 넘어가서 표시되지 않습니다. 또한 툴팁 표시 문제를 수정하여, 이제 툴팁이 테이블 헤더 뒤에 가려지지 않습니다. #89753 (Alexey Milovidov).
- Web UI에서 테이블 속성을 표시합니다. 행 수 또는 바이트 수를 클릭하면
system.tables에서 가져온 쿼리가 표시됩니다. 테이블 엔진을 클릭하면SHOW TABLES가 표시됩니다. #89771 (Alexey Milovidov). - append 방식 쓰기를 지원하지 않는 디스크를 사용하는 테이블에 대해
non_replicated_deduplication_window를 지원합니다. #87281 이슈를 해결합니다. #89796 (Tuan Pham Anh). SYSTEM FLUSH ASYNC INSERT QUEUE명령에서 플러시할 테이블 목록을 설정할 수 있도록 했습니다. #89915 (Sema Checherinda).- 중복 제거 블록 ID를
system.part_log에 저장하도록 했습니다. #89928 (Sema Checherinda). - 파일 시스템 캐시 설정
keep_free_space_remove_batch의 기본값을 10에서 100으로 변경했습니다. 이는 더 최적인 값이기 때문입니다. #90030 (Kseniia Sumarokova). - TTL DROP 머지 타입을 도입하고, 이 타입의 머지 이후에는 다음 delete TTL 머지 일정은 업데이트하지 않도록 했습니다. #90077 (Mikhail Artemenko).
- S3Queue 정리 시 RemoveRecursive Keeper 요청에 더 낮은 노드 제한을 사용합니다. #90201 (Antonio Andelic).
- 로그가 비어 있는 경우에도
SYSTEM FLUSH LOGS쿼리가 테이블 생성이 완료될 때까지 대기하도록 했습니다. #89408 (János Benjamin Antal). - 분산 병합 집계에 여러 원격 세그먼트가 참여하거나 서브쿼리의 IN 조건이 있는 경우 잘못 보고되던
rows_before_limit_at_least값을 수정했습니다. 이로써 #63280 이슈를 해결했습니다. #63511 (Amos Bird). INSERT INTO ... SELECT쿼리 실행 후0 rows in set이 표시되던 문제를 수정했습니다. #47800 이슈를 닫았습니다. #79462 (Engel Danila).
버그 수정(공식 안정 버전에서 사용자에게 노출되는 오동작)
- 상수 인자 및 단락 평가를 사용하는
multiIf를 수정합니다. #72714 이슈를 해결합니다. #84546 (Yakov Olkhovskiy). - 서브쿼리를 사용하는 CONSTRAINT가 있는 테이블에서 쿼리를 실행할 때 발생하는 논리 오류를 수정합니다. #84190를 해결합니다. #85575 (Pervakov Grigorii).
- 물음표가 포함된 URI를 사용하는 특정 쿼리에서 발생하던 버그를 수정했습니다. #85663 (Yarik Briukhovetskyi).
EXPLAIN indexes = 1출력에서 컬럼이 간헐적으로 누락되던 문제를 수정했습니다. #86696을(를) 해결했습니다. #87083 (Michael Kolupaev).Cannot add subcolumn with parallel replicas오류가 발생할 수 있는 문제를 수정했습니다. #84888을(를) 해결했습니다. #87514 (Pavel Kruglov).- parquet writer에서
created_by문자열을 올바른 형식으로 기록하도록 했습니다. 예를 들면ClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f)처럼 기록하며, 기존의ClickHouse v25.9.1.1-testing형식은 사용하지 않습니다. 또한 예전 parquet-mr로 생성된 잘못된 파일과의 parquet reader 호환성을 수정했습니다. #87735 (Michael Kolupaev). cramersV,cramersVBiasCorrected,theilsU,contingency에서 phi-squared 계산으로 인해 잘못된 결과가 발생하던 문제를 수정했습니다. #87831 (Nihal Z. Miaji).- JSON에서 Float와 Bool 타입이 섞인 배열을 읽는 기능을 수정합니다. 이전에는 이러한 데이터를 삽입하면 예외가 발생했습니다. #88008 (Pavel Kruglov).
TCPHandler에서QueryState에shared_ptr을 사용하여,setProgressCallback,setFileProgressCallback,setBlockMarshallingCallback에서 상태가 더 이상 유효하지 않은 경우를 감지할 수 있도록 했습니다. #88201 (Tuan Pham Anh).query_plan_optimize_join_order_limit> 1인 경우 CROSS JOIN 재정렬 시 발생하던 논리적 오류를 수정하여 이슈 #89409를 종료했습니다. #88286 (Vladimir Cherkasov).- #88426을(를) 수정합니다. 1. Alias에서 명시적인 컬럼 정의를 허용하지 않고, 대상 테이블에서 컬럼을 자동으로 불러오도록 합니다. 이를 통해 Alias는 항상 대상 테이블의 스키마와 일치합니다. 2. IStorage로부터 더 많은 메서드를 프록시합니다. #88552 (Kai Zhu).
- 복구 후 Replicated 데이터베이스 레플리카가 오랜 시간 동안
Failed to marked query-0004647339 as finished (finished=No node, synced=No node)와 같은 메시지를 출력하면서 멈춰 있을 수 있었던 문제가 수정되었습니다. #88671 (Alexander Tokmakov). - 서브쿼리 사용 시 새 analyzer에서 발생할 수 있는 「Context has expired」 오류를 수정했습니다. #88694 (Azat Khuzhin).
input_format_parquet_local_file_min_bytes_for_seek가 0으로 설정된 경우 Parquet reader에서 발생하던 세그멘테이션 폴트(segmentation fault) 문제를 수정했습니다. #78456를 해결했습니다. #88784 (Animesh).- PK가 내림차순인 경우 min(PK)/max(PK) 결과가 잘못 계산되던 문제를 수정합니다. 이를 통해 #83619 이슈가 해결됩니다. #88796 (Amos Bird).
- 내부 테이블을 DROP할 때
max_table_size_to_drop및max_partition_size_to_drop설정을 통한 크기 제한이 적용(전파)되도록 수정합니다. #88812 (Nikolay Degterinsky). top_k가 단일 인자로 호출될 때 threshold 매개변수가 적용되도록 수정했습니다. #88757를 해결합니다. #88867 (Manuel).- SSL 연결이 필요한 ArrowFlight 엔드포인트 소스(AWS ALB 뒤에 있는 경우 등)에서도 이제 특정 데이터 세트(dataset)를 정확하게 요청할 수 있습니다. #88868 (alex-shchetkov).
- 구체화되지 않은 Nested(Tuple(...)) (ALTER를 통해 추가된 경우) 처리 방식을 수정했습니다. 이로써 #83133이(가) 해결되었습니다. #88879 (Azat Khuzhin).
reverseUTF8FUNCTION의 버그를 수정했습니다. 이전 버전에서는 길이가 4바이트인 UTF-8 코드 포인트의 바이트를 잘못 뒤집었습니다. #88913을(를) 해결했습니다. #88914 (Alexey Milovidov).icebergS3Cluster프로토콜을 수정했습니다.iceberg클러스터 함수에서 스키마 진화(schema evolution), 위치 기반 삭제(positional deletes), 동등 비교 삭제(equality deletes)를 지원합니다. #88287을(를) 해결했습니다. #88919 (Yang Jiang).- 분산 테이블에 대한 병렬 레플리카 쿼리에서는
parallel_replicas_support_projection을 비활성화합니다. #88899 이슈를 해결합니다. #88922 (zoomxi). - 내부 캐스트 시 컨텍스트를 전파하도록 수정했습니다. 캐스트 설정이 전파되지 않던 여러 문제를 해결했습니다. #88873을(를) 해결했습니다. #78025을(를) 해결했습니다. #88929 (Manuel).
file()FUNCTION에서 glob 패턴으로부터 파일 형식을 가져오는 동작을 수정합니다. #88920를 해결합니다. #88947 (Vitaly Baranov).- SQL SECURITY DEFINER를 사용해 뷰를 생성할 때
SET DEFINER <current_user>:definer에 대한 접근 권한을 검사하지 않습니다. #88968 (pufit). - 부분
QBit읽기에 대한 최적화 과정에서p가Nullable일 때 반환 타입에서Nullable이 잘못 제거되어L2DistanceTransposed(vec1, vec2, p)에서 발생하던LOGICAL_ERROR를 수정했습니다. #88974 (Raufs Dunamalijevs). - 알 수 없는 카탈로그 유형으로 인해 발생하던 크래시를 수정합니다. #88819를 해결합니다. #88987 (scanhex12).
- 이 변경으로 #88081 이슈가 종료됩니다. #88988 (scanhex12).
- 스키핑 인덱스 분석 시 발생하던 성능 저하를 수정했습니다. #89004 (Anton Popov).
- 존재하지 않는 역할(role)이 부여된 사용자로
clusterAllReplicas를 실행할 때 발생하는ACCESS_ENTITY_NOT_FOUND오류를 수정했습니다. #87670 이슈를 해결했습니다. #89068 (pufit). - CHECK 제약조건에 의한 희소 컬럼 처리 방식을 수정합니다. #88637을(를) 닫습니다. #89076 (Eduard Karacharov).
- MergeTreeReaderTextIndex에서 가상 컬럼을 채우는 과정에서 행 수를 잘못 계산해 LOGICAL_ERROR로 크래시가 발생하던 문제를 수정했습니다. #89095 (Peng Jian).
- 머지 준비 과정에서 예외가 발생할 때 TTL 머지 카운터가 누수되지 않도록 했습니다. #89019를 해결합니다. #89127 (save-my-heart).
- base32/base58 인코딩 및 디코딩 연산에 필요한 버퍼 크기 계산을 수정했습니다. #89133 (Antonio Andelic).
- shutdown과 백그라운드
INSERT간의 경쟁 조건으로 인해 Distributed 엔진에서 발생하던 use-after-free 버그를 수정합니다. #88640을(를) 해결합니다. #89136 (Azat Khuzhin). - Parquet를 파싱하는 동안 가변 예외로 인해 발생할 수 있는 데이터 레이스를 방지합니다. #88385를 해결합니다. #89174 (Azat Khuzhin).
- 갱신 가능 구체화 뷰: 갱신 중에 소스 테이블이 완전히 삭제된 경우 드물게 발생하던 서버 크래시 문제를 수정했습니다. #89203 (Michael Kolupaev).
- HTTP 인터페이스에서 압축 스트림 중간에 오류를 전송할 때 버퍼를 플러시합니다. #89256 (Alexander Tokmakov).
- 쿼리 마스킹 규칙이 DDL SQL 문에 잘못 적용되는 것을 방지합니다. #89272 (MikhailBurdukov).
- MergeTreeReaderTextIndex에서 가상 컬럼을 채우는 과정에서 잘못된 행 수를 계산하여 LOGICAL_ERROR와 함께 충돌이 발생하던 문제를 수정했습니다. #89095를 다시 열었습니다. #89303 (Jimmy Aguilar Mena).
- Statistics countmin이 LowCardinality(널 허용(String))의 estimate 데이터 타입을 지원하지 않아 LOGICAL_ERROR가 발생하던 문제를 수정합니다. #89343 (Han Fei).
IN함수에서 기본 키 컬럼 타입이IN함수 오른쪽의 컬럼 타입과 다를 때 크래시 또는 정의되지 않은 동작이 발생할 수 있습니다. 예: SELECT string_column, int_column FROM test_table WHERE (string_column, int_column) IN (SELECT '5', 'not a number'). 많은 행이 선택되고, 서로 호환되지 않는 타입을 가진 행이 포함된 경우에 발생합니다. #89367 (Ilya Golshtein).countIf(*)의 인자가 잘려나가던 문제를 수정합니다. #89372를 해결합니다. #89373 (Manuel).- 뮤테이션 통계용 비압축 체크섬이 손실되지 않도록 수정했습니다. #89381 (Azat Khuzhin).
p가LowCardinality(Nullable(T))일 때, 부분 QBit 읽기 최적화 과정에서 반환 타입에서 널 허용을 잘못 제거하던L2DistanceTransposed(vec1, vec2, p)의LOGICAL_ERROR를 수정합니다. #88362를 해결합니다. #89397 (Raufs Dunamalijevs).- 이전 ClickHouse 버전에서 저장된 튜플 자체에 잘못된 희소 직렬화가 사용된 테이블을 로드할 때 발생하던 문제를 수정했습니다. #89405 (Azat Khuzhin).
deduplicate_merge_projection_mode='ignore'를 사용할 때, 비어 있지 않은 프로젝션을 가진, TTL에 의해 비워진 파트의 병합을 잘못 처리하던 문제를 수정했습니다. #89430을(를) 해결했습니다. #89458 (Amos Bird).- 중복 컬럼이 있는
full_sorting_merge조인에서의 논리 오류를 수정했습니다. #86957를 해결합니다. #89495 (Vladimir Cherkasov). - 로테이션 중에 changelog가 올바르게 이름 변경되지 않은 경우 Keeper 시작 시 changelog를 읽는 방식을 수정했습니다. #89496 (Antonio Andelic).
- 우측 테이블의 키가 고유할 때 OR 조건과 함께 JOIN을 사용할 경우 잘못된 결과가 반환되던 문제를 수정했습니다. #89391 이슈를 해결합니다. #89512 (Vladimir Cherkasov).
- analyzer와 PK IN (subquery) 사용 시 발생할 수 있는 「Context has expired」 오류를 수정했습니다 (v2). #89433를 해결합니다. #89527 (Azat Khuzhin).
- 대문자로 된 컬럼 이름이 설정된 테이블에서 MaterializedPostgreSQL 복제가 제대로 동작하지 않던 문제를 수정합니다. #72363을(를) 해결합니다. #89530 (Danylo Osipchuk).
- 집계 함수 상태에
LowCardinality(String)컬럼의 직렬화된 값이 포함되어 있을 때 발생하던 크래시를 수정했습니다. #89550 (Pavel Kruglov). enable_lazy_columns_replication설정이 활성화된 상태에서 JOIN의 오른쪽에서ARRAY JOIN을 사용할 때 발생하던 크래시를 수정했습니다. #89551 (Pavel Kruglov).- query_plan_convert_join_to_in의 논리 오류를 수정합니다. #89066을(를) 해결합니다. #89554 (Vladimir Cherkasov).
- 서로 호환되지 않아 변환할 수 없는 컬럼 타입과 상수 타입이 섞인 조건을 추정하는 과정에서
STATISTICS추정기에서 발생하던 예외를 수정했습니다. #89596 (Han Fei). - 지원되는 조인 알고리즘(예: 해시 조인)에 대해서만 런타임 필터를 추가합니다. 필터는 조인 알고리즘이 먼저 오른쪽 측을 완전히 읽은 뒤 왼쪽 측을 읽는 경우에만 생성할 수 있지만, 예를 들어 FullSortingMergeJoin은 양쪽을 동시에 읽습니다. #89220를 수정합니다. #89652 (Alexander Gololobov).
sparseGramstokenizer와 함께hasAnyTokens,hasAllTokens,tokens함수가 동시 실행될 때의 동작을 수정했습니다. #89605 문제를 해결합니다. #89665 (Elmi Ahmadov).- 일부 상황에서 join runtime filter로 인해 발생하던 논리 오류나 크래시를 수정합니다. #89062를 해결합니다. #89666 (Alexander Gololobov).
enable_lazy_columns_replication이 활성화된 상태에서 맵 컬럼에 대한 ARRAY JOIN 수행 중 발생할 수 있는 논리 오류를 수정합니다. #89705를 종료합니다. #89717 (Pavel Kruglov).- 취소 처리 중 원격 쿼리에서 연결이 끊어진 뒤에도 원격 서버로부터 데이터를 읽으려 할 때 발생할 수 있는 크래시를 방지합니다. #89468를 해결합니다. #89740 (Azat Khuzhin).
- PROJECTION 인덱스 읽기 경로에서 발생하는 레이스 컨디션을 수정합니다. #89497을 해결합니다. #89762 (Peng Jian).
- PROJECTION 인덱스 읽기 중 경쟁 상태를 일으킬 수 있던 버그를 수정합니다. #89497을(를) 해결합니다. #89775 (Amos Bird).
- 파티션이 없는 테이블에 대한 Paimon 테이블 FUNCTION 처리 문제를 수정하여 #89690을(를) 해결했습니다. #89793 (JIaQi).
- 고급 JSON 공유 데이터 직렬화에서 경로 및 해당 하위 컬럼을 읽을 때 발생할 수 있던 잠재적 논리 오류를 수정합니다. #89805 이슈를 해결합니다. #89819 (Pavel Kruglov).
- 데이터 타입의 바이너리 역직렬화 과정에서 발생할 수 있는 스택 오버플로를 수정합니다. #88710을(를) 해결합니다. #89822 (Pavel Kruglov).
INFUNCTION에서 빈 튜플 사용 시 발생하는 논리 오류를 수정합니다. #88343을(를) 종료합니다. #89850 (Nihal Z. Miaji).- 호환성을 위해 이전 analyzer에서
optimize_injective_functions_in_group_by설정값과 상관없이GROUP BY에서 injective 함수들을 제거하도록 변경했습니다. #89854를 해결합니다. #89870 (Raufs Dunamalijevs). - 예를 들어 메모리 제한으로 인해 머지가 중단된 경우, merge mutate 백그라운드 실행기는 락 없이 머지 태스크에 대해
cancel을 호출하지만, 이 경우 부분적으로 생성된 결과 파트는 제거되지 않습니다(아직 완료되지 않았고 이 단계에서는 보이지 않았기 때문입니다). 그 이후 머지 태스크가 소멸되며, 이로 인해 결과 파트의 소멸이 트리거됩니다. 이는 디스크 트랜잭션을 롤백하고 S3에서 데이터를 제거하게 합니다. 최종적으로 이 가비지 정리 작업은 merge mutate 백그라운드 실행기의 락 하에서 실행되었습니다. #89875 (Mikhail Artemenko). reverse및CASTFUNCTION에서 빈 튜플 처리와 관련된 논리 오류를 수정했습니다. #89137을 종료했습니다. #89908 (Nihal Z. Miaji).- 이제 ClickHouse에서는
SHOW DATABASES쿼리를 실행하면 기본적으로 데이터 레이크 카탈로그 데이터베이스가 표시됩니다. #89914 (alesapin). - 백업 시 GCS native copy를 사용하도록 수정했습니다. 잘못된 클라이언트 복제 로직 때문에 GCS native copy가 항상 실패하여, 데이터를 수동으로 읽고 쓰는 덜 효율적인 방식이 사용되었습니다. #89923 (Antonio Andelic).
- base32Encode에 대한 버퍼 크기 계산을 수정합니다. 길이가 5보다 작은 문자열 컬럼에 대해 base32Encode를 수행할 경우 충돌이 발생할 수 있었습니다. #89911 문제를 해결합니다. #89929 (Antonio Andelic).
SHOW COLUMNS및SHOW FUNCTIONS쿼리에서 잘못된 이스케이프를 수정합니다. #89942 (alesapin).- MongoDB 엔진에서 사용자 이름에 '@' 문자가 포함된 경우 URL 검증이 올바르게 이루어지도록 수정했습니다. 이전에는 '@'가 포함된 사용자 이름이 잘못된 인코딩 처리로 인해 오류를 발생시켰습니다. #89970 (Kai Zhu).
- #90592에 백포트되었습니다:
IN내부에ARRAY JOIN이 있고enable_lazy_columns_replication설정이 활성화된 상태에서 원격 쿼리를 실행할 때 발생할 수 있었던 크래시를 수정합니다. #90361을(를) 해결합니다. #89997 (Pavel Kruglov). - #90448에 백포트되었습니다: 일부 경우 텍스트 형식에서
String값으로부터 잘못된DateTime64값을 추론하던 문제를 수정했습니다. #89368를 해결합니다. #90013 (Pavel Kruglov). BSONEachRow와MsgPack에서 비어 있는 튜플 컬럼으로 인해 발생했던 논리 오류를 수정합니다. #89814을(를) 해결합니다. #71536을(를) 해결합니다. #90018 (Nihal Z. Miaji).- #90457에 백포트됨: 집계 상태 및 기타 소스에서 데이터를 역직렬화할 때 크기 검사를 수행합니다. #90031 (Raúl Marín).
- 중복된 컬럼이 있는 JOIN에서 'Invalid number of rows in Chunk' 오류가 발생할 수 있는 문제를 수정합니다. #89411를 해결합니다. #90053 (Vladimir Cherkasov).
- #90588에 백포트됨:
ARRAY JOIN을 사용한 삽입 시,enable_lazy_columns_replication설정이 활성화되어 있을 때 발생할 수 있는Column with Array type is not represented by ColumnArray column: Replicated오류를 수정했습니다. #90066 (Pavel Kruglov). - user_files에서 점(.)으로 시작하는 파일을 허용합니다. #89662를 해결합니다. #90079 (Raúl Marín).
- #90647에서 백포트됨: 큰 step 값을 사용할 때
numbers시스템 테이블에서 발생하던 논리적 오류와 나머지(modulo) 버그를 수정합니다. #83398를 종료합니다. #90123 (Nihal Z. Miaji). - 딕셔너리 인자 파싱 시 발생하는 정수 오버플로를 수정합니다. #78506 이슈를 해결합니다. #90171 (Raúl Marín).
- #90468에 백포트되었습니다: Hive 파티셔닝 호환성 문제로 인해 25.8로의 원활한 업그레이드가 불가능했던 문제를 수정했습니다(업그레이드 중 발생하던
All hive partitioning columns must be present in the schema오류 수정). #90202 (Kseniia Sumarokova). - 쿼리 조건 캐시가 활성화된
SELECT쿼리에서 경량 업데이트(lightweight update) 이후 잘못된 쿼리 결과가 반환될 수 있던 문제를 수정했습니다. #90176을 수정했습니다. #90054을 수정했습니다. #90204 (Anton Popov). - 잘못된 세그먼트 디렉터리 이름을 파싱할 때
StorageDistributed에서 발생하던 크래시를 수정했습니다. #90243 (Aleksandr Musorin). LogicalExpressionOptimizerPass에서 문자열을 정수 또는 불리언으로 암시적으로 변환하는 경우를 처리합니다. #89803를 해결합니다. #90245 (Elmi Ahmadov).- 테이블 정의에서 특정 skip 인덱스의 형식이 잘못 지정되어
METADATA_MISMATCH가 발생하고 Replicated Database에서 새로운 레플리카를 생성하지 못하던 문제를 수정합니다. #90251 (Nikolay Degterinsky). - #90381에 백포트됨: part에 포함된 행 수가 index_granularity보다 적을 때 MergeTreeReaderIndex에서 행 수 불일치가 발생하는 문제를 수정합니다. #89691를 해결합니다. #90254 (Peng Jian).
- #90608에 백포트됨: compact 파트에서 JSON의 서브컬럼을 읽는 과정에서
CANNOT_READ_ALL_DATA오류가 발생할 수 있었던 버그를 수정합니다. #90264를 해결합니다. #90302 (Pavel Kruglov). - 두 개의 인자를 사용하는
trim,ltrim,rtrim함수가 동작하지 않던 문제를 수정합니다. #90170을(를) 해결합니다. #90305 (Nihal Z. Miaji). - #90625에 백포트됨: index_granularity_bytes=0인 경우 존재하지 않는 JSON path에 대한 prewhere 절에서 발생할 수 있는 논리적 오류를 수정합니다. #86924를 해결합니다. #90375 (Pavel Kruglov).
- #90484에 백포트됨: precision 인자가 유효 범위를 초과했을 때 충돌이 발생하던
L2DistanceTransposed의 버그를 수정했습니다. #90401 이슈를 해결합니다. #90405 (Raufs Dunamalijevs). - #90577에 백포트되었습니다: 배열 참조 벡터(기본값은
Array(Float64))를Float64가 아닌 요소 타입(Float32,BFloat16)의QBit컬럼과 함께 사용할 때L2DistanceTransposed에서 거리 계산이 잘못되던 문제를 수정했습니다. 이제 이 FUNCTION은 참조 벡터를QBit의 요소 타입과 일치하도록 자동으로 캐스팅합니다. #89976 이슈를 해결합니다. #90485 (Raufs Dunamalijevs). - #90601에 백포트됨: 드물게 발생하는
equals함수의 특정 경우로 인해 발생하던 논리 오류를 수정합니다. #88142를 해결합니다. #90557 (Nihal Z. Miaji). Tuple타입용CoalescingMergeTree를 수정했습니다. #88828 (scanhex12).
빌드/테스트/패키징 개선
- initdb SQL 스크립트와 TCP 포트를 재정의하여 Docker에서 ClickHouse를 실행할 때 발생하던 「Connection refused」 오류를 수정합니다. #88042 (Grigorii).
- ClickHouse의 새로운 플랫폼으로 e2k를 실험적으로 지원합니다. #90159 (Ramil Sattarov).
- CMake에서 남아 있던
FindPackage사용을 제거합니다. 빌드는 시스템 패키지에 의존하지 않도록 합니다. #89380 (Alexey Milovidov). - CMake 구성 시 빌드에서 컴파일러 캐시(예:
protoc용)를 사용합니다. #89613 (Konstantin Bogdanov). - FreeBSD 13.4 sysroot를 사용합니다. #89617 (Konstantin Bogdanov).
ClickHouse 25.10 릴리스, 2025-10-31
하위 호환성이 깨지는 변경
- 기본
schema_inference_make_columns_nullable설정을 변경하여, 모든 컬럼을 Nullable로 만드는 대신 Parquet/ORC/Arrow 메타데이터에 있는 컬럼Nullable여부 정보를 따르도록 했습니다. 텍스트 형식에는 변경 사항이 없습니다. #71499 (Michael Kolupaev). - 쿼리 결과 캐시는
log_commentSETTING을 무시합니다. 따라서 이제 쿼리에서log_comment만 변경해도 더 이상 캐시 미스가 발생하지 않습니다. 일부 사용자가 의도적으로log_comment를 다르게 설정해 캐시를 분리했을 가능성이 있습니다. 이 변경으로 그러한 동작이 바뀌므로, 이전 버전과 호환되지 않습니다. 이러한 용도로는query_cache_tagSETTING을 사용하십시오. #79878 (filimonov). - 이전 버전에서는 연산자를 구현하는 함수와 동일한 이름의 테이블 함수가 포함된 쿼리가 일관성 없게 포맷팅되었습니다. #81601 해결. #81977 해결. #82834 해결. #82835 해결. EXPLAIN SYNTAX 쿼리는 더 이상 항상 연산자를 포맷팅하지 않으며, 새로운 동작은 구문을 설명한다는 목적을 더 잘 반영합니다.
clickhouse-format,formatQuery등은 쿼리에서 함수 호출 형태로 포함된 경우 해당 함수를 연산자로 포맷팅하지 않습니다. #82825 (Alexey Milovidov). JOIN키에서Dynamic타입을 사용하지 않아야 합니다.Dynamic타입의 값을Dynamic이 아닌 타입과 비교할 때 예기치 않은 결과가 발생할 수 있습니다.Dynamic컬럼을 필요한 타입으로cast하는 편이 좋습니다. #86358 (Pavel Kruglov).storage_metadata_write_full_object_key서버 옵션은 기본적으로 활성화되어 있으며, 현재는 비활성화할 수 없습니다. 이는 하위 호환되는 변경입니다. 참고용으로 안내드립니다. 이 변경은 25.x 릴리스와만 순방향 호환됩니다. 이는 새 릴리스를 롤백해야 하는 경우 25.x 릴리스 내의 어떤 버전으로든 다운그레이드할 수 있다는 의미입니다. #87335 (Sema Checherinda).- 삽입 속도가 낮을 때 ZooKeeper에 저장되는 znode 수를 줄이기 위해
replicated_deduplication_window_seconds설정값을 1주에서 1시간으로 줄입니다. #87414 (Sema Checherinda). - 설정
query_plan_use_new_logical_join_step의 이름을query_plan_use_logical_join_step로 변경합니다. #87679 (Vladimir Cherkasov). - 새로운 구문을 사용하면 텍스트 인덱스의 tokenizer 매개변수를 더 유연하게 설정할 수 있습니다. #87997 (Elmi Ahmadov).
- 기존 FUNCTION
hasToken과의 일관성을 위해searchAny와searchAll함수 이름을 각각hasAnyTokens와hasAllTokens로 변경했습니다. #88109 (Robert Schulze). - 파일 시스템 캐시에서
cache_hits_threshold를 제거합니다. 이 기능은 SLRU 캐시 정책이 도입되기 전에 외부 기여자가 추가한 것이며, 이제 SLRU 캐시 정책이 있으므로 둘 다를 지원하는 것은 더 이상 의미가 없습니다. #88344 (Kseniia Sumarokova). min_free_disk_ratio_to_perform_insert및min_free_disk_bytes_to_perform_insert설정의 동작 방식에 두 가지 작은 변경 사항이 있습니다. - INSERT를 거부해야 하는지 판단할 때 사용 가능한 바이트(available bytes) 대신 예약되지 않은 바이트(unreserved bytes)를 사용합니다. 백그라운드 머지와 뮤테이션을 위한 예약량이 설정된 임계값에 비해 작다면 크게 중요하지 않을 수 있지만, 이 방식이 더 정확한 것으로 보입니다. - 이러한 설정을 system 테이블에는 적용하지 않습니다. 그 이유는query_log와 같은 테이블은 계속 업데이트되기를 원하기 때문입니다. 이는 디버깅에 매우 도움이 됩니다. system 테이블에 기록되는 데이터는 일반적으로 실제 데이터에 비해 양이 적으므로, 합리적인min_free_disk_ratio_to_perform_insert임계값을 사용하면 훨씬 더 오랫동안 계속 동작할 수 있어야 합니다. #88468 (c-end).- Keeper의 내부 복제에 비동기 모드를 활성화합니다. Keeper는 이전과 동일한 동작을 유지하면서 성능이 향상될 수 있습니다. 23.9보다 이전 버전에서 업데이트하는 경우 먼저 23.9+로 업데이트한 다음 25.10+으로 업데이트해야 합니다. 또한 업데이트 전에
keeper_server.coordination_settings.async_replication을 0으로 설정해 두었다가, 업데이트가 완료된 후 다시 활성화할 수도 있습니다. #88515 (Antonio Andelic).
새 기능
- 음수
LIMIT및 음수OFFSET지원을 추가했습니다. #28913 이슈를 해결했습니다. #88411 (Nihal Z. Miaji). Alias엔진은 다른 테이블을 가리키는 프록시 테이블을 생성합니다. 모든 읽기와 쓰기 작업은 대상 테이블로 전달되고, 이 별칭 테이블 자체는 데이터를 저장하지 않으며 대상 테이블에 대한 참조만 유지합니다. #87965 (Kai Zhu).- 연산자
IS NOT DISTINCT FROM(<=>)를 이제 완전히 지원합니다. #88155 (simonmichal). MergeTree테이블에서 해당하는 모든 컬럼에 대해 통계를 자동으로 생성하는 기능이 추가되었습니다. 생성할 통계 유형을 쉼표로 구분해 저장하는 테이블 수준의 설정auto_statistics_types가 추가되었습니다(예:auto_statistics_types = 'minmax, uniq, countmin'). #87241 (Anton Popov).- 텍스트용 새로운 블룸 필터 인덱스인
sparse_gram. #79985 (scanhex12). - 숫자를 진법 간에 변환하는 새로운
convFUNCTION으로, 현재 2진법부터 36진법까지를 지원합니다. #83058 (hp). LIMIT BY ALL구문 지원을 추가했습니다.GROUP BY ALL및ORDER BY ALL와 마찬가지로LIMIT BY ALL은 SELECT 절의 모든 비집계 표현식을 자동으로 확장하여 LIMIT BY 키로 사용합니다. 예를 들어,SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALL은SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name과 동일합니다. 이 기능을 사용하면 선택된 비집계 컬럼 전체를 기준으로 제한을 두고자 할 때 컬럼을 명시적으로 나열하지 않아도 되어 쿼리를 단순하게 작성할 수 있습니다. #59152 종료. #84079 (Surya Kant Ranjan).- ClickHouse에서 Apache Paimon에 대한 쿼리를 지원하는 기능을 추가합니다. 이 통합을 통해 ClickHouse 사용자는 Paimon의 데이터 레이크 저장소를 직접 조회하고 활용할 수 있습니다. #84423 (JIaQi).
- 집계 FUNCTION
studentTTestOneSample를 추가했습니다. #85436 (Dylan). - 히스토그램 버킷의 상한값과 누적 값을 인자로 받아, 분위수가 위치한 버킷의 하한과 상한 사이에서 선형 보간을 수행하는 집계 함수
quantilePrometheusHistogram. 클래식 히스토그램에서 PromQLhistogram_quantile함수와 유사하게 동작합니다. #86294 (Stephen Chi). - Delta Lake 메타데이터 파일용 새로운 system 테이블이 추가되었습니다. #87263 (scanhex12).
ALTER TABLE REWRITE PARTS가 추가되었습니다. 이 명령은 테이블 파트를 처음부터 다시 만들어 모든 새로운 설정을 적용합니다(예:use_const_adaptive_granularity처럼 일부 설정은 새 파트에만 적용됩니다). #87774 (Azat Khuzhin).SYSTEM RECONNECT ZOOKEEPER명령을 추가하여 ZooKeeper 연결을 강제로 해제하고 다시 연결하도록 합니다(https://github.com/ClickHouse/ClickHouse/issues/87317). #87318 (Pradeep Chhetri).max_named_collection_num_to_warn및max_named_collection_num_to_throwSETTING을 사용하여 named collection 수를 제한합니다. 새 메트릭NamedCollection및 오류TOO_MANY_NAMED_COLLECTIONS를 추가합니다. #87343 (Pablo Marcos).- 대소문자를 구분하지 않는 최적화된
startsWith및endsWith함수 변형을 추가했습니다:startsWithCaseInsensitive,endsWithCaseInsensitive,startsWithCaseInsensitiveUTF8,endsWithCaseInsensitiveUTF8. #87374 (Guang Zhao). - 서버 구성의 "resources_and_workloads" 섹션을 통해 SQL에서
WORKLOAD및RESOURCE정의를 제공할 수 있는 새로운 방법을 추가합니다. #87430 (Sergei Trifonov). min_level_for_wide_part라는 새로운 테이블 설정을 추가하여 데이터 파트가 wide part로 생성되는 최소 레벨을 지정할 수 있도록 했습니다. #88179 (Christoph Wurm).- Keeper 클라이언트에
cp-cpr및mv-mvr명령의 재귀(recursive) 버전을 추가했습니다. #88570 (Mikhail Artemenko). - 삽입 시 구체화에서 제외할 스킵 인덱스 목록을 지정하는 세션 설정(
exclude_materialize_skip_indexes_on_insert)이 추가되었습니다. 머지 중 구체화에서 제외할 스킵 인덱스 목록을 지정하는 MergeTree 테이블 설정(exclude_materialize_skip_indexes_on_merge)이 추가되었습니다. #87252 (George Larionov).
실험적 기능
- 벡터를 비트 슬라이스 형식으로 저장하는
QBit데이터 타입과, 매개변수를 통해 정밀도와 속도 간의 트레이드오프를 제어할 수 있는 근사 벡터 검색을 지원하는L2DistanceTransposedFUNCTION을 구현했습니다. #87922 (Raufs Dunamalijevs). - 이제
searchAll및searchAny함수가 텍스트 컬럼이 없는 컬럼에서도 동작합니다. 이러한 경우 기본 토크나이저를 사용합니다. #87722 (Jimmy Aguilar Mena).
성능 개선
- JOIN 및 ARRAY JOIN에서 lazy columns replication을 구현했습니다. Sparse 및 Replicated와 같은 특수 컬럼 표현을 일부 출력 형식에서 전체 컬럼으로 변환하지 않도록 했습니다. 이를 통해 메모리 내 불필요한 데이터 복사를 방지합니다. #88752 (Pavel Kruglov).
- MergeTree 테이블의 최상위 String 컬럼에 대해 선택적
.size서브컬럼 직렬화를 추가하여 압축 효율을 개선하고 서브컬럼에 효율적으로 접근할 수 있도록 했습니다. 직렬화 버전 제어와 빈 문자열에 대한 표현식 최적화를 위한 새로운 MergeTree 설정을 도입했습니다. #82850 (Amos Bird). - Iceberg에 대해 순서대로 읽기를 지원합니다. #88454 (scanhex12).
- 런타임에 오른쪽 서브트리에서 블룸 필터를 생성하고 이 필터를 왼쪽 서브트리의 스캔 연산에 전달하여 일부 JOIN 쿼리의 성능을 향상합니다. 이는
SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'와 같은 쿼리에 유용할 수 있습니다. #84772 (Alexander Gololobov). - Query Condition Cache(QCC)를 인덱스 분석과 통합하는 순서를 재구성하여 쿼리 성능을 개선했습니다. 이제 QCC 필터링이 기본 키 및 스킵 인덱스 분석 전에 적용되어, 불필요한 인덱스 계산이 줄어듭니다. 인덱스 분석은 여러 범위 필터를 지원하도록 확장되었으며, 그 필터링 결과가 QCC에 다시 저장되도록 변경되었습니다. 이는 실행 시간에서 인덱스 분석 비중이 큰 쿼리, 특히 스킵 인덱스(예: 벡터 인덱스나 역인덱스)에 의존하는 쿼리의 속도를 크게 향상시킵니다. #82380 (Amos Bird).
- 작은 쿼리의 속도를 높이기 위한 여러 가지 마이크로 최적화를 적용했습니다. #83096 (Raúl Marín).
- 네이티브 프로토콜에서 로그와 프로파일 이벤트를 압축합니다. 100개 이상의 레플리카가 있는 클러스터에서는 압축되지 않은 프로파일 이벤트가 초당 1..10 MB를 사용하며, 인터넷 연결이 느린 경우 진행 표시줄이 매우 느리게 동작합니다. 이 변경으로 #82533이(가) 해결됩니다. #83586 (Alexey Milovidov).
- StringZilla 라이브러리를 사용하여, 사용 가능한 경우 SIMD CPU 명령어를 활용함으로써 대소문자를 구분하는 문자열 검색(예:
WHERE URL LIKE '%google%'와 같은 필터링 연산)의 성능을 향상합니다. #84161 (Raúl Marín). - 테이블에
SimpleAggregateFunction(anyLast)타입의 컬럼이 있는 경우, AggregatingMergeTree 테이블에서 FINAL을 사용해 SELECT 쿼리를 수행할 때 메모리 할당과 메모리 복사를 줄였습니다. #84428 (Duc Canh Le). - OR 조건이 포함된 JOIN 프리디킷을 푸시다운하는 로직을 제공합니다. 예를 들어, TPC-H Q7에서 n1과 n2 두 테이블에 대한 조건
(n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE')이 있는 경우, 각 테이블에 대해 개별 부분 필터를 추출하여 n1에는n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY', n2에는n2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE'를 사용합니다. #84735 (Yarik Briukhovetskyi). - 새 기본 설정
optimize_rewrite_like_perfect_affix를 통해 접두사나 접미사 패턴을 사용하는LIKE연산자의 성능을 향상합니다. #85920 (Guang Zhao). - 여러 문자열/숫자 컬럼으로 GROUP BY를 수행할 때 대형 직렬화된 키로 인해 발생하는 성능 저하를 수정합니다. 이는 #83884의 후속 변경입니다. #85924 (李扬).
- 해시 조인에서 키당 일치 항목이 많을 때 메모리 사용량을 줄이기 위한 새로운
joined_block_split_single_row설정이 추가되었습니다. 이 설정을 사용하면 왼쪽 테이블의 단일 행에 대한 일치 항목 내에서도 해시 조인 결과를 청크 단위로 나눌 수 있어, 왼쪽 테이블의 한 행이 오른쪽 테이블의 수천 개 또는 수백만 개의 행과 일치하는 경우에 특히 유용합니다. 이전에는 모든 일치 항목을 메모리에서 한 번에 모두 구체화해야 했습니다. 이 변경으로 최대 메모리 사용량은 줄어들지만 CPU 사용량은 증가할 수 있습니다. #87913 (Vladimir Cherkasov). - SharedMutex를 개선하여 대량의 동시 쿼리 처리 시 성능이 향상되었습니다. #87491 (Raúl Marín).
- 자주 나타나지 않는 토큰이 대부분을 차지하는 문서에 대한 텍스트 인덱스 생성 성능을 개선했습니다. #87546 (Anton Popov).
- Field 소멸자의 일반적인 실행 경로를 가속하여 수많은 소규모 쿼리의 성능을 개선합니다. #87631 (Raúl Marín).
- JOIN 최적화 과정에서 런타임 해시 테이블 통계 재계산을 생략합니다(조인이 포함된 모든 쿼리의 성능을 향상합니다). 새로운 프로파일 이벤트
JoinOptimizeMicroseconds및QueryPlanOptimizeMicroseconds가 추가되었습니다. #87683 (Vladimir Cherkasov). - MergeTreeLazy 리더에서 마크를 캐시에 저장하고 직접 I/O를 피하도록 했습니다. 이를 통해 ORDER BY와 작은 LIMIT 값을 사용하는 쿼리의 성능이 향상됩니다. #87989 (Nikita Taranov).
is_deleted컬럼이 있는ReplacingMergeTree테이블에 대해FINAL절이 포함된 SELECT 쿼리가 이제 두 가지 기존 최적화에서의 병렬화 개선으로 더 빠르게 실행됩니다. 1. 테이블에서 단일part만 가진 파티션에 대한do_not_merge_across_partitions_select_final최적화; 2. 테이블의 나머지 선택 범위를intersecting / non-intersecting으로 분리하고, 이 중 교차하는(intersecting) 범위만 FINAL 머지 변환을 거치도록 하는 최적화입니다. #88090 (Shankar Iyer).- 디버깅이 활성화되어 있지 않을 때(기본 코드 경로) fail point를 사용하지 않는 경우의 영향을 줄였습니다. #88196 (Raúl Marín).
uuid로 필터링할 때system.tables에 대한 전체 스캔을 수행하지 않습니다 (로그나 ZooKeeper 경로에서 UUID만 있는 경우에 유용할 수 있습니다). #88379 (Azat Khuzhin).tokens,hasAllTokens,hasAnyTokensFUNCTION의 성능을 개선했습니다. #88416 (Anton Popov).- 일부 경우 JOIN 성능을 소폭 향상하기 위해
AddedColumns::appendFromBlock를 인라인 처리했습니다. #88455 (Nikita Taranov). - 여러 개의 system 테이블 쿼리를 실행하는 대신
system.completions를 사용하면 클라이언트 자동 완성 기능이 더 빠르고 일관되게 동작합니다. #84694 (|2ustam). - 새로운
dictionary_block_frontcoding_compression텍스트 인덱스 파라미터를 추가하여 딕셔너리 압축을 제어할 수 있습니다. 기본적으로front-coding압축이 사용되도록 활성화되어 있습니다. #87175 (Elmi Ahmadov). min_insert_block_size_rows_for_materialized_views및min_insert_block_size_bytes_for_materialized_views설정에 따라 materialized view에 데이터를 삽입하기 전에 모든 스레드의 데이터를 하나로 병합합니다. 이전에는parallel_view_processing이 활성화된 경우, 특정 materialized view에 삽입하는 각 스레드가 삽입 데이터를 독립적으로 병합하여 처리했으며, 이로 인해 생성되는 파트 수가 더 많아질 수 있었습니다. #87280 (Antonio Andelic).- 임시 파일 쓰기 작업의 버퍼 크기를 제어하는 설정인
temporary_files_buffer_size를 추가합니다. *LowCardinality컬럼에 대해scatter연산(예: Grace 해시 조인에서 사용)을 사용할 때 메모리 사용량을 최적화합니다. #88237 (Vladimir Cherkasov). - 병렬 레플리카 환경에서 텍스트 인덱스를 직접 읽는 기능을 추가했습니다. 객체 스토리지에서 텍스트 인덱스를 읽는 성능을 개선했습니다. #88262 (Anton Popov).
- 데이터 레이크 카탈로그에 있는 테이블을 대상으로 하는 쿼리는 분산 처리를 위해 병렬 레플리카를 사용합니다. #88273 (scanhex12).
- "to_remove_small_parts_at_right"라는 이름의 백그라운드 머지 알고리즘 튜닝용 내부 휴리스틱이 이제 머지 범위 점수 계산 전에 실행됩니다. 이전에는 머지 셀렉터가 먼저 넓은 범위의 머지를 선택한 다음 그 접미사(suffix)를 필터링했습니다. 수정 사항: #85374. #88736 (Mikhail Artemenko).
개선 사항
- 이제 함수
generateSerialID에서 시리즈 이름에 상수가 아닌 인자를 사용할 수 있습니다. 이 변경으로 #83750 이슈가 해결되었습니다. #88270 (Alexey Milovidov). - 새 시퀀스의 시작 값을 임의로 지정할 수 있도록
generateSerialIDFUNCTION에 선택적start_value매개변수를 추가했습니다. #88085 (Manuel). clickhouse-format에--semicolons_inline옵션을 추가하여 쿼리를 포맷할 때 세미콜론이 새 줄이 아니라 마지막 줄에 위치하도록 합니다. #88018 (Jan Rada).- 구성이 Keeper에서 재정의되는 경우에도 서버 수준 쓰로틀링을 구성할 수 있도록 했습니다. #73964를 종료합니다. #74066 (JIaQi).
mannWhitneyUTest는 두 표본 모두가 동일한 값만 포함하는 경우 더 이상 예외를 발생시키지 않습니다. 이제 SciPy와 동작이 일치하는 유효한 결과를 반환합니다. 이를 통해 다음 이슈가 해결됩니다. #79814. #80009 (DeanNeaht).- 메타데이터 트랜잭션이 커밋되면 디스크 객체 스토리지의 재작성 트랜잭션이 이전 원격 blob을 제거하도록 했습니다. #81787 (Sema Checherinda).
- 최적화 전후에 결과 타입의
LowCardinality여부가 달라지는 경우 중복된 동등 비교식에 대한 최적화 패스를 수정했습니다. #82651 (Yakov Olkhovskiy). - HTTP 클라이언트가
Expect: 100-continue헤더와 함께X-ClickHouse-100-Continue: defer헤더를 설정하면, ClickHouse는 QUOTA 검증이 통과한 후에야 클라이언트에100 Continue응답을 전송하므로, 어차피 버려질 요청 본문을 전송하면서 발생하는 네트워크 대역폭 낭비를 방지합니다. 이는 URL 쿼리 문자열로 쿼리를 보내고 요청 본문으로 데이터를 전송하는 INSERT 쿼리에 해당합니다. 전체 본문을 보내지 않고 요청을 중단하면 HTTP/1.1에서 연결 재사용이 불가능하지만, 새로운 연결을 여는 데 따른 추가 지연 시간은 보통 대량 데이터를 INSERT하는 전체 소요 시간에 비하면 무시할 수 있을 정도입니다. #84304 (c-end). - S3 스토리지를 사용하는
DATABASE ENGINE = Backup에서 로그에 출력되는 S3 자격 증명이 마스킹되도록 했습니다. #85336 (Kenny Sun). - 구체화를 지연하여 상관 서브쿼리 입력 서브플랜에서도 쿼리 플랜 최적화를 활용할 수 있도록 했습니다. #79890의 일부입니다. #85455 (Dmitry Novik).
- SYSTEM DROP DATABASE REPLICA에 대한 변경 사항: - 데이터베이스와 함께 삭제하거나 전체 레플리카를 삭제하는 경우: 해당 데이터베이스의 각 테이블에 대한 레플리카도 함께 삭제합니다 - 'WITH TABLES'가 지정된 경우, 각 스토리지에 대한 레플리카를 삭제합니다 - 그렇지 않으면 동작 방식은 동일하며, 데이터베이스에 대한 레플리카만 삭제합니다 - Keeper 경로와 함께 데이터베이스 레플리카를 삭제하는 경우: - 'WITH TABLES'가 지정된 경우: - 데이터베이스를 Atomic으로 복원합니다 - Keeper에 저장된 statement로부터 RMT 테이블을 복원합니다 - 데이터베이스를 삭제합니다(복원된 테이블도 함께 삭제됩니다) - 그렇지 않으면 지정된 Keeper 경로의 레플리카만 삭제합니다. #85637 (Tuan Pham Anh).
materializeFUNCTION이 포함된 TTL의 일관되지 않은 서식을 수정합니다. #82828 이슈를 해결합니다. #85749 (Alexey Milovidov).- Iceberg 테이블 상태는 더 이상 저장소 객체에 저장되지 않습니다. 이에 따라 ClickHouse에서 Iceberg를 동시 쿼리 환경에서도 사용할 수 있게 됩니다. #86062 (Daniil Ivanik).
- S3Queue 순서 모드에서의 버킷 잠금이
use_persistent_processing_nodes = 1인 경우의 처리 노드와 유사한 영구 모드가 되도록 변경합니다. 테스트에 Keeper 결함 주입을 추가합니다. #86628 (Kseniia Sumarokova). - 사용자가 포맷 이름을 오타로 잘못 입력한 경우 힌트를 제공합니다. #86761을(를) 닫습니다. #87092 (flynn).
- 원격 레플리카는 프로젝션이 없을 경우 인덱스 분석을 수행하지 않습니다. #87096 (zoomxi).
- ytsaurus 테이블에서 UTF-8 인코딩을 비활성화할 수 있도록 했습니다. #87150 (MikhailBurdukov).
s3_slow_all_threads_after_retryable_error설정을 기본적으로 비활성화했습니다. #87198 (Nikita Mikhaylov).- 테이블 함수
arrowflight의 이름을arrowFlight로 변경합니다. #87249 (Vitaly Baranov). clickhouse-benchmark가 CLI 플래그에서_대신-를 사용할 수 있도록 허용하도록 업데이트되었습니다. #87251 (Ahmed Gouda).- 시그널 처리 시
system.crash_log로의 플러시를 동기적으로 수행하도록 변경합니다. #87253 (Miсhael Stetsyuk). ORDER BY절이 없는 최상위SELECT쿼리에ORDER BY rand()를 삽입하는 새 설정inject_random_order_for_select_without_order_by가 추가되었습니다. #87261 (Rui Zhang).joinGet오류 메시지를 개선하여join_keys의 개수와right_table_keys의 개수가 동일하지 않음을 올바르게 안내하도록 했습니다. #87279 (Isak Ellmer).- 쓰기 트랜잭션(write tx) 수행 중에 임의의 Keeper 노드의 stat을 확인할 수 있는 기능이 추가되었습니다. 이는 ABA 문제를 감지하는 데 도움이 됩니다. #87282 (Mikhail Artemenko).
- ytsaurus의 고부하 요청을 고부하 프록시로 리디렉션합니다. #87342 (MikhailBurdukov).
- 디스크 트랜잭션에서 사용하는 메타데이터에서 모든 워크로드에 대해
unlink/rename/removeRecursive/removeDirectory/기타 연산의 롤백과 하드링크 개수 처리가 올바르게 동작하도록 수정하고, 인터페이스를 보다 범용적으로 만들기 위해 단순화하여 다른 메타 스토어에서도 재사용할 수 있도록 했습니다. #87358 (Mikhail Artemenko). - Keeper에서
TCP_NODELAY를 비활성화할 수 있도록 하는keeper_server.tcp_nodelay설정 매개변수를 추가했습니다. #87363 (Copilot). clickhouse-benchmarks에서--connection옵션을 지원하도록 했습니다. 이 옵션은clickhouse-client에서 지원하는 것과 동일하며, 클라이언트config.xml/config.yaml의connections_credentials경로 아래에 미리 정의된 연결을 지정하여 명령줄 인자로 사용자 이름/비밀번호를 명시적으로 지정하지 않아도 됩니다.clickhouse-benchmark에--accept-invalid-certificate옵션 지원을 추가했습니다. #87370 (Azat Khuzhin).- 이제 Iceberg 테이블에서도
max_insert_threads설정이 적용됩니다. #87407 (alesapin). PrometheusMetricsWriter에 히스토그램 및 차원 메트릭을 추가합니다. 이렇게 하면PrometheusRequestHandler핸들러가 모든 필수 메트릭을 포함하게 되어 Cloud 환경에서 신뢰성이 높고 오버헤드가 낮은 메트릭 수집에 사용할 수 있습니다. #87521 (Miсhael Stetsyuk).- 이제 FUNCTION
hasToken은 빈 토큰에 대해 더 이상 예외를 발생시키지 않고 일치 항목 0개를 반환합니다. #87564 (Jimmy Aguilar Mena). Array및 맵(mapKeys및mapValues) 값에 대한 텍스트 인덱스 지원을 추가했습니다. 지원되는 함수는mapContainsKey및has입니다. #87602 (Elmi Ahmadov).- 만료된 전역 ZooKeeper 세션 수를 나타내는 새로운
ZooKeeperSessionExpired메트릭을 추가합니다. #87613 (Miсhael Stetsyuk). - 서버 측(네이티브) 복사 방식으로 백업 대상에 데이터를 전송할 때 백업 전용 설정(예: backup_slow_all_threads_after_retryable_s3_error)이 구성된 S3 storage client를 사용하도록 했습니다. 이에 따라 s3_slow_all_threads_after_retryable_error 설정은 더 이상 사용되지 않습니다. #87660 (Julia Kartseva).
make_distributed_plan실험 기능을 사용한 쿼리 플랜 직렬화 시max_joined_block_size_rows및max_joined_block_size_bytes설정을 잘못 처리하던 문제를 수정했습니다. #87675 (Vladimir Cherkasov).enable_http_compression설정이 이제 기본값이 되었습니다. 이는 클라이언트가 HTTP 압축을 허용하는 경우 서버에서 이를 사용한다는 의미입니다. 그러나 이 변경에는 몇 가지 단점이 있습니다. 클라이언트가bzip2와 같이 과도한 압축 방식(비합리적인 선택)을 요청할 수 있으며, 이 경우 서버의 리소스 사용량이 증가합니다(다만 큰 결과를 전송할 때만 눈에 띕니다). 클라이언트가gzip을 요청할 수도 있는데, 이는 그리 나쁜 선택은 아니지만zstd와 비교하면 최적은 아닙니다. #71591를 해결합니다. #87703 (Alexey Milovidov).- ClickHouse가 연결할 수 있는 [Zoo]Keeper 호스트 목록을 제공하는
system.server_settings의 새 항목인keeper_hosts를 추가했습니다. #87718 (Nikita Mikhaylov). - 과거 이력 조사를 용이하도록 시스템 대시보드에
from및to값을 추가했습니다. #87823 (Mikhail f. Shiryaev). - Iceberg
SELECT의 성능 추적을 위해 더 많은 정보를 제공합니다. #87903 (Daniil Ivanik). - Filesystem 캐시 개선: 동시에 캐시 공간을 예약하는 여러 스레드 간에 캐시 우선순위 이터레이터를 재사용합니다. #87914 (Kseniia Sumarokova).
Keeper요청 크기를 제한할 수 있는 기능을 추가했습니다 (max_request_size설정으로,ZooKeeper의jute.maxbuffer와 동일하며, 이전 버전과의 호환성을 위해 기본값은 OFF이고, 향후 릴리스에서 기본값이 설정될 예정입니다). #87952 (Azat Khuzhin).- 기본적으로 오류 메시지에 스택 트레이스를 포함하지 않도록
clickhouse-benchmark를 변경했습니다. #87954 (Ahmed Gouda). - 마크가 캐시에 있을 때는 스레드 풀 비동기 마크 로딩(
load_marks_asynchronously=1)을 사용하지 않아야 합니다(스레드 풀이 과부하 상태일 수 있으며, 마크가 이미 캐시에 있더라도 쿼리가 그로 인한 오버헤드를 부담하게 될 수 있습니다). #87967 (Azat Khuzhin). - Ytsaurus: 컬럼 부분 집합으로도 테이블/테이블 함수/딕셔너리를 생성할 수 있게 했습니다. #87982 (MikhailBurdukov).
- 이제
system.zookeeper_connection_log가 기본적으로 활성화되며, Keeper 세션에 대한 정보를 얻는 데 사용할 수 있습니다. #88011 (János Benjamin Antal). - 중복된 external 테이블이 전달되는 경우 TCP와 HTTP의 동작을 일치시켰습니다. HTTP에서는 임시 테이블을 여러 번 전달할 수 있습니다. #88032 (Sema Checherinda).
- Arrow/ORC/Parquet 읽기를 위한 커스텀 MemoryPool을 제거합니다. 이제 모든 메모리 할당을 추적하기 때문에, 이 컴포넌트는 #84082 이후에는 더 이상 필요하지 않은 것으로 보입니다. #88035 (Nikita Mikhaylov).
- 인자를 지정하지 않고도
Replicated데이터베이스를 CREATE 할 수 있게 되었습니다. #88044 (Pervakov Grigorii). clickhouse-keeper-client: clickhouse-keeper의 TLS 포트에 연결하는 지원을 추가하고, 플래그 이름은clickhouse-client와 동일하게 유지했습니다. #88065 (Pradeep Chhetri).- 메모리 한도를 초과해 백그라운드 머지가 거부된 횟수를 추적하는 새로운 프로파일 이벤트를 추가했습니다. #88084 (Grant Holly).
- CREATE/ALTER TABLE에서 컬럼 기본값 표현식 유효성 검사용 analyzer를 활성화했습니다. #88087 (Max Justus Spransy).
- 내부 쿼리 플래닝이 개선되어
CROSS JOIN에 JoinStepLogical을 사용합니다. #88151 (Vladimir Cherkasov). hasAnyTokensFUNCTION의 별칭hasAnyToken과hasAllTokensFUNCTION의 별칭hasAllToken이 추가되었습니다. #88162 (George Larionov).- 기본적으로 전역 샘플링 프로파일러를 활성화합니다(즉, 쿼리와 관련 없는 서버 스레드까지 포함됨): CPU 시간과 실시간 기준으로 모든 스레드의 스택 트레이스를 10초마다 수집합니다. #88209 (Alexander Tokmakov).
- 컨테이너 복사 및 생성 기능에서 발생하는 'Content-Length' 문제를 해결하는 수정 사항을 포함하도록 Azure SDK를 업데이트합니다. #88278 (Smita Kulkarni).
- MySQL과의 호환성을 위해
lagFUNCTION이 대소문자를 구분하지 않도록 했습니다. #88322 (Lonny Kapelushnik). clickhouse-server디렉터리에서clickhouse-local을 실행할 수 있습니다. 이전 버전에서는Cannot parse UUID: .오류가 발생했습니다. 이제 서버를 시작하지 않고도clickhouse-local을 실행하여 서버의 데이터베이스를 조작할 수 있습니다. #88383 (Alexey Milovidov).keeper_server.coordination_settings.check_node_acl_on_remove설정을 추가했습니다. 이 설정을 활성화하면 각 노드를 삭제하기 전에 해당 노드 자체와 부모 노드의 ACL이 모두 검증됩니다. 비활성화된 경우에는 부모 노드의 ACL만 검증됩니다. #88513 (Antonio Andelic).JSON컬럼은 이제Vertical포맷을 사용할 때 가독성이 좋게 출력됩니다. 이슈 #81794를 해결합니다. #88524 (Frank Rosner).clickhouse-client파일(예: 쿼리 기록)을 홈 디렉터리 루트가 아닌 XDG Base Directories 명세에서 정의한 위치에 저장합니다.~/.clickhouse-client-history파일이 이미 존재하는 경우에는 계속 해당 파일을 사용합니다. #88538 (Konstantin Bogdanov).GLOBAL IN에서 발생하던 메모리 누수를 수정했습니다(https://github.com/ClickHouse/ClickHouse/issues/88615). #88617 (pranavmehta94).- 문자열 입력을 허용하도록
hasAny/hasAllTokens에 오버로드를 추가했습니다. #88679 (George Larionov). - 부팅 시 자동으로 시작되도록
clickhouse-keeper의 postinstall 스크립트에 단계를 추가했습니다. #88746 (YenchangChan). - Web UI에서 자격 증명을 매 키 입력마다가 아니라 붙여넣을 때만 검사하도록 변경했습니다. 이를 통해 LDAP 서버의 잘못된 설정으로 인해 발생하는 문제를 방지합니다. 이 변경으로 #85777가 해결되었습니다. #88769 (Alexey Milovidov).
- CONSTRAINT가 위반되었을 때 예외 메시지 길이를 제한합니다. 이전 버전에서는 매우 긴 문자열이 삽입되면 예외 메시지도 매우 길어져
query_log에 기록되는 경우가 있었습니다. #87032를 해결합니다. #88801 (Alexey Milovidov). - 테이블을 생성할 때 ArrowFlight 서버에서 데이터셋의 구조를 요청하던 동작을 수정했습니다. #87542 (Vitaly Baranov).
버그 수정(공식 안정 릴리스에서 사용자에게 노출되는 오동작)
- GeoParquet 관련 클라이언트 프로토콜 오류를 수정했습니다. #84020 (Michael Kolupaev).
- initiator 노드의 서브쿼리에서 shardNum()과 같은 호스트 의존 함수의 해석을 수정합니다. #84409 (Eduard Karacharov).
parseDateTime64BestEffort,change{Year,Month,Day},makeDateTime64와 같은 다양한 날짜·시간 관련 함수에서 epoch 이전 날짜의 소수 초가 포함된 값 처리 방식이 잘못되던 문제를 수정했습니다. 이전에는 초 단위에서 소수 초 부분을 더해야 하는 대신 빼고 있었습니다. 예를 들어parseDateTime64BestEffort('1969-01-01 00:00:00.468')는1969-01-01 00:00:00.468대신1968-12-31 23:59:59.532를 반환했습니다. #85396 (xiaohuanlin).- 같은 ALTER 문 내에서 컬럼 상태가 변경될 때
ALTER COLUMN IF EXISTS명령어가 실패하던 문제를 수정했습니다. 이제DROP COLUMN IF EXISTS,MODIFY COLUMN IF EXISTS,COMMENT COLUMN IF EXISTS,RENAME COLUMN IF EXISTS와 같은 명령어가 동일한 문에서 앞선 명령어에 의해 컬럼이 삭제되는 경우를 올바르게 처리합니다. #86046 (xiaohuanlin). - 지원 범위를 벗어나는 날짜에 대한 Date/DateTime/DateTime64 타입 추론을 수정합니다. #86184 (Pavel Kruglov).
- 일부 유효한 사용자가 제출한 데이터가
AggregateFunction(quantileDD)컬럼에 저장될 때 머지 작업이 무한히 재귀적으로 수행되어 크래시가 발생하던 문제를 수정합니다. #86560 (Raphaël Thériault). clustertable function으로 생성한 테이블에서 JSON/Dynamic 타입을 지원합니다. #86821 (Pavel Kruglov).- CTE에서 계산된 함수의 결과가 쿼리에서 비결정적으로 평가되던 문제를 수정합니다. #86967 (Yakov Olkhovskiy).
- 프라이머리 키 컬럼에 대해 pointInPolygon을 사용할 때 EXPLAIN에서 발생하던 LOGICAL_ERROR를 수정했습니다. #86971 (Michael Kolupaev).
- 이름에 퍼센트 인코딩된 시퀀스가 포함된 데이터 레이크 테이블을 수정합니다. #86626 이슈를 해결합니다. #87020 (Anton Ivashkin).
optimize_functions_to_subcolumns가 활성화된OUTER JOIN에서 널 허용 컬럼에서의IS NULL동작이 잘못되던 문제를 수정합니다. #78625. #87058 (Vladimir Cherkasov).max_temporary_data_on_disk_size제한 추적에서 임시 데이터 할당 해제분을 잘못 계산하던 문제를 수정하고, #87118 이슈를 종료했습니다. #87140 (JIaQi).- 이제
checkHeadersFUNCTION이 제공된 헤더를 올바르게 검증하며 금지된 헤더를 거부합니다. 원 작성자: Michael Anastasakis (@michael-anastasakis). #87172 (Raúl Marín). - 모든 숫자형 타입에서
toDate와toDate32가 동일하게 동작하도록 합니다.Int16에서 캐스팅할 때의 Date32 언더플로 검사 문제를 수정합니다. #87176 (Pervakov Grigorii). - 여러 조인이 있는 쿼리, 특히 LEFT/INNER JOIN 뒤에 RIGHT JOIN이 오는 경우에 병렬 레플리카에서 발생하던 논리 오류를 수정했습니다. #87178 (Igor Nikonov).
- 스키마 추론 캐시에서
input_format_try_infer_variants설정을 따르도록 했습니다. #87180 (Pavel Kruglov). - pathStartsWith가 접두사 하위의 경로에만 일치하도록 수정했습니다. #87181 (Raúl Marín).
_row_number가상 컬럼과 Iceberg positioned deletes에서 발생하던 논리적 오류를 수정했습니다. #87220 (Michael Kolupaev).- 상수 블록과 비상수 블록이 혼합된 경우
JOIN에서 발생했던 "Too large size passed to allocator"LOGICAL_ERROR를 수정했습니다. #87231 (Azat Khuzhin). - 다른
MergeTree테이블에서 데이터를 읽는 서브쿼리를 사용하는 경량 업데이트 관련 문제를 수정했습니다. #87285 (Anton Popov). - ROW POLICY가 존재할 때 동작하지 않던 move-to-prewhere 최적화를 수정했습니다. #85118의 후속 작업입니다. #69777 이슈를 해결했습니다. #83748 이슈를 해결했습니다. #87303 (Nikolai Kochetov).
- 데이터 파트에 존재하지 않는 기본값 표현식이 있는 컬럼에 패치를 적용할 때의 동작을 수정했습니다. #87347 (Anton Popov).
- MergeTree 테이블에서 중복된 파티션 필드 이름을 사용할 때 발생하던 세그멘테이션 오류를 수정했습니다. #87365 (xiaohuanlin).
- EmbeddedRocksDB 업그레이드 문제를 수정했습니다. #87392 (Raúl Marín).
- 객체 스토리지에 있는 텍스트 인덱스를 직접 읽는 동작을 수정했습니다. #87399 (Anton Popov).
- 존재하지 않는 엔진에 대한 권한이 생성되지 않도록 했습니다. #87419 (Jitendra).
s3_plain_rewritable에 대해서는 not found 오류만 무시하도록 합니다(이로 인해 여러 문제가 발생할 수 있습니다). #87426 (Azat Khuzhin).- YTSaurus 소스와 *range_hashed 레이아웃을 사용하는 딕셔너리를 수정했습니다. #87490 (MikhailBurdukov).
- 빈 튜플의 배열을 생성하는 기능을 수정합니다. #87520 (Pavel Kruglov).
- 임시 테이블을 생성할 때 유효하지 않은 컬럼을 검사합니다. #87524 (Pavel Kruglov).
- Hive 파티션 컬럼은 포맷 헤더에 포함하지 않도록 했습니다. #87515을(를) 수정했습니다. #87528 (Arthur Passos).
- 텍스트 포맷 사용 시 DeltaLake에서 포맷에서 읽기를 준비하는 과정을 수정했습니다. #87529 (Pavel Kruglov).
- Buffer 테이블에서 SELECT 및 INSERT 시 접근 권한 검증을 수정합니다. #87545 (pufit).
- S3 테이블에서 데이터 스키핑 인덱스를 생성할 수 없도록 했습니다. #87554 (Bharat Nallan).
- 비동기 로깅에서 추적 메모리가 누수되어(10시간 동안 약 100GiB 수준의 큰 오차(드리프트)가 발생할 수 있음) 메모리 사용량 집계에 드리프트가 생기는 문제와,
text_log에서도 거의 동일한 수준의 드리프트가 발생할 수 있는 문제를 방지합니다. #87584 (Azat Khuzhin). - 비동기적으로 삭제된 View 또는 Materialized View의 백그라운드 정리가 완료되기 전에 서버가 재시작될 경우, 이 View의 SELECT 쿼리 설정으로 전역 서버 설정이 덮어써질 수 있던 버그를 수정했습니다. #87603 (Alexander Tokmakov).
- 메모리 과부하 경고를 계산할 때 가능한 경우 userspace page cache의 바이트 수를 제외합니다. #87610 (Bharat Nallan).
- CSV 역직렬화 중 잘못된 타입 순서로 인해
LOGICAL_ERROR가 발생하던 버그를 수정했습니다. #87622 (Yarik Briukhovetskyi). command_read_timeout이(가) 실행형 딕셔너리에서 잘못 처리되던 문제를 수정했습니다. #87627 (Azat Khuzhin).- 새로운 analyzer를 사용할 때 교체된 컬럼을 기준으로 필터링하면 WHERE 절에서 SELECT * REPLACE 구문의 동작이 잘못되던 문제를 수정했습니다. #87630 (xiaohuanlin).
Distributed테이블 위에서Merge를 사용할 때 발생하던 2단계 집계 문제를 수정했습니다. #87687 (c-end).- 오른쪽 행 목록을 사용하지 않을 때 HashJoin 알고리즘에서 출력 블록이 잘못 생성되던 문제를 수정합니다. #87401. #87699 (Dmitry Novik).
- 인덱스 분석을 적용한 후 읽을 데이터가 없을 때 병렬 레플리카 읽기 모드가 잘못 선택되는 문제가 있었습니다. Closes #87653. #87700 (zoomxi).
- Glue에서
timestamp/timestamptz컬럼 처리 방식을 수정했습니다. #87733 (Andrey Zvonov). - 이 변경으로 #86587 이슈를 해결했습니다. #87761 (scanhex12).
- PostgreSQL 인터페이스에서 Boolean 값이 올바르게 기록되지 않던 문제를 수정했습니다. #87762 (Artem Yurov).
- CTE를 사용하는 INSERT SELECT 쿼리에서 발생하는 알 수 없는 테이블 오류를 수정했습니다, #85368. #87789 (Guang Zhao).
- Nullable 안에 둘 수 없는 Variant에서 null 맵 서브컬럼을 읽는 동작을 수정합니다. #87798 (Pavel Kruglov).
- 클러스터의 보조 노드에서 데이터베이스를 완전히 삭제하지 못했을 때 오류가 올바르게 처리되지 않던 문제를 수정했습니다. #87802 (Tuan Pham Anh).
- 여러 개의 skip 인덱스 관련 버그를 수정합니다. #87817 (Raúl Marín).
- AzureBlobStorage에서 먼저 네이티브 복사를 시도하고, 'Unauthorized' 오류가 발생하면 읽기 및 쓰기로 전환하도록 업데이트했습니다(AzureBlobStorage에서 소스와 대상의 스토리지 계정이 서로 다를 경우 'Unauthorized' 오류가 발생함). 또한 설정에서 endpoint가 정의된 경우에도 "use_native_copy"가 적용되도록 수정했습니다. #87826 (Smita Kulkarni).
- ArrowStream 파일에 중복된 딕셔너리가 포함된 경우 ClickHouse가 충돌합니다. #87863 (Ilya Golshtein).
- approx_top_k와 finalizeAggregation 사용 시 발생하던 치명적인 문제를 수정했습니다. #87892 (Jitendra).
- 마지막 블록이 비어 있는 경우 프로젝션과의 머지 작업 문제를 수정합니다. #87928 (Raúl Marín).
- 인자 타입이 GROUP BY에서 허용되지 않는 경우에도 GROUP BY에서 injective functions를 제거하지 않도록 했습니다. #87958 (Pavel Kruglov).
- 쿼리에서
session_timezone설정을 사용할 때 datetime 기반 키에 대해 그래뉼/파티션 제거가 올바르게 동작하지 않던 문제를 수정했습니다. #87987 (Eduard Karacharov). - PostgreSQL Interface에서 쿼리 실행 후 영향을 받은 행의 수를 반환합니다. #87990 (Artem Yurov).
- 잘못된 결과가 발생할 수 있으므로 PASTE JOIN에서 filter pushdown의 사용을 제한합니다. #88078 (Yarik Briukhovetskyi).
- https://github.com/ClickHouse/ClickHouse/pull/84503에서 도입된 권한 검사를 평가하기 전에 URI를 정규화합니다. #88089 (pufit).
- 새로운 analyzer에서 ARRAY JOIN COLUMNS()가 어떤 컬럼과도 일치하지 않을 때 발생하던 논리 오류를 수정했습니다. #88091 (xiaohuanlin).
- "High ClickHouse memory usage" 경고가 페이지 캐시를 제외하도록 수정했습니다. #88092 (Azat Khuzhin).
TTL이 설정된 Set 컬럼을 사용하는MergeTree테이블에서 발생할 수 있던 데이터 손상 문제를 수정했습니다. #88095 (Anton Popov).- 외부 데이터베이스(
PostgreSQL/SQLite/...)에 잘못된 테이블이 연동된 상태에서system.tables를 읽을 때 발생할 수 있는 처리되지 않은 예외를 수정했습니다. #88105 (Azat Khuzhin). - 빈 튜플 인수로 호출할 때
mortonEncode및hilbertEncode함수에서 충돌이 발생하던 문제를 수정했습니다. #88110 (xiaohuanlin). - 이제 클러스터에 비활성 레플리카가 있더라도
ON CLUSTER쿼리 실행에 소요되는 시간이 줄어듭니다. #88153 (alesapin). - 이제 DDL worker가 레플리카 Set에서 오래된 호스트를 정리합니다. 이로써 ZooKeeper에 저장되는 메타데이터 양이 줄어듭니다. #88154 (alesapin).
- cgroups 없이도 ClickHouse를 실행할 수 있도록 수정했습니다(cgroups가 실수로 비동기 메트릭의 필수 요구사항이 되었던 문제). #88164 (Azat Khuzhin).
- 오류 발생 시 디렉터리 이동 작업이 제대로 롤백되도록 합니다. 실행 중에 변경된 루트 객체뿐만 아니라 모든
prefix.path객체를 다시 기록해야 합니다. #88198 (Mikhail Artemenko). ColumnLowCardinality에서is_shared플래그의 전파 방식을 수정했습니다. 이로 인해ReverseIndex에 해시 값이 이미 미리 계산되어 캐시된 이후 컬럼에 새로운 값이 삽입되는 경우 잘못된 GROUP BY 결과가 발생할 수 있었습니다. #88213 (Nikita Taranov).- 워크로드 설정
max_cpu_share의 동작을 수정했습니다. 이제max_cpus워크로드 설정을 별도로 지정하지 않아도 사용할 수 있습니다. #88217 (Neerav). - 서브쿼리가 포함된 매우 대규모 뮤테이션이 prepare 단계에서 멈춰 버리던 버그를 수정했습니다. 이제
SYSTEM STOP MERGES를 사용해 이러한 뮤테이션을 중지할 수 있습니다. #88241 (alesapin). - 이제 상관 서브쿼리를 객체 스토리지에서도 사용할 수 있습니다. #88290 (alesapin).
system.projections및system.data_skipping_indices에 접근하는 중에 DataLake 데이터베이스를 초기화하지 않도록 했습니다. #88330 (Azat Khuzhin).- 이제
show_data_lake_catalogs_in_system_tables설정이 명시적으로 활성화되어 있는 경우에만 데이터 레이크 카탈로그가 system 내 점검용 테이블에 표시됩니다. #88341 (alesapin). interserver_http_host설정을 따르도록 DatabaseReplicated를 수정했습니다. #88378 (xiaohuanlin).- 이제 프로젝션을 정의하는 컨텍스트에서는 위치 인자를 명시적으로 사용할 수 없도록 했습니다. 해당 내부 쿼리 단계에서는 위치 인자가 적절하지 않기 때문입니다. 이 변경으로 #48604가 수정되었습니다. #88380 (Amos Bird).
countMatches함수의 제곱 시간 복잡도를 수정합니다. #88400을(를) 종료합니다. #88401 (Alexey Milovidov).- KeeperMap 테이블에 대한
ALTER COLUMN ... COMMENT명령이 복제되어 Replicated 데이터베이스 메타데이터에 커밋되고 모든 레플리카로 전파되도록 했습니다. #88077을(를) 해결합니다. #88408 (Eduard Karacharov). - Database Replicated에서 materialized view에 대해 잘못 검출된 순환 종속성(false cyclic dependency) 때문에 데이터베이스에 새 레플리카를 추가하지 못하던 문제를 수정했습니다. #88423 (Nikolay Degterinsky).
group_by_overflow_mode가any로 설정된 경우 희소 컬럼의 집계 동작을 수정했습니다. #88440 (Eduard Karacharov).query_plan_use_logical_join_step=0설정에서 여러 개의 FULL JOIN USING 절을 사용할 때 발생하던 "column not found" 오류를 수정했습니다. #88103을(를) 해결했습니다. #88473 (Vladimir Cherkasov).- 노드 수가 10보다 큰 대규모 클러스터에서는 복원 시 다음 오류와 함께 실패할 확률이 높습니다:
[941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again.num_hosts노드는 여러 호스트에서 동시에 덮어씁니다. 이 수정으로 시도 횟수를 제어하는 설정이 동적으로 동작하도록 변경되었습니다. #87721 이슈를 해결합니다. #88484 (Mikhail f. Shiryaev). - 이 PR은 23.8 및 그 이전 버전과의 호환성을 확보하기 위한 것입니다. 호환성 문제는 다음 PR에서 발생했습니다: https://github.com/ClickHouse/ClickHouse/pull/54240 이 SQL은
enable_analyzer=0일 때 실패합니다(23.8 이전 버전에서는 정상 동작했습니다). #88491 (JIaQi). - 큰 값을 DateTime으로 변환할 때
accurateCast오류 메시지에서 발생하던 UBSAN 정수 오버플로를 수정했습니다. #88520 (xiaohuanlin). - Tuple 타입에서 coalescing MergeTree 동작을 수정했습니다. 이로써 #88469가 해결되었습니다. #88526 (scanhex12).
iceberg_format_version=1에 대해서는 삭제를 금지합니다. 이로써 #88444를 해결합니다. #88532 (scanhex12).- 이 패치는 폴더 깊이에 상관없이
plain-rewritable디스크의 이동 동작을 수정합니다. #88586 (Mikhail Artemenko). - *cluster 함수에서 SQL SECURITY DEFINER 동작을 수정합니다. #88588 (Julian Maicher).
- 기반 const PREWHERE 컬럼에 대한 동시 뮤테이션으로 인해 발생할 수 있는 잠재적인 크래시를 수정합니다. #88605 (Azat Khuzhin).
- 텍스트 인덱스에서의 데이터 읽기 동작을 수정하고, 설정
use_skip_indexes_on_data_read및use_query_condition_cache가 활성화된 경우 쿼리 조건 캐시가 사용되도록 했습니다. #88660 (Anton Popov). Poco::Net::HTTPChunkedStreamBuf::readFromDevice에서 발생한Poco::TimeoutException예외로 인해 SIGABRT 시그널과 함께 프로세스가 비정상 종료됩니다. #88668 (Miсhael Stetsyuk).- #88910에 백포트되었습니다: 복구 후 복제된 데이터베이스 레플리카가
Failed to marked query-0004647339 as finished (finished=No node, synced=No node)와 같은 메시지를 오랫동안 출력한 채 멈춰 있을 수 있었던 문제가 수정되었습니다. #88671 (Alexander Tokmakov). - 설정이 다시 로드된 후 ClickHouse가 처음으로 연결되는 경우
system.zookeeper_connection_log에 레코드가 추가되지 않던 문제를 수정했습니다. #88728 (Antonio Andelic). date_time_overflow_behavior = 'saturate'설정이 활성화된 상태에서 DateTime64를 Date로 변환할 때, 시간대를 함께 사용할 경우 범위를 벗어난 값에 대해 잘못된 결과가 나올 수 있던 버그를 수정했습니다. #88737 (Manuel).- 캐시가 활성화된 S3 테이블 엔진 사용 시 발생하는 "having zero bytes error"를 수정하기 위한 N번째 시도. #88740 (Kseniia Sumarokova).
looptable FUNCTION에서 SELECT 시 접근 권한 검증을 수정합니다. #88802 (pufit).- 비동기 로깅이 실패할 때 예외를 처리하여 프로그램이 비정상 종료되는 것을 방지합니다. #88814 (Raúl Marín).
- #89060에 백포트됨: 단일 인자로 호출될 때 임계값 매개변수가 올바르게 적용되도록
top_k를 수정합니다. #88757를 해결합니다. #88867 (Manuel). - #88944에 백포트되었습니다: 함수
reverseUTF8의 버그를 수정했습니다. 이전 버전에서는 길이 4인 UTF-8 코드 포인트의 바이트 순서를 잘못 뒤집었습니다. 이 수정으로 #88913이(가) 해결되었습니다. #88914 (Alexey Milovidov). - #88980에 백포트됨: SQL SECURITY DEFINER로 뷰를 생성할 때
SET DEFINER <current_user>:definer에 대한 접근 권한을 확인하지 않습니다. #88968 (pufit). - #89058에 백포트되었습니다: 부분적인
QBit읽기 최적화 과정에서p가Nullable일 때 반환 타입에서Nullable이 잘못 제거되어L2DistanceTransposed(vec1, vec2, p)에서 발생하던LOGICAL_ERROR를 수정했습니다. #88974 (Raufs Dunamalijevs). - #89167에 백포트되었습니다: 알 수 없는 카탈로그 유형에서 발생하던 크래시를 수정합니다. #88819를 해결합니다. #88987 (scanhex12).
- #89028에 백포트되었습니다: 스키핑 인덱스 분석 시 발생하던 성능 저하를 수정했습니다. #89004 (Anton Popov).
빌드/테스트/패키징 개선
postgres라이브러리 버전 18.0을 사용합니다. #87647 (Konstantin Bogdanov).- FreeBSD에서 ICU를 활성화합니다. #87891 (Raúl Marín).
- 동적 디스패치를 SSE 4가 아니라 SSE 4.2 대상으로 사용할 때, SSE 4.2를 사용합니다. #88029 (Raúl Marín).
Speculative Store Bypass Safe를 사용할 수 없는 경우NO_ARMV81_OR_HIGHER플래그를 요구하지 않습니다. #88051 (Konstantin Bogdanov).- ClickHouse가
ENABLE_LIBFIU=OFF설정으로 빌드된 경우, failpoint 관련 함수는 no-op(실질적인 동작을 수행하지 않음)이 되어 더 이상 성능에 영향을 줄 수 없습니다. 이 경우SYSTEM ENABLE/DISABLE FAILPOINT쿼리는SUPPORT_IS_DISABLED오류를 반환합니다. #88184 (c-end).
ClickHouse 25.9 릴리스, 2025-09-25
하위 호환되지 않는 변경 사항
- IPv4/IPv6에 대한 의미 없는 이진 연산을 비활성화합니다: IPv4/IPv6 값과 비정수 타입 간의 더하기/빼기 연산이 비활성화됩니다. 이전에는 부동 소수점 타입과의 연산을 허용했고, 일부 다른 타입(예: DateTime)에 대해서는 논리적 오류를 발생시켰습니다. #86336 (Raúl Marín).
allow_dynamic_metadata_for_data_lakes설정을 사용 중단(deprecate)합니다. 이제 모든 Iceberg 테이블은 각 쿼리를 실행하기 전에 스토리지에서 최신 테이블 스키마를 가져오려고 시도합니다. #86366 (Daniil Ivanik).OUTER JOIN ... USING절에서 coalesced 컬럼(병합된 컬럼)을 해석하는 방식을 더 일관성 있게 변경했습니다. 이전에는 OUTER JOIN에서 USING 컬럼과 한정된 컬럼(a, t1.a, t2.a)을 함께 선택할 경우, USING 컬럼이 잘못t1.a로 해석되어, 왼쪽에 매칭이 없는 오른쪽 테이블의 행에 대해 0/NULL을 표시했습니다. 이제 USING 절의 식별자는 항상 coalesced 컬럼으로 해석되고, 한정된 식별자는 쿼리에 어떤 다른 식별자가 존재하는지와 상관없이 coalesced되지 않은 컬럼으로 해석됩니다. 예: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- 이전: a=0, t1.a=0, t2.a=2 (잘못됨 - 'a'가 t1.a로 해석됨) -- 이후: a=2, t1.a=0, t2.a=2 (올바름 - 'a'는 coalesced 컬럼임). #80848 (Vladimir Cherkasov).- 복제된 중복 제거(deduplication) 윈도우를 최대 10000까지 늘렸습니다. 기능적으로는 완전히 호환되지만, 테이블 수가 매우 많은 경우 이 변경으로 인해 리소스 소비가 커질 수 있는 시나리오가 있을 수 있습니다. #86820 (Sema Checherinda).
신기능
- 이제 NATS 엔진에서
nats_stream및nats_consumer의 새로운 설정을 지정하여 NATS JetStream을 사용해 메시지를 처리할 수 있습니다. #84799 (Dmitry Novikov). arrowFlight테이블 함수에 인증 및 SSL 지원이 추가되었습니다. #87120 (Vitaly Baranov).storage_class_name이라는 이름의 새 매개변수를S3테이블 엔진과s3테이블 함수에 추가하여 AWS에서 지원하는 Intelligent-Tiering을 지정할 수 있도록 했습니다. 이 매개변수는 키-값 형식과 위치 지정(더 이상 사용되지 않는) 형식 모두에서 지원됩니다. #87122 (alesapin).- Iceberg 테이블 엔진에서
ALTER UPDATE지원. #86059 (scanhex12). - SELECT SQL 문을 실행할 때 Iceberg 메타데이터 파일을 조회할 수 있도록
iceberg_metadata_log시스템 테이블을 추가합니다. #86152 (scanhex12). Iceberg및DeltaLake테이블에서 스토리지 레벨 설정인disk를 통해 사용자 지정 디스크 구성을 지원합니다. #86778 (scanhex12).- 데이터 레이크 디스크에 Azure 지원을 추가했습니다. #87173 (scanhex12).
- Azure Blob Storage를 기반으로 한
Unity카탈로그를 지원합니다. #80013 (Smita Kulkarni). Iceberg쓰기에서 더 많은 포맷(ORC,Avro)을 지원합니다. 이로써 #86179가 해결되었습니다. #87277 (scanhex12).- 데이터베이스 레플리카 관련 정보를 포함하는 새 시스템 테이블
database_replicas를 추가합니다. #83408 (Konstantin Morozov). - 하나의 배열에서 다른 배열을 집합으로 간주해 빼는 함수
arrayExcept가 추가되었습니다. #82368 (Joanna Hulboj). - 새로운
system.aggregated_zookeeper_log테이블을 추가합니다. 이 테이블에는 세션 ID, 상위 경로, 연산 유형을 기준으로 그룹화된 ZooKeeper 연산의 통계(예: 연산 수, 평균 지연 시간, 오류)가 포함되며, 주기적으로 디스크에 플러시됩니다. #85102 #87208 (Miсhael Stetsyuk). - 새로운 FUNCTION
isValidASCII가 추가되었습니다. 입력 문자열 또는 FixedString이 ASCII 바이트(0x00–0x7F)만 포함하는 경우 1을, 그렇지 않으면 0을 반환합니다. 이로써 #85377 이슈가 해결되었습니다. ... #85786 (rajat mohan). - Boolean 설정은 인자를 지정하지 않고도 사용할 수 있습니다. 예를 들어
SET use_query_cache;처럼 사용할 수 있으며, 이는 true 값으로 설정하는 것과 동일합니다. #85800 (thraeka). - 새 구성 옵션인
logger.startupLevel및logger.shutdownLevel을 통해 ClickHouse의 시작 및 종료 시 로그 레벨을 각각 재정의할 수 있습니다. #85967 (Lennard Eijsackers). - 집계 함수
timeSeriesChangesToGrid및timeSeriesResetsToGrid입니다. 시작 타임스탬프, 종료 타임스탬프, 스텝, 조회(look back) 윈도우에 대한 매개변수와 타임스탬프와 값에 대한 두 개의 인자를 받는다는 점에서timeSeriesRateToGrid와 유사하게 동작하지만, 윈도우당 최소 2개의 샘플이 아닌 최소 1개의 샘플만 요구합니다. 매개변수로 정의된 타임 그리드의 각 타임스탬프에 대해, 지정된 윈도우 내에서 샘플 값이 변경되거나 감소한 횟수를 세는 PromQLchanges/resets를 계산합니다. 반환 타입은Array(Nullable(Float64))입니다. #86010 (Stephen Chi). - 임시 테이블과 유사한 구문으로
CREATE TEMPORARY VIEW를 사용해 임시 뷰를 생성할 수 있도록 합니다. #86432 (Aly Kafoury). - CPU 및 메모리 사용량에 대한 경고를
system.warnings테이블에 추가했습니다. #86838 (Bharat Nallan). Protobuf입력에서oneof인디케이터를 지원합니다. 특수 컬럼을 사용해 oneof의 어떤 부분이 설정되어 있는지 나타낼 수 있습니다. 메시지에 oneof가 포함되어 있고input_format_protobuf_oneof_presence가 설정되어 있으면, ClickHouse는 oneof에서 어떤 필드가 발견되었는지를 나타내는 컬럼을 채웁니다. #82885 (Ilya Golshtein).- jemalloc의 내부 도구를 기반으로 한 메모리 할당 프로파일링을 개선했습니다. 전역 jemalloc 프로파일러는 이제
jemalloc_enable_global_profiler설정으로 활성화할 수 있습니다. 샘플링된 전역 메모리 할당 및 해제 정보는jemalloc_collect_global_profile_samples_in_trace_log설정을 활성화하면JemallocSample타입으로system.trace_log에 저장할 수 있습니다. jemalloc 프로파일링은 이제jemalloc_enable_profiler설정을 사용해 쿼리별로 독립적으로 활성화할 수 있습니다.system.trace_log에 샘플을 저장하는 동작은jemalloc_collect_profile_samples_in_trace_log설정을 사용해 쿼리 단위로 제어할 수 있습니다. jemalloc을 최신 버전으로 업데이트했습니다. #85438 (Antonio Andelic). - Iceberg 테이블을 DROP할 때 파일을 삭제하는 새로운 설정이 추가되었습니다. 이로써 #86211이 해결되었습니다. #86501 (scanhex12).
실험적 기능
- 역방향 텍스트 인덱스를 RAM에 모두 적재되지 않는 대규모 데이터셋에도 확장 가능하도록 처음부터 다시 구현했습니다. #86485 (Anton Popov).
- 조인 재정렬에서 이제 통계를 사용합니다. 이 기능은
allow_statistics_optimize = 1및query_plan_optimize_join_order_limit = 10으로 설정하여 활성화할 수 있습니다. #86822 (Han Fei). alter table ... materialize statistics all를 지원하여 테이블의 모든 통계를 구체화할 수 있습니다. #87197 (Han Fei).
성능 개선
- 데이터 읽기 시 skip 인덱스를 사용하여 데이터 파트를 필터링해 불필요한 인덱스 읽기를 줄일 수 있도록 지원합니다. 새 설정
use_skip_indexes_on_data_read(기본값은 비활성화)으로 제어됩니다. #75774를 해결합니다. 또한 #81021과 공통으로 사용하는 기반 작업 일부를 포함합니다. #81526 (Amos Bird). query_plan_optimize_join_order_limit설정으로 제어되는 JOIN 순서 최적화를 추가했습니다. 이 최적화는 조인 순서를 자동으로 재정렬해 성능을 향상합니다. 다만 현재 조인 순서 최적화는 STATISTICS 지원이 제한적이며, 주로 스토리지 엔진에서 제공하는 행 수 추정값에 의존합니다. 더 정교한 STATISTICS 수집과 카디널리티 추정 기능은 향후 릴리스에 추가될 예정입니다. 업그레이드 이후 JOIN 쿼리에 문제가 발생하는 경우,SET query_plan_use_new_logical_join_step = 0으로 설정해 새 구현을 일시적으로 비활성화한 뒤, 조사를 위해 문제를 보고하십시오. USING 절에서 식별자 해석에 대한 참고 사항:OUTER JOIN ... USING절에서 병합된(coalesced) 컬럼을 해석하는 방식을 더 일관되게 변경했습니다. 이전에는 OUTER JOIN에서 USING 컬럼과 한정된(qualified) 컬럼(a, t1.a, t2.a)을 함께 선택하는 경우, USING 컬럼이 잘못t1.a로 해석되어 오른쪽 테이블에서 왼쪽 매칭이 없는 행에 대해 0/NULL을 표시했습니다. 이제 USING 절의 식별자는 항상 병합된 컬럼으로 해석되고, 한정된 식별자는 쿼리에 어떤 다른 식별자가 존재하더라도 비병합(non-coalesced) 컬럼으로 해석됩니다. 예를 들어: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- Before: a=0, t1.a=0, t2.a=2 (잘못됨 - 'a'가 t1.a로 해석됨) -- After: a=2, t1.a=0, t2.a=2 (정상 - 'a'는 병합된 컬럼임). #80848 (Vladimir Cherkasov).- 데이터 레이크를 위한 분산
INSERT SELECT. #86783 (scanhex12). func(primary_column) = 'xx'및column in (xxx)와 같은 조건을 사용하는 PREWHERE 최적화를 개선합니다. #85529 (李扬).- JOIN 재작성 최적화를 구현했습니다. 1. 매칭된 행 또는 매칭되지 않은 행에 대해 필터 조건이 항상 거짓인 경우
LEFT ANY JOIN및RIGHT ANY JOIN을SEMI/ANTIJOIN으로 변환합니다. 이 최적화는 새로운 설정query_plan_convert_any_join_to_semi_or_anti_join으로 제어됩니다. 2. 한쪽에서 매칭되지 않은 행에 대해 필터 조건이 항상 거짓인 경우FULL ALL JOIN을LEFT ALL또는RIGHT ALLJOIN으로 변환합니다. #86028 (Dmitry Novik). - 경량한 삭제를 실행한 후 수직 병합 성능이 향상되었습니다. #86169 (Anton Popov).
LEFT/RIGHT조인에서 일치하지 않는 행이 매우 많은 경우HashJoin성능이 소폭 개선되었습니다. #86312 (Nikita Taranov).- Radix sort: 컴파일러가 SIMD를 활용하여 프리페칭 성능을 개선하도록 합니다. Intel CPU에서만 소프트웨어 프리페칭을 사용하기 위해 동적 디스패치를 사용합니다. https://github.com/ClickHouse/ClickHouse/pull/77029에서 @taiyang-li가 수행한 작업을 이어가는 변경입니다. #86378 (Raúl Marín).
- 테이블에 파트가 많이 있는 경우의 짧은 쿼리 성능을 향상합니다 (
deque대신devector를 사용하여MarkRanges를 최적화). #86933 (Azat Khuzhin). - 조인 모드에서 패치 파트를 적용하는 작업의 성능을 개선했습니다. #87094 (Anton Popov).
query_condition_cache_selectivity_threshold설정(기본값: 1.0)이 추가되었습니다. 이 설정은 선택도가 낮은 프레디케이트의 스캔 결과를 쿼리 조건 캐시에 삽입 대상에서 제외합니다. 이를 통해 쿼리 조건 캐시의 메모리 사용량을 줄일 수 있으나, 캐시 적중률이 낮아질 수 있습니다. #86076 (zhongyuankai).- Iceberg 쓰기 시 메모리 사용량을 줄였습니다. #86544 (scanhex12).
개선 사항
- 단일 삽입에서 Iceberg에 여러 데이터 파일을 작성하는 기능을 지원합니다. 제한을 제어하기 위한 새로운 설정
iceberg_insert_max_rows_in_data_file및iceberg_insert_max_bytes_in_data_file를 추가합니다. #86275 (scanhex12). - Delta Lake에 삽입되는 데이터 파일에 대해 행 수/바이트 수 제한을 추가합니다.
delta_lake_insert_max_rows_in_data_file및delta_lake_insert_max_bytes_in_data_file설정으로 제어됩니다. #86357 (Kseniia Sumarokova). - Iceberg 쓰기 작업에서 파티션에 대해 더 다양한 타입을 지원합니다. 이는 #86206를 해결합니다. #86298 (scanhex12).
- S3 재시도 전략을 구성 가능하도록 하고, config XML 파일을 변경하면 S3 디스크 설정을 재시작 없이 실시간으로 재적용(핫 리로드)할 수 있도록 했습니다. #82642 (RinChanNOW).
- S3(Azure)Queue 테이블 엔진이 ZooKeeper 연결이 끊기더라도 잠재적인 중복 없이 계속 동작할 수 있도록 개선했습니다. 이를 위해 S3Queue setting
use_persistent_processing_nodes를 활성화해야 합니다(ALTER TABLE MODIFY SETTING으로 변경 가능). #85995 (Kseniia Sumarokova). - materialized view를 생성할 때
TO뒤에 쿼리 매개변수를 사용할 수 있습니다. 예를 들어CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table와 같이 사용할 수 있습니다. #84899 (Diskein). Kafka2테이블 엔진에 잘못된 설정이 지정되었을 때 사용자를 위한 더 명확한 안내가 제공됩니다. #83701 (János Benjamin Antal).Time타입에 대해 시간대를 지정하는 것은 더 이상 허용되지 않습니다(의미가 없었기 때문입니다). #84689 (Yarik Briukhovetskyi).best_effort모드에서 Time/Time64 파싱 로직을 단순화하여, 이 과정에서 발생할 수 있던 몇 가지 버그를 방지했습니다. #84730 (Yarik Briukhovetskyi).deltaLakeAzure함수의 클러스터 모드용 버전인deltaLakeAzureCluster함수와,deltaLakeCluster함수의 별칭인deltaLakeS3Cluster함수를 추가했습니다. #85358을(를) 해결했습니다. #85547 (Smita Kulkarni).- 백업과 동일한 방식으로 일반적인 복사 작업에도
azure_max_single_part_copy_sizeSETTING을 적용합니다. #85767 (Ilya Golshtein). - S3 객체 스토리지에서 재시도 가능한 오류가 발생할 경우 S3 클라이언트 스레드를 지연시킵니다. 이 설정은 이전
backup_slow_all_threads_after_retryable_s3_errorSETTING을 확장하여 S3 디스크에도 적용되도록 하고, 보다 일반적인 이름인s3_slow_all_threads_after_retryable_error로 변경합니다. #85918 (Julia Kartseva). allow_experimental_variant/dynamic/json및enable_variant/dynamic/json설정을 사용 중단(폐기) 대상으로 표시했습니다. 이제 이 세 가지 설정은 모두 조건 없이 항상 활성화됩니다. #85934 (Pavel Kruglov).http_handlers에서 전체 URL 문자열(스키마와 host:port 포함)을 기준으로 필터링할 수 있도록full_url지시어를 지원합니다. #86155 (Azat Khuzhin).- 새 설정
allow_experimental_delta_lake_writes를 추가했습니다. #86180 (Kseniia Sumarokova). - init.d 스크립트에서 systemd 감지 로직을 수정하여 「Install packages」 검사 항목을 올바르게 수행합니다. #86187 (Azat Khuzhin).
- 새로운
startup_scripts_failure_reason차원 메트릭을 추가합니다. 이 메트릭은 startup 스크립트 실패를 초래하는 서로 다른 오류 유형을 구분하는 데 필요합니다. 특히 경고 설정 목적상 일시적 오류(예:MEMORY_LIMIT_EXCEEDED또는KEEPER_EXCEPTION)와 비일시적 오류를 구분할 수 있어야 합니다. #86202 (Miсhael Stetsyuk). - Iceberg 테이블 파티션에서
identity함수를 생략할 수 있도록 했습니다. #86314 (scanhex12). - 특정 채널에만 JSON 로깅을 활성화할 수 있는 기능이 추가되었습니다. 이를 위해
logger.formatting.channel을syslog/console/errorlog/log중 하나로 설정하십시오. #86331 (Azat Khuzhin). WHERE절에서 네이티브 숫자를 사용할 수 있도록 허용합니다. 이미 논리 함수의 인수로는 사용할 수 있습니다. 이를 통해 filter-push-down 및 move-to-prewhere 최적화가 단순화됩니다. #86390 (Nikolai Kochetov).- 메타데이터가 손상된 Catalog에서
SYSTEM DROP REPLICA를 실행할 때 발생하던 오류를 수정했습니다. #86391 (Nikita Mikhaylov). - Azure에서 디스크 액세스 검사(
skip_access_check = 0) 시 액세스 권한을 프로비저닝하는 데 상당한 시간이 걸릴 수 있으므로 재시도 횟수를 늘렸습니다. #86419 (Alexander Tokmakov). timeSeries*()FUNCTION의 staleness 윈도우를 좌측-개방(left-open), 우측-폐쇄(right-closed) 구간으로 변경합니다. #86588 (Vitaly Baranov).FailedInternal*Query프로파일 이벤트를 추가했습니다. #86627 (Shane Andrade).- 구성 파일을 통해 추가되는 경우 이름에 점(.)이 포함된 사용자 처리 방식을 수정합니다. #86633 (Mikhail Koviazin).
- 쿼리 메모리 사용량을 위한 비동기 메트릭(
QueriesMemoryUsage및QueriesPeakMemoryUsage)을 추가했습니다. #86669 (Azat Khuzhin). clickhouse-benchmark --precise플래그를 사용하면 QPS 및 기타 구간별 메트릭을 보다 정밀하게 보고할 수 있습니다. 쿼리 실행 시간이 보고 간격--delay D와 비슷한 경우에도 일관된 QPS를 확보하는 데 도움이 됩니다. #86684 (Sergei Trifonov).- Linux 스레드의 nice 값을 설정 가능하게 하여 일부 스레드(merge/mutate, 쿼리, materialized view, zookeeper client)에 더 높거나 낮은 우선순위를 부여할 수 있도록 했습니다. #86703 (Miсhael Stetsyuk).
- 경쟁 상태(race condition)로 인해 멀티파트 업로드에서 원래 예외가 손실될 때 발생하던, 오해를 불러일으킬 수 있는 「specified upload does not exist」 오류를 수정했습니다. #86725 (Julia Kartseva).
EXPLAIN쿼리에서 쿼리 플랜 설명 길이를 제한합니다.EXPLAIN이 아닌 쿼리에는 설명을 계산하지 않습니다.query_plan_max_step_description_length설정을 추가했습니다. #86741 (Nikolai Kochetov).CANNOT_CREATE_TIMER문제(query profiler용query_profiler_real_time_period_ns/query_profiler_cpu_time_period_ns)를 완화하기 위해 대기 중인 시그널을 조정할 수 있는 기능을 추가합니다. 또한 내부 상태 분석을 위해/proc/self/status에서SigQ를 수집합니다(ProcessSignalQueueSize가ProcessSignalQueueLimit에 가까우면CANNOT_CREATE_TIMER오류가 발생할 가능성이 높습니다). #86760 (Azat Khuzhin).- Keeper에서
RemoveRecursive요청의 성능이 향상되었습니다. #86789 (Antonio Andelic). - JSON 타입 출력 시
PrettyJSONEachRow에서 불필요한 공백을 제거합니다. #86819 (Pavel Kruglov). - 이제 plain 타입의 재기록 가능 디스크에서 디렉터리가 제거될 때
prefix.path에 대한 blob 크기를 기록합니다. #86908 (alesapin). - 원격 ClickHouse 인스턴스(ClickHouse Cloud 포함)에 대한 성능 테스트를 지원합니다. 사용 예:
tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user <username> --password <password> --host <hostname> --port <port> --secure. #86995 (Raufs Dunamalijevs). - 상당한 양(16MiB 초과)의 메모리를 할당하는 것으로 알려진 일부 연산(정렬, 비동기 삽입, 파일 로그)에서 메모리 제한을 준수하도록 했습니다. #87035 (Azat Khuzhin).
network_compression_method설정이 지원되는 일반 코덱이 아닐 경우 예외를 발생시킵니다. #87097 (Robert Schulze).- 시스템 테이블
system.query_cache는 이제 모든 쿼리 결과 캐시 엔트리를 반환하며, 이전에는 공유 엔트리 또는 동일한 사용자와 역할에 속한 비공유 엔트리만 반환했습니다. 비공유 엔트리는 쿼리 결과를 노출하지 않도록 설계되어 있으며,system.query_cache는 쿼리 문자열만을 반환하므로 이러한 동작 변경은 안전합니다. 이로 인해 해당 시스템 테이블의 동작이system.query_log와 더 유사해졌습니다. #87104 (Robert Schulze). parseDateTime함수에 대해 단락 평가를 활성화합니다. #87184 (Pavel Kruglov).system.parts_columns테이블에 새 컬럼statistics를 추가했습니다. #87259 (Han Fei).
버그 수정(공식 안정 릴리스에서 사용자가 직접 확인할 수 있는 오동작)
- 복제 데이터베이스와 내부 복제 테이블에서 ALTER 쿼리의 결과는 쿼리를 시작한 노드에서만 검증됩니다. 이를 통해 이미 커밋된 ALTER 쿼리가 다른 노드에서 멈춰 버리던 상황을 해결합니다. #83849 (János Benjamin Antal).
BackgroundSchedulePool에서 유형별 태스크 개수를 제한합니다. 하나의 유형 태스크가 모든 슬롯을 차지하여 다른 태스크가 계속 대기만 하게 되는 상황을 방지합니다. 또한 태스크들이 서로의 완료를 기다리며 교착 상태에 빠지는 것도 방지합니다. 이는background_schedule_pool_max_parallel_tasks_per_type_ratio서버 SETTING으로 제어됩니다. #84008 (Alexander Tokmakov).- 데이터베이스 레플리카를 복구할 때 테이블이 정상적으로 종료되도록 수정했습니다. 비정상 종료로 인해 데이터베이스 레플리카 복구 중 일부 테이블 엔진에서 LOGICAL_ERROR가 발생할 수 있었습니다. #84744 (Antonio Andelic).
- 데이터베이스 이름에 대한 철자 수정 제안을 생성할 때 액세스 권한을 검사합니다. #85371 (Dmitry Novik).
-
- hive 컬럼에 대해 LowCardinality 사용 2. 가상 컬럼보다 먼저 hive 컬럼을 채움(https://github.com/ClickHouse/ClickHouse/pull/81040 에 필요함) 3. hive에서 빈 포맷일 때 LOGICAL_ERROR 발생 #85528 4. hive 파티션 컬럼만 존재하는지 확인하는 검사 로직 수정 5. 모든 hive 컬럼이 스키마에 지정되어 있는지 검증(assert) 6. hive가 있는 parallel_replicas_cluster에 대한 부분 수정 7. hive utils의 extractkeyValuePairs에서 순서가 있는 컨테이너 사용(https://github.com/ClickHouse/ClickHouse/pull/81040 에 필요함). #85538 (Arthur Passos).
- 배열 매핑을 사용할 때 오류가 발생하던 문제를 방지하기 위해
IN함수의 첫 번째 인수에 대한 불필요한 최적화를 수행하지 않도록 했습니다. #85546 (Yakov Olkhovskiy). - Parquet 파일이 작성될 때 Iceberg source ID와 Parquet 이름 사이의 매핑이 스키마에 맞게 조정되지 않았습니다. 이 PR은 현재 스키마가 아니라 각 Iceberg 데이터 파일에 해당하는 스키마를 처리합니다. #85829 (Daniil Ivanik).
- 파일을 여는 과정과는 별도로 파일 크기를 읽던 동작을 수정합니다. 이는
5.10릴리스 이전 Linux 커널의 버그에 대응하여 도입된 https://github.com/ClickHouse/ClickHouse/pull/33372 와 관련이 있습니다. #85837 (Konstantin Bogdanov). - 이제 커널 수준에서 IPv6가 비활성화된 시스템(예: ipv6.disable=1로 설정된 RHEL)에서 ClickHouse Keeper가 더 이상 시작하지 못하는 문제가 발생하지 않습니다. 초기 IPv6 리스너 설정에 실패하면 IPv4 리스너로의 전환을 시도합니다. #85901 (jskong1124).
- 이 PR로 #77990 이슈가 해결되었습니다. globalJoin에서 병렬 레플리카에 대한 TableFunctionRemote 지원이 추가되었습니다. #85929 (zoomxi).
- orcschemareader::initializeifneeded()에서 null 포인터 문제를 수정합니다. 이 PR은 다음 이슈를 해결합니다: #85292 ### 사용자에게 표시되는 변경 사항에 대한 문서 항목입니다. #85951 (yanglongwei).
- 외부 쿼리의 컬럼을 참조하는 경우에만 FROM 절에서 상관 서브쿼리를 허용하도록 검사를 추가했습니다. #85469 및 #85402를 수정했습니다. #85966 (Dmitry Novik).
- 다른 컬럼의 구체화된 표현식에서 사용되는 서브컬럼을 포함하는 컬럼에 대한 ALTER UPDATE 동작을 수정했습니다. 이전에는 표현식에 서브컬럼이 포함된 구체화된 컬럼(materialized column)이 올바르게 업데이트되지 않았습니다. #85985 (Pavel Kruglov).
- PK 또는 파티션 표현식에서 하위 컬럼이 사용되는 컬럼을 변경하는 것을 금지합니다. #86005 (Pavel Kruglov).
- storage DeltaLake에서 기본이 아닌 컬럼 매핑 모드로 서브컬럼을 읽을 때의 동작을 수정했습니다. #86064 (Kseniia Sumarokova).
- JSON 내에서 Enum 힌트가 지정된 경로에 잘못된 기본값이 사용되던 문제를 수정합니다. #86065 (Pavel Kruglov).
- 입력값 정제를 적용하여 DataLake Hive 카탈로그 URL 파싱을 수정했습니다. #86018을 해결합니다. #86092 (rajat mohan).
- 파일 시스템 캐시의 동적 크기 조정 과정에서 발생하는 논리 오류를 수정합니다. #86122를 해결합니다. https://github.com/ClickHouse/clickhouse-core-incidents/issues/473 이슈를 해결합니다. #86130 (Kseniia Sumarokova).
- DatabaseReplicatedSettings에서
logs_to_keep에 대해NonZeroUInt64를 사용하도록 했습니다. #86142 (Tuan Pham Anh). - 테이블(예:
ReplacingMergeTree)이index_granularity_bytes = 0설정으로 생성된 경우, skip 인덱스를 사용하는FINAL쿼리에서 예외가 발생하던 문제가 있었습니다. 이 예외는 이제 수정되었습니다. #86147 (Shankar Iyer). - UB를 제거하고 Iceberg 파티션 표현식의 파싱 문제를 수정합니다. #86166 (Daniil Ivanik).
- 하나의 INSERT에 const 블록과 non-const 블록이 동시에 포함된 경우 발생하는 크래시를 수정합니다. #86230 (Azat Khuzhin).
- SQL에서 디스크를 생성할 때
/etc/metrika.xml에 정의된 include를 기본적으로 처리합니다. #86232 (alekar). - String에서 JSON으로 변환하는 accurateCastOrNull/accurateCastOrDefault를 수정합니다. #86240 (Pavel Kruglov).
- iceberg 엔진에서 '/'가 없는 디렉터리를 지원합니다. #86249 (scanhex12).
- replaceRegex에서 FixedString haystack과 빈 needle을 사용할 때 발생하던 충돌 문제를 수정했습니다. #86270 (Raúl Marín).
- ALTER UPDATE에서 널 허용(JSON)을 사용할 때 발생하던 크래시를 수정합니다. #86281 (Pavel Kruglov).
- system.tables에서 누락된 컬럼 정의자 문제를 수정했습니다. #86295 (Raúl Marín).
- LowCardinality(널 허용(T))에서 Dynamic으로의 형 변환을 수정했습니다. #86365 (Pavel Kruglov).
- DeltaLake에 대한 쓰기 작업 시 발생하던 논리 오류를 수정했습니다. #86175를 해결합니다. #86367 (Kseniia Sumarokova).
- plain_rewritable 디스크에서 Azure blob storage의 빈 blob을 읽을 때 발생하던
416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resource오류를 수정했습니다. #86400 (Julia Kartseva). - GROUP BY에서 널 허용(JSON) 처리 문제를 수정했습니다. #86410 (Pavel Kruglov).
- materialized view에서 발생하던 버그를 수정했습니다. 동일한 이름으로 materialized view를 생성한 뒤 삭제한 다음, 다시 생성하면 동작하지 않을 수 있는 문제가 있었습니다. #86413 (Alexander Tokmakov).
- *cluster 함수에서 읽을 때 모든 레플리카를 사용할 수 없으면 실패하도록 변경했습니다. #86414 (Julian Maicher).
Buffer테이블로 인해 발생하던MergesMutationsMemoryTracking누수 문제를 수정하고,Kafka(및 기타 소스)에서의 스트리밍을 위한query_views_log를 수정했습니다. #86422 (Azat Khuzhin).- 별칭 저장소의 참조 테이블을 드롭한 후
SHOW TABLES의 동작을 수정했습니다. #86433 (RinChanNOW). send_chunk_header설정이 활성화된 상태에서 HTTP 프로토콜을 통해 UDF가 호출될 때 누락되던 청크 헤더 문제가 수정되었습니다. #86469 (Vladimir Cherkasov).- jemalloc 프로파일 플러시가 활성화된 경우 발생할 수 있는 잠재적인 교착 상태를 수정했습니다. #86473 (Azat Khuzhin).
- DeltaLake 테이블 엔진에서 서브컬럼을 읽는 기능을 수정합니다. 관련 이슈 #86204를 해결합니다. #86477 (Kseniia Sumarokova).
- DDL 작업 처리 시 충돌을 방지하기 위해 loopback 호스트 ID를 올바르게 처리하도록 했습니다:. #86479 (Tuan Pham Anh).
- numeric/decimal 컬럼이 있는 postgres database engine 테이블에서 detach/attach 동작을 수정합니다. #86480 (Julian Maicher).
- getSubcolumnType에서 초기화되지 않은 메모리 사용을 수정했습니다. #86498 (Raúl Marín).
- 이제
searchAny및searchAllFUNCTION을 needle 인수에 빈 값을 전달해 호출하면true(즉, 「모든 값과 일치(matches everything)」)를 반환합니다. 이전에는false를 반환했습니다. (issue #86300). #86500 (Elmi Ahmadov). - 첫 번째 버킷에 값이 없는 경우
timeSeriesResampleToGridWithStaleness()함수가 올바르게 동작하도록 수정합니다. #86507 (Vitaly Baranov). merge_tree_min_read_task_size가 0으로 설정된 경우 발생하던 크래시를 수정했습니다. #86527 (yanglongwei).- 데이터를 읽을 때 각 데이터 파일의 형식을 Iceberg 메타데이터에서 가져오도록 변경되었습니다(이전에는 테이블 인수에서 가져왔습니다). #86529 (Daniil Ivanik).
- 종료 시 로그 플러시 중 발생하는 예외를 무시하여 종료 절차를 더 안전하게 하였습니다(SIGSEGV 발생을 방지하기 위해). #86546 (Azat Khuzhin).
- 크기가 0바이트인 파트 파일이 포함된 쿼리에서 Backup DB 엔진이 예외를 발생시키던 문제를 수정합니다. #86563 (Max Justus Spransy).
send_chunk_header가 활성화된 상태에서 HTTP 프로토콜을 통해 UDF를 호출할 때 청크 헤더가 누락되는 문제를 수정합니다. #86606 (Vladimir Cherkasov).- Keeper 세션 만료로 인해 발생했던 S3Queue 논리 오류 「Expected current processor to be equal to 」를 수정했습니다. #86615 (Kseniia Sumarokova).
- INSERT 및 프루닝에서 발생하던 Nullability 관련 버그를 수정했습니다. #86407을(를) 해결합니다. #86630 (scanhex12).
- Iceberg metadata cache가 비활성화된 경우 파일 시스템 캐시가 비활성화되지 않도록 했습니다. #86635 (Daniil Ivanik).
- Parquet reader v3에서 발생하던 'Deadlock in Parquet::ReadManager (single-threaded)' 오류를 수정했습니다. #86644 (Michael Kolupaev).
- ArrowFlight의
listen_host에서 IPv6 지원 문제를 수정했습니다. #86664 (Vitaly Baranov). ArrowFlight핸들러의 종료 처리를 수정합니다. 이 PR은 #86596 이슈를 해결합니다. #86665 (Vitaly Baranov).describe_compact_output=1설정 시 분산 쿼리 처리를 수정합니다. #86676 (Azat Khuzhin).- 윈도 정의 구문 분석 및 쿼리 매개변수 적용을 수정합니다. #86720 (Azat Khuzhin).
PARTITION BY로 테이블을 생성하되 파티션 와일드카드를 사용하지 않는 경우, 25.8 이전 버전에서는 정상적으로 동작하던 것이Partition strategy wildcard can not be used without a '_partition_id' wildcard.예외가 발생하던 문제를 수정합니다. https://github.com/ClickHouse/clickhouse-private/issues/37567 이슈를 해결합니다. #86748 (Kseniia Sumarokova).- 병렬 쿼리가 단일 잠금을 동시에 획득하려고 할 때 발생할 수 있는 LogicalError를 수정했습니다. #86751 (Pervakov Grigorii).
- RowBinary 입력 포맷에서 JSON 공유 데이터에 NULL이 기록되던 문제를 수정하고, ColumnObject에 추가적인 검증을 도입합니다. #86812 (Pavel Kruglov).
- 비어 있는
Tuple에서LIMIT을 사용할 때의 순열 동작을 수정합니다. #86828 (Pavel Kruglov). - persistent processing 노드에 대해 별도의 Keeper 노드를 사용하지 않도록 했습니다. https://github.com/ClickHouse/ClickHouse/pull/85995에 대한 수정입니다. #86406을(를) 해결합니다. #86841 (Kseniia Sumarokova).
- TimeSeries 엔진 테이블이 Replicated Database에서 새 레플리카를 생성하지 못하게 하던 문제를 수정합니다. #86845 (Nikolay Degterinsky).
- 일부 Keeper 노드가 누락된 작업이 있는 경우
system.distributed_ddl_queue쿼리 시 동작을 수정했습니다. #86848 (Antonio Andelic). - 압축 해제된 블록 끝부분에서의 시킹(seek) 동작을 수정했습니다. #86906 (Pavel Kruglov).
- Iceberg Iterator를 비동기 실행하는 동안 발생하는 프로세스 예외를 처리합니다. #86932 (Daniil Ivanik).
- 대용량 전처리 XML 설정 파일 저장 문제를 수정했습니다. #86934 (c-end).
- system.iceberg_metadata_log 테이블에서 date 필드 값이 채워지는 동작을 수정합니다. #86961 (Daniil Ivanik).
WHERE와 함께 사용된TTL이 무한히 재계산되던 문제를 수정했습니다. #86965 (Anton Popov).ROLLUP및CUBE수정자를 사용할 때uniqExact함수가 잘못된 결과를 반환할 수 있던 문제를 수정했습니다. #87014 (Nikita Taranov).parallel_replicas_for_cluster_functions설정이 1로 설정된 경우url()테이블 함수로 테이블 스키마를 해석하는 동작을 수정합니다. #87029 (Konstantin Bogdanov).PREWHERE의 출력 값을 여러 단계로 나눈 뒤 올바르게 형변환되도록 수정했습니다. #87040 (Antonio Andelic).ON CLUSTER절 사용 시 발생하던 경량 업데이트 문제를 수정했습니다. #87043 (Anton Popov).- 일부 집계 함수 상태가 String 인자를 사용할 때의 호환성을 수정합니다. #87049 (Pavel Kruglov).
- OpenAI에서 받은 모델 이름(model name)이 전달되지 않던 문제를 수정합니다. #87100 (Kaushik Iska).
- EmbeddedRocksDB: 경로는 반드시 user_files 디렉터리 내부에 있어야 합니다. #87109 (Raúl Marín).
- 25.1 이전에 생성된 KeeperMap 테이블에서 DROP 쿼리를 실행할 때 ZooKeeper에 데이터가 남는 문제를 수정했습니다. #87112 (Nikolay Degterinsky).
- Parquet를 읽을 때 맵 및 배열의 필드 ID를 올바르게 처리하도록 수정했습니다. #87136 (scanhex12).
- 지연 구체화(lazy materialization)에서 배열 크기 서브컬럼을 가진 배열의 읽기 동작을 수정합니다. #87139 (Pavel Kruglov).
- Dynamic 형 인자를 사용하는 CASE 함수의 문제를 수정했습니다. #87177 (Pavel Kruglov).
- CSV에서 빈 문자열에서 빈 배열을 읽는 동작을 수정했습니다. #87182 (Pavel Kruglov).
- 비상관(non-correlated)
EXISTS에서 잘못된 결과가 발생할 수 있는 문제를 수정합니다. 이 문제는 https://github.com/ClickHouse/ClickHouse/pull/85481 에서 도입되어25.8에 영향을 미친execute_exists_as_scalar_subquery=1설정으로 인해 발생했습니다. #86415를 수정합니다. #87207 (Nikolai Kochetov). iceberg_metadata_log이 설정되지 않은 상태에서 사용자가 디버그용 Iceberg 메타데이터 정보를 조회하려고 하면 오류를 발생시키고,nullptr접근 문제를 수정합니다. #87250 (Daniil Ivanik).
빌드/테스트/패키징 개선
- abseil-cpp 20250814.0과의 호환성 문제를 수정합니다. https://github.com/abseil/abseil-cpp/issues/1923. #85970 (Yuriy Chernyshov).
- 독립 실행형 WASM lexer 빌드를 플래그로 제어하도록 합니다. #86505 (Konstantin Bogdanov).
vmull_p64명령을 지원하지 않는 구형 ARM CPU에서 crc32c 빌드를 수정합니다. #86521 (Pablo Marcos).openldap2.6.10을 사용합니다. #86623 (Konstantin Bogdanov).- darwin에서
memalign을 가로채려고 시도하지 않습니다. #86769 (Konstantin Bogdanov). krb51.22.1-final을 사용합니다. #86836 (Konstantin Bogdanov).list-licenses.sh에서 Rust crate 이름을 언패킹하는 로직을 수정합니다. #87305 (Konstantin Bogdanov).
ClickHouse 25.8 LTS 릴리스, 2025-08-28
하위 호환되지 않는 변경 사항
- JSON에서 서로 다른 타입의 값으로 구성된 배열에 대해 이름 없는
Tuple대신Array(Dynamic)을 추론합니다. 이전 동작을 사용하려면input_format_json_infer_array_of_dynamic_from_array_of_different_types설정을 비활성화하십시오. #80859 (Pavel Kruglov). - 일관성과 단순성을 위해 S3 지연 시간 메트릭을 히스토그램으로 변경합니다. #82305 (Miсhael Stetsyuk).
- 복합 식별자로 파싱되는 것을 방지하기 위해, 기본 표현식에서 점(
.)이 포함된 식별자 주위에는 반드시 백틱을 사용해야 합니다. #83162 (Pervakov Grigorii). - 분석기(analyzer) 없이 발생하는 유지 관리 문제를 피하기 위해, (기본값인) 분석기를 사용하는 경우에만 지연 구체화(lazy materialization)를 활성화합니다. 경험상 분석기 없이 사용하는 경우 몇 가지 문제가 있었습니다(예: 조건에서
indexHint()를 사용할 때). #83791 (Igor Nikonov). - 기본적으로 Parquet 출력 포맷에서
Enum타입의 값을 논리 타입ENUM을 가진BYTE_ARRAY로 기록합니다. #84169 (Pavel Kruglov). - 기본적으로 MergeTree 설정
write_marks_for_substreams_in_compact_parts를 활성화합니다. 이는 새로 생성된 Compact 파트에서 서브컬럼 읽기 성능을 크게 향상시킵니다. 버전이 25.5보다 낮은 서버는 새 Compact 파트를 읽을 수 없습니다. #84171 (Pavel Kruglov). - 이전
concurrent_threads_scheduler기본값은round_robin이었으며, 단일 스레드 쿼리(예: INSERT)가 많을 때 공정하지 않은 것으로 드러났습니다. 이 변경으로 더 안전한 대안인fair_round_robin스케줄러가 기본값이 됩니다. #84747 (Sergei Trifonov). - ClickHouse는 PostgreSQL 스타일의 heredoc 구문인
$tag$ string contents... $tag$를 지원하며, 이는 dollar-quoted 문자열 리터럴로도 알려져 있습니다. 이전 버전에서는 태그에 대한 제약이 더 적었고, 구두점과 공백을 포함한 임의의 문자를 사용할 수 있었습니다. 이는 달러 문자로 시작할 수 있는 식별자와의 파싱 모호성을 초래합니다. 한편 PostgreSQL은 태그에 단어 문자(영숫자 및 밑줄 등)만 허용합니다. 문제를 해결하기 위해 이제 heredoc 태그에는 단어 문자만 포함되도록 제한합니다. #84731를 해결합니다. #84846 (Alexey Milovidov). azureBlobStorage,deltaLakeAzure,icebergAzure함수는 이제AZURE권한을 올바르게 검증하도록 업데이트되었습니다. 모든 클러스터 변형 함수(-Cluster함수)는 이제 해당 비클러스터형 대응 함수에 대해 권한을 검증합니다. 추가로,icebergLocal및deltaLakeLocal함수는 이제FILE권한 검사를 강제합니다. #84938 (Nikita Mikhaylov).- 기본적으로
allow_dynamic_metadata_for_data_lakes설정(Table Engine 수준 설정)을 활성화합니다. #85044 (Daniil Ivanik). - 기본적으로 JSON 포맷에서 64비트 정수를 따옴표로 감싸지 않도록 비활성화합니다. #74079 (Pavel Kruglov)
새 기능
- PromQL 방언에 대한 기본적인 지원이 추가되었습니다. 이를 사용하려면 clickhouse-client에서
dialect='promql'로 설정하고,promql_table_name='X'설정을 사용해 TimeSeries 테이블을 지정한 다음rate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]와 같은 쿼리를 실행합니다. 추가로 PromQL 쿼리를 SQL로 감싸서 사용할 수도 있습니다:SELECT * FROM prometheusQuery('up', ...);. 현재는rate,delta,increase함수만 지원합니다. 단항/이항 연산자는 지원되지 않습니다. HTTP API도 제공되지 않습니다. #75036 (Vitaly Baranov). - AI 기반 SQL 생성 기능이 이제, 사용 가능한 경우 환경 변수
ANTHROPIC_API_KEY및OPENAI_API_KEY에서 값을 자동으로 인식하도록 개선되었습니다. 이를 통해 이 기능을 별도 설정 없이(zero-config) 사용할 수 있는 옵션을 제공하게 되었습니다. #83787 (Kaushik Iska). - ArrowFlight RPC 프로토콜 지원을 다음 항목을 추가하여 구현했습니다: - 새로운 테이블 함수
arrowflight. #74184 (zakr600). - 이제 모든 테이블에서
_table가상 컬럼을 지원하며, 이는Merge엔진을 사용하는 테이블에만 국한되지 않습니다. 이 가상 컬럼은 특히 UNION ALL이 포함된 쿼리에 유용합니다. #63665 (Xiaozhe Yu). - 외부 집계/정렬에 대해 임의의 storage policy(예: S3와 같은 객체 스토리지)를 사용할 수 있게 되었습니다. #84734 (Azat Khuzhin).
- 명시적으로 지정한 IAM 역할을 사용한 AWS S3 인증을 구현합니다. GCS용 OAuth를 구현합니다. 이러한 기능은 최근까지 ClickHouse Cloud에서만 사용 가능했으나 이제 오픈 소스로 제공됩니다. 객체 스토리지용 연결 매개변수 직렬화 방식 등의 일부 인터페이스를 동기화합니다. #84011 (Alexey Milovidov).
- Iceberg TableEngine에서 position delete 기능을 지원합니다. #83094 (Daniil Ivanik).
- Iceberg Equality Delete를 지원합니다. #85843 (Han Fei).
- CREATE 문에서 Iceberg 쓰기를 지원합니다. #83927 이슈를 해결합니다. #83983 (Konstantin Vedernikov).
- 쓰기 작업을 위한 Glue 카탈로그. #84136 (Konstantin Vedernikov).
- 쓰기 작업을 위한 Iceberg REST 카탈로그. #84684 (Konstantin Vedernikov).
- 모든 Iceberg position delete 파일을 데이터 파일로 병합합니다. 이렇게 하면 Iceberg 스토리지에서 Parquet 파일의 개수와 크기가 줄어듭니다. 구문:
OPTIMIZE TABLE table_name. #85250 (Konstantin Vedernikov). - Iceberg 테이블에 대한
drop table지원(REST/Glue 카탈로그에서 제거 및 테이블 관련 메타데이터 삭제). #85395 (Konstantin Vedernikov). - merge-on-read 포맷의 Iceberg 테이블에 대해 ALTER DELETE 뮤테이션을 지원합니다. #85549 (Konstantin Vedernikov).
- DeltaLake에 대한 쓰기 작업을 지원합니다. #79603를 해결했습니다. #85564 (Kseniia Sumarokova).
- 테이블 엔진
DeltaLake에서 특정 스냅샷 버전을 읽을 수 있도록delta_lake_snapshot_version설정이 추가되었습니다. #85295 (Kseniia Sumarokova). - min-max 프루닝을 위해 메타데이터(매니페스트 엔트리)에 Iceberg 통계(컬럼 크기, 하한, 상한)를 더 많이 기록합니다. #85746 (Konstantin Vedernikov).
- Iceberg에서 단순 타입 컬럼의 추가/삭제/수정을 지원합니다. #85769 (Konstantin Vedernikov).
- Iceberg: version-hint 파일 작성을 지원합니다. 이로써 #85097가 해결되었습니다. #85130 (Konstantin Vedernikov).
- 임시 사용자가 생성한 뷰는 이제 실제 사용자 정보의 사본을 저장하며, 임시 사용자가 삭제된 이후에도 더 이상 무효화되지 않습니다. #84763 (pufit).
- 벡터 유사도 인덱스는 이제 이진 양자화(binary quantization)를 지원합니다. 이진 양자화는 메모리 사용량을 크게 줄이고, 거리 계산이 더 빨라지기 때문에 벡터 인덱스를 구축하는 과정을 가속합니다. 또한 기존 설정
vector_search_postfilter_multiplier는 더 이상 사용되지 않으며, 보다 일반적인 설정인vector_search_index_fetch_multiplier로 대체되었습니다. #85024 (Shankar Iyer). s3또는s3Cluster테이블 엔진/FUNCTION에서 key-value 인수를 허용합니다. 예를 들어s3('url', CSV, structure = 'a Int32', compression_method = 'gzip')와 같이 사용할 수 있습니다. #85134 (Kseniia Sumarokova).- Kafka와 같은 엔진으로부터 유입되는 오류가 있는 수신 메시지를 보관하기 위한 새로운 시스템 테이블(일명 「dead letter queue」). #68873 (Ilya Golshtein).
- Replicated 데이터베이스용 새로운
SYSTEM RESTORE DATABASE REPLICA명령이 추가되었습니다. ReplicatedMergeTree에서 기존에 제공되던 복원 기능과 유사합니다. #73100 (Konstantin Morozov). - PostgreSQL 프로토콜이 이제
COPY명령을 지원합니다. #74344 (Konstantin Vedernikov). - MySQL 프로토콜을 사용하는 C# 클라이언트를 지원합니다. 이 변경으로 #83992가 종료됩니다. #84397 (Konstantin Vedernikov).
- 하이브 파티션 스타일 읽기 및 쓰기를 지원하는 기능을 추가했습니다. #76802 (Arthur Passos).
- ZooKeeper 연결에 대한 이력 정보를 저장하도록
zookeeper_connection_log시스템 테이블을 추가했습니다. #79494 (János Benjamin Antal). - 서버 설정
cpu_slot_preemption은 워크로드에 대해 선점형 CPU 스케줄링을 활성화하고 워크로드 간 CPU 시간의 최대-최소 공정 할당(max-min fair allocation)을 보장합니다. CPU 사용 제한(CPU throttling)을 위한 새로운 워크로드 설정이 추가되었습니다:max_cpus,max_cpu_share,max_burst_cpu_seconds. 자세한 내용: https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling. #80879 (Sergei Trifonov). - 설정된 쿼리 수 또는 시간 임계값을 초과하면 TCP 연결을 끊습니다. 이는 로드 밸런서 뒤에 있는 클러스터 노드들 사이에 연결이 보다 고르게 분산되도록 하는 데 유용합니다. #68000을(를) 해결합니다. #81472 (Kenny Sun).
- 이제 병렬 레플리카에서 쿼리에 프로젝션을 사용할 수 있습니다. #82659. #82807 (zoomxi).
- 이제
DESCRIBE (SELECT ...)뿐만 아니라DESCRIBE SELECT도 지원합니다. #82947 (Yarik Briukhovetskyi). - mysql_port 및 postgresql_port에 대해 보안 연결 사용을 강제합니다. #82962 (tiandiwonder).
- 이제
JSONExtractCaseInsensitive및JSONExtract의 기타 변형을 사용하여 대소문자를 구분하지 않고 JSON 키를 조회할 수 있습니다. #83770 (Alistair Evans). system.completions테이블을 도입합니다. #81889 이슈를 종료합니다. #83833 (|2ustam).- 새로운 FUNCTION
nowInBlock64가 추가되었습니다. 예제:SELECT nowInBlock64(6)은2025-07-29 17:09:37.775725를 반환합니다. #84178 (Halersson Paris). - client_id 및 tenant_id로 인증할 수 있도록 AzureBlobStorage에 extra_credentials를 추가했습니다. #84235 (Pablo Marcos).
DateTime값을UUIDv7로 변환하는 함수dateTimeToUUIDv7가 추가되었습니다. 사용 예:SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56'))은0198af18-8320-7a7d-abd3-358db23b9d5c를 반환합니다. #84319 (samradovich).timeSeriesDerivToGrid및timeSeriesPredictLinearToGrid집계 함수로, 지정된 시작 타임스탬프, 종료 타임스탬프, 스텝(step)으로 정의된 시간 그리드에 맞게 데이터를 리샘플링하며, 각각 PromQL의deriv및predict_linear와 유사한 값을 계산합니다. #84328 (Stephen Chi).- 두 개의 새로운 TimeSeries 함수를 추가합니다: -
timeSeriesRange(start_timestamp, end_timestamp, step), -timeSeriesFromGrid(start_timestamp, end_timestamp, step, values). #85435 (Vitaly Baranov). - 다음 구문이 새로 추가되었습니다:
GRANT READ ON S3('s3://foo/.*') TO user. #84503 (pufit). Hash를 새로운 출력 포맷으로 추가했습니다. 이 포맷은 결과의 모든 컬럼과 행에 대해 단일 해시 값을 계산합니다. 이는 예를 들어 데이터 전송이 병목이 되는 사용 사례에서 결과의 「fingerprint」를 계산할 때 유용합니다. 예:SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hash는e5f9e676db098fdb9530d2059d8c23ef를 반환합니다. #84607 (Robert Schulze).- Keeper Multi 쿼리에서 임의의 watch를 설정할 수 있는 기능을 추가했습니다. #84964 (Mikhail Artemenko).
clickhouse-benchmark도구에 병렬 쿼리 개수를 점진적으로 늘리는 모드를 활성화하는--max-concurrency옵션이 추가됩니다. #85623 (Sergei Trifonov).- 부분 집계 메트릭을 지원합니다. #85328 (Mikhail Artemenko).
실험적 기능
- 상관 서브쿼리(correlated subqueries) 지원이 기본적으로 활성화되며, 더 이상 실험적 기능이 아닙니다. #85107 (Dmitry Novik).
- Unity, Glue, Rest, Hive Metastore 데이터 레이크 카탈로그가 실험적 단계에서 베타 단계로 전환되었습니다. #85848 (Melvyn Peignon).
- 경량 업데이트와 삭제 기능이 실험적 단계에서 베타 단계로 전환되었습니다.
- 벡터 유사도 인덱스를 사용하는 근사 벡터 검색이 이제 GA(Generally Available) 상태입니다. #85888 (Robert Schulze).
- Ytsaurus 테이블 엔진 및 테이블 함수가 추가되었습니다. #77606 (MikhailBurdukov).
- 이전에는 텍스트 인덱스 데이터가 여러 세그먼트로 분리되었습니다(각 세그먼트의 기본 크기는 256 MiB였습니다). 이는 텍스트 인덱스를 빌드하는 동안 메모리 사용량을 줄일 수 있지만, 디스크 공간 요구량을 늘리고 쿼리 응답 시간도 증가시킵니다. #84590 (Elmi Ahmadov).
성능 향상
- 새로운 Parquet 리더 구현입니다. 일반적으로 더 빠르며 페이지 단위 필터 푸시다운과 PREWHERE를 지원합니다. 현재 실험적 기능입니다. 설정
input_format_parquet_use_native_reader_v3를 사용하여 활성화하십시오. #82789 (Michael Kolupaev). - Azure Blob Storage용 Azure 라이브러리에서 공식 HTTP 전송을 자체 HTTP 클라이언트 구현으로 교체했습니다. 이 클라이언트에 대해 S3 설정을 반영하는 여러 설정 옵션을 도입했습니다. Azure와 S3 모두에 대해 매우 공격적인 연결 타임아웃을 적용했습니다. Azure 프로파일 이벤트와 메트릭에 대한 관측 및 분석 기능을 개선했습니다. 새로운 클라이언트는 기본적으로 활성화되어 있으며, Azure Blob Storage를 사용하는 콜드 쿼리에서 훨씬 더 나은 지연 시간을 제공합니다. 기존
Curl클라이언트는azure_sdk_use_native_client=false로 설정하여 다시 사용할 수 있습니다. #83294 (alesapin). 이전의 공식 Azure 클라이언트 구현은 5초에서 수분에 이르는 심각한 지연 시간 스파이크 때문에 프로덕션 환경에 적합하지 않았습니다. 해당 열악한 구현을 과감히 버렸으며, 이에 대해 매우 자랑스럽게 생각합니다. - 파일 크기 오름차순으로 인덱스를 처리합니다. 전체적인 인덱스 정렬에서는 단순성과 선택성 때문에 minmax 인덱스와 벡터 인덱스를 우선하며, 그 다음으로는 작은 인덱스를 배치합니다. minmax/벡터 인덱스 사이에서도 더 작은 인덱스를 우선합니다. #84094 (Maruth Goyal).
- MergeTree 설정
write_marks_for_substreams_in_compact_parts를 기본값으로 활성화했습니다. 이를 통해 새로 생성된 Compact 파트에서 서브컬럼을 읽는 성능이 크게 향상됩니다. 버전 25.5 미만인 서버는 새로운 Compact 파트를 읽을 수 없습니다. #84171 (Pavel Kruglov). azureBlobStorage테이블 엔진: 가능한 경우 관리형 ID 인증 토큰을 캐시하고 재사용하여 스로틀링을 피합니다. #79860 (Nick Blakely).ALLLEFT/INNER조인은 조인 키 컬럼으로 오른쪽 테이블이 함수적으로 결정되는 경우(모든 행에서 조인 키 값이 고유한 경우) 자동으로RightAny로 변환됩니다. #84010 (Nikita Taranov).- 데이터 양이 많은 컬럼이 있는 조인 연산의 메모리 사용량을 제한할 수 있도록
max_joined_block_size_rows에 더해max_joined_block_size_bytes를 추가했습니다. #83869 (Nikolai Kochetov). - 기본적으로 활성화된 설정
enable_producing_buckets_out_of_order_in_aggregation에 의해 제어되는 새로운 로직이 추가되어, 메모리 효율적인 집계 과정에서 일부 버킷을 순서와 관계없이 내보낼 수 있게 되었습니다. 일부 집계 버킷의 병합 시간이 다른 버킷에 비해 현저히 오래 걸리는 경우, 집계를 시작한 측에서 그동안 버킷 ID가 더 높은 버킷들을 먼저 병합할 수 있어 성능이 향상됩니다. 단점은 메모리 사용량이 잠재적으로 증가할 수 있다는 점입니다(크지 않을 것으로 예상됩니다). #80179 (Nikita Taranov). - 기본적으로 활성화된
optimize_rewrite_regexp_functions설정을 도입하여 특정 정규식 패턴이 감지될 때 옵티마이저가 일부replaceRegexpAll,replaceRegexpOne,extract호출을 더 단순하고 효율적인 형태로 변환할 수 있도록 했습니다. (issue #81981). #81992 (Amos Bird). - 해시 JOIN 메인 루프 외부에서
max_joined_block_rows를 처리합니다. ALL JOIN에서의 성능이 소폭 향상되었습니다. #83216 (Nikolai Kochetov). - 더 세분화된 min-max 인덱스를 우선적으로 처리합니다. #75381을(를) 해결합니다. #83798 (Maruth Goyal).
DISTINCT윈도우 집계 연산이 선형 시간에 실행되도록 개선하고sumDistinct의 버그를 수정합니다. #79792 이슈를 종료합니다. #52253 이슈를 종료합니다. #79859 (Nihal Z. Miaji).- 벡터 유사성 인덱스를 사용하는 벡터 검색 쿼리는 스토리지 읽기 횟수 감소와 CPU 사용량 감소로 인해 더 낮은 지연 시간으로 실행됩니다. #83803 (Shankar Iyer).
- Rendezvous hashing을 도입해 병렬 레플리카 간 워크로드 분배의 캐시 지역성을 향상합니다. #82511 (Anton Ivashkin).
- If 조합자용
addManyDefaults를 구현하여 이제 If 조합자를 사용하는 집계 함수가 더 빠르게 동작합니다. #83870 (Raúl Marín). - 여러 문자열 또는 숫자 컬럼을 기준으로 GROUP BY를 수행할 때 직렬화된 키를 열 지향 방식으로 계산합니다. #83884 (李扬).
- 병렬 레플리카에서 읽을 때 인덱스 분석 결과가 빈 범위가 되는 경우, 전체 스캔을 수행하지 않도록 했습니다. #84971 (Eduard Karacharov).
- 보다 안정적인 성능 테스트를 위해 -falign-functions=64 옵션을 사용하도록 했습니다. #83920 (Azat Khuzhin).
- 블룸 필터 인덱스가 이제
column이Array타입이 아닌 경우의has([c1, c2, ...], column)과 같은 조건에서도 사용됩니다. 이로써 이러한 쿼리의 성능이 향상되어IN연산자를 사용할 때와 같은 수준으로 효율적으로 동작합니다. #83945 (Doron David). - CompressedReadBufferBase::readCompressedData에서 불필요한
memcpy호출을 줄였습니다. #83986 (Raúl Marín). - 임시 데이터를 제거하여
largestTriangleThreeBuckets를 최적화했습니다. #84479 (Alexey Milovidov). - 코드를 단순화하여 문자열 역직렬화를 최적화했습니다. #38564 이슈를 종료했습니다. #84561 (Alexey Milovidov).
- 병렬 레플리카용 최소 작업 크기 계산을 수정했습니다. #84752 (Nikita Taranov).
Join모드에서 패치 파트의 적용 성능을 개선했습니다. #85040 (Anton Popov).- 0 바이트 처리를 수정합니다. #85062를 종료합니다. 몇 가지 작은 버그가 수정되었습니다. 함수
structureToProtobufSchema,structureToCapnProtoSchema는 널 종료 바이트를 올바르게 넣지 않고, 대신 줄 바꿈 문자를 사용하고 있었습니다. 이로 인해 출력에서 줄 바꿈이 누락되었고, 널 바이트에 의존하는 다른 함수들(예:logTrace,demangle,extractURLParameter,toStringCutToZero,encrypt/decrypt)을 사용할 때 버퍼 오버플로우가 발생할 수 있었습니다.regexp_tree딕셔너리 레이아웃은 널 바이트를 포함한 문자열 처리를 지원하지 않았습니다.formatRowNoNewline함수는Values포맷 또는 행 끝에 줄 바꿈이 없는 다른 포맷과 함께 호출될 때, 출력의 마지막 문자를 잘못 잘라내고 있었습니다. 함수stem에는 매우 드물게 메모리 누수를 일으킬 수 있는 예외 안전성 오류가 포함되어 있었습니다.initcap함수는FixedString인자에 대해 잘못 동작했습니다. 이전 문자열이 단어 문자로 끝난 경우, 블록 내에서 문자열의 시작 부분에 있는 단어 시작을 인식하지 못했습니다. ApacheORC포맷의 보안 취약성이 수정되었으며, 이 취약성은 초기화되지 않은 메모리가 노출될 수 있는 문제였습니다. 함수replaceRegexpAll및 그에 대응하는 별칭REGEXP_REPLACE의 동작이 변경되었습니다. 이제^a*|a*$또는^|.*같은 경우처럼, 이전 매치가 문자열 전체를 처리했더라도 문자열 끝에서 빈 매치를 수행할 수 있습니다. 이는 JavaScript, Perl, Python, PHP, Ruby의 동작 방식과 일치하지만, PostgreSQL의 동작 방식과는 다릅니다. 많은 함수의 구현이 단순화되고 최적화되었습니다. 몇몇 함수의 문서가 잘못되어 있었고, 이제 수정되었습니다.String컬럼과,String컬럼으로 구성된 복합 타입에 대해byteSize가 출력하는 값이 변경되었음을 유의해야 합니다(빈 문자열당 9바이트에서 8바이트로 변경되었으며), 이는 정상입니다. #85063 (Alexey Milovidov). - 단일 행만을 반환하는 경우에만 수행되는 상수 구체화를 최적화합니다. #85071 (Alexey Milovidov).
- delta-kernel-rs 백엔드를 사용하여 파일의 병렬 처리 성능을 개선합니다. #85642 (Azat Khuzhin).
- 새로운 설정 enable_add_distinct_to_in_subqueries가 도입되었습니다. 이 설정을 활성화하면 ClickHouse는 분산 쿼리에서 IN 절의 서브쿼리에 DISTINCT를 자동으로 추가합니다. 이를 통해 세그먼트 간에 전송되는 임시 테이블의 크기를 크게 줄이고 네트워크 효율성을 향상할 수 있습니다. 참고: 이는 트레이드오프입니다. 네트워크 전송량은 줄어들지만, 각 노드에서 추가 병합(중복 제거) 작업이 필요합니다. 네트워크 전송이 병목이고 병합 비용이 허용 가능한 경우 이 설정을 활성화하십시오. #81908 (fhw12345).
- 실행 가능한 사용자 정의 함수에 대한 쿼리 메모리 추적으로 인한 오버헤드를 줄였습니다. #83929 (Eduard Karacharov).
- 스토리지
DeltaLake에서 내부delta-kernel-rs기반 필터링(통계 및 파티션 프루닝)을 구현했습니다. #84006 (Kseniia Sumarokova). - 실시간으로 업데이트되거나 패치 파트에 의해 업데이트되는 컬럼에 의존하는 스키핑 인덱스를 보다 세밀하게 비활성화합니다. 이제 스키핑 인덱스는 실시간 뮤테이션이나 패치 파트의 영향을 받은 파트에서만 사용이 중단되며, 이전에는 이러한 인덱스가 모든 파트에서 비활성화되었습니다. #84241 (Anton Popov).
- 암호화된 네임드 컬렉션용
encrypted_buffer에 필요한 최소 메모리만 할당합니다. #84432 (Pablo Marcos). - 첫 번째 인수가 상수 배열(Set, 집합)이고 두 번째 인수가 인덱스가 설정된 컬럼(부분집합)인 경우에도 활용될 수 있도록 일반, ngram, token 유형의 블룸 필터 인덱스 지원이 개선되어, 쿼리를 더 효율적으로 실행할 수 있게 되었습니다. #84700 (Doron David).
- Keeper에서 스토리지 잠금에 대한 경합을 줄였습니다. #84732 (Antonio Andelic).
WHERE에 대해read_in_order_use_virtual_row에 대한 누락되어 있던 지원을 추가했습니다. 이를 통해 완전히PREWHERE로 푸시되지 않은 필터가 있는 쿼리에서 추가 파트 읽기를 건너뛸 수 있습니다. #84835 (Nikolai Kochetov).- 각 데이터 파일마다 객체를 명시적으로 저장하지 않고도 Iceberg 테이블의 객체를 비동기적으로 순회(iterate)할 수 있게 합니다. #85369 (Daniil Ivanik).
- 상관 서브쿼리가 아닌
EXISTS를 스칼라 서브쿼리로 실행합니다. 이렇게 하면 스칼라 서브쿼리 캐시를 사용할 수 있고 결과에 상수 폴딩을 적용할 수 있어 인덱스에 도움이 됩니다. 호환성을 위해 새로운 설정execute_exists_as_scalar_subquery=1이 추가되었습니다. #85481 (Nikolai Kochetov).
개선 사항
- DatabaseReplicatedSettings의 기본값을 정의하는
database_replicated설정을 추가합니다. 해당 설정이 Replicated DB 생성 쿼리에 명시되지 않은 경우, 이 설정의 값이 사용됩니다. #85127 (Tuan Pham Anh). - web UI(play)의 테이블 컬럼 크기를 조절할 수 있도록 했습니다. #84012 (Doron David).
iceberg_metadata_compression_method설정을 통해 압축된.metadata.json파일을 지원합니다. ClickHouse의 모든 압축 방식을 지원합니다. #84895를 해결합니다. #85196 (Konstantin Vedernikov).EXPLAIN indexes = 1의 출력에 읽게 될 범위 수를 표시합니다. #79938 (Christoph Wurm).- ORC 압축 블록 크기를 지정할 수 있는 설정을 도입하고, 기본값을 64KB에서 256KB로 변경하여 Spark 또는 Hive와의 일관성을 유지하도록 했습니다. #80602 (李扬).
- Wide 파트에
columns_substreams.txt파일을 추가하여 파트에 저장된 모든 서브스트림을 추적합니다. 이를 통해 JSON 및 Dynamic 타입에서 동적 스트림을 추적할 수 있으며, 이 컬럼들의 샘플을 읽어 동적 스트림 목록을 얻을 필요가 없어집니다(예: 컬럼 크기 계산 시). 또한 이제 모든 동적 스트림이system.parts_columns에 반영됩니다. #81091 (Pavel Kruglov). - 기본적으로 민감한 데이터를 숨기기 위해 clickhouse format에 CLI 플래그 --show_secrets를 추가했습니다. #81524 (Nikolai Ryzhov).
- S3 읽기 및 쓰기 요청은
max_remote_read_network_bandwidth_for_server및max_remote_write_network_bandwidth_for_server제한과 관련된 문제를 방지하기 위해 S3 요청 전체가 아니라 HTTP 소켓 수준에서 제한(throttling)됩니다. #81837 (Sergei Trifonov). - 동일한 컬럼에 대해 서로 다른 창(윈도우 함수용)에서 서로 다른 정렬 방식(collation)을 혼합하여 사용할 수 있도록 허용합니다. #82877 (Yakov Olkhovskiy).
- 머지 셀렉터를 시뮬레이션하고 시각화하며 비교할 수 있는 도구를 추가합니다. #71496 (Sergei Trifonov).
address_expression인수에 클러스터가 지정된 경우 병렬 레플리카를 사용하는remote*테이블 함수도 지원하도록 했습니다. 또한 #73295를 수정했습니다. #82904 (Igor Nikonov).- 백업 파일을 쓸 때 발생하는 모든 로그 메시지의 레벨을 TRACE로 설정합니다. #82907 (Hans Krutzer).
- 이름이나 코덱이 특이한 사용자 정의 함수는 SQL 포매터에 의해 서식이 일관되지 않게 지정될 수 있습니다. 이 변경으로 #83092가 해결되었습니다. #83644 (Alexey Milovidov).
- 이제 JSON 타입 내에서 Time 및 Time64 타입을 사용할 수 있습니다. #83784 (Yarik Briukhovetskyi).
- 병렬 레플리카를 사용하는 조인은 이제 join logical step을 사용합니다. 병렬 레플리카를 사용하는 조인 쿼리에 문제가 발생하면
SET query_plan_use_new_logical_join_step=0으로 설정한 후 이슈를 보고해 주십시오. #83801 (Vladimir Cherkasov). - 여러 노드에서 cluster_function_process_archive_on_multiple_nodes 사용 시 발생하는 호환성 문제를 수정합니다. #83968 (Kseniia Sumarokova).
S3Queue테이블 수준에서 MV(Materialized View) 삽입 SETTING 변경을 지원합니다. 새로운S3Queue수준 SETTINGmin_insert_block_size_rows_for_materialized_views및min_insert_block_size_bytes_for_materialized_views가 추가되었습니다. 기본적으로는 프로필 수준 SETTING이 적용되며,S3Queue수준 SETTING이 이를 재정의합니다. #83971 (Kseniia Sumarokova).- 프로필 이벤트
MutationAffectedRowsUpperBound가 추가되어 뮤테이션에서 영향을 받는 행의 수를 표시합니다(예:ALTER UPDATE또는ALTER DELETE쿼리에서 조건을 만족하는 행의 총 개수). #83978 (Anton Popov). - cgroup 정보(
memory_worker_use_cgroup가 활성화되어 있고 cgroup을 사용할 수 있는 경우)를 사용하여 메모리 트래커(memory_worker_correct_memory_tracker)를 조정합니다. #83981 (Azat Khuzhin). - MongoDB: 문자열을 숫자형 타입으로 암시적으로 파싱합니다. 이전에는 ClickHouse 테이블의 숫자형 컬럼에 대해 MongoDB 소스에서 문자열 값이 수신되면 예외가 발생했습니다. 이제 엔진이 문자열에서 숫자형 값을 자동으로 파싱하려고 시도합니다. #81167 이슈를 해결합니다. #84069 (Kirill Nikiforov).
Pretty형식에서 널 허용(Nullable) 숫자의 자릿수 그룹을 강조 표시합니다. #84070 (Alexey Milovidov).- 대시보드: 툴팁이 컨테이너 상단 밖으로 넘치지 않도록 했습니다. #84072 (Alexey Milovidov).
- 대시보드의 점 표시가 약간 더 보기 좋게 변경되었습니다. #84074 (Alexey Milovidov).
- 대시보드 파비콘을 약간 개선했습니다. #84076 (Alexey Milovidov).
- Web UI: 브라우저에서 비밀번호를 저장할 수 있도록 했습니다. 또한 URL 값도 기억합니다. #84087 (Alexey Milovidov).
apply_to_children설정을 사용하여 특정 Keeper 노드에 추가 ACL을 적용할 수 있도록 지원합니다. #84137 (Antonio Andelic).- MergeTree에서 「compact」 Variant 판별자 직렬화의 사용 방식을 수정합니다. 이전에는 사용할 수 있는 일부 경우에 이 방식을 사용하지 않았습니다. #84141 (Pavel Kruglov).
- 데이터베이스 복제 설정에 서버 설정
logs_to_keep이 추가되어, 복제 데이터베이스의 기본logs_to_keep파라미터를 변경할 수 있게 되었습니다. 값이 낮을수록 ZNodes 수가 줄어들며(특히 데이터베이스가 많은 경우), 값이 높을수록 누락된 레플리카가 더 오랜 기간이 지난 후에도 따라잡을 수 있습니다. #84183 (Alexey Khatskevich). - JSON 타입을 파싱하는 동안 JSON 키에 있는 점(
.) 문자를 이스케이프하기 위한 설정json_type_escape_dots_in_keys가 추가되었습니다. 이 설정은 기본적으로 비활성화되어 있습니다. #84207 (Pavel Kruglov). - EOF를 확인하기 전에 연결이 취소되었는지 먼저 확인하여 닫힌 연결에서 읽는 일을 방지합니다. #83893을(를) 수정합니다. #84227 (Raufs Dunamalijevs).
- Web UI에서 텍스트 선택 시 색상이 다소 개선되었습니다. 차이는 다크 모드에서 테이블 셀을 선택했을 때만 뚜렷합니다. 이전 버전에서는 텍스트와 선택 영역 배경 사이의 대비가 충분하지 않았습니다. #84258 (Alexey Milovidov).
- 내부 검사 로직을 단순화하여 서버 종료 시 클라이언트 연결 처리를 개선했습니다. #84312 (Raufs Dunamalijevs).
- 디버깅 시 테스트 로그 레벨에서조차 지나치게 방대해질 수 있는 expression visitor 로그를 끌 수 있도록
delta_lake_enable_expression_visitor_logging설정을 추가했습니다. #84315 (Kseniia Sumarokova). - 이제 cgroup 수준 메트릭과 시스템 전체 메트릭이 함께 보고됩니다. cgroup 수준 메트릭의 이름은
CGroup<Metric>이고, procfs에서 수집되는 OS 수준 메트릭의 이름은OS<Metric>입니다. #84317 (Nikita Taranov). - Web UI의 차트가 약간 개선되었습니다. 큰 변화는 아니지만 이전보다 나아졌습니다. #84326 (Alexey Milovidov).
- Replicated 데이터베이스 설정
max_retries_before_automatic_recovery의 기본값을 10으로 변경하여 일부 상황에서 더 빠르게 복구되도록 했습니다. #84369 (Alexander Tokmakov). - 쿼리 매개변수를 사용하는 CREATE USER 문의 형식을 수정했습니다(예:
CREATE USER {username:Identifier} IDENTIFIED WITH no_password). #84376 (Azat Khuzhin). - 백업 및 복구 작업 중 사용되는 S3 재시도 백오프 전략을 구성할 수 있도록
backup_restore_s3_retry_initial_backoff_ms,backup_restore_s3_retry_max_backoff_ms,backup_restore_s3_retry_jitter_factor설정을 도입했습니다. #84421 (Julia Kartseva). - S3Queue ordered 모드 수정: shutdown이 호출된 경우 더 빨리 종료되도록 변경했습니다. #84463 (Kseniia Sumarokova).
- pyiceberg에서 읽을 수 있는 Iceberg 쓰기를 지원합니다. #84466 (Konstantin Vedernikov).
IN/GLOBAL IN필터를 KeyValue 스토리지 기본 키(예: EmbeddedRocksDB, KeeperMap)까지 푸시다운할 때 Set 값의 형 변환을 허용합니다. #84515 (Eduard Karacharov).- chdig를 버전 25.7.1로 업데이트했습니다. #84521 (Azat Khuzhin).
- 이제 UDF 실행 중 발생하는 저수준 오류는
UDF_EXECUTION_FAILED오류 코드로 보고되며, 이전에는 서로 다른 오류 코드가 반환될 수 있었습니다. #84547 (Xu Jia). - KeeperClient에
get_acl명령을 추가했습니다. #84641 (Antonio Andelic). - 데이터 레이크 테이블 엔진에 스냅샷 버전 지원을 추가합니다. #84659 (Pete Hampton).
ConcurrentBoundedQueue의 크기를 나타내는 차원 메트릭을 추가하고, 큐 유형(해당 큐의 용도)과 큐 ID(현재 큐 인스턴스를 위해 무작위로 생성되는 ID)를 라벨로 사용합니다. #84675 (Miсhael Stetsyuk).system.columns테이블은 이제 기존name컬럼의 별칭으로column을 제공합니다. #84695 (Yunchi Pang).- 로컬 메타데이터가 있는 디스크별로 등 파트를 검색하는 범위를 제한하기 위한 새로운 MergeTree 설정
search_orphaned_parts_drives가 추가되었습니다. #84710 (Ilya Golshtein). - Keeper에 수신된 요청에 대한 요청 로깅을 전환하기 위한 4LW
lgrq를 추가했습니다. #84719 (Antonio Andelic). - 대소문자를 구분하지 않고 외부 인증의
forward_headers를 매칭합니다. #84737 (ingodwerust). encrypt_decrypt도구가 이제 암호화된 ZooKeeper 연결을 지원합니다. #84764 (Roman Vasin).system.errors에 포맷 문자열 컬럼을 추가합니다. 이 컬럼은 알림 규칙에서 동일한 유형의 오류를 그룹화하는 데 필요합니다. #84776 (Miсhael Stetsyuk).clickhouse-format에서--hilite의 별칭으로--highlight를 허용하도록 업데이트했습니다. -clickhouse-client에서--highlight의 별칭으로--hilite를 허용하도록 업데이트했습니다. - 해당 변경 사항을 반영하도록clickhouse-format문서를 업데이트했습니다. #84806 (Rishabh Bhardwaj).- 복합 타입에 대해 필드 ID를 사용한 Iceberg 읽기를 수정합니다. #84821 (Konstantin Vedernikov).
SlowDown과 같은 오류로 인해 재시도 폭주가 발생할 때, 단일 재시도 가능 오류가 발생하면 모든 스레드의 속도를 늦춰 S3에 가해지는 부하를 줄이기 위한 새로운backup_slow_all_threads_after_retryable_s3_errorSETTING을 도입합니다. #84854 (Julia Kartseva).- Replicated DB에서 non-append RMV DDL을 실행할 때, 기존 임시 테이블을 생성하고 이름을 변경하는 단계를 생략합니다. #84858 (Tuan Pham Anh).
keeper_server.coordination_settings.latest_logs_cache_entry_count_threshold및keeper_server.coordination_settings.commit_logs_cache_entry_count_threshold를 사용하여 Keeper 로그 엔트리 캐시의 크기를 엔트리 수 기준으로 제한합니다. #84877 (Antonio Andelic).- 지원되지 않는 아키텍처에서도
simdjson을 사용할 수 있도록 했습니다(이전에는CANNOT_ALLOCATE_MEMORY오류가 발생했습니다). #84966 (Azat Khuzhin). - 비동기 로깅: 제한값을 튜닝 가능하도록 하고 내부 상태를 진단할 수 있는 기능을 추가합니다. #85105 (Raúl Marín).
- 제거된 모든 객체를 수집하여 객체 스토리지에서 한 번의 제거 작업으로 실행합니다. #85316 (Mikhail Artemenko).
- Iceberg의 기존 positional delete 파일 구현은 모든 데이터를 RAM에 상주시킵니다. positional delete 파일 크기가 큰 경우가 많아 비용이 상당히 많이 듭니다. 새로운 구현은 Parquet delete 파일의 마지막 row group만 RAM에 유지하여 비용을 크게 절감합니다. #85329 (Konstantin Vedernikov).
- chdig: 화면에 남는 잔여물을 수정하고, 에디터에서 쿼리 편집 후 발생하는 크래시를 수정하며,
editor를 위해path에서 검색하도록 수정하고, 25.8.1로 업데이트합니다. #85341 (Azat Khuzhin). - 누락되어 있던
partition_columns_in_data_file설정을 Azure 구성에 추가합니다. #85373 (Arthur Passos). timeSeries*ToGrid함수에서 step 값을 0으로 설정하는 것을 허용합니다. 이는 #75036의 일부입니다. #85390 (Vitaly Baranov).- system.tables에 데이터 레이크 테이블을 추가하는 여부를 제어하기 위한 show_data_lake_catalogs_in_system_tables 플래그를 추가했습니다. #85384를 해결합니다. #85411 (Smita Kulkarni).
remote_fs_zero_copy_zookeeper_path에서 매크로 확장 지원을 추가했습니다. #85437 (Mikhail Koviazin).- clickhouse-client의 AI가 약간 더 보기 좋게 개선되었습니다. #85447 (Alexey Milovidov).
- 기존 배포에서
trace_log.symbolize설정을 기본적으로 활성화합니다. #85456 (Azat Khuzhin). - 복합 식별자가 사용되는 더 많은 경우를 지원합니다. 특히
ARRAY JOIN의 이전 분석기와의 호환성이 향상되었습니다. 기존 동작을 유지하기 위해 새로운 설정analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested를 도입했습니다. #85492 (Nikolai Kochetov). - system.columns에서 테이블 컬럼 크기를 가져오는 동안 UNKNOWN_DATABASE를 무시합니다. #85632 (Azat Khuzhin).
- 패치 파트의 전체 비압축 바이트 수에 대한 제한(테이블 설정
max_uncompressed_bytes_in_patches)을 추가했습니다. 이를 통해 경량 업데이트 후SELECT쿼리가 크게 느려지는 것을 방지하고, 경량 업데이트의 잠재적 오용을 막습니다. #85641 (Anton Popov). GRANT READ/WRITE의 소스 유형과GRANT TABLE ENGINE의 테이블 엔진을 판별할 수 있도록system.grants에parameter컬럼을 추가합니다. #85643 (MikhailBurdukov).- 파라미터가 있는 컬럼(예: Decimal(8)) 뒤에 오는 컬럼에서, CREATE DICTIONARY 쿼리의 컬럼 목록 끝에 있는 후행 쉼표를 파싱하는 동작을 수정합니다. #85586 이슈를 해결합니다. #85653 (Nikolay Degterinsky).
nested함수에서 내부 배열을 지원합니다. #85719 (Nikolai Kochetov).- 외부 라이브러리가 수행하는 모든 메모리 할당이 이제 ClickHouse의 메모리 추적기에 포착되어 정확히 반영됩니다. 이로 인해 특정 쿼리의 보고되는 메모리 사용량이 「증가한 것처럼」 보이거나
MEMORY_LIMIT_EXCEEDED오류로 실패할 수 있습니다. #84082 (Nikita Mikhaylov).
버그 수정(공식 안정 릴리스에서 사용자에게 직접 보이는 오작동)
- 이 PR은 REST 카탈로그를 통해 Iceberg 테이블을 쿼리할 때 메타데이터를 올바르게 해석하지 못하던 문제를 수정합니다. ... #80562 (Saurabh Kumar Ojha).
- DDLWorker 및 DatabaseReplicatedDDLWorker에서 markReplicasActive 함수를 수정했습니다. #81395 (Tuan Pham Anh).
- 파싱 실패 시 Dynamic 컬럼 롤백 동작을 수정했습니다. #82169 (Pavel Kruglov).
- 이제 함수
trim이 모든 인수가 상수인 상태로 호출되면 상수 출력 문자열을 생성합니다. (버그 #78796). #82900 (Robert Schulze). optimize_syntax_fuse_functions가 활성화된 경우 중복 서브쿼리에서 발생하는 논리 오류를 수정하고, #75511 이슈를 종료했습니다. #83300 (Vladimir Cherkasov).WHERE ... IN (<subquery>)절을 사용하고 쿼리 조건 캐시(use_query_condition_cache설정)이 활성화된 경우 잘못된 결과가 반환되던 문제를 수정했습니다. #83445 (LB7666).- 기존에는
gcs함수를 사용하는 데 어떠한 접근 권한도 필요하지 않았습니다. 이제는 사용 시GRANT READ ON S3권한이 있는지 확인합니다. #70567를 해결합니다. #83503 (pufit). - s3Cluster()에서 replicated MergeTree로 INSERT SELECT를 수행할 때 사용할 수 없는 노드를 건너뜁니다. #83676 (Igor Nikonov).
- 실험적 트랜잭션에 사용되는 MergeTree에서 append 방식 쓰기 시
plain_rewritable/plain메타데이터 타입을 사용할 경우, 해당 쓰기가 단순히 무시되던 문제를 수정합니다. #83695 (Tuan Pham Anh). - Avro schema registry 인증 정보가 사용자에게 노출되거나 로그에 기록되지 않도록 마스킹합니다. #83713 (János Benjamin Antal).
add_minmax_index_for_numeric_columns=1또는add_minmax_index_for_string_columns=1로 설정하여 MergeTree 테이블을 생성한 경우, 이후 ALTER 연산 중에 인덱스가 구체화되면서 새로운 레플리카에서 Replicated 데이터베이스가 정상적으로 초기화되지 못하던 문제를 수정합니다. #83751 (Nikolay Degterinsky).- Parquet writer가 Decimal 타입에 대해 잘못된 통계(min/max)를 내보내던 문제를 수정했습니다. #83754 (Michael Kolupaev).
LowCardinality(Float32|Float64|BFloat16)타입에서 NaN 값의 정렬 방식을 수정했습니다. #83786 (Pervakov Grigorii).- 백업에서 복원할 때 definer 사용자가 백업되지 않을 수 있으며, 이로 인해 백업 전체가 손상될 수 있습니다. 이를 방지하기 위해 복원 중 대상 테이블 생성 시 수행되던 권한 검사를 연기하고, 런타임 시에만 검사하도록 변경했습니다. #83818 (pufit).
- 잘못된 INSERT 이후 연결이 끊긴 상태로 남아 있어 클라이언트가 크래시되는 문제를 수정했습니다. #83842 (Azat Khuzhin).
- analyzer가 활성화된 상태에서
remote테이블 함수의view(...)인자에서 어떤 테이블이든 참조할 수 있도록 허용합니다. #78717을 수정합니다. #79377을 수정합니다. #83844 (Dmitry Novik). - jsoneachrowwithprogress에서 onprogress 호출이 finalization과 동기화되도록 수정했습니다. #83879 (Sema Checherinda).
- 이 변경으로 #81303 이슈가 종료됩니다. #83892 (Konstantin Vedernikov).
const인수와 비const인수가 혼용된 경우에 대해 colorSRGBToOKLCH/colorOKLCHToSRGB를 수정합니다. #83906 (Azat Khuzhin).- RowBinary 포맷에서 NULL 값을 가진 JSON 경로를 쓰는 동작을 수정했습니다. #83923 (Pavel Kruglov).
- Date에서 DateTime64로 캐스팅할 때 2106-02-07을 초과하는 큰 값에서 오버플로우가 발생하던 문제가 수정되었습니다. #83982 (Yarik Briukhovetskyi).
filesystem_prefetches_limit이 항상 적용되도록 했습니다(이제MergeTreePrefetchedReadPool에서만 적용되는 것이 아닙니다). #83999 (Azat Khuzhin).- 드물게 발생하던 버그를 수정하여
MATERIALIZE COLUMN쿼리 실행 시checksums.txt에 예기치 않은 파일이 생성되고, 결국 detached 데이터 파트가 생기던 문제를 해결했습니다. #84007 (alesapin). - 한쪽 컬럼이
LowCardinality이고 다른 한쪽이 상수인 경우, 부등식 조건으로 JOIN을 수행할 때 발생하는Expected single dictionary argument for function논리 오류를 수정합니다. #81779를 해결합니다. #84019 (Alexey Milovidov). - 구문 하이라이트가 활성화된 대화형 모드에서 ClickHouse 클라이언트를 사용할 때 발생하던 충돌을 수정했습니다. #84025 (Bharat Nallan).
- 쿼리 조건 캐시를 재귀 CTE와 함께 사용할 때 잘못된 결과가 반환되던 문제를 수정했습니다(이슈 #81506). #84026 (zhongyuankai).
- 정기적인 파트 갱신 시 예외 처리를 올바르게 수행하도록 했습니다. #84083 (Azat Khuzhin).
- 동등 비교의 피연산자 타입이 서로 다르거나 상수를 참조하는 경우, 필터를
JOIN조건으로 병합하는 동작을 수정했습니다. #83432를 수정합니다. #84145 (Dmitry Novik). - 테이블에 프로젝션이 있고
lightweight_mutation_projection_mode = 'rebuild'로 설정된 상태에서, 사용자가 테이블의 임의 블록에서 모든 행을 삭제하는 lightweight delete를 실행할 때 드물게 발생하던 ClickHouse 크래시를 수정했습니다. #84158 (alesapin). - 백그라운드 취소 검사 스레드로 인해 발생하던 교착 상태를 수정했습니다. #84203 (Antonio Andelic).
- 잘못된
WINDOW정의로 인해 발생하는 무한 재귀 분석 문제를 수정합니다. #83131를 해결합니다. #84242 (Dmitry Novik). - Bech32 인코딩과 디코딩에서 잘못된 동작이 발생하던 버그를 수정했습니다. 테스트에 사용한 알고리즘의 온라인 구현 역시 동일한 문제를 가지고 있어, 처음에는 이 버그가 발견되지 않았습니다. #84257 (George Larionov).
array()FUNCTION에서 빈 튜플이 잘못 생성되던 문제를 수정했습니다. 이로써 #84202가 수정되었습니다. #84297 (Amos Bird).- 병렬 레플리카를 사용하고 여러 개의 INNER 조인 뒤에 RIGHT 조인이 포함된 쿼리에서 발생하는
LOGICAL_ERROR를 수정합니다. 이러한 쿼리에는 병렬 레플리카를 사용하지 마십시오. #84299 (Vladimir Cherkasov). - 이전에
set인덱스는 그래뉼이 필터를 통과했는지 확인할 때Nullable컬럼을 고려하지 않았습니다(이슈 #75485). #84305 (Elmi Ahmadov). - 이제 ClickHouse가 테이블 유형이 소문자로 지정된 Glue Catalog의 테이블을 읽을 수 있습니다. #84316 (alesapin).
JOIN또는 서브쿼리가 있는 경우, 테이블 함수(table function)를 클러스터용 대체 함수로 대체하지 마십시오. #84335 (Konstantin Bogdanov).IAccessStorage에서 로거 사용 방식을 수정합니다. #84365 (Konstantin Bogdanov).- 테이블의 모든 컬럼을 업데이트하는 경량 업데이트에서 발생하던 논리 오류를 수정했습니다. #84380 (Anton Popov).
- 코덱
DoubleDelta는 이제 숫자 타입의 컬럼에만 적용할 수 있습니다. 특히FixedString컬럼은 더 이상DoubleDelta를 사용해 압축할 수 없습니다. (#80220 수정). #84383 (Jimmy Aguilar Mena). MinMax인덱스를 평가할 때 NaN 값과의 비교에 올바른 범위가 사용되지 않았습니다. #84386 (Elmi Ahmadov).- Variant 컬럼 읽기에서 lazy materialization 관련 문제를 수정했습니다. #84400 (Pavel Kruglov).
zoutofmemory를 하드웨어 오류로 처리하도록 변경합니다. 그렇지 않으면 논리 오류가 발생합니다. 자세한 내용은 https://github.com/clickhouse/clickhouse-core-incidents/issues/877를 참고하십시오. #84420 (Han Fei).no_password로 생성된 사용자에 대해 서버 설정allow_no_password를 0으로 변경한 이후 해당 사용자가 로그인하려고 하면 서버가 크래시되던 문제를 수정했습니다. #84426 (Shankar Iyer).- Keeper changelog에 대한 순서가 뒤바뀌는 쓰기 문제를 수정합니다. 이전에는 changelog에 대한 쓰기가 진행 중인 상태에서 롤백이 대상 파일을 동시에 변경하도록 만들어, 그 결과 로그가 일관되지 않게 되고 데이터가 손실될 가능성이 있었습니다. #84434 (Antonio Andelic).
- 이제 테이블에서 모든 TTL이 제거되면 MergeTree는 TTL 관련 처리를 수행하지 않습니다. #84441 (alesapin).
LIMIT이 포함된 병렬 분산INSERT SELECT가 허용되었는데, 이는 올바르지 않은 동작으로 대상 테이블에 데이터 중복을 초래합니다. #84477 (Igor Nikonov).- 데이터 레이크에서 가상 컬럼 기준 파일 프루닝 동작을 수정했습니다. #84520 (Kseniia Sumarokova).
- RocksDB 스토리지를 사용하는 Keeper에서 이터레이터가 해제되지 않아 발생하던 누수를 수정했습니다. #84523 (Azat Khuzhin).
ALTER MODIFY ORDER BY가 정렬 키에서 TTL 컬럼을 검증하지 않던 버그를 수정했습니다. 이제ALTER작업 중ORDER BY절에 TTL 컬럼을 사용할 경우 올바르게 거부되어 잠재적인 테이블 손상을 방지합니다. #84536 (xiaohuanlin).- 호환성을 위해 ClickHouse 25.5 이전 버전에서의
allow_experimental_delta_kernel_rs값을false로 변경했습니다. #84587 (Kseniia Sumarokova). - 매니페스트 파일에서 더 이상 스키마를 가져오지 않고, 각 스냅샷마다 관련 스키마를 독립적으로 저장합니다. 각 데이터 파일에 대해 해당 스냅샷에서 적절한 스키마를 추론합니다. 이전 동작은 status가 existing인 매니페스트 파일 엔트리에 대해 Iceberg 사양을 위반했습니다. #84588 (Daniil Ivanik).
- Keeper 설정
rotate_log_storage_interval = 0일 때 ClickHouse가 비정상 종료되던 문제를 수정했습니다. (이슈 #83975). #84637 (George Larionov). - S3Queue "Table is already registered"와 관련된 논리 오류를 수정했습니다. #84433를 닫았습니다. https://github.com/ClickHouse/ClickHouse/pull/83530 이후에 발생한 문제였습니다. #84677 (Kseniia Sumarokova).
- RefreshTask에서 'view'에서 zookeeper를 가져올 때 'mutex'를 잠그도록 했습니다. #84699 (Tuan Pham Anh).
- lazy 컬럼을 external sort와 함께 사용할 때 발생하는
CORRUPTED_DATA오류를 수정합니다. #84738 (János Benjamin Antal). - 스토리지
DeltaLake에서 delta-kernel 사용 시 컬럼 프루닝이 정상적으로 동작하도록 수정합니다. 관련 이슈 #84543를 해결합니다. #84745 (Kseniia Sumarokova). - DeltaLake 스토리지의 delta-kernel에서 자격 증명이 갱신되도록 했습니다. #84751 (Kseniia Sumarokova).
- 연결 문제 이후 불필요한 내부 백업이 시작되는 현상을 수정합니다. #84755 (Vitaly Baranov).
- 지연된 원격 소스를 쿼리할 때 벡터 범위 초과가 발생할 수 있던 문제를 수정했습니다. #84820 (George Larionov).
ngram및no_op토크나이저가 빈 입력 토큰을 처리할 때 더 이상 (실험적인) 텍스트 인덱스에서 충돌이 발생하지 않습니다. #84849 (Robert Schulze).ReplacingMergeTree및CollapsingMergeTree엔진을 사용하는 테이블에서 경량 업데이트 동작을 수정했습니다. #84851 (Anton Popov).- Object queue 엔진을 사용하는 테이블에서 모든 설정이 테이블 메타데이터에 정상적으로 저장되도록 수정했습니다. #84860 (Antonio Andelic).
- Keeper가 반환하는 총 watch 개수를 수정했습니다. #84890 (Antonio Andelic).
- 버전 25.7보다 낮은 서버에서 생성된
ReplicatedMergeTree엔진을 사용하는 테이블에 대한 경량 업데이트(lightweight update)를 수정했습니다. #84933 (Anton Popov). - 비복제
MergeTree엔진을 사용하는 테이블에서ALTER TABLE ... REPLACE PARTITION쿼리를 실행한 후 경량 업데이트가 올바르게 작동하도록 수정했습니다. #84941 (Anton Popov). - 쿼리에서 boolean 리터럴과 정수 리터럴 간 컬럼 이름 충돌이 발생하지 않도록, boolean 리터럴에 대해 생성되는 컬럼 이름이 "1"/"0" 대신 "true"/"false"를 사용하도록 수정했습니다. #84945 (xiaohuanlin).
- 백그라운드 스케줄 풀과 실행기에서 발생하는 메모리 사용량 추적 오차를 수정했습니다. #84946 (Azat Khuzhin).
- Merge 테이블 엔진에서의 잠재적인 부정확한 정렬 문제를 수정합니다. #85025 (Xiaozhe Yu).
- DiskEncrypted의 누락된 API를 구현했습니다. #85028 (Azat Khuzhin).
- 분산 환경에서 상관 서브쿼리가 사용되는지 확인하는 검사를 추가하여 충돌이 발생하는 문제를 방지합니다. #82205를 수정합니다. #85030 (Dmitry Novik).
- 이제 Iceberg는
SELECT쿼리 간에 관련 스냅샷 버전을 캐시하지 않고, 항상 스냅샷을 다시 평가하여 결정하도록 동작합니다. 이전에 Iceberg 스냅샷을 캐시하려는 시도는 타임 트래블(time travel) 기능을 사용하는 Iceberg 테이블에서 문제를 일으켰습니다. #85038 (Daniil Ivanik). AzureIteratorAsync에서 발생하던 double-free 버그를 수정했습니다. #85064 (Nikita Taranov).- JWT로 식별되는 USER를 CREATE할 때 표시되는 오류 메시지를 개선합니다. #85072 (Konstantin Bogdanov).
ReplicatedMergeTree에서 패치 파트 정리 방식을 수정했습니다. 이전에는 패치 파트를 구체화하는 머지되거나 뮤테이션된 파트가 다른 레플리카에서 다운로드될 때까지, 경량 업데이트(lightweight update) 결과가 레플리카에서 일시적으로 보이지 않을 수 있었습니다. #85121 (Anton Popov).- 타입이 서로 다를 때
mv에서illegal_type_of_argument예외가 발생하던 문제를 수정했습니다. #85135 (Sema Checherinda). - delta-kernel 구현에서 발생하던 segfault를 수정했습니다. #85160 (Kseniia Sumarokova).
- 메타데이터 파일 이동에 오랜 시간이 걸리는 경우 복제된 데이터베이스를 복구하는 동작을 수정했습니다. #85177 (Tuan Pham Anh).
additional_table_filters expression설정에서IN (subquery)에 사용되는Not-ready Set문제를 수정합니다. #85210 (Nikolai Kochetov).- SYSTEM DROP REPLICA 쿼리 중 불필요한
getStatus()호출을 제거합니다. 백그라운드에서 테이블이 삭제될 때Shutdown for storage is called예외가 발생하던 문제를 수정합니다. #85220 (Nikolay Degterinsky). DeltaLake엔진의 delta-kernel 구현에서 경쟁 조건을 수정했습니다. #85221 (Kseniia Sumarokova).DeltaLake엔진에서 delta-kernel이 비활성화된 상태일 때 파티션된 데이터를 읽지 못하던 문제를 수정했습니다. 이 동작은 25.7에서 깨졌습니다(https://github.com/ClickHouse/ClickHouse/pull/81136). #85223 (Kseniia Sumarokova).- CREATE OR REPLACE 및 RENAME 쿼리에서 누락되어 있던 테이블 이름 길이 검사를 추가했습니다. #85326 (Michael Kolupaev).
- DEFINER가 제거된 경우 복제된 데이터베이스(Replicated database)의 새 레플리카에서 RMV 생성이 실패하던 문제를 수정합니다. #85327 (Nikolay Degterinsky).
- 복합형에 대한 Iceberg 쓰기 작업을 수정했습니다. #85330 (Konstantin Vedernikov).
- 복합 타입에 대해서는 하한과 상한을 지정할 수 없습니다. #85332 (Konstantin Vedernikov).
- Distributed table 또는 remote table FUNCTION을 통해 객체 스토리지 FUNCTION들에서 읽을 때 발생하는 논리적 오류를 수정합니다. 수정: #84658, #85173, #52022. #85359 (alesapin).
- 손상된 프로젝션이 있는 파트의 백업 문제를 수정했습니다. #85362 (Antonio Andelic).
- 해당 기능이 안정화될 때까지는 모든 릴리스에서 프로젝션에서
_part_offset컬럼 사용을 금지합니다. #85372 (Sema Checherinda). - JSON에 대해
ALTER UPDATE를 실행하는 동안 발생하던 비정상 종료와 데이터 손상 현상을 수정했습니다. #85383 (Pavel Kruglov). - 역순 읽기 최적화를 사용하는 병렬 레플리카 쿼리에서 잘못된 결과가 나올 수 있습니다. #85406 (Igor Nikonov).
- String 역직렬화 중 MEMORY_LIMIT_EXCEEDED가 발생할 때 발생할 수 있는 잠재적 UB(정의되지 않은 동작, 크래시)를 수정합니다. #85440 (Azat Khuzhin).
- 잘못 보고되던 KafkaAssignedPartitions 및 KafkaConsumersWithAssignment 메트릭을 수정합니다. #85494 (Ilya Golshtein).
- PREWHERE(명시적 또는 자동) 사용 시 처리된 바이트 통계값이 과소 계산되던 문제를 수정했습니다. #85495 (Michael Kolupaev).
- S3 요청 속도 저하에 대한 조기 반환 조건을 수정합니다. 재시도 가능한 오류로 인해 모든 스레드가 일시 중지되었을 때 속도 저하 동작이 활성화되도록 하기 위해,
s3_slow_all_threads_after_network_error또는backup_slow_all_threads_after_retryable_s3_error중 하나만 true이면 되도록 하고, 더 이상 둘 다 true일 필요가 없도록 했습니다. #85505 (Julia Kartseva). - This PR은 REST 카탈로그를 통해 Iceberg 테이블을 쿼리할 때 메타데이터 해석 문제를 수정합니다. ... #85531 (Saurabh Kumar Ojha).
- 비동기 insert 작업에서
log_comment또는insert_deduplication_token설정을 변경할 때 드물게 발생하던 크래시를 수정했습니다. #85540 (Anton Popov). - HTTP의 multipart/form-data 요청에서 date_time_input_format과 같은 파라미터가 무시되었습니다. #85570 (Sema Checherinda).
- icebergS3Cluster 및 icebergAzureCluster 테이블 함수에서 시크릿 마스킹 문제를 수정했습니다. #85658 (MikhailBurdukov).
- JSON 숫자를 Decimal 타입으로 변환할 때
JSONExtract에서 발생하던 정밀도 손실 문제를 수정했습니다. 이제 숫자형 JSON 값은 정확한 소수 표현을 유지하여 부동소수점 반올림 오류를 방지합니다. #85665 (ssive7b). DROP COLUMN이후 같은ALTER문에서COMMENT COLUMN IF EXISTS를 사용할 때 발생하던LOGICAL_ERROR를 수정했습니다. 이제IF EXISTS절은 동일한 문 안에서 컬럼이 삭제된 경우 주석 작업을 올바르게 건너뜁니다. #85688 (xiaohuanlin).- Delta Lake 캐시에서 읽기 횟수를 집계하는 로직을 수정합니다. #85704 (Kseniia Sumarokova).
- 긴 문자열을 처리할 때 CoalescingMergeTree에서 발생하던 segfault를 수정했습니다. 이 변경으로 #84582가 해결됩니다. #85709 (Konstantin Vedernikov).
- Iceberg 쓰기 시 메타데이터 타임스탬프를 업데이트합니다. #85711 (Konstantin Vedernikov).
distributed_depth를 *Cluster function의 지표로 사용하는 것은 잘못이며 데이터가 중복될 수 있습니다. 대신client_info.collaborate_with_initiator를 사용하십시오. #85734 (Konstantin Bogdanov).- Spark가 position delete 파일을 읽을 수 없습니다. #85762 (Konstantin Vedernikov).
- #85105의 비동기 로깅 리팩터링 이후
send_logs_source_regexp를 수정했습니다. #85797 (Azat Khuzhin). update_field가 있는 딕셔너리에서 MEMORY_LIMIT_EXCEEDED 오류 발생 시 발생할 수 있던 비일관성을 수정했습니다. #85807 (Azat Khuzhin).- 병렬 분산
INSERT SELECT에서Distributed대상 테이블을 사용할 때WITH절에 정의된 전역 상수를 지원합니다. 이전에는 쿼리에서Unknown expression identifier오류가 발생할 수 있었습니다. #85811 (Nikolai Kochetov). deltaLakeAzure,deltaLakeCluster,icebergS3Cluster,icebergAzureCluster의 자격 증명 값을 마스킹합니다. #85889 (Julian Maicher).DatabaseReplicated에서CREATE ... AS (SELECT * FROM s3Cluster(...))를 시도할 때 발생하는 논리 오류를 수정했습니다. #85904 (Konstantin Bogdanov).url()테이블 함수가 비표준 포트로 접근할 때 Host 헤더에 포트 번호가 올바르게 포함되도록 HTTP 요청을 수정합니다. 이를 통해 개발 환경에서 흔히 사용하는 사용자 지정 포트에서 실행되는 MinIO와 같은 S3 호환 서비스에 대해 presigned URL을 사용할 때 발생하던 인증 실패 문제가 해결됩니다. (Fixes #85898). #85921 (Tom Quist).- 이제 Unity Catalog에서는 Delta가 아닌 테이블에서 비정상적인 데이터 타입이 있는 스키마를 무시합니다. #85699 버그를 수정합니다. #85950 (alesapin).
- Iceberg 테이블의 필드 널 허용 여부를 수정했습니다. #85977 (Konstantin Vedernikov).
Replicated데이터베이스 복구 과정에서 발생하던 버그를 수정했습니다. 테이블 이름에%기호가 포함된 경우, 복구 중에 테이블이 다른 이름으로 잘못 재생성되는 문제가 있었습니다. #85987 (Alexander Tokmakov).- 비어 있는
Memory테이블을 복원할 때BACKUP_ENTRY_NOT_FOUND오류로 인해 백업 복원이 실패하던 문제를 수정했습니다. #86012 (Julia Kartseva). - 분산 테이블에서 ALTER를 수행할 때
sharding_key에 대한 검사를 추가합니다. 이전에는 잘못된 ALTER로 인해 테이블 정의가 손상되어 서버를 재시작해야 했습니다. #86015 (Nikolay Degterinsky). - 빈 Iceberg delete 파일을 생성하지 않도록 수정했습니다. #86061 (Konstantin Vedernikov).
- 과도하게 큰
setting값으로 인해 S3Queue 테이블이 손상되고 레플리카가 재시작되던 문제를 수정합니다. #86074 (Nikolay Degterinsky).
빌드/테스트/패키징 개선
- 기본적으로 S3를 사용하는 테스트에서 암호화된 디스크를 사용합니다. #59898 (Nikita Mikhaylov).
- 통합 테스트에서 스트리핑되지 않은 디버그 심볼을 얻기 위해
clickhouse바이너리를 사용합니다. #83779 (Mikhail f. Shiryaev). - 내부 libxml2 버전을 2.14.4에서 2.14.5로 업그레이드했습니다. #84230 (Robert Schulze).
- 내부 curl 버전을 8.14.0에서 8.15.0으로 업그레이드했습니다. #84231 (Robert Schulze).
- 이제 CI에서 캐시에 사용하는 메모리를 줄였으며, 캐시 eviction 동작에 대한 테스트도 개선했습니다. #84676 (alesapin).
ClickHouse 릴리스 25.7, 2025년 07월 24일
하위 호환되지 않는 변경
extractKeyValuePairs함수 변경: 따옴표로 둘러싸이지 않은 키 또는 값을 읽는 동안quoting_character가 예기치 않게 발견되었을 때의 동작을 제어하는 새 인자unexpected_quoting_character_strategy를 도입합니다. 값은invalid,accept,promote중 하나가 될 수 있습니다.invalid는 키를 폐기하고 키를 기다리는 상태로 되돌아갑니다.accept는 이를 키의 일부로 처리합니다.promote는 이전 문자를 버리고 따옴표가 있는 키로서 파싱을 시작합니다. 추가로, 따옴표가 있는 값을 파싱한 후에는 쌍 구분자가 발견된 경우에만 다음 키를 파싱합니다. #80657 (Arthur Passos).countMatches함수에서 0바이트 매치를 지원합니다. 이전 동작을 유지하려는 사용자는count_matches_stop_at_empty_match설정을 활성화하면 됩니다. #81676 (Elmi Ahmadov).- 전용 서버 설정(
max_backup_bandwidth_for_server,max_mutations_bandwidth_for_server,max_merges_bandwidth_for_server)에 더해서, 로컬(max_local_read_bandwidth_for_server,max_local_write_bandwidth_for_server) 및 원격(max_remote_read_network_bandwidth_for_server,max_remote_write_network_bandwidth_for_server) BACKUP 생성 시 서버 전체 범위의 스로틀러를 사용합니다. #81753 (Sergei Trifonov). - 삽입 가능한 컬럼이 하나도 없는 테이블을 생성하는 것을 금지합니다. #81835 (Pervakov Grigorii).
- 아카이브 내 파일 단위로 클러스터 함수 실행을 병렬화합니다. 이전 버전에서는 전체 아카이브(zip, tar, 7z 등)가 하나의 작업 단위였습니다. 기본값이
true인 새 설정cluster_function_process_archive_on_multiple_nodes를 추가했습니다.true로 설정하면 클러스터 함수에서 아카이브를 처리하는 성능이 향상됩니다. 이전 버전에서 아카이브와 함께 클러스터 함수를 사용하는 경우, 25.7+ 로 업그레이드하는 동안 오류를 피하고 호환성을 유지하려면false로 설정해야 합니다. #82355 (Kseniia Sumarokova). SYSTEM RESTART REPLICAS쿼리는 해당 데이터베이스에 대한 액세스 권한이 없어도 Lazy 데이터베이스 내 테이블을 깨우는 동작을 유발했으며, 이는 이 테이블들이 동시에 DROP 되고 있는 동안에도 발생했습니다. 참고: 이제SYSTEM RESTART REPLICAS는SHOW TABLES권한이 있는 데이터베이스의 레플리카만 재시작하며, 이는 자연스러운 동작입니다. #83321 (Alexey Milovidov).
신규 기능
MergeTree계열 테이블에 대해 경량 업데이트(lightweight update) 지원이 추가되었습니다. 경량 업데이트는 새로운 구문UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>을 사용하여 수행할 수 있습니다. 경량한 삭제(lightweight delete)는 경량 업데이트를 통해 구현되었습니다.lightweight_delete_mode = 'lightweight_update'SETTING을 해당 값으로 설정하여 활성화할 수 있습니다. #82004 (Anton Popov).- Iceberg 스키마 진화 시 복합 타입을 지원합니다. #73714 (Konstantin Vedernikov).
- Iceberg 테이블에 대한 INSERT 지원을 추가했습니다. #82692 (Konstantin Vedernikov).
- 필드 ID를 기준으로 Iceberg 데이터 파일을 읽습니다. 이를 통해 Iceberg와의 호환성이 향상되어, 메타데이터에서는 필드 이름을 변경하더라도 실제 Parquet 파일에서는 다른 이름에 매핑할 수 있습니다. #83065를 해결합니다. #83653 (Konstantin Vedernikov).
- 이제 ClickHouse에서는 Iceberg용 압축된
metadata.json파일을 지원합니다. 이로써 #70874 이슈가 해결되었습니다. #81451 (alesapin). - Glue 카탈로그에서
TimestampTZ를 지원합니다. 이를 통해 #81654 이슈를 해결합니다. #83132 (Konstantin Vedernikov). - ClickHouse 클라이언트에 AI 기반 SQL 생성 기능이 추가되었습니다. 이제 쿼리 앞에
??를 붙이면 자연어 설명으로부터 SQL 쿼리를 생성할 수 있습니다. OpenAI 및 Anthropic 프로바이더를 지원하며 스키마를 자동으로 탐지합니다. #83314 (Kaushik Iska). - Geo 타입을 WKB 형식으로 쓰는 FUNCTION을 추가합니다. #82935 (Konstantin Vedernikov).
- 소스에 대해
READ및WRITE라는 두 가지 새로운 액세스 유형을 도입하고, 소스와 관련된 기존 모든 액세스 유형은 사용 중단되었습니다. 예전에는GRANT S3 ON *.* TO user였으나 이제는GRANT READ, WRITE ON S3 TO user입니다. 이를 통해 소스에 대한READ및WRITE권한을 분리할 수 있으며, 예를 들어GRANT READ ON * TO user,GRANT WRITE ON S3 TO user와 같이 사용할 수 있습니다. 이 기능은access_control_improvements.enable_read_write_grantsSETTING으로 제어되며, 기본적으로 비활성화되어 있습니다. #73659 (pufit). - NumericIndexedVector: 비트-슬라이스(bit-sliced) 방식과 Roaring Bitmap 압축을 기반으로 하는 새로운 벡터형 데이터 구조로, 생성, 분석 및 원소별 산술 연산을 위한 20개가 넘는 함수와 함께 제공됩니다. 저장 공간을 절감하고 희소 데이터에 대한 조인, 필터 및 집계를 가속할 수 있습니다. #70582와 T. Xiong과 Y. Wang이 VLDB 2024에서 발표한 “Large-Scale Metric Computation in Online Controlled Experiment Platform” 논문에 제안된 내용을 구현합니다. #74193 (FriendLey).
- 워크로드 설정
max_waiting_queries를 이제 지원합니다. 이 설정은 쿼리 대기열의 크기를 제한하는 데 사용할 수 있습니다. 설정된 제한에 도달하면 이후 모든 쿼리는SERVER_OVERLOADED오류와 함께 종료됩니다. #81250 (Oleg Doronin). - 다음 금융 FUNCTION이 추가되었습니다:
financialInternalRateOfReturnExtended(XIRR),financialInternalRateOfReturn(IRR),financialNetPresentValueExtended(XNPV),financialNetPresentValue(NPV). #81599 (Joanna Hulboj). - 두 다각형의 교차 여부를 확인하기 위한 지리공간 함수
polygonsIntersectCartesian및polygonsIntersectSpherical를 추가합니다. #81882 (Paul Lamb). - MergeTree 계열 테이블에서
_part_granule_offset가상 컬럼을 지원합니다. 이 컬럼은 각 데이터 파트 내에서 행이 속한 granule/mark의 0부터 시작하는 인덱스를 나타냅니다. 이는 #79572를 해결합니다. #82341 (Amos Bird). #82341 (Amos Bird) - sRGB 색 공간과 OkLCH 색 공간 사이의 색상을 변환하기 위한 SQL 함수
colorSRGBToOkLCH및colorOkLCHToSRGB를 추가했습니다. #83679 (Fgrtue). CREATE USER쿼리에서 사용자 이름에 매개변수를 사용할 수 있습니다. #81387 (Diskein).system.formats테이블에 이제 HTTP 콘텐츠 타입, 스키마 추론 기능 등과 같은 포맷에 대한 확장된 정보가 포함됩니다. #81505 (Alexey Milovidov).
실험적 기능
- 텍스트 인덱스를 검색하기 위한 범용 도구인
searchAny및searchAll함수를 추가했습니다. #80641 (Elmi Ahmadov). - 텍스트 인덱스가 새로운
split토크나이저를 이제 지원합니다. #81752 (Elmi Ahmadov). text인덱스의 기본 인덱스 세분화 단위(granularity) 값을 64로 변경했습니다. 이를 통해 내부 벤치마크에서 평균 테스트 쿼리의 예상 성능이 향상됩니다. #82162 (Jimmy Aguilar Mena).- 256비트 비트맵은 상태에서 나가는 레이블을 정렬된 형태로 저장하지만, 후속 상태는 해시 테이블에 나타나는 순서대로 디스크에 저장됩니다. 따라서 디스크에서 읽을 때 레이블이 잘못된 다음 상태를 가리킬 수 있습니다. #82783 (Elmi Ahmadov).
- 텍스트 인덱스에서 FST 트리 blob에 대해 zstd 압축을 활성화했습니다. #83093 (Elmi Ahmadov).
- 벡터 유사도 인덱스를 베타 단계로 승격했습니다. 벡터 유사도 인덱스를 사용하려면 별칭 설정(alias)인
enable_vector_similarity_index를 활성화해야 합니다. #83459 (Robert Schulze). - 실험적인 zero-copy 복제(replication)와 관련된 실험적
send_metadata로직을 제거했습니다. 이 로직은 사용된 적이 없고, 현재 이 코드를 유지 보수하는 사람도 없습니다. 관련된 테스트도 전혀 없었기 때문에, 오랫동안 이미 깨져 있었을 가능성이 매우 높습니다. #82508 (alesapin). StorageKafka2를system.kafka_consumers에 통합했습니다. #82652 (János Benjamin Antal).- 예를 들어
(a < 1 and a > 0) or b = 3와 같은 복잡한 CNF/DNF를 통계 정보를 사용해 추정합니다. #82663 (Han Fei).
성능 개선
- 비동기 로깅을 도입했습니다. 로그가 속도가 느린 디바이스로 출력되더라도 쿼리가 더 이상 지연되지 않습니다. #82516 (Raúl Marín). 큐에 보관할 수 있는 항목의 최대 개수를 제한했습니다. #83214 (Raúl Marín).
- 각 세그먼트별로
INSERT SELECT가 독립적으로 실행되는 모드에서 병렬 분산INSERT SELECT가 기본적으로 활성화됩니다.parallel_distributed_insert_select설정을 참조하십시오. #83040 (Igor Nikonov). - 집계 쿼리에
Nullable가 아닌 컬럼에 대한 단일count()함수만 포함된 경우, 해시 테이블 프로빙 과정에서 집계 로직이 완전히 인라인되어 수행됩니다. 이로 인해 집계 상태를 할당하거나 유지할 필요가 없어져, 메모리 사용량과 CPU 오버헤드가 크게 감소합니다. 이는 #81982를 부분적으로 해결합니다. #82104 (Amos Bird). - 일반적인 단일 키 컬럼인 경우 해시 맵에 대한 불필요한 추가 루프를 제거하여
HashJoin성능을 최적화했으며,null_map과join_mask가 항상true또는false인 경우 해당 검사도 제거했습니다. #82308 (Nikita Taranov). -Ifcombinator에 대한 사소한 최적화입니다. #78454 (李扬).- 벡터 유사도 인덱스를 사용하는 벡터 검색 쿼리는 스토리지 읽기량과 CPU 사용량이 줄어들어 더 낮은 지연 시간으로 실행됩니다. #79103 (Shankar Iyer).
filterPartsByQueryConditionCache에서merge_tree_min_{rows,bytes}_for_seek설정을 적용하여 인덱스로 파트를 필터링하는 다른 메서드와 동일하게 동작하도록 했습니다. #80312 (李扬).TOTALS단계 이후 파이프라인이 멀티스레드로 동작하도록 했습니다. #80331 (UnamedRus).Redis및KeeperMap스토리지에서 키 기반 필터링을 수정합니다. #81833 (Pervakov Grigorii).- JOIN 입력 및 출력 블록(조인 알고리즘이 이를 지원하는 경우)에 대한 최소 블록 크기(행 단위)를 제어하기 위해,
min_joined_block_size_rows라는 새 설정을 추가합니다(min_joined_block_size_bytes와 유사하며 기본값은 65409). 작은 블록은 병합됩니다. #81886 (Nikita Taranov). ATTACH PARTITION가 더 이상 모든 캐시를 비우지 않습니다. #82377 (Alexey Milovidov).- 동치 클래스를 사용하여 불필요한 JOIN 연산을 제거함으로써 상관 서브쿼리에 대해 생성되는 실행 계획을 최적화합니다. 모든 상관 컬럼에 대해 동치 표현식이 존재하는 경우,
query_plan_correlated_subqueries_use_substitution설정이 활성화된 경우에는CROSS JOIN은 생성되지 않습니다. #82435 (Dmitry Novik). EXISTS함수의 인수로 나타나는 경우, 연관된 서브쿼리에서 필요한 컬럼만 읽도록 최적화했습니다. #82443 (Dmitry Novik).- 쿼리 분석 단계에서 쿼리 트리 비교 속도를 소폭 향상했습니다. #82617 (Nikolai Kochetov).
- ProfileEvents의 Counter에 메모리 정렬을 추가하여 false sharing을 줄였습니다. #82697 (Jiebin Sun).
- #82308에 도입된
null_map및JoinMask최적화가 여러 개의 분리(disjunct) 조건이 있는 JOIN의 경우에도 적용되었습니다. 또한KnownRowsHolder데이터 구조가 최적화되었습니다. #83041 (Nikita Taranov). - 조인 플래그용으로 단순한
std::vector<std::atomic_bool>을 사용하여 각 플래그에 접근할 때마다 해시를 계산하는 일을 피합니다. #83043 (Nikita Taranov). HashJoin이lazy출력 모드를 사용할 때 결과 컬럼에 대한 메모리를 사전 할당하지 마십시오. 이는 특히 매칭 개수가 적을 때 비효율적입니다. 또한 조인이 완료된 후에는 정확한 매칭 개수를 알 수 있으므로, 보다 정확하게 메모리를 사전 할당할 수 있습니다. #83304 (Nikita Taranov).- 파이프라인 구성 시 포트 헤더에서 발생하는 메모리 복사를 최소화합니다. 원본 PR은 heymind이 작성했습니다. #83381 (Raúl Marín).
- RocksDB 스토리지를 사용할 때 ClickHouse Keeper의 시작 성능을 개선했습니다. #83390 (Antonio Andelic).
- 동시 부하가 높은 환경에서 락 경합을 줄이기 위해 저장소 스냅샷 데이터를 생성하는 동안에는 락을 보유하지 않도록 했습니다. #83510 (Duc Canh Le).
- 파싱 오류가 발생하지 않는 경우 serializer(직렬화기)를 재사용하도록 하여
ProtobufSingle입력 포맷의 성능을 개선했습니다. #83613 (Eduard Karacharov). - 짧은 쿼리의 속도를 높이는 파이프라인 구축 성능을 개선합니다. #83631 (Raúl Marín).
- 짧은 쿼리의 실행 속도를 향상하도록
MergeTreeReadersChain::getSampleBlock를 최적화했습니다. #83875 (Raúl Marín). - 비동기 요청을 사용하여 데이터 카탈로그의 테이블 목록 조회 속도를 향상했습니다. #81084 (alesapin).
s3_slow_all_threads_after_network_error설정이 활성화된 경우 S3 재시도 메커니즘에 지터(jitter)를 추가합니다. #81849 (zoomxi).
개선 사항
- 가독성을 높이기 위해 괄호를 여러 가지 색으로 구분해 표시합니다. #82538 (Konstantin Bogdanov).
- LIKE/REGEXP 패턴을 입력하는 동안 메타문자를 강조 표시합니다. 이미
clickhouse-format및clickhouse-client의 echo 출력에서는 지원하고 있었지만, 이제 명령 프롬프트에서도 적용됩니다. #82871 (Alexey Milovidov). clickhouse-format및 클라이언트의 echo 출력에서의 구문 강조가 명령줄 프롬프트의 구문 강조와 동일한 방식으로 작동합니다. #82874 (Alexey Milovidov).- 이제 데이터베이스 메타데이터 디스크로
plain_rewritable디스크를 사용할 수 있게 되었습니다. 이를 데이터베이스 디스크로 사용할 수 있도록plain_rewritable에moveFile및replaceFile메서드를 구현했습니다. #79424 (Tuan Pham Anh). PostgreSQL,MySQL및DataLake데이터베이스에 대한 백업을 허용합니다. 이러한 데이터베이스를 백업하면 데이터베이스 내부의 데이터가 아니라 정의만 저장됩니다. #79982 (Nikolay Degterinsky).allow_experimental_join_condition설정은 이제 항상 허용되므로 더 이상 사용되지 않는 것으로 표시되었습니다. #80566 (Vladimir Cherkasov).- ClickHouse async metrics에 pressure metrics를 추가했습니다. #80779 (Xander Garbett).
- 마크 캐시에서 축출된 항목을 추적하기 위한 메트릭
MarkCacheEvictedBytes,MarkCacheEvictedMarks,MarkCacheEvictedFiles를 추가했습니다. (issue #60989). #80799 (Shivji Kumar Jha). - spec에서 정의한 대로 Parquet enum을 바이트 배열로 기록하도록 지원합니다. #81090 (Arthur Passos).
DeltaLake테이블 엔진 개선 사항: delta-kernel-rs에ExpressionVisitorAPI가 있으며, 이 PR에서 이를 구현하고 파티션 컬럼 표현식 변환에 적용했습니다(이로써 이전에 코드에서 사용되던 delta-kernel-rs의 오래되고 더 이상 권장되지 않는 방식을 대체합니다). 앞으로 이ExpressionVisitor는 통계 기반 프루닝(statistics-based pruning)과 일부 Delta Lake 고유 기능을 구현하는 데에도 사용될 수 있습니다. 또한 이 변경의 목적은DeltaLakeCluster테이블 엔진에서 파티션 프루닝을 지원하는 데 있습니다(파싱된 표현식의 결과인 ActionsDAG를 직렬화하여 데이터 경로와 함께 이니시에이터에서 전송합니다. 프루닝에 필요한 이러한 정보는 데이터 파일 목록을 나열하는 과정에서만 메타 정보로 제공되며, 이 작업은 이니시에이터에서만 수행되지만, 실제로는 각 읽기 서버에서 데이터에 적용되어야 하기 때문입니다). #81136 (Kseniia Sumarokova).- 이름이 지정된 튜플(named tuple)의 supertype을 도출할 때 요소 이름을 보존합니다. #81345 (lgbo).
- StorageKafka2에서 기존에 커밋된 오프셋에 의존하지 않도록 소비된 메시지를 수동으로 카운트하도록 했습니다. #81662 (János Benjamin Antal).
- ClickHouse Keeper 데이터를 관리하고 분석하기 위한 새로운 명령줄 도구인
clickhouse-keeper-utils가 추가되었습니다. 이 도구는 스냅샷과 변경 로그에서 상태를 덤프하고, 변경 로그 파일을 분석하며, 특정 로그 구간을 추출하는 기능을 지원합니다. #81677 (Antonio Andelic). - 전체 및 사용자별 네트워크 스로틀러는 재설정되지 않으며, 이를 통해
max_network_bandwidth_for_all_users및max_network_bandwidth_for_all_users한도가 초과되지 않도록 보장합니다. #81729 (Sergei Trifonov). - GeoParquet를 출력 형식으로 작성하는 기능을 지원합니다. #81784 (Konstantin Vedernikov).
- 현재 미완료 data mutation의 영향을 받고 있는 컬럼의 이름을 변경하려는
RENAME COLUMNalter mutation은 시작되지 않도록 금지합니다. #81823 (Mikhail Artemenko). Connection헤더는 이제 연결을 유지해야 하는지가 결정된 후, 헤더의 마지막에 전송됩니다. #81951 (Sema Checherinda).- listen_backlog(기본값 4096)에 맞추어 TCP 서버 큐(기본값 64)를 튜닝합니다. #82045 (Azat Khuzhin).
- 서버를 재시작하지 않고 실행 중에
max_local_read_bandwidth_for_server및max_local_write_bandwidth_for_server를 다시 로드할 수 있는 기능이 추가되었습니다. #82083 (Kai Zhu). TRUNCATE TABLE system.warnings로system.warnings테이블의 모든 경고를 삭제할 수 있도록 지원을 추가했습니다. #82087 (Vladimir Cherkasov).- 데이터 레이크 클러스터 FUNCTION에서 파티션 프루닝 동작을 수정했습니다. #82131 (Kseniia Sumarokova).
- DeltaLakeCluster 테이블 함수에서 파티션된 데이터를 읽는 동작을 수정합니다. 이 PR에서는 클러스터 함수 프로토콜 버전을 높여 이니시에이터에서 레플리카로 추가 정보를 전송할 수 있도록 합니다. 이 추가 정보에는 delta-kernel 변환 식이 포함되며, 파티션 컬럼을 파싱하는 데 필요합니다(그리고 향후 생성된 컬럼 등 다른 항목에도 사용될 수 있습니다). #82132 (Kseniia Sumarokova).
- 함수
reinterpret가 이제T가 고정 크기 데이터 타입인 경우Array(T)로의 변환을 지원합니다(issue #82621). #83399 (Shankar Iyer). - 이제 Datalake 데이터베이스가 더 이해하기 쉬운 예외를 발생시킵니다. #81211을(를) 수정했습니다. #82304 (alesapin).
HashJoin::needUsedFlagsForPerRightTableRow에서 false를 반환하도록 변경하여 CROSS JOIN을 개선합니다. #82379 (lgbo).- 맵 컬럼을 Array of Tuples로 읽고 쓸 수 있도록 했습니다. #82408 (MikhailBurdukov).
system.licenses에 Rust crate에서 사용하는 라이선스를 나열합니다. #82440 (Raúl Marín).- 이제
{uuid}와 같은 매크로를 S3Queue 테이블 엔진의keeper_path설정에서 사용할 수 있습니다. #82463 (Nikolay Degterinsky). - Keeper 개선: 백그라운드 스레드를 사용해 디스크 간 changelog 파일을 이동하도록 했습니다. 이전에는 changelog를 다른 디스크로 이동하면 이동이 완료될 때까지 Keeper 전체가 블로킹되었습니다. 이로 인해 이동 작업에 장시간이 소요되는 경우(예: S3 디스크로 이동할 때) 성능 저하가 발생했습니다. #82485 (Antonio Andelic).
- Keeper 개선: 새로운 설정
keeper_server.cleanup_old_and_ignore_new_acl이 추가되었습니다. 이 설정을 활성화하면 모든 노드의 ACL이 삭제되고, 새 요청에 대한 ACL은 무시됩니다. 노드에서 ACL을 완전히 제거하는 것이 목표라면, 새로운 스냅샷이 생성될 때까지 이 설정을 활성화한 상태로 유지하는 것이 중요합니다. #82496 (Antonio Andelic). - S3Queue 테이블 엔진을 사용하는 테이블에서 스트리밍을 비활성화하는 새로운 서버 설정
s3queue_disable_streaming이 추가되었습니다. 이 설정은 서버를 재시작하지 않고도 변경할 수 있습니다. #82515 (Kseniia Sumarokova). - 파일 시스템 캐시의 동적 크기 조정 기능을 리팩터링했습니다. 내부 상태 분석을 위한 로그를 더 추가했습니다. #82556 (Kseniia Sumarokova).
- 설정 파일 없이 실행된
clickhouse-server도 기본 설정과 마찬가지로 PostgreSQL 포트 9005를 수신합니다. #82633 (Alexey Milovidov). ReplicatedMergeTree::executeMetadataAlter에서 StorageID를 가져온 뒤,DDLGuard를 획득하지 않은 상태로IDatabase::alterTable을 호출하려고 시도합니다. 이 시간 동안에는 문제의 테이블을 다른 테이블로 교체하는 것이 기술적으로 가능하므로, 정의를 가져올 때 잘못된 테이블의 정의를 가져오게 될 수 있습니다. 이를 방지하기 위해IDatabase::alterTable을 호출하려 할 때 UUID가 일치하는지 별도로 확인하는 검사를 추가했습니다. #82666 (Nikolay Degterinsky).- 읽기 전용 원격 디스크가 있는 데이터베이스를
ATTACH할 때DatabaseCatalog에 테이블 UUID가 수동으로 추가되도록 했습니다. #82670 (Tuan Pham Anh). NumericIndexedVector에서nan및inf를 사용하지 못하도록 합니다. #82239와 그 외 몇 가지를 수정합니다. #82681 (Raufs Dunamalijevs).X-ClickHouse-Progress및X-ClickHouse-Summary헤더 형식에서 0 값을 생략하지 않도록 했습니다. #82727 (Nikita Mikhaylov).- Keeper 개선: world:anyone ACL에 특정 권한을 지정할 수 있도록 지원합니다. #82755 (Antonio Andelic).
- SummingMergeTree에서 합산에 사용되는 컬럼으로 명시적으로 나열된 컬럼에 대해
RENAME COLUMN또는DROP COLUMN을 허용하지 않습니다. #81836 이슈를 해결합니다. #82821 (Alexey Milovidov). Decimal에서Float32로의 변환 정밀도를 향상했습니다.Decimal에서BFloat16으로의 변환을 구현했습니다. #82660를 해결했습니다. #82823 (Alexey Milovidov).- Web UI의 스크롤바가 약간 더 보기 좋게 변경되었습니다. #82869 (Alexey Milovidov).
- 내장 구성을 사용하는
clickhouse-server에서 HTTP OPTIONS 응답을 제공하여 Web UI를 사용할 수 있습니다. #82870 (Alexey Milovidov). - config에서 경로에 대한 추가 Keeper ACL을 지정하는 기능이 추가되었습니다. 특정 경로에 대해 추가 ACL을 설정하려면 config의
zookeeper.path_acls아래에 이를 정의하면 됩니다. #82898 (Antonio Andelic). - 이제 뮤테이션 스냅샷은 가시 파트 스냅샷을 기반으로 생성됩니다. 또한 스냅샷에서 사용되는 뮤테이션 카운터는 포함된 뮤테이션을 기준으로 재계산됩니다. #82945 (Mikhail Artemenko).
- Keeper가 소프트 메모리 제한으로 인해 쓰기를 거부할 때 ProfileEvent를 추가합니다. #82963 (Xander Garbett).
system.s3queue_log에commit_time,commit_id컬럼을 추가합니다. #83016 (Kseniia Sumarokova).- 경우에 따라 메트릭에 여러 차원이 필요할 수 있습니다. 예를 들어, 하나의 카운터만 두는 대신 실패한 머지 또는 뮤테이션을 오류 코드별로 집계해야 할 수 있습니다. 이를 위해 정확히 그런 역할을 하는
system.dimensional_metrics를 도입하고, 첫 번째 차원형 메트릭인failed_merges를 추가합니다. #83030 (Miсhael Stetsyuk). - ClickHouse client에서 알 수 없는 설정 경고를 통합해 요약 형태로 로그에 기록합니다. #83042 (Bharat Nallan).
- ClickHouse 클라이언트가 이제 연결 오류가 발생하면 로컬 포트를 보고합니다. #83050 (Jianfei Hu).
AsynchronousMetrics에서 오류 처리 방식이 약간 개선되었습니다./sys/block디렉터리가 존재하지만 접근할 수 없는 경우, 서버는 블록 디바이스를 모니터링하지 않고 시작됩니다. #79229을(를) 해결합니다. #83115 (Alexey Milovidov).- SystemLogs 종료 순서를 변경했습니다. 이제 일반 테이블(ordinary tables) 이후, 시스템 테이블(system tables) 이전에 종료되며, 이전에는 일반 테이블보다 먼저 종료되었습니다. #83134 (Kseniia Sumarokova).
S3Queue종료 과정에 대한 로그를 추가했습니다. #83163 (Kseniia Sumarokova).Time및Time64를MM:SS,M:SS,SS, 또는S형식으로 파싱할 수 있습니다. #83299 (Yarik Briukhovetskyi).distributed_ddl_output_mode='*_only_active'일 때,max_replication_lag_to_enqueue보다 큰 복제 지연(replication lag)이 있는 새 레플리카나 복구된 레플리카를 기다리지 않도록 합니다. 이렇게 하면 새 레플리카가 초기화나 복구를 마친 후 활성화되지만, 초기화 동안 방대한 복제 로그(replication log)가 쌓인 경우에DDL task is not finished on some hosts오류가 발생하는 것을 피하는 데 도움이 됩니다. 또한 복제 지연이max_replication_lag_to_enqueue보다 작아질 때까지 대기하는SYSTEM SYNC DATABASE REPLICA STRICT쿼리도 구현했습니다. #83302 (Alexander Tokmakov).- 예외 메시지에 표현식 처리 동작에 대한 설명을 과도하게 길게 출력하지 않도록 했습니다. #83164 이슈를 해결했습니다. #83350 (Alexey Milovidov).
- 파트의 접두사와 접미사를 파싱하는 기능을 추가하고, 비상수 컬럼에 대한 커버리지도 확인하도록 했습니다. #83377 (Mikhail Artemenko).
- 명명된 컬렉션을 사용할 경우 ODBC 및 JDBC에서 매개변수 이름을 통일합니다. #83410 (Andrey Zvonov).
- 스토리지를 종료하는 동안
getStatus가ErrorCodes::ABORTED예외를 던집니다. 이전에는 이로 인해 select 쿼리가 실패했습니다. 이제ErrorCodes::ABORTED예외를 캐치한 후 의도적으로 무시합니다. #83435 (Miсhael Stetsyuk). MergeParts항목의 part_log 프로파일 이벤트에UserTimeMicroseconds,SystemTimeMicroseconds,RealTimeMicroseconds와 같은 프로세스 리소스 메트릭을 추가했습니다. #83460 (Vladimir Cherkasov).- Keeper에서
create_if_not_exists,check_not_exists,remove_recursive기능 플래그를 기본적으로 활성화하여 새로운 유형의 요청을 지원합니다. #83488 (Antonio Andelic). - 서버 종료 시에는 테이블을 종료하기 전에 S3(Azure/etc)Queue 스트리밍을 먼저 중지하도록 했습니다. #83530 (Kseniia Sumarokova).
JSON입력 형식에서Date와Date32를 정수로 사용할 수 있도록 했습니다. #83597 (MikhailBurdukov).- 프로젝션을 로드하거나 추가하는 과정에서 발생하는 특정 상황의 예외 메시지를 더 쉽게 읽을 수 있도록 개선했습니다. #83728 (Robert Schulze).
clickhouse-server에 대해 바이너리 체크섬 무결성 검사를 건너뛸 수 있도록 하는 설정 옵션을 추가합니다. #83637를 해결합니다. #83749 (Rafael Roquetto).
버그 수정(공식 안정 릴리스에서 사용자가 인지할 수 있는 오동작)
clickhouse-benchmark에서--reconnect옵션에 잘못 설정되어 있던 기본값을 바로잡습니다. 이 값은 #79465에서 실수로 변경되었습니다. #82677 (Alexey Milovidov).CREATE DICTIONARY의 서식 불일치를 수정합니다. #82105를 해결합니다. #82829 (Alexey Milovidov).materializeFUNCTION를 포함하는 TTL의 형식이 일관성 없던 문제를 수정했습니다. #82828를 해결했습니다. #82831 (Alexey Milovidov).INTO OUTFILE과 같은 출력 옵션을 포함한 서브쿼리에서EXPLAIN AST결과의 형식이 일관되지 않던 문제를 수정합니다. #82826 이슈를 해결합니다. #82840 (Alexey Milovidov).- 별칭 사용이 허용되지 않는 컨텍스트에서 괄호로 묶인 식과 별칭의 서식이 일관되지 않던 문제를 수정합니다. #82836를 해결합니다. #82837를 해결합니다. #82867 (Alexey Milovidov).
- IPv4와 집계 함수 상태를 곱할 때 적절한 오류 코드를 사용하도록 수정했습니다. #82817을(를) 해결했습니다. #82818 (Alexey Milovidov).
- 파일 시스템 캐시의 논리 오류 "Having zero bytes but range is not finished"를 수정합니다. #81868 (Kseniia Sumarokova).
- TTL로 인해 행이 줄어드는 경우
minmax_count_projection과 같이 해당 인덱스에 의존하는 알고리즘의 정확성을 보장하기 위해 최솟값-최댓값 인덱스를 재계산합니다. 이로써 #77091을(를) 해결합니다. #77166 (Amos Bird). ORDER BY ... LIMIT BY ... LIMIT N이 조합된 쿼리에서 ORDER BY가 PartialSorting으로 실행되는 경우, 카운터rows_before_limit_at_least가 이제 정렬 변환 단계에서 소비된 행 수가 아니라 LIMIT 절에 의해 소비된 행 수를 반영합니다. #78999 (Eduard Karacharov).- 첫 번째 대안이 리터럴이 아니며 alternation(선택)을 포함하는 regexp를 사용해 token/ngram 인덱스를 기준으로 필터링할 때 발생하던 과도한 granule 건너뛰기를 수정했습니다. #79373 (Eduard Karacharov).
<=>연산자와 Join 스토리지 관련 논리 오류를 수정하여, 이제 쿼리가 적절한 에러 코드를 반환합니다. #80165 (Vladimir Cherkasov).remote함수 계열과 함께 사용할 때loop함수에서 발생하던 비정상 종료 문제를 수정했습니다.loop(remote(...))에서 LIMIT 절이 올바르게 적용되도록 했습니다. #80299 (Julia Kartseva).- Unix epoch(1970-01-01) 이전과 최대 날짜(2106-02-07 06:28:15) 이후의 날짜를 처리할 때
to_utc_timestamp및from_utc_timestamp함수의 동작이 올바르지 않던 문제를 수정했습니다. 이제 이 함수들은 각각 epoch 시작 시점과 최대 날짜로 값을 올바르게 제한합니다. #80498 (Surya Kant Ranjan). - 병렬 레플리카로 실행되는 일부 쿼리의 경우, 순서 보장 읽기 최적화가 이니시에이터에서는 적용될 수 있지만 원격 노드에서는 적용되지 않을 수 있었습니다. 이로 인해 병렬 레플리카 코디네이터(이니시에이터)와 원격 노드에서 서로 다른 읽기 모드가 사용되면서 논리적 오류가 발생했습니다. #80652 (Igor Nikonov).
- 프로젝션 구체화 중 컬럼 타입이 널 허용으로 변경된 경우 발생하던 논리 오류를 수정했습니다. #80741 (Pavel Kruglov).
- TTL을 업데이트할 때 TTL GROUP BY에서 TTL 재계산이 올바르지 않던 문제를 수정했습니다. #81222 (Evgeniy Ulasik).
- Parquet 블룸 필터가
WHERE function(key) IN (...)조건을 마치WHERE key IN (...)인 경우처럼 잘못 처리하던 문제를 수정했습니다. #81255 (Michael Kolupaev). - 병합 중 예외가 발생했을 때
Aggregator에서 발생할 수 있던 크래시를 수정했습니다. #81450 (Nikita Taranov). - 필요한 경우(예: 이름에
-와 같은 특수 문자가 포함된 경우) 데이터베이스와 테이블 이름에 백틱을 추가하도록InterpreterInsertQuery::extendQueryLogElemImpl을 수정했습니다. #81528 (Ilia Shvyrialkin). - 왼쪽 인자가 NULL이고 서브쿼리 결과가 널 허용이 아닌(non-nullable) 경우
transform_null_in=1설정에서IN연산 실행을 수정했습니다. #81584 (Pavel Kruglov). - 기존 테이블에서 데이터를 읽는 동안 default/materialize 표현식을 실행할 때 실험적이거나 의심스러운 타입을 검증하지 않도록 했습니다. #81618 (Pavel Kruglov).
- TTL 표현식에서 dict를 사용할 때 머지 작업 중 "Context has expired" 오류가 발생하던 문제를 수정합니다. #81690 (Azat Khuzhin).
castFUNCTION의 단조성을 수정했습니다. #81722 (zoomxi).- 스칼라 상관 서브쿼리 처리 중 필요한 컬럼이 읽히지 않는 문제를 수정합니다. #81716을 해결합니다. #81805 (Dmitry Novik).
- 이전 버전에서는
/js에 대한 요청에 서버가 불필요하게 많은 내용을 반환했습니다. 이 변경으로 #61890이(가) 해결되었습니다. #81895 (Alexey Milovidov). - 이전에
MongoDB테이블 엔진 정의에서host:port인자에 경로(path) 컴포넌트를 포함할 수 있었으나, 이는 묵시적으로 무시되었습니다. MongoDB 통합 기능은 이러한 테이블의 로드를 거부합니다. 이번 수정으로MongoDB엔진에 인자가 다섯 개 있는 경우에는 이러한 테이블을 로드하도록 허용하고, 인자에서 데이터베이스 이름을 사용하면서 경로 컴포넌트는 무시합니다. 참고: 이 수정은 새로 생성된 테이블이나mongo테이블 함수가 포함된 쿼리, 그리고 딕셔너리 소스 및 named collection에는 적용되지 않습니다. #81942 (Vladimir Cherkasov). - 머지 중 예외가 발생할 경우
Aggregator가 크래시될 수 있던 문제를 수정했습니다. #82022 (Nikita Taranov). - 쿼리에서 상수 별칭 컬럼만 사용되는 경우의 필터 분석을 수정합니다. #79448를 해결합니다. #82037 (Dmitry Novik).
- GROUP BY와 SET용 TTL에서 동일한 컬럼을 사용할 때 LOGICAL_ERROR와 이후 크래시가 발생하던 문제를 수정했습니다. #82054 (Pablo Marcos).
- 시크릿 마스킹에서 S3 테이블 함수의 인자 검증을 수정하여 발생할 수 있었던
LOGICAL_ERROR를 방지하고, #80620을(를) 해결합니다. #82056 (Vladimir Cherkasov). - Iceberg에서 발생하는 데이터 레이스를 수정했습니다. #82088 (Azat Khuzhin).
DatabaseReplicated::getClusterImpl를 수정합니다.hosts의 첫 번째 요소(또는 여러 개의 요소)에id == DROPPED_MARK가 있고 동일한 세그먼트에 대한 다른 요소가 없으면, 이로 인해shards의 첫 번째 요소가 비어 있는 벡터가 되어std::out_of_range예외가 발생합니다. #82093 (Miсhael Stetsyuk).- arraySimilarity 함수의 복사-붙여넣기 오류를 수정하고 UInt32 및 Int32 가중치 사용을 금지했습니다. 테스트와 문서를 업데이트했습니다. #82103 (Mikhail f. Shiryaev).
WHERE조건과IndexSet이 있는 쿼리에서arrayJoin을 사용할 때 발생하던Not found column오류를 수정했습니다. #82113 (Nikolai Kochetov).- Glue catalog 통합의 버그를 수정했습니다. 이제 ClickHouse는 일부 서브컬럼에 decimal이 포함된 중첩 데이터 타입의 테이블을 읽을 수 있습니다. 예를 들어
map<string, decimal(9, 2)>와 같습니다. 이 변경으로 #81301 이슈가 해결되었습니다. #82114 (alesapin). - 25.5 버전에 포함된 https://github.com/ClickHouse/ClickHouse/pull/79051에서 도입된 SummingMergeTree의 성능 저하를 수정합니다. #82130 (Pavel Kruglov).
- URI를 통해 settings를 전달하는 경우 마지막 값만 적용됩니다. #82137 (Sema Checherinda).
- Iceberg에서 발생하던 "Context has expired" 오류를 수정했습니다. #82146 (Azat Khuzhin).
- 서버가 메모리 부족 상태일 때 원격 쿼리에서 발생할 수 있는 교착 상태를 수정했습니다. #82160 (Kirill).
- 큰 수에 함수를 적용했을 때 발생하던
numericIndexedVectorPointwiseAdd,numericIndexedVectorPointwiseSubtract,numericIndexedVectorPointwiseMultiply,numericIndexedVectorPointwiseDivide함수의 오버플로우 문제를 수정했습니다. #82165 (Raufs Dunamalijevs). - 테이블 종속성에 존재하던 버그를 수정하여 materialized view가
INSERT쿼리를 놓치는 현상을 해결했습니다. #82222 (Nikolay Degterinsky). - 제안 스레드와 메인 클라이언트 스레드 사이에서 발생할 수 있는 잠재적인 데이터 레이스를 수정했습니다. #82233 (Azat Khuzhin).
- 이제 ClickHouse에서 스키마 진화 이후 Glue 카탈로그의 Iceberg 테이블을 읽을 수 있습니다. #81272 문제가 수정되었습니다. #82301 (alesapin).
- 비동기 메트릭 설정
asynchronous_metrics_update_period_s및asynchronous_heavy_metrics_update_period_s의 유효성 검사를 수정합니다. #82310 (Bharat Nallan). - 여러 개의 조인(JOIN)이 포함된 쿼리에서 matcher를 해석하는 과정에서 발생하던 논리 오류를 수정하고 #81969 이슈를 닫았습니다. #82421 (Vladimir Cherkasov).
- AWS ECS 토큰에 만료 시간을 추가하여 갱신할 수 있도록 했습니다. #82422 (Konstantin Bogdanov).
CASEFUNCTION의NULL인자 처리와 관련된 버그를 수정했습니다. #82436 (Yarik Briukhovetskyi).- 클라이언트에서 글로벌 컨텍스트를 사용하지 않도록 변경하여 데이터 레이스를 수정하고,
session_timezone재정의 동작을 바로잡았습니다(이전에users.xml/클라이언트 옵션에서session_timezone가 비어 있지 않은 값으로 설정되어 있고 쿼리 컨텍스트에서는 빈 값으로 설정된 경우 잘못되게도users.xml의 값이 사용되었으나, 이제는 쿼리 컨텍스트가 항상 글로벌 컨텍스트보다 우선합니다). #82444 (Azat Khuzhin). - 외부 테이블 엔진에서 캐시된 버퍼의 경계 정렬 비활성화 기능을 수정했습니다. 이 동작은 https://github.com/ClickHouse/ClickHouse/pull/81868 에서 깨졌습니다. #82493 (Kseniia Sumarokova).
- 키-값 스토리지가 형 변환된 키와 조인될 때 발생하던 충돌을 수정합니다. #82497 (Pervakov Grigorii).
- logs/query_log에서 named collection 값이 숨겨지지 않던 문제를 수정했습니다. #82405을(를) 해결했습니다. #82510 (Kseniia Sumarokova).
- 세션 종료 시
user_id가 간헐적으로 비어 있을 수 있어 로깅 과정에서 크래시가 발생할 수 있는 문제를 수정했습니다. #82513 (Bharat Nallan). - Time 값 파싱 시 msan 문제가 발생할 수 있던 경우를 수정합니다. 다음 이슈를 해결합니다: #82477. #82514 (Yarik Briukhovetskyi).
- 서버 작업이 멈추지 않도록
threadpool_writer_pool_size값을 0으로 설정하지 못하게 했습니다. #82532 (Bharat Nallan). - 연관된 컬럼에 대한 ROW POLICY 표현식 분석 중 발생하던
LOGICAL_ERROR를 수정했습니다. #82618 (Dmitry Novik). enable_shared_storage_snapshot_in_query = 1일 때mergeTreeProjection테이블 함수에서 부모 메타데이터가 잘못 사용되던 문제를 수정합니다. 관련 이슈: #82634. #82638 (Amos Bird).- 이제
trim{Left,Right,Both}함수에서 "FixedString(N)" 타입의 입력 문자열도 지원합니다. 예를 들어,SELECT trimBoth(toFixedString('abc', 3), 'ac')쿼리가 이제 정상적으로 동작합니다. #82691 (Robert Schulze). - AzureBlobStorage에서 native copy를 수행할 때 인증 방식을 비교하는 과정에서 예외가 발생할 경우, 읽기 후 복사(즉, 비-native copy) 방식으로 폴백(fallback)되도록 코드를 수정했습니다. #82693 (Smita Kulkarni).
- 비어 있는 요소가 있는 경우
groupArraySample/groupArrayLast의 역직렬화를 수정했습니다(입력이 비어 있을 때 역직렬화 과정에서 바이너리 데이터의 일부를 건너뛸 수 있었고, 이로 인해 데이터 읽기 중 데이터 손상 및 TCP 프로토콜에서 UNKNOWN_PACKET_FROM_SERVER가 발생할 수 있었습니다). 이는 숫자 및 날짜·시간 타입에는 영향을 주지 않습니다. #82763 (Pedro Ferreira). - 비어 있는
Memory테이블의 백업 처리 오류를 수정하여 복원 시BACKUP_ENTRY_NOT_FOUND오류가 발생하며 실패하던 문제를 해결합니다. #82791 (Julia Kartseva). - union/intersect/except_default_mode 재작성 로직의 예외 안전성을 개선했습니다. #82664를 해결했습니다. #82820 (Alexey Milovidov).
- 비동기 테이블 로딩 작업 수를 추적합니다. 실행 중인 작업이 있는 경우
TransactionLog::removeOldEntries에서tail_ptr를 업데이트하지 않습니다. #82824 (Tuan Pham Anh). - Iceberg에서 발생하던 데이터 레이스를 수정했습니다. #82841 (Azat Khuzhin).
- 25.6에서 도입된
use_skip_indexes_if_final_exact_mode최적화는MergeTree엔진 설정 및 데이터 분포에 따라 적절한 후보 범위를 선택하지 못하는 문제가 있을 수 있었습니다. 이제 이 문제가 해결되었습니다. #82879 (Shankar Iyer). - SCRAM_SHA256_PASSWORD 타입의 AST에서 파싱할 때 인증 데이터의 salt를 설정합니다. #82888 (Tuan Pham Anh).
- 캐시를 사용하지 않는 Database 구현을 사용하는 경우, 해당 테이블의 컬럼이 반환되고 참조가 무효화된 이후에 테이블 메타데이터가 삭제됩니다. #82939 (buyval01).
- 스토리지
Merge를 사용하는 테이블과의JOIN표현식이 포함된 쿼리에서 필터 수정 로직을 수정했습니다. #82092 문제를 해결합니다. #82950 (Dmitry Novik). - QueryMetricLog의 LOGICAL_ERROR 수정: Mutex가 NULL일 수 없습니다. #82979 (Pablo Marcos).
- 가변 길이 포맷 지정자(예:
%M)와 함께%f포맷 지정자를 사용할 때formatDateTime함수가 잘못된 결과를 출력하던 문제를 수정했습니다. #83020 (Robert Schulze). - analyzer가 활성화된 상태에서 보조 쿼리가 항상 VIEW의 모든 컬럼을 읽는 경우 발생하던 성능 저하를 수정합니다. #81718를 수정합니다. #83036 (Dmitry Novik).
- 읽기 전용 디스크에서 백업을 복원할 때 표시되던 오해의 소지가 있는 오류 메시지를 수정했습니다. #83051 (Julia Kartseva).
- 의존성이 없는 테이블에 대해서는 CREATE TABLE 시 순환 의존성을 검사하지 않습니다. 이 변경으로 https://github.com/ClickHouse/ClickHouse/pull/65405 에서 도입된, 수천 개의 테이블을 생성하는 사용 사례에서 발생한 성능 저하가 해결됩니다. #83077 (Pavel Kruglov).
- 음수 Time 값을 테이블로 암시적으로 읽어들이는 문제를 수정하고, 문서를 더 명확하게 합니다. #83091 (Yarik Briukhovetskyi).
- 공유 딕셔너리에서 서로 관련 없는 파트를
lowCardinalityKeys함수에서 사용하지 마십시오. #83118 (Alexey Milovidov). - Materialized Views에서 서브컬럼 사용 시 발생한 회귀(regression) 문제를 수정합니다. 다음 이슈를 수정합니다: #82784. #83221 (Nikita Mikhaylov).
- 잘못된 INSERT 이후 연결이 끊긴 상태로 남게 되어 발생하던 클라이언트 충돌을 수정합니다. #83253 (Azat Khuzhin).
- 빈 컬럼이 있는 블록의 크기를 계산할 때 발생하던 크래시를 수정했습니다. #83271 (Raúl Marín).
UNION에서Variant타입 사용 시 발생할 수 있는 크래시를 수정했습니다. #83295 (Pavel Kruglov).- 지원되지 않는 SYSTEM 쿼리로 인해 clickhouse-local에서 발생하는 LOGICAL_ERROR를 수정했습니다. #83333 (Surya Kant Ranjan).
- S3 클라이언트용
no_sign_request동작을 수정합니다. 이 옵션은 S3 요청에 서명을 명시적으로 생략하는 데 사용할 수 있습니다. 엔드포인트 기반 설정을 통해 특정 엔드포인트에 대해 별도로 정의할 수도 있습니다. #83379 (Antonio Andelic). - CPU 스케줄링이 활성화된 상태에서 부하가 걸린 환경에서 실행될 때, 설정 'max_threads=1'이 지정된 쿼리에서 발생할 수 있는 크래시를 수정합니다. #83387 (Fan Ziqi).
- CTE 정의가 동일한 이름을 가진 다른 테이블 식을 참조할 때 발생하는
TOO_DEEP_SUBQUERIES예외를 수정합니다. #83413 (Dmitry Novik). REVOKE S3 ON system.*명령을 실행할 때*.*에 대한 S3 권한까지 취소되던 잘못된 동작을 수정합니다. 이로써 #83417 이슈가 해결되었습니다. #83420 (pufit).- 쿼리 간 async_read_counters가 공유되지 않도록 했습니다. #83423 (Azat Khuzhin).
- FINAL을 포함하는 서브쿼리가 있을 때 병렬 레플리카를 비활성화합니다. #83455 (zoomxi).
role_cache_expiration_time_seconds설정에서 발생하는 경미한 정수 오버플로 문제를 해결합니다 (issue #83374). #83461 (wushap).- https://github.com/ClickHouse/ClickHouse/pull/79963 에서 도입된 버그를 수정합니다. definer가 있는 MV(구체화된 뷰)에 데이터를 INSERT할 때, 권한 확인은 definer에게 부여된 권한(grant)을 사용해야 합니다. 이로써 #79951를 수정합니다. #83502 (pufit).
- Iceberg 배열 요소와 Iceberg 맵 값, 그리고 해당 값들의 모든 중첩 하위 필드에 대해 경계 기반 파일 프루닝을 비활성화합니다. #83520 (Daniil Ivanik).
- 임시 데이터 저장소로 사용할 때 파일 캐시가 초기화되지 않아 발생할 수 있는 오류를 수정합니다. #83539 (Bharat Nallan).
- Keeper 수정: 세션 종료 시 ephemeral 노드가 삭제될 때 전체 watch 수가 올바르게 갱신되도록 수정했습니다. #83583 (Antonio Andelic).
- max_untracked_memory와 관련된 잘못된 메모리 처리를 수정합니다. #83607 (Azat Khuzhin).
UNION ALL이 포함된INSERT SELECT가 특정 예외적인 경우에 null 포인터 역참조를 유발할 수 있었습니다. 이 변경으로 #83618을(를) 해결합니다. #83643 (Alexey Milovidov).- 논리적 오류를 유발할 수 있으므로 max_insert_block_size에 0 값을 설정하지 못하도록 했습니다. #83688 (Bharat Nallan).
- block_size_bytes=0인 경우 estimateCompressionRatio()에서 발생하는 무한 루프를 수정했습니다. #83704 (Azat Khuzhin).
IndexUncompressedCacheBytes/IndexUncompressedCacheCells/IndexMarkCacheBytes/IndexMarkCacheFiles메트릭을 수정했습니다(이전에는Cache접두사가 없는 메트릭에 포함되었습니다). #83730 (Azat Khuzhin).BackgroundSchedulePool종료 중 작업에서 스레드를 join 하는 과정에서 발생할 수 있는 abort와 (유닛 테스트에서의) hang 현상을 수정했습니다. #83769 (Azat Khuzhin).- 이름 충돌이 발생하는 경우에도
WITH절에서 새 analyzer가 외부 별칭을 참조할 수 있도록 하는 하위 호환 설정을 도입했습니다. #82700를 수정합니다. #83797 (Dmitry Novik). - 라이브러리 브리지를 정리하는 동안 재귀적인 컨텍스트 잠금으로 인해 종료 시 발생하던 교착 상태를 수정합니다. #83824 (Azat Khuzhin).
빌드/테스트/패키징 개선
- ClickHouse lexer를 위해 최소 크기의 C 라이브러리(10 KB)를 빌드합니다. 이는 #80977를 위해 필요합니다. #81347 (Alexey Milovidov). 독립 실행형 lexer에 대한 테스트를 추가하고, 테스트 태그
fasttest-only를 추가합니다. #82472 (Yakov Olkhovskiy). - Nix 서브모듈 입력값에 대한 검사를 추가합니다. #81691 (Konstantin Bogdanov).
- localhost에서 통합 테스트를 실행하려고 할 때 발생할 수 있는 여러 문제를 수정합니다. #82135 (Oleg Doronin).
- Mac 및 FreeBSD에서 SymbolIndex를 컴파일합니다. (단, ELF 기반 시스템인 Linux 및 FreeBSD에서만 동작합니다.) #82347 (Alexey Milovidov).
- Azure SDK를 v1.15.0으로 업데이트합니다. #82747 (Smita Kulkarni).
- 빌드 시스템에 google-cloud-cpp의 storage 모듈을 추가합니다. #82881 (Pablo Marcos).
- Docker Official Library의 요구 사항을 충족하도록 clickhouse-server용
Dockerfile.ubuntu를 변경합니다. #83039 (Mikhail f. Shiryaev). curl clickhouse.com으로 빌드를 업로드하는 문제를 수정하기 위한 #83158의 후속 작업입니다. #83463 (Mikhail f. Shiryaev).clickhouse/clickhouse-server및 공식clickhouse이미지에busybox바이너리와 설치 도구를 추가합니다. #83735 (Mikhail f. Shiryaev).- ClickHouse 서버 호스트를 지정하기 위한
CLICKHOUSE_HOST환경 변수 지원을 추가하여, 기존의CLICKHOUSE_USER및CLICKHOUSE_PASSWORD환경 변수와 동일한 방식으로 사용할 수 있도록 합니다. 이를 통해 클라이언트나 설정 파일을 직접 수정하지 않고도 더 쉽게 설정할 수 있습니다. #83659 (Doron David).
ClickHouse 릴리스 25.6, 2025-06-26
하위 호환성이 없는 변경 사항
- 이전에는
countMatches함수가 패턴이 빈 문자열을 허용하더라도 첫 번째 빈 일치(empty match)에서 카운트를 중지했습니다. 이 문제를 해결하기 위해 이제countMatches는 빈 일치가 발생하면 한 글자씩 전진하여 실행을 계속합니다. 이전 동작을 유지하려는 사용자는 설정count_matches_stop_at_empty_match를 활성화할 수 있습니다. #81676 (Elmi Ahmadov). - 마이너:
backup_threads및restore_threads서버 설정이 0이 아닌 값이 되도록 강제합니다. #80224 (Raúl Marín). - 마이너:
String에 대해bitNot가 내부 메모리 표현에서 널(null) 문자로 종료되는 문자열을 반환하도록 수정했습니다. 이는 사용자에게 보이는 동작에는 영향을 주지 않겠지만, 작성자가 이 변경 사항을 강조하고자 했습니다. #80791 (Azat Khuzhin).
신규 기능
- 새로운 데이터 타입
Time([H]HH:MM:SS) 및Time64([H]HH:MM.fractional)가 추가되었으며, 다른 데이터 타입과 상호 작용하기 위한 기본적인 캐스트 함수와 함수들이 추가되었습니다. 기존 함수toTime과의 호환성을 위한 설정이 추가되었습니다. 설정use_legacy_to_time은 현재는 이전 동작을 유지하도록 설정되어 있습니다. #81217 (Yarik Briukhovetskyi). Time/Time64 타입 간 비교를 지원합니다. #80327 (Yarik Briukhovetskyi). - 새 CLI 도구인
chdig- ClickHouse용 TUI 인터페이스(Unix의top과 유사)로, ClickHouse에 포함됩니다. #79666 (Azat Khuzhin). Atomic및Ordinary데이터베이스 엔진에서 테이블 메타데이터 파일을 저장할 디스크를 지정하는disk설정을 지원합니다. #80546 (Tuan Pham Anh). 이를 통해 외부 소스에서 데이터베이스를 ATTACH 할 수 있습니다.- 새로운 MergeTree 유형인
CoalescingMergeTree- 백그라운드 머지 과정에서 첫 번째 NULL이 아닌 값을 사용하는 엔진입니다. 이로써 #78869가 해결되었습니다. #79344 (scanhex12). - WKB를 읽기 위한 함수를 지원합니다("Well-Known Binary"는 GIS 애플리케이션에서 사용되는 다양한 지오메트리 타입을 이진 형식으로 인코딩하는 포맷입니다). #43941를 참조하십시오. #80139 (scanhex12).
- 워크로드용 쿼리 슬롯 스케줄링이 추가되었습니다. 자세한 내용은 워크로드 스케줄링을 참조하십시오. #78415 (Sergei Trifonov).
- 시계열 데이터를 다룰 때 일부 시나리오를 더 빠르게 처리하기 위한
timeSeries*helper 함수: - 지정된 시작 타임스탬프, 종료 타임스탬프 및 스텝에 맞춰 데이터의 시간 그리드(time grid)를 재샘플링함 - PromQL과 유사한delta,rate,idelta,irate를 계산함. #80590 (Alexander Gololobov). - 맵 값 필터링을 위한
mapContainsValuesLike/mapContainsValues/mapExtractValuesLike함수와 이를 블룸 필터 기반 인덱스에서 지원하는 기능을 추가했습니다. #78171 (UnamedRus). - 이제 설정 제약 조건에서 허용되지 않는 값 집합을 지정할 수 있습니다. #78499 (Bharat Nallan).
- 단일 쿼리 내의 모든 서브쿼리가 동일한 스토리지 스냅샷을 공유하도록 하는 설정
enable_shared_storage_snapshot_in_query가 추가되었습니다. 이를 통해 하나의 쿼리에서 동일한 테이블이 여러 번 참조되더라도 해당 테이블에 대해 일관된 읽기가 보장됩니다. #79471 (Amos Bird). JSON컬럼을Parquet에 쓰고Parquet에서JSON컬럼을 직접 읽을 수 있도록 지원합니다. #79649 (Nihal Z. Miaji).pointInPolygon에MultiPolygon지원이 추가되었습니다. #79773 (Nihal Z. Miaji).deltaLakeLocal테이블 함수를 통해 로컬 파일 시스템에 마운트된 Delta 테이블을 쿼리할 수 있도록 지원합니다. #79781 (roykim98).- 문자열(String)에서 DateTime으로 캐스팅할 때 DateTime 파싱 모드를 선택할 수 있는 새로운 설정
cast_string_to_date_time_mode가 추가되었습니다. #80210 (Pavel Kruglov). 예를 들어 이 설정을 best effort 모드로 지정할 수 있습니다. - 비트코인의 Bech 알고리즘을 다루기 위한
bech32Encode및bech32Decode함수를 추가했습니다 (issue #40381). #80239 (George Larionov). - MergeTree 파트 이름을 분석하는 SQL 함수를 추가합니다. #80573 (Mikhail Artemenko).
- 쿼리에서 선택된 파트를 해당 파트가 위치한 디스크를 기준으로 필터링할 수 있도록 새로운 가상 컬럼
_disk_name을 도입했습니다. #80650 (tanner-bruce). - 임베디드 웹 도구 목록을 제공하는 랜딩 페이지를 추가했습니다. 이 페이지는 브라우저 유형의 사용자 에이전트로부터 요청될 때 열립니다. #81129 (Alexey Milovidov).
arrayFirst,arrayFirstIndex,arrayLast,arrayLastIndex함수는 필터 식에서 반환되는 NULL 값을 걸러냅니다. 이전 버전에서는 널 허용(Nullable) 필터 결과를 지원하지 않았습니다. 이 변경으로 #81113이(가) 수정되었습니다. #81197 (Lennard Eijsackers).- 이제
USE name대신USE DATABASE name을 작성할 수 있습니다. #81307 (Yarik Briukhovetskyi). - 사용 가능한 코덱을 조회할 수 있도록 새로운 시스템 테이블
system.codecs를 추가했습니다. (issue #81525). #81600 (Jimmy Aguilar Mena). lag및lead윈도우 함수를 지원합니다. #9887 이슈를 해결합니다. #82108 (Dmitry Novik).- 이제
tokensFUNCTION은 로그 처리에 적합한 새로운 토크나이저split을 지원합니다. #80195 (Robert Schulze). clickhouse-local에--database인수 지원을 추가했습니다. 이제 기존에 생성한 데이터베이스로 전환할 수 있습니다. 이를 통해 #44115가 해결되었습니다. #81465 (Alexey Milovidov).
실험적 기능
- ClickHouse Keeper를 사용하여
Kafka2에 대해 Kafka 리밸런스와 유사한 로직을 구현합니다. 각 레플리카마다 두 종류의 파티션 잠금을 지원합니다: 영구 잠금과 임시 잠금입니다. 레플리카는 가능한 한 오래 영구 잠금을 유지하려 하며, 어느 시점에서든 레플리카에 설정된 영구 잠금은all_topic_partitions / active_replicas_count(여기서all_topic_partitions는 모든 파티션의 개수,active_replicas_count는 활성 레플리카의 개수)보다 많지 않습니다. 이보다 많아지면 레플리카는 일부 파티션을 해제합니다. 일부 파티션은 레플리카에 의해 임시로 유지됩니다. 레플리카의 임시 잠금 최대 개수는 동적으로 변경되어 다른 레플리카가 일부 파티션을 영구 잠금으로 가져갈 수 있도록 합니다. 임시 잠금을 갱신할 때 레플리카는 임시 잠금을 모두 해제한 다음, 다시 다른 일부 파티션을 가져오려고 시도합니다. #78726 (Daria Fomina). - 실험적 텍스트 인덱스에 대한 개선: key-value 쌍을 통한 명시적인 파라미터를 지원합니다. 현재 지원되는 파라미터는 필수인
tokenizer와 선택 항목인max_rows_per_postings_list,ngram_size두 가지입니다. #80262 (Elmi Ahmadov). - 이전에는
packed스토리지는 풀텍스트 인덱스에서 지원되지 않았습니다. 세그먼트 ID가 디스크의 (.gin_sid) 파일을 읽고 쓰는 방식으로 실시간(on-the-fly)으로 업데이트되었기 때문입니다.packed스토리지의 경우 커밋되지 않은 파일에서 값을 읽는 것이 지원되지 않아 이로 인해 문제가 발생했습니다. 이제는 문제가 없습니다. #80852 (Elmi Ahmadov). gin타입의 실험적 인덱스(이는 PostgreSQL 해커들의 내부 농담이어서 개인적으로 선호하지 않습니다)는text로 이름이 변경되었습니다. 기존gin타입 인덱스는 여전히 로드할 수 있지만, 검색에 사용하려 하면 예외를 발생시키며(대신text인덱스를 사용할 것을 제안합니다) 동작합니다. #80855 (Robert Schulze).
성능 향상
- 다중 프로젝션 필터링을 지원하도록 활성화하여 파트 수준 필터링(part-level filtering)에 여러 개의 프로젝션을 사용할 수 있도록 합니다. 이를 통해 #55525가 해결됩니다. 이는 #78429에 이어 프로젝션 인덱스를 구현하는 두 번째 단계입니다. #80343 (Amos Bird).
- 파일 시스템 캐시에서 기본적으로
SLRU캐시 정책을 사용합니다. #75072 (Kseniia Sumarokova). - 쿼리 파이프라인의 Resize 단계에서 발생하는 경합을 제거합니다. #77562 (Zhiguo Zhou).
- 네트워크 연결에 할당된 단일 스레드 대신, 블록의 압축/압축 해제 및 직렬화/역직렬화를 파이프라인 스레드로 오프로드하는 옵션을 도입했습니다.
enable_parallel_blocks_marshalling설정으로 제어됩니다. 이 옵션은 이니시에이터와 원격 노드 간에 대량의 데이터를 전송하는 분산 쿼리의 성능을 향상시킵니다. #78694 (Nikita Taranov). - 모든 블룸 필터 유형 전반의 성능을 개선했습니다. OpenHouse 컨퍼런스 동영상 #79800 (Delyan Kratunov).
- 한쪽 Set이 비어 있는 경우를 위한 정상 동작 경로(happy path)를
UniqExactSet::merge에 도입했습니다. 또한 이제 LHS Set이 two-level이고 RHS가 single-level인 경우, RHS를 two-level로 변환하지 않습니다. #79971 (Nikita Taranov). - two-level 해시 테이블(2단계 해시 테이블)을 사용할 때 메모리 재사용 효율을 높이고 페이지 폴트(page fault)를 줄였습니다. 이는 GROUP BY를 더 빠르게 수행하기 위한 것입니다. #80245 (Jiebin Sun).
- 쿼리 조건 캐시에서 불필요한 업데이트를 방지하고 잠금 경합을 줄입니다. #80247 (Jiebin Sun).
concatenateBlocks에 대한 단순한 최적화입니다. 병렬 해시 조인에도 도움이 될 가능성이 있습니다. #80328 (李扬).- 기본 키 범위에서 마크 범위를 선택할 때 기본 키가 함수로 감싸져 있으면 이진 검색을 사용할 수 없습니다. 이 PR은 이러한 제약을 개선합니다. 기본 키가 항상 단조적인 함수 체인으로 감싸져 있거나, RPN 식에 항상 참이 되는 요소가 포함된 경우에도 이진 검색을 적용할 수 있게 합니다. #45536을(를) 해결합니다. #80597 (zoomxi).
Kafka엔진의 종료 속도를 개선했습니다(여러 개의Kafka테이블이 있는 경우 추가로 발생하던 3초 지연을 제거했습니다). #80796 (Azat Khuzhin).- 비동기 insert를 통해 메모리 사용량을 줄이고 insert 쿼리 성능을 향상합니다. #80972 (Raúl Marín).
- 로그 테이블이 비활성화되어 있으면 프로세서 프로파일링을 수행하지 않습니다. #81256 (Raúl Marín). 이로 인해 매우 짧은 쿼리의 실행 속도가 빨라집니다.
- 소스가 요청된 것과 정확히 일치하는 경우
toFixedString의 성능을 향상했습니다. #81257 (Raúl Marín). - 제한이 없는 사용자에 대해서는 QUOTA 값을 처리하지 않습니다. #81549 (Raúl Marín). 이로 인해 매우 짧은 쿼리의 실행 속도가 빨라집니다.
- 메모리 추적에서 발생한 성능 저하 문제를 수정했습니다. #81694 (Michael Kolupaev).
- 분산 쿼리의 샤딩 키 최적화를 개선했습니다. #78452 (fhw12345).
- Parallel replicas: 모든 읽기 작업이 다른 레플리카에 이미 할당된 경우, 사용되지 않는 느린 레플리카를 대기하지 않습니다. #80199 (Igor Nikonov).
- 병렬 레플리카는 이제 별도의 연결 타임아웃을 사용하며,
parallel_replicas_connect_timeout_ms설정을 참조하십시오. 이전에는connect_timeout_with_failover_ms/connect_timeout_with_failover_secure_ms설정이 병렬 레플리카 쿼리의 연결 타임아웃 값으로 사용되었습니다(기본값 1초). #80421 (Igor Nikonov). - journal이 있는 파일 시스템에서는
mkdir호출이 디스크에 영구적으로 저장되는 파일 시스템 저널(journal)에 기록됩니다. 디스크가 느린 경우 이 작업에 오래 걸릴 수 있습니다. 이에 따라 reserve lock 범위 밖에서 수행하도록 변경했습니다. #81371 (Kseniia Sumarokova). - 처음 쿼리가 실행될 때까지 Iceberg 매니페스트 파일 읽기를 지연합니다. #81619 (Daniil Ivanik).
- 적용 가능한 경우
GLOBAL [NOT] IN조건을PREWHERE절로 이동할 수 있도록 허용합니다. #79996 (Eduard Karacharov).
개선 사항
EXPLAIN SYNTAX가 이제 새로운 analyzer를 사용합니다. 쿼리 트리(query tree)에서 생성된 AST를 반환합니다. 쿼리 트리를 AST로 변환하기 전에 수행할 패스(pass) 횟수를 제어하기 위한 옵션query_tree_passes가 추가되었습니다. #74536 (Vladimir Cherkasov).- Native 포맷에서 Dynamic 및 JSON에 대해 평탄화된 직렬화를 구현하여 Dynamic의 shared variant나 JSON의 shared data와 같은 특수 구조 없이 Dynamic 및 JSON 데이터를 직렬화/역직렬화할 수 있도록 했습니다. 이 직렬화는
output_format_native_use_flattened_dynamic_and_json_serialization을 설정하여 활성화할 수 있습니다. 이 직렬화는 다양한 언어로 작성된 클라이언트에서 TCP 프로토콜을 통해 Dynamic 및 JSON을 더 쉽게 지원하는 데 사용할 수 있습니다. #80499 (Pavel Kruglov). AuthenticationRequired오류 발생 시S3자격 증명을 갱신합니다. #77353 (Vitaly Baranov).system.asynchronous_metrics에 딕셔너리 메트릭을 추가했습니다. -DictionaryMaxUpdateDelay- 딕셔너리 업데이트의 최대 지연 시간(초)입니다. -DictionaryTotalFailedUpdates- 모든 딕셔너리에서 마지막 성공적인 로딩 이후 발생한 오류 수입니다. #78175 (Vlad).- 손상된 테이블을 보존하기 위해 생성되었을 가능성이 있는 데이터베이스에 대한 경고를 추가했습니다. #78841 (János Benjamin Antal).
S3Queue,AzureQueue엔진에_time가상 컬럼을 추가했습니다. #78926 (Anton Ivashkin).- CPU 과부하 시 연결 끊김을 제어하는 설정을 핫 리로드 가능하도록 했습니다. #79052 (Alexey Katsman).
- Azure Blob Storage의 일반 디스크에 대해
system.tables에서 보고되는 데이터 경로에 컨테이너 접두사를 추가해, S3 및 GCP와 보고 방식이 일관되도록 했습니다. #79241 (Julia Kartseva). - 이제 clickhouse-client와 local에서도
param_<name>(언더스코어) 형식뿐 아니라param-<name>(대시) 형식의 쿼리 매개변수를 허용합니다. 이로써 #63093이(가) 해결되었습니다. #79429 (Engel Danila). - 체크섬이 활성화된 상태에서 로컬에서 원격 S3로 데이터를 복사할 때 적용되는 대역폭 할인에 대해 더 자세한 경고 메시지를 표시하도록 개선했습니다. #79464 (VicoWu).
- 이전에
input_format_parquet_max_block_size = 0(유효하지 않은 값)인 경우 ClickHouse가 멈추는 문제가 있었습니다. 이제 이 문제가 수정되었습니다. 이를 통해 #79394가 해결되었습니다. #79601 (abashkeev). startup_scripts에throw_on_error설정을 추가합니다.throw_on_error가 true인 경우 모든 쿼리가 성공적으로 완료되지 않으면 서버가 시작되지 않습니다. 기본적으로throw_on_error는 false로 설정되어 있어 이전과 동일한 동작이 유지됩니다. #79732 (Aleksandr Musorin).- 모든 유형의
http_handlers에http_response_headers를 추가할 수 있도록 했습니다. #79975 (Andrey Zvonov). - FUNCTION
reverse가 이제Tuple데이터 타입을 지원합니다. #80053 이슈를 해결했습니다. #80083 (flynn). - #75817 이슈를 해결했습니다:
system.zookeeper테이블에서auxiliary_zookeepers데이터를 조회할 수 있게 했습니다. #80146 (Nikolay Govorov). - 서버의 TCP 소켓 관련 비동기 메트릭을 추가합니다. 이를 통해 관측성이 향상됩니다. #80187을(를) 해결합니다. #80188 (Alexey Milovidov).
anyLast_respect_nulls및any_respect_nulls를SimpleAggregateFunction으로 사용할 수 있도록 지원합니다. #80219 (Diskein).- 복제 데이터베이스에서 불필요한
adjustCreateQueryForBackup호출을 제거했습니다. #80282 (Vitaly Baranov). clickhouse-local에서-- --config.value='abc'와 같이--뒤에 오는 추가 옵션을 등호 없이도 사용할 수 있도록 허용합니다. #80292를 해결합니다. #80293 (Alexey Milovidov).SHOW ... LIKE쿼리에서 메타 문자를 하이라이트합니다. 이로써 #80275를 해결합니다. #80297 (Alexey Milovidov).clickhouse-local에서 SQL UDF가 영구적으로 유지되도록 했습니다. 이전에 생성된 함수는 시작 시 자동으로 로드됩니다. 이는 #80085를 해결합니다. #80300 (Alexey Milovidov).- 예비 DISTINCT 단계에 대한 EXPLAIN 실행 계획 설명을 수정했습니다. #80330 (UnamedRus).
- ODBC/JDBC에서 named collection을 사용할 수 있게 되었습니다. #80334 (Andrey Zvonov).
- 읽기 전용 디스크와 손상된 디스크 수에 대한 메트릭을 추가합니다. DiskLocalCheckThread가 시작될 때 이를 나타내는 로그를 남깁니다. #80391 (VicoWu).
- 프로젝션을 사용하는
s3_plain_rewritable스토리지에 대한 지원을 구현합니다. 이전 버전에서는 프로젝션을 참조하는 S3 메타데이터 객체가 이동되어도 갱신되지 않았습니다. #70258를 해결합니다. #80393 (Sav). SYSTEM UNFREEZE명령은 읽기 전용 디스크와 write-once 디스크에서 파트를 찾지 않습니다. 이로써 #80430이(가) 해결됩니다. #80432 (Alexey Milovidov).- 머지된 파트 관련 메시지의 로그 레벨을 낮췄습니다. #80476 (Hans Krutzer).
- Iceberg 테이블에 대한 파티션 프루닝의 기본 동작 방식을 변경했습니다. #80583 (Melvyn Peignon).
- 인덱스 검색 알고리즘의 관측성을 개선하기 위해 새로운 ProfileEvents 2개를 추가합니다:
IndexBinarySearchAlgorithm및IndexGenericExclusionSearchAlgorithm. #80679 (Pablo Marcos). - 이제 오래된 커널에서
MADV_POPULATE_WRITE가 지원되지 않을 때 이에 대한 메시지를 로그에 남기지 않습니다(과도한 로그 생성을 방지하기 위해). #80704 (Robert Schulze). TTL표현식에서Date32및DateTime64지원을 추가했습니다. #80710 (Andrey Zvonov).max_merge_delayed_streams_for_parallel_write설정의 호환성 값이 조정되었습니다. #80760 (Azat Khuzhin).- 소멸자에서 임시 파일(임시 데이터를 디스크로 내보내는 데 사용됨)을 제거하려 할 때 예외가 발생하면 프로그램이 종료될 수 있는 크래시를 수정합니다. #80776 (Alexey Milovidov).
SYSTEM SYNC REPLICA에IF EXISTS수정자를 추가합니다. #80810 (Raúl Marín).- "Having zero bytes, but read range is not finished..."에 대한 예외 메시지를 개선하고,
system.filesystem_cache에finished_download_time컬럼을 추가했습니다. #80849 (Kseniia Sumarokova). - 인덱스를 사용할 때
indexes = 1인 경우EXPLAIN출력에 검색 알고리즘 섹션을 추가합니다. 이 섹션에는 "이진 검색(binary search)" 또는 "일반 제외 검색(generic exclusion search)" 중 하나가 표시됩니다. #80881 (Pablo Marcos). - 2024년 초에는 새로운 분석기가 기본적으로 활성화되어 있지 않았기 때문에 MySQL 핸들러에 대해
prefer_column_name_to_alias옵션이 true로 하드코딩되어 있었습니다. 이제는 이 하드코딩을 제거할 수 있게 되었습니다. #80916 (Yarik Briukhovetskyi). - 이제
system.iceberg_history에서 glue 또는 iceberg rest와 같은 카탈로그 데이터베이스의 변경 이력을 확인할 수 있습니다. 또한 일관성을 위해system.iceberg_history에서table_name및database_name컬럼 이름을 각각table및database로 변경했습니다. #80975 (alesapin). merge테이블 함수에서 읽기 전용 모드를 지원하여, 이를 사용할 때CREATE TEMPORARY TABLE권한이 필요하지 않도록 합니다. #80981 (Miсhael Stetsyuk).- 메모리 내 캐시에 대한 관찰성을 개선했습니다. 이전에는
system.asynchronouse_metrics에 불완전하게 노출되던 캐시 정보를 이제system.metrics에서 확인할 수 있습니다. 또한 메모리 내 캐시 크기(바이트 단위)를dashboard.html에 추가했습니다.VectorSimilarityIndexCacheSize/IcebergMetadataFilesCacheSize는VectorSimilarityIndexCacheBytes/IcebergMetadataFilesCacheBytes로 이름이 변경되었습니다. #81023 (Azat Khuzhin). system.rocksdb에서 읽을 때RocksDB테이블을 포함할 수 없는 엔진을 사용하는 데이터베이스를 무시하도록 했습니다. #81083 (Pervakov Grigorii).clickhouse-local구성 파일에서filesystem_caches및named_collections사용을 허용하도록 했습니다. #81105 (Alexey Milovidov).INSERT쿼리에서PARTITION BY의 강조 표시를 수정합니다. 이전 버전에서는PARTITION BY가 키워드로 인식되지 않아 강조 표시되지 않았습니다. #81106 (Alexey Milovidov).- Web UI에 두 가지 소규모 개선이 이루어졌습니다. -
CREATE,INSERT와 같이 출력이 없는 쿼리를 올바르게 처리합니다(이전까지는 이러한 쿼리에서 로딩 표시가 무한히 돌아갔습니다). - 테이블을 더블 클릭하면 맨 위로 스크롤합니다. #81131 (Alexey Milovidov). MemoryResidentWithoutPageCache메트릭은 서버 프로세스가 사용하는 물리 메모리 사용량(바이트 단위)에서 userspace 페이지 캐시를 제외한 값을 나타냅니다. 이를 통해 userspace 페이지 캐시가 사용되는 경우 실제 메모리 사용량을 더욱 정확하게 파악할 수 있습니다. userspace 페이지 캐시가 비활성화된 경우 이 값은MemoryResident와 동일합니다. #81233 (Jayme Bird).- 클라이언트, 로컬 서버, Keeper 클라이언트 및 디스크 애플리케이션에서 수동으로 기록된 예외를 이미 로깅된 것으로 표시하여, 같은 예외가 두 번 로깅되지 않도록 합니다. #81271 (Miсhael Stetsyuk).
use_skip_indexes_if_final및use_skip_indexes_if_final_exact_mode설정의 기본값이 이제True로 변경되었습니다.FINAL절이 포함된 쿼리는 이제 (해당되는 경우) 스킵 인덱스를 사용하여 그래뉼 후보를 우선 추려내고, 일치하는 기본 키 범위에 해당하는 추가 그래뉼도 함께 읽게 됩니다. 근사치/비정확한 결과를 반환하던 이전 동작이 필요한 사용자는 신중히 평가한 후use_skip_indexes_if_final_exact_mode를 FALSE로 설정할 수 있습니다. #81331 (Shankar Iyer).- 웹 UI에 여러 개의 쿼리가 있을 때, 커서가 위치한 쿼리만 실행됩니다. #80977의 후속 변경입니다. #81354 (Alexey Milovidov).
- 이 PR에서는 변환 함수의 단조성(monotonicity) 검사에서
is_strict구현과 관련된 문제를 해결합니다. 현재toFloat64(UInt32),toDate(UInt8)와 같은 일부 변환 함수는 실제로는 true를 반환해야 함에도 불구하고 잘못하여is_strict를 false로 반환합니다. #81359 (zoomxi). - 연속 구간에 대해
KeyCondition이 일치하는지 확인할 때, 키가 비엄격(non-strict) 함수 체인으로 감싸져 있는 경우Constraint::POINT를Constraint::RANGE로 변환해야 할 수도 있습니다. 예를 들어,toDate(event_time) = '2025-06-03'는event_time에 대해 다음 범위를 의미합니다: ['2025-06-03 00:00:00', '2025-06-04 00:00:00'). 이 PR은 이러한 동작을 수정합니다. #81400 (zoomxi). clickhouse/ch별칭은--host또는--port가 지정된 경우clickhouse-local대신clickhouse-client를 호출합니다. #79422의 후속 작업입니다. #65252를 해결합니다. #81509 (Alexey Milovidov).- Keeper 응답 시간 분포 데이터가 준비되었으므로, 이제 메트릭용 히스토그램 버킷을 조정할 수 있습니다. #81516 (Miсhael Stetsyuk).
- 프로파일 이벤트
PageCacheReadBytes가 추가되었습니다. #81742 (Kseniia Sumarokova). - filesystem cache의 논리적 오류를 수정했습니다: "Having zero bytes but range is not finished". #81868 (Kseniia Sumarokova).
버그 수정(공식 안정 릴리스에서 사용자에게 노출되는 오작동)
- 파라미터화된 VIEW에서 SELECT EXCEPT 쿼리가 올바르게 동작하도록 수정했습니다. #49447을(를) 해결했습니다. #57380 (Nikolay Degterinsky).
- Analyzer: 조인에서 컬럼 타입 승격 후 컬럼 프로젝션 이름을 수정합니다. Closes #63345. #63519 (Dmitry Novik).
- analyzer_compatibility_join_using_top_level_identifier가 활성화된 상태에서 컬럼 이름 충돌 시 발생하던 논리적 오류를 수정했습니다. #75676 (Vladimir Cherkasov).
allow_push_predicate_ast_for_distributed_subqueries가 활성화되어 있을 때 푸시다운된 프레디케이트에서의 CTE 사용을 수정합니다. #75647 이슈를 수정합니다. #79672 이슈를 수정합니다. #77316 (Dmitry Novik).SYSTEM SYNC REPLICA LIGHTWEIGHT 'foo'명령에서 지정된 레플리카가 존재하지 않아도 성공한 것으로 보고되는 문제를 수정합니다. 이제 이 명령은 동기화를 시도하기 전에 해당 레플리카가 Keeper에 존재하는지 올바르게 검증합니다. #78405 (Jayme Bird).ON CLUSTER쿼리의CONSTRAINT섹션에서currentDatabaseFUNCTION을 사용하는 매우 특수한 경우에 발생하던 크래시를 수정합니다. #78100을(를) 해결합니다. #79070 (pufit).- 인터서버 쿼리에서 external roles 전달 문제를 수정합니다. #79099 (Andrey Zvonov).
- SingleValueDataGeneric에서 Field 대신 IColumn을 사용하도록 변경했습니다. 이를 통해
Dynamic/Variant/JSON타입에 대해argMax와 같은 일부 집계 함수가 잘못된 값을 반환하던 문제가 수정됩니다. #79166 (Pavel Kruglov). - Azure Blob Storage에 대해
use_native_copy및allow_azure_native_copy설정이 올바르게 적용되도록 수정하고, 자격 증명이 일치하는 경우에만 native copy를 사용하도록 업데이트하여 #78964를 해결했습니다. #79561 (Smita Kulkarni). - 컬럼이 연관되어 있는지 검사하는 과정에서, 컬럼의 알 수 없는 origin scope 처리와 관련해 발생하던 논리 오류를 수정합니다. #78183를 수정합니다. #79451를 수정합니다. #79727 (Dmitry Novik).
- ColumnConst 및 Analyzer를 사용할 때 GROUPING SETS에서 잘못된 결과가 반환되던 문제를 수정합니다. #79743 (Andrey Zvonov).
- 로컬 레플리카가 오래된 상태일 때 분산 테이블에서 읽으면 로컬 세그먼트 결과가 중복되는 문제를 수정합니다. #79761 (Eduard Karacharov).
- 음수 부호 비트가 설정된 NaN의 정렬 순서를 수정합니다. #79847 (Pervakov Grigorii).
- 이제
GROUP BY ALL이GROUPING절을 고려하지 않습니다. #79915 (Yarik Briukhovetskyi). - 용량이 소진되지 않은 경우에도 과도한 오차가 발생할 수 있던
TopK/TopKWeighted함수의 잘못된 상태 병합 동작을 수정했습니다. #79939 (Joel Höner). azure_blob_storage객체 스토리지에서readonly설정이 적용되도록 수정했습니다. #79954 (Julia Kartseva).- 백슬래시로 이스케이프된 문자를 포함한
match(column, '^…')를 사용할 때 잘못된 쿼리 결과가 나오거나 메모리 부족으로 인한 크래시가 발생하던 문제를 수정했습니다. #79969 (filimonov). - 데이터 레이크에서 hive 파티셔닝을 비활성화했습니다. 이는 https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937를 부분적으로 해결합니다. #80005 (Daniil Ivanik).
- 람다 표현식을 사용하는 Skip 인덱스가 적용되지 않던 문제를 수정했습니다. 인덱스 정의에 사용된 고수준 함수가 쿼리에 사용된 것과 정확히 일치하는 경우를 올바르게 처리합니다. #80025 (Nikolai Kochetov).
- 복제 로그에서
ATTACH_PART명령을 실행하는 레플리카에서 파트를 ATTACH하는 동안 메타데이터 버전이 잘못 설정되던 문제를 수정했습니다. #80038 (Aleksei Filatov). - Executable User Defined Functions(실행 가능한 사용자 정의 함수, eUDF)의 이름은 다른 함수와 달리
system.query_log테이블의used_functions컬럼에 추가되지 않습니다. 이 PR에서는 요청에서 eUDF가 사용된 경우 해당 eUDF 이름이 추가되도록 구현했습니다. #80073 (Kyamran). - Arrow 포맷에서 LowCardinality(FixedString)를 사용할 때 발생하는 논리적 오류를 수정합니다. #80156 (Pavel Kruglov).
- Merge 엔진에서 서브컬럼을 읽는 기능을 수정합니다. #80158 (Pavel Kruglov).
KeyCondition에서 숫자형 타입 간 비교 시 발생하던 버그를 수정했습니다. #80207 (Yarik Briukhovetskyi).- lazy materialization이 프로젝션이 있는 테이블에 적용될 때 발생하는 AMBIGUOUS_COLUMN_NAME 문제를 수정합니다. #80251 (Igor Nikonov).
- 암시적 프로젝션을 사용할 때 LIKE 'ab_c%'와 같은 문자열 접두사 필터에 대해 잘못된 COUNT 최적화가 적용되던 문제를 수정합니다. 이를 통해 #80250가 해결됩니다. #80261 (Amos Bird).
- MongoDB 문서에서 중첩 숫자 필드가 문자열로 잘못 직렬화되던 문제를 수정합니다. MongoDB 문서의 최대 중첩 깊이 제한을 제거합니다. #80289 (Kirill Nikiforov).
- Replicated 데이터베이스에서 RMT에 대한 메타데이터 검사를 덜 엄격하게 수행하도록 했습니다. #80296을(를) 해결합니다. #80298 (Nikolay Degterinsky).
- PostgreSQL 스토리지에서 DateTime 및 DateTime64의 텍스트 표현을 수정합니다. #80301 (Yakov Olkhovskiy).
StripeLog테이블에서 타임존이 포함된DateTime을 사용할 수 있도록 허용했습니다. 이로써 #44120 이슈가 해결되었습니다. #80304 (Alexey Milovidov).- 행 개수를 변경하는 쿼리 플랜 단계가 있는 경우, 비결정적 함수를 사용하는 프레디케이트에 대해 filter-push-down을 비활성화합니다. #40273 문제를 수정합니다. #80329 (Nikolai Kochetov).
- 서브컬럼을 사용하는 프로젝션에서 발생할 수 있는 논리 오류와 크래시를 수정합니다. #80333 (Pavel Kruglov).
ON표현식이 단순한 동등 조건이 아닐 때 logical JOIN sep에서 사용하는 filter push-down 최적화로 인해 발생하던NOT_FOUND_COLUMN_IN_BLOCK오류를 수정합니다. #79647 및 #77848를 수정합니다. #80360 (Nikolai Kochetov).- 파티션된 테이블에서 역순으로 정렬된 키를 읽을 때 발생하던 잘못된 결과를 수정합니다. #79987를 해결합니다. #80448 (Amos Bird).
- 널 허용 키가 있는 테이블에서 optimize_read_in_order가 활성화된 경우 잘못된 정렬이 발생하던 문제를 수정했습니다. #80515 (Pervakov Grigorii).
- SYSTEM STOP REPLICATED VIEW를 사용해 뷰를 일시 중지한 경우 갱신 가능 구체화 뷰에 대한 DROP 문이 멈추던 문제를 수정했습니다. #80543 (Michael Kolupaev).
- 분산 쿼리에서 상수 튜플을 사용할 때 발생하는 'Cannot find column' 오류를 수정합니다. #80596 (Yakov Olkhovskiy).
join_use_nulls가 설정된 분산 테이블에서shardNum함수 동작을 수정했습니다. #80612 (János Benjamin Antal).- Merge 엔진에서 일부 테이블에만 존재하는 컬럼을 읽을 때 잘못된 결과가 반환되던 문제를 수정했습니다. #80643 (Pavel Kruglov).
- replxx에서 발생하는 hang으로 인해 발생할 수 있던 SSH 프로토콜 문제를 수정했습니다. #80688 (Azat Khuzhin).
- 이제
iceberg_history테이블의 타임스탬프가 올바른 값으로 설정됩니다. #80711 (Melvyn Peignon). - 딕셔너리 등록이 실패했을 때(
CREATE DICTIONARY가CANNOT_SCHEDULE_TASK오류와 함께 실패하는 경우 딕셔너리 레지스트리에 댕글링 포인터가 남을 수 있어 이후 크래시로 이어질 수 있음) 발생할 수 있는 크래시를 수정합니다. #80714 (Azat Khuzhin). - 객체 스토리지 테이블 함수에서 단일 요소만 포함하는 enum glob의 처리 방식을 수정합니다. #80716 (Konstantin Bogdanov).
- Tuple(Dynamic)과 String 간 비교에서 잘못된 결과 타입을 반환하여 논리적 오류가 발생하던 비교 함수의 문제를 수정했습니다. #80728 (Pavel Kruglov).
- Unity Catalog에 누락되었던 데이터 타입
timestamp_ntz에 대한 지원을 추가합니다. #79535 및 #79875를 수정합니다. #80740 (alesapin). IN cte를 사용하는 분산 쿼리에서 발생하는THERE_IS_NO_COLUMN오류를 수정합니다. #75032를 해결합니다. #80757 (Nikolai Kochetov).- 외부 ORDER BY에서 과도한 메모리 사용을 유발하던 지나치게 많은 파일 수 문제를 수정합니다. #80777 (Azat Khuzhin).
- 이 PR은 #80742 이슈를 해결할 수 있습니다. #80783 (zoomxi).
- Kafka에서
get_member_id()가 NULL에서std::string을 생성해 발생하던 크래시를 수정했습니다(브로커 연결이 실패한 경우에만 발생했을 가능성이 높습니다). #80793 (Azat Khuzhin). - 종료 전에 Kafka 엔진의 컨슈머가 정상적으로 종료될 때까지 적절히 대기하도록 했습니다(종료 후에도 활성 컨슈머가 남아 있으면 다양한 디버그 assertion이 발생할 수 있고, 테이블이 drop/detach된 뒤에도 백그라운드에서 브로커로부터 데이터를 계속 읽을 수 있습니다). #80795 (Azat Khuzhin).
predicate-push-down최적화로 인해 발생하던NOT_FOUND_COLUMN_IN_BLOCK오류를 수정했습니다. 이로써 #80443가 해결되었습니다. #80834 (Nikolai Kochetov).- USING 절과 함께 사용하는 JOIN에서 테이블 함수(table function)의 별표(*) 매처를 해석하는 과정에서 발생하던 논리 오류를 수정했습니다. #80894 (Vladimir Cherkasov).
- Iceberg 메타데이터 파일 캐시의 메모리 사용량 계산을 수정합니다. #80904 (Azat Khuzhin).
- 널 허용 파티션 키 사용 시 발생하는 잘못된 파티셔닝을 수정했습니다. #80913 (Pervakov Grigorii).
- 쿼리 이니시에이터 노드에 소스 테이블이 존재하지 않을 때, 푸시다운된 프리디케이트(
allow_push_predicate_ast_for_distributed_subqueries=1)가 있는 분산 쿼리에서 발생하던Table does not exist오류를 수정합니다. 이 문제는 #77281를 해결합니다. #80915 (Nikolai Kochetov). - 이름이 지정된 윈도우를 사용하는 중첩 함수의 논리 오류를 수정합니다. #80926 (Pervakov Grigorii).
- 널 허용 컬럼과 부동소수점 컬럼에서
extremes처리를 수정했습니다. #80970 (Pervakov Grigorii). - 메모리 압박 상황에서
system.tables를 쿼리할 때 발생할 수 있는 크래시를 수정했습니다. #80976 (Azat Khuzhin). - 파일 확장자를 기반으로 압축 방식이 추론되는 파일에 대해
truncate와 함께 사용하는 atomic rename 동작을 수정합니다. #80979 (Pablo Marcos). - ErrorCodes::getName을 수정했습니다. #81032 (RinChanNOW).
- Unity Catalog에서 사용자에게 모든 테이블에 대한 권한이 없으면 테이블을 나열할 수 없던 버그를 수정했습니다. 이제 모든 테이블이 올바르게 나열되며, 접근이 제한된 테이블을 읽으려고 시도하면 예외가 발생합니다. #81044 (alesapin).
- 이제 ClickHouse는
SHOW TABLES쿼리에서 데이터 레이크 카탈로그에서 오는 오류와 예기치 않은 응답을 무시합니다. #79725를 수정합니다. #81046 (alesapin). - JSONExtract 및 JSON 타입에서 정수 값으로부터 DateTime64를 파싱하는 동작을 수정합니다. #81050 (Pavel Kruglov).
date_time_input_formatSETTING이 스키마 추론 캐시에 반영되도록 했습니다. #81052 (Pavel Kruglov).- 쿼리가 시작된 이후 컬럼이 전송되기 전에 테이블이 DROP된 경우 INSERT 실행 시 크래시가 발생하던 문제를 수정했습니다. #81053 (Azat Khuzhin).
- quantileDeterministic에서 초기화되지 않은 값의 사용 문제를 수정합니다. #81062 (Azat Khuzhin).
- MetadataStorageFromDisk 디스크 트랜잭션에서 하드링크 개수 관리를 수정하고 테스트를 추가합니다. #81066 (Sema Checherinda).
- User Defined Functions (UDF) 이름은 다른 함수들과 달리
system.query_log테이블에 기록되지 않습니다. 이 PR에서는 요청에서 UDF가 사용된 경우 UDF 이름을 두 컬럼used_executable_user_defined_functions또는used_sql_user_defined_functions중 하나에 추가하도록 합니다. #81101 (Kyamran). - HTTP 프로토콜을 통해 텍스트 포맷(
JSON,Values등)을 사용해 INSERT를 수행할 때Enum필드를 생략하면 발생할 수 있던Too large size ... passed to allocator오류 또는 잠재적인 크래시를 수정했습니다. #81145 (Anton Popov). - 희소 컬럼을 포함한 INSERT 블록이 non-MT MV로 전달될 때 발생하던 LOGICAL_ERROR를 수정했습니다. #81161 (Azat Khuzhin).
distributed_product_mode_local=local에서 교차 복제 환경에서 발생하던Unknown table expression identifier오류를 수정했습니다. #81162 (Nikolai Kochetov).- 필터링 후 Parquet 파일의 행 수를 잘못 캐시하던 문제를 수정했습니다. #81184 (Michael Kolupaev).
- 상대 캐시 경로와 함께 사용할 때
fs cache max_size_to_total_space설정이 제대로 동작하도록 수정했습니다. #81237 (Kseniia Sumarokova). - Parquet 형식으로 const 튜플 또는 맵을 출력할 때 clickhouse-local이 비정상 종료되던 문제를 수정했습니다. #81249 (Michael Kolupaev).
- 네트워크를 통해 수신된 배열 오프셋을 검증합니다. #81269 (Azat Khuzhin).
- 빈 테이블을 조인하고 윈도우 함수(window function)를 사용하는 쿼리에서 발생하는 일부 특수한 코너 케이스를 수정합니다. 이 버그로 인해 병렬 스트림 수가 폭발적으로 증가하여 OOM이 발생할 수 있었습니다. #81299 (Alexander Gololobov).
- 데이터 레이크 클러스터 함수(
deltaLakeCluster,icebergCluster등)에 대한 수정: (1) 이전 analyzer와 함께Cluster함수를 사용할 때DataLakeConfiguration에서 발생할 수 있는 segfault 수정; (2) 중복되는 데이터 레이크 메타데이터 업데이트 제거(불필요한 객체 스토리지 요청 제거); (3) 형식이 명시적으로 지정되지 않았을 때 객체 스토리지에서 불필요하게 목록을 조회하던 문제 수정(이는 이미 클러스터가 아닌 데이터 레이크 엔진에 대해서는 처리되어 있었습니다). #81300 (Kseniia Sumarokova). - force_restore_data 플래그가 손실된 Keeper 메타데이터를 복구하도록 수정했습니다. #81324 (Raúl Marín).
- delta-kernel의 region 오류를 수정합니다. #79914를 해결합니다. #81353 (Kseniia Sumarokova).
- divideOrNull에 대한 잘못된 JIT 코드를 비활성화합니다. #81370 (Raúl Marín).
- 이름이 너무 긴 파티션 컬럼이 있는 MergeTree 테이블에서 발생하던 INSERT 오류를 수정합니다. #81390 (hy123q).
- #81957에 백포트되었습니다: 머지 도중 예외가 발생할 때
Aggregator에서 발생할 수 있는 충돌을 수정했습니다. #81450 (Nikita Taranov). - 여러 manifest 파일의 내용을 한꺼번에 메모리에 저장하지 않도록 했습니다. #81470 (Daniil Ivanik).
- 백그라운드 풀(
background_.*pool_size) 종료 시 발생할 수 있던 크래시를 수정했습니다. #81473 (Azat Khuzhin). URL엔진을 사용하는 테이블에 기록할 때 발생하던Npy포맷의 범위를 벗어난 읽기(out-of-bounds read)를 수정합니다. #81356를 해결합니다. #81502 (Alexey Milovidov).- Web UI에서
NaN%가 표시되는 경우가 있습니다(일반적인 JavaScript 문제). #81507 (Alexey Milovidov). database_replicated_enforce_synchronous_settings가 1로 설정된 경우DatabaseReplicated를 수정했습니다. #81564 (Azat Khuzhin).- LowCardinality(Nullable(...)) 타입의 정렬 순서를 수정했습니다. #81583 (Pervakov Grigorii).
- 서버는 소켓에서 요청을 끝까지 모두 읽지 못한 경우 HTTP 연결을 유지하지 않아야 합니다. #81595 (Sema Checherinda).
- 스칼라 상관 서브쿼리가 프로젝션 표현식의 결과를 널 허용(Nullable) 값으로 반환하도록 했습니다. 상관 서브쿼리가 빈 결과 집합을 반환하는 경우의 동작을 수정했습니다. #81632 (Dmitry Novik).
ReplicatedMergeTree에ATTACH중 발생하는Unexpected relative path for a deduplicated part문제를 수정합니다. #81647 (Azat Khuzhin).- 쿼리 설정
use_iceberg_partition_pruning은 query 컨텍스트가 아니라 global 컨텍스트를 사용하므로 Iceberg 스토리지에는 적용되지 않습니다. 다만 기본값이 true이므로 심각한 문제는 아닙니다. 이 PR에서 해당 문제를 수정했습니다. #81673 (Han Fei). - #82128에 백포트됨: TTL 표현식에서 dict가 사용될 때 머지 작업 중에 발생하던 「Context has expired」 오류를 수정했습니다. #81690 (Azat Khuzhin).
- MergeTree 설정
merge_max_block_size가 0이 아닌 값인지 확인하도록 검증을 추가했습니다. #81693 (Bharat Nallan). clickhouse-local에서DROP VIEW쿼리가 멈추는 문제를 수정합니다. #81705 (Bharat Nallan).- 일부 경우에 StorageRedis 조인이 잘못 동작하던 문제를 수정했습니다. #81736 (Pervakov Grigorii).
- 빈
USING ()절과 이전 analyzer가 활성화된 상태에서ConcurrentHashJoin에서 발생하던 크래시를 수정합니다. #81754 (Nikita Taranov). - Keeper 수정: 로그에 잘못된 항목이 있는 경우 새 로그 커밋을 차단합니다. 이전에는 리더가 일부 로그를 잘못 적용하더라도, 팔로워가 다이제스트 불일치를 감지하고 중단했음에도 리더는 새 로그를 계속 커밋했습니다. #81780 (Antonio Andelic).
- 스칼라 상관 서브쿼리 처리 중 필요한 컬럼이 읽히지 않던 문제를 수정합니다. #81716을(를) 수정합니다. #81805 (Dmitry Novik).
- 누군가 우리 코드 곳곳에 Kusto를 흩뿌려 놓았습니다. 이를 정리했습니다. 이 변경으로 #81643 이슈가 해결됩니다. #81885 (Alexey Milovidov).
- 이전 버전에서는
/js에 대한 요청에 서버가 불필요하게 많은 콘텐츠를 반환했습니다. 이로써 #61890이(가) 해결되었습니다. #81895 (Alexey Milovidov). - 이전에
MongoDB테이블 엔진 정의에서host:port인자에 경로 컴포넌트를 포함할 수 있었지만, 해당 경로 컴포넌트는 암묵적으로 무시되었습니다. MongoDB 통합에서는 이러한 테이블은 로드하지 않습니다. 이번 수정으로,MongoDB엔진이 다섯 개의 인자를 가지는 경우 인자에 있는 데이터베이스 이름을 사용하여 이러한 테이블을 로드하도록 허용하고 경로 컴포넌트는 무시합니다. 참고: 이 수정은 새로 생성된 테이블이나mongo테이블 FUNCTION이 포함된 쿼리, 그리고 딕셔너리 소스와 named collection(이름이 지정된 컬렉션)에는 적용되지 않습니다. #81942 (Vladimir Cherkasov). - 병합 중 예외가 발생했을 때
Aggregator에서 발생할 수 있던 크래시를 수정했습니다. #82022 (Nikita Taranov). arraySimilarity에서 발생한 복사/붙여넣기 오류를 수정하고,UInt32및Int32가중치 사용을 금지했습니다. 테스트와 문서를 업데이트했습니다. #82103 (Mikhail f. Shiryaev).- suggestion 스레드와 메인 클라이언트 스레드 사이에서 발생할 수 있는 데이터 레이스를 수정했습니다. #82233 (Azat Khuzhin).
빌드/테스트/패키징 개선 사항
postgres16.9 버전을 사용합니다. #81437 (Konstantin Bogdanov).openssl3.2.4를 사용하도록 했습니다. #81438 (Konstantin Bogdanov).abseil-cpp2025-01-27 버전을 사용합니다. #81440 (Konstantin Bogdanov).mongo-c-driver를 1.30.4로 업데이트했습니다. #81449 (Konstantin Bogdanov).krb51.21.3-final 버전을 사용합니다. #81453 (Konstantin Bogdanov).orc2.1.2 버전을 사용합니다. #81455 (Konstantin Bogdanov).grpc를 1.73.0으로 업데이트했습니다. #81629 (Konstantin Bogdanov).delta-kernel-rsv0.12.1을 사용합니다. #81707 (Konstantin Bogdanov).c-ares를v1.34.5로 업데이트했습니다. #81159 (Konstantin Bogdanov).curl을 8.14 버전으로 업그레이드하여 CVE-2025-5025 및 CVE-2025-4947 취약점을 해결합니다. #81171 (larryluogit).- 다음 취약점을 해결하기 위해
libarchive를 3.7.9로 업그레이드합니다: CVE-2024-20696 CVE-2025-25724 CVE-2024-48958 CVE-2024-57970 CVE-2025-1632 CVE-2024-48957 CVE-2024-48615. #81174 (larryluogit). libxml2를 2.14.3으로 업그레이드했습니다. #81187 (larryluogit).- vendored Rust 소스를
CARGO_HOME에 복사하지 않도록 했습니다. #79560 (Konstantin Bogdanov). - 자체 엔드포인트로 대체하여 Sentry 라이브러리에 대한 의존성을 제거합니다. #80236 (Alexey Milovidov).
- CI 이미지의 Python 종속성을 업데이트하여 Dependabot 알림을 해결합니다. #80658 (Raúl Marín).
- Keeper에 대한 장애 주입이 활성화된 경우에도 테스트가 더 견고해지도록, 시작 시 Keeper에서 복제된 DDL 중단 플래그를 읽는 작업을 재시도하도록 했습니다. #80964 (Alexander Gololobov).
- Ubuntu 아카이브 URL에 https를 사용하도록 했습니다. #81016 (Raúl Marín).
- 테스트 이미지의 Python 종속성을 업데이트합니다. #81042 (dependabot[bot]).
- Nix 빌드에
flake.nix를 도입했습니다. #81463 (Konstantin Bogdanov). - 빌드 과정에서
delta-kernel-rs가 네트워크 연결을 필요로 하던 문제를 수정했습니다. #80609를 닫습니다. #81602 (Konstantin Bogdanov). 블로그 글 「A Year of Rust in ClickHouse」도 참고하십시오.
ClickHouse 25.5 릴리스, 2025-05-22
하위 호환성이 없는 변경
- 함수
geoToH3는 이제 다른 기하 함수와 마찬가지로 (lat, lon, res) 순서로 입력을 받습니다. 이전 결과 순서 (lon, lat, res)를 유지하려는 사용자는 설정geotoh3_argument_order = 'lon_lat'값을 사용하면 됩니다. #78852 (Pratima Patel). - 파일 시스템 캐시 설정
allow_dynamic_cache_resize를 추가했습니다. 기본값은false이며, 파일 시스템 캐시를 동적으로 리사이즈할 수 있도록 허용합니다. 이유: 특정 환경(ClickHouse Cloud)에서는 모든 스케일링 이벤트가 프로세스 재시작을 통해 발생하며, 동작에 대한 제어를 강화하고 안전장치를 두기 위해 이 기능이 명시적으로 비활성화되기를 원합니다. 이전 버전에서는 별도 설정 없이 동적 캐시 리사이즈가 기본적으로 동작했기 때문에, 이 PR은 하위 호환성이 없는 변경으로 표시됩니다. #79148 (Kseniia Sumarokova). - 레거시 인덱스 타입
annoy와usearch에 대한 지원을 제거했습니다. 두 인덱스 타입은 오랫동안 스텁 상태였으며, 레거시 인덱스를 사용하려는 모든 시도는 어차피 에러를 반환했습니다. 여전히annoy및usearch인덱스를 보유하고 있는 경우 드롭해야 합니다. #79802 (Robert Schulze). format_alter_commands_with_parentheses서버 설정을 제거했습니다. 이 설정은 24.2에서 도입되었고 기본값은 비활성 상태였습니다. 25.2에서 기본적으로 활성화되었습니다. 새 포맷을 지원하지 않는 LTS 버전이 존재하지 않으므로, 이 설정을 제거할 수 있습니다. #79970 (János Benjamin Antal).DeltaLake스토리지의delta-kernel-rs구현을 기본적으로 활성화했습니다. #79541 (Kseniia Sumarokova).URL에서 다중 리다이렉트를 포함하는 경우, 체인의 모든 리다이렉트에 대해enable_url_encoding설정이 올바르게 적용됩니다. #79563 (Shankar Iyer). 설정enble_url_encoding의 기본값은 이제false로 설정됩니다. #80088 (Shankar Iyer).
새 기능
- WHERE 절에서 스칼라 연관 서브쿼리를 지원합니다. #6697 이슈를 해결합니다. #79600 (Dmitry Novik). 단순한 경우에 한해 projection 목록에서 연관 서브쿼리를 지원합니다. #79925 (Dmitry Novik). #76078 (Dmitry Novik). 이제 TPC-H 테스트 스위트의 100%를 포괄합니다.
- 벡터 유사도 인덱스를 사용하는 벡터 검색 기능이 이제 베타 단계(이전에는 실험적 단계)입니다. #80164 (Robert Schulze).
Parquet포맷에서 지리(geo) 타입을 지원합니다. 이로써 #75317 이슈가 해결되었습니다. #79777 (scanhex12).- 새로운 함수
sparseGrams,sparseGramsHashes,sparseGramsHashesUTF8,sparseGramsUTF8가 추가되었습니다. 이 함수들은 인덱싱과 검색을 위해 부분 문자열을 추출하는 데 사용되는, 「희소 n-그램(sparse-ngrams)」을 계산하는 견고한 알고리즘을 제공합니다. #79517 (scanhex12). clickhouse-local(및 그 축약 별칭인ch)은 이제 처리할 입력 데이터가 있을 때 암시적으로FROM table을 사용합니다. 이로써 #65023이 해결되었습니다. 또한 일반 파일을 처리하면서--input-format이 지정되지 않은 경우clickhouse-local에서 형식을 자동으로 추론하도록 했습니다. #79085 (Alexey Milovidov).- 무작위 또는 암호화된 데이터일 가능성이 있는 값을 검색할 수 있도록
stringBytesUniq및stringBytesEntropy함수를 추가했습니다. #79350 (Sachin Kumar Singh). - base32를 인코딩하고 디코딩하는 FUNCTION들이 추가되었습니다. #79809 (Joanna Hulboj).
getServerSetting및getMergeTreeSetting함수를 추가합니다. #78318 이슈를 해결합니다. #78439 (NamNguyenHoai).version-hint.text파일을 활용하기 위한 새로운iceberg_enable_version_hintSETTING을 추가했습니다. #78594 (Arnaud Briche).LIKE키워드로 필터링해 데이터베이스에서 특정 테이블을 TRUNCATE 할 수 있게 합니다. #78597 (Yarik Briukhovetskyi).MergeTree계열 테이블에서 가상 컬럼_part_starting_offset을 지원합니다. 이 컬럼은 현재 파트 목록을 기준으로 쿼리 시점에 계산되는, 앞선 모든 파트의 누적 행 수를 나타냅니다. 누적 값은 쿼리 전체 실행 동안 유지되며, 파트 프루닝이 발생한 이후에도 그대로 유효합니다. 이러한 동작을 지원하기 위해 관련 내부 로직이 리팩터링되었습니다. #79417 (Amos Bird).- 오른쪽 인수가 0일 때 NULL을 반환하는
divideOrNull,moduloOrNull,intDivOrNull,positiveModuloOrNullFUNCTION을 추가합니다. #78276 (kevinyhzou). - ClickHouse 벡터 검색이 이제 사전(pre-filtering) 및 사후(post-filtering) 필터링을 모두 지원하며, 보다 세밀한 제어를 위한 관련 설정도 제공합니다. (issue #78161). #79854 (Shankar Iyer).
icebergHash및icebergBucket함수를 추가했습니다.bucket transfom으로 파티션된Iceberg테이블에서 데이터 파일 프루닝(pruning)을 지원합니다. #79262 (Daniil Ivanik).
실험적 기능
- 새로운
Time/Time64데이터 타입:Time(HHH:MM:SS) 및Time64(HHH:MM:SS.<fractional>)과 다른 데이터 타입과 상호 작용하기 위한 일부 기본 cast 함수가 추가되었습니다. 또한 기존 함수 이름을 toTime에서 toTimeWithFixedDate로 변경했습니다. cast 함수에 toTime 함수가 필요하기 때문입니다. #75735 (Yarik Briukhovetskyi). 72459). - Iceberg 데이터 레이크를 위한 Hive 메타스토어 카탈로그가 추가되었습니다. #77677 (scanhex12).
full_text타입의 인덱스가gin으로 이름이 변경되었습니다. 이는 PostgreSQL 및 다른 데이터베이스에서 더 익숙한 용어를 따르기 위한 것입니다. 기존full_text타입 인덱스는 여전히 로드할 수 있지만, 검색에 사용하려 하면 예외를 발생시키고, 대신gin인덱스를 사용할 것을 제안합니다. #79024 (Robert Schulze).
성능 향상
- Compact 파트 포맷을 변경하여 각 서브스트림별로 마크를 저장함으로써 개별 서브컬럼을 읽을 수 있도록 합니다. 기존 Compact 포맷은 여전히 읽기에는 지원되며, MergeTree 설정
write_marks_for_substreams_in_compact_parts를 사용하여 쓰기에서도 사용할 수 있습니다. Compact 파트의 저장 방식이 변경되므로 업그레이드를 더 안전하게 진행하기 위해 기본적으로 비활성화되어 있습니다. 향후 출시 버전 중 하나에서 기본적으로 활성화될 예정입니다. #77940 (Pavel Kruglov). - 서브컬럼을 사용하는 조건식을
PREWHERE로 이동할 수 있도록 허용합니다. #79489 (Pavel Kruglov). - 한 번에 여러 개의 그래뉼에 대한 표현식을 평가하여 보조 인덱스의 성능을 향상합니다. #64109 (Alexey Milovidov).
compile_expressions(일반 표현식 일부를 위한 JIT 컴파일러)를 기본적으로 활성화합니다. 이로써 #51264, #56386, #66486가 해결됩니다. #79907 (Alexey Milovidov).- 새로운 설정인
use_skip_indexes_in_final_exact_mode이 도입되었습니다.ReplacingMergeTree테이블에 대한 쿼리에 FINAL 절이 포함된 경우, 스킵 인덱스를 기반으로 테이블 범위만 읽도록 하면 잘못된 결과가 생성될 수 있습니다. 이 설정은 스킵 인덱스가 반환한 기본 키 범위와 겹치는 최신 파트를 스캔하여 올바른 결과가 반환되도록 보장합니다. 비활성화하려면 0으로 설정하고, 활성화하려면 1로 설정합니다. #78350 (Shankar Iyer). - 객체 스토리지 클러스터 테이블 함수(예:
s3Cluster)는 이제 콘시스턴트 해싱을 기반으로 파일을 레플리카에 할당해 읽기 작업의 캐시 지역성을 개선합니다. #77326 (Andrej Hoos). parallel_inserts=true큐 설정을 통해INSERT작업을 병렬로 수행할 수 있도록 하여S3Queue/AzureQueue의 성능을 개선했습니다. 이전에는 S3Queue/AzureQueue가 파이프라인의 첫 번째 단계(다운로드, 파싱)만 병렬로 수행할 수 있었고,INSERT는 단일 스레드로만 처리되었습니다. 또한INSERT가 거의 항상 병목 지점이었습니다. 이제processing_threads_num에 따라 거의 선형적으로 확장됩니다. #77671 (Azat Khuzhin). S3Queue/AzureQueue에서 max_processed_files_before_commit이 더 공정하게 적용되도록 개선했습니다. #79363 (Azat Khuzhin).parallel_hash_join_threshold설정으로 제어되는 임계값을 도입하여, 오른쪽 테이블의 크기가 임계값보다 작은 경우hash알고리즘으로 폴백되도록 했습니다. #76185 (Nikita Taranov).- 이제 병렬 레플리카 읽기 기능이 활성화된 경우, 읽기 작업의 크기를 결정할 때 레플리카 수를 기준으로 합니다. 이를 통해 읽어야 할 데이터 양이 그리 크지 않을 때 레플리카 간 작업 분배가 더 효율적으로 이루어집니다. #78695 (Nikita Taranov).
- 분산 집계의 최종 단계에서
uniqExact상태를 병렬로 병합할 수 있도록 했습니다. #78703 (Nikita Taranov). - 키가 있는 집계를 위해
uniqExact상태를 병렬로 병합할 때 발생할 수 있는 성능 저하를 수정합니다. #78724 (Nikita Taranov). - Azure 스토리지에 대한 List Blobs API 호출 수를 줄였습니다. #78860 (Julia Kartseva).
- 병렬 레플리카를 사용하는 분산
INSERT SELECT의 성능을 개선했습니다. #79441 (Azat Khuzhin). LogSeriesLimiter가 생성될 때마다 정리를 수행하지 않도록 하여 잠금 경합을 피하고, 높은 동시성 환경에서의 성능 저하를 방지합니다. #79864 (filimonov).- 단순 count 최적화를 통해 쿼리 실행 속도를 향상합니다. #79945 (Raúl Marín).
Decimal을 사용하는 일부 연산에서 인라이닝이 더 잘 수행되도록 개선했습니다. #79999 (Konstantin Bogdanov).input_format_parquet_bloom_filter_push_down의 기본값을 true로 설정합니다. 또한 설정 변경 이력의 오류를 수정합니다. #80058 (Alexey Milovidov).- 모든 행을 삭제해야 하는 파트에 대한
ALTER ... DELETE뮤테이션을 최적화했습니다. 이제 이러한 경우 뮤테이션을 실행하지 않고 원본 파트를 변경하는 대신 빈 파트를 생성합니다. #79307 (Anton Popov). - Compact part에 삽입할 때 블록을 불필요하게 추가 복사하지 않도록 최적화했습니다. #79536 (Pavel Kruglov).
input_format_max_block_size_bytes설정을 추가하여 입력 포맷에서 생성되는 블록 크기를 바이트 단위로 제한합니다. 이 설정은 행에 큰 값이 포함된 경우 데이터 가져오기 시 메모리 사용량이 과도하게 증가하는 것을 피하는 데 도움이 됩니다. #79495 (Pavel Kruglov).- 스레드와 async_socket_for_remote/use_hedge_requests에 대한 가드 페이지를 제거합니다.
FiberStack에서 메모리 할당 방식을mmap에서aligned_alloc으로 변경합니다. 이는 VMA를 분할하며, 고부하 시 vm.max_map_count 설정 값에 도달할 수 있습니다. #79147 (Sema Checherinda). - 병렬 레플리카를 활용한 지연 구체화. #79401 (Igor Nikonov).
개선 사항
- 다음 설정(
lightweight_deletes_sync = 0,apply_mutations_on_fly = 1)으로 경량한 삭제를 실시간으로 적용할 수 있는 기능을 추가했습니다. #79281 (Anton Popov). - Pretty 형식(Pretty format)의 데이터가 터미널에 표시될 때, 이후 블록의 컬럼 너비가 동일하면 커서를 위로 이동해 이전 블록에 이어 붙이는 방식으로 연속 출력할 수 있습니다. 이를 통해 #79333 이슈가 해결되었습니다. 이 기능은 새로운 설정인
output_format_pretty_glue_chunks로 제어됩니다. #79339 (Alexey Milovidov). isIPAddressInRange함수를String,IPv4,IPv6,널 허용(String),널 허용(IPv4),널 허용(IPv6)데이터 타입으로 확장했습니다. #78364 (YjyJeff).PostgreSQL엔진의 커넥션 풀러 설정을 동적으로 변경할 수 있도록 했습니다. #78414 (Samay Sharma).- 일반 projection에서
_part_offset을 지정할 수 있습니다. 이는 projection 인덱스를 구축하기 위한 첫 단계입니다. #58224와 함께 사용할 수 있으며, #63207을 개선하는 데 도움이 됩니다. #78429 (Amos Bird). system.named_collections에 새로운 컬럼인create_query와source를 추가합니다. #78179를 해결합니다. #78582 (MikhailBurdukov).- 시스템 테이블
system.query_condition_cache에 새 필드condition이 추가되었습니다. 이 필드는 쿼리 조건 캐시에서 키로 사용되는 해시를 생성하는 데 사용된 평문 형태의 조건을 저장합니다. #78671 (Robert Schulze). - 벡터 유사도 인덱스를 이제
BFloat16컬럼에 생성할 수 있습니다. #78850 (Robert Schulze). - best-effort 방식의
DateTime64파싱에서 소수 자릿수를 포함한 Unix 타임스탬프를 지원합니다. #78908 (Pavel Kruglov). DeltaLake스토리지의 delta-kernel 구현에서 컬럼 매핑 모드를 수정하고, 스키마 진화를 위한 테스트를 추가합니다. #78921 (Kseniia Sumarokova).- Values 포맷에서
Variant컬럼으로 데이터를 삽입할 때 값 변환 로직을 개선했습니다. #78923 (Pavel Kruglov). tokensFUNCTION이 추가적인 "tokenizer" 인수와 기타 tokenizer별 인수들을 받을 수 있도록 확장되었습니다. #79001 (Elmi Ahmadov).SHOW CLUSTER명령문이 이제 인수에 있는 매크로(있는 경우)를 확장합니다. #79006 (arf42).- 이제 해시 함수는 배열, 튜플, 맵 내의
NULL값도 지원합니다. (이슈 #48365 및 #48623). #79008 (Michael Kolupaev). - cctz를 2025a 버전으로 업데이트했습니다. #79043 (Raúl Marín).
- UDF의 기본 stderr 처리 방식을 "log_last"로 변경했습니다. 이는 사용성 측면에서 더 좋습니다. #79066 (Alexey Milovidov).
- Web UI에서 탭을 실행 취소할 수 있도록 했습니다. 이로써 #71284가 해결되었습니다. #79084 (Alexey Milovidov).
recoverLostReplica실행 시 settings를 제거하여 https://github.com/ClickHouse/ClickHouse/pull/78637 에서와 동일하게 동작하도록 했습니다. #79113 (Nikita Mikhaylov).- 프로파일 이벤트
ParquetReadRowGroups및ParquetPrunedRowGroups를 추가하여 Parquet 인덱스 프루닝을 프로파일링합니다. #79180 (flynn). - 클러스터에서 데이터베이스에 대한
ALTER를 지원합니다. #79242 (Tuan Pham Anh). - QueryMetricLog에 대한 통계 수집 시 누락된 실행을 명시적으로 건너뛰도록 했습니다. 그렇지 않으면 로그가 현재 시간까지 따라잡는 데 오랜 시간이 걸립니다. #79257 (Mikhail Artemenko).
Arrow기반 포맷을 읽을 때의 성능을 소폭 최적화했습니다. #79308 (Bharat Nallan).allow_archive_path_syntax설정이 실수로 실험적(experimental)으로 표시되었습니다. 실험적 설정이 기본값으로 활성화되지 않도록 테스트를 추가했습니다. #79320 (Alexey Milovidov).- 페이지 캐시 설정을 쿼리 단위로 조정할 수 있도록 했습니다. 이는 보다 빠른 실험과 고처리량 및 저지연 쿼리에 대한 세밀한 튜닝을 가능하게 하기 위해서입니다. #79337 (Alexey Milovidov).
- 대부분의 64비트 해시처럼 보이는 숫자에 대해서는 Pretty 형식에서 숫자 힌트를 출력하지 않습니다. 이를 통해 #79334 이슈를 해결합니다. #79338 (Alexey Milovidov).
- 고급 대시보드의 그래프 색상은 해당 쿼리의 해시값을 기반으로 계산됩니다. 이를 통해 대시보드를 스크롤할 때 그래프를 더 쉽게 기억하고 찾을 수 있습니다. #79341 (Alexey Milovidov).
cache가상 파일 시스템의 총 용량을 나타내는 비동기 메트릭FilesystemCacheCapacity를 추가했습니다. 글로벌 인프라 모니터링에 유용합니다. #79348 (Alexey Milovidov).- system.parts에 대한 접근을 최적화하여, 요청된 경우에만 컬럼/인덱스 크기를 읽도록 했습니다. #79352 (Azat Khuzhin).
'SHOW CLUSTER <name>'쿼리에 대해 모든 필드가 아니라 관련된 필드만 계산하도록 했습니다. #79368 (Tuan Pham Anh).DatabaseCatalog에 대한 스토리지 설정을 지정할 수 있게 되었습니다. #79407 (Kseniia Sumarokova).DeltaLake에서 로컬 스토리지 사용을 지원합니다. #79416 (Kseniia Sumarokova).- delta-kernel-rs를 사용할 수 있도록 쿼리 수준 설정
allow_experimental_delta_kernel_rs를 추가했습니다. #79418 (Kseniia Sumarokova). - Azure/S3 blob storage에서 blob을 나열하는 과정에서 발생할 수 있는 무한 루프를 수정했습니다. #79425 (Alexander Gololobov).
- 파일 시스템 캐시에 대한 설정인
max_size_ratio_to_total_space를 추가했습니다. #79460 (Kseniia Sumarokova). clickhouse-benchmark에서reconnect옵션을 재구성하여, 재연결 동작을 제어하는 값으로 0, 1 또는 N을 사용할 수 있도록 했습니다. #79465 (Sachin Kumar Singh).- 서로 다른
plain_rewritable디스크에 존재하는 테이블에서도ALTER TABLE ... MOVE|REPLACE PARTITION을(를) 사용할 수 있도록 허용합니다. #79566 (Julia Kartseva). - 벡터 유사도 인덱스는 이제 기준 벡터가
Array(BFloat16)타입인 경우에도 사용됩니다. #79745 (Shankar Iyer). system.error_log테이블에last_error_message,last_error_trace,query_id를 추가했습니다. 관련 이슈 #75816. #79836 (Andrei Tinikov).- 기본값으로 크래시 보고서 전송을 활성화합니다. 서버 구성 파일에서 비활성화할 수 있습니다. #79838 (Alexey Milovidov).
system.functions시스템 테이블에서 이제 각 FUNCTION이 처음 도입된 ClickHouse 버전이 표시됩니다. #79839 (Robert Schulze).access_control_improvements.enable_user_name_access_typeSETTING이 추가되었습니다. 이 SETTING은 https://github.com/ClickHouse/ClickHouse/pull/72246에서 도입된 사용자 및 역할에 대한 정밀한 권한 부여(precise grants)를 활성화하거나 비활성화할 수 있도록 합니다. 클러스터에 25.1보다 이전 버전의 레플리카가 있는 경우 이 SETTING을 끄는 것이 좋습니다. #79842 (pufit).ASTSelectWithUnionQuery::clone()메서드가 이제is_normalized필드도 함께 고려하도록 올바르게 구현되었습니다. 이는 #77569에 도움이 될 수 있습니다. #79909 (Nikita Mikhaylov).- EXCEPT 연산자가 포함된 특정 쿼리의 일관되지 않은 포매팅을 수정합니다. EXCEPT 연산자의 왼쪽 피연산자가
*로 끝나는 경우, 포매팅된 쿼리에서 괄호가 제거되어EXCEPT수정자가 적용된*로 파싱됩니다. 이러한 쿼리는 퍼저(fuzzer)에 의해 발견되었으며, 실제 환경에서 발견될 가능성은 낮습니다. #79950를 해결합니다. #79952 (Alexey Milovidov). - variants의 역직렬화 순서 캐시를 활용하여
JSON타입 파싱이 소폭 개선되었습니다. #79984 (Pavel Kruglov). - 설정
s3_slow_all_threads_after_network_error를 추가했습니다. #80035 (Vitaly Baranov). - 병합 대상으로 선택된 파트에 대한 로그 수준이 잘못되어 Information으로 설정되어 있었습니다. #80061를 해결했습니다. #80062 (Alexey Milovidov).
- trace-visualizer: 툴팁 및 상태 메시지에 runtime/share 정보를 추가했습니다. #79040 (Sergei Trifonov).
- trace-visualizer: ClickHouse 서버에서 데이터를 불러옵니다. #79042 (Sergei Trifonov).
- 실패한 머지 작업에 대한 메트릭을 추가했습니다. #79228 (Miсhael Stetsyuk).
clickhouse-benchmark는 최대 반복 횟수가 지정된 경우 해당 최대값을 기준으로 백분율을 표시합니다. #79346 (Alexey Milovidov).- system.parts 테이블용 시각화 기능을 추가합니다. #79437 (Sergei Trifonov).
- 쿼리 지연 시간 분석 도구를 추가했습니다. #79978 (Sergei Trifonov).
버그 수정 (공식 안정 릴리스에서 사용자에게 직접 보이는 오동작)
- 데이터 파트에서 누락된 컬럼 이름 변경 문제를 수정합니다. #76346 (Anton Popov).
- materialized view가 너무 늦게 시작되는 경우가 있습니다. 예를 들어, 해당 materialized view로 스트리밍하는 Kafka 테이블이 이미 시작된 이후에 시작될 수 있습니다. #72123 (Ilya Golshtein).
- analyzer가 활성화된 상태에서
VIEW생성 시 발생하던SELECT쿼리 재작성 동작을 수정했습니다. #75956를 닫습니다. #76356 (Dmitry Novik). - 서버에서
apply_settings_from_server를 통해async_insert를 적용하는 동작을 수정했습니다(이전에는 클라이언트에서Unknown packet 11 from server오류가 발생했습니다). #77578 (Azat Khuzhin). - Replicated 데이터베이스(복제된 데이터베이스)에서 새로 추가된 레플리카에서 갱신 가능 구체화 뷰가 작동하지 않던 문제를 수정했습니다. #77774 (Michael Kolupaev).
- 백업을 실패하게 만들던 갱신 가능 구체화 뷰 관련 문제를 수정했습니다. #77893 (Michael Kolupaev).
transform에서 발생하던 기존 논리 오류를 수정했습니다. #78247 (Yarik Briukhovetskyi).- 일부 경우 analyzer를 사용할 때 secondary 인덱스가 적용되지 않던 문제를 수정합니다. #65607 및 #69373를 해결합니다. #78485 (Nikolai Kochetov).
- 압축이 활성화된 HTTP 프로토콜에서 프로파일 이벤트(
NetworkSendElapsedMicroseconds/NetworkSendBytes) 덤프를 수정했습니다(오차가 버퍼 크기, 일반적으로 약 1MiB를 넘지 않도록 했습니다). #78516 (Azat Khuzhin). - JOIN ... USING에 ALIAS 컬럼이 포함될 때 analyzer가 LOGICAL_ERROR를 발생시키던 문제를 수정하여, 이제 LOGICAL_ERROR 대신 적절한 오류를 발생시키도록 했습니다. #78618 (Yakov Olkhovskiy).
- Analyzer 수정: SELECT 문에 위치 인자가 포함된 경우 CREATE VIEW ... ON CLUSTER가 실패하던 문제를 해결했습니다. #78663 (Yakov Olkhovskiy).
SELECT에 스칼라 서브쿼리가 포함된 경우, 스키마 추론이 적용된 테이블 FUNCTION에 대해INSERT SELECT를 수행할 때 발생하던Block structure mismatch오류를 수정합니다. #78677 (Pervakov Grigorii).- analyzer를 수정했습니다: prefer_global_in_and_join=1을 사용하는 분산 테이블(Distributed table)에 대한 SELECT 쿼리에서
in함수는globalIn으로 대체되어야 합니다. #78749 (Yakov Olkhovskiy). MongoDB엔진 또는mongodb테이블 함수에서 데이터를 읽는 여러 유형의SELECT쿼리가 수정되었습니다.WHERE절에서 상수 값이 암시적으로 변환되는 쿼리(예:WHERE datetime = '2025-03-10 00:00:00'),LIMIT및GROUP BY를 사용하는 쿼리 등이 이에 해당합니다. 이전에는 잘못된 결과를 반환할 수 있었습니다. #78777 (Anton Popov).- 서로 다른 JSON 타입 간의 변환을 수정했습니다. 이제 String으로 변환했다가 다시 되돌리는 방식의 단순 캐스팅으로 수행됩니다. 효율성은 다소 떨어지지만 정확도는 100%입니다. #78807 (Pavel Kruglov).
- Dynamic 타입을 Interval 타입으로 변환할 때 발생하던 논리 오류를 수정했습니다. #78813 (Pavel Kruglov).
- JSON 파싱 오류 발생 시 컬럼 롤백 문제가 발생하던 현상을 수정했습니다. #78836 (Pavel Kruglov).
- 상수 별칭 컬럼을 사용해 JOIN을 수행할 때 발생하던 「bad cast」 오류를 수정했습니다. #78848 (Vladimir Cherkasov).
- materialized view에서 뷰와 대상 테이블의 컬럼 타입이 서로 다른 경우, 해당 컬럼에 prewhere를 사용할 수 없도록 했습니다. #78889 (Pavel Kruglov).
- Variant 컬럼의 손상된 바이너리 데이터를 파싱할 때 발생하던 논리 오류를 수정했습니다. #78982 (Pavel Kruglov).
- Parquet 배치 크기가 0으로 설정된 경우 예외를 던지도록 변경했습니다. 이전에는 output_format_parquet_batch_size = 0인 경우 ClickHouse가 멈추는 문제가 있었습니다. 이제 이 동작이 수정되었습니다. #78991 (daryawessely).
- compact 파트에서 basic 포맷을 사용하는 variant discriminator의 역직렬화 문제를 수정합니다. 해당 문제는 https://github.com/ClickHouse/ClickHouse/pull/55518에서 도입되었습니다. #79000 (Pavel Kruglov).
complex_key_ssd_cache타입의 딕셔너리는 이제block_size및write_buffer_size파라미터가 0 또는 음수 값인 경우 이를 허용하지 않습니다 (issue #78314). #79028 (Elmi Ahmadov).- SummingMergeTree에서 집계되지 않은 컬럼에는 Field 사용을 피하십시오. 이는 SummingMergeTree에서 사용하는 Dynamic/Variant 타입과 함께 예상치 못한 오류를 일으킬 수 있습니다. #79051 (Pavel Kruglov).
- analyzer에서 materialized view의 대상 Distributed 테이블을 읽을 때 헤더가 일치하지 않는 경우의 동작을 수정합니다. #79059 (Pavel Kruglov).
- 배치 insert가 수행된 테이블에서
arrayUnion()이 불필요한(잘못된) 값을 반환하던 버그를 수정합니다. #75057 이슈를 수정합니다. #79079 (Peter Nguyen). OpenSSLInitializer에서 발생하던 세그멘테이션 폴트(segfault) 문제를 수정합니다. #79092 이슈를 해결합니다. #79097 (Konstantin Bogdanov).- S3 ListObject 작업에 대해 항상 prefix를 설정하도록 했습니다. #79114 (Azat Khuzhin).
- 배치 삽입을 사용한 테이블에서 arrayUnion()이 불필요한(잘못된) 값을 반환하던 버그를 수정합니다. #79157 이슈를 수정합니다. #79158 (Peter Nguyen).
- 필터 푸시다운 이후 발생하는 논리 오류를 수정합니다. #79164 (Pervakov Grigorii).
- HTTP 기반 엔드포인트와 함께 사용되는 delta-kernel 구현의 DeltaLake 테이블 엔진 문제를 수정하고, NOSIGN 관련 문제를 수정합니다. #78124를 해결합니다. #79203 (Kseniia Sumarokova).
- Keeper 수정: 실패한 multi 요청에 대해 watch가 트리거되지 않도록 수정했습니다. #79247 (Antonio Andelic).
IN에서 Dynamic 및 JSON 타입의 사용을 금지합니다. 현재IN구현에서는 잘못된 결과가 발생할 수 있습니다. 이러한 타입에 대한IN의 올바른 지원은 복잡하며, 향후에 구현될 수 있습니다. #79282 (Pavel Kruglov).- JSON 타입 파싱 시 중복 경로 검사 로직을 수정합니다. #79317 (Pavel Kruglov).
- SecureStreamSocket 연결 문제를 해결했습니다. #79383 (Konstantin Bogdanov).
- 데이터를 포함하는 plain_rewritable 디스크가 로드되지 않는 문제를 수정합니다. #79439 (Julia Kartseva).
- MergeTree의 Wide 파트에서 동적 서브컬럼을 탐색하는 과정에서 발생하던 크래시를 수정합니다. #79466 (Pavel Kruglov).
- 초기 CREATE 쿼리에 대해서만 테이블 이름의 길이를 검증합니다. 하위 호환성 문제를 피하기 위해 후속 CREATE에 대해서는 길이 검증을 수행하지 않습니다. #79488 (Miсhael Stetsyuk).
- 희소 컬럼이 있는 테이블에서 여러 상황에서
Block structure mismatch오류가 발생하던 문제를 수정했습니다. #79491 (Anton Popov). - "Logical Error: Can't set alias of * of Asterisk on alias" 오류가 발생하던 두 가지 경우를 수정했습니다. #79505 (Raúl Marín).
- Atomic 데이터베이스 이름 변경 시 잘못된 경로가 사용되던 문제를 수정했습니다. #79569 (Tuan Pham Anh).
- JSON 컬럼을 다른 컬럼들과 함께 ORDER BY에 사용할 때의 동작을 수정했습니다. #79591 (Pavel Kruglov).
use_hedged_requests와allow_experimental_parallel_reading_from_replicas가 모두 비활성화된 상태에서 원격에서 데이터를 읽을 때 발생하던 결과 중복 문제를 수정합니다. #79599 (Eduard Karacharov).- Unity Catalog를 사용할 때 delta-kernel 구현에서 발생하던 크래시를 수정합니다. #79677 (Kseniia Sumarokova).
- 자동 검색 클러스터의 매크로를 올바르게 해석하도록 수정했습니다. #79696 (Anton Ivashkin).
- 올바르지 않게 설정된
page_cache_limits를 적절히 처리하도록 개선했습니다. #79805 (Bharat Nallan). - 가변 길이 포매터(예: 요일
Monday,Tuesday등을 출력하는%W) 뒤에 복합 포매터(한 번에 여러 구성 요소를 출력하는 포매터, 예: 미국식 날짜05/04/25를 출력하는%D)가 오는 경우 SQL 함수formatDateTime의 결과가 잘못되던 문제를 수정합니다. #79835 (Robert Schulze). - IcebergS3는 count() 최적화를 지원하지만 IcebergS3Cluster는 지원하지 않습니다. 이로 인해 클러스터 모드에서 반환되는 count() 결과가 레플리카 수의 배수가 될 수 있습니다. #79844 (wxybear).
- 프로젝션이 적용될 때까지 쿼리 실행에 어떤 컬럼도 사용되지 않는 경우, 지연 머티리얼라이제이션(lazy materialization)에서 발생하던 AMBIGUOUS_COLUMN_NAME 오류를 수정합니다. 예: SELECT * FROM t ORDER BY rand() LIMIT 5. #79926 (Igor Nikonov).
- 쿼리
CREATE DATABASE datalake ENGINE = DataLakeCatalog('http://catalog:8181', 'admin', 'password')에서 사용되는 비밀번호를 숨깁니다. #79941 (Han Fei). - JOIN USING에서 별칭(alias)을 지정할 수 있도록 했습니다. 컬럼 이름이 변경된 경우(예: ARRAY JOIN으로 인해) 이 별칭을 지정하면 됩니다. #73707 버그가 수정되었습니다. #79942 (Nikolai Kochetov).
- 새 레플리카에서 UNION을 사용하는 materialized view가 올바르게 동작하도록 개선했습니다. #80037 (Samay Sharma).
- SQL 함수
parseDateTime의 형식 지정자%e가 이제 한 자릿수 일자(예:3)도 인식하며, 이전에는 공백 패딩(예:3)이 필요했습니다. 이로 인해 MySQL과 동작 방식이 호환되게 되었습니다. 이전 동작을 유지하려면 설정값parsedatetime_e_requires_space_padding = 1을 설정하십시오. (이슈 #78243). #80057 (Robert Schulze). - ClickHouse 로그에 기록되던
Cannot find 'kernel' in '[...]/memory.stat'경고를 수정했습니다 (issue #77410). #80129 (Robert Schulze). - FunctionComparison에서 스택 크기를 확인하여 스택 오버플로로 인한 크래시를 방지합니다. #78208 (Julia Kartseva).
system.workloads에서 SELECT 시 발생하는 race condition을 수정했습니다. #78743 (Sergei Trifonov).- 수정: 분산 쿼리에서 지연 머터리얼라이제이션이 올바르게 동작하도록 했습니다. #78815 (Igor Nikonov).
Array(Bool)에서Array(FixedString)으로의 변환 문제를 수정했습니다. #78863 (Nikita Taranov).- Parquet 버전 선택 과정의 혼란을 줄였습니다. #78818 (Michael Kolupaev).
ReservoirSampler의 자체 병합 동작을 수정합니다. #79031 (Nikita Taranov).- 클라이언트 컨텍스트에서 INSERT 테이블의 저장을 수정합니다. #79046 (Pervakov Grigorii).
AggregatingSortedAlgorithm및SummingSortedAlgorithm의 데이터 멤버 소멸 순서를 수정합니다. #79056 (Nikita Taranov).enable_user_name_access_type는DEFINER액세스 유형에 영향을 미치지 않아야 합니다. #80026 (pufit).system데이터베이스 메타데이터가 Keeper에 위치해 있는 경우system데이터베이스에 대한 쿼리가 응답 없이 멈출 수 있습니다. #79304 (Mikhail Artemenko).
빌드/테스트/패키징 개선
- 매번 다시 빌드하지 않고도 빌드된
chcache바이너리를 재사용할 수 있도록 합니다. #78851 (János Benjamin Antal). - NATS 일시 중지 대기 로직을 추가합니다. #78987 (Dmitry Novikov).
- ARM 빌드가 amd64compat로 잘못 게시되던 문제를 수정합니다. #79122 (Alexander Gololobov).
- OpenSSL에 대해 사전에 생성된 어셈블리를 사용합니다. #79386 (Konstantin Bogdanov).
clang20으로도 빌드할 수 있도록 수정합니다. #79588 (Konstantin Bogdanov).chcache: Rust 캐싱 지원을 추가합니다. #78691 (Konstantin Bogdanov).zstd어셈블리 파일에 대한 unwind 정보를 추가합니다. #79288 (Michael Kolupaev).
ClickHouse 25.4 릴리스, 2025년 4월 22일
이전 버전과의 비호환 변경
allow_materialized_view_with_bad_select가false인 경우 materialized view의 모든 컬럼이 대상 테이블과 일치하는지 확인하도록 변경되었습니다. #74481 (Christoph Wurm).dateTrunc이 음수인 Date/DateTime 인수와 함께 사용되는 경우를 수정했습니다. #77622 (Yarik Briukhovetskyi).- 기존
MongoDB통합이 제거되었습니다. 서버 설정use_legacy_mongodb_integration은 더 이상 사용되지 않으며 이제 아무 작업도 수행하지 않습니다. #77895 (Robert Schulze). - 파티션 키나 정렬 키에 사용되는 컬럼에 대해서는 집계를 건너뛰도록
SummingMergeTree검증이 강화되었습니다. #78022 (Pervakov Grigorii).
새 기능
- 워크로드에 대한 CPU 슬롯 스케줄링이 추가되었습니다. 자세한 내용은 문서를 참고하십시오. #77595 (Sergei Trifonov).
--path커맨드 라인 인자를 지정하면 재시작 후에도clickhouse-local이 데이터베이스를 보존합니다. 이로써 #50647 이슈가 해결되었습니다. 이로써 #49947 이슈가 해결되었습니다. #71722 (Alexey Milovidov).- 서버에 과부하가 걸린 상태에서는 쿼리를 거부합니다. 거부 여부는 대기 시간(
OSCPUWaitMicroseconds)과 작업 시간(OSCPUVirtualTimeMicroseconds)의 비율을 기준으로 결정됩니다. 이 비율이min_os_cpu_wait_time_ratio_to_throw와max_os_cpu_wait_time_ratio_to_throw사이에 있을 때 일정 확률로 쿼리가 폐기됩니다(쿼리 수준 설정입니다). #63206 (Alexey Katsman). Iceberg에서 타임 트래블 기능: 특정 타임스탬프 시점의Iceberg테이블을 쿼리할 수 있는 설정을 추가했습니다. #71072 (Brett Hoerner). #77439 (Daniil Ivanik).Iceberg메타데이터용 인메모리 캐시로, 쿼리 속도를 높이기 위해 매니페스트 파일 및 목록과metadata.json을 저장합니다. #77156 (Han Fei).- Azure Blob Storage에 대한
DeltaLake테이블 엔진을 지원합니다. 이슈 #68043을 수정합니다. #74541 (Smita Kulkarni). - 역직렬화된 벡터 유사성 인덱스에 대한 메모리 내 캐시가 추가되었습니다. 이를 통해 반복 실행되는 근사 최근접 이웃(ANN) 검색 쿼리의 속도가 향상됩니다. 새 캐시의 크기는 서버 설정인
vector_similarity_index_cache_size및vector_similarity_index_cache_max_entries로 제어됩니다. 이 기능은 이전 릴리스의 skipping index 캐시 기능을 대체합니다. #77905 (Shankar Iyer). - Delta Lake의 파티션 프루닝을 지원합니다. #78486 (Kseniia Sumarokova).
- 읽기 전용
MergeTree테이블에서 백그라운드 새로 고침을 지원하여 무제한 개수의 분산 리더(distributed reader)를 통해 업데이트 가능한 테이블을 쿼리할 수 있도록 합니다(ClickHouse 네이티브 데이터 레이크). #76467 (Alexey Milovidov). - 데이터베이스 메타데이터 파일을 저장하기 위한 커스텀 디스크 사용을 지원합니다. 현재는 전역 서버 수준에서만 설정할 수 있습니다. #77365 (Tuan Pham Anh).
plain_rewritable디스크에 대해ALTER TABLE ... ATTACH|DETACH|MOVE|REPLACE PARTITION를 지원합니다. #77406 (Julia Kartseva).Kafka테이블 엔진에SASL설정과 자격 증명을 위한 테이블 설정을 추가합니다. 이를 통해 설정 파일이나 named collection을 사용하지 않고도CREATE TABLE구문에서 직접 Kafka 및 Kafka 호환 시스템에 대한 SASL 기반 인증을 구성할 수 있습니다. #78810 (Christoph Wurm).- MergeTree 테이블에 대해
default_compression_codec을 설정할 수 있습니다. 해당 컬럼에 대해 CREATE 쿼리에서 코덱을 명시적으로 지정하지 않은 경우 이 값이 사용됩니다. 이를 통해 #42005가 해결됩니다. #66394 (gvoelfin). - 클러스터 설정에
bind_host설정을 추가하여 ClickHouse가 분산 연결 시 특정 네트워크를 사용할 수 있도록 했습니다. #74741 (Todd Yocum). system.tables에parametrized_view_parameters라는 새 컬럼을 추가합니다. https://github.com/clickhouse/clickhouse/issues/66756 이슈를 해결합니다. #75112 (NamNguyenHoai).- 데이터베이스 주석을 변경할 수 있도록 허용합니다. Closes #73351 ### 사용자 대상 변경 사항에 대한 문서 항목. #75622 (NamNguyenHoai).
- PostgreSQL 호환성 프로토콜에서
SCRAM-SHA-256인증을 지원합니다. #76839 (scanhex12). arrayLevenshteinDistance,arrayLevenshteinDistanceWeighted,arraySimilarity함수를 추가합니다. #77187 (Mikhail f. Shiryaev).parallel_distributed_insert_select설정이 이제ReplicatedMergeTree에 대한INSERT SELECT에도 적용됩니다(이전에는 Distributed 테이블이 필요했습니다). #78041 (Igor Nikonov).toIntervalFUNCTION을 도입했습니다. 이 FUNCTION은 두 개의 인자(값과 단위)를 받아 해당 값을 특정Interval타입으로 변환합니다. #78723 (Andrew Davis).- iceberg 테이블 FUNCTION 및 엔진에서 루트
metadata.json파일을 찾는 여러 편리한 방법을 추가했습니다. #78455를 해결합니다. #78475 (Daniil Ivanik). - ClickHouse에서 SSH 프로토콜의 비밀번호 기반 인증을 지원합니다. #78586 (Nikita Mikhaylov).
실험적 기능
WHERE절의EXISTS표현식 인수로 상관 서브쿼리를 지원합니다. #72459를 해결합니다. #76078 (Dmitry Novik).- ASCII 및 UTF8 버전을 포함하는
sparseGrams및sparseGramsHashes함수가 추가되었습니다. 작성자: scanhex12. #78176 (Pervakov Grigorii). 향후 버전에서 구현이 변경될 예정이므로 사용하지 마십시오.
성능 향상
- ORDER BY와 LIMIT 이후에 데이터를 읽는 lazy 컬럼을 사용해 성능을 최적화합니다. #55518 (Xiaozhe Yu).
- 쿼리 조건 캐시가 기본적으로 사용되도록 활성화했습니다. #79080 (Alexey Milovidov).
col->insertFrom()호출을 비가상화하여 JOIN 결과 생성 속도를 향상했습니다. #77350 (Alexander Gololobov).- 가능한 경우 필터 쿼리 플랜 단계의 동등 조건을 JOIN 조건으로 병합하여 해시 테이블 키로 사용할 수 있도록 했습니다. #78877 (Dmitry Novik).
- JOIN 키가 양쪽 파트에서 모두 PK의 접두사인 경우 JOIN에 대해 동적 세그먼트화를 사용합니다. 이 최적화는
query_plan_join_shard_by_pk_ranges설정으로 활성화되며(기본값은 비활성화), #74733에서 추가되었습니다(Nikolai Kochetov). - 컬럼의 하한과 상한 경계값에 기반한
Iceberg데이터 프루닝을 지원합니다. #77638를 수정합니다. #78242 (alesapin). Iceberg에 대해 단순 count 최적화를 구현했습니다. 이제 필터가 없는count()쿼리가 더 빠르게 실행됩니다. #77639를 해결합니다. #78090 (alesapin).max_merge_delayed_streams_for_parallel_write를 사용하여 병합 작업이 병렬로 플러시할 수 있는 컬럼 수를 설정할 수 있는 기능을 추가했습니다(이를 통해 S3로의 수직 병합(Vertical Merge) 시 메모리 사용량이 약 25배 감소합니다). #77922 (Azat Khuzhin).- 병합 작업 등 캐시가 수동적으로 사용되는 경우에는
filesystem_cache_prefer_bigger_buffer_size를 비활성화합니다. 이렇게 하면 병합 작업 시 메모리 사용량이 감소합니다. #77898 (Kseniia Sumarokova). - 이제 병렬 레플리카가 활성화된 경우 읽기 작업의 크기를 결정할 때 레플리카 개수를 기준으로 합니다. 이를 통해 읽어야 할 데이터 양이 그리 크지 않을 때 레플리카 간 작업 분배가 더 고르게 이루어집니다. #78695 (Nikita Taranov).
ORC포맷에서 비동기 IO 프리페치(asynchronous IO prefetch)를 지원하여 원격 IO 지연을 숨김으로써 전체 성능을 향상합니다. #70534 (李扬).- 비동기 INSERT 작업에 사용되는 메모리를 미리 할당하여 성능을 향상합니다. #74945 (Ilya Golshtein).
multiRead를 사용할 수 있는 부분에서 단일get요청의 사용을 제거하여 Keeper 요청 수를 줄였습니다. 단일get요청은 레플리카 수가 증가하면 Keeper에 상당한 부하를 유발할 수 있었습니다. #56862 (Nikolay Degterinsky).- 널 허용(Nullable) 인자에 대해 함수를 실행할 때의 성능을 소폭 최적화했습니다. #76489 (李扬).
arraySort함수를 최적화했습니다. #76850 (李扬).- 동일한 파트의 마크를 병합해 한 번에 쿼리 조건 캐시에 기록하여 락 사용량을 줄입니다. #77377 (zhongyuankai).
- 대괄호 확장이 한 번만 사용된 쿼리에 대한
s3Cluster성능을 최적화합니다. #77686 (Tomáš Hromada). - 단일 널 허용(Nullable) 컬럼 또는 LowCardinality 컬럼에 대한 ORDER BY를 최적화했습니다. #77789 (李扬).
Native포맷의 메모리 사용량을 최적화합니다. #78442 (Azat Khuzhin).- 사소한 최적화: 형 변환이 필요한 경우
count(if(...))를countIf로 변환하지 않습니다. #78564를 해결합니다. #78565 (李扬). hasAll함수가 이제tokenbf_v1,ngrambf_v1전문(full-text) 스키핑 인덱스를 활용할 수 있습니다. #77662 (UnamedRus).- 벡터 유사도 인덱스가 최대 2배까지 메인 메모리를 과도하게 할당하는 문제가 있었습니다. 이 수정으로 메모리 할당 전략을 재구성하여 메모리 사용량을 줄이고 벡터 유사도 인덱스 캐시의 효율성을 개선했습니다. (issue #78056). #78394 (Shankar Iyer).
system.metric_log테이블에 스키마 유형을 지정하는schema_type설정을 도입합니다. 허용되는 스키마는 세 가지입니다.wide— 현재 스키마로, 각 메트릭/이벤트가 개별 컬럼에 저장되며(개별 컬럼 읽기에 가장 효율적임),transposed—system.asynchronous_metric_log와 유사하게 메트릭/이벤트가 행으로 저장되며, 마지막으로 가장 흥미로운 옵션인transposed_with_wide_view—transposed스키마로 기본 테이블을 생성하되, 쿼리를 기본 테이블로 변환해 주는wide스키마의 뷰도 함께 도입하는 방식입니다.transposed_with_wide_view에서는 뷰에서 서브초(subsecond) 해상도가 지원되지 않으며,event_time_microseconds는 하위 호환성을 위한 별칭일 뿐입니다. #78412 (alesapin).
개선 사항
Distributed쿼리에 대해 쿼리 플랜을 직렬화합니다. 새로운 설정serialize_query_plan이 추가되었습니다. 이를 활성화하면Distributed테이블에서 실행되는 쿼리는 원격 쿼리 실행을 위해 직렬화된 쿼리 플랜을 사용합니다. 이로 인해 TCP 프로토콜에 새로운 패킷 타입이 도입되며, 이 패킷을 처리할 수 있도록 서버 설정에<process_query_plan_packet>true</process_query_plan_packet>을 추가해야 합니다. #69652 (Nikolai Kochetov).- VIEW에서
JSON타입과 그 서브컬럼을 읽을 수 있도록 지원합니다. #76903 (Pavel Kruglov). ALTER DATABASE ... ON CLUSTER구문을 지원합니다. #79242 (Tuan Pham Anh).- 갱신 가능 구체화 뷰의 갱신 작업이 이제
system.query_log에 나타납니다. #71333 (Michael Kolupaev). - 사용자 정의 함수(UDF)는 이제 구성에서 추가된 새로운 설정을 통해 결정적(deterministic)으로 표시할 수 있습니다. 또한 쿼리 캐시는 이제 쿼리 내에서 호출되는 UDF가 결정적인지 확인하며, 그렇다면 쿼리 결과를 캐시합니다. (이슈 #59988). #77769 (Jimmy Aguilar Mena).
- 모든 유형의 복제 작업에 백오프 로직을 도입했습니다. 이를 통해 CPU 사용량, 메모리 사용량 및 로그 파일 크기를 줄일 수 있습니다.
max_postpone_time_for_failed_mutations_ms와 유사한 새로운 설정인max_postpone_time_for_failed_replicated_fetches_ms,max_postpone_time_for_failed_replicated_merges_ms,max_postpone_time_for_failed_replicated_tasks_ms를 추가했습니다. #74576 (MikhailBurdukov). system.errors에query_id를 추가합니다. #75815을(를) 해결합니다. #76581 (Vladimir Baikov).UInt128를IPv6로 변환하는 기능을 추가했습니다. 이를 통해IPv6에 대한bitAnd연산과 산술 연산을 수행하고 결과를 다시IPv6로 변환할 수 있습니다. #76752를 해결합니다. 또한IPv6에 대한bitAnd연산 결과 역시 다시IPv6로 변환할 수 있습니다. #57707도 참고하십시오. #76928 (Muzammil Abdul Rehman).- 기본 설정에서는
Variant타입 내부의 텍스트 포맷에서 특수Bool값을 파싱하지 않습니다.allow_special_bool_values_inside_variant설정을 사용하여 이 기능을 활성화할 수 있습니다. #76974 (Pavel Kruglov). - 세션 및 서버 수준에서 낮은
priority를 가진 쿼리의 태스크별 대기 시간을 설정할 수 있도록 지원합니다. #77013 (VicoWu). - JSON 데이터 타입 값에 대한 비교 기능이 구현되었습니다. 이제 JSON 객체를 맵(Map)과 유사한 방식으로 비교할 수 있습니다. #77397 (Pavel Kruglov).
system.kafka_consumers에서 권한 처리를 개선했습니다. 내부librdkafka오류를 전달하도록 했습니다(이 라이브러리는 형편없다는 점도 언급할 만합니다). #77700 (Ilya Golshtein).- Buffer 테이블 엔진의 설정에 대한 검증이 추가되었습니다. #77840 (Pervakov Grigorii).
HDFS에서pread사용 여부를 제어하는 설정enable_hdfs_pread를 추가했습니다. #77885 (kevinyhzou).- ZooKeeper의
multi읽기 및 쓰기 요청 횟수에 대한 프로파일 이벤트를 추가합니다. #77888 (JackyWoo). disable_insertion_and_mutation이 활성화되어 있을 때에도 임시 테이블 생성 및 해당 테이블로의 데이터 삽입을 허용합니다. #77901 (Xu Jia).max_insert_delayed_streams_for_parallel_write값을 100으로 줄였습니다. #77919 (Azat Khuzhin).- Joda 구문에서
yyy와 같은 연도 파싱을 수정했습니다(이는 Java 세계에서 사용하는 구문입니다). #77973 (李扬). MergeTree테이블의 파트는 이제 블록 순서대로 attach되며, 이는ReplacingMergeTree와 같은 특수 머지 알고리즘에서 중요합니다. 이 변경으로 #71009가 해결되었습니다. #77976 (Alexey Milovidov).- 쿼리 마스킹 규칙에서 매칭이 발생한 경우 이제
LOGICAL_ERROR를 발생시킬 수 있습니다. 이를 통해 사전에 정의한 비밀번호가 로그 어디에서 유출되고 있는지 확인하는 데 도움이 됩니다. #78094 (Nikita Mikhaylov). - MySQL과의 호환성을 개선하기 위해 컬럼
index_length_column을information_schema.tables에 추가했습니다. #78119 (Paweł Zakrzewski). TotalMergeFailures와NonAbortedMergeFailures라는 두 개의 새로운 메트릭을 도입했습니다. 이 메트릭은 짧은 기간 동안 머지 작업이 과도하게 실패하는 상황을 감지하는 데 필요합니다. #78150 (Miсhael Stetsyuk).- 경로 스타일을 사용할 때 경로에 키가 지정되지 않은 경우 잘못되던 S3 URL 파싱을 수정합니다. #78185 (Arthur Passos).
- 비동기 메트릭
BlockActiveTime,BlockDiscardTime,BlockWriteTime,BlockQueueTime,BlockReadTime의 잘못된 값을 수정합니다(변경 전에는 1초가 0.001로 잘못 보고되었습니다). #78211 (filimonov). - StorageS3(Azure)Queue로 materialized view에 push하는 동안 발생하는 오류에 대해
loading_retries제한을 준수하도록 했습니다. 이전에는 이러한 오류가 무기한으로 재시도되었습니다. #78313 (Kseniia Sumarokova). delta-kernel-rs구현을 사용하는 DeltaLake에서 성능과 진행률 표시줄을 개선했습니다. #78368 (Kseniia Sumarokova).- 런타임 디스크에 대해
include,from_env,from_zk를 지원합니다. #78177를 해결합니다. #78470 (Kseniia Sumarokova). - 오랫동안 실행되는 뮤테이션에 대해
system.warnings테이블에 동적 경고를 추가합니다. #78658 (Bharat Nallan). - 시스템 테이블
system.query_condition_cache에 필드condition을 추가했습니다. 이 필드는 쿼리 조건 캐시에서 키로 사용되는 해시 값을 생성할 때 기반이 되는 평문 조건을 저장합니다. #78671 (Robert Schulze). - Hive 파티셔닝에서 빈 값을 허용하도록 했습니다. #78816 (Arthur Passos).
BFloat16에 대한IN절 타입 강제 변환(type coercion)을 수정했습니다(즉, 이제SELECT toBFloat16(1) IN [1, 2, 3];의 반환값이1입니다). #78754 이슈를 해결했습니다. #78839 (Raufs Dunamalijevs).disk = ...이 설정된 경우MergeTree에서 다른 디스크의 파트는 확인하지 않습니다. #78855 (Azat Khuzhin).system.query_log의used_data_type_families에 있는 데이터 타입이 표준 이름(canonical name)으로 기록되도록 했습니다. #78972 (Kseniia Sumarokova).recoverLostReplica실행 시 설정 정리를 #78637과 동일하게 수행하도록 했습니다. #79113 (Nikita Mikhaylov).- INFILE 스키마 추론에 삽입 컬럼을 사용하도록 했습니다. #78490 (Pervakov Grigorii).
버그 수정(공식 안정 릴리스에서 사용자가 인지할 수 있는 오동작)
- 집계 프로젝션에서
count(Nullable)사용 시 잘못되던 프로젝션 분석을 수정합니다. 이를 통해 #74495를 해결합니다. 또한 이 PR은 프로젝션이 사용되는 이유와 사용되지 않는 이유를 명확히 하기 위해 프로젝션 분석과 관련된 로그를 일부 추가합니다. #74498 (Amos Bird). DETACH PART실행 중Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED)오류가 발생하던 문제를 수정합니다. #76039 (Aleksei Filatov).- 애널라이저에서 리터럴이 포함된 식을 사용하는 skip 인덱스가 작동하지 않던 문제를 수정하고, 인덱스 분석 시 불필요한 캐스트를 제거했습니다. #77229 (Pavel Kruglov).
close_session쿼리 매개변수가 영향을 미치지 않아, 이름이 지정된 세션이session_timeout이후에만 종료되던 버그를 수정했습니다. #77336 (Alexey Katsman).- materialized view가 연결되지 않은 NATS 서버로부터 메시지를 수신하지 못하던 문제를 수정했습니다. #77392 (Dmitry Novikov).
merge테이블 FUNCTION을 통해 비어 있는 상태의FileLog에서 읽을 때 발생하는 논리적 오류를 수정했습니다. #75575를 해결했습니다. #77441 (Vladimir Cherkasov).- shared variant에서
Dynamic직렬화를 수행할 때 기본 포맷 설정을 사용하도록 했습니다. #77572 (Pavel Kruglov). - 로컬 디스크에 테이블 데이터 경로가 존재하는지 확인하는 동작을 수정합니다. #77608 (Tuan Pham Anh).
- 일부 타입에서 상수 값을 원격으로 전송하는 동작을 수정했습니다. #77634 (Pavel Kruglov).
- S3/AzureQueue에서 만료된 컨텍스트로 인해 발생하던 비정상 종료를 수정했습니다. #77720 (Kseniia Sumarokova).
- RabbitMQ, Nats, Redis, AzureQueue 테이블 엔진에서 자격 증명 정보를 숨기도록 수정했습니다. #77755 (Kseniia Sumarokova).
NaN비교 시argMin/argMax에서 발생하던 정의되지 않은 동작을 수정했습니다. #77756 (Raúl Marín).- 병합과 뮤테이션이 쓰기할 블록을 생성하지 않는 경우에도 취소되었는지 정기적으로 확인합니다. #77766 (János Benjamin Antal).
- 복제된 데이터베이스(Replicated database)에서 새로 추가된 레플리카에서 갱신 가능 구체화 뷰가 작동하지 않던 문제를 수정했습니다. #77774 (Michael Kolupaev).
NOT_FOUND_COLUMN_IN_BLOCK오류로 인해 크래시가 발생할 수 있는 문제를 수정합니다. #77854 (Vladimir Cherkasov).- 데이터를 채우는 과정에서 S3/AzureQueue에서 발생하던 충돌을 수정합니다. #77878 (Bharat Nallan).
- SSH 서버에서 명령어 이력에 대한 퍼지 검색을 비활성화합니다(skim 라이브러리가 필요하기 때문입니다). #78002 (Azat Khuzhin).
- 테이블에 벡터 유사도 인덱스가 정의된 다른 벡터 컬럼이 있는 경우, 인덱스가 없는 컬럼에 대해 벡터 검색 쿼리를 실행하면 잘못된 결과를 반환하던 버그를 수정합니다. (Issue #77978). #78069 (Shankar Iyer).
- 아주 사소한 오류가 있던 "The requested output format is binary... Do you want to output it anyway? [y/N]" 프롬프트를 수정합니다. #78095 (Azat Khuzhin).
toStartOfInterval함수에서 origin 인수를 0으로 사용할 때 발생하던 버그를 수정했습니다. #78096 (Yarik Briukhovetskyi).- HTTP 인터페이스에서 빈
session_id쿼리 매개변수를 지정하는 것을 허용하지 않도록 했습니다. #78098 (Alexey Katsman). ALTER쿼리 직후 실행된RENAME쿼리로 인해Replicated데이터베이스에서 발생할 수 있던 메타데이터 덮어쓰기를 수정합니다. #78107 (Nikolay Degterinsky).NATS엔진에서 발생하던 충돌을 수정했습니다. #78108 (Dmitry Novikov).- SSH 임베디드 클라이언트에서 history_file을 생성하지 않도록 했습니다(이전 버전에서는 생성이 항상 실패했지만, 계속 시도하고 있었습니다). #78112 (Azat Khuzhin).
RENAME DATABASE또는DROP TABLE쿼리 후에system.detached_tables가 잘못된 정보를 표시하던 문제를 수정합니다. #78126 (Nikolay Degterinsky).Replicated데이터베이스에서 테이블 수가 과도하게 많은지 확인하는 검사 로직을 #77274 이후 변경 사항에 맞게 수정했습니다. 또한ReplicatedMergeTree또는KeeperMap의 경우 Keeper에 추적되지 않는 노드가 생성되는 것을 방지하기 위해 스토리지를 생성하기 전에 이 검사를 수행하도록 했습니다. #78127 (Nikolay Degterinsky).- 동시에 수행되는
S3Queue메타데이터 초기화로 인해 발생할 수 있던 크래시를 수정합니다. #78131 (Azat Khuzhin). groupArray*함수는 이제max_size인자의 Int 타입 0 값에 대해, UInt 타입에서 이미 그렇게 동작하던 것처럼, 이를 사용해 실행을 시도하는 대신BAD_ARGUMENTS오류를 발생시킵니다. #78140 (Eduard Karacharov).- 로컬 테이블이 detach되기 전에 제거된 경우, 손실된 레플리카를 복구하는 과정에서 발생하던 크래시를 방지합니다. #78173 (Raúl Marín).
system.s3_queue_settings의 "alterable" 컬럼이 항상false만 반환하던 문제를 수정했습니다. #78187 (Kseniia Sumarokova).- Azure access signature가 사용자에게 노출되거나 로그에 기록되지 않도록 마스킹합니다. #78189 (Kseniia Sumarokova).
- Wide 파트에서 접두사가 있는 서브스트림의 프리페치 동작을 수정합니다. #78205 (Pavel Kruglov).
- 키 배열의 타입이
LowCardinality(Nullable)인 경우mapFromArrays에서 발생하던 충돌 및 잘못된 결과 문제를 수정했습니다. #78240 (Eduard Karacharov). - delta-kernel-rs 인증 옵션을 수정했습니다. #78255 (Kseniia Sumarokova).
- 레플리카의
disable_insertion_and_mutation값이 true이면 Refreshable Materialized Views 작업을 스케줄링하지 않습니다. 이 작업에는 일부 데이터 삽입이 포함되며,disable_insertion_and_mutation값이 true이면 실패합니다. #78277 (Xu Jia). Merge엔진에서 하위 테이블에 대한 접근 권한을 검증합니다. #78339 (Pervakov Grigorii).Distributed테이블을 쿼리할 때FINAL수정자는 생략해도 됩니다. #78428 (Yakov Olkhovskiy).bitmapMin은 비트맵이 비어 있을 때 uint32_max(그리고 입력 유형이 더 클 경우 uint64_max)를 반환하며, 이는 비어 있는 roaring_bitmap의 최솟값 동작과 일치합니다. #78444 (wxybear).distributed_aggregation_memory_efficient가 활성화된 경우,FROM절을 읽은 직후 쿼리 처리의 병렬화를 비활성화합니다. 그렇지 않으면 논리 오류가 발생할 수 있습니다. #76934를 해결합니다. #78500 (flynn).max_streams_to_max_threads_ratio설정을 적용한 후 계획된 스트림이 0개인 경우에도 읽기용 스트림을 최소 한 개는 설정합니다. #78505 (Eduard Karacharov).- 스토리지
S3Queue에서 논리 오류 "Cannot unregister: table uuid is not registered"를 수정합니다. #78285를 해결합니다. #78541 (Kseniia Sumarokova). - 이제 ClickHouse는 cgroups v1과 v2가 모두 활성화된 시스템에서 자신의 cgroup v2를 올바르게 식별할 수 있습니다. #78566 (Grigory Korolev).
-Cluster테이블 함수가 테이블 수준 설정과 함께 사용될 때 실패하는 문제가 있었습니다. #78587 (Daniil Ivanik).- INSERT 시 ReplicatedMergeTree에서 트랜잭션을 지원하지 않는 경우에 대한 검사를 개선했습니다. #78633 (Azat Khuzhin).
- ATTACH 작업 중 쿼리 설정을 정리하도록 했습니다. #78637 (Raúl Marín).
iceberg_metadata_file_path에 잘못된 경로가 지정되었을 때 발생하던 충돌 문제를 수정했습니다. #78688 (alesapin).DeltaLake테이블 엔진에서 delta-kernel-s 구현을 사용할 때, 읽기 스키마가 테이블 스키마와 다르면서 동시에 파티션 컬럼이 존재하는 경우에 "not found column" 오류가 발생하던 문제를 수정합니다. #78690 (Kseniia Sumarokova).- 명명된 세션을 종료하도록 예약한 후(하지만 타임아웃이 만료되기 전)에 동일한 이름으로 새로운 명명된 세션을 생성하면, 첫 번째 세션이 종료되도록 예약된 시점에 새 세션까지 함께 종료되던 문제를 수정했습니다. #78698 (Alexey Katsman).
MongoDBengine 또는mongodbtable function에서 데이터를 읽는 여러 유형의SELECT쿼리를 수정했습니다. 예를 들어WHERE절에서 상수 값의 암시적 변환이 있는 쿼리(예:WHERE datetime = '2025-03-10 00:00:00'),LIMIT및GROUP BY가 있는 쿼리 등이 이에 해당합니다. 이전에는 잘못된 결과를 반환하는 경우가 있었습니다. #78777 (Anton Popov).CHECK TABLE실행 중에도 테이블 종료가 차단되지 않도록 수정했습니다. #78782 (Raúl Marín).- Keeper 관련 수정: 모든 경우에 ephemeral count가 올바르게 계산되도록 수정했습니다. #78799 (Antonio Andelic).
view이외의 테이블 함수 사용 시StorageDistributed에서 잘못된 형 변환을 수정합니다. #78464를 해결합니다. #78828 (Konstantin Bogdanov).tupleElement(*, 1)의 포맷팅 일관성을 수정합니다. #78639 이슈를 해결합니다. #78832 (Konstantin Bogdanov).ssd_cache타입의 딕셔너리는 이제block_size및write_buffer_size파라미터가 0 또는 음수 값을 갖는 경우를 허용하지 않습니다 (issue #78314). #78854 (Elmi Ahmadov).- 잘못된 종료 후
ALTER실행 시 갱신 가능 MATERIALIZED VIEW에서 발생하던 크래시를 수정합니다. #78858 (Azat Khuzhin). CSV형식에서 잘못된DateTime값 파싱을 수정합니다. #78919 (Pavel Kruglov).- Keeper 버그 수정: multi 요청이 실패한 경우 watch가 트리거되지 않도록 했습니다. #79247 (Antonio Andelic).
min-max값이 명시적으로 지정되었지만NULL인 경우 Iceberg 테이블을 읽지 못하던 문제를 수정합니다. Go Iceberg 라이브러리가 이러한 품질이 매우 낮은 파일을 생성하는 것으로 확인되었습니다. #78740 이슈를 해결합니다. #78764 (flynn).
빌드/테스트/패키징 개선
- Rust에서 CPU 타깃 기능을 고려하고 모든 크레이트에서 LTO를 활성화했습니다. #78590 (Raúl Marín).
ClickHouse 릴리스 25.3 LTS, 2025-03-20
하위 호환성이 깨지는 변경 사항
- 복제된 데이터베이스에서 TRUNCATE를 수행할 수 없도록 했습니다. #76651 (Bharat Nallan).
- 인덱스 캐시를 건너뛰는 변경이 되돌려졌습니다. #77447 (Nikita Mikhaylov).
신규 기능
JSON데이터 타입이 프로덕션 환경에서 사용할 수 있는 수준이 되었습니다. 자세한 내용은 https://jsonbench.com/를 참조하십시오.Dynamic및Variant데이터 타입도 프로덕션 환경에서 사용할 수 있는 수준이 되었습니다. #77785 (Alexey Milovidov).- clickhouse-server용 SSH 프로토콜이 도입되었습니다. 이제 아무 SSH 클라이언트로나 ClickHouse에 연결할 수 있습니다. 다음 이슈가 종료되었습니다: #74340. #74989 (George Gamezardashvili).
- 병렬 레플리카가 활성화된 경우 테이블 함수를 해당하는 -Cluster 대체 함수로 교체합니다. #65024 문제를 수정합니다. #70659 (Konstantin Bogdanov).
- Userspace Page Cache의 새로운 구현으로, OS 페이지 캐시에 의존하는 대신 프로세스 내 메모리에 데이터를 캐시할 수 있게 하며, 이는 데이터가 로컬 파일시스템 캐시 없이 원격 가상 파일시스템에 저장되어 있을 때 유용합니다. #70509 (Michael Kolupaev).
- 동시에 실행되는 쿼리 간에 CPU 슬롯을 어떻게 분배할지 제어하는
concurrent_threads_scheduler서버 설정이 추가되었습니다. INSERT와 SELECT 사이의 불공정한 CPU 분배 문제를 해결하기 위해round_robin(이전 동작) 또는fair_round_robin으로 설정할 수 있습니다. #75949 (Sergei Trifonov). estimateCompressionRatio집계 FUNCTION을 추가합니다 #70801. #76661 (Tariq Almawash).arraySymmetricDifferenceFUNCTION이 추가되었습니다. 이 FUNCTION은 여러 배열 인자에서 모든 인자에 동시에 나타나지 않는 모든 요소를 반환합니다. 예를 들어SELECT arraySymmetricDifference([1, 2], [2, 3])는[1, 3]을 반환합니다. (이슈 #61673). #76231 (Filipp Abapolov).- Iceberg용 storage/table function 설정인
iceberg_metadata_file_path를 통해 읽을 메타데이터 파일을 명시적으로 지정할 수 있도록 했습니다. #47412를 수정합니다. #77318 (alesapin). - 블록체인 구현, 특히 EVM 기반 시스템에서 널리 사용되는
keccak256해시 FUNCTION을 추가했습니다. #76669 (Arnaud Briche). - 세 가지 새로운 함수가 추가되었습니다. 사양(https://iceberg.apache.org/spec/#truncate-transform-details)에 따른
icebergTruncate, 그리고toYearNumSinceEpoch와toMonthNumSinceEpoch입니다.Iceberg엔진에서 파티션 프루닝 시truncate변환을 지원합니다. #77403 (alesapin). LowCardinality(Decimal)데이터 타입을 지원합니다. #72256. #72833 (zhanglistar).FilterTransformPassedRows및FilterTransformPassedBytes프로파일 이벤트는 쿼리 실행 중 필터링된 행 수와 바이트 수를 표시합니다. #76662 (Onkar Deshpande).- 히스토그램 메트릭 타입을 지원합니다. 인터페이스는 Prometheus 클라이언트와 유사하며, 값에 해당하는 버킷의 카운터를 증가시키기 위해 단순히
observe(value)를 호출하면 됩니다. 히스토그램 메트릭은system.histogram_metrics를 통해 노출됩니다. #75736 (Miсhael Stetsyuk). - 명시적인 값에 대해 분기할 수 있는 non-constant CASE를 지원합니다. #77399 (Yarik Briukhovetskyi).
실험적 기능
- AWS S3 및 로컬 파일 시스템에서 사용하는 DeltaLake 테이블에 대해 Unity Catalog 지원을 추가했습니다. #76988 (alesapin).
- Iceberg 테이블을 위한 AWS Glue 서비스 카탈로그와의 실험적 통합을 도입했습니다. #77257 (alesapin).
- 동적 클러스터 자동 검색 기능을 추가했습니다. 이는 기존 node 자동 검색 기능을 확장한 것입니다. 이제 ClickHouse는
<multicluster_root_path>를 사용하여 공통 ZooKeeper 경로 아래의 새로운 _clusters_를 자동으로 감지하고 등록할 수 있습니다. #76001 (Anton Ivashkin). - 새로운 설정
enable_replacing_merge_with_cleanup_for_min_age_to_force_merge를 사용하여, 설정 가능한 제한 시간이 지난 후 전체 파티션을 대상으로 하는 자동 정리 머지를 수행할 수 있습니다. #76440 (Christoph Wurm).
성능 개선
- 반복되는 조건을 사용하는 쿼리 성능을 향상하기 위해 쿼리 조건 캐시를 구현합니다. 조건을 만족하지 않는 데이터 범위를 메모리 내 임시 인덱스로 기억합니다. 이후 쿼리는 이 인덱스를 사용합니다. #67768 #69236 (zhongyuankai).
- 파트가 제거될 때 캐시에서 데이터를 적극적으로 제거합니다. 데이터 양이 더 적을 경우 캐시가 최대 크기까지 커지지 않도록 합니다. #76641 (Alexey Milovidov).
- 산술 계산에서 Int256 및 UInt256을 clang 내장형 i256으로 교체하여 성능을 향상합니다 #70502. #73658 (李扬).
- 일부 경우(예: 빈 배열 컬럼) 데이터 파트에 빈 파일이 포함될 수 있습니다. 메타데이터와 객체 스토리지가 분리된 디스크에 테이블이 존재하는 경우, 이러한 파일에 대해 비어 있는 blob은 기록하지 않고 메타데이터만 저장하도록 할 수 있습니다. #75860 (Alexander Gololobov).
- Decimal32/Decimal64/DateTime64에 대한 min/max 성능을 개선합니다. #76570 (李扬).
- 쿼리 컴파일(설정
compile_expressions)이 이제 머신 유형을 고려합니다. 이로 인해 해당 쿼리가 상당히 빨라집니다. #76753 (ZhangLiStar). arraySort를 최적화합니다. #76850 (李扬).- 캐시가 병합과 같이 수동적으로 사용되는 경우
filesystem_cache_prefer_bigger_buffer_size를 비활성화합니다. #77898 (Kseniia Sumarokova). - 코드의 일부 위치에
preserve_most속성을 적용하여 약간 더 나은 코드 생성을 가능하게 합니다. #67778 (Nikita Taranov). - ClickHouse 서버 종료를 더 빠르게 합니다(2.5초 지연 제거). #76550 (Azat Khuzhin).
- ReadBufferFromS3 및 기타 원격 읽기용 버퍼에서 불필요한 메모리 할당을 피하고, 메모리 사용량을 절반으로 줄입니다. #76692 (Sema Checherinda).
- zstd를 1.5.5에서 1.5.7로 업데이트하여 일부 성능 개선을 가져올 수 있습니다. #77137 (Pradeep Chhetri).
- Wide 파트에서 JSON 컬럼 프리페치(prefetch) 중 메모리 사용량을 줄입니다. 이는 ClickHouse가 ClickHouse Cloud와 같은 공유 스토리지 위에서 사용될 때 특히 중요합니다. #77640 (Pavel Kruglov).
개선 사항
INTO OUTFILE과 함께TRUNCATE를 사용할 때 원자적 rename을 지원합니다. #70323을(를) 해결합니다. #77181 (Onkar Deshpande).- 부동 소수점 설정 값으로
NaN또는inf를 더 이상 사용할 수 없습니다. 애초에 의미 있는 동작은 아니었습니다. #77546 (Yarik Briukhovetskyi). compatibility설정과 관계없이 analyzer가 비활성화된 경우 기본적으로 병렬 레플리카(parallel replicas)가 비활성화됩니다.parallel_replicas_only_with_analyzer를false로 명시적으로 설정하여 이 동작을 변경할 수 있습니다. #77115 (Igor Nikonov).- 클라이언트 요청의 헤더 중 외부 HTTP 인증자로 전달할 헤더 목록을 정의할 수 있는 기능을 추가했습니다. #77054 (inv2004).
- 튜플 컬럼의 필드에 대해 컬럼 이름의 대소문자를 구분하지 않는 매칭을 준수합니다. https://github.com/apache/incubator-gluten/issues/8324 이슈를 종료합니다. #73780 (李扬).
- 코덱 Gorilla의 매개변수는 이제 항상 .sql 파일의 테이블 메타데이터에 저장됩니다. 이로써 다음 이슈가 해결되었습니다: #70072. #74814 (Nikita Mikhaylov).
- 특정 데이터 레이크에 대한 파싱 기능을 개선했습니다(시퀀스 ID 파싱: 매니페스트 파일에서 시퀀스 식별자를 파싱하는 기능을 추가했으며, Avro 메타데이터 파싱: 향후 확장이 용이하도록 Avro 메타데이터 파서를 재설계했습니다). #75010 (Daniil Ivanik).
system.opentelemetry_span_log테이블의 기본 ORDER BY 절에서 trace_id를 제거했습니다. #75907 (Azat Khuzhin).- 이제 암호화(속성
encrypted_by)를 모든 설정 파일(config.xml, users.xml, 중첩 설정 파일)에 적용할 수 있습니다. 이전에는 최상위 config.xml 파일에만 적용할 수 있었습니다. #75911 (Mikhail Gorshkov). system.warnings테이블을 개선하고, 경고 메시지를 동적으로 추가·업데이트·삭제할 수 있도록 합니다. #76029 (Bharat Nallan).- 모든
DROP작업은 순서상 먼저 와야 하므로, 이 PR에서는ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES쿼리를 실행할 수 없도록 합니다. #76242 (pufit). - SYNC REPLICA에 대한 다양한 개선 사항(향상된 오류 메시지, 강화된 테스트, 기본 동작 검증(sanity check)). #76307 (Azat Khuzhin).
- 백업 중
Access Denied가 발생하여 S3로의 멀티파트 복사가 실패하는 경우 올바른 폴백을 사용하도록 했습니다. 서로 다른 자격 증명을 사용하는 버킷 간에 백업을 수행할 경우 멀티파트 복사에서Access Denied오류가 발생할 수 있습니다. #76515 (Antonio Andelic). - 솔직히 말해 형편없는 라이브러리인 librdkafka를 버전 2.8.0으로 업그레이드했으며(업그레이드했다고 해서 나아진 것은 없습니다), Kafka 테이블의 종료 시퀀스를 개선하여 테이블 드롭 및 서버 재시작 시 지연을 줄였습니다. 이제
engine=Kafka는 테이블이 드롭될 때 더 이상 consumer group을 명시적으로 떠나지 않습니다. 대신 consumer는 비활성 상태가session_timeout_ms(기본값: 45초)를 초과할 때까지 group에 남아 있다가 자동으로 제거됩니다. #76621 (filimonov). - S3 요청 설정의 검증을 수정합니다. #76658 (Vitaly Baranov).
server_settings또는settings와 같은 시스템 테이블에는 편의를 위해default값 컬럼이 있습니다. 이러한 컬럼을merge_tree_settings및replicated_merge_tree_settings에도 추가했습니다. #76942 (Diego Nieto).CurrentMetrics::QueryPreempted와 유사한 방식으로 동작하는ProfileEvents::QueryPreempted를 추가했습니다. #77015 (VicoWu).- 이전에는 Replicated 데이터베이스가 쿼리에 지정된 자격 증명을 로그에 출력하는 문제가 있었습니다. 이 문제가 수정되었습니다. 다음 이슈가 해결됩니다: #77123. #77133 (Nikita Mikhaylov).
plain_rewritable disk에서 ALTER TABLE DROP PARTITION을 사용할 수 있도록 했습니다. #77138 (Julia Kartseva).- 백업/복원 설정
allow_s3_native_copy는 이제 세 가지 값을 지원합니다: -False- S3 네이티브 복사를 사용하지 않습니다. -True(이전 기본값) - ClickHouse는 먼저 S3 네이티브 복사를 시도하며, 실패하면 읽기+쓰기 방식으로 전환합니다. -'auto'(새 기본값) - ClickHouse는 먼저 소스와 대상 자격 증명 정보를 비교합니다. 자격 증명 정보가 동일하면 ClickHouse는 S3 네이티브 복사를 시도한 후 필요 시 읽기+쓰기 방식으로 전환합니다. 자격 증명 정보가 다르면 ClickHouse는 곧바로 읽기+쓰기 방식으로 동작합니다. #77401 (Vitaly Baranov). - DeltaLake 테이블 엔진의 Delta 커널에서 AWS 세션 토큰과 환경 기반 자격 증명을 사용할 수 있도록 지원합니다. #77661 (Kseniia Sumarokova).
버그 수정(공식 안정 버전에서 사용자가 인지할 수 있는 오동작)
- 비동기 분산
INSERT에서 대기 중인 배치를 처리하는 동안(예:No such file or directory등의 이유로) 처리가 멈추는 문제를 수정합니다. #72939 (Azat Khuzhin). - 인덱스 분석 중 datetime 변환을 개선하기 위해 암시적인 Date → DateTime 변환에 포화(saturating) 동작을 적용했습니다. 이를 통해 datetime 범위 제한으로 인해 발생할 수 있던 인덱스 분석의 부정확성이 해소되었습니다. #73307 또한 기본값인
date_time_overflow_behavior = 'ignore'가 설정된 경우의 명시적인toDateTime변환 문제도 수정했습니다. #73326 (Amos Bird). - UUID와 테이블 이름 간의 레이스 컨디션으로 인해 발생하는 각종 버그를 수정합니다(예를 들어, 동시
RENAME와SYSTEM RESTART REPLICA실행 시RENAME와RESTART REPLICA사이의 레이스를 해소하여 잘못된 레플리카를 재시작하거나, 테이블 중 하나가Table X is being restarted상태에 남게 되는 문제를 방지합니다). #76308 (Azat Khuzhin). - async insert를 활성화하고
INSERT INTO ... FROM file ...을 사용할 때 블록 크기가 서로 다르고 첫 번째 블록 크기는async_max_size보다 작지만 두 번째 블록은async_max_size보다 큰 경우, 두 번째 블록이 삽입되지 않아 데이터가 손실되던 문제를 수정합니다. 이러한 데이터는squashing에 남아 있었습니다. #76343 (Han Fei). system.data_skipping_indices에서 열 'marks'를 'marks_bytes'로 변경했습니다. #76374 (Robert Schulze).- 동적 파일 시스템 캐시 크기 조정 시 제거(eviction) 과정에서 발생하는 예기치 않은 오류가 적절히 처리되지 않던 문제를 수정합니다. #76466 (Kseniia Sumarokova).
- 병렬 해시에서
used_flag초기화를 수정했습니다. 이로 인해 서버가 비정상 종료될 수 있는 문제가 있었습니다. #76580 (Nikita Taranov). - 프로젝션 내부에서
defaultProfiles함수를 호출할 때 발생하던 논리적 오류를 수정했습니다. #76627 (pufit). - Web UI에서 브라우저가 대화형 Basic 인증을 요청하지 않도록 했습니다. #76319를 해결합니다. #76637 (Alexey Milovidov).
- 분산 테이블에서 불리언 리터럴을 조회할 때 발생하는 THERE_IS_NO_COLUMN 예외를 수정했습니다. #76656 (Yakov Olkhovskiy).
- 테이블 디렉터리 내부의 하위 경로가 보다 정교한 기준으로 선택되도록 개선되었습니다. #76681 (Daniil Ivanik).
- 기본 키(PK)에 서브컬럼이 있는 테이블에서
ALTER TABLE을 수행한 후 발생하는Not found column in block오류를 수정합니다. https://github.com/ClickHouse/ClickHouse/pull/72644 이후에는 https://github.com/ClickHouse/ClickHouse/pull/74403가 필요합니다. #76686 (Nikolai Kochetov). - null shortcircuit에 대한 성능 테스트를 추가하고 버그를 수정했습니다. #76708 (李扬).
- 최종 처리하기 전에 출력 write 버퍼를 플러시합니다. 일부 출력 포맷(예:
JSONEachRowWithProgressRowOutputFormat)을 최종 처리하는 단계에서 발생하던LOGICAL_ERROR를 수정합니다. #76726 (Antonio Andelic). - MongoDB의 binary UUID에 대한 지원을 추가했습니다(#74452). 테이블 함수 사용 시 MongoDB에 대한 WHERE pushdown을 수정했습니다(#72210). MongoDB의 binary UUID가 ClickHouse의 UUID로만 파싱되도록 MongoDB - ClickHouse 타입 매핑을 변경했습니다. 이를 통해 향후 모호성과 예기치 않은 동작을 방지할 수 있습니다. OID 매핑을 수정하되 이전 버전과의 호환성을 유지했습니다. #76762 (Kirill Nikiforov).
- JSON 서브컬럼의 병렬 프리픽스 역직렬화에서 예외 처리 방식을 수정합니다. #76809 (Pavel Kruglov).
- 음수 정수에 대한
lgamma함수의 동작을 수정합니다. #76840 (Ilya Kataev). - 명시적으로 정의된 기본 키(primary key)에 대한 reverse key 분석을 수정했습니다. #76654와 유사합니다. #76846 (Amos Bird).
- JSON 형식에서 Bool 값의 Pretty 출력이 올바르게 동작하도록 수정했습니다. #76905 (Pavel Kruglov).
- 비동기 INSERT 중 오류 발생 시 잘못된 JSON 컬럼 롤백으로 인해 발생할 수 있는 충돌을 수정했습니다. #76908 (Pavel Kruglov).
- 이전에
multiIf는 계획 단계와 메인 실행 단계에서 서로 다른 타입의 컬럼을 반환하는 경우가 있었습니다. 이로 인해 C++ 관점에서 정의되지 않은 동작을 일으키는 코드가 생성되었습니다. #76914 (Nikita Taranov). - MergeTree에서 상수 널 허용 키가 잘못 직렬화되던 문제를 수정했습니다. 이로써 #76939 이슈가 해결되었습니다. #76985 (Amos Bird).
BFloat16값의 정렬 동작을 수정합니다. #75487을(를) 해결합니다. #75669을(를) 해결합니다. #77000 (Alexey Milovidov).- 파트 일관성 검사 시 임시 서브컬럼을 건너뛰도록 검사 로직을 추가하여 Variant 서브컬럼을 포함하는 JSON 관련 버그를 수정했습니다. #72187. #77034 (Smita Kulkarni).
- Values 포맷에서 Template 파싱 시 타입 불일치가 발생할 때 크래시가 발생하던 문제를 수정했습니다. #77071 (Pavel Kruglov).
- EmbeddedRocksDB 테이블을 생성할 때 프라이머리 키에 서브컬럼을 사용하는 것은 더 이상 허용되지 않습니다. 이전에는 이러한 테이블을 생성할 수 있었지만, 해당 테이블에 대한
SELECT쿼리는 실패했습니다. #77074 (Pavel Kruglov). - 리터럴 타입을 올바르게 처리하지 못한 채 프레디케이트를 원격으로 푸시다운하면서 발생하던 분산 쿼리의 잘못된 비교를 수정합니다. #77093 (Duc Canh Le).
- 예외로 인해 Kafka 테이블 생성 시 발생하던 크래시를 수정했습니다. #77121 (Pavel Kruglov).
- Kafka 및 RabbitMQ 엔진에서 JSON과 서브컬럼을 지원합니다. #77122 (Pavel Kruglov).
- MacOS에서 예외 스택 언와인딩을 수정했습니다. #77126 (Eduard Karacharov).
- getSubcolumn 함수에서 'null' 서브컬럼 읽기 문제를 수정합니다. #77163 (Pavel Kruglov).
- Array 및 미지원 함수 사용 시 블룸 필터 인덱스를 수정했습니다. #77271 (Pavel Kruglov).
- 초기 CREATE 쿼리를 실행할 때에만 테이블 수에 대한 제한을 검사하도록 해야 합니다. #77274 (Nikolay Degterinsky).
- 버그 아님:
SELECT toBFloat16(-0.0) == toBFloat16(0.0)은 이제 이전과 달리false가 아니라true를 올바르게 반환합니다. 이로써Float32및Float64와의 동작이 일관되게 됩니다. #77290 (Shankar Iyer). - 디버그 빌드에서 크래시가 발생할 수 있는, 초기화되지 않은 key_index 변수에 대한 잘못된 참조 가능성을 수정했습니다. 이 초기화되지 않은 참조는 릴리스 빌드에서는 이후 코드가 오류를 발생시킬 가능성이 높기 때문에 문제를 일으키지 않습니다. ### 사용자에게 노출되는 변경 사항에 대한 문서 항목입니다. #77305 (wxybear).
- Bool 값 파티션의 이름 문제를 수정합니다. 이 동작은 https://github.com/ClickHouse/ClickHouse/pull/74533 에서 잘못 동작하게 되었습니다. #77319 (Pavel Kruglov).
- 널 허용 요소를 포함하는 Tuple과 String 간의 비교 동작을 수정했습니다. 예를 들어, 이 변경 이전에는 Tuple
(1, null)과 String'(1,null)'을 비교하면 오류가 발생했습니다. 또 다른 예로,a가 널 허용 컬럼인 Tuple(1, a)와 String'(1, 2)'의 비교가 있습니다. 이번 변경으로 이러한 문제가 해결되었습니다. #77323 (Alexey Katsman). - ObjectStorageQueueSource에서 발생하던 크래시를 수정했습니다. 이 문제는 https://github.com/ClickHouse/ClickHouse/pull/76358에서 도입되었습니다. #77325 (Pavel Kruglov).
input과 함께 사용할 때의async_insert를 수정합니다. #77340 (Azat Khuzhin).- 수정: 정렬 컬럼이 쿼리 플래너에 의해 제거된 경우
WITH FILL이 NOT_FOUND_COLUMN_IN_BLOCK 오류와 함께 실패할 수 있습니다. INTERPOLATE 식에 대해 계산된 DAG의 불일치와 관련된 유사한 문제를 수정했습니다. #77343 (Yakov Olkhovskiy). - 유효하지 않은 AST 노드에 별칭을 설정할 때 발생하는 여러 LOGICAL_ERROR를 수정합니다. #77445 (Raúl Marín).
- 파일 시스템 캐시 구현에서 파일 세그먼트 쓰기 중 오류 처리를 수정했습니다. #77471 (Kseniia Sumarokova).
- DatabaseIceberg가 카탈로그에서 제공하는 올바른 메타데이터 파일을 사용하도록 수정했습니다. #75187 이슈를 해결했습니다. #77486 (Kseniia Sumarokova).
- 이제 쿼리 캐시는 UDF를 비결정적인 것으로 간주합니다. 따라서 UDF를 포함한 쿼리의 결과는 더 이상 캐시되지 않습니다. 이전에는 사용자가 비결정적인 UDF를 정의할 수 있었고, 그 결과가 잘못 캐시되는 문제가 있었습니다(이슈 #77553). #77633 (Jimmy Aguilar Mena).
enable_filesystem_cache_log설정이 활성화된 경우에만 system.filesystem_cache_log가 동작하던 문제를 수정합니다. #77650 (Kseniia Sumarokova).PROJECTION내부에서defaultRolesFUNCTION을 호출할 때 발생하던 논리적 오류를 수정했습니다. #76627의 후속 작업입니다. #77667 (pufit).- 이제 함수
arrayResize의 두 번째 인수로Nullable타입을 사용하는 것은 허용되지 않습니다. 이전에는 두 번째 인수가Nullable일 때 오류가 발생하거나 잘못된 결과가 나올 수 있었습니다. (이슈 #48398). #77724 (Manish Gill). - 작업이 기록할 블록을 생성하지 않는 경우에도 병합 및 뮤테이션이 취소되었는지 정기적으로 확인합니다. #77766 (János Benjamin Antal).
빌드/테스트/패키징 개선
clickhouse-odbc-bridge와clickhouse-library-bridge를 별도 저장소인 https://github.com/ClickHouse/odbc-bridge/ 로 분리했습니다. #76225 (Alexey Milovidov).- Rust 크로스 컴파일을 수정하고, Rust를 완전히 비활성화할 수 있도록 했습니다. #76921 (Raúl Marín).
ClickHouse 릴리스 25.2, 2025년 02월 27일
하위 호환성이 없는 변경 사항
config.xml을 업그레이드하지 않은 설치에서도 기본적으로async_load_databases를 완전히 활성화합니다. #74772 (Azat Khuzhin).JSONCompactEachRowWithProgress및JSONCompactStringsEachRowWithProgress포맷을 추가합니다. #69989의 후속 작업입니다.JSONCompactWithNames및JSONCompactWithNamesAndTypes는 더 이상 "totals"를 출력하지 않습니다. 구현상 실수였던 것으로 보입니다. #75037 (Alexey Milovidov).- ALTER 명령 목록의 모호성을 없애기 위해
format_alter_operations_with_parentheses의 기본값을 true로 변경합니다(https://github.com/ClickHouse/ClickHouse/pull/59532 참고). 이로 인해 24.3 이전 버전의 클러스터와의 복제가 중단됩니다. 이전 릴리스를 사용하는 클러스터를 업그레이드하는 경우 서버 설정에서 이 설정을 끄거나 먼저 24.3으로 업그레이드해야 합니다. #75302 (Raúl Marín). - 정규 표현식을 사용하여 로그 메시지를 필터링하는 기능을 제거합니다. 해당 구현에서 데이터 레이스가 발생하여 제거해야 합니다. #75577 (János Benjamin Antal).
- 설정
min_chunk_bytes_for_parallel_parsing은 더 이상 0이 될 수 없습니다. 이는 #71110을 수정합니다. #75239 (Nikita Mikhaylov). - 캐시 구성에서 설정을 검증합니다. 존재하지 않는 설정은 이전에는 무시되었으나 이제는 오류를 발생시키므로 제거해야 합니다. #75452 (Kseniia Sumarokova).
새로운 기능
Nullable(JSON)데이터 타입을 지원합니다. #73556 (Pavel Kruglov).- DEFAULT 및 MATERIALIZED 표현식에서 서브컬럼 사용을 지원합니다. #74403 (Pavel Kruglov).
output_format_parquet_write_bloom_filter설정(기본적으로 활성화됨)을 사용하여 Parquet 블룸 필터를 쓸 수 있도록 지원합니다. #71681 (Michael Kolupaev).- 웹 UI에 대화형 데이터베이스 탐색 기능이 추가되었습니다. #75777 (Alexey Milovidov).
- 스토리지 정책에서 읽기 전용 디스크와 읽기/쓰기 디스크의 조합(여러 볼륨 또는 여러 디스크)을 허용합니다. 이를 통해 전체 볼륨에서 데이터를 읽을 수 있으며, 쓰기는 쓰기 가능한 디스크를 우선적으로 사용합니다(즉, Copy-on-Write 스토리지 정책). #75862 (Azat Khuzhin).
- 새로운 Database 엔진
DatabaseBackup을 추가하여 백업에서 테이블/데이터베이스를 즉시 ATTACH할 수 있도록 합니다. #75725 (Maksim Kita). - Postgres wire 프로토콜에서 prepared statements를 지원합니다. #75035 (scanhex12).
- Web, S3 등 외부 가상 파일 시스템에 위치한 MergeTree 테이블에 유용한, 데이터베이스 계층 없이 테이블을 ATTACH할 수 있는 기능을 추가합니다. #75788 (Azat Khuzhin).
- 두 문자열의 일부를 비교하는 새로운 문자열 비교 함수
compareSubstrings를 추가합니다. 예:SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result는 「첫 번째 문자열에서 offset 0, 두 번째 문자열에서 offset 5부터 시작하여 문자열 'Saxon'과 'Anglo-Saxon'의 6바이트를 사전식으로 비교한다」는 의미입니다. #74070 (lgbo). - 새로운 함수
initialQueryStartTime이 추가되었습니다. 현재 쿼리의 시작 시간을 반환합니다. 분산 쿼리 동안 모든 세그먼트에서 동일한 값을 갖습니다. #75087 (Roman Lomonosov). - MySQL에 대해 named collections를 사용한 SSL 인증을 지원합니다. #59111 이슈를 종료합니다. #59452 (Nikolay Degterinsky).
실험적 기능
- 새로운 설정
enable_adaptive_memory_spill_scheduler가 추가되었습니다. 이 설정을 사용하면 동일한 쿼리 내의 여러 Grace JOIN이 총 메모리 사용량을 모니터링하고, MEMORY_LIMIT_EXCEEDED를 방지하기 위해 외부 스토리지로의 스필(spill)을 적응적으로 트리거할 수 있습니다. #72728 (lgbo). - 새로 도입된 실험적
Kafka테이블 엔진이 Keeper 기능 플래그를 완전히 준수하도록 했습니다. #76004 (János Benjamin Antal). - 라이선스 문제로 v24.10에서 제거되었던 (Intel) QPL 코덱을 복원했습니다. #76021 (Konstantin Bogdanov).
- HDFS 통합을 위해
dfs.client.use.datanode.hostname설정 옵션에 대한 지원을 추가했습니다. #74635 (Mikhail Tiukavkin).
성능 개선
- Wide 파트에서 S3에 있는 전체 JSON 컬럼을 읽는 성능을 향상했습니다. 서브컬럼 prefix 역직렬화를 위한 prefetch 추가, 역직렬화된 prefix 캐시, 서브컬럼 prefix의 병렬 역직렬화를 통해 구현되었습니다. 이를 통해
SELECT data FROM table과 같은 쿼리에서 S3의 JSON 컬럼 읽기가 4배,SELECT data FROM table LIMIT 10과 같은 쿼리에서는 약 10배 빨라집니다. #74827 (Pavel Kruglov). max_rows_in_join = max_bytes_in_join = 0인 경우parallel_hash내에서 발생하던 불필요한 경합을 수정했습니다. #75155 (Nikita Taranov).- 옵티마이저가 조인 양쪽을 서로 바꾸는 경우
ConcurrentHashJoin에서 발생하던 이중 사전 메모리 할당을 수정했습니다. #75149 (Nikita Taranov). - 일부 조인 시나리오에서 약간의 개선을 했습니다. 출력 행 수를 미리 계산하고 그에 대해 메모리를 예약합니다. #75376 (Alexander Gololobov).
WHERE a < b AND b < c AND c < 5와 같은 쿼리의 경우, 더 나은 필터링 성능을 위해 새로운 비교 조건(a < 5 AND b < 5)을 유추할 수 있습니다. #73164 (Shichao Jin).- Keeper 개선: 성능 향상을 위해 인메모리 스토리지에 커밋할 때 digest 계산을 비활성화했습니다.
keeper_server.digest_enabled_on_commit설정으로 다시 활성화할 수 있습니다. 요청 전처리 시에는 여전히 digest를 계산합니다. #75490 (Antonio Andelic). - 가능한 경우 JOIN ON 절의 필터 표현식을 푸시다운합니다. #75536 (Vladimir Cherkasov).
- MergeTree에서 컬럼과 인덱스 크기를 지연(lazy) 계산하도록 했습니다. #75938 (Pavel Kruglov).
MATERIALIZE TTL에서ttl_only_drop_parts를 다시 존중하도록 했습니다. TTL 재계산과 파트 삭제에는 필요한 컬럼만 읽고, 해당 파트를 비어 있는 파트로 교체합니다. #72751 (Andrey Zvonov).- plain_rewritable 메타데이터 파일에 대한 write 버퍼 크기를 줄였습니다. #75758 (Julia Kartseva).
- 일부 윈도 함수의 메모리 사용량을 줄였습니다. #65647 (lgbo).
- Parquet 블룸 필터와 min/max 인덱스를 함께 평가하도록 했습니다. 다음과 같은 경우를 올바르게 지원하는 데 필요합니다:
x = 3 or x > 5where data = [1, 2, 4, 5]. #71383 (Arthur Passos). Executable스토리지에 전달되는 쿼리가 더 이상 단일 스레드 실행으로 제한되지 않습니다. #70084 (yawnt).- ALTER TABLE FETCH PARTITION에서 파트를 병렬로 가져오도록 했습니다(스레드 풀 크기는
max_fetch_partition_thread_pool_size로 제어됩니다). #74978 (Azat Khuzhin). indexHint함수가 있는 술어를PREWHERE로 이동할 수 있도록 했습니다. #74987 (Anton Popov).
개선 사항
LowCardinality컬럼의 메모리 사용량 계산을 수정했습니다. #74688 (Nikita Taranov).processors_profile_log테이블에 이제 30일 TTL이 적용된 기본 구성이 설정되었습니다. #66139 (Ilya Yatsishin).- 클러스터 설정에서 세그먼트에 이름을 지정할 수 있습니다. #72276 (MikhailBurdukov).
- Prometheus remote write 응답의 성공 상태 코드를 200/OK에서 204/NoContent로 변경했습니다. #74170 (Michael Dempsey).
- 서버를 재시작하지 않고 실행 중에
max_remote_read_network_bandwidth_for_serve및max_remote_write_network_bandwidth_for_server를 다시 로드할 수 있는 기능이 추가되었습니다. #74206 (Kai Zhu). - 백업을 생성할 때 체크섬 계산에 blob 경로를 사용할 수 있게 했습니다. #74729 (Vitaly Baranov).
system.query_cache에 쿼리 ID 컬럼을 추가했습니다(#68205 이슈를 해결). #74982 (NamHoaiNguyen).KILL QUERY로ALTER TABLE ... FREEZE ...쿼리를 취소할 수 있으며, 타임아웃(max_execution_time)에 의해 자동으로 취소할 수도 있습니다. #75016 (Kirill).groupUniqArrayArrayMap을SimpleAggregateFunction으로 사용할 수 있도록 지원을 추가했습니다. #75034 (Miel Donkers).- 데이터베이스 엔진
Iceberg에서 카탈로그 자격 증명 설정을 숨기도록 했습니다. #74559 이슈를 종료합니다. #75080 (Kseniia Sumarokova). intExp2/intExp10: 정의되지 않은 동작을 다음과 같이 명확히 했습니다. 너무 작은 인수에는 0을 반환하고, 너무 큰 인수에는18446744073709551615를 반환하며, 인수가nan이면 예외를 발생시킵니다. #75312 (Vitaly Baranov).DatabaseIceberg의 catalog 설정에서s3.endpoint를 네이티브로 지원합니다. #74558를 해결합니다. #75375 (Kseniia Sumarokova).SYSTEM DROP REPLICA를 실행하는 사용자에게 권한이 충분하지 않은 경우, 조용히 실패하지 않도록 했습니다. #75377 (Bharat Nallan).- 시스템 로그가 플러시(flush)에 실패한 횟수를 집계하는 ProfileEvent를 추가합니다. #75466 (Alexey Milovidov).
- 복호화 및 압축 해제 과정에 대한 검사와 추가 로깅을 추가했습니다. #75471 (Vitaly Baranov).
parseTimeDelta함수에서 micro sign(U+00B5)에 대한 지원을 추가했습니다. 이제 micro sign(U+00B5)과 그리스 문자 mu(U+03BC) 모두 마이크로초를 나타내는 유효한 표기로 인식되어, ClickHouse의 동작이 Go 구현과 동일해졌습니다(time.go 및 time/format.go 참고). #75472 (Vitaly Orlov).- 클라이언트 측 코드(예:
INSERT데이터 파싱 및 쿼리 출력 포맷팅)가 서버의users.xml및 사용자 프로필에 정의된 설정을 사용할지 여부를 제어하는 서버 설정(send_settings_to_client)을 클라이언트 설정(apply_settings_from_server)으로 교체합니다. 그렇지 않으면 클라이언트 명령줄, 세션 및 쿼리에서 지정된 설정만 사용됩니다. 이는 네이티브 클라이언트에만 적용되며(예: HTTP 등에는 적용되지 않음), 대부분의 쿼리 처리(서버에서 수행됨)에는 적용되지 않습니다. #75478 (Michael Kolupaev). - 구문 오류에 대한 오류 메시지가 더 명확해졌습니다. 이전에는 쿼리가 너무 크고, 길이가 제한을 초과한 토큰이 매우 긴 문자열 리터럴인 경우, 이 매우 긴 토큰의 두 예제 사이에 실제 원인을 설명하는 메시지가 중간에 묻혀 사라지는 문제가 있었습니다. UTF-8 문자가 포함된 쿼리가 오류 메시지에서 잘못 잘려 나가는 문제를 수정했습니다. 쿼리 조각에 대한 과도한 따옴표 처리(quoting)도 수정했습니다. 이는 #75473을(를) 해결합니다. #75561 (Alexey Milovidov).
- 스토리지
S3(Azure)Queue에 프로파일링 이벤트를 추가했습니다. #75618 (Kseniia Sumarokova). - 호환성을 위해 서버에서 클라이언트로 설정을 전송하는 기능(
send_settings_to_client=false)을 비활성화합니다(향후 더 나은 사용성을 위해 클라이언트 측 설정으로 다시 구현될 예정입니다). #75648 (Michael Kolupaev). - 백그라운드 스레드에서 주기적으로 읽어 들이는 다양한 소스의 정보를 사용해 내부 메모리 트래커를 보정할 수 있도록 하는 설정
memory_worker_correct_memory_tracker가 추가되었습니다. #75714 (Antonio Andelic). system.processes에normalized_query_hash컬럼을 추가합니다. 참고:normalizedQueryHash함수를 사용하면 이를 즉석에서 쉽게 계산할 수 있지만, 이후 변경을 대비하기 위해 필요합니다. #75756 (Alexey Milovidov).system.tables에 대한 쿼리를 실행해도, 더 이상 존재하지 않는 데이터베이스 위에 생성된Merge테이블이 있더라도 예외가 발생하지 않습니다. 복잡한 작업 수행을 허용하지 않으므로Hive테이블에서getTotalRows메서드를 제거합니다. #75772 (Alexey Milovidov).- 백업
start_time/end_time값을 마이크로초 단위까지 저장합니다. #75929 (Aleksandr Musorin). - RSS로 보정되지 않은 내부 전역 메모리 트래커의 값을 나타내는
MemoryTrackingUncorrected메트릭을 추가했습니다. #75935 (Antonio Andelic). PostgreSQL또는MySQL테이블 함수에서localhost:1234/handle과 같은 엔드포인트를 파싱할 수 있도록 허용합니다. 이는 https://github.com/ClickHouse/ClickHouse/pull/52503에서 발생한 회귀(regression) 문제를 수정합니다. #75944 (Nikita Mikhaylov).- 알 수 없는 값으로 설정된
workload설정을 가진 쿼리에 대해 어떤 방식으로 동작할지 선택할 수 있는 서버 설정throw_on_unknown_workload가 추가되었습니다. 이 설정을 사용하면 기본값인 무제한 접근을 허용하거나,RESOURCE_ACCESS_DENIED오류를 발생시키도록 할 수 있습니다. 이는 모든 쿼리가 workload 스케줄링을 사용하도록 강제하는 데 유용합니다. #75999 (Sergei Trifonov). - 불필요한 경우
ARRAY JOIN에서 서브컬럼을getSubcolumn으로 다시 쓰지 않도록 변경했습니다. #76018 (Pavel Kruglov). - 테이블을 로드하는 동안 발생하는 조정 오류를 재시도합니다. #76020 (Alexander Tokmakov).
SYSTEM FLUSH LOGS에서 개별 로그를 플러시하는 기능을 지원합니다. #76132 (Raúl Marín)./binary서버 페이지를 개선했습니다. Morton 곡선 대신 Hilbert 곡선을 사용합니다. 정사각형 안에 512 MB 분량의 주소를 표시하여 정사각형을 더 잘 채우도록 했습니다(이전 버전에서는 주소가 정사각형의 절반만 채웠습니다). 주소의 색상은 함수 이름이 아니라 라이브러리 이름을 기준으로 지정합니다. 영역 밖으로 조금 더 스크롤할 수 있도록 했습니다. #76192 (Alexey Milovidov).- TOO_MANY_SIMULTANEOUS_QUERIES 오류가 발생한 경우 ON CLUSTER 쿼리를 재시도합니다. #76352 (Patrick Galbraith).
- 서버의 상대적인 CPU 부족도를 계산하는
CPUOverload비동기 메트릭을 추가했습니다. #76404 (Alexey Milovidov). output_format_pretty_max_rows의 기본값을 10000에서 1000으로 변경했습니다. 사용성을 고려했을 때 더 적절한 값입니다. #76407 (Alexey Milovidov).
버그 수정 (공식 안정 릴리스에서 사용자가 직접 인지할 수 있는 오동작)
- 쿼리 해석 중에 예외가 발생하는 경우, 예외가 사용자 정의 형식으로 서식 지정되도록 수정했습니다. 이전 버전에서는 쿼리에 지정된 형식이 아니라 기본 형식으로 예외가 서식 지정되었습니다. 이 변경으로 #55422를 해결했습니다. #74994 (Alexey Milovidov).
- SQLite용 타입 매핑을 수정했습니다(정수 타입은
int64, 부동 소수점 타입은float64로). #73853 (Joanna Hulboj). - 상위 스코프에서의 식별자 해석을 수정합니다.
WITH절에서 표현식에 별칭을 사용할 수 있도록 허용합니다. #58994 문제를 수정합니다. #62946 문제를 수정합니다. #63239 문제를 수정합니다. #65233 문제를 수정합니다. #71659 문제를 수정합니다. #71828 문제를 수정합니다. #68749 문제를 수정합니다. #66143 (Dmitry Novik). negate함수의 단조성 문제를 수정했습니다. 이전 버전에서는 기본 키인x에 대해 실행한select * from a where -x = -42;쿼리가 잘못된 결과를 반환할 수 있었습니다. #71440 (Michael Kolupaev).arrayIntersect에서 빈 튜플 처리 방식을 수정합니다. 이로써 #72578 이슈가 해결됩니다. #72581 (Amos Bird).- 잘못된 접두어로 JSON 하위 객체의 서브컬럼을 읽던 동작을 수정합니다. #73182 (Pavel Kruglov).
- 클라이언트-서버 통신에서 Native 포맷 관련 설정이 올바르게 전달되도록 수정했습니다. #73924 (Pavel Kruglov).
- 일부 스토리지에서 지원되지 않는 타입을 검사하도록 했습니다. #74218 (Pavel Kruglov).
- macOS의 PostgreSQL 인터페이스를 통해
INSERT INTO SELECT쿼리 실행 시 발생하던 충돌을 수정했습니다(이슈 #72938). #74231 (Artem Yurov). - 복제된 데이터베이스에서 초기화되지 않은
max_log_ptr값을 수정했습니다. #74336 (Konstantin Morozov). - INTERVAL 값을 삽입할 때 발생하던 크래시를 수정했습니다(issue #74299). #74478 (NamHoaiNguyen).
- 상수 JSON 리터럴의 포맷을 수정했습니다. 이전에는 다른 서버로 쿼리를 전송할 때 구문 오류가 발생할 수 있었습니다. #74533 (Pavel Kruglov).
- 암시적 프로젝션이 활성화된 상태에서 상수 파티션 식을 사용할 때 올바르게 동작하지 않던 CREATE 쿼리를 수정했습니다. 이를 통해 #74596을 해결했습니다. #74634 (Amos Bird).
INSERT수행 중 예외가 발생한 뒤에도 연결이 비정상 상태로 남지 않도록 했습니다. #74740 (Azat Khuzhin).- 중간 상태로 남아 있던 연결을 재사용하지 않도록 했습니다. #74749 (Azat Khuzhin).
- 대문자로 작성되지 않은 타입 이름의 JSON 타입 선언을 파싱할 때 발생하던 크래시를 수정했습니다. #74784 (Pavel Kruglov).
- Keeper: 연결이 수립되기 전에 종료된 경우 발생하던 logical_error를 수정합니다. #74844 (Michael Kolupaev).
AzureBlobStorage를 사용하는 테이블이 있을 때 서버가 기동되지 않던 문제를 수정했습니다. 테이블은 Azure에 대한 요청 없이 로드됩니다. #74880 (Alexey Katsman).- BACKUP 및 RESTORE 작업에서
query_log의used_privileges및missing_privileges필드가 누락되는 문제를 수정합니다. #74887 (Alexey Katsman). - HDFS select 요청 처리 중 SASL 오류가 발생하면 Kerberos(krb) 티켓을 갱신합니다. #74930 (inv2004).
- startup_scripts에서 Replicated 데이터베이스에 대한 쿼리를 수정했습니다. #74942 (Azat Khuzhin).
- null-safe 비교 연산을 사용할 때 JOIN ON 절에서 타입 별칭이 지정된 표현식과 관련된 문제를 수정합니다. #74970 (Vladimir Cherkasov).
- remove 연산이 실패한 경우 part의 상태를 deleting에서 outdated로 되돌리도록 수정했습니다. #74985 (Sema Checherinda).
- 이전 버전에서는 스칼라 서브쿼리가 있을 때, 데이터 포맷을 초기화하는 단계에서 (서브쿼리 처리에서 누적된) 진행 상황을 기록하기 시작했으며, 이는 HTTP 헤더가 전송되기 전에 수행되었습니다. 이로 인해 X-ClickHouse-QueryId, X-ClickHouse-Format 같은 HTTP 헤더와 Content-Type이 손실되는 문제가 발생했습니다. #74991 (Alexey Milovidov).
database_replicated_allow_replicated_engine_arguments=0일 때CREATE TABLE AS...쿼리가 올바르게 동작하도록 수정했습니다. #75000 (Bharat Nallan).- INSERT 예외 발생 후 클라이언트에서 연결이 비정상 상태로 남는 문제를 수정했습니다. #75030 (Azat Khuzhin).
- PSQL 복제에서 처리되지 않은 예외로 인해 발생하던 충돌을 수정했습니다. #75062 (Azat Khuzhin).
- SASL이 임의의 RPC 호출에서 실패할 수 있으며, 이 수정으로 krb5 티켓이 만료된 경우 호출을 재시도할 수 있도록 합니다. #75063 (inv2004).
optimize_function_to_subcolumns설정이 활성화된 상태에서Array,Map,Nullable(..)컬럼에 대해 기본(primary) 및 보조(secondary) 인덱스가 올바르게 사용되도록 수정했습니다. 이전에는 이들 컬럼에 대한 인덱스가 무시되는 경우가 있었습니다. #75081 (Anton Popov).- 내부 테이블을 사용하는 materialized view를 생성할 때는 이러한 평탄화된 컬럼을 사용할 수 없으므로
flatten_nested를 비활성화해야 합니다. #75085 (Christoph Wurm). - forwarded_for 필드에서 ::ffff:1.1.1.1 등 일부 IPv6 주소가 잘못 해석되어 예외와 함께 클라이언트 연결이 끊어지던 문제를 수정했습니다. #75133 (Yakov Olkhovskiy).
- LowCardinality 널 허용 데이터 타입에 대한 null-safe JOIN 처리 동작을 수정했습니다. 이전에는
IS NOT DISTINCT FROM,<=>,a IS NULL AND b IS NULL OR a == b와 같은 null-safe 비교를 사용하는 JOIN ON 절이 LowCardinality 컬럼에서 제대로 동작하지 않았습니다. #75143 (Vladimir Cherkasov). - NumRowsCache에서 total_number_of_rows를 계산할 때 key_condition을 지정하지 않도록 검증합니다. #75164 (Daniil Ivanik).
- 새 analyzer로 사용되지 않은 interpolation을 포함한 쿼리를 수정합니다. #75173 (János Benjamin Antal).
- CTE를 사용하는 INSERT 문에서 발생하던 크래시를 수정합니다. #75188 (Shichao Jin).
- Keeper 버그 수정: 로그를 롤백할 때 손상된 변경 로그에 기록되지 않도록 수정했습니다. #75197 (Antonio Andelic).
- 적절한 경우
BFloat16을 상위 타입으로 사용합니다. 이를 통해 다음 이슈를 해결했습니다: #74404. #75236 (Nikita Mikhaylov). any_join_distinct_right_table_keys및JOIN ON에서OR를 사용할 때 조인 결과에서 예기치 않은 기본값이 나타날 수 있던 문제를 수정했습니다. #75262 (Vladimir Cherkasov).- azureblobstorage 테이블 엔진의 자격 증명을 마스킹합니다. #75319 (Garrett Thomas).
- ClickHouse가 PostgreSQL, MySQL, SQLite와 같은 외부 데이터베이스에 대해 필터 푸시다운을 잘못 수행하던 동작이 수정되었습니다. 다음 이슈를 해결합니다: #71423. #75320 (Nikita Mikhaylov).
- Protobuf 형식으로 출력하는 동안
SYSTEM DROP FORMAT SCHEMA CACHE쿼리가 병렬로 실행될 때 발생할 수 있는 Protobuf 스키마 캐시 충돌을 수정합니다. #75357 (Pavel Kruglov). - 병렬 레플리카 환경에서
HAVING절의 필터가 푸시다운될 때 발생할 수 있는 논리적 오류 또는 초기화되지 않은 메모리 문제를 수정합니다. #75363 (Vladimir Cherkasov). icebergS3,icebergAzure테이블 함수와 테이블 엔진에서 민감한 정보가 노출되지 않도록 했습니다. #75378 (Kseniia Sumarokova).- 계산 결과가 빈 트림 문자인 경우
TRIMFUNCTION이 이제 올바르게 처리됩니다. 예시:SELECT TRIM(LEADING concat('') FROM 'foo')(이슈 #69922). #75399 (Manish Gill). - IOutputFormat의 데이터 레이스 문제를 수정했습니다. #75448 (Pavel Kruglov).
- JSON 서브컬럼에 Array 타입이 사용된 상태에서 분산 테이블에 대한 JOIN을 수행할 때 발생할 수 있던
Elements ... and ... of Nested data structure ... (Array columns) have different array sizes오류를 수정했습니다. #75512 (Pavel Kruglov). CODEC(ZSTD, DoubleDelta)사용 시 발생하던 데이터 손상 문제를 수정하여 #70031를 해결합니다. #75548 (Konstantin Bogdanov).- allow_feature_tier와 compatibility MergeTree 설정 간의 상호작용을 수정합니다. #75635 (Raúl Marín).
- 파일 처리가 재시도된 경우
system.s3queue_log에서 잘못 기록되던processed_rows값을 수정했습니다. #75666 (Kseniia Sumarokova). - materialized view가 URL engine에 쓰기를 수행할 때 연결 문제(connectivity issue)가 발생하는 경우
materialized_views_ignore_errors설정이 적용되도록 했습니다. #75679 (Christoph Wurm). - 서로 다른 타입의 컬럼 간에 여러 비동기
RENAME쿼리(alter_sync = 0)가 실행된 이후MergeTree테이블에서 데이터를 읽는 동안 드물게 발생하던 크래시를 수정했습니다. #75693 (Anton Popov). - 일부
UNION ALL쿼리에서 발생하던Block structure mismatch in QueryPipeline stream오류를 수정했습니다. #75715 (Nikolai Kochetov). - PK 컬럼을 ALTER MODIFY 할 때 프로젝션을 재구성합니다. 이전에는 프로젝션 PK에 사용된 컬럼을 ALTER MODIFY한 이후 SELECT를 수행할 때
CANNOT_READ_ALL_DATA오류가 발생할 수 있었습니다. #75720 (Pavel Kruglov). - 스칼라 서브쿼리에서 분석기 사용 시
ARRAY JOIN결과가 잘못 반환되는 문제를 수정합니다. #75732 (Nikolai Kochetov). DistinctSortedStreamTransform에서 null 포인터 역참조 문제를 수정했습니다. #75734 (Nikita Taranov).allow_suspicious_ttl_expressions동작을 수정했습니다. #75771 (Aleksei Filatov).- 함수
translate에서 초기화되지 않은 메모리 읽기 문제를 수정합니다. #75592를 해결합니다. #75794 (Alexey Milovidov). - Native format에서 문자열 포맷팅에 사용되는 설정을 JSON에도 전파합니다. #75832 (Pavel Kruglov).
- v24.12에서 병렬 해시 조인 알고리즘을 기본적으로 활성화한 내용을 설정 변경 이력에 기록했습니다. 이는 v24.12보다 오래된 호환성 레벨이 설정된 경우 ClickHouse가 계속해서 비병렬 해시를 사용하여 조인을 수행함을 의미합니다. #75870 (Robert Schulze).
- 암시적으로 추가된 min-max 인덱스를 포함한 테이블을 새 테이블로 복사할 수 없던 버그를 수정했습니다 (issue #75677). #75877 (Smita Kulkarni).
clickhouse-library-bridge는 파일 시스템에서 임의의 라이브러리를 열 수 있게 해주므로, 격리된 환경 안에서만 실행하는 것이 안전합니다. 이를 clickhouse-server와 가까운 환경에서 실행할 때 발생할 수 있는 취약점을 방지하기 위해, 설정에서 지정한 위치로 라이브러리 경로를 제한합니다. 이 취약점은 Arseniy Dugin이 ClickHouse Bug Bounty Program을 통해 발견했습니다. #75954 (Alexey Milovidov).- 일부 메타데이터에 JSON 직렬화를 사용한 것은 실수였습니다. JSON은 문자열 리터럴 내부에서 0 바이트를 포함한 이진 데이터를 지원하지 않기 때문입니다. SQL 쿼리는 이진 데이터와 잘못된 UTF-8을 포함할 수 있으므로, 메타데이터 파일에서도 이를 지원해야 합니다. 한편 ClickHouse의
JSONEachRow및 유사 포맷은 이진 데이터에 대한 완전한 왕복 변환을 보장하기 위해 JSON 표준에서 벗어나는 방식을 사용해 이 문제를 처리합니다. 이에 대한 배경은 다음을 참고하십시오: https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790. 해결 방법은Poco::JSON라이브러리를 ClickHouse에서 사용하는 JSON 포맷 직렬화 방식과 일관되도록 만드는 것입니다. 이로써 #73668 이슈가 종료됩니다. #75963 (Alexey Milovidov). - 스토리지
S3Queue에서 커밋 한도 검사 로직을 수정했습니다. #76104 (Kseniia Sumarokova). - 자동 인덱스(
add_minmax_index_for_numeric_columns/add_minmax_index_for_string_columns)가 설정된 MergeTree 테이블을 ATTACH하지 못하던 문제를 수정했습니다. #76139 (Azat Khuzhin). enable_job_stack_trace설정이 활성화된 경우에도 잡의 상위 스레드에서 발생한 스택 트레이스가 출력되지 않던 문제를 수정했습니다. 또한enable_job_stack_trace설정이 스레드에 올바르게 전파되지 않아 스택 트레이스 내용이 항상 이 설정을 준수하지 않던 문제를 수정했습니다. #76191 (Yakov Olkhovskiy).ALTER RENAME에CREATE USER권한이 필요하도록 잘못 구현되어 있던 권한 검사를 수정했습니다. #74372 이슈를 해결합니다. #76241 (pufit).- big-endian 아키텍처에서 FixedString과 함께 사용하는 reinterpretAs 함수의 동작을 수정했습니다. #76253 (Azat Khuzhin).
- S3Queue에서 버킷과 관련해 발생하던 논리적 오류 "Expected current processor to be equal to for bucket "를 수정했습니다. #76358 (Kseniia Sumarokova).
- Memory 데이터베이스에서 실행되는 ALTER 쿼리에서 발생하던 교착 상태를 수정했습니다. #76359 (Azat Khuzhin).
WHERE조건에pointInPolygon함수가 포함되어 있을 때 인덱스 분석에서 발생하던 논리 오류를 수정합니다. #76360 (Anton Popov).- 시그널 핸들러 내에서 잠재적으로 안전하지 않은 호출을 수정했습니다. #76549 (Yakov Olkhovskiy).
- PartsSplitter에서 역순 키 지원 관련 문제를 수정했습니다. 이를 통해 #73400이 해결되었습니다. #73418 (Amos Bird).
빌드/테스트/패키징 개선
- ARM 및 Intel Mac 모두에서 HDFS 빌드를 지원합니다. #74244 (Yan Xin).
- Darwin용으로 크로스 컴파일할 때 ICU와 GRPC를 활성화합니다. #75922 (Raúl Marín).
- 내장 LLVM 19로 업데이트합니다. #75148 (Konstantin Bogdanov).
- Docker 이미지에서 기본 사용자에 대한 네트워크 액세스를 비활성화합니다. #75259 (Mikhail f. Shiryaev). 모든 clickhouse-server 관련 동작을 FUNCTION으로 만들고,
entrypoint.sh에서 기본 바이너리 실행 파일을 시작할 때에만 이를 실행합니다. 오래 미뤄졌던 개선 사항으로, #50724에서 제안되었습니다.users.xml에서 값을 가져오기 위해clickhouse-extract-from-config에--users옵션을 추가했습니다. #75643 (Mikhail f. Shiryaev). - 바이너리에서 약 20MB의 사용되지 않는 코드를 제거합니다. #76226 (Alexey Milovidov).
ClickHouse 25.1 릴리스, 2025-01-28
하위 호환되지 않는 변경사항
JSONEachRowWithProgress는 진행이 발생할 때마다 진행 상황을 기록합니다. 이전 버전에서는 결과의 각 블록 이후에만 진행 상황이 표시되어 실질적으로 활용하기 어려웠습니다. 이제 진행 상황 표시 방식이 변경되어 0 값은 표시되지 않습니다. 이로써 #70800 이슈가 해결됩니다. #73834 (Alexey Milovidov).Merge테이블은 하위 테이블의 컬럼 합집합을 사용하고 공통 타입을 도출하여 구조를 통일합니다. 이로써 #64864 이슈가 해결됩니다. 특정 경우에는 이 변경이 하위 버전과 비호환일 수 있습니다. 한 가지 예시는 테이블 간에 공통 타입은 없지만 여전히 첫 번째 테이블의 타입으로의 변환이 가능한 경우입니다. 예를 들어UInt64와Int64, 또는 임의의 숫자 타입과String조합이 그러한 경우입니다. 이전 동작으로 되돌리려면merge_table_max_tables_to_look_for_schema_inference를1로 설정하거나compatibility를24.12이하로 설정하십시오. #73956 (Alexey Milovidov).- Parquet 출력 포맷은
Date와DateTime컬럼을 원시 숫자로 기록하는 대신 Parquet에서 지원하는 날짜/시간 타입으로 변환합니다.DateTime은DateTime64(3)(기존:UInt32)가 되며,output_format_parquet_datetime_as_uint32설정을 사용하면 이전 동작을 복원할 수 있습니다.Date는Date32(기존:UInt16)가 됩니다. #70950 (Michael Kolupaev). - 기본적으로
ORDER BY및less/greater/equal/etc와 같은 비교 함수에서는JSON/Object/AggregateFunction과 같이 비교가 불가능한 타입을 허용하지 않습니다. #73276 (Pavel Kruglov). - 더 이상 사용되지 않는
MaterializedMySQL데이터베이스 엔진이 제거되었으며 더 이상 사용할 수 없습니다. #73879 (Alexey Milovidov). mysql딕셔너리 소스는 더 이상SHOW TABLE STATUS쿼리를 실행하지 않습니다. 최근 MySQL 버전과 InnoDB 테이블에서는 이 쿼리가 어떠한 유의미한 값도 제공하지 않기 때문입니다. 이로써 #72636 이슈가 해결됩니다. 이 변경은 하위 버전과 호환되지만, 사용자가 이를 인지할 수 있도록 이 범주에 포함했습니다. #73914 (Alexey Milovidov).- 이제
CHECK TABLE쿼리에는 별도의CHECK권한이 필요합니다. 이전 버전에서는SHOW TABLES권한만으로 이러한 쿼리를 실행할 수 있었습니다. 그러나CHECK TABLE쿼리는 부하가 클 수 있으며, 일반적인SELECT쿼리의 복잡도 제한이 적용되지 않습니다. 이로 인해 DoS 가능성이 존재했습니다. #74471 (Alexey Milovidov). h3ToGeo()함수는 이제 결과를(lat, lon)순서(지오메트리 함수의 표준 순서)로 반환합니다. 이전 결과 순서(lon, lat)를 유지하려면h3togeo_lon_lat_result_order = true설정을 사용하면 됩니다. #74719 (Manish Gill).- 새로운 MongoDB 드라이버가 기본값이 되었습니다. 기존 드라이버 사용을 계속하려면 서버 설정
use_legacy_mongodb_integration을 true로 설정하십시오. #73359 (Robert Schulze).
새 기능
SELECT쿼리를 제출한 직후, 아직 완료되지 않은(백그라운드 프로세스에서 구체화되지 않은) 뮤테이션을 실행 시점에 바로 적용할 수 있는 기능이 추가되었습니다.apply_mutations_on_fly설정을 통해 활성화할 수 있습니다. #74877 (Anton Popov).Iceberg테이블에서 시간 관련 transform 파티션 연산에 대한 파티션 프루닝을 구현합니다. #72044 (Daniil Ivanik).- MergeTree 정렬 키와 스킵 인덱스에서 서브컬럼을 지원합니다. #72644 (Pavel Kruglov).
Apache Arrow/Parquet/ORC에서HALF_FLOAT값을 읽는 기능을 지원합니다(Float32로 읽습니다). 이로써 #72960이(가) 해결되었습니다. IEEE-754 half float 형식은BFloat16과 동일하지 않다는 점에 유의하십시오. 이로써 #73835도 해결되었습니다. #73836 (Alexey Milovidov).system.trace_log테이블에는 심볼화된 스택 트레이스를 담는 새로운 컬럼symbols와lines가 두 개 추가됩니다. 이를 통해 프로파일링 정보를 쉽게 수집하고 내보낼 수 있습니다. 이 동작은trace_log내의 서버 설정 값symbolize로 제어되며, 기본적으로 활성화되어 있습니다. #73896 (Alexey Milovidov).- 테이블에서 자동 증가하는 숫자를 생성하는 데 사용할 수 있는 새로운 함수
generateSerialID를 추가합니다. kazalika의 #64310 작업을 이어받은 것입니다. 이 변경으로 #62485가 해결됩니다. #73950 (Alexey Milovidov). - DDL 쿼리에 대해
query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryN구문을 추가합니다. 이 구문을 사용하면 서브쿼리{query1, query2, ... queryN}가 서로 병렬로 실행될 수 있으며, 이렇게 사용하는 것이 바람직합니다. #73983 (Vitaly Baranov). - 디시리얼라이즈된 스키핑 인덱스 그래뉼에 대한 메모리 내 캐시를 추가했습니다. 이를 통해 스키핑 인덱스를 사용하는 반복 쿼리를 더 빠르게 실행할 수 있습니다. 새 캐시의 크기는 서버 설정
skipping_index_cache_size및skipping_index_cache_max_entries로 제어됩니다. 이 캐시를 도입한 주된 이유는 벡터 유사도 인덱스를 가속하는 것이었으며, 이제 해당 인덱스가 훨씬 더 빨라졌습니다. #70102 (Robert Schulze). - 이제 내장된 Web UI에서 쿼리 실행 중 진행률 표시줄이 표시됩니다. 이를 통해 쿼리를 취소할 수 있습니다. 전체 레코드 수와 속도에 대한 자세한 정보를 표시합니다. 데이터가 도착하는 즉시 테이블을 점진적으로 렌더링할 수 있습니다. HTTP 압축을 활성화할 수 있습니다. 테이블 렌더링 속도가 더 빨라졌습니다. 테이블 헤더가 상단에 고정(sticky)됩니다. 셀을 선택하고 방향키로 탐색할 수 있습니다. 선택된 셀의 외곽선 때문에 셀이 더 작아지는 문제를 수정했습니다. 셀은 마우스를 올렸을 때가 아니라 선택되었을 때만 확장됩니다. 수신 데이터 렌더링을 언제 중단할지는 서버 측이 아니라 클라이언트 측에서 결정합니다. 숫자의 자릿수 구분을 강조하여 표시합니다. 전체적인 디자인이 새로워지고 더 대담해졌습니다. 서버에 연결 가능 여부와 자격 증명의 정확성을 확인하고, 서버 버전과 가동 시간(uptime)을 표시합니다. 구름 아이콘은 Safari를 포함한 모든 폰트에서 윤곽선 형태로 표시됩니다. 중첩 데이터 타입(nested data types) 내부의 큰 정수는 더 잘 렌더링됩니다.
inf/nan을 올바르게 표시합니다. 마우스를 컬럼 헤더 위에 올리면 데이터 타입을 표시합니다. #74204 (Alexey Milovidov). - MergeTree가 관리하는 컬럼에 대해
add_minmax_index_for_numeric_columns(숫자 컬럼용)과add_minmax_index_for_string_columns(문자열 컬럼용) 설정을 사용하여 기본적으로 min-max(스키핑) 인덱스를 생성할 수 있는 기능을 추가합니다. 현재는 두 설정이 모두 비활성화되어 있어, 기본 동작에는 아직 변경 사항이 없습니다. #74266 (Smita Kulkarni). system.query_log, 네이티브 프로토콜의 ClientInfo, 그리고 서버 로그에script_query_number및script_line_number필드를 추가합니다. 이 변경으로 #67542가 해결됩니다. 이 기능의 초기 구현을 #68133에서 시작해 준 pinsvin00에게 감사의 말씀을 전합니다. #74477 (Alexey Milovidov).- 패턴 내에서 가장 긴 이벤트 체인에 대해 일치한 이벤트의 타임스탬프를 반환하는 집계 함수
sequenceMatchEvents가 추가되었습니다. #72349 (UnamedRus). arrayNormalizedGini함수가 추가되었습니다. #72823 (flynn).DateTime64타입에 마이너스 연산자를 지원하여DateTime64값들 간은 물론DateTime값과도 뺄셈할 수 있게 되었습니다. #74482 (Li Yin).
실험적 기능
BFloat16데이터 타입이 프로덕션 환경에서 사용 가능한 상태가 되었습니다. #73840 (Alexey Milovidov).
성능 개선
indexHint함수를 최적화했습니다. 이제indexHint함수의 인자로만 사용되는 컬럼은 테이블에서 읽히지 않습니다. #74314 (Anton Popov).indexHint함수가 엔터프라이즈 데이터 아키텍처의 핵심 구성 요소라면, 이 최적화는 큰 도움이 될 것입니다.parallel_hashJOIN 알고리즘에서max_joined_block_size_rows설정에 대한 처리가 더 정확해졌습니다. 이를 통해hash알고리즘과 비교할 때 메모리 사용량이 증가하는 현상을 방지하는 데 도움이 됩니다. #74630 (Nikita Taranov).MergingAggregated단계에서 쿼리 플랜 수준의 predicate push down 최적화를 지원합니다. analyzer를 사용하는 일부 쿼리의 성능이 향상됩니다. #74073 (Nikolai Kochetov).parallel_hashJOIN 알고리즘의 probe 단계에서 왼쪽 테이블 블록을 해시를 기준으로 분할하던 동작이 제거되었습니다. #73089 (Nikita Taranov).- RowBinary 입력 포맷을 최적화합니다. #63805 이슈를 종료합니다. #65059 (Pavel Kruglov).
optimize_on_insert가 활성화된 경우 파트를 레벨 1로 기록합니다. 이를 통해 새로 기록된 파트에 대해FINAL을 사용하는 쿼리에 여러 가지 최적화를 적용할 수 있습니다. #73132 (Anton Popov).- 일부 저수준 최적화를 통해 문자열 역직렬화 성능을 향상했습니다. #65948 (Nikita Taranov).
- 머지와 같은 연산에서 레코드 간의 동등성 비교를 수행할 때, 값이 서로 다를 가능성이 가장 높은 컬럼부터 행 비교를 시작합니다. #63780 (UnamedRus).
- 오른쪽 조인 테이블을 키 기준으로 재정렬하여 grace hash join의 성능을 개선합니다. #72237 (kevinyhzou).
arrayROCAUC와arrayAUCPR가 전체 곡선에서 부분 구간의 면적도 계산할 수 있도록 하여, 매우 큰 데이터셋에서도 계산을 병렬화할 수 있게 했습니다. #72904 (Emmanuel).- 불필요하게 많은 유휴 스레드가 생성되지 않도록 했습니다. #72920 (Guo Wangyang).
- 테이블 FUNCTION에서 중괄호 확장만 사용하는 경우 blob storage 키를 나열하지 않습니다. #73333 이슈를 해결합니다. #73518 (Konstantin Bogdanov).
- 널 허용 인자를 사용하는 함수에 대한 단락 평가 최적화. #73820 (李扬).
- 함수가 아닌 컬럼에는
maskedExecute를 적용하지 않아 단락 실행의 성능을 향상합니다. #73965 (lgbo). - 성능 향상을 위해
Kafka/NATS/RabbitMQ/FileLog입력 포맷에서 헤더 자동 감지 기능을 비활성화했습니다. #74006 (Azat Khuzhin). - GROUPING SETS를 사용하는 집계 이후 파이프라인을 더 높은 수준의 병렬 처리로 실행합니다. #74082 (Nikita Taranov).
MergeTreeReadPool의 임계 구역을 줄였습니다. #74202 (Guo Wangyang).- 병렬 레플리카의 성능이 개선되었습니다. 병렬 레플리카 프로토콜과 관련이 없는 패킷을 쿼리 이니시에이터에서 역직렬화하는 작업은 이제 항상 파이프라인 스레드에서 수행됩니다. 이전에는 파이프라인 스케줄링을 담당하는 스레드에서 수행될 수 있었으며, 이로 인해 이니시에이터의 응답성이 떨어지고 파이프라인 실행이 지연될 수 있었습니다. #74398 (Igor Nikonov).
- Keeper에서 대규모 multi 요청 처리 성능을 향상했습니다. #74849 (Antonio Andelic).
- 로그 래퍼를 값으로 사용하고, 힙에 할당하지 않도록 했습니다. #74034 (Mikhail Artemenko).
- 백그라운드에서 MySQL 및 Postgres 딕셔너리 레플리카에 대한 연결을 다시 수립하여, 해당 딕셔너리에 대한 요청이 지연되지 않도록 합니다. #71101 (Yakov Olkhovskiy).
- 병렬 레플리카는 레플리카 선택을 개선하기 위해 레플리카 가용성에 대한 과거 정보를 사용했으나, 연결이 불가능할 때 레플리카의 오류 횟수를 업데이트하지 않았습니다. 이 PR에서는 연결이 불가능한 경우에도 레플리카의 오류 횟수가 업데이트되도록 했습니다. #72666 (zoomxi).
- 머지 과정에서 skip 인덱스 생성을 억제하는 MergeTree 설정
materialize_skip_indexes_on_merge가 추가되었습니다. 이를 통해ALTER TABLE [..] MATERIALIZE INDEX [...]를 사용하여 skip 인덱스를 언제 생성할지 명시적으로 제어할 수 있습니다. skip 인덱스(예: 벡터 유사도 인덱스)의 생성 비용이 클 때 유용합니다. #74401 (Robert Schulze). - Storage(S3/Azure)Queue에서 Keeper에 대한 요청을 최적화합니다. #74410 (Kseniia Sumarokova). #74538 (Kseniia Sumarokova).
- 기본적으로 최대
1000개의 레플리카를 병렬로 사용합니다. #74504 (Konstantin Bogdanov). - S3 디스크에서 데이터를 읽을 때 HTTP 세션 재사용을 개선합니다 (#72401). #74548 (Julian Maicher).
개선 사항
- 암시적 ENGINE을 사용하는 CREATE TABLE 쿼리에서 SETTINGS를 지원하고, ENGINE 설정과 쿼리 설정을 혼합하여 사용하는 것도 지원합니다. #73120 (Raúl Marín).
- 기본값으로
use_hive_partitioning을 활성화했습니다. #71636 (Yarik Briukhovetskyi). - 서로 다른 매개변수 구성을 가진 JSON 타입 간 CAST 및 ALTER를 지원합니다. #72303 (Pavel Kruglov).
- JSON 컬럼 값의 동등 비교를 지원합니다. #72991 (Pavel Kruglov).
- JSON 서브컬럼이 포함된 식별자의 서식을 개선하여 불필요한 백틱(back quote) 사용을 피합니다. #73085 (Pavel Kruglov).
- 대화형 메트릭 기능을 개선합니다. 병렬 레플리카의 메트릭이 완전히 표시되지 않던 문제를 수정합니다. 메트릭을 최근 업데이트 시각 순으로, 그다음에는 이름의 사전식(lexicographical) 순서로 표시합니다. 오래되어 최신 상태가 아닌 메트릭은 표시하지 않습니다. #71631 (Julia Kartseva).
- JSON 출력 형식을 기본적으로 사람이 읽기 쉬운 형태로 출력하도록 했습니다. 이를 제어할 수 있도록 새로운 설정
output_format_json_pretty_print를 추가하고 기본값으로 활성화했습니다. #72148 (Pavel Kruglov). - 기본적으로
LowCardinality(UUID)를 허용합니다. 이는 ClickHouse Cloud 고객 환경에서 실용적인 것으로 입증되었습니다. #73826 (Alexey Milovidov). - 설치 과정에서 출력되는 메시지를 개선했습니다. #73827 (Alexey Milovidov).
- ClickHouse Cloud 비밀번호 재설정 안내 메시지를 개선했습니다. #73831 (Alexey Milovidov).
- 파일에 append할 수 없는 File 테이블에 대한 오류 메시지를 개선합니다. #73832 (Alexey Milovidov).
- 터미널에서 바이너리 포맷(예: Native, Parquet, Avro)으로의 출력이 실수로 요청된 경우 확인을 요청하도록 합니다. #59524를 해결합니다. #73833 (Alexey Milovidov).
- 터미널에서 가독성을 높이기 위해 Pretty 및 Vertical 포맷에서 후행 공백을 강조 표시합니다. 이는
output_format_pretty_highlight_trailing_spaces설정으로 제어됩니다. 초기 구현은 #72996의 Braden Burns가 수행했습니다. #71590를 해결합니다. #73847 (Alexey Milovidov). clickhouse-client와clickhouse-local은 파일에서 stdin으로 리디렉션된 입력의 압축을 자동으로 감지합니다. 이 변경으로 #70865 이슈가 해결되었습니다. #73848 (Alexey Milovidov).- 기본적으로 Pretty 형식에서 과도하게 긴 컬럼 이름을 잘라냅니다. 이는
output_format_pretty_max_column_name_width_cut_to및output_format_pretty_max_column_name_width_min_chars_to_cut설정으로 제어됩니다. 이는 #66502에 있는 tanmaydatta의 작업을 이어서 진행한 것입니다. 이 변경으로 #65968가 종료됩니다. #73851 (Alexey Milovidov). Pretty포맷을 더 보기 좋게 개선했습니다. 이전 블록이 출력된 후 오랜 시간이 지나지 않았다면 블록을 합칩니다. 이는 새 설정인output_format_pretty_squash_consecutive_ms(기본값 50ms)와output_format_pretty_squash_max_wait_ms(기본값 1000ms)로 제어됩니다. #49537의 후속 작업입니다. #49153를 해결합니다. #73852 (Alexey Milovidov).- 현재 머지 중인 소스 파트 수에 대한 메트릭을 추가했습니다. #70809를 해결합니다. #73868 (Alexey Milovidov).
- 출력이 터미널인 경우
Vertical형식에서 컬럼을 강조 표시합니다. 이 동작은output_format_pretty_color설정으로 비활성화할 수 있습니다. #73898 (Alexey Milovidov). - MySQL 호환성이 향상되어 이제
mysqlsh(Oracle에서 제공하는 고급 MySQL CLI)로 ClickHouse에 연결할 수 있게 되었습니다. 이는 테스트를 용이하게 하기 위함입니다. #73912 (Alexey Milovidov). - Pretty 포맷은 테이블 셀 내에서 여러 줄로 구성된 필드를 렌더링할 수 있어 가독성이 향상됩니다. 이 기능은 기본적으로 활성화되어 있으며
output_format_pretty_multiline_fields설정으로 제어할 수 있습니다. #64094에서 Volodyachan이 진행한 작업의 후속 작업입니다. 이 변경으로 #56912가 해결되었습니다. #74032 (Alexey Milovidov). - 브라우저에서 실행되는 JavaScript에서 X-ClickHouse HTTP 헤더를 사용할 수 있도록 노출했습니다. 이를 통해 애플리케이션 개발이 더 편리해집니다. #74180 (Alexey Milovidov).
JSONEachRowWithProgress형식은 메타데이터가 포함된 이벤트뿐 아니라 totals와 extremes도 포함합니다. 또한rows_before_limit_at_least및rows_before_aggregation도 포함합니다. 이 형식은 부분 결과가 출력된 뒤에 예외가 발생해도 이를 올바르게 출력합니다. 진행 정보에는 이제 경과 나노초가 포함됩니다. 마지막에 최종 진행 이벤트가 하나 발생합니다. 쿼리 실행 중 진행 정보는interactive_delay설정 값보다 더 자주 출력되지 않습니다. #74181 (Alexey Milovidov).- Play UI에서 모래시계가 부드럽게 회전하도록 개선했습니다. #74182 (Alexey Milovidov).
- HTTP 응답이 압축된 경우에도 패킷이 도착하는 즉시 전송하도록 합니다. 이렇게 하면 브라우저가 프로그레스 패킷과 압축된 데이터를 받을 수 있습니다. #74201 (Alexey Milovidov).
- 출력 레코드 수가 N =
output_format_pretty_max_rows를 초과하면, 처음 N개의 행만 표시하는 대신 출력 테이블을 가운데에서 잘라 처음 N/2개의 행과 마지막 N/2개의 행을 표시합니다. #64200의 후속 작업입니다. 이 변경으로 #59502가 해결됩니다. #73929 (Alexey Milovidov). - 해시 조인 알고리즘이 활성화된 경우에도 보다 일반적인 조인 계획 알고리즘을 사용할 수 있도록 허용합니다. #71926 (János Benjamin Antal).
- 데이터 타입
DateTime64를 사용하는 컬럼에bloom_filter인덱스를 생성할 수 있도록 허용했습니다. #66416 (Yutong Xiao). min_age_to_force_merge_seconds및min_age_to_force_merge_on_partition_only가 모두 활성화되어 있으면 파트 병합 시 최대 바이트 크기 제한을 무시합니다. #73656 (Kai Zhu).- 추적성을 향상하기 위해 OpenTelemetry span 로그 테이블에 HTTP 헤더를 추가했습니다. #70516 (jonymohajanGmail).
- 사용자 정의 시간대를 지정해
orc파일을 쓸 수 있도록 하여, 항상GMT시간대만 사용하지 않도록 했습니다. #70615 (kevinyhzou). - 클라우드 간에 백업을 생성할 때 I/O 스케줄링 설정을 준수하도록 했습니다. #71093 (János Benjamin Antal).
system.asynchronous_metrics에metric컬럼의 별칭인name을 추가합니다. #71164 (megao).- 과거에는 어떤 이유에서인지
ALTER TABLE MOVE PARTITION TO TABLE쿼리가 전용 권한인ALTER_MOVE_PARTITION대신SELECT및ALTER DELETE권한을 검사했습니다. 이 PR에서는 이 액세스 타입을 사용하도록 했습니다. 호환성을 위해SELECT및ALTER DELETE권한이 부여된 경우 이 권한도 암묵적으로 부여되지만, 이 동작은 향후 릴리스에서 제거될 예정입니다. #16403을(를) 해결합니다. #71632 (pufit). - 정렬 순서를 손상시키도록 허용하는 대신, 정렬 키에 있는 컬럼을 구체화하려 할 때 예외를 던지도록 했습니다. #71891 (Peter Nguyen).
EXPLAIN QUERY TREE에서 비밀 정보가 표시되지 않도록 했습니다. #72025 (Yakov Olkhovskiy).- "native" reader에서 Parquet 정수 논리 타입을 지원합니다. #72105 (Arthur Passos).
- 기본 사용자에 대해 비밀번호가 필요한 경우 브라우저에서 대화형으로 자격 증명을 요청하도록 변경되었습니다. 이전 버전에서는 서버가 HTTP 403을 반환했으나, 이제는 HTTP 401을 반환합니다. #72198 (Alexey Milovidov).
- 액세스 타입
CREATE_USER,ALTER_USER,DROP_USER,CREATE_ROLE,ALTER_ROLE,DROP_ROLE를 전역에서 파라미터화된 형태로 변환했습니다. 이제 액세스 관리 권한을 보다 정밀하게 부여할 수 있습니다. #72246 (pufit). system.mutations에latest_fail_error_code_name컬럼을 추가합니다. 이 컬럼은 정체된 뮤테이션에 대한 새로운 지표를 도입하고, 이를 사용하여 Cloud에서 발생한 오류의 그래프를 생성하며, 필요에 따라 노이즈가 적은 새로운 알림을 추가하기 위해 필요합니다. #72398 (Miсhael Stetsyuk).ATTACH PARTITION쿼리에서 메모리 할당량을 줄였습니다. #72583 (Konstantin Morozov).max_bytes_before_external_sort한도를 전체 쿼리 메모리 사용량을 기준으로 하도록 변경했습니다(이전에는 하나의 정렬 스레드에 대해 정렬 블록의 바이트 수를 기준으로 했으나, 이제는max_bytes_before_external_group_by와 동일한 의미를 가지며 모든 스레드에 대한 전체 쿼리 메모리의 총 한도입니다). 또한 디스크에 저장되는 블록 크기를 제어하기 위한 설정인min_external_sort_block_bytes를 추가했습니다. #72598 (Azat Khuzhin).- 트레이스 수집기에서 설정한 메모리 제한을 무시하도록 개선했습니다. #72606 (Azat Khuzhin).
- 서버 설정
dictionaries_lazy_load및wait_dictionaries_load_at_startup가system.server_settings에 추가되었습니다. #72664 (Christoph Wurm). BACKUP/RESTORE쿼리에서 지정할 수 있는 설정 목록에max_backup_bandwidth설정을 추가합니다. #72665 (Christoph Wurm).- 복제 클러스터에서 생성되는 로그 양을 줄이기 위해 ReplicatedMergeTree 엔진에서 생성되는 레플리카 파트 관련 로그 레벨을 낮췄습니다. #72876 (mor-akamai).
- 논리합(OR) 표현식에서 공통 부분식을 추출하는 기능을 개선합니다. 모든 분리항에 공통 부분식이 없더라도 결과 필터 표현식을 단순화할 수 있도록 합니다. #71537의 후속 작업입니다. #73271 (Dmitry Novik).
- Storage
S3Queue및AzureQueue에서 설정 없이 생성된 테이블에도 설정을 추가할 수 있도록 했습니다. #73283 (Kseniia Sumarokova). least와greatest함수가NULL인자를 만나면 항상NULL을 반환할지(true인 경우), 아니면 이를 무시할지(false인 경우)를 제어하는 설정least_greatest_legacy_null_behavior(기본값:false)를 도입합니다. #73344 (Robert Schulze).- ObjectStorageQueueMetadata의 정리 스레드에서 Keeper 멀티 요청을 사용합니다. #73357 (Antonio Andelic).
- ClickHouse가 cgroup 환경에서 실행될 때에도 시스템 부하, 프로세스 스케줄링, 메모리 등과 관련된 시스템 전역 비동기 메트릭을 계속 수집합니다. 이는 ClickHouse가 호스트에서 많은 리소스를 사용하는 유일한 프로세스인 경우 유용한 신호를 제공할 수 있습니다. #73369 (Nikita Taranov).
- 스토리지
S3Queue에서 24.6 이전에 생성된 기존 ordered 테이블을 버킷을 사용하는 새로운 구조로 마이그레이션할 수 있도록 했습니다. #73467 (Kseniia Sumarokova). - 기존
system.s3queue와 유사한system.azure_queue를 추가합니다. #73477 (Kseniia Sumarokova). - 함수
parseDateTime64(및 그 변형 함수들)이 이제 1970년 이전 또는 2106년 이후의 입력 날짜에 대해서도 올바른 결과를 반환합니다. 예:SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS'). #73594 (zhanglistar). clickhouse-disks와 관련해 사용자들이 제기한 일부 사용성 문제를 개선했습니다. #67136 이슈를 닫습니다. #73616 (Daniil Ivanik).- S3(Azure)Queue 스토리지에서 커밋 설정을 변경할 수 있게 되었습니다. (커밋 설정은
max_processed_files_before_commit,max_processed_rows_before_commit,max_processed_bytes_before_commit,max_processing_time_sec_before_commit입니다). #73635 (Kseniia Sumarokova). - storage S3(Azure)Queue에서 소스별 진행 상황을 집계하여 커밋 한도 설정과 비교합니다. #73641 (Kseniia Sumarokova).
BACKUP/RESTORE쿼리에서 코어 설정을 지원하도록 했습니다. #73650 (Vitaly Baranov).- Parquet 출력 시
output_format_compression_level이 고려되도록 했습니다. #73651 (Arthur Passos). - 지원되지 않는 타입으로 처리하는 대신 Apache Arrow의
fixed_size_list를Array로 읽도록 했습니다. #73654 (Julian Meyers). - 두 가지 백업 엔진인
Memory(현재 사용자 세션 내에서 백업을 유지함)와Null(어디에도 백업을 저장하지 않음, 테스트용)을 추가했습니다. #73690 (Vitaly Baranov). concurrent_threads_soft_limit_num과concurrent_threads_soft_limit_num_ratio_to_cores는 서버 재시작 없이 변경할 수 있습니다. #73713 (Sergei Trifonov).formatReadableFUNCTION에 확장 숫자형(Decimal, 큰 정수형)에 대한 지원을 추가합니다. #73765 (Raúl Marín).- Postgres 와이어 프로토콜 호환을 위해 TLS를 지원합니다. #73812 (scanhex12).
isIPv4String함수가 올바른 IPv4 주소 뒤에 0 바이트가 오는 경우에도 true를 반환했으며, 이 경우 false를 반환해야 합니다. #65387의 후속 수정입니다. #73946 (Alexey Milovidov).- MySQL 와이어 프로토콜의 오류 코드를 MySQL과 호환되도록 변경합니다. #56831의 후속 작업입니다. #50957를 해결합니다. #73948 (Alexey Milovidov).
IN,NOT IN과 같은 연산자에서 사용되는 enum 리터럴이 enum 타입에 대해 유효한지 검증하고, 리터럴이 유효한 enum 값이 아닐 경우 예외를 발생시키도록 하는validate_enum_literals_in_opearatorsSETTING을 추가했습니다. #73985 (Vladimir Cherkasov).- Storage
S3(Azure)Queue에서 (커밋 설정으로 정의된 단일 배치의) 모든 파일이 단일 Keeper 트랜잭션으로 커밋되도록 했습니다. #73991 (Kseniia Sumarokova). - 실행 가능한 UDF와 딕셔너리에 대해 헤더 감지를 비활성화했습니다(Function 'X': wrong result, expected Y row(s), actual Y-1와 같은 오류가 발생할 수 있었기 때문입니다). #73992 (Azat Khuzhin).
EXPLAIN PLAN에distributed옵션을 추가합니다. 이제EXPLAIN distributed=1 ...은ReadFromParallelRemote*단계에 원격 실행 계획을 추가합니다. #73994 (Nikolai Kochetov).- Dynamic 인자를 사용하는 not/xor 연산자에서 올바른 반환 타입을 사용하도록 했습니다. #74013 (Pavel Kruglov).
- 테이블 생성 후에도
add_implicit_sign_column_constraint_for_collapsing_engine설정을 변경할 수 있도록 했습니다. #74014 (Christoph Wurm). - 구체화된 뷰(materialized view)의 SELECT 쿼리에서 서브컬럼을 지원합니다. #74030 (Pavel Kruglov).
- 이제
clickhouse-client에서 사용자 지정 프롬프트를 설정하는 간단한 방법이 세 가지 제공됩니다. 1. 명령줄 매개변수--prompt를 사용하는 방법, 2. 설정 파일에서<prompt>[...]</prompt>설정을 사용하는 방법, 3. 역시 설정 파일에서 연결별 설정인<connections_credentials><prompt>[...]</prompt></connection_credentials>을 사용하는 방법입니다. #74168 (Christoph Wurm). - ClickHouse Client에서 포트 9440으로 접속하면 보안 연결을 자동으로 감지합니다. #74212 (Christoph Wurm).
http_handlers에 대해 이제 사용자 이름만으로 인증할 수 있습니다(이전에는 비밀번호도 입력해야 했습니다). #74221 (Azat Khuzhin).- 대체 쿼리 언어인 PRQL 및 KQL에 대한 지원이 실험적(Experimental)으로 표시되었습니다. 이를 사용하려면
allow_experimental_prql_dialect = 1및allow_experimental_kusto_dialect = 1설정을 지정해야 합니다. #74224 (Robert Schulze). - 더 많은 집계 함수에서 기본 Enum 타입 반환을 지원합니다. #74272 (Raúl Marín).
OPTIMIZE TABLE에서 기존 키워드FINAL대신 키워드FORCE를 지정할 수 있게 되었습니다. #74342 (Robert Schulze).- 서버 종료가 과도하게 오래 걸릴 때 경고를 발생시키는 데 필요한
IsServerShuttingDown메트릭을 추가합니다. #74429 (Miсhael Stetsyuk). EXPLAIN출력에 Iceberg 테이블 이름이 추가되었습니다. #74485 (alekseev-maksim).- 이전 analyzer에서 RECURSIVE CTE를 사용할 경우 더 이해하기 쉬운 오류 메시지를 출력하도록 개선했습니다. #74523 (Raúl Marín).
system.errors에서 상세 오류 메시지를 표시합니다. #74574 (Vitaly Baranov).- 클라이언트가 clickhouse-keeper와 통신할 때 비밀번호를 사용할 수 있도록 허용합니다. 서버와 클라이언트에 적절한 SSL 구성을 지정한 경우에는 이 기능이 크게 유용하지는 않지만, 일부 상황에서는 여전히 도움이 될 수 있습니다. 비밀번호 길이는 최대 16자입니다. Keeper Auth 모델과는 관련이 없습니다. #74673 (alesapin).
- config reloader용 오류 코드를 추가했습니다. #74746 (Garrett Thomas).
- MySQL 및 PostgreSQL 테이블 함수와 엔진에 IPv6 주소 지원을 추가했습니다. #74796 (Mikhail Koviazin).
divideDecimal에 대한 쇼트서킷 최적화를 구현하여 #74280를 수정합니다. #74843 (Kevin Mingtarja).- 이제 시작 스크립트에서 사용자를 지정할 수 있습니다. #74894 (pufit).
- Azure SAS 토큰 지원을 추가했습니다. #72959 (Azat Khuzhin).
버그 수정(공식 안정 릴리스에서 사용자에게 직접 영향을 미치는 오동작)
- Parquet 압축 레벨은 압축 코덱이 이를 지원하는 경우에만 설정합니다. #74659 (Arthur Passos).
- 수정자와 함께 collation 로케일을 사용할 때 오류가 발생하던 회귀 버그를 수정했습니다. 예를 들어, 이제
SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shifted쿼리가 정상적으로 동작합니다. #73544 (Robert Schulze). - SEQUENTIAL 노드를 keeper-client로 생성할 수 없던 문제를 수정했습니다. #64177 (Duc Canh Le).
position관련 함수에서 잘못된 문자 수 계산을 수정합니다. #71003 (思维).- 처리되지 않은 부분 권한 해제(partial revoke) 때문에 액세스 엔터티에 대한
RESTORE작업에 불필요하게 더 높은 권한이 필요했습니다. 이 PR에서 해당 문제를 수정합니다. #71853 이슈를 종료합니다. #71958 (pufit). ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE실행 후 일시적인 중단이 발생하지 않도록 했습니다. 백그라운드 작업 스케줄링에 사용할 올바른 설정을 조회하도록 수정했습니다. #72024 (Aleksei Filatov).- 일부 입력 및 출력 포맷(예: Parquet, Arrow)에서 빈 튜플 처리 방식을 수정했습니다. #72616 (Michael Kolupaev).
- 와일드카드가 사용된 데이터베이스/테이블에 대한 컬럼 수준 GRANT SELECT/INSERT SQL 문은 이제 오류를 반환합니다. #72646 (Johann Gan).
- 대상 액세스 엔터티에 존재하는 암시적 권한 부여로 인해 사용자가
REVOKE ALL ON *.*를 실행할 수 없던 문제를 수정합니다. #72872 (pufit). - formatDateTime 스칼라 FUNCTION의 양수 시간대 포맷을 수정합니다. #73091 (ollidraese).
- PROXYv1를 통해 연결이 이루어지고
auth_use_forwarded_address가 설정된 경우 소스 포트를 올바르게 반영하도록 수정했습니다. 이전에는 프록시 포트를 잘못 사용했습니다.currentQueryID()함수를 추가했습니다. #73095 (Yakov Olkhovskiy). - TCPHandler에서 NativeWriter로 포맷 설정을 전달하여
output_format_native_write_json_as_string과 같은 설정이 올바르게 적용되도록 합니다. #73179 (Pavel Kruglov). - StorageObjectStorageQueue에서 발생하던 충돌을 수정합니다. #73274 (Kseniia Sumarokova).
- 서버 종료 시 갱신 가능 구체화 뷰에서 드물게 발생하던 크래시를 수정했습니다. #73323 (Michael Kolupaev).
- 이제
formatDateTime함수의%f플레이스홀더는 무조건 소수점 이하 6자리(초)를 생성합니다. 이로써 MySQLDATE_FORMAT함수와 동작이 호환됩니다. 이전 동작은 설정formatdatetime_f_prints_scale_number_of_digits = 1을 사용하여 복원할 수 있습니다. #73324 (ollidraese). s3스토리지와 테이블 함수에서 데이터를 읽을 때_etag컬럼을 기준으로 한 필터링이 올바르게 동작하도록 수정했습니다. #73353 (Anton Popov).- 이전 analyzer를 사용할 때
JOIN ON표현식에서IN (subquery)를 사용하면 발생하던Not-ready Set is passed as the second argument for function 'in'오류를 수정합니다. #73382 (Nikolai Kochetov). - Dynamic 및 JSON 컬럼에 대한 squash 준비 과정을 수정했습니다. 이전에는 일부 경우 타입/경로 개수 제한에 아직 도달하지 않았는데도 shared variant/shared data에 새로운 타입이 삽입될 수 있었습니다. #73388 (Pavel Kruglov).
- 자료형 이진 디코딩 과정에서 잘못된 크기를 검사하여 과도하게 큰 메모리 할당을 방지합니다. #73390 (Pavel Kruglov).
- 병렬 레플리카가 활성화된 단일 레플리카 클러스터에서 읽는 과정에서 발생하던 논리 오류를 수정했습니다. #73403 (Michael Kolupaev).
- ZooKeeper 및 이전 버전 Keeper 사용 시 ObjectStorageQueue를 수정합니다. #73420 (Antonio Andelic).
- 기본적으로 hive 파티셔닝을 활성화하는 데 필요한 수정을 구현했습니다. #73479 (Yarik Briukhovetskyi).
- 벡터 유사도 인덱스를 생성할 때 발생하던 데이터 레이스를 수정했습니다. #73517 (Antonio Andelic).
- 딕셔너리 소스에 잘못된 데이터가 포함된 FUNCTION이 있을 때 발생하던 segfault 문제를 수정합니다. #73535 (Yarik Briukhovetskyi).
- S3(Azure)Queue 스토리지에서 실패한 insert 작업에 대한 재시도 로직을 수정합니다. #70951를 해결합니다. #73546 (Kseniia Sumarokova).
LowCardinality요소를 가진 튜플에 대해optimize_functions_to_subcolumns설정이 활성화된 경우 일부 경우에 발생할 수 있었던tupleElement함수의 오류를 수정했습니다. #73548 (Anton Popov).enum glob다음에range one이 오는 경우의 구문 파싱을 수정했습니다. #73473 문제를 해결했습니다. #73569 (Konstantin Bogdanov).- 비복제 MergeTree(non_replicated_merge_tree) 테이블에 대한 서브쿼리에서
parallel_replicas_for_non_replicated_merge_tree설정이 무시되던 문제를 수정했습니다. #73584 (Igor Nikonov). - 작업을 스케줄링할 수 없을 때 std::logical_error가 던져지던 문제를 수정했습니다. 스트레스 테스트에서 발견되었습니다. #73629 (Alexander Gololobov).
- 분산 쿼리에 대해 잘못된 처리 단계가 사용되어 발생할 수 있는 논리적 오류를 방지하기 위해
EXPLAIN SYNTAX에서 쿼리를 해석하지 않도록 합니다. #65205을(를) 수정합니다. #73634 (Dmitry Novik). - Dynamic 컬럼에서 발생할 수 있는 데이터 불일치 문제를 수정합니다.
Nested columns sizes are inconsistent with local_discriminators column size라는 논리적 오류가 발생할 수 있는 원인을 해결합니다. #73644 (Pavel Kruglov). FINAL및SAMPLE을 사용하는 쿼리에서NOT_FOUND_COLUMN_IN_BLOCK오류가 발생하던 문제를 수정했습니다.CollapsingMergeTree에서FINAL을 사용하는SELECT문의 잘못된 결과를 수정했고,FINAL최적화를 활성화했습니다. #73682 (Anton Popov).- LIMIT BY COLUMNS에서 발생하던 크래시 문제를 수정했습니다. #73686 (Raúl Marín).
- 일반 프로젝션 사용이 강제된 상태에서 실행된 쿼리가 정의된 프로젝션과 정확히 동일함에도 프로젝션이 선택되지 않아 오류가 발생하던 버그를 수정했습니다. #73700 (Shichao Jin).
- Dynamic/Object 구조의 역직렬화를 수정했습니다. 이 문제로 인해 CANNOT_READ_ALL_DATA 예외가 발생할 수 있었습니다. #73767 (Pavel Kruglov).
- 백업에서 파트를 복원할 때
metadata_version.txt를 건너뜁니다. #73768 (Vitaly Baranov). - LIKE를 사용해 Enum으로 캐스팅할 때 발생하던 세그멘테이션 폴트를 수정합니다. #73775 (zhanglistar).
- S3 Express 버킷을 디스크로 작동하지 않던 문제를 수정했습니다. #73777 (Sameer Tamsekar).
- CollapsingMergeTree 테이블에서 sign 컬럼에 유효하지 않은 값을 가진 행도 병합되도록 허용합니다. #73864 (Christoph Wurm).
- 오프라인 레플리카가 있을 때 DDL을 쿼리하면 발생하던 오류를 수정합니다. #73876 (Tuan Pham Anh).
- 중첩 튜플에 'keys','values'라는 이름이 명시되지 않은
Map맵을 생성할 수 있었던 가능성 때문에map()타입 비교가 가끔 실패하던 문제를 수정합니다. #73878 (Yakov Olkhovskiy). - GROUP BY ALL 절을 처리할 때 윈도 함수를 무시하도록 수정했습니다. #73501를 수정했습니다. #73916 (Dmitry Novik).
- 암묵적 권한의 동작을 수정했습니다(이전에는 와일드카드처럼 동작했습니다). #73932 (Azat Khuzhin).
- 중첩된 맵(Map) 생성 시 발생하던 높은 메모리 사용량 문제를 수정했습니다. #73982 (Pavel Kruglov).
- 키가 비어 있는 중첩 JSON의 파싱을 수정합니다. #73993 (Pavel Kruglov).
- 수정: 별칭이 다른 별칭에서 참조되고 SELECT 목록에서 역순으로 선택되는 경우, 해당 별칭이 PROJECTION에 추가되지 않던 문제를 수정합니다. #74033 (Yakov Olkhovskiy).
- plain_rewritable 디스크 초기화 중 Azure에서 발생하는 「object not found」 오류를 무시합니다. #74059 (Julia Kartseva).
- enum 타입과 비어 있는 테이블에서
any및anyLast함수의 동작을 수정합니다. #74061 (Joanna Hulboj). - 사용자가 Kafka 테이블 엔진에서 키워드 인수를 지정했을 때 발생하던 문제를 수정했습니다. #74064 (Yarik Briukhovetskyi).
- Storage
S3Queue에서 "s3queue_" 접두사가 있는 설정과 없는 설정 간의 변경 처리를 수정합니다. #74075 (Kseniia Sumarokova). allow_push_predicate_ast_for_distributed_subqueriesSETTING을 추가했습니다. 이 SETTING은 analyzer를 사용하는 분산 쿼리에 대해 AST 기반 predicate push-down을 제공합니다. 이는 query plan serialization이 지원되는 분산 쿼리가 도입될 때까지 사용하는 임시 해결책입니다. #66878 #69472 #65638 #68030 #73718 이슈를 해결했습니다. #74085 (Nikolai Kochetov).- #73095 이후
forwarded_for필드에 포트가 포함될 수 있으며, 이로 인해 포트가 포함된 상태로는 호스트 이름을 조회할 수 없게 되는 문제를 수정합니다. #74116 (Yakov Olkhovskiy). ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...)구문의 잘못된 형식을 수정했습니다. #74126 (Han Fei).- 이슈 #66112를 수정했습니다. #74128 (Anton Ivashkin).
CREATE TABLE에서 테이블 엔진으로Loop를 더 이상 사용할 수 없습니다. 이 조합은 이전에 세그멘테이션 폴트(segfault)를 발생시켰습니다. #74137 (Yarik Briukhovetskyi).postgresql및sqlite테이블 함수에서 SQL 인젝션 공격을 방지하기 위해 보안 취약점을 수정했습니다. #74144 (Pablo Marcos).- 압축된 Memory 엔진 테이블에서 서브컬럼을 읽을 때 발생하던 크래시를 수정했습니다. 이 수정으로 #74009 이슈가 해결되었습니다. #74161 (Nikita Taranov).
- system.detached_tables에 대한 쿼리에서 발생하던 무한 루프를 수정했습니다. #74190 (Konstantin Morozov).
- 파일을 실패로 설정할 때 s3queue에서 발생하던 논리 오류를 수정했습니다. #74216 (Kseniia Sumarokova).
- 기본 백업에서 수행되는
RESTORE작업에 대한 네이티브 복사 설정(allow_s3_native_copy/allow_azure_native_copy)을 수정했습니다. #74286 (Azat Khuzhin). - 데이터베이스에서 분리(detach)된 테이블 수가
max_block_size의 배수일 때 발생하던 문제를 수정했습니다. #74289 (Konstantin Morozov). - 출발지와 목적지의 자격 증명이 서로 다를 때 ObjectStorage(예: S3)를 통한 복사가 올바르게 동작하도록 수정했습니다. #74331 (Azat Khuzhin).
- GCS에서 네이티브 복사를 수행할 때 「JSON API의 Rewrite 메서드 사용 여부」를 감지하는 로직을 수정했습니다. #74338 (Azat Khuzhin).
BackgroundMergesAndMutationsPoolSize의 잘못된 계산을 수정했습니다(실제 값보다 2배 크게 계산되고 있었습니다). #74509 (alesapin).- Cluster Discovery를 활성화할 때 Keeper watch가 누수되는 버그를 수정했습니다. #74521 (RinChanNOW).
- UBSan에서 보고된 메모리 정렬 문제를 수정합니다 #74512. #74534 (Arthur Passos).
- 테이블 생성 중 발생하는 KeeperMap의 동시 정리 작업 문제를 수정했습니다. #74568 (Antonio Andelic).
- 정확한 쿼리 결과를 보존하기 위해, 이제
EXCEPT또는INTERSECT가 있는 경우 서브쿼리에서 사용되지 않는 프로젝션 컬럼을 제거하지 않습니다. #73930을(를) 수정합니다. #66465을(를) 수정합니다. #74577 (Dmitry Novik). Tuple컬럼을 사용하고 희소 직렬화가 활성화된 테이블 간의INSERT SELECT쿼리를 수정했습니다. #74698 (Anton Popov).- 함수
right가 음수 상수 오프셋에서 올바르게 동작하지 않습니다. #74701 (Daniil Ivanik). - 클라이언트 측의 잘못된 디컴프레션 때문에 gzip으로 압축된 데이터 삽입이 간헐적으로 실패하던 문제를 수정했습니다. #74707 (siyuan).
- 와일드카드가 포함된 GRANT에 대한 부분 REVOKE가 예상보다 더 많은 권한을 제거할 수 있습니다. #74263 이슈를 해결합니다. #74751 (pufit).
- Keeper 수정: 디스크에서 로그 엔트리를 읽는 과정의 문제를 해결했습니다. #74785 (Antonio Andelic).
- SYSTEM REFRESH/START/STOP VIEW에 대한 권한 검사 방식을 수정했습니다. 이제 특정 VIEW에 대해 쿼리를 실행할 때
*.*에 대한 권한은 필요하지 않고, 해당 VIEW에 대한 권한만 있으면 됩니다. #74789 (Alexander Tokmakov). hasColumnInTable함수가 별칭 컬럼을 처리하지 않습니다. 별칭 컬럼에서도 동작하도록 수정했습니다. #74841 (Bharat Nallan).- Azure Blob Storage에서 빈 컬럼이 있는 테이블의 데이터 파트를 병합하는 동안 발생하던 FILE_DOESNT_EXIST 오류를 수정합니다. #74892 (Julia Kartseva).
- 임시 테이블을 조인할 때의 프로젝션 컬럼 이름을 수정하여 #68872를 해결했습니다. #74897 (Vladimir Cherkasov).
빌드/테스트/패키징 개선
- 범용 설치 스크립트가 macOS에서도 설치를 제안하도록 개선되었습니다. #74339 (Alexey Milovidov).