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

v25.8 Cloud 변경 로그

하위 호환성이 없는 변경 사항

JSON 및 데이터 포맷 변경

스토리지 및 파티셔닝

  • Hive 파티션 스타일 쓰기 지원을 추가하고 읽기 구현을 리팩터링합니다 (Hive 파티션 컬럼은 더 이상 가상 컬럼이 아닙니다). #76802 (Arthur Passos).
  • MergeTree 설정 write_marks_for_substreams_in_compact_parts를 기본값으로 활성화합니다. 새로 생성된 Compact 파트에서 서브컬럼 읽기 성능이 크게 향상됩니다. 버전 25.5 미만의 서버는 새로운 Compact 파트를 읽을 수 없습니다. #84171 (Pavel Kruglov).
  • SummingMergeTree에서 합산 대상으로 명시적으로 지정된 컬럼을 포함하는 RENAME COLUMN 또는 DROP COLUMN을 허용하지 않습니다. #81836 이슈를 종료합니다. #82821 (Alexey Milovidov).

함수 기능 개선

  • quoting_character가 예상치 못하게 발견되었을 때의 동작을 제어하는 새로운 인자 unexpected_quoting_character_strategyextractKeyValuePairs 함수에 도입되었습니다. 자세한 내용은 extractKeyValuePairs 함수 문서를 참조하십시오. #80657 (Arthur Passos).
  • 이전에는 countMatches 함수가, 패턴이 빈 매치를 허용하더라도 첫 번째 빈 매치를 발견하면 카운팅을 중단했습니다. 이 문제를 해결하기 위해, 이제 countMatches는 빈 매치가 발생하면 한 글자씩 전진하면서 실행을 계속합니다. 이전 동작을 유지하려는 사용자는 count_matches_stop_at_empty_match 설정을 활성화하면 됩니다. #81676 (Elmi Ahmadov).

데이터 타입 개선

  • Decimal에서 Float32로의 변환 정밀도를 개선합니다. Decimal에서 BFloat16으로의 변환을 구현합니다. #82660를 해결합니다. #82823 (Alexey Milovidov).

성능 및 리소스 관리

  • 이전에는 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).
  • 새로운 설정 cluster_function_process_archive_on_multiple_nodes가 추가되었습니다. 이 설정을 기본값인 true로 두면 클러스터 함수에서 아카이브를 처리하는 성능이 향상됩니다. 이전 버전에서 아카이브를 사용하는 클러스터 함수를 사용 중인 경우, 25.7+ 버전으로 업그레이드할 때 호환성을 유지하고 오류를 방지하기 위해 false로 설정해야 합니다. #82355 (Kseniia Sumarokova).
  • 이전 concurrent_threads_scheduler 기본값은 round_robin이었으며, 많은 수의 단일 스레드 쿼리(예: INSERT)가 존재하는 경우 공정하지 않은 것으로 나타났습니다. 이번 변경으로 더 안전한 대안인 fair_round_robin 스케줄러가 기본값이 되었습니다. #84747 (Sergei Trifonov).
  • 지연 구체화(lazy materialization)는 분석기(analyzer)가 활성화된 경우에만 활성화되도록 했습니다. 이는 분석기 없이 사용하는 경우 발생할 수 있는 일부 문제(예: 조건에서 indexHint()를 사용하는 경우)를 피하기 위한 것입니다. #83791 (Igor Nikonov).

스키마 및 SQL 구문

  • 삽입 가능한 컬럼이 없는 테이블은 생성이 금지됩니다. #81835 (Pervakov Grigorii).
  • 기본 식에서 점(.)이 포함된 식별자에는 백틱을 사용해야 하며, 이를 통해 복합 식별자로 파싱되는 것을 방지합니다. #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)이 부여되어 있는지 확인해야 합니다. 또한 icebergLocaldeltaLakeLocal 함수는 이제 FILE 권한 검사를 강제합니다. #84938 ([Nikita Mikhaylov](https://github.com/nikitamikhaylov

새 기능

데이터 타입

  • 새로운 데이터 타입 Time ([H]HH:MM:SS)Time64 ([H]HH:MM:SS[.fractional])를 추가하고, 몇 가지 기본 캐스트 함수와 다른 데이터 타입과 상호 작용하는 함수들도 함께 추가했습니다. 레거시 함수 ToTime과의 호환성을 위한 설정도 추가했습니다. #81217 (Yarik Briukhovetskyi).

함수

시스템 테이블

Iceberg 및 DeltaLake

  • Iceberg 스키마 진화에서 복합 타입을 지원합니다. #73714 (scanhex12).
  • insert 쿼리에 대한 Iceberg 쓰기를 도입합니다. #82692 (scanhex12).
  • Iceberg 테이블 엔진에 대해 위치 기반 삭제(positional deletes)를 지원합니다. #83094 (Daniil Ivanik).
  • 필드 ID별로 Iceberg 데이터 파일을 읽습니다. #83065 이슈를 해결합니다. #83653 (scanhex12).
  • CREATE 쿼리에 대한 Iceberg 쓰기를 지원합니다. #83927 이슈를 해결합니다. #83983 (scanhex12).
  • Glue 카탈로그에 대한 쓰기를 지원합니다. #84136 (scanhex12).
  • Iceberg REST 카탈로그에 대한 쓰기를 지원합니다. #84684 (scanhex12).
  • 모든 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).
  • DeltaLake로의 쓰기를 지원합니다. #79603 이슈를 해결합니다. #85564 (Kseniia Sumarokova).
  • min-max 프루닝(min-max pruning)을 위해 메타데이터(매니페스트 엔트리(manifest entries))에 더 많은 Iceberg 통계(컬럼 크기, 하한 및 상한)를 기록합니다. #85746 (scanhex12).
  • 단순 타입에 대해 Iceberg에서 컬럼 추가/삭제/수정(add/drop/modify)을 지원합니다. #85769 (scanhex12).

MergeTree 및 스토리지

  • 이제 Merge 타입 테이블뿐 아니라 모든 테이블에서 _table 가상 컬럼을 지원합니다. #63665 (Xiaozhe Yu).
  • Float32Float64 타입 컬럼에 대해 손실 압축이지만 오류가 일정 범위 내로 제한되는 압축 코덱인 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).

프로토콜 및 클라이언트 지원

SQL 및 쿼리 기능

  • DESCRIBE (SELECT ...)에 더해 DESCRIBE SELECT를 지원합니다. #82947 (Yarik Briukhovetskyi).
  • USE DATABASE {name} 구문 작성을 지원합니다. #81307 (Yarik Briukhovetskyi).
  • 병렬 레플리카 환경에서 프로젝션으로부터의 읽기가 구현되었습니다. 프로젝션 지원 활성화 여부를 제어하기 위한 새로운 설정 parallel_replicas_support_projection이 추가되었습니다. 구현을 단순화하기 위해 프로젝션 지원은 parallel_replicas_local_plan이 활성화되어 있을 때에만 사용됩니다. #82807 (zoomxi).

Formats

  • format_schema의 소스를 정의하는 format_schema_source 설정을 추가했습니다. #80874 (Tuan Pham Anh).
  • 새로운 출력 포맷으로 Hash를 추가했습니다. 이 포맷은 결과의 모든 컬럼과 행에 대해 단일 해시값을 계산합니다. 이는 예를 들어 데이터 전송이 병목이 되는 사용 사례에서 결과의 「지문(fingerprint)」을 계산하는 데 유용합니다. 예시: SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hashe5f9e676db098fdb9530d2059d8c23ef를 반환합니다. #84607 (Robert Schulze).

서버 설정 및 워크로드 관리

  • 서버 설정 cpu_slot_preemption은 워크로드에 대한 선점형 CPU 스케줄링을 활성화하고, 워크로드 간 CPU 시간의 max-min 공정 할당을 보장합니다. CPU 스로틀링을 위한 새로운 워크로드 설정이 추가되었습니다: max_cpus, max_cpu_share, max_burst_cpu_seconds. #80879 (Sergei Trifonov).
  • 워크로드 설정 max_waiting_queries이(가) 이제 지원됩니다. 쿼리 대기열의 크기를 제한하는 데 사용할 수 있습니다. 제한에 도달하면 이후의 모든 쿼리는 SERVER_OVERLOADED 오류와 함께 종료됩니다. #81250 (Oleg Doronin).
  • 설정된 쿼리 개수 또는 시간 임계값에 도달하면 TCP 연결을 끊습니다. #68000 문제를 해결합니다. #81472 (Kenny Sun).

Cloud storage

  • client_idtenant_id를 사용한 인증을 위해 AzureBlobStorageextra_credentials를 추가했습니다. #84235 (Pablo Marcos).

Keeper

실험적 기능

테이블 엔진과 테이블 함수

Text index improvements

  • 텍스트 인덱스를 검색하기 위한 범용 도구로 함수 searchAnysearchAll을 추가했습니다. #80641 (Elmi Ahmadov).
  • 텍스트 인덱스가 이제 string tokenizer를 지원합니다. #81752 (Elmi Ahmadov).
  • text 인덱스의 기본 인덱스 granularity 값을 64로 변경했습니다. 이를 통해 내부 벤치마크에서 평균 테스트 쿼리에 대한 예상 성능이 향상됩니다. #82162 (Jimmy Aguilar Mena).
  • 256비트 비트맵은 상태의 출력 레이블을 순서대로 저장하지만, 출력 상태는 해시 테이블에 나타나는 순서대로 디스크에 저장됩니다. 따라서 디스크에서 읽을 때 레이블이 잘못된 다음 상태를 가리키게 됩니다. #82783 (Elmi Ahmadov).
  • 현재 FST 트리는 압축되지 않은 상태로 디스크에 저장됩니다. 이로 인해 디스크에 쓰거나 디스크에서 읽을 때 성능이 저하되거나 I/O 대역폭 사용량이 증가할 수 있습니다. #83093 (Elmi Ahmadov).

기능 성숙도 업데이트

성능 개선

Query execution and aggregation

  • -If 집계 함수 조합기에 대한 간단한 최적화를 추가했습니다. #78454 (李扬).
  • 메모리 효율적인 집계 중에 일부 버킷을 순서대로가 아닌 방식으로 전송할 수 있도록 하는 새로운 로직을 추가했습니다(설정 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 (李扬).
  • -If 조합기에 대해 addManyDefaults를 구현했습니다. #83870 (Raúl Marín).

JOIN 최적화

  • JOIN 입력 및 출력 블록(조인 알고리즘이 지원하는 경우)에 대한 최소 블록 크기(행 기준)를 제어하기 위해 새로운 설정 min_joined_block_size_rows (min_joined_block_size_bytes와 유사하며 기본값은 65409)을 추가합니다. 작은 블록은 병합됩니다. #81886 (Nikita Taranov).
  • 일반적인 단일 키 컬럼 케이스에서 해시 맵에 대한 추가 루프를 제거하고, null_mapjoin_mask가 항상 true/false인 경우 해당 체크를 제거하여 HashJoin의 성능을 최적화합니다. #82308 (Nikita Taranov).
  • #82308null_mapJoinMask에 대한 최적화를, 여러 개의 분리된 절(disjunct)을 가진 JOIN 케이스에도 적용했습니다. 또한 KnownRowsHolder 데이터 구조를 최적화했습니다. #83041 (Nikita Taranov).
  • 각 플래그 접근 시 해시를 계산하는 것을 피하기 위해, 조인 플래그에 단순한 형태의 std::vector<std::atomic_bool>을 사용합니다. #83043 (Nikita Taranov).
  • 해시 JOIN 메인 루프 바깥에서 max_joined_block_rows를 처리합니다. ALL JOIN의 성능이 소폭 향상됩니다. #83216 (Nikolai Kochetov).
  • HashJoinlazy 출력 모드를 사용할 때 결과 컬럼에 대한 메모리를 사전에 할당하지 않습니다. 특히 매치 수가 적을 때 비효율적이기 때문입니다. 또한 조인이 완료된 후에는 정확한 매치 개수를 알 수 있으므로, 더 정확하게 미리 할당할 수 있습니다. #83304 (Nikita Taranov).
  • 오른쪽 측이 조인 키 컬럼에 의해 함수적으로 결정되는 경우(모든 행이 고유한 조인 키 값을 갖는 경우), 모든 LEFT/INNER JOIN은 자동으로 RightAny로 변환됩니다. #84010 (Nikita Taranov).
  • Join 모드에서 패치 파트를 적용하는 성능을 개선했습니다. #85040 (Anton Popov).

분산 쿼리 향상

  • 네트워크 연결에 연관된 단일 스레드 대신 파이프라인 스레드에서 블록의 압축 및 압축 해제와 직렬화 및 역직렬화를 처리하는 옵션을 도입했습니다. 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).
  • 병렬 레플리카에 대한 최소 작업 크기 계산을 수정했습니다. #84752 (Nikita Taranov).

인덱스 개선 사항

  • 벡터 유사도 인덱스를 사용하는 벡터 검색 쿼리는 스토리지 읽기와 CPU 사용량이 감소하여 더 낮은 지연 시간으로 완료됩니다. #79103 (Shankar Iyer).
  • 다른 인덱스 기반 필터링 메서드와 일치하도록 filterPartsByQueryConditionCache에서 merge_tree_min_{rows,bytes}_for_seek를 동일하게 적용합니다. #80312 (李扬).
  • 더 높은 세분도의 min-max 인덱스를 먼저 처리합니다. #75381 이슈를 해결합니다. #83798 (Maruth Goyal).
  • 이제 블룸 필터 인덱스는 columnArray 타입이 아닌 경우의 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 개선

  • azureBlobStorage 테이블 엔진은 이제 가능한 경우 관리 ID 인증 토큰을 캐시하고 재사용하여 요청 제한(throttling)을 피합니다. #79860 (Nick Blakely).
  • Azure Blob Storage에 대해 curl HTTP 클라이언트를 poco HTTP 클라이언트로 대체했습니다. 이들 클라이언트에 S3의 설정을 반영하는 여러 설정을 도입했습니다. Azure와 S3 모두에 대해 매우 짧은 연결 타임아웃을 도입했습니다. Azure 프로필 이벤트와 메트릭에 대한 분석 및 관찰 기능이 개선되었습니다. 새 클라이언트는 기본적으로 사용되며 Azure Blob Storage에서 콜드 쿼리의 지연 시간을 크게 개선합니다. azure_sdk_use_native_client=false로 설정하면 이전 Curl 클라이언트를 다시 사용할 수 있습니다. #83294 (alesapin).

스토리지 엔진 개선사항

  • Redis 및 KeeperMap 스토리지의 키 기준 필터 동작을 수정했습니다. #81833 (Pervakov Grigorii).
  • ATTACH PARTITION가 더 이상 모든 캐시를 비우지 않습니다. #82377 (Alexey Milovidov).
  • 높은 동시 부하 상황에서 락 경합을 줄이기 위해 스토리지 스냅샷 데이터를 생성하는 동안 락을 보유하지 않도록 변경했습니다. #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).

데이터 유형 및 직렬화 최적화

  • MergeTree에서 공유 데이터에 대한 JSON 서브컬럼의 새로운 직렬화 방식을 구현하여, 공유 데이터에서 JSON 서브컬럼을 읽는 성능을 크게 향상합니다. #83777 (Pavel Kruglov).
  • 코드를 단순화하여 문자열 역직렬화를 최적화하며, #38564 이슈를 해결합니다. #84561 (Alexey Milovidov).

파이프라인 및 실행 개선 사항

  • 파이프라인을 구성하는 동안 포트 헤더에서 메모리 복사를 최소화합니다. 원본 PR 작성자: heymind. #83381 (Raúl Marín).
  • 파이프라인 구성 성능을 향상합니다. #83631 (Raúl Marín).
  • MergeTreeReadersChain::getSampleBlock을 최적화합니다. #83875 (Raúl Marín).
  • 단일 행만 반환하기 위해 상수를 구체화하는 경우, 이 과정을 최적화합니다. #85071 (Alexey Milovidov).

메모리 및 리소스 최적화

  • 성능을 개선하기 위해 일부 jemalloc 설정을 조정합니다. #81807 (Antonio Andelic).
  • false sharing을 줄이기 위해 ProfileEvents의 Counter에 정렬(alignment)을 추가합니다. #82697 (Jiebin Sun).
  • CompressedReadBufferBase::readCompressedData에서 불필요한 memcpy 호출을 줄입니다. #83986 (Raúl Marín).

쿼리 계획 및 분석

로깅 개선

함수 최적화

  • 임시 데이터를 제거하여 largestTriangleThreeBuckets를 최적화했습니다. #84479 (Alexey Milovidov).
  • 다수의 문자열 처리 함수 구현을 최적화하고 단순화했습니다. 여러 함수에 대한 잘못된 문서를 수정했습니다. 참고: String 컬럼 및 String 컬럼을 포함하는 복합 타입에 대해 byteSize가 반환하는 값이 빈 문자열 하나당 9바이트에서 8바이트로 변경되었으며, 이는 의도된 동작입니다. #85063 (Alexey Milovidov).

Keeper 개선 사항

데이터 레이크(data lake) 개선 사항

  • delta-kernel-rs 백엔드를 사용하여 여러 파일의 병렬 처리 성능을 개선합니다. #85642 (Azat Khuzhin).

개선 사항

액세스 제어 및 보안

  • 소스에 대해 새로운 액세스 타입 READWRITE 를 도입하며, 소스와 관련된 이전 모든 액세스 타입은 사용 중단합니다. 이전에는 GRANT S3 ON *.* TO user 였으나, 이제는 GRANT READ, WRITE ON S3 TO user 입니다. 이를 통해 소스에 대한 READWRITE 권한을 분리할 수 있습니다. 예: 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.grantsparameter 컬럼을 추가하여 GRANT READ/WRITE 의 소스 타입과 GRANT TABLE ENGINE 의 테이블 엔진을 식별할 수 있습니다. #85643 (MikhailBurdukov).

백업 및 복구

데이터 무결성과 검증

  • 커밋 직전에 파트의 checksum.txt 파일이 일관된지 검증합니다. #76625 (Sema Checherinda).
  • 현재 미완료 데이터 뮤테이션의 영향을 받고 있는 컬럼 중 일부의 이름이 변경되게 되는 경우, RENAME COLUMN ALTER 뮤테이션을 시작하지 못하도록 금지합니다. #81823 (Mikhail Artemenko).
  • 이제 뮤테이션 스냅샷은 현재 보이는 파트들의 스냅샷을 기반으로 생성됩니다. 스냅샷에서 사용되는 뮤테이션 카운터 또한 포함된 뮤테이션을 기준으로 다시 계산됩니다. #82945 (Mikhail Artemenko).
  • 파트의 prefix와 suffix를 파싱하고, 상수가 아닌 컬럼에 대한 커버리지도 확인할 수 있는 기능을 추가합니다. #83377 (Mikhail Artemenko).

Iceberg 테이블 엔진

  • Iceberg 테이블 엔진에 대해 position delete를 지원합니다. #80237 (YanghongZhong).
  • 이제 ClickHouse는 Iceberg용 압축된 metadata.json 파일을 지원합니다. #70874 이슈를 해결합니다. #81451 (alesapin).
  • 복합 타입에 대해 field id로 Iceberg를 읽는 동작을 수정합니다. #84821 (scanhex12).
  • pyiceberg에서 읽을 수 있도록 Iceberg 쓰기를 지원합니다. #84466 (scanhex12).
  • 데이터 레이크 테이블 엔진에 스냅샷 버전을 추가합니다. #84659 (Pete Hampton).
  • Iceberg에서 version-hint 파일 쓰기를 지원합니다. 이 변경으로 #85097 이슈가 종료됩니다. #85130 (scanhex12).
  • iceberg_metadata_compression_method 설정을 통해 압축된 .metadata.json 파일을 지원합니다. 모든 ClickHouse 압축 방식을 지원합니다. 이 변경으로 #84895 이슈가 종료됩니다. #85196 (scanhex12).
  • Iceberg positional delete 파일에 대한 메모리 사용량을 최적화합니다. 모든 delete 파일 데이터를 메모리에 적재하는 대신, Parquet delete 파일에서 현재 row group만 RAM에 유지합니다. 이를 통해 대용량 positional delete 파일을 처리할 때 메모리 사용량이 크게 감소합니다. #85329 (scanhex12).
  • 각 데이터 파일에 대한 객체를 명시적으로 저장하지 않고도 Iceberg 테이블에서 객체를 비동기적으로 순회할 수 있도록 합니다. #85369 (Daniil Ivanik).
  • Iceberg equality delete를 지원합니다. #85843 (Han Fei).

DeltaLake 테이블 엔진

  • DeltaLake 테이블 엔진을 개선합니다. delta-kernel-rs에 ExpressionVisitor API가 있으며, 이 PR에서 이를 구현하여 파티션 컬럼 식 변환에 적용합니다(이로써 이전에 코드에서 사용하던 delta-kernel-rs의 오래된 사용 중단(deprecated) 방식이 대체됩니다). 앞으로 이 ExpressionVisitor는 통계 기반 프루닝(statistics based pruning)과 일부 Delta Lake 고유 기능을 구현하는 데에도 사용될 예정입니다. 추가적으로, 이 변경의 목적은 DeltaLakeCluster 테이블 엔진에서 파티션 프루닝(partition pruning)을 지원하는 것입니다(파싱된 표현식의 결과인 ActionsDAG가 직렬화되어 데이터 경로와 함께 이니시에이터에서 전송됩니다. 프루닝에 필요한 이러한 정보는 데이터 파일 목록을 나열할 때의 메타 정보로만 제공되며, 이 작업은 이니시에이터만 수행하지만, 해당 정보는 각 리딩 서버에서 데이터를 읽을 때 적용되어야 합니다). #81136 (Kseniia Sumarokova).
  • 데이터 레이크 클러스터 함수에서 파티션 프루닝을 수정합니다. #82131 (Kseniia Sumarokova).
  • DeltaLakeCluster 테이블 함수에서 파티션된 데이터를 읽는 동작을 수정합니다. 이 PR에서는 클러스터 함수 프로토콜 버전을 증가시켜, 이니시에이터에서 레플리카로 추가 정보를 전송할 수 있도록 합니다. 이 추가 정보에는 파티션 컬럼을 파싱하는 데 필요한 delta-kernel 변환 표현식이 포함되며(향후에는 생성 컬럼과 같은 다른 항목도 포함될 수 있습니다). #82132 (Kseniia Sumarokova).
  • 이제 Datalake 데이터베이스가 보다 이해하기 쉬운 예외를 발생시키도록 개선되었습니다. #81211 이슈를 수정합니다. #82304 (alesapin).
  • 스토리지 DeltaLake에서 내부 delta-kernel-rs 필터링(통계 및 파티션 프루닝)을 구현합니다. #84006 (Kseniia Sumarokova).
  • 설정 delta_lake_enable_expression_visitor_logging을 추가하여, 디버깅 시 테스트 로그 레벨에서도 지나치게 장황해질 수 있는 expression visitor 로그를 끌 수 있도록 합니다. #84315 (Kseniia Sumarokova).
  • 테이블 엔진 DeltaLake에서 특정 스냅샷 버전을 읽을 수 있도록 설정 delta_lake_snapshot_version을 추가합니다. #85295 (Kseniia Sumarokova).

데이터 레이크(data lake) 통합

  • 비동기 요청을 사용하여 데이터 카탈로그에서 테이블 목록 조회 속도를 향상했습니다. #81084 (alesapin).
  • Glue 카탈로그에서 TimestampTZ를 지원합니다. 이는 #81654를 해결합니다. #83132 (scanhex12).
  • 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 및 객체 스토리지

  • s3_plain_rewritable에서 moveFilereplaceFile 메서드를 구현하여 데이터베이스 디스크로 사용할 수 있도록 합니다. #79424 (Tuan Pham Anh).
  • max_remote_read_network_bandwidth_for_servermax_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).
  • 제거된 모든 객체를 수집하여 단일 객체 스토리지 삭제 연산으로 처리합니다. #85316 (Mikhail Artemenko).

S3Queue 테이블 엔진

  • 이제 S3Queue 테이블 엔진의 keeper_path 설정에서 {uuid}와 같은 매크로를 사용할 수 있습니다. #82463 (Nikolay Degterinsky).
  • S3Queue 테이블 엔진을 사용하는 테이블에서 스트리밍을 비활성화하는 새 서버 설정 s3queue_disable_streaming이 추가되었습니다. 이 설정은 서버를 재시작하지 않고도 변경할 수 있습니다. #82515 (Kseniia Sumarokova).
  • system.s3queue_logcommit_time, commit_id 컬럼을 추가했습니다. #83016 (Kseniia Sumarokova).
  • s3queue 종료 프로세스에 대한 로그를 추가했습니다. #83163 (Kseniia Sumarokova).
  • 서버 종료 시 서버의 어떤 테이블도 종료하기 전에 S3(Azure/etc)Queue 스트리밍을 먼저 종료하도록 했습니다. #83530 (Kseniia Sumarokova).
  • S3Queue 테이블 수준에서 구체화된 뷰(Materialized View) 삽입 설정 변경을 지원합니다. 새로운 S3Queue 수준 설정 min_insert_block_size_rows_for_materialized_viewsmin_insert_block_size_bytes_for_materialized_views가 추가되었습니다. 기본적으로 프로필 수준 설정이 사용되며, S3Queue 수준 설정이 이를 재정의합니다. #83971 (Kseniia Sumarokova).
  • S3Queue 순서 모드(ordered mode) 수정: 종료가 호출된 경우 더 일찍 종료하도록 했습니다. #84463 (Kseniia Sumarokova).

Kafka 통합

ClickHouse Keeper 개선 사항

  • Keeper 개선: 백그라운드 스레드에서 디스크 간 changelog 파일을 이동합니다. 이전에는 changelog를 다른 디스크로 이동할 때, 이동이 완료될 때까지 Keeper 전체가 차단되었습니다. 이로 인해 이동 작업이 오래 걸리는 경우(예: S3 디스크로 이동) 성능 저하가 발생했습니다. #82485 (Antonio Andelic).
  • Keeper 개선: 새로운 설정 keeper_server.cleanup_old_and_ignore_new_acl을 추가했습니다. 이를 활성화하면 모든 노드의 ACL이 초기화되고, 새 요청에 대한 ACL은 무시됩니다. 노드에서 ACL을 완전히 제거하는 것이 목적이라면, 새 스냅샷이 생성될 때까지 이 설정을 활성화된 상태로 유지하는 것이 중요합니다. #82496 (Antonio Andelic).
  • Keeper 개선: world:anyone ACL에 대해 특정 권한을 지원합니다. #82755 (Antonio Andelic).
  • 설정에서 경로에 대해 추가 Keeper ACL을 지정하는 기능을 추가했습니다. 특정 경로에 대해 추가 ACL을 추가하려면 설정의 zookeeper.path_acls 아래에 정의하면 됩니다. #82898 (Antonio Andelic).
  • Keeper가 소프트 메모리 제한으로 인해 쓰기를 거부하는 경우를 기록하는 ProfileEvent를 추가했습니다. #82963 (Xander Garbett).
  • Keeper에서 create_if_not_exists, check_not_exists, remove_recursive 기능 플래그를 기본적으로 활성화하여 새로운 유형의 요청을 허용하도록 했습니다. #83488 (Antonio Andelic).
  • apply_to_children 설정을 사용하여 특정 Keeper 노드에 추가 ACL을 적용하는 기능을 추가했습니다. #84137 (Antonio Andelic).
  • KeeperClient에 get_acl 명령을 추가했습니다. #84641 (Antonio Andelic).
  • Keeper에 수신된 요청의 로깅을 토글하기 위한 4LW 명령 lgrq를 추가했습니다. #84719 (Antonio Andelic).
  • Keeper에서 storage lock에 대한 경합을 줄였습니다. #84732 (Antonio Andelic).
  • encrypt_decrypt 도구가 이제 암호화된 ZooKeeper 연결을 지원합니다. #84764 (Roman Vasin).
  • keeper_server.coordination_settings.latest_logs_cache_entry_count_thresholdkeeper_server.coordination_settings.commit_logs_cache_entry_count_threshold를 사용해 Keeper 로그 엔트리 캐시 크기를 엔트리 개수 기준으로 제한합니다. #84877 (Antonio Andelic).

JSON 및 Dynamic 타입

  • Wide 파트에 columns_substreams.txt 파일을 추가하여, 해당 파트에 저장된 모든 서브스트림을 추적합니다. 이를 통해 JSON 및 Dynamic 타입에서 동적 스트림을 추적할 수 있으므로, 동적 스트림 목록을 얻기 위해 이러한 컬럼의 샘플을 읽지 않아도 됩니다(예: 컬럼 크기 계산). 또한 이제 모든 동적 스트림이 system.parts_columns에 반영됩니다. #81091 (Pavel Kruglov).
  • JSON 및 Dynamic 컬럼에서 ALTER UPDATE를 사용할 수 있습니다. #82419 (Pavel Kruglov).
  • 이제 JSON 타입 안에서 TimeTime64 타입을 사용할 수 있습니다. #83784 (Yarik Briukhovetskyi).
  • JSON 타입을 파싱하는 동안 JSON 키에 포함된 마침표(.)를 이스케이프하기 위한 json_type_escape_dots_in_keys 설정이 추가되었습니다. 이 설정은 기본적으로 비활성화되어 있습니다. #84207 (Pavel Kruglov).

Parquet 및 ORC 포맷

  • ORC 압축 블록 크기를 설정하는 설정을 도입하고, 기본값을 64KB에서 256KB로 변경하여 Spark 또는 Hive와 일관되도록 했습니다. #80602 (李扬).
  • Parquet enum을 spec에 규정된 대로 바이트 배열(byte array)로 기록하는 기능을 지원합니다. 추후 더 많은 정보를 제공할 예정입니다. #81090 (Arthur Passos).
  • GeoParquet를 출력 포맷으로 기록하는 기능을 지원합니다. #81784 (scanhex12).

분산 쿼리(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_usersmax_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_servermax_local_write_bandwidth_for_server를 다시 로드할 수 있는 기능을 추가합니다. #82083 (Kai Zhu).
  • 벡터 유사도 인덱스를 사용하기 위해 반드시 활성화해야 하는 enable_vector_similarity_index 설정을 도입합니다. 기존 설정인 allow_experimental_vector_similarity_index는 이제 사용이 중단되었으며(obsolete), 호환성을 위해 계속 동작합니다. #83459 (Robert Schulze).
  • 대용량 컬럼을 가진 JOIN의 메모리 사용량을 제한하기 위해 max_joined_block_size_rows에 더해 max_joined_block_size_bytes를 추가합니다. #83869 (Nikolai Kochetov).
  • cluster_function_process_archive_on_multiple_nodes의 호환성을 수정합니다. #83968 (Kseniia Sumarokova).
  • 상관 서브쿼리 지원을 기본으로 활성화합니다. #85107 (Dmitry Novik).
  • database_replicated 설정을 추가하여 DatabaseReplicatedSettings의 기본값을 정의합니다. Replicated DB CREATE 쿼리에 해당 설정이 없으면 이 설정에 지정된 값이 사용됩니다. #85127 (Tuan Pham Anh).
  • s3 또는 s3Cluster 테이블 엔진/함수에서 키-값 인수를 허용합니다. 예: s3('url', CSV, structure = 'a Int32', compression_method = 'gzip'). #85134 (Kseniia Sumarokova).
  • 비상관 EXISTS를 스칼라 서브쿼리로 실행합니다. 이를 통해 스칼라 서브쿼리 캐시를 사용할 수 있고, 결과를 상수 접기하여 인덱스에 유리합니다. 호환성을 위해 새로운 설정 execute_exists_as_scalar_subquery=1을 추가합니다. #85481 (Nikolai Kochetov).
  • 복합 식별자에 대한 더 많은 경우를 해석할 수 있도록 지원합니다. 특히 기존 분석기와의 ARRAY JOIN 호환성을 개선합니다. 이전 동작을 유지하기 위해 새로운 설정 analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested를 도입합니다. #85492 (Nikolai Kochetov).

시스템 테이블과 관측성

  • ClickHouse 비동기 메트릭에 pressure(부하) 메트릭을 추가합니다. #80779 (Xander Garbett).
  • 마크 캐시에서의 제거를 추적하기 위해 MarkCacheEvictedBytes, MarkCacheEvictedMarks, MarkCacheEvictedFiles 메트릭을 추가합니다. (이슈 #60989). #80799 (Shivji Kumar Jha).
  • 이제 system.formats 테이블에 HTTP content type, 스키마 추론(schema inference) 기능 등 포맷에 대한 확장 정보가 포함됩니다. #81505 (Alexey Milovidov).
  • TRUNCATE TABLE system.warnings를 사용하여 system.warnings 테이블에서 모든 경고를 삭제하는 기능을 추가합니다. #82087 (Vladimir Cherkasov).
  • system.licenses에서 Rust 크레이트의 라이선스를 나열합니다. #82440 (Raúl Marín).
  • 예를 들어 (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).
  • 이제 system.columns 테이블은 기존 name 컬럼에 대한 별칭(alias)으로 column을 제공합니다. #84695 (Yunchi Pang).
  • system.errors에 포맷 문자열 컬럼을 추가합니다. 이 컬럼은 알림 규칙에서 동일한 오류 타입으로 그룹화하는 데 필요합니다. #84776 (Miсhael Stetsyuk).
  • Async Log의 제한을 조정 가능하게 만들고, 인트로스펙션 기능을 추가합니다. #85105 (Raúl Marín).
  • system.columns에서 테이블 컬럼 크기를 가져올 때 UNKNOWN_DATABASE를 무시합니다. #85632 (Azat Khuzhin).

데이터베이스 엔진

시스템 및 내부 개선 사항

  • 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).

복제 및 동기화

SystemAndInternalImprovements

  • ZooKeeper 연결 문제 발생 시 테이블 생성 재시도를 통해 테이블이 누락되지 않도록 SYSTEM RESTART REPLICA를 개선합니다. #82616 (Nikolay Degterinsky).
  • ReplicatedMergeTree::executeMetadataAlter에서 UUID 검증을 추가하여, StorageID를 가져오는 시점과 IDatabase::alterTable을 호출하는 시점 사이에 테이블이 교환되는 경우 잘못된 테이블 정의가 생성되지 않도록 합니다. #82666 (Nikolay Degterinsky).
  • 실험적 zero-copy 복제와 관련된 실험적 send_metadata 로직을 제거합니다. 이 코드는 실제로 사용된 적도 없고, 지원되지 않았으며, 동작이 깨졌을 가능성이 높고, 기능을 검증하는 테스트도 없습니다. #82508 (alesapin).
  • remote_fs_zero_copy_zookeeper_path에서 매크로 확장을 지원합니다. #85437 (Mikhail Koviazin).

함수와 식

  • addressToSymbol 함수와 system.symbols 테이블이 가상 메모리 주소 대신 파일 오프셋을 사용하도록 변경되었습니다. #81896 (Alexey Milovidov).
  • 이름이 있는 튜플(named tuple)의 슈퍼타입을 도출할 때 요소 이름을 보존하도록 했습니다. #81345 (lgbo).
  • 서로 다른 윈도우들에서 동일한 컬럼에 대해 서로 다른 정렬 규칙(collation)을 혼용해 사용할 수 있도록 허용합니다. #82877 (Yakov Olkhovskiy).
  • 타입을 WKB 형식으로 출력하는 FUNCTION을 추가합니다. #82935 (scanhex12).
  • TimeTime64를 MM:SS, M:SS, SS 또는 S 형식으로 파싱할 수 있는 기능을 추가했습니다. #83299 (Yarik Briukhovetskyi).
  • 이제 reinterpret() FUNCTION이 T가 고정 크기 데이터 타입일 때 Array(T)로의 변환을 지원합니다(이슈 #82621). #83399 (Shankar Iyer).
  • structureToProtobufSchemastructureToCapnProtoSchema 함수가 줄바꿈 문자를 사용하는 대신 널 종료 바이트(0 바이트)를 올바르게 추가하도록 수정하여, 출력에서 줄바꿈이 누락되는 문제와 널 바이트에 의존하는 함수(예: logTrace, demangle, extractURLParameter, toStringCutToZero, encrypt/decrypt)에서 발생할 수 있는 버퍼 오버플로를 방지합니다. #85062를 종료합니다. #85063 (Alexey Milovidov).
  • regexp_tree 딕셔너리 레이아웃을 수정하여 0 바이트를 포함한 문자열도 처리하도록 했습니다. #85063 (Alexey Milovidov).
  • Values 포맷이나 행 끝에 개행 문자가 없는 다른 포맷에서 호출될 때 출력의 마지막 문자가 잘못 잘려 나가던 formatRowNoNewline 함수를 수정했습니다. #85063 (Alexey Milovidov).
  • 드문 경우에 메모리 누수로 이어질 수 있었던 stem FUNCTION의 예외 안전성 오류를 수정합니다. #85063 (Alexey Milovidov).
  • FixedString 인수를 받는 initcap FUNCTION이 블록 내에서 이전 문자열이 단어 문자로 끝난 경우에도 문자열의 시작을 단어의 시작으로 올바르게 인식하도록 수정했습니다. #85063 (Alexey Milovidov).
  • 초기화되지 않은 메모리가 노출될 수 있었던 Apache ORC 형식의 보안 취약점을 수정합니다. #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).
  • timeSeries*ToGrid() 함수에서 step 인수를 0으로 설정할 수 있도록 허용합니다. 이는 https://github.com/ClickHouse/ClickHouse/pull/75036 의 3번째 부분입니다. #85390 (Vitaly Baranov).
  • nested 함수에서 내부 배열을 지원합니다. #85719 (Nikolai Kochetov).

MergeTree improvements

  • 실시간으로 업데이트되거나 패치 파트에 의해 업데이트되는 컬럼에 의존하는 스키핑 인덱스를 더 세밀하게 비활성화합니다. 이제 스키핑 인덱스는 실시간 뮤테이션 또는 패치 파트의 영향을 받은 파트에서만 사용되지 않습니다. 이전에는 이러한 인덱스가 모든 파트에 대해 비활성화되었습니다. #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).
  • 패치 파트에서 전체 비압축 바이트 수에 대한 제한(테이블 설정 max_uncompressed_bytes_in_patches)을 추가합니다. 이를 통해 경량 업데이트 이후 SELECT 쿼리가 크게 느려지는 것을 방지하고, 경량 업데이트의 잠재적인 오남용을 방지합니다. #85641 (Anton Popov).

캐시 및 메모리 관리

  • filesystem 캐시에서 발생하던 논리 오류 "Having zero bytes but range is not finished"를 수정했습니다. #81868 (Kseniia Sumarokova).
  • 캐시 지역성을 향상하기 위해 rendezvous hashing을 추가했습니다. #82511 (Anton Ivashkin).
  • filesystem 캐시의 동적 리사이즈 기능을 리팩터링하고, 내부 진단을 위한 로그를 추가했습니다. #82556 (Kseniia Sumarokova).
  • 실행 가능한 사용자 정의 함수의 쿼리 메모리 추적 오버헤드를 줄였습니다. #83929 (Eduard Karacharov).
  • 외부 라이브러리에서 수행되는 모든 메모리 할당이 이제 ClickHouse의 메모리 트래커에 표시되어, 메모리 사용량에 정확히 반영되도록 했습니다. 이로 인해 특정 쿼리에서 보고되는 메모리 사용량이 증가한 것처럼 보이거나 MEMORY_LIMIT_EXCEEDED 오류로 실패할 수 있습니다. #84082 (Nikita Mikhaylov).
  • 암호화된 named collection에 대해 encrypted_buffer에 필요한 최소한의 메모리만 할당하도록 했습니다. #84432 (Pablo Marcos).

벡터 유사도 인덱스

  • NumericIndexedVector와 함께 naninf를 사용할 수 없도록 했습니다. #82239 및 그와 관련된 일부 문제를 수정합니다. #82681 (Raufs Dunamalijevs).
  • 벡터 유사도 인덱스가 이제 이진 양자화(binary quantization)를 지원합니다. Binary quantization은 메모리 사용량을 크게 줄이고, 더 빠른 거리 계산 덕분에 벡터 인덱스를 구성하는 과정을 가속합니다. 또한 기존 vector_search_postfilter_multiplier 설정은 사용 중단되고, 보다 일반적인 설정인 vector_search_index_fetch_multiplier로 대체되었습니다. #85024 (Shankar Iyer).
  • 벡터 유사도 인덱스를 사용한 근사 벡터 검색이 이제 GA(General Availability) 단계입니다. #85888 (Robert Schulze).

오류 처리 및 메시지

  • 헤더 Connection은 헤더 전송의 마지막에 전송됩니다. 연결을 유지해야 하는지가 결정된 뒤에 전송됩니다. #81951 (Sema Checherinda).
  • 이전 버전에서는 집계 함수 상태와 IPv4의 곱셈 연산이 적절한 오류 코드 대신 논리적 오류를 발생시켰습니다. #82817 해결. #82818 (Alexey Milovidov).
  • AsynchronousMetrics의 오류 처리가 개선되었습니다. /sys/block 디렉터리가 존재하지만 접근할 수 없는 경우, 서버는 블록 디바이스를 모니터링하지 않고 시작됩니다. #79229 해결. #83115 (Alexey Milovidov).
  • 잘못 작성된 SELECT를 가진 materialized view가 포함된 INSERT에 대한 종속성 검사에 문제가 있어, 사용자에게 명확한 설명이 있는 의미 있는 오류 대신 모호한 std::exception이 반환될 수 있었습니다. 이제 수정되었습니다. 다음 이슈를 수정합니다: #82889. #83190 (Nikita Mikhaylov).
  • 예외 메시지에 표현식 동작의 매우 긴 설명을 출력하지 않습니다. #83164 해결. #83350 (Alexey Milovidov).
  • 스토리지가 종료되는 동안 getStatusErrorCodes::ABORTED 예외를 던집니다. 이전에는 이로 인해 select 쿼리가 실패했습니다. 이제 ErrorCodes::ABORTED 예외를 포착하고, 의도적으로 이를 무시합니다. #83435 (Miсhael Stetsyuk).
  • 프로젝션을 로드하고 추가하는 특정 상황에 대한 예외 메시지를 더 읽기 쉽게 만들었습니다. #83728 (Robert Schulze).
  • 연결이 취소되었는지 여부를 EOF를 확인하기 전에 검사하여, 닫힌 연결에서 데이터를 읽는 일을 방지합니다. #83893 수정. #84227 (Raufs Dunamalijevs).
  • 내부 검사를 단순화하여 클라이언트 연결에 대한 서버 종료 처리 방식이 개선되었습니다. #84312 (Raufs Dunamalijevs).
  • 이제 UDF 실행 중 발생하는 하위 수준 오류는 UDF_EXECUTION_FAILED 오류 코드와 함께 실패하며, 이전에는 서로 다른 오류 코드가 반환될 수 있었습니다. #84547 (Xu Jia).

SQL 포매팅 개선사항

  • CREATE DICTIONARY 구문의 일관성 없는 서식을 수정합니다. #82105 이슈를 종료합니다. #82829 (Alexey Milovidov).
  • materialize 함수가 포함된 TTL 구문의 일관성 없는 서식을 수정합니다. #82828 이슈를 종료합니다. #82831 (Alexey Milovidov).
  • INTO OUTFILE과 같은 출력 옵션이 포함된 서브쿼리에서 EXPLAIN AST의 일관성 없는 서식을 수정합니다. #82826 이슈를 종료합니다. #82840 (Alexey Milovidov).
  • 별칭이 허용되지 않는 컨텍스트에서 별칭을 가진 괄호로 둘러싸인 표현식의 일관성 없는 서식을 수정합니다. #82836 이슈를 종료합니다. #82837 이슈를 종료합니다. #82867 (Alexey Milovidov).
  • 쿼리 매개변수를 사용하는 CREATE USER 구문의 서식을 수정합니다(예: CREATE USER {username:Identifier} IDENTIFIED WITH no_password). #84376 (Azat Khuzhin).
  • CREATE DICTIONARY 쿼리에서 파라미터를 가진 컬럼(예: Decimal(8)) 뒤에 오는 컬럼 정의에 후행 쉼표(trailing comma)가 있을 때의 파싱을 수정합니다. #85586 이슈를 종료합니다. #85653 (Nikolay Degterinsky).

외부 통합

  • named collection을 사용할 때 ODBC와 JDBC의 매개변수 이름을 통일합니다. #83410 (Andrey Zvonov).
  • MongoDB: 문자열을 숫자형으로 암시적으로 파싱합니다. 이전에는 ClickHouse 테이블의 숫자 컬럼에 대해 MongoDB 소스에서 문자열 값이 수신되면 예외가 발생했습니다. 이제 엔진이 문자열에서 숫자 값을 자동으로 파싱하려고 시도합니다. #81167 이슈를 종료합니다. #84069 (Kirill Nikiforov).
  • 지원되지 않는 아키텍처에서도 simdjson 사용을 허용합니다(이전에는 CANNOT_ALLOCATE_MEMORY 오류가 발생했습니다). #84966 (Azat Khuzhin).

기타 개선 사항

  • Ytsaurus 테이블 엔진과 테이블 함수를 추가합니다. #77606 (MikhailBurdukov).
  • HashJoin::needUsedFlagsForPerRightTableRow를 개선하여 cross join의 경우 false를 반환하도록 합니다. #82379 (lgbo).
  • 맵 컬럼을 튜플 배열로 읽고/쓸 수 있도록 허용합니다. #82408 (MikhailBurdukov).
  • 이 PR은 되돌렸습니다. #82884 (Mithun p).
  • 비동기 로그: 큐에 보관되는 항목의 최대 개수를 제한합니다. #83214 (Raúl Marín).
  • JSON 입력 형식에서 Date/Date32를 정수로 사용할 수 있도록 활성화합니다. #83597 (MikhailBurdukov).
  • 첫 번째 인자가 상수 배열(Set)이고 두 번째 인자가 인덱스가 걸린 컬럼(부분집합)인 경우에도 활용될 수 있도록 블룸 필터 인덱스(일반, ngram, token)에 대한 지원을 개선하여, 더 효율적인 쿼리 실행이 가능하도록 합니다. #84700 (Doron David).
  • KeyValue 스토리지 기본 키(예: EmbeddedRocksDB, KeeperMap)에 대해 IN / GLOBAL IN 필터를 푸시다운할 때 Set 값의 타입 캐스팅을 허용합니다. #84515 (Eduard Karacharov).
  • 병렬 레플리카 읽기에서 인덱스 분석 결과가 빈 범위가 되는 경우 전체 스캔을 제거했습니다. #84971 (Eduard Karacharov).
  • 로컬 호스트에서 통합 테스트를 실행하려고 할 때 발생할 수 있는 여러 문제를 수정합니다. #82135 (Oleg Doronin).
  • 기존 배포에서도 기본적으로 trace_log.symbolize를 활성화합니다. #85456 (Azat Khuzhin).

버그 수정(공식 안정 릴리스에서 사용자가 인지할 수 있는 오동작)

성능 최적화

쿼리 실행 개선 사항

  • ORDER BY ... LIMIT BY ... LIMIT N이 조합된 쿼리에서 ORDER BY가 PartialSorting으로 실행되는 경우, 카운터 rows_before_limit_at_least는 이제 정렬 변환에서 소비된 행 수가 아니라 LIMIT 절에 의해 소비된 행 수를 반영합니다. #78999 (Eduard Karacharov).
  • <=> 연산자와 Join 스토리지의 논리 오류를 수정하여 이제 쿼리가 올바른 오류 코드를 반환합니다. #80165 (Vladimir Cherkasov).
  • remote 함수 계열과 함께 사용할 때 loop 함수에서 발생하던 비정상 종료 문제를 수정합니다. loop(remote(...))에서 LIMIT 절이 제대로 준수되도록 합니다. #80299 (Julia Kartseva).
  • 유닉스 epoch(1970-01-01) 이전과 최대 날짜(2106-02-07 06:28:15) 이후의 날짜를 처리할 때 to_utc_timestampfrom_utc_timestamp 함수의 동작이 잘못되던 문제를 수정했습니다. 이제 이 함수들은 각각 epoch 시작 시점과 최대 날짜로 값이 올바르게 제한되도록 동작합니다. #80498 (Surya Kant Ranjan).
  • transform_null_in=1 설정에서 왼쪽 인자가 NULL이고 서브쿼리 결과가 널 비허용(non-nullable)인 경우의 IN 실행을 수정합니다. #81584 (Pavel Kruglov).
  • 스칼라 상관 서브쿼리를 처리하는 동안 필요한 컬럼을 읽지 못하는 문제를 수정합니다. #81716 이슈를 해결합니다. #81805 (Dmitry Novik).
  • 쿼리에서 상수 별칭 컬럼만 사용되는 경우의 필터 분석을 수정했습니다. #79448 이슈를 해결합니다. #82037 (Dmitry Novik).
  • WHERE 절과 IndexSet이 함께 사용된 쿼리에서 arrayJoin 사용 시 발생하던 Not found column 오류를 수정했습니다. #82113 (Nikolai Kochetov).
  • CTE 정의가 동일한 이름을 가진 다른 테이블 식을 참조할 때 발생하던 TOO_DEEP_SUBQUERIES 예외를 수정합니다. #83413 (Dmitry Novik).
  • WHERE ... IN (<subquery>) 절을 사용하고 쿼리 조건 캐시(query condition cache)가 활성화되어 있을 때 발생하던 잘못된 쿼리 결과를 수정합니다(설정 use_query_condition_cache). #83445 (LB7666).
  • INSERT SELECTUNION ALL 조합이 특정 예외적인 경우에 null 포인터 역참조를 유발할 수 있었습니다. 이 수정으로 #83618이(가) 해결되었습니다. #83643 (Alexey Milovidov).
  • 연관된 컬럼에 대한 ROW POLICY 식을 분석하는 동안 발생하는 LOGICAL_ERROR를 수정합니다. #82618 (Dmitry Novik).
  • 재귀 CTE와 함께 쿼리 조건 캐시를 사용할 때 잘못된 결과가 반환되던 문제를 수정했습니다 (issue #81506). #84026 (zhongyuankai).
  • 유효하지 않은 WINDOW 정의에 대한 무한 재귀 분석 문제를 수정합니다. 관련 이슈 #83131를 해결합니다. #84242 (Dmitry Novik).
  • additional_table_filters expression 설정에서 IN (subquery)Not-ready Set 문제를 수정했습니다. #85210 (Nikolai Kochetov).
  • optimize_syntax_fuse_functions가 활성화되어 있을 때 중복 서브쿼리에서 발생하는 논리적 오류를 수정하고, #75511 이슈를 종료했습니다. #83300 (Vladimir Cherkasov).

Iceberg 및 DataLake 수정 사항

  • REST 카탈로그를 통해 iceberg 테이블을 쿼리할 때 메타데이터 해석을 수정합니다. ... #80562 (Saurabh Kumar Ojha).
  • Iceberg에서 발생하는 데이터 레이스를 수정합니다. #82088 (Azat Khuzhin).
  • Iceberg에서 발생하던 "Context has expired" 오류를 수정합니다. #82146 (Azat Khuzhin).
  • 이제 ClickHouse는 스키마 변경(schema evolution) 이후 Glue 카탈로그에서 iceberg 테이블을 읽을 수 있습니다. #81272 이슈를 수정합니다. #82301 (alesapin).
  • Iceberg에서 발생하는 데이터 레이스를 수정합니다. #82841 (Azat Khuzhin).
  • 모든 중첩 하위 필드를 포함하여 iceberg 배열 요소 및 iceberg 맵 값에 대해 경계 기반 파일 프루닝을 비활성화합니다. #83520 (Daniil Ivanik).
  • 복합 타입에 대한 iceberg 쓰기를 수정합니다. #85330 (scanhex12).
  • 복합 타입에 대해서는 lower 및 upper bound 쓰기를 지원하지 않습니다. #85332 (scanhex12).
  • iceberg에서 필드의 널 가능 여부(nullability)를 수정합니다. #85977 (scanhex12).
  • 더 이상 비어 있는 iceberg 삭제 파일을 생성하지 않습니다. #86061 (scanhex12).
  • iceberg 쓰기 시 메타데이터 타임스탬프를 업데이트합니다. #85711 (scanhex12).
  • Spark가 position delete 파일을 읽지 못하던 문제를 수정합니다. #85762 (scanhex12).
  • 더 이상 매니페스트 파일에서 스키마를 가져오지 않고, 각 스냅샷에 대해 관련 스키마를 독립적으로 저장합니다. 각 데이터 파일에 대해서는 해당 스냅샷에서 관련 스키마를 유추합니다. 이전 동작은 existing 상태가 있는 매니페스트 파일 엔트리에 대해 Iceberg 스펙을 위반하고 있었습니다. #84588 (Daniil Ivanik).
  • 이제 Iceberg는 SELECT 쿼리 사이에서 관련 스냅샷 버전을 캐시하려 하지 않고, 항상 스냅샷을 올바르게 해석하려고 시도합니다. 이전에 iceberg 스냅샷을 캐시하려던 시도는 시간 여행(time travel)이 사용되는 Iceberg 테이블에서 문제를 유발했습니다. #85038 (Daniil Ivanik).
  • REST 카탈로그를 통해 iceberg 테이블을 쿼리할 때 메타데이터 해석을 수정합니다. ... #85531 (Saurabh Kumar Ojha).
  • icebergS3Cluster 및 icebergAzureCluster 테이블 함수에서 시크릿 마스킹을 수정합니다. #85658 (MikhailBurdukov).

DeltaLake 수정 사항

TTL 및 MergeTree 수정

  • TTL로 인해 행이 감소할 때 min-max 인덱스를 재계산하여 minmax_count_projection과 같이 해당 인덱스에 의존하는 알고리즘의 정확성을 보장합니다. 이를 통해 #77091를 해결합니다. #77166 (Amos Bird).
  • TTL을 업데이트할 때 TTL GROUP BY에서 TTL 재계산이 잘못되던 문제를 수정합니다. #81222 (Evgeniy Ulasik).
  • TTL 표현식에서 dict를 사용할 때 머지 과정에서 발생하던 "Context has expired" 오류를 수정합니다. #81690 (Azat Khuzhin).
  • GROUP BY 및 SET용 TTL에서 동일한 컬럼을 사용할 때 발생하던 LOGICAL_ERROR 및 이후 크래시를 수정합니다. #82054 (Pablo Marcos).
  • 테이블에서 모든 TTL이 제거되면 MergeTree는 TTL과 관련된 작업을 전혀 수행하지 않도록 변경되었습니다. #84441 (alesapin).
  • ALTER MODIFY ORDER BY가 정렬 키에서 TTL 컬럼을 검증하지 않던 문제를 수정합니다. 이제 ALTER 작업 중 ORDER BY 절에서 TTL 컬럼을 사용하면 적절히 거부되어 잠재적인 테이블 손상을 방지합니다. #84536 (xiaohuanlin).

프로젝션 수정

  • 컬럼 타입이 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).
  • 손상된 프로젝션을 가진 파트의 백업이 올바르게 동작하지 않던 문제를 수정합니다. #85362 (Antonio Andelic).
  • 안정화될 때까지 릴리스에서 프로젝션 내 _part_offset 컬럼 사용을 금지합니다. #85372 (Sema Checherinda).

Parallel replicas fixes

  • 일부 쿼리를 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).

인증 및 보안

  • logs/query_log에서 named collection 값이 숨겨지지 않던 문제를 수정합니다. #82405를 해결합니다. #82510 (Kseniia Sumarokova).
  • AST에서 SCRAM_SHA256_PASSWORD 타입을 파싱할 때 인증 데이터용 salt를 설정합니다. #82888 (Tuan Pham Anh).
  • Avro schema registry 인증 정보가 사용자에게도, 그리고 로그에도 보이지 않도록 마스킹합니다. #83713 (János Benjamin Antal).
  • REVOKE S3 ON system.* 실행 시 *.*에 대한 S3 권한까지 취소되던 잘못된 동작을 수정합니다. #83417 문제를 해결합니다. #83420 (pufit).
  • no_password로 생성된 사용자가 서버 allow_no_password 설정이 0으로 변경된 후 로그인 시도할 때 서버가 크래시가 발생하던 문제를 수정합니다. #84426 (Shankar Iyer).
  • JWT로 식별되는 사용자를 생성하려고 시도할 때의 에러 메시지를 개선합니다. #85072 (Konstantin Bogdanov).
  • deltaLakeAzure, deltaLakeCluster, icebergS3Cluster, icebergAzureCluster의 자격 증명을 마스킹합니다. #85889 (Julian Maicher).
  • #79963에서 도입된 버그를 수정합니다. definer가 있는 materialized view에 데이터를 삽입할 때 권한 검사는 definer의 권한을 사용해야 합니다. #79951를 수정합니다. #83502 (pufit).

백업 및 복원 관련 수정

  • 비어 있는 Memory 테이블을 백업할 때, 백업 복원이 BACKUP_ENTRY_NOT_FOUND 오류로 실패하던 문제를 수정했습니다. #82791 (Julia Kartseva).
  • 읽기 전용 디스크에 백업을 복원할 때 표시되던 오해의 소지가 있는 오류 메시지를 수정했습니다. #83051 (Julia Kartseva).
  • 연결 문제 발생 후 불필요한 내부 백업이 시작되던 문제를 수정했습니다. #84755 (Vitaly Baranov).

윈도우 및 집계 함수

  • 머지(merge) 과정에서 예외가 발생했을 때 Aggregator에서 발생할 수 있던 크래시를 수정합니다. #81450 (Nikita Taranov).
  • 머지(merge) 과정에서 예외가 발생했을 때 Aggregator에서 발생할 수 있던 크래시를 수정합니다. #82022 (Nikita Taranov).
  • arraySimilarity에서의 복사-붙여넣기 오류를 수정하여 UInt32와 Int32 가중치 사용을 허용하지 않도록 합니다. 테스트와 문서를 업데이트합니다. #82103 (Mikhail f. Shiryaev).
  • 큰 수에 함수를 적용했을 때 발생하던 numericIndexedVectorPointwiseAdd, numericIndexedVectorPointwiseSubtract, numericIndexedVectorPointwiseMultiply, numericIndexedVectorPointwiseDivide 함수의 오버플로를 수정합니다. #82165 (Raufs Dunamalijevs).

Parquet 및 파일 포맷 수정

  • 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).

조인 수정

  • 저장소 Merge를 사용하는 테이블과 JOIN 식이 포함된 쿼리에서 필터가 수정되는 방식을 수정합니다. #82092를 수정합니다. #82950 (Dmitry Novik).
  • 키-값 저장소가 형 변환된 키와 조인될 때 발생하는 크래시를 수정합니다. #82497 (Pervakov Grigorii).
  • 여러 JOIN이 있는 쿼리에서 matcher를 해석할 때 발생하는 논리적 오류를 수정합니다. #81969를 닫습니다. #82421 (Vladimir Cherkasov).
  • 등식 피연산자의 타입이 다르거나 상수를 참조하는 경우, 필터를 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).
  • DEFINER가 삭제된 경우 Replicated 데이터베이스의 새 레플리카에서 RMV를 생성하는 동작을 수정합니다. #85327 (Nikolay Degterinsky).
  • 메타데이터 파일 이동에 시간이 오래 걸릴 때 복제 데이터베이스를 복구하지 못하던 문제를 수정합니다. #85177 (Tuan Pham Anh).
  • Keeper에서 데이터베이스 메타데이터를 복원한 후 Replicated 데이터베이스를 강제로 복구합니다. #85960 (Tuan Pham Anh).
  • Replicated 데이터베이스 복구 중 발생하던 버그를 수정합니다. 테이블 이름에 % 문자가 포함된 경우, 복구 과정에서 다른 이름으로 테이블을 다시 생성할 수 있었습니다. #85987 (Alexander Tokmakov).
  • 이제 DDL worker가 레플리카 집합에서 오래된 호스트를 정리합니다. 이를 통해 ZooKeeper에 저장되는 메타데이터의 양이 줄어듭니다. #88154 (alesapin).

경량 업데이트 수정

  • ReplacingMergeTreeCollapsingMergeTree 엔진을 사용하는 테이블에 대한 경량 업데이트를 수정합니다. #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 및 객체 스토리지 관련 수정 사항

  • 비밀 마스킹에서 S3 table function 인자 검증을 수정하여 잠재적인 LOGICAL_ERROR를 방지합니다. #80620 이슈를 해결합니다. #82056 (Vladimir Cherkasov).
  • 서버가 메모리 압박을 받는 상황에서 remote query에 대해 발생할 수 있는 교착 상태를 수정합니다. #82160 (Kirill).
  • 재로딩할 수 있도록 AWS ECS 토큰에 만료 시간(expiration)을 추가합니다. #82422 (Konstantin Bogdanov).
  • 외부 테이블 엔진(external table engines)에서 캐시된 버퍼에 대한 경계 정렬 비활성화를 수정합니다. 이 기능은 https://github.com/ClickHouse/ClickHouse/pull/81868 이후로 동작하지 않았습니다. #82493 (Kseniia Sumarokova).
  • 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).
  • S3Queue에서 "Table is already registered" 오류로 인한 논리적 오류를 수정합니다. #84433 이슈를 종료합니다. https://github.com/ClickHouse/ClickHouse/pull/83530 이후로 발생한 문제입니다. #84677 (Kseniia Sumarokova).
  • 과도하게 큰 설정 값으로 인해 S3Queue 테이블 및 레플리카 재시작이 실패하던 문제를 수정합니다. #86074 (Nikolay Degterinsky).

DynamicAndVariantTypeFixes

  • 파싱 실패 시 Dynamic 컬럼 롤백이 제대로 수행되지 않던 문제를 수정합니다. #82169 (Pavel Kruglov).
  • UNION에서 Variant 타입 사용 시 발생할 수 있던 크래시를 수정합니다. #83295 (Pavel Kruglov).
  • lazy materialization을 사용할 때 Variant 컬럼을 읽는 과정에서 발생하던 문제를 수정합니다. #84400 (Pavel Kruglov).
  • 기존 테이블에서 데이터를 읽을 때 default/materialize 표현식을 실행하는 과정에서 experimental/suspicious 타입을 검증하지 않도록 수정합니다. #81618 (Pavel Kruglov).

Keeper 수정 사항

  • 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).
  • Keeper가 반환하는 전체 watch 개수를 수정합니다. #84890 (Antonio Andelic).
  • RefreshTask에서 'view'로부터 zookeeper를 가져올 때 'mutex'를 잠급니다. #84699 (Tuan Pham Anh).

인덱싱 수정

  • 대체(alternation)와 비리터럴 첫 번째 대안을 포함하는 정규식(regexp)으로 token/ngram 인덱스를 사용해 필터링할 때, 그래뉼이 과도하게 스킵되던 문제가 수정되었습니다. #79373 (Eduard Karacharov).
  • MergeTree 엔진 설정 또는 데이터 분포에 따라, 25.6에서 도입된 use_skip_indexes_if_final_exact_mode 설정의 구현이 적절한 후보 범위를 선택하지 못할 수 있었던 문제가 이제 해결되었습니다. #82667 (Shankar Iyer).
  • MergeTree 엔진 설정 또는 데이터 분포에 따라, 25.6에서 도입된 use_skip_indexes_if_final_exact_mode 최적화가 적절한 후보 범위를 선택하지 못할 수 있었던 문제가 이제 해결되었습니다. #82879 (Shankar Iyer).
  • 이전에는 set 인덱스가 그래뉼이 필터를 통과했는지 확인할 때 Nullable 컬럼을 고려하지 않았습니다(이슈 #75485). #84305 (Elmi Ahmadov).
  • NaN 값과의 비교 시 MinMax 인덱스 평가 과정에서 올바른 범위를 사용하지 않던 문제가 있었습니다. #84386 (Elmi Ahmadov).
  • ngramno_op 토크나이저가 비어 있는 입력 토큰에 대해 (실험적인) 텍스트 인덱스에서 크래시가 발생하지 않도록 수정되었습니다. #84849 (Robert Schulze).

Materialized view 수정

  • 테이블 종속성(table dependencies)의 버그를 수정하여 materialized view에서 INSERT 쿼리를 놓치는 문제가 발생하지 않도록 했습니다. #82222 (Nikolay Degterinsky).
  • https://github.com/ClickHouse/ClickHouse/pull/79963 이후 materialized view에서 서브컬럼(subcolumns) 사용이 깨져 Not found column X in block 오류가 발생할 수 있었습니다. 이 동작을 수정했습니다. 다음 이슈를 해결합니다: #82784. #83221 (Nikita Mikhaylov).
  • 타입이 서로 다를 때 materialized view에서 발생하던 illegal_type_of_argument 오류를 수정했습니다. #85135 (Sema Checherinda).

Azure 및 Cloud 스토리지 수정 사항

  • AzureBlobStorage에서 native copy 작업 시 인증 방식을 비교하는 중 예외가 발생하면, 읽기 후 복사(즉, 비네이티브 복사)로 폴백하도록 코드를 업데이트했습니다. #82693 (Smita Kulkarni).
  • AzureIteratorAsync에서 발생하던 double-free 문제를 수정했습니다. #85064 (Nikita Taranov).

크래시 및 안정성 수정

  • user_id가 때때로 비어 있을 수 있어 세션을 종료하는 동안 로깅에서 발생할 수 있는 크래시를 수정합니다. #82513 (Bharat Nallan).
  • 잘못된 INSERT 이후 연결이 끊어진(disconnected) 상태로 남아 있어 클라이언트에서 발생하던 크래시를 수정합니다. #83253 (Azat Khuzhin).
  • 비어 있는 컬럼을 가진 블록의 크기를 계산할 때 발생하던 크래시를 수정합니다. #83271 (Raúl Marín).
  • CPU 스케줄링이 활성화된 상태에서 부하 상태로 실행될 때, max_threads=1 설정을 가진 쿼리에서 발생할 수 있는 크래시를 수정합니다. #83387 (Fan Ziqi).
  • zoutofmemory를 하드웨어 에러로 처리하고, 그렇지 않은 경우에는 논리 에러를 던지도록 합니다. 자세한 내용은 https://github.com/clickhouse/clickhouse-core-incidents/issues/877 을 참조하십시오. #84420 (Han Fei).
  • BackgroundSchedulePool 종료 중 태스크에서 스레드를 조인(join)함으로 인해 발생할 수 있는 비정상 종료(abort)와 (단위 테스트에서의) 정지(hang) 문제를 수정합니다. #83769 (Azat Khuzhin).
  • 백그라운드 취소 검사 스레드로 인해 발생한 교착 상태를 수정합니다. #84203 (Antonio Andelic).
  • 라이브러리 브리지 정리(cleanup) 중 컨텍스트를 재귀적으로 잠그면서(shutdown 시) 발생하던 교착 상태를 수정합니다. #83824 (Azat Khuzhin).
  • 잘못된 INSERT 이후 연결이 끊어진(disconnected) 상태로 남아 있어 클라이언트에서 발생하던 크래시를 수정합니다. #83842 (Azat Khuzhin).
  • String 역직렬화 중 MEMORY_LIMIT_EXCEEDED가 발생하는 경우 생길 수 있는 UB(정의되지 않은 동작으로 인한 크래시)를 수정합니다. #85440 (Azat Khuzhin).
  • 설정 log_comment 또는 insert_deduplication_token을 변경하는 비동기 INSERT에서 드물게 발생하던 크래시를 수정합니다. #85540 (Anton Popov).

Glue 및 카탈로그 수정

  • 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).
  • 함수 trim이 모든 인자가 상수인 경우 이제 상수 출력 문자열을 생성합니다(버그 #78796). #82900 (Robert Schulze).
  • 포맷 지정자 %f가 가변 길이 포맷 지정자(예: %M)와 함께 사용될 때 formatDateTime 함수의 잘못된 출력이 수정되었습니다. #83020 (Robert Schulze).
  • CASE 함수에서 NULL 인자에 대한 버그를 수정했습니다. #82436 (Yarik Briukhovetskyi).
  • lowCardinalityKeys 함수에서 공유 딕셔너리의 관련 없는 파트가 사용되지 않도록 했습니다. #83118 (Alexey Milovidov).
  • const와 non-const 인자가 혼합된 경우 colorSRGBToOKLCH/colorOKLCHToSRGB 함수의 동작을 수정했습니다. #83906 (Azat Khuzhin).
  • array() 함수에서 빈 튜플을 잘못 생성하던 문제를 수정했습니다. 이 수정으로 #84202가 해결되었습니다. #84297 (Amos Bird).
  • 잘못된 Bech32 인코딩과 디코딩을 유발하던 버그를 수정했습니다. 테스트에 사용된 알고리즘의 온라인 구현에서도 동일한 문제가 있었기 때문에, 이 버그는 처음에는 발견되지 않았습니다. #84257 (George Larionov).

분산 쿼리 수정

  • 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).

메트릭 및 모니터링 수정

  • 비동기 메트릭 설정 asynchronous_metrics_update_period_sasynchronous_heavy_metrics_update_period_s의 검증 로직을 수정합니다. #82310 (Bharat Nallan).
  • 메트릭 IndexUncompressedCacheBytes/IndexUncompressedCacheCells/IndexMarkCacheBytes/IndexMarkCacheFiles를 수정합니다 (이전에는 Cache 접두사가 없는 메트릭에 포함되어 있었습니다). #83730 (Azat Khuzhin).
  • QueryMetricLog에서의 LOGICAL_ERROR를 수정합니다: Mutex는 NULL이 될 수 없습니다. #82979 (Pablo Marcos).
  • 잘못된 메트릭 KafkaAssignedPartitions 및 KafkaConsumersWithAssignment를 수정합니다. #85494 (Ilya Golshtein).
  • PREWHERE(명시적 또는 자동)가 사용될 때 처리된 바이트 통계가 과소 추정되던 문제를 수정합니다. #85495 (Michael Kolupaev).
  • 백그라운드 스케줄 풀과 executor로 인해 발생하던 메모리 추적 드리프트 현상을 수정합니다. #84946 (Azat Khuzhin).

데이터 타입 및 변환 관련 수정

  • Time 파싱 과정에서 msan 문제가 발생할 수 있던 사례를 수정했습니다. 관련 이슈: #82477. #82514 (Yarik Briukhovetskyi).
  • LowCardinality(Float32|Float64|BFloat16) 타입에서 NaN 값 정렬 문제를 수정했습니다. #83786 (Pervakov Grigorii).
  • Date에서 DateTime64로 캐스팅할 때 큰 값(>2106-02-07)이 오버플로우되던 문제가 수정되었습니다. #83982 (Yarik Briukhovetskyi).
  • 음수 Time 값을 테이블로 암묵적으로 읽어들일 때 발생하던 문제를 수정하고, 관련 문서를 혼동되지 않도록 개선했습니다. #83091 (Yarik Briukhovetskyi).
  • 코덱 DoubleDelta는 이제 숫자형 타입의 컬럼에만 적용할 수 있습니다. 특히 FixedString 컬럼은 더 이상 DoubleDelta를 사용해 압축할 수 없습니다. (수정: #80220). #84383 (Jimmy Aguilar Mena).
  • JSON 숫자를 Decimal 타입으로 변환할 때 JSONExtract에서 발생하던 정밀도 손실 문제를 수정했습니다. 이제 숫자형 JSON 값은 부동소수점 반올림 오류 없이 정확한 10진수 표현을 그대로 보존합니다. #85665 (ssive7b).

메모리 및 리소스 관리

  • max_untracked_memory와 관련된 잘못된 메모리 처리를 수정합니다. #83607 (Azat Khuzhin).
  • 쿼리 간에 async_read_counters를 공유하지 않습니다. #83423 (Azat Khuzhin).
  • 임시 데이터 저장소로 사용할 때 초기화되지 않은 파일 캐시로 인해 발생할 수 있는 오류를 수정합니다. #83539 (Bharat Nallan).
  • 항상 filesystem_prefetches_limit를 적용합니다 (MergeTreePrefetchedReadPool에서 설정된 경우에만 적용하지 않도록 변경). #83999 (Azat Khuzhin).

구성 및 설정 관련 수정

  • URI를 통해 설정을 전달할 때 마지막 값이 사용되도록 수정했습니다. #82137 (Sema Checherinda).
  • 클라이언트에서 전역 컨텍스트를 사용하지 않도록 하여 데이터 레이스를 수정하고, session_timezone 재정의 동작을 수정했습니다. 이전에는 예를 들어 session_timezoneusers.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 수정 사항

  • 이전에는 MongoDB 테이블 엔진 정의에서 host:port 인수에 경로 컴포넌트를 포함할 수 있었지만, 이는 아무 경고 없이 무시되었습니다. 현재 MongoDB 연동 기능에서는 이러한 테이블을 로드하지 않습니다. 이번 수정으로, MongoDB 엔진이 다섯 개의 인수를 갖는 경우에는 이러한 테이블을 로드하도록 허용하고 경로 컴포넌트는 무시하며, 인수에 지정된 데이터베이스 이름을 사용합니다. 참고: 이 수정 사항은 새로 생성된 테이블이나 mongo 테이블 함수(table function)를 사용하는 쿼리, 딕셔너리 소스 및 named collection(이름이 지정된 컬렉션)에는 적용되지 않습니다. #81942 (Vladimir Cherkasov).

기타 수정 사항

  • 이전 버전에서는 서버가 /js에 대한 요청에 대해 불필요하게 많은 콘텐츠를 반환했습니다. 이 변경으로 #61890 이슈가 해결되었습니다. #81895 (Alexey Milovidov).
  • 필요한 경우(예: 이름에 -와 같은 특수 문자가 포함된 경우) 데이터베이스와 테이블 이름에 백틱을 추가하도록 InterpreterInsertQuery::extendQueryLogElemImpl를 수정합니다. #81528 (Ilia Shvyrialkin).
  • suggestion 스레드와 메인 클라이언트 스레드 간의 잠재적인 데이터 레이스를 수정합니다. #82233 (Azat Khuzhin).
  • union/intersect/except_default_mode 리라이트에서 예외 안전성을 수정했습니다. #82664를 해결합니다. #82820 (Alexey Milovidov).
  • 캐시를 사용하지 않는 Database 구현을 사용할 때, 해당 테이블의 메타데이터는 컬럼이 반환되어 참조가 무효화된 후 삭제됩니다. #82939 (buyval01).
  • JSONEachRowWithProgress에서 Onprogress 호출이 최종 처리(finalization)와 동기화되었습니다. #83879 (Sema Checherinda).
  • MATERIALIZE COLUMN 쿼리 실행 시 checksums.txt에 예기치 않은 파일이 기록되고, 결국 데이터 파트(parts)가 detached 상태가 될 수 있던 드문 버그를 수정합니다. #84007 (alesapin).
  • 주기적인 파트 새로 고침 과정에서 예외를 적절히 처리합니다. #84083 (Azat Khuzhin).
  • 불리언 리터럴의 컬럼 이름이 "1"/"0" 대신 "true"/"false"를 사용하도록 생성 방식을 수정하여 쿼리에서 불리언 리터럴과 정수 리터럴 간 컬럼 이름 충돌을 방지합니다. #84945 (xiaohuanlin).
  • Merge table 엔진에서 잠재적인 부정확한 정렬 문제를 수정했습니다. #85025 (Xiaozhe Yu).
  • DiskEncrypted에 누락된 API를 구현했습니다. #85028 (Azat Khuzhin).
  • 이름 충돌이 발생하는 경우에도 WITH 절에서 새 분석기가 외부 별칭을 참조할 수 있도록 하위 호환성 설정을 도입했습니다. #82700을(를) 수정합니다. #83797 (Dmitry Novik).
  • 애널라이저가 활성화된 경우 remote 테이블 함수의 view(...) 인수에서 임의의 테이블을 참조할 수 있도록 허용합니다. #78717을 수정합니다. #79377을 수정합니다. #83844 (Dmitry Novik).
  • 실험적 트랜잭션에 사용되는 MergeTree에서 plain_rewritable/plain 메타데이터 타입과 함께 사용하는 append 쓰기를 수정했습니다. 이전에는 이 타입들이 단순히 무시되었습니다. #83695 (Tuan Pham Anh).
  • IAccessStorage에서 logger 사용 방식 수정. #84365 (Konstantin Bogdanov).
  • 데이터 레이크에서 가상 컬럼을 기준으로 파일을 프루닝하는 동작을 수정합니다. #84520 (Kseniia Sumarokova).
  • 지연된 원격 소스를 대상으로 쿼리할 때 벡터 인덱스가 범위를 벗어날 수 있는 문제를 수정합니다. #84820 (George Larionov).
  • object queue 엔진의 모든 설정이 테이블 메타데이터에 올바르게 저장되도록 수정했습니다. #84860 (Antonio Andelic).
  • lazy 컬럼을 external sort와 함께 사용할 때 발생하는 CORRUPTED_DATA 오류를 수정합니다. #84738 (János Benjamin Antal).
  • SYSTEM DROP REPLICA 쿼리 실행 중 불필요한 getStatus() 호출을 제거합니다. 백그라운드에서 테이블이 삭제될 때 Shutdown for storage is called 예외가 발생하던 경우를 수정합니다. #85220 (Nikolay Degterinsky).
  • CREATE OR REPLACERENAME 쿼리에서 누락되어 있던 테이블 이름 길이 검사를 추가했습니다. #85326 (Michael Kolupaev).
  • JSON에 대한 ALTER UPDATE 실행 중 발생하던 크래시와 데이터 손상을 수정했습니다. #85383 (Pavel Kruglov).
  • 긴 문자열 처리 시 CoalescingMergeTree에서 발생하던 세그폴트(segfault)를 수정합니다. 이 변경으로 #84582가 해결됩니다. #85709 (scanhex12).
  • send_logs_source_regexp를 수정합니다(#85105에서의 비동기 로깅 리팩터링 이후). #85797 (Azat Khuzhin).
  • MEMORY_LIMIT_EXCEEDED 오류에서 update_field가 있는 딕셔너리의 잠재적인 불일치 문제를 수정합니다. #85807 (Azat Khuzhin).
  • url() 테이블 FUNCTION이 비표준 포트에 접근할 때 Host 헤더에 포트 번호가 올바르게 포함되도록 HTTP 요청 처리를 수정했습니다. 이를 통해 개발 환경에서 흔히 사용되는 MinIO와 같은 S3 호환 서비스가 커스텀 포트를 사용할 때, presigned URL 사용 시 발생하던 인증 실패 문제가 해결됩니다. (Fixes #85898). #85921 (Tom Quist).