이전에는 countMatches 함수가, 패턴이 빈 매치를 허용하더라도 첫 번째 빈 매치를 발견하면 카운팅을 중단했습니다. 이 문제를 해결하기 위해, 이제 countMatches는 빈 매치가 발생하면 한 글자씩 전진하면서 실행을 계속합니다. 이전 동작을 유지하려는 사용자는 count_matches_stop_at_empty_match 설정을 활성화하면 됩니다. #81676 (Elmi Ahmadov).
이전에는 BACKUP 쿼리, 머지(merge) 및 뮤테이션이 로컬 트래픽(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)에 대해 서버 전역 스로틀러를 사용하지 않고, 전용 서버 설정(max_backup_bandwidth_for_server, max_mutations_bandwidth_for_server, max_merges_bandwidth_for_server)에 의해서만 스로틀링되었습니다. 이제는 두 종류의 스로틀러를 동시에 사용합니다. #81753 (Sergei Trifonov).
지연 구체화(lazy materialization)는 분석기(analyzer)가 활성화된 경우에만 활성화되도록 했습니다. 이는 분석기 없이 사용하는 경우 발생할 수 있는 일부 문제(예: 조건에서 indexHint()를 사용하는 경우)를 피하기 위한 것입니다. #83791 (Igor Nikonov).
기본 식에서 점(.)이 포함된 식별자에는 백틱을 사용해야 하며, 이를 통해 복합 식별자로 파싱되는 것을 방지합니다. #83162 (Pervakov Grigorii).
PostgreSQL 스타일의 heredoc 구문 $tag$ string contents... $tag$를 지원합니다. 이 구문은 dollar-quoted 문자열 리터럴이라고도 합니다. 이전 버전에서는 태그에 대한 제약이 더 적었으며, 구두점과 공백을 포함한 임의의 문자를 포함할 수 있었습니다. 이로 인해 달러 문자로 시작할 수 있는 식별자와 파싱 모호성이 발생했습니다. 한편 PostgreSQL은 태그에 단어 문자만 허용합니다. 이 문제를 해결하기 위해 이제 heredoc 태그에는 단어 문자만 포함되도록 제한합니다. #84731 이슈를 종료합니다. #84846 (Alexey Milovidov).
SYSTEM RESTART REPLICAS는 이제 SHOW TABLES 권한이 있는 데이터베이스의 레플리카만 재시작합니다. 이전에는 해당 데이터베이스에 대한 권한이 없더라도, Lazy 데이터베이스의 테이블이 동시에 드롭되는 동안 이 쿼리로 인해 해당 테이블이 다시 활성화되는 문제가 있었습니다. #83321 (Alexey Milovidov).
azureBlobStorage, deltaLakeAzure, icebergAzure 함수가 AZURE 권한을 올바르게 검증하도록 업데이트되었습니다. 모든 클러스터 버전 함수(-Cluster 함수)는 이제 해당 비클러스터(일반) 함수와 동일한 권한을 검증합니다. 권한 오류를 방지하려면 -Cluster 함수를 호출하는 사용자에게 적절한 권한(예: GRANT S3 ON *.* TO user)이 부여되어 있는지 확인해야 합니다. 또한 icebergLocal 및 deltaLakeLocal 함수는 이제 FILE 권한 검사를 강제합니다. #84938 ([Nikita Mikhaylov](https://github.com/nikitamikhaylov
새로운 데이터 타입 Time([H]HH:MM:SS) 및 Time64([H]HH:MM:SS[.fractional])를 추가하고, 몇 가지 기본 캐스트 함수와 다른 데이터 타입과 상호 작용하는 함수들도 함께 추가했습니다. 레거시 함수 ToTime과의 호환성을 위한 설정도 추가했습니다. #81217 (Yarik Briukhovetskyi).
모든 Iceberg 위치 기반 삭제(positional delete) 파일을 데이터 파일로 병합합니다. 이를 통해 Iceberg 스토리지의 Parquet 파일 개수와 크기를 줄일 수 있습니다. 구문: OPTIMIZE TABLE table_name. #85250 (scanhex12).
Iceberg에 대해 DROP TABLE을 지원합니다 (REST/Glue 카탈로그에서 제거 + 테이블 메타데이터 제거). #85395 (scanhex12).
merge-on-read 포맷의 Iceberg에 대해 ALTER DELETE 뮤테이션을 지원합니다. #85549 (scanhex12).
이제 Merge 타입 테이블뿐 아니라 모든 테이블에서 _table 가상 컬럼을 지원합니다. #63665 (Xiaozhe Yu).
Float32 및 Float64 타입 컬럼에 대해 손실 압축이지만 오류가 일정 범위 내로 제한되는 압축 코덱인 SZ3를 추가했습니다. #67161 (scanhex12).
MergeTree 계열 테이블에 대해 경량 업데이트(lightweight update)를 지원합니다. 경량 업데이트는 새로운 구문 UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>을 사용하여 수행할 수 있습니다. 또한 lightweight_delete_mode = 'lightweight_update' 설정을 활성화하여 경량 업데이트를 통해 경량한 삭제(lightweight delete)를 수행하도록 구현을 추가했습니다. #82004 (Anton Popov).
MergeTree 계열 테이블에서 _part_granule_offset 가상 컬럼을 지원합니다. 이 컬럼은 각 행이 속한 데이터 파트 내에서 해당 granule/mark의 0부터 시작하는 인덱스를 나타냅니다. 이 변경으로 #79572가 해결됩니다. #82341 (Amos Bird).
병렬 레플리카 환경에서 프로젝션으로부터의 읽기가 구현되었습니다. 프로젝션 지원 활성화 여부를 제어하기 위한 새로운 설정 parallel_replicas_support_projection이 추가되었습니다. 구현을 단순화하기 위해 프로젝션 지원은 parallel_replicas_local_plan이 활성화되어 있을 때에만 사용됩니다. #82807 (zoomxi).
새로운 출력 포맷으로 Hash를 추가했습니다. 이 포맷은 결과의 모든 컬럼과 행에 대해 단일 해시값을 계산합니다. 이는 예를 들어 데이터 전송이 병목이 되는 사용 사례에서 결과의 「지문(fingerprint)」을 계산하는 데 유용합니다. 예시: SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hash는 e5f9e676db098fdb9530d2059d8c23ef를 반환합니다. #84607 (Robert Schulze).
서버 설정 cpu_slot_preemption은 워크로드에 대한 선점형 CPU 스케줄링을 활성화하고, 워크로드 간 CPU 시간의 max-min 공정 할당을 보장합니다. CPU 스로틀링을 위한 새로운 워크로드 설정이 추가되었습니다: max_cpus, max_cpu_share, max_burst_cpu_seconds. #80879 (Sergei Trifonov).
메모리 효율적인 집계 중에 일부 버킷을 순서대로가 아닌 방식으로 전송할 수 있도록 하는 새로운 로직을 추가했습니다(설정 enable_producing_buckets_out_of_order_in_aggregation으로 제어되며, 기본값으로 활성화되어 있습니다). 일부 집계 버킷이 다른 버킷보다 병합에 훨씬 더 오랜 시간이 걸리는 경우, 그 사이에 이니시에이터가 더 높은 버킷 ID를 가진 버킷을 병합할 수 있게 하여 성능을 향상합니다. 단점은 잠재적으로 더 높은 메모리 사용량이지만, 크게 증가하지는 않습니다. #80179 (Nikita Taranov).
TOTALS 단계 이후의 파이프라인이 멀티스레드로 동작하도록 만들었습니다. #80331 (UnamedRus).
집계 쿼리에 NOT NULL 컬럼에 대한 단일 COUNT() 함수만 포함된 경우, 집계 로직이 해시 테이블 프로빙 시점에 완전히 인라인됩니다. 이는 집계 상태를 할당하고 유지할 필요가 없어 메모리 사용량과 CPU 오버헤드를 크게 줄여 줍니다. 이는 #81982의 일부를 해결합니다. #82104 (Amos Bird).
여러 문자열 또는 숫자 컬럼으로 GROUP BY를 수행할 때 직렬화된 키를 열 지향 방식으로 계산합니다. #83884 (李扬).
JOIN 입력 및 출력 블록(조인 알고리즘이 지원하는 경우)에 대한 최소 블록 크기(행 기준)를 제어하기 위해 새로운 설정 min_joined_block_size_rows (min_joined_block_size_bytes와 유사하며 기본값은 65409)을 추가합니다. 작은 블록은 병합됩니다. #81886 (Nikita Taranov).
일반적인 단일 키 컬럼 케이스에서 해시 맵에 대한 추가 루프를 제거하고, null_map 및 join_mask가 항상 true/false인 경우 해당 체크를 제거하여 HashJoin의 성능을 최적화합니다. #82308 (Nikita Taranov).
#82308의 null_map 및 JoinMask에 대한 최적화를, 여러 개의 분리된 절(disjunct)을 가진 JOIN 케이스에도 적용했습니다. 또한 KnownRowsHolder 데이터 구조를 최적화했습니다. #83041 (Nikita Taranov).
각 플래그 접근 시 해시를 계산하는 것을 피하기 위해, 조인 플래그에 단순한 형태의 std::vector<std::atomic_bool>을 사용합니다. #83043 (Nikita Taranov).
해시 JOIN 메인 루프 바깥에서 max_joined_block_rows를 처리합니다. ALL JOIN의 성능이 소폭 향상됩니다. #83216 (Nikolai Kochetov).
HashJoin이 lazy 출력 모드를 사용할 때 결과 컬럼에 대한 메모리를 사전에 할당하지 않습니다. 특히 매치 수가 적을 때 비효율적이기 때문입니다. 또한 조인이 완료된 후에는 정확한 매치 개수를 알 수 있으므로, 더 정확하게 미리 할당할 수 있습니다. #83304 (Nikita Taranov).
오른쪽 측이 조인 키 컬럼에 의해 함수적으로 결정되는 경우(모든 행이 고유한 조인 키 값을 갖는 경우), 모든 LEFT/INNER JOIN은 자동으로 RightAny로 변환됩니다. #84010 (Nikita Taranov).
네트워크 연결에 연관된 단일 스레드 대신 파이프라인 스레드에서 블록의 압축 및 압축 해제와 직렬화 및 역직렬화를 처리하는 옵션을 도입했습니다. enable_parallel_blocks_marshalling 설정으로 제어합니다. 이 설정은 시작 노드와 원격 노드 간에 대량의 데이터를 전송하는 분산 쿼리를 가속하는 데 도움이 됩니다. #78694 (Nikita Taranov).
각 세그먼트에서 INSERT SELECT가 독립적으로 실행되는 모드에서 병렬 분산 INSERT SELECT가 기본적으로 활성화되었습니다. parallel_distributed_insert_select 설정을 참고하십시오. #80425 (Igor Nikonov).
네이티브 프로토콜에서 로그와 프로파일 이벤트를 압축합니다. 100개 이상의 레플리카가 있는 클러스터에서는 압축되지 않은 프로파일 이벤트가 초당 1~10 MB를 사용하며, 느린 인터넷 연결에서는 진행 막대가 느리게 동작합니다. 이 변경으로 #82533를 해결합니다. #82535 (Alexey Milovidov).
각 세그먼트에서 INSERT SELECT가 독립적으로 실행되는 모드에서 병렬 분산 INSERT SELECT가 기본적으로 활성화되었습니다. parallel_distributed_insert_select 설정을 참고하십시오. #83040 (Igor Nikonov).
이제 블룸 필터 인덱스는 column이 Array 타입이 아닌 경우의 has([c1, c2, ...], column)과 같은 조건에 사용됩니다. 이는 해당 쿼리의 성능을 개선하여 IN 연산자만큼 효율적으로 만듭니다. #83945 (Doron David).
인덱스를 파일 크기 증가 순으로 처리합니다. 전체 인덱스 처리 순서는 (각각 단순성과 선택도 때문에) minmax 인덱스와 벡터 인덱스를 우선하며, 이후에는 작은 인덱스를 처리합니다. minmax/벡터 인덱스 사이에서도 더 작은 인덱스를 우선합니다. #84094 (Maruth Goyal).
이전에는 텍스트 인덱스 데이터가 여러 세그먼트로 분리되었으며(각 세그먼트 크기의 기본값은 256 MiB였습니다), 이는 텍스트 인덱스를 빌드할 때 메모리 사용량을 줄일 수 있었지만 디스크 공간 요구 사항을 증가시키고 쿼리 응답 시간을 늘렸습니다. #84590 (Elmi Ahmadov).
동치 클래스(equivalence class)를 사용하여 불필요한 JOIN 연산을 제거함으로써 상관 서브쿼리(correlated subquery)에 대해 생성되는 실행 계획을 최적화합니다. 모든 상관 컬럼에 대해 동치 표현식이 존재하는 경우, query_plan_correlated_subqueries_use_substitution SETTING이 활성화되어 있으면 CROSS JOIN이 생성되지 않습니다. #82435 (Dmitry Novik).
함수 EXISTS의 인수로 상관 서브쿼리가 사용되는 경우, 필요한 컬럼만 읽도록 합니다. #82443 (Dmitry Novik).
Azure Blob Storage에 대해 curl HTTP 클라이언트를 poco HTTP 클라이언트로 대체했습니다. 이들 클라이언트에 S3의 설정을 반영하는 여러 설정을 도입했습니다. Azure와 S3 모두에 대해 매우 짧은 연결 타임아웃을 도입했습니다. Azure 프로필 이벤트와 메트릭에 대한 분석 및 관찰 기능이 개선되었습니다. 새 클라이언트는 기본적으로 사용되며 Azure Blob Storage에서 콜드 쿼리의 지연 시간을 크게 개선합니다. azure_sdk_use_native_client=false로 설정하면 이전 Curl 클라이언트를 다시 사용할 수 있습니다. #83294 (alesapin).
높은 동시 부하 상황에서 락 경합을 줄이기 위해 스토리지 스냅샷 데이터를 생성하는 동안 락을 보유하지 않도록 변경했습니다. #83510 (Duc Canh Le).
임시 파트를 제거하는 데에는 시간이 오래 걸릴 수 있으며(특히 S3 사용 시), 현재는 MergeTreeBackgroundExecutor에서 전역 락을 보유한 상태로 이 작업을 수행하고 있습니다. 연결 손실로 인해 모든 테이블을 재시작해야 하고 백그라운드 작업이 완료될 때까지 기다려야 할 때, 테이블이 최대 한 시간 동안 읽기 전용 모드에 머무를 수 있습니다. 하지만 cancel을 호출하는 데에는 이 락이 필요하지 않은 것으로 보입니다. #84311 (Alexander Tokmakov).
새로운 Parquet 리더 구현이 추가되었습니다. 일반적으로 더 빠르며 페이지 단위 필터 푸시다운과 PREWHERE를 지원합니다. 현재 실험적 기능입니다. 설정 input_format_parquet_use_native_reader_v3를 사용하여 활성화할 수 있습니다. #82789 (Michael Kolupaev).
파싱 오류가 발생하지 않는 경우 serializer를 재사용하여 ProtobufSingle 입력 포맷의 성능을 향상했습니다. #83613 (Eduard Karacharov).
다수의 문자열 처리 함수 구현을 최적화하고 단순화했습니다. 여러 함수에 대한 잘못된 문서를 수정했습니다. 참고: String 컬럼 및 String 컬럼을 포함하는 복합 타입에 대해 byteSize가 반환하는 값이 빈 문자열 하나당 9바이트에서 8바이트로 변경되었으며, 이는 의도된 동작입니다. #85063 (Alexey Milovidov).
소스에 대해 새로운 액세스 타입 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_grants 설정으로 제어되며, 기본값은 비활성화입니다. #73659 (pufit).
사용자 이름에 대해 CREATE USER 쿼리에서 파라미터 사용을 허용합니다. #81387 (Diskein).
코어 덤프에서 민감한 데이터를 제외합니다. AWS 라이브러리와 호환되는 AwsNodumpMemoryManager 와 STL과 호환되는 JemallocNodumpSTLAllocator 두 가지 allocator(메모리 할당자)를 추가했습니다. 둘 다 Jemalloc allocator의 래퍼입니다. 이 allocator들은 Jemalloc의 extent hook과 madvise 를 사용해 메모리 페이지를 「덤프하지 않음(don't dump)」으로 표시합니다. S3 자격 증명, 사용자 자격 증명, 일부 쿼리 데이터에 사용됩니다. #82441 (Miсhael Stetsyuk).
임시 사용자(ephemeral user)가 생성한 VIEW 는 이제 실제 사용자의 사본을 저장하며, 임시 사용자가 삭제된 이후에도 더 이상 무효화되지 않습니다. #84763 (pufit).
외부 인증의 forward_headers 를 대소문자를 구분하지 않는(case-insensitive) 방식으로 매칭합니다. #84737 (ingodwerust).
system.grants 에 parameter 컬럼을 추가하여 GRANT READ/WRITE 의 소스 타입과 GRANT TABLE ENGINE 의 테이블 엔진을 식별할 수 있습니다. #85643 (MikhailBurdukov).
Iceberg positional delete 파일에 대한 메모리 사용량을 최적화합니다. 모든 delete 파일 데이터를 메모리에 적재하는 대신, Parquet delete 파일에서 현재 row group만 RAM에 유지합니다. 이를 통해 대용량 positional delete 파일을 처리할 때 메모리 사용량이 크게 감소합니다. #85329 (scanhex12).
각 데이터 파일에 대한 객체를 명시적으로 저장하지 않고도 Iceberg 테이블에서 객체를 비동기적으로 순회할 수 있도록 합니다. #85369 (Daniil Ivanik).
DeltaLake 테이블 엔진을 개선합니다. delta-kernel-rs에 ExpressionVisitor API가 있으며, 이 PR에서 이를 구현하여 파티션 컬럼 식 변환에 적용합니다(이로써 이전에 코드에서 사용하던 delta-kernel-rs의 오래된 사용 중단(deprecated) 방식이 대체됩니다). 앞으로 이 ExpressionVisitor는 통계 기반 프루닝(statistics based pruning)과 일부 Delta Lake 고유 기능을 구현하는 데에도 사용될 예정입니다. 추가적으로, 이 변경의 목적은 DeltaLakeCluster 테이블 엔진에서 파티션 프루닝(partition pruning)을 지원하는 것입니다(파싱된 표현식의 결과인 ActionsDAG가 직렬화되어 데이터 경로와 함께 이니시에이터에서 전송됩니다. 프루닝에 필요한 이러한 정보는 데이터 파일 목록을 나열할 때의 메타 정보로만 제공되며, 이 작업은 이니시에이터만 수행하지만, 해당 정보는 각 리딩 서버에서 데이터를 읽을 때 적용되어야 합니다). #81136 (Kseniia Sumarokova).
DeltaLakeCluster 테이블 함수에서 파티션된 데이터를 읽는 동작을 수정합니다. 이 PR에서는 클러스터 함수 프로토콜 버전을 증가시켜, 이니시에이터에서 레플리카로 추가 정보를 전송할 수 있도록 합니다. 이 추가 정보에는 파티션 컬럼을 파싱하는 데 필요한 delta-kernel 변환 표현식이 포함되며(향후에는 생성 컬럼과 같은 다른 항목도 포함될 수 있습니다). #82132 (Kseniia Sumarokova).
이제 Datalake 데이터베이스가 보다 이해하기 쉬운 예외를 발생시키도록 개선되었습니다. #81211 이슈를 수정합니다. #82304 (alesapin).
FormatParserGroup을 두 개의 독립적인 구조체로 분리했습니다. 첫 번째는 공유 연산 및 I/O 리소스를 담당하고, 두 번째는 공유 필터 리소스(필터 ActionDag, KeyCondition)를 담당합니다. 이는 서로 다른 스레드가 이러한 구조를 보다 유연하게 공유하여 사용할 수 있도록 하기 위한 것입니다. #83997 (Daniil Ivanik).
Azure 설정에 누락되어 있던 partition_columns_in_data_file를 추가했습니다. #85373 (Arthur Passos).
system.tables에 데이터 레이크 테이블을 추가하는 동작을 제어하기 위해 show_data_lake_catalogs_in_system_tables 플래그를 추가했습니다. 이는 #85384를 해결합니다. #85411 (Smita Kulkarni).
s3_plain_rewritable에서 moveFile 및 replaceFile 메서드를 구현하여 데이터베이스 디스크로 사용할 수 있도록 합니다. #79424 (Tuan Pham Anh).
max_remote_read_network_bandwidth_for_server 및 max_remote_write_network_bandwidth_for_server 제한과 관련된 문제를 방지하기 위해, S3 읽기 및 쓰기 요청을 전체 S3 요청이 아닌 HTTP 소켓 수준에서 스로틀링(throttling)합니다. #81837 (Sergei Trifonov).
이 PR에서는 s3_slow_all_threads_after_network_error 설정이 활성화되었을 때 S3 재시도 메커니즘에 지터(jitter)를 도입합니다. #81849 (zoomxi).
명시적으로 제공된 IAM 역할을 사용한 AWS S3 인증을 구현합니다. GCS에 대해서는 OAuth를 구현합니다. 이러한 기능은 최근까지 ClickHouse Cloud에서만 사용 가능했으나, 이제 오픈소스로 공개되었습니다. 객체 스토리지의 연결 파라미터 직렬화와 같은 일부 인터페이스를 동기화합니다. #84011 (Alexey Milovidov).
외부 집계/정렬 시 임의의 스토리지 정책(예: S3와 같은 객체 스토리지)을 사용할 수 있도록 허용합니다. #84734 (Azat Khuzhin).
서버 종료 시 서버의 어떤 테이블도 종료하기 전에 S3(Azure/etc)Queue 스트리밍을 먼저 종료하도록 했습니다. #83530 (Kseniia Sumarokova).
S3Queue 테이블 수준에서 구체화된 뷰(Materialized View) 삽입 설정 변경을 지원합니다. 새로운 S3Queue 수준 설정 min_insert_block_size_rows_for_materialized_views 및 min_insert_block_size_bytes_for_materialized_views가 추가되었습니다. 기본적으로 프로필 수준 설정이 사용되며, S3Queue 수준 설정이 이를 재정의합니다. #83971 (Kseniia Sumarokova).
Keeper 개선: 백그라운드 스레드에서 디스크 간 changelog 파일을 이동합니다. 이전에는 changelog를 다른 디스크로 이동할 때, 이동이 완료될 때까지 Keeper 전체가 차단되었습니다. 이로 인해 이동 작업이 오래 걸리는 경우(예: S3 디스크로 이동) 성능 저하가 발생했습니다. #82485 (Antonio Andelic).
Keeper 개선: 새로운 설정 keeper_server.cleanup_old_and_ignore_new_acl을 추가했습니다. 이를 활성화하면 모든 노드의 ACL이 초기화되고, 새 요청에 대한 ACL은 무시됩니다. 노드에서 ACL을 완전히 제거하는 것이 목적이라면, 새 스냅샷이 생성될 때까지 이 설정을 활성화된 상태로 유지하는 것이 중요합니다. #82496 (Antonio Andelic).
encrypt_decrypt 도구가 이제 암호화된 ZooKeeper 연결을 지원합니다. #84764 (Roman Vasin).
keeper_server.coordination_settings.latest_logs_cache_entry_count_threshold 및 keeper_server.coordination_settings.commit_logs_cache_entry_count_threshold를 사용해 Keeper 로그 엔트리 캐시 크기를 엔트리 개수 기준으로 제한합니다. #84877 (Antonio Andelic).
Wide 파트에 columns_substreams.txt 파일을 추가하여, 해당 파트에 저장된 모든 서브스트림을 추적합니다. 이를 통해 JSON 및 Dynamic 타입에서 동적 스트림을 추적할 수 있으므로, 동적 스트림 목록을 얻기 위해 이러한 컬럼의 샘플을 읽지 않아도 됩니다(예: 컬럼 크기 계산). 또한 이제 모든 동적 스트림이 system.parts_columns에 반영됩니다. #81091 (Pavel Kruglov).
분산 쿼리(distributed queries)와 병렬 레플리카(parallel replicas)
새 설정인 enable_add_distinct_to_in_subqueries가 도입되었습니다. 이 설정을 사용하면 ClickHouse가 분산 쿼리의 IN 절에 있는 서브쿼리에 자동으로 DISTINCT를 추가합니다. 이를 통해 세그먼트 간에 전송되는 임시 테이블 크기를 크게 줄이고 네트워크 효율성을 향상할 수 있습니다. 참고: 이는 네트워크 전송량을 줄이는 대신 각 노드에서 추가 병합(중복 제거) 작업이 필요한 트레이드오프입니다. 네트워크 전송이 병목이고 병합 비용이 허용 가능한 경우에 이 설정을 활성화하십시오. #81908 (fhw12345).
address_expression 인수에 클러스터가 제공된 경우 병렬 레플리카와 함께 remote-() 테이블 함수 사용을 지원합니다. 또한 #73295를 수정합니다. #82904 (Igor Nikonov).
병렬 레플리카를 사용하는 조인은 이제 join logical step을 사용합니다. 병렬 레플리카를 사용하는 조인 쿼리에 문제가 발생하는 경우 SET query_plan_use_new_logical_join_step=0을 시도한 후 이슈를 보고하십시오. #83801 (Vladimir Cherkasov).
allow_experimental_join_condition 설정을 더 이상 사용되지 않는(obsolete) 것으로 표시합니다. #80566 (Vladimir Cherkasov).
전체 및 사용자별 네트워크 throttler는 초기화되지 않으므로, max_network_bandwidth_for_all_users 및 max_network_bandwidth_for_all_users 한도가 초과되지 않도록 보장합니다. #81729 (Sergei Trifonov).
옵티마이저가 특정 정규 표현식 패턴을 감지할 때 일부 replaceRegexpAll, replaceRegexpOne, extract 호출을 더 단순하고 효율적인 형태로 재작성할 수 있도록 하는 optimize_rewrite_regexp_functions 설정(기본값: 활성화)을 도입합니다. (이슈 #81981). #81992 (Amos Bird).
listen_backlog(기본값: 4096)을 기준으로 TCP 서버 큐(기본값: 64)를 튜닝합니다. #82045 (Azat Khuzhin).
서버를 재시작하지 않고도 실행 중에 max_local_read_bandwidth_for_server 및 max_local_write_bandwidth_for_server를 다시 로드할 수 있는 기능을 추가합니다. #82083 (Kai Zhu).
벡터 유사도 인덱스를 사용하기 위해 반드시 활성화해야 하는 enable_vector_similarity_index 설정을 도입합니다. 기존 설정인 allow_experimental_vector_similarity_index는 이제 사용이 중단되었으며(obsolete), 호환성을 위해 계속 동작합니다. #83459 (Robert Schulze).
비상관 EXISTS를 스칼라 서브쿼리로 실행합니다. 이를 통해 스칼라 서브쿼리 캐시를 사용할 수 있고, 결과를 상수 접기하여 인덱스에 유리합니다. 호환성을 위해 새로운 설정 execute_exists_as_scalar_subquery=1을 추가합니다. #85481 (Nikolai Kochetov).
복합 식별자에 대한 더 많은 경우를 해석할 수 있도록 지원합니다. 특히 기존 분석기와의 ARRAY JOIN 호환성을 개선합니다. 이전 동작을 유지하기 위해 새로운 설정 analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested를 도입합니다. #85492 (Nikolai Kochetov).
예를 들어 (a < 1 and a > 0) or b = 3와 같은 복잡한 CNF/DNF식을 통계를 사용해 추정합니다. #82663 (Han Fei).
어떤 경우에는 메트릭에 여러 차원이 필요합니다. 예를 들어 단일 카운터를 쓰는 대신 오류 코드별로 실패한 머지나 뮤테이션을 집계해야 할 수 있습니다. #83030 (Miсhael Stetsyuk).
MergeParts 항목에 대해 part_log 프로파일 이벤트에 UserTimeMicroseconds, SystemTimeMicroseconds, RealTimeMicroseconds와 같은 프로세스 리소스 메트릭을 추가합니다. #83460 (Vladimir Cherkasov).
이제 Cgroup 수준 및 시스템 전체 메트릭이 함께 보고됩니다. Cgroup 수준 메트릭은 CGroup<Metric>이라는 이름을 가지며, OS 수준 메트릭(procfs에서 수집됨)은 OS<Metric>이라는 이름을 가집니다. #84317 (Nikita Taranov).
동시 제한 큐(bounded queue)의 크기를 모니터링하기 위한 다차원 메트릭을 추가합니다. 큐 타입과 인스턴스 ID로 레이블링하여 관측성을 개선합니다. #84675 (Miсhael Stetsyuk).
DatabaseCatalog에 테이블 UUID를 수동으로 추가하여 읽기 전용 원격 디스크를 사용하는 데이터베이스를 attach 작업으로 연결할 때 발생하던 문제를 수정합니다. #82670 (Tuan Pham Anh).
distributed_ddl_output_mode='*_only_active'일 때, max_replication_lag_to_enqueue를 초과하는 복제 지연(replication lag)이 있는 새 레플리카나 복구된 레플리카를 기다리지 않도록 하여 DDL 작업 처리 방식을 개선합니다. 이를 통해 초기화 또는 복구 이후 새 레플리카가 활성화되었지만 큰 복제 로그를 누적한 경우 발생할 수 있는 DDL task is not finished on some hosts 오류를 방지합니다. 또한 복제 로그가 max_replication_lag_to_enqueue 이하로 내려갈 때까지 대기하는 SYSTEM SYNC DATABASE REPLICA STRICT 쿼리를 구현합니다. #83302 (Alexander Tokmakov).
SystemLogs 종료 순서를 일반 테이블 이후이면서(일반 테이블 이전이 아니라) 시스템 테이블 이전에 실행되도록 변경합니다. #83134 (Kseniia Sumarokova).
복제된 데이터베이스(Replicated database) 설정을 위해 서버 설정 logs_to_keep를 추가하여, 복제된 데이터베이스의 기본 logs_to_keep 매개변수를 구성할 수 있도록 합니다. 더 낮은 값은 ZooKeeper 노드 수를 줄여 줍니다(특히 데이터베이스가 많은 경우에 유리함), 반면 더 높은 값은 누락된 레플리카가 더 긴 다운타임 이후에도 따라잡을 수 있도록 해 줍니다. #84183 (Alexey Khatskevich).
복제된 데이터베이스의 설정 max_retries_before_automatic_recovery 기본값을 10으로 변경하여, 일부 상황에서 더 빠른 자동 복구가 가능하도록 합니다. #84369 (Alexander Tokmakov).
복제된 데이터베이스에서 append가 아닌 형식의 갱신 가능 구체화 뷰(Refreshable Materialized View) DDL 작업 시, 기존 임시 테이블의 생성 및 이름 변경 단계를 건너뛰어 성능을 최적화합니다. #84858 (Tuan Pham Anh).
이제 reinterpret() FUNCTION이 T가 고정 크기 데이터 타입일 때 Array(T)로의 변환을 지원합니다(이슈 #82621). #83399 (Shankar Iyer).
structureToProtobufSchema 및 structureToCapnProtoSchema 함수가 줄바꿈 문자를 사용하는 대신 널 종료 바이트(0 바이트)를 올바르게 추가하도록 수정하여, 출력에서 줄바꿈이 누락되는 문제와 널 바이트에 의존하는 함수(예: logTrace, demangle, extractURLParameter, toStringCutToZero, encrypt/decrypt)에서 발생할 수 있는 버퍼 오버플로를 방지합니다. #85062를 종료합니다. #85063 (Alexey Milovidov).
replaceRegexpAll 및 그 별칭인 REGEXP_REPLACE의 동작을 변경하여, 이전 매치가 문자열 전체를 처리한 경우에도 문자열 끝에서의 빈 매치를 허용하도록 했습니다(예: ^a*|a*$ 또는 ^|.*). 이 변경은 JavaScript, Perl, Python, PHP, Ruby의 동작 방식과는 일치하지만 PostgreSQL과는 다릅니다. #85063 (Alexey Milovidov).
여러 문자열 처리 함수의 구현을 최적화하고 단순화했습니다. 여러 함수에 대한 잘못된 문서를 수정했습니다. 참고: String 컬럼 및 String 컬럼을 포함하는 복합 타입에 대해 byteSize의 출력 값이 빈 문자열 하나당 9바이트에서 빈 문자열 하나당 8바이트로 변경되었으며, 이는 의도된 동작입니다. #85063 (Alexey Milovidov).
실시간으로 업데이트되거나 패치 파트에 의해 업데이트되는 컬럼에 의존하는 스키핑 인덱스를 더 세밀하게 비활성화합니다. 이제 스키핑 인덱스는 실시간 뮤테이션 또는 패치 파트의 영향을 받은 파트에서만 사용되지 않습니다. 이전에는 이러한 인덱스가 모든 파트에 대해 비활성화되었습니다. #84241 (Anton Popov).
파트를 검색하는 범위를 제한하기 위해, 예를 들어 로컬 메타데이터가 있는 디스크별로 범위를 제한할 수 있도록 MergeTree 설정 search_orphaned_parts_drives를 추가합니다. #84710 (Ilya Golshtein).
WHERE에 대한 read_in_order_use_virtual_row의 누락되었던 지원을 추가합니다. 이를 통해 PREWHERE로 완전히 푸시되지 않은 필터가 있는 쿼리에서 더 많은 파트 읽기를 생략할 수 있습니다. #84835 (Nikolai Kochetov).
MergeTree에서 "compact" Variant 판별자 직렬화 사용을 수정합니다. 이전에는 사용할 수 있었던 일부 경우에 이 방식이 사용되지 않았습니다. #84141 (Pavel Kruglov).
외부 라이브러리에서 수행되는 모든 메모리 할당이 이제 ClickHouse의 메모리 트래커에 표시되어, 메모리 사용량에 정확히 반영되도록 했습니다. 이로 인해 특정 쿼리에서 보고되는 메모리 사용량이 증가한 것처럼 보이거나 MEMORY_LIMIT_EXCEEDED 오류로 실패할 수 있습니다. #84082 (Nikita Mikhaylov).
암호화된 named collection에 대해 encrypted_buffer에 필요한 최소한의 메모리만 할당하도록 했습니다. #84432 (Pablo Marcos).
벡터 유사도 인덱스가 이제 이진 양자화(binary quantization)를 지원합니다. Binary quantization은 메모리 사용량을 크게 줄이고, 더 빠른 거리 계산 덕분에 벡터 인덱스를 구성하는 과정을 가속합니다. 또한 기존 vector_search_postfilter_multiplier 설정은 사용 중단되고, 보다 일반적인 설정인 vector_search_index_fetch_multiplier로 대체되었습니다. #85024 (Shankar Iyer).
벡터 유사도 인덱스를 사용한 근사 벡터 검색이 이제 GA(General Availability) 단계입니다. #85888 (Robert Schulze).
AsynchronousMetrics의 오류 처리가 개선되었습니다. /sys/block 디렉터리가 존재하지만 접근할 수 없는 경우, 서버는 블록 디바이스를 모니터링하지 않고 시작됩니다. #79229 해결. #83115 (Alexey Milovidov).
잘못 작성된 SELECT를 가진 materialized view가 포함된 INSERT에 대한 종속성 검사에 문제가 있어, 사용자에게 명확한 설명이 있는 의미 있는 오류 대신 모호한 std::exception이 반환될 수 있었습니다. 이제 수정되었습니다. 다음 이슈를 수정합니다: #82889. #83190 (Nikita Mikhaylov).
스토리지가 종료되는 동안 getStatus가 ErrorCodes::ABORTED 예외를 던집니다. 이전에는 이로 인해 select 쿼리가 실패했습니다. 이제 ErrorCodes::ABORTED 예외를 포착하고, 의도적으로 이를 무시합니다. #83435 (Miсhael Stetsyuk).
MongoDB: 문자열을 숫자형으로 암시적으로 파싱합니다. 이전에는 ClickHouse 테이블의 숫자 컬럼에 대해 MongoDB 소스에서 문자열 값이 수신되면 예외가 발생했습니다. 이제 엔진이 문자열에서 숫자 값을 자동으로 파싱하려고 시도합니다. #81167 이슈를 종료합니다. #84069 (Kirill Nikiforov).
지원되지 않는 아키텍처에서도 simdjson 사용을 허용합니다(이전에는 CANNOT_ALLOCATE_MEMORY 오류가 발생했습니다). #84966 (Azat Khuzhin).
첫 번째 인자가 상수 배열(Set)이고 두 번째 인자가 인덱스가 걸린 컬럼(부분집합)인 경우에도 활용될 수 있도록 블룸 필터 인덱스(일반, ngram, token)에 대한 지원을 개선하여, 더 효율적인 쿼리 실행이 가능하도록 합니다. #84700 (Doron David).
KeyValue 스토리지 기본 키(예: EmbeddedRocksDB, KeeperMap)에 대해 IN / GLOBAL IN 필터를 푸시다운할 때 Set 값의 타입 캐스팅을 허용합니다. #84515 (Eduard Karacharov).
ORDER BY ... LIMIT BY ... LIMIT N이 조합된 쿼리에서 ORDER BY가 PartialSorting으로 실행되는 경우, 카운터 rows_before_limit_at_least는 이제 정렬 변환에서 소비된 행 수가 아니라 LIMIT 절에 의해 소비된 행 수를 반영합니다. #78999 (Eduard Karacharov).
remote 함수 계열과 함께 사용할 때 loop 함수에서 발생하던 비정상 종료 문제를 수정합니다. loop(remote(...))에서 LIMIT 절이 제대로 준수되도록 합니다. #80299 (Julia Kartseva).
유닉스 epoch(1970-01-01) 이전과 최대 날짜(2106-02-07 06:28:15) 이후의 날짜를 처리할 때 to_utc_timestamp 및 from_utc_timestamp 함수의 동작이 잘못되던 문제를 수정했습니다. 이제 이 함수들은 각각 epoch 시작 시점과 최대 날짜로 값이 올바르게 제한되도록 동작합니다. #80498 (Surya Kant Ranjan).
transform_null_in=1 설정에서 왼쪽 인자가 NULL이고 서브쿼리 결과가 널 비허용(non-nullable)인 경우의 IN 실행을 수정합니다. #81584 (Pavel Kruglov).
Spark가 position delete 파일을 읽지 못하던 문제를 수정합니다. #85762 (scanhex12).
더 이상 매니페스트 파일에서 스키마를 가져오지 않고, 각 스냅샷에 대해 관련 스키마를 독립적으로 저장합니다. 각 데이터 파일에 대해서는 해당 스냅샷에서 관련 스키마를 유추합니다. 이전 동작은 existing 상태가 있는 매니페스트 파일 엔트리에 대해 Iceberg 스펙을 위반하고 있었습니다. #84588 (Daniil Ivanik).
이제 Iceberg는 SELECT 쿼리 사이에서 관련 스냅샷 버전을 캐시하려 하지 않고, 항상 스냅샷을 올바르게 해석하려고 시도합니다. 이전에 iceberg 스냅샷을 캐시하려던 시도는 시간 여행(time travel)이 사용되는 Iceberg 테이블에서 문제를 유발했습니다. #85038 (Daniil Ivanik).
컬럼 타입이 Nullable(널 허용) 타입으로 변경된 경우 프로젝션을 materialize할 때 발생하던 논리 오류를 수정합니다. #80741 (Pavel Kruglov).
enable_shared_storage_snapshot_in_query = 1인 경우 mergeTreeProjection 테이블 함수에서 상위 메타데이터를 잘못 사용하던 문제를 수정합니다. 이는 #82634를 위한 것입니다. #82638 (Amos Bird).
테이블에 프로젝션이 있고 lightweight_mutation_projection_mode = 'rebuild'인 상태에서, 사용자가 테이블의 임의 블록에서 모든 행(ALL rows)을 삭제하는 lightweight delete를 실행할 때 드물게 발생하던 ClickHouse 크래시를 수정합니다. #84158 (alesapin).
일부 쿼리를 parallel replicas로 실행하는 경우, initiator에서는 순서대로 읽기 최적화가 적용되지만 원격 노드에서는 적용되지 않을 수 있었습니다. 이로 인해 parallel replicas coordinator(initiator 측)와 원격 노드에서 서로 다른 읽기 모드가 사용되었고, 이는 논리적 오류였습니다. #80652 (Igor Nikonov).
서브쿼리에 FINAL이 포함된 경우 parallel replicas를 비활성화합니다. #81401 by . #83455 (zoomxi).
parallel replicas와 여러 INNER 조인 뒤에 RIGHT 조인이 있는 쿼리에서 발생하는 LOGICAL_ERROR를 수정합니다. 이러한 쿼리에는 parallel replicas를 사용하지 않습니다. #84299 (Vladimir Cherkasov).
역순 읽기(in reverse order) 최적화를 사용하는 parallel replicas 쿼리가 잘못된 결과를 생성할 수 있는 문제를 수정합니다. #85406 (Igor Nikonov).
머지(merge) 과정에서 예외가 발생했을 때 Aggregator에서 발생할 수 있던 크래시를 수정합니다. #81450 (Nikita Taranov).
머지(merge) 과정에서 예외가 발생했을 때 Aggregator에서 발생할 수 있던 크래시를 수정합니다. #82022 (Nikita Taranov).
arraySimilarity에서의 복사-붙여넣기 오류를 수정하여 UInt32와 Int32 가중치 사용을 허용하지 않도록 합니다. 테스트와 문서를 업데이트합니다. #82103 (Mikhail f. Shiryaev).
큰 수에 함수를 적용했을 때 발생하던 numericIndexedVectorPointwiseAdd, numericIndexedVectorPointwiseSubtract, numericIndexedVectorPointwiseMultiply, numericIndexedVectorPointwiseDivide 함수의 오버플로를 수정합니다. #82165 (Raufs Dunamalijevs).
WHERE function(key) IN (...) 조건을 WHERE key IN (...)인 것처럼 잘못 적용하던 Parquet 블룸 필터를 수정합니다. #81255 (Michael Kolupaev).
Decimal 타입에 대해 Parquet writer가 잘못된 통계 정보(최소/최대값)를 출력하던 문제를 수정합니다. #83754 (Michael Kolupaev).
비어 있는 요소가 있을 때 groupArraySample/groupArrayLast 역직렬화 과정에서, 입력이 비어 있으면 역직렬화가 바이너리의 일부를 건너뛰어 데이터 읽기 중 손상이 발생하고 TCP 프로토콜에서 UNKNOWN_PACKET_FROM_SERVER 오류가 발생할 수 있던 문제를 수정합니다. 이는 숫자 및 날짜와 시간 타입에는 영향을 주지 않습니다. #82763 (Pedro Ferreira).
RowBinary 포맷에서 NULL 값을 가진 JSON 경로를 기록할 때 발생하던 문제를 수정합니다. #83923 (Pavel Kruglov).
등식 피연산자의 타입이 다르거나 상수를 참조하는 경우, 필터를 JOIN 조건으로 병합하는 로직을 수정합니다. #83432를 수정합니다. #84145 (Dmitry Novik).
한 컬럼은 LowCardinality이고 다른 한 컬럼은 상수인 부등식 조건을 사용해 JOIN을 수행할 때 발생하는 논리적 오류 Expected single dictionary argument for function을 수정합니다. #81779를 닫습니다. #84019 (Alexey Milovidov).
DDLWorker 및 DatabaseReplicatedDDLWorker에서 markReplicasActive를 수정합니다. #81395 (Tuan Pham Anh).
DatabaseReplicated::getClusterImpl을 수정합니다. hosts의 첫 번째 요소(또는 여러 요소)의 id == DROPPED_MARK이고 동일한 세그먼트에 대한 다른 요소가 없는 경우, shards의 첫 번째 요소가 빈 벡터가 되어 std::out_of_range가 발생할 수 있습니다. #82093 (Miсhael Stetsyuk).
비동기 테이블 로딩 작업 수를 추적합니다. 실행 중인 작업이 있는 경우 TransactionLog::removeOldEntries에서 tail_ptr를 업데이트하지 않습니다. #82824 (Tuan Pham Anh).
MergeTree 테이블을 add_minmax_index_for_numeric_columns=1 또는 add_minmax_index_for_string_columns=1로 생성한 뒤, 이후 ALTER 작업에서 해당 인덱스가 구체화되면서 새로운 레플리카에서 Replicated 데이터베이스가 올바르게 초기화되지 못하던 문제를 수정합니다. #83751 (Nikolay Degterinsky).
ReplacingMergeTree 및 CollapsingMergeTree 엔진을 사용하는 테이블에 대한 경량 업데이트를 수정합니다. #84851 (Anton Popov).
테이블의 모든 컬럼을 업데이트하는 경량 업데이트에서 발생하던 논리 오류를 수정합니다. #84380 (Anton Popov).
버전 25.7 미만인 서버에서 생성된 ReplicatedMergeTree 엔진 테이블에 대한 경량 업데이트를 수정합니다. #84933 (Anton Popov).
ALTER TABLE ... REPLACE PARTITION 쿼리 실행 이후, 복제되지 않은 MergeTree 엔진을 사용하는 테이블에 대한 경량 업데이트를 수정합니다. #84941 (Anton Popov).
ReplicatedMergeTree에서 패치 파트 정리를 수정합니다. 이전에는, 패치 파트를 실제로 반영하는 병합되거나 변이된 파트가 다른 레플리카에서 다운로드될 때까지 경량 업데이트 결과가 레플리카에서 일시적으로 보이지 않을 수 있었습니다. #85121 (Anton Popov).
S3 client의 no_sign_request를 수정합니다. 이 옵션은 S3 요청에 대한 서명 과정을 명시적으로 생략하는 데 사용할 수 있습니다. 엔드포인트 기반 설정을 사용하여 특정 엔드포인트에 대해 정의할 수도 있습니다. #83379 (Antonio Andelic).
s3Cluster()에서 replicated MergeTree로 INSERT SELECT를 수행할 때 사용할 수 없는 노드는 건너뜁니다. #83676 (Igor Nikonov).
S3 요청 속도 저하(slowdown)에 대한 조기 반환 조건을 수정합니다. 모든 스레드가 재시도 가능한 오류로 인해 일시 중지된 경우 속도 저하 동작을 활성화하려면 s3_slow_all_threads_after_network_error 또는 backup_slow_all_threads_after_retryable_s3_error 둘 중 하나만 true이면 되도록 변경합니다. 이전에는 둘 다 true여야 했습니다. #85505 (Julia Kartseva).
Distributed 테이블 또는 remote table function을 통해 객체 스토리지 함수에서 읽을 때 발생하는 논리적 오류를 수정합니다. 다음 이슈들을 수정합니다: #84658, #85173, #52022. #85359 (alesapin).
Keeper 수정: 세션 종료 시 임시(ephemeral) 노드가 삭제될 때 전체 watch 개수가 올바르게 업데이트되도록 수정합니다. #83583 (Antonio Andelic).
Keeper changelog에 대한 순서가 뒤바뀐(out-of-order) 쓰기를 수정합니다. 이전에는 changelog에 대한 쓰기가 진행 중인 상태에서 롤백으로 인해 대상 파일이 동시에 변경될 수 있었습니다. 이로 인해 로그 불일치와 잠재적인 데이터 손실이 발생할 수 있었습니다. #84434 (Antonio Andelic).
RocksDB 스토리지를 사용하는 Keeper에서 이터레이터가 파괴되지 않아 발생하던 리소스 누수를 수정합니다. #84523 (Azat Khuzhin).
Keeper 설정 rotate_log_storage_interval = 0 값으로 인해 ClickHouse가 비정상 종료되던 문제를 수정합니다. (이슈 #83975). #84637 (George Larionov).
Glue Catalog 통합의 버그를 수정했습니다. 이제 ClickHouse는 일부 서브컬럼에 decimal이 포함된 중첩 데이터 타입의 테이블을 읽을 수 있습니다(예: map<string, decimal(9, 2)>). #81301 문제를 수정합니다. #82114 (alesapin).
이제 ClickHouse는 테이블 타입이 소문자로 지정된 Glue Catalog의 테이블을 읽습니다. #84316 (alesapin).
이제 Unity Catalog는 Delta가 아닌 테이블의 경우, 이상한 데이터 타입을 가진 스키마를 무시합니다. #85699 문제를 수정합니다. #85950 (alesapin).
함수 trim{Left,Right,Both}에서 이제 "FixedString(N)" 타입의 입력 문자열을 지원합니다. 예를 들어 SELECT trimBoth(toFixedString('abc', 3), 'ac')가 이제 정상적으로 동작합니다. #82691 (Robert Schulze).
LIMIT이 있는 병렬 분산 INSERT SELECT가 허용되어 있었으나, 이는 올바르지 않으며 대상 테이블에서 데이터 중복을 유발합니다. #84477 (Igor Nikonov).
JOIN 또는 서브쿼리가 존재하는 경우, 테이블 함수(table function)를 클러스터용 대체 함수로 치환하려고 시도하지 않도록 했습니다. #84335 (Konstantin Bogdanov).
분산 환경에서 상관 서브쿼리(correlated subquery)가 사용되는지 확인하는 검사를 추가하여 비정상 종료를 방지합니다. #82205 문제를 수정합니다. #85030 (Dmitry Novik).
distributed_depth를 *Cluster 함수의 지표로 사용하는 것은 올바르지 않았고 데이터 중복을 초래할 수 있으므로, 대신 client_info.collaborate_with_initiator를 사용합니다. #85734 (Konstantin Bogdanov).
Distributed 대상 테이블에 대한 병렬 분산 INSERT SELECT에서 WITH 구문의 전역 상수(global constant)를 지원합니다. 이전에는 쿼리가 Unknown expression identifier 오류를 발생시킬 수 있었습니다. #85811 (Nikolai Kochetov).
DatabaseReplicated와 함께 CREATE ... AS (SELECT * FROM s3Cluster(...))를 시도할 때 발생하던 논리 오류를 수정합니다. #85904 (Konstantin Bogdanov).
분산 테이블(Distributed table)의 ALTER 수행 시 sharding_key에 대한 검사를 추가합니다. 이전에는 잘못된 ALTER가 테이블 정의를 손상시키고 서버 재시작을 실패하게 만들 수 있었습니다. #86015 (Nikolay Degterinsky).
클라이언트에서 전역 컨텍스트를 사용하지 않도록 하여 데이터 레이스를 수정하고, session_timezone 재정의 동작을 수정했습니다. 이전에는 예를 들어 session_timezone가 users.xml/클라이언트 옵션에서는 비어 있지 않은 값으로, 쿼리 컨텍스트에서는 빈 값으로 설정된 경우 잘못되게도 users.xml의 값이 사용되었으나, 이제는 쿼리 컨텍스트가 항상 전역 컨텍스트보다 우선합니다. #82444 (Azat Khuzhin).
서버 작업이 멈추지 않도록 threadpool_writer_pool_size를 0으로 설정하는 것을 허용하지 않도록 했습니다. #82532 (Bharat Nallan).
role_cache_expiration_time_seconds 설정 구성에서 발생하던 사소한 정수 오버플로 문제를 해결했습니다(이슈 #83374). #83461 (wushap).
논리 오류를 유발할 수 있으므로 max_insert_block_size에 0 값을 설정하지 못하도록 했습니다. #83688 (Bharat Nallan).
estimateCompressionRatio()에서 block_size_bytes=0일 때 발생하던 무한 루프를 수정했습니다. #83704 (Azat Khuzhin).
date_time_input_format과 같은 매개변수가 HTTP multipart 사용 시 무시되던 문제를 수정했습니다. #85570 (Sema Checherinda).
이전에는 MongoDB 테이블 엔진 정의에서 host:port 인수에 경로 컴포넌트를 포함할 수 있었지만, 이는 아무 경고 없이 무시되었습니다. 현재 MongoDB 연동 기능에서는 이러한 테이블을 로드하지 않습니다. 이번 수정으로, MongoDB 엔진이 다섯 개의 인수를 갖는 경우에는 이러한 테이블을 로드하도록 허용하고 경로 컴포넌트는 무시하며, 인수에 지정된 데이터베이스 이름을 사용합니다. 참고: 이 수정 사항은 새로 생성된 테이블이나 mongo 테이블 함수(table function)를 사용하는 쿼리, 딕셔너리 소스 및 named collection(이름이 지정된 컬렉션)에는 적용되지 않습니다. #81942 (Vladimir Cherkasov).
SYSTEM DROP REPLICA 쿼리 실행 중 불필요한 getStatus() 호출을 제거합니다. 백그라운드에서 테이블이 삭제될 때 Shutdown for storage is called 예외가 발생하던 경우를 수정합니다. #85220 (Nikolay Degterinsky).
CREATE OR REPLACE 및 RENAME 쿼리에서 누락되어 있던 테이블 이름 길이 검사를 추가했습니다. #85326 (Michael Kolupaev).
JSON에 대한 ALTER UPDATE 실행 중 발생하던 크래시와 데이터 손상을 수정했습니다. #85383 (Pavel Kruglov).
긴 문자열 처리 시 CoalescingMergeTree에서 발생하던 세그폴트(segfault)를 수정합니다. 이 변경으로 #84582가 해결됩니다. #85709 (scanhex12).
MEMORY_LIMIT_EXCEEDED 오류에서 update_field가 있는 딕셔너리의 잠재적인 불일치 문제를 수정합니다. #85807 (Azat Khuzhin).
url() 테이블 FUNCTION이 비표준 포트에 접근할 때 Host 헤더에 포트 번호가 올바르게 포함되도록 HTTP 요청 처리를 수정했습니다. 이를 통해 개발 환경에서 흔히 사용되는 MinIO와 같은 S3 호환 서비스가 커스텀 포트를 사용할 때, presigned URL 사용 시 발생하던 인증 실패 문제가 해결됩니다. (Fixes #85898). #85921 (Tom Quist).