메인 콘텐츠로 건너뛰기
v24.12 릴리스를 기준으로 한 ClickHouse Cloud 서비스의 관련 변경 사항입니다.

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

  • greatestleast 함수는 이제 NULL 입력값을 무시합니다. 이전에는 인수 중 하나가 NULL이면 NULL을 반환했습니다. 예를 들어 SELECT greatest(1, 2, NULL)는 이제 2를 반환합니다. 이 변경으로 동작이 PostgreSQL과 호환됩니다. #65519 (kevinyhzou).
  • 예기치 않은 결과가 발생할 수 있으므로 기본적으로 ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY에서는 Variant/Dynamic 타입을 허용하지 않습니다. #69731 (Pavel Kruglov).
  • 시스템 테이블 generate_seriesgenerateSeries를 제거했습니다. 이 테이블들은 다음 이슈에서 실수로 추가되었습니다: #59390. #71091 (Alexey Milovidov).
  • StorageExternalDistributed를 제거했습니다. #70600을 해결합니다. #71176 (flynn).
  • 이제 서버 구성(users.xml)의 설정이 클라이언트에도 적용됩니다. date_time_output_format과 같은 포맷 설정에 유용합니다. #71178 (Michael Kolupaev).
  • JSON 서브컬럼 파일에서 이스케이프되지 않은 특수 문자로 인해 발생할 수 있는 No such file or directory 오류를 수정했습니다. #71182 (Pavel Kruglov).
  • 이제 Kafka, NATS, RabbitMQ 테이블 엔진은 SOURCES 계층에서 각각의 권한 부여로 관리됩니다. 이러한 엔진 유형으로 테이블을 생성하는 기본이 아닌 데이터베이스 사용자에게는 권한을 추가로 부여하십시오. #71250 (Christoph Wurm).
  • 실행 전에 전체 뮤테이션 쿼리(서브쿼리 포함)를 검사합니다. 이렇게 하면 잘못된 쿼리가 실수로 실행되어 유효한 뮤테이션을 막는 불필요한 뮤테이션이 쌓이는 일을 방지할 수 있습니다. #71300 (Christoph Wurm).
  • 파일 시스템 캐시 설정 skip_download_if_exceeds_query_cache의 이름을 filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit로 변경했습니다. #71578 (Kseniia Sumarokova).
  • 혼동을 방지하기 위해 min/max 함수에서 Dynamic/Variant 타입을 금지합니다. #71761 (Pavel Kruglov).
  • deltaSumTimestamp에서 Enum, UInt128, UInt256 인수에 대한 지원을 제거했습니다. 또한 deltaSumTimestamp의 두 번째(“timestamp”) 인수에서 Int8, UInt8, Int16, UInt16 지원도 제거했습니다. #71790 (Alexey Milovidov).
  • ClickHouse가 딕셔너리의 소스로 사용될 때 소스 쿼리 유효성 검사 기능을 추가했습니다. #72548 (Alexey Katsman).

새로운 기능

  • 지정된 테이블의 모든 파트에 대한 프라이머리 인덱스 또는 테이블을 지정하지 않은 경우 모든 테이블의 프라이머리 인덱스를 로드하는 SYSTEM LOAD PRIMARY KEY 명령을 구현했습니다. 이는 벤치마크에 유용하며 쿼리 실행 중 추가 지연 시간을 방지하는 데 도움이 됩니다. #66252 (ZAWA_ll).
  • 지정된 테이블의 모든 파트에 대한 프라이머리 인덱스를 로드하거나, 테이블을 지정하지 않으면 모든 테이블의 프라이머리 인덱스를 로드하는 SYSTEM LOAD PRIMARY KEY 구문이 추가되었습니다. 이는 벤치마크를 수행하고 쿼리 실행 중 추가 지연 시간을 방지하는 데 유용할 수 있습니다. #67733 (ZAWA_ll).
  • 현재 사용자/역할에 특정 권한이 부여되었는지, 그리고 해당 테이블/컬럼이 메모리에 존재하는지 확인하는 CHECK GRANT 쿼리를 추가했습니다. #68885 (Unalian).
  • 워크로드 및 리소스 관리용 SQL 구문이 추가되었습니다. 문서를 참조하십시오. #69187 (Sergei Trifonov).
  • Iceberg 데이터 스토리지 포맷은 테이블의 스키마를 폭넓게 수정할 수 있는 옵션을 제공합니다. 이번 풀 리퀘스트에서는 컬럼 순서와 컬럼 이름이 변경되고 단순한 유형 확장이 적용된 Iceberg 포맷 테이블을 읽는 기능이 구현되었습니다. #69445 (Daniil Ivanik).
  • 각 인증 메서드에 개별 만료일을 설정할 수 있도록 하고, 사용자 엔터티에서는 이를 제거했습니다. #70090 (Arthur Passos).
  • 쿼리 시작 노드에서 클러스터의 다른 노드로 외부 사용자 역할을 푸시합니다. LDAP와 같은 외부 인증 시스템에는 시작 노드만 액세스할 수 있을 때 유용합니다. #70332 (Andrey Zvonov).
  • String에서 JSON으로 변경하는 alter를 지원합니다. 이 PR은 또한 JSON 및 Dynamic 타입의 직렬화를 새 버전 V2로 변경합니다. 설정 merge_tree_use_v1_object_and_dynamic_serialization을 활성화하면 이전 버전 V1도 계속 사용할 수 있습니다(문제 없이 버전을 롤백할 수 있도록 업그레이드 중에 사용할 수 있습니다). #70442 (Pavel Kruglov).
  • DateTime64를 고정된 초 precision의 Int64 값으로 변환하는 toUnixTimestamp64Second 함수를 추가했습니다. 이를 통해 날짜가 1970년 1월 1일 목요일 00:00:00 UTC 이전인 경우 음수 값을 반환할 수 있습니다. #70597 (zhanglistar).
  • 원본 테이블의 프로젝션과 보조 인덱스가 대상 테이블의 프로젝션과 보조 인덱스의 부분 집합인 경우 ATTACH를 허용하는 새로운 설정 enforce_index_structure_match_on_partition_manipulation을 추가합니다. #70602를 닫습니다. #70603 (zwy991114).
  • 함수 cast의 출력은 Apache Spark와 달라 gluten 프로젝트에서 차이가 발생하며, 자세한 내용은 https://github.com/apache/incubator-gluten/issues/7602 를 참조하십시오. 이 PR은 Spark 텍스트 출력 형식 지원 기능을 추가하며, 기본적으로 비활성화되어 있습니다. #70957 (zhanglistar).
  • 사용자 인증을 위해 S3 endpoint에 새로운 헤더 유형인 access_header가 추가되었습니다. 이를 통해 우선순위가 가장 낮은 access header를 가져올 수 있으며, 이 값은 다른 소스(예: 테이블 스키마(schema) 또는 명명된 컬렉션)의 access_key_id로 덮어쓰게 됩니다. #71011 (MikhailBurdukov).
  • 설정 티어를 최초로 구현했습니다. #71145 (Raúl Marín).
  • ORDER BY WITH FILL 연산자에서 staleness 절을 지원하도록 했습니다. #71151 (Mikhail Artemenko).
  • JSON 문자열의 직렬화/역직렬화를 통해 Map/Tuple/Object를 새로운 JSON으로 간단히 CAST할 수 있도록 구현했습니다. #71320 (Pavel Kruglov).
  • 집계 함수 any에 대한 별칭 anyRespectNulls, firstValueRespectNulls, anyValueRespectNulls를 추가했습니다. 또한 집계 함수 anyLast에 대한 별칭 anyLastRespectNullslastValueRespectNulls도 추가했습니다. 이제 camel-case와 underscore가 섞인 구문 대신 더 자연스러운 camel-case 전용 구문을 사용할 수 있습니다. 예를 들어 anyLast_respect_nullsStateIf 대신 SELECT anyLastRespectNullsStateIf를 사용할 수 있습니다. #71403 (Peter Nguyen).
  • 구성 date_time_utc 매개변수가 추가되어 JSON 로그를 형식화할 때 RFC 3339/ISO8601 포맷의 UTC 날짜-시간을 지원합니다. #71560 (Ali).
  • 쿼리 계획(query plan)에서 inner (build) table 역할을 할 join 측을 선택하는 옵션이 추가되었습니다. 이 옵션은 query_plan_join_swap_table로 제어되며, auto로 설정할 수 있습니다. 이 모드에서는 ClickHouse가 행 수가 가장 적은 테이블을 선택하려고 합니다. #71577 (Vladimir Cherkasov).
  • 파트의 세분화 수준이 일정한 경우 인덱스 세분화 수준 값의 메모리 사용을 최적화했습니다. 또한 파트에 대해 항상 일정한 세분화 수준을 선택할 수 있는 기능(use_const_adaptive_granularity 설정)을 추가했으며, 이를 통해 메모리 사용을 항상 최적화된 상태로 유지할 수 있습니다. 이 기능은 대규모 워크로드(공유 스토리지에서 수조 개의 행을 처리하는 환경)에서 데이터 파트의 메타데이터(인덱스 세분화 수준 값)로 인해 메모리 사용량이 계속 증가하는 것을 방지하는 데 도움이 됩니다. #71786 (Anton Popov).
  • allowed_feature_tier를 모든 실험적/베타 기능을 비활성화하는 전역 스위치로 구현했습니다. #71841 (Raúl Marín).
  • iceberg[S3;HDFS;Azure]Cluster, deltaLakeCluster, hudiCluster 테이블 함수가 추가되었습니다. #72045 (Mikhail Artemenko).
  • ALTER USER {ADD|MODIFY|DROP SETTING}, ALTER USER {ADD|DROP PROFILE} 구문이 추가되었으며, ALTER ROLEALTER PROFILE에도 동일한 구문이 추가되었습니다. #72050 (pufit).
  • 정밀도-재현율 곡선의 AUC(곡선 아래 면적)를 계산하는 arrayPrAUC 함수를 추가했습니다. #72073 (Emmanuel).
  • MergeTree 테이블의 프라이머리 인덱스 캐시가 추가되었습니다(테이블 설정 use_primary_key_cache로 활성화할 수 있습니다). 프라이머리 인덱스에 지연 로드와 캐시가 활성화되어 있으면, 메모리에 계속 유지하는 대신 필요할 때 캐시에 로드됩니다(마크 캐시와 유사함). 데이터 파트의 삽입/머지/fetch 시와 테이블 재시작 시 프라이머리 인덱스를 예열하는 기능도 추가되었습니다(설정 prewarm_primary_key_cache로 활성화할 수 있습니다). #72102 (Anton Popov).
  • 배열 타입용 indexOfAssumeSorted 함수를 추가했습니다. 비내림차순으로 정렬된 배열의 검색을 최적화합니다. #72517 (Eric Kurbanov).
  • 집계 함수(aggregate function) groupConcat에서 선택적 두 번째 인수로 구분자를 사용할 수 있도록 했습니다. #72540 (Yarik Briukhovetskyi).
  • HTTP 응답 헤더를 사용자 지정할 수 있는 새로운 설정 http_response_headers가 추가되었습니다. 예를 들어, 데이터베이스에 저장된 이미지를 브라우저가 렌더링하도록 지정할 수 있습니다. 이 변경으로 #59620이 해결되었습니다. #72656 (Alexey Milovidov).
  • Int64 Unix timestamp 값을 DateTime64로 변환하는 fromUnixTimestamp64Second 함수를 추가했습니다. #73146 (Robert Schulze).

성능 개선

  • 데이터 블록에서 NULL 값의 비율이 지정된 임계값을 초과할 경우 Nullable 컬럼에 대해 함수를 단락 평가 방식으로 실행할 수 있도록 하는 2개의 새로운 설정 short_circuit_function_evaluation_for_nullsshort_circuit_function_evaluation_for_nulls_threshold를 추가했습니다. 즉, 함수는 NULL이 아닌 값을 가진 행에서만 실행됩니다. 이 기능은 인수 중 하나 이상이 NULL인 행에 대해 NULL 값을 반환하는 함수에만 적용됩니다. #60129 (李扬).
  • 객체 스토리지 디스크에서 clickhouse disks remove --recursive의 메모리 사용량이 감소했습니다. #67323 (Kirill).
  • 이제 join_algorithm='parallel_hash'에서는 병렬 처리를 위해 스레드에 분배할 때 입력 블록의 컬럼을 복사하지 않습니다. #67782 (Nikita Taranov).
  • 더 많은 표현식에서 JIT 컴파일을 활성화했습니다: abs/bitCount/sign/modulo/pmod/isNull/isNotNull/assumeNotNull/to(U)Int*/toFloat*, 비교 함수(=, <, >, >=, <=), 논리 함수(and, or). #70598 (李扬).
  • 이제 join_algorithm 설정이 default로 지정된 경우에는(적용 가능한 경우) parallel_hash 알고리즘이 사용됩니다. parallel_hash를 사용할 수 없으면 이전의 두 가지 대안인 directhash도 계속 고려됩니다. #70788 (Nikita Taranov).
  • 겹치지 않는 파트용 Replacing 머지 알고리즘을 최적화했습니다. #70977 (Anton Popov).
  • readonly 및 write-once 디스크에 있는 분리된 파트는 메트릭과 system.detached_parts에 나열되지 않습니다. #71086 (Alexey Milovidov).
  • 기본적으로 계산 비용이 큰 비동기 메트릭은 계산하지 않습니다. 이 기능은 #40332에서 도입되었지만, 단 한 고객에게만 필요한 무거운 백그라운드 작업을 두는 것은 바람직하지 않습니다. #71087 (Alexey Milovidov).
  • 임계 영역을 줄여 system.query&#95;metric&#95;log 수집 주기의 성능과 정확도를 개선했습니다. #71473 (Pablo Marcos).
  • 조인 중 사용되는 해시 테이블 수를 줄이기 위해 WHEREON 표현식에서 공통 표현식을 추출하는 옵션이 추가되었습니다. optimize_extract_common_expressions = 1로 활성화할 수 있습니다. #71537 (János Benjamin Antal).
  • LowCardinality(String)을 사용하는 SELECT에서 인덱스를 사용할 수 있게 되었습니다. #71598 (Yarik Briukhovetskyi).
  • 병렬 레플리카와 활성화된 로컬 계획(local plan)으로 쿼리를 실행할 때는 워커에서의 스킵 인덱스 분석을 건너뜁니다. coordinator는 자체 측(쿼리 initiator 측)에서 수행한 인덱스 분석을 바탕으로 워커가 읽을 범위를 선택합니다. #72109 (Igor Nikonov).
  • https://github.com/ClickHouse/ClickHouse/pull/57631의 Compact parts에서 단일 컬럼의 서브컬럼 읽기 최적화를 복원했습니다. 해당 최적화는 실수로 삭제된 것이었습니다. #72285 (Pavel Kruglov).
  • 비교자에서 호출의 가상화 오버헤드를 제거해 LowCardinality(String) 컬럼 정렬 속도를 높였습니다. #72337 (Alexander Gololobov).
  • 일부 단순한 데이터 타입에서 argMin/Max 함수 성능을 최적화했습니다. #72350 (alesapin).
  • 메모리 추적기의 잠금 방식을 공유 잠금 기반으로 최적화해 잠금 경합을 줄였습니다. #72375 (Jiebin Sun).
  • 새로운 설정 use_async_executor_for_materialized_views를 추가했습니다. materialized view 쿼리를 비동기식으로, 경우에 따라 다중 스레드로 실행하도록 하며, INSERT 중 뷰 처리 속도를 높일 수 있지만 메모리를 더 많이 사용할 수 있습니다. #72497 (alesapin).
  • 설정 max_size_to_preallocate_for_aggregation, max_size_to_preallocate_for_joins의 기본값이 10^12로 더 높아져, 이 최적화가 더 많은 경우에 적용됩니다. #72555 (Nikita Taranov).
  • 집계 함수 상태를 역직렬화하는 성능이 개선되었습니다(AggregateFunction 데이터 타입 및 분산 쿼리에서). RowBinary 포맷을 파싱하는 성능도 소폭 개선되었습니다. #72818 (Anton Popov).

개선 사항

  • 상수 배열과 상수인 캡처 인수를 사용하는 고차 함수는 상수 값을 반환합니다. #58400 (Alexey Milovidov).
  • 가상 행을 생성하여 read-in-order를 최적화함으로써, 특히 여러 파트가 있을 때 머지 정렬 중 읽는 데이터 양을 줄였습니다. #62125 (Shichao Jin).
  • 쿼리 계획 단계 이름(EXPLAIN PLAN json=1)과 파이프라인 프로세서 이름(EXPLAIN PIPELINE compact=0,graph=1)에는 이제 접미사로 고유 ID가 붙습니다. 이를 통해 프로세서 프로파일러 출력과 OpenTelemetry trace를 EXPLAIN 출력에 대응시킬 수 있습니다. #63518 (qhsong).
  • Azure Blob Storage에 쓴 후 객체가 존재하는지 확인하는 옵션이 추가되었습니다. 이 옵션은 check_objects_after_upload 설정으로 제어됩니다. #64847 (Smita Kulkarni).
  • HashTable destroyElements의 use-after-dtor 문제를 수정했습니다. #65279 (cangyin).
  • clickhouse-local에서 기본적으로 Atomic 데이터베이스를 사용합니다. #50647의 1번 및 5번 항목을 처리합니다. #44817을 닫습니다. #68024 (Alexey Milovidov).
  • 쓰기 버퍼는 명시적으로 취소하거나 종료해야 합니다. 예외는 클라이언트에 오류를 알리기 위해 HTTP protocol을 중단합니다. #68800 (Sema Checherinda).
  • replica&#95;dir를 생성하고 DDLWorker에서 레플리카를 활성 상태로 표시해, 실행 중인 DDLWorker 호스트를 보고하도록 개선했습니다. #69658 (Tuan Pham Anh).
    1. DDLQueryStatusSource 리팩터링: - DDLQueryStatusSource의 이름을 DistributedQueryStatusSource로 변경하고, 이를 기본 클래스로 만듭니다 - DDL On Cluster와 복제된 데이터베이스의 DDL 작업 상태를 각각 쿼리하기 위해 DDLQueryStatusSource에서 파생된 두 개의 하위 클래스 DDLOnClusterQueryStatusSourceReplicatedDatabaseQueryStatusSource를 생성합니다. 2. DDLOnClusterQueryStatusSource&#96;에서 오프라인 호스트를 기다리지 않도록 중지하는 기능을 지원합니다. #69660 (Tuan Pham Anh).
  • 새로운 취소 로직 추가: CancellationChecker는 시작된 모든 쿼리의 timeout을 확인하고, timeout에 도달하면 해당 쿼리를 중단합니다. #69880 (Yarik Briukhovetskyi).
  • 기본적으로 비등가 조건이 허용되도록 allow_experimental_join_condition 설정을 제거했습니다. #69910 (Vladimir Cherkasov).
  • 기본적으로 parallel_replicas_local_plan을 활성화했습니다. 쿼리 이니시에이터에서 완전한 로컬 계획을 생성하면 리소스 활용을 줄이면서 병렬 레플리카 성능을 향상시키고, 더 많은 쿼리 최적화를 적용할 수 있습니다. #70171 (Igor Nikonov).
  • http_handlers에서 user/password를 설정할 수 있는 기능을 추가했습니다(dynamic_query_handler/predefined_query_handler용). #70725 (Azat Khuzhin).
  • S3Queue 스토리지의 특정 설정에 대해 ALTER TABLE ... MODIFY/RESET SETTING ...을 지원합니다. #70811 (Kseniia Sumarokova).
  • 디렉터리 목록을 조회할 때는 객체 스토리지 API를 호출하지 마십시오. 비용 비효율적일 수 있기 때문입니다. 대신 파일 이름 목록을 메모리에 저장하십시오. 이에 따른 절충점은 초기 적재 시간이 늘어나고 파일 이름을 저장하는 데 필요한 메모리 사용량이 증가한다는 점입니다. #70823 (Julia Kartseva).
  • 병렬로 데이터를 압축할 수 있는 --threads 매개변수를 clickhouse-compressor에 추가했습니다. #70860 (Alexey Milovidov).
  • Replxx 클라이언트 이력 크기를 설정할 수 있도록 했습니다. #71014 (Jiří Kozlovský).
  • prewarm_mark_cache 설정이 추가되었으며, 이 설정을 사용하면 삽입, 머지, 파트 fetch, 그리고 테이블 시작 시점에 마크를 마크 캐시에 로드할 수 있습니다. #71053 (Anton Popov).
  • Parquet 네이티브 리더에 Boolean 지원이 추가되었습니다. #71055 (Arthur Passos).
  • S3와 상호 작용할 때 발생하는 “Malformed message”와 같은 더 많은 오류에서 재시도하도록 개선했습니다. #71088 (Alexey Milovidov).
  • S3 관련 일부 메시지의 로그 레벨을 낮췄습니다. #71090 (Alexey Milovidov).
  • 공백이 포함된 HDFS 파일에 대한 쓰기를 지원합니다. #71105 (exmy).
  • system.session_log은 꽤 괜찮습니다. 이로써 #51760가 해결되었습니다. #71150 (Alexey Milovidov).
  • 병렬 레플리카를 사용하는 쿼리의 RIGHT / FULL 조인 문제를 수정했습니다. 이제 RIGHT 조인은 병렬 레플리카로 실행할 수 있습니다(오른쪽 테이블 읽기가 분산 처리됨). FULL 조인은 노드 간에 병렬화할 수 없어 로컬에서 실행됩니다. #71162 (Igor Nikonov).
  • 복제된 테이블, 딕셔너리, 뷰의 수를 제한하는 설정이 추가되었습니다. #71179 (Kirill).
  • #71227 문제를 수정했습니다. #71286 (Arthur Passos).
  • 서버/사용자 메모리 사용량에 따라 디스크 기반 GROUP BY/ORDER BY가 자동으로 사용됩니다. max_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sort 쿼리 설정으로 제어됩니다. #71406 (Azat Khuzhin).
  • 호스트별 대시보드 Overview (host)Cloud overview (host)를 고급 대시보드에 추가했습니다. #71422 (alesapin).
  • 함수 translate는 이제 from 인수에 to 인수보다 많은 문자가 포함된 경우 문자 삭제를 지원합니다. 예시: SELECT translate('clickhouse', 'clickhouse', 'CLICK')는 이제 CLICK을 반환합니다. #71441 (shuai.xu).
  • 새 함수 parseDateTime64, parseDateTime64OrNull, parseDateTime64OrZero가 추가되었습니다. 기존 함수 parseDateTime(및 그 변형)과 비교하면, 이 함수들은 DateTime 대신 DateTime64 타입의 값을 반환합니다. #71581 (kevinyhzou).
  • 메모리의 index_granularity 배열을 알맞게 축소해 MergeTree 테이블 엔진 계열의 메모리 사용량을 줄였습니다. #71595 (alesapin).
  • 명령줄 애플리케이션이 여러 SQL 문에서도 구문 강조를 지원합니다. #71622 (Alexey Milovidov).
  • 명령줄 애플리케이션은 오류가 발생하면 0이 아닌 종료 코드를 반환합니다. 이전 버전에서는 disks 애플리케이션이 오류 발생 시 0을 반환했으며, 다른 애플리케이션도 오류 코드 256 (PARTITION_ALREADY_EXISTS)과 512 (SET_NON_GRANTED_ROLE)에 대해 0을 반환했습니다. #71623 (Alexey Milovidov).
  • Vertical 포맷(\G로 쿼리를 끝내면 활성화되기도 함)에 Pretty 형식의 기능이 추가되었습니다. 예: - 숫자에서 천 단위 구분을 강조 - 읽기 쉬운 숫자 표시 힌트 출력. #71630 (Alexey Milovidov).
  • 설정 filesystem_cache_prefer_bigger_buffer_size를 사용해 파일 시스템 캐시의 메모리 버퍼 증가를 비활성화할 수 있습니다. #71640 (Kseniia Sumarokova).
  • 파일 시스템 캐시에서 백그라운드 다운로드의 최대 file segment 크기를 위한 별도 설정 background_download_max_file_segment_size가 추가되었습니다. #71648 (Kseniia Sumarokova).
  • enable_http_compression의 기본값을 0에서 1로 변경합니다. #71591를 해결합니다. #71774 (Peter Nguyen).
  • Object에서 JSON으로 ALTER하는 기능을 지원합니다. #71784 (Pavel Kruglov).
  • JSON 타입 파싱이 약간 개선되었습니다. 현재 JSON 경로의 블록에 여러 타입의 값이 포함된 경우, 특별한 best-effort 순서에 따라 타입을 시도해 가장 적합한 타입을 선택합니다. #71785 (Pavel Kruglov).
  • 이전에는 system.asynchronous_metrics를 읽을 때 동시 업데이트가 완료될 때까지 기다려야 했습니다. 시스템에 높은 부하가 걸려 있으면 오래 걸릴 수 있습니다. 이 변경으로 이제는 이전에 수집된 값을 항상 읽을 수 있습니다. #71798 (Alexander Gololobov).
  • polling_max_timeout_ms는 10분으로, polling_backoff_ms는 30초로 설정합니다. #71817 (Kseniia Sumarokova).
  • ‘SELECT - FROM t LIMIT 1’와 같은 쿼리는 실제로 사용되지 않는데도 파트 인덱스를 로드하곤 했습니다. #71866 (Alexander Gololobov).
  • 이전 호환성 설정에서는 Allow_reorder_prewhere_conditions가 기본적으로 활성화되어 있습니다. #71867 (Raúl Marín).
  • bitmapTransform 함수를 사용하고 인수 타입이 올바른 경우에는 system.errors 테이블의 ILLEGAL_TYPE_OF_ARGUMENT 카운터가 증가하지 않도록 수정했습니다. #71971 (Dmitry Novik).
  • Dictionary storage, 딕셔너리 테이블 함수 또는 딕셔너리 자체에 대한 직접 SELECT를 사용해 딕셔너리에서 직접 데이터를 조회할 때는 이제 해당 딕셔너리에 대한 SELECT 권한 또는 dictGet 권한만 있으면 됩니다. 이는 ACL 우회를 방지하려는 이전 변경 사항과 일치합니다: https://github.com/ClickHouse/ClickHouse/pull/57362https://github.com/ClickHouse/ClickHouse/pull/65359. 또한 후자의 변경 사항이 하위 호환되도록 합니다. #72051 (Nikita Mikhaylov).
  • Advanced dashboard HTML 페이지에 system.dashboards 테이블의 대시보드를 선택하는 드롭다운 선택기를 추가했습니다. #72081 (Sergei Trifonov).
  • 분산 INSERT ... SELECT의 계획을 생성할 때 prefer_locahost_replica를 적용합니다. #72190 (filimonov).
  • 문제는 여기에 설명되어 있습니다. Azure Iceberg Writer는 사양을 위반하는 Iceberg metadata files(및 manifest files)를 생성합니다. 이 PR에서는 v2 리더로 v1 Iceberg 포맷 메타데이터를 읽도록 시도하는 기능을 추가했고(해당 메타데이터가 그런 방식으로 작성되기 때문입니다), manifest 파일에 해당 필드가 생성되지 않았을 때 오류가 발생하도록 했습니다. #72277 (Daniil Ivanik).
  • JSON/Dynamic/Variant 타입이 실험적 기능에서 베타로 전환되었습니다. #72294 (Pavel Kruglov).
  • 이제 쿼리에서 UNION [ALL]을 사용해 CREATE MATERIALIZED VIEW를 생성할 수 있습니다. 동작은 JOIN이 있는 matview와 동일합니다: *SELECT 표현식에서 첫 번째 테이블만 삽입 트리거로 동작하며- , 나머지 모든 테이블은 무시됩니다. #72347 (alesapin).
  • 삽입된 배치에 파티션 키 값이 하나만 있는 경우 MergeTree에 대한 삽입 속도를 높였습니다. #72348 (alesapin).
  • 새로운 MergeTreeIndexGranularityInternalArraysTotalSize 메트릭을 system.metrics에 추가했습니다. 이 메트릭은 메모리 사용량이 과도하게 높아지는 문제에 취약한 대규모 데이터셋을 가진 인스턴스를 찾는 데 필요합니다. #72490 (Miсhael Stetsyuk).
  • 이제 쿼리에서 Format Null을 사용할 때 Null의 모든 표기를 인식합니다. 이전에는 다른 표기(예: NULL)를 사용해도 예외가 발생하지 않았지만, 동시에 그런 경우에는 Null 포맷이 실제로 사용되지도 않았습니다. #72658 (Nikita Taranov).
  • set에서 Enum에 없는 알 수 없는 값도 허용합니다. #72662를 수정했습니다. #72686 (zhanglistar).
  • 비활성 파트의 총 바이트 수를 집계할 수 있도록 system.tables에 total_bytes_with_inactive를 추가했습니다. #72690 (Kai Zhu).
  • system.settings_changes에 MergeTreeSettings가 추가되었습니다. #72694 (Raúl Marín).
  • Enum 데이터 타입에서 문자열 검색 연산자(예: like)를 지원하고, #72661 문제를 수정했습니다. #72732 (zhanglistar).
  • notEmpty 함수에서 JSON 타입을 지원하도록 개선했습니다. #72741 (Pavel Kruglov).
  • GCS S3 오류 AuthenticationRequired 파싱을 지원합니다. #72753 (Vitaly Baranov).
  • ifNull 및 coalesce 함수에서 Dynamic type을 지원하도록 했습니다. #72772 (Pavel Kruglov).
  • JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCount 프로파일 이벤트가 추가되었습니다. #72842 (Vladimir Cherkasov).
  • 함수 toFloat64/touInt32/etc.에서 Dynamic을 지원하도록 했습니다. #72989 (Pavel Kruglov).

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

  • ATTACH PART 쿼리 중에 중복 제거된 파트가 더 이상 attaching_ 접두사가 붙은 상태로 남아 있지 않습니다. #65636 (Kirill).
  • IN 함수에서 DateTime64의 정밀도가 손실되는 버그를 수정했습니다. #67230 (Yarik Briukhovetskyi).
  • ORDER BY ... WITH FILL에서 IGNORE/RESPECT NULLS를 사용하는 함수 사용 시 발생할 수 있는 논리 오류를 수정하고, #57609를 해결했습니다. #68234 (Vladimir Cherkasov).
  • 메모리 제한에 도달했을 때 포맷 Native를 사용하는 비동기 삽입에서 드물게 발생하던 논리 오류를 수정했습니다. #68965 (Anton Popov).
  • EPHEMERAL 컬럼의 CREATE TABLE COMMENT를 수정했습니다. #70458 (Yakov Olkhovskiy).
  • LowCardinality(널 허용) 사용 시 JSONExtract의 논리 오류를 수정했습니다. #70549 (Pavel Kruglov).
  • 테이블 이름이 너무 길 때의 동작을 바로잡았습니다. #70810 (Yarik Briukhovetskyi).
  • URL 엔진에서 사용자 지정 header로 Content-Type을 재정의할 수 있는 기능을 추가했습니다. #70859 (Artem Iurin).
  • StorageS3Queue의 논리 오류인 “이미 존재하므로 /processed에 영속 노드를 생성할 수 없습니다”를 수정했습니다. #70984 (Kseniia Sumarokova).
  • 프로젝션 경량 삭제의 rebuild 옵션에서 _row_exists 컬럼이 고려되지 않던 버그를 수정했습니다. #71089 (Shichao Jin).
  • 예기치 않은 경합 상태로 인해 system.query_metric_log에 잘못된 값이 기록되는 문제를 수정했습니다. #71124 (Pablo Marcos).
  • quantileExactWeightedInterpolated의 집계 함수 이름 불일치 문제를 수정했습니다. 이 버그는 https://github.com/ClickHouse/ClickHouse/pull/69619에서 유입되었습니다. cc @Algunenano. #71168 (李扬).
  • 함수 비교에서 Dynamic 사용 시 발생하는 bad_weak_ptr 예외를 수정했습니다. #71183 (Pavel Kruglov).
  • zero-copy 복제를 사용하는 ReplicatedMergeTree에서 해당 blob을 사용하는 노드가 있는 경우 blob을 삭제하지 않습니다. #71186 (Antonio Andelic).
  • HTTP 및 Async Inserts를 통해 Native 형식에서 포맷 설정이 무시되던 문제를 수정했습니다. #71193 (Pavel Kruglov).
  • 설정 use_query_cache = 1로 실행되는 SELECT 쿼리는 시스템 테이블(system table) 이름이 문자열 리터럴로 포함되어 있어도 더 이상 거부되지 않습니다. 예를 들어, 이제 SELECT - FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true;가 정상적으로 동작합니다. #71254 (Robert Schulze).
  • enable_filesystem_cache=1로 설정했지만 스토리지 구성의 디스크에 캐시 구성이 없는 경우 메모리 사용량이 증가하던 버그를 수정했습니다. #71261 (Kseniia Sumarokova).
  • Dynamic 컬럼의 LowCardinality 딕셔너리를 역직렬화하는 중 발생할 수 있는 “Cannot read all data” 오류를 수정했습니다. #71299 (Pavel Kruglov).
  • 클라이언트에서 병렬 출력 형식 정리가 완전히 이루어지지 않던 문제를 수정했습니다. #71304 (Raúl Marín).
  • 이름이 지정된 컬렉션에 누락되어 있던 이스케이프 해제를 추가했습니다. 이 수정이 없으면 clickhouse-server가 시작되지 않습니다. #71308 (MikhailBurdukov).
  • 네이티브 프로토콜에서 빈 블록이 포함된 async inserts 문제를 수정했습니다. #71312 (Anton Popov).
  • 잘못된 와일드카드 권한을 부여할 때 발생하던 AST 포맷 불일치 문제를 수정했습니다 #71309. #71332 (pufit).
  • JSON 타입 힌트에서 의심스럽거나 실험적인 타입을 확인합니다. #71369 (Pavel Kruglov).
  • Variant 컬럼이 있는 청크에서 발생하는 “Invalid number of rows” 오류를 수정했습니다. #71388 (Pavel Kruglov).
  • 잘못된 인수(예: NULL)를 전달하면 mongodb 테이블 함수가 충돌하던 문제를 수정했습니다. #71426 (Vladimir Cherkasov).
  • optimize_rewrite_array_exists_to_has에서 발생하던 충돌을 수정했습니다. #71432 (Raúl Marín).
  • palin_rewritable 디스크에서 디렉터리 생성이 실패할 때 트랜잭션 롤백 중 발생하는 NoSuchKey 오류를 수정했습니다. #71439 (Julia Kartseva).
  • 삽입 작업에서 max_insert_delayed_streams_for_parallel_write 설정의 사용 방식을 수정했습니다. 이전에는 이 설정이 잘못 동작하여 여러 파티션에 데이터를 쓰는 삽입 작업에서 메모리 사용량이 과도하게 높아질 수 있었습니다. #71474 (Anton Popov).
  • WHERE 조건에 arrayJoin이 겉으로는 나타날 수 있는 경우 발생할 수 있는 Argument for function must be constant 오류(이전 분석기)를 수정했습니다. https://github.com/ClickHouse/ClickHouse/pull/65414 이후 발생한 회귀입니다. #71476 (Nikolai Kochetov).
  • 컬럼이 0개인 SortCursor에서 발생하는 충돌을 방지합니다(이전 분석기). #71494 (Raúl Marín).
  • 초기화되지 않은 orc 데이터로 인해 date32가 범위를 벗어나는 문제를 수정했습니다. 자세한 내용은 https://github.com/apache/incubator-gluten/issues/7823를 참조하십시오. #71500 (李扬).
  • Dynamic 및 JSON 타입의 wide part에서 컬럼 크기 계산 문제를 수정했습니다. #71526 (Pavel Kruglov).
  • materialized view 내부 쿼리에서 CTE와 함께 IN을 사용할 때 발생하던 분석기 문제를 수정했습니다. #65598을 해결했습니다. #71538 (Maksim Kita).
  • 범위를 벗어난 경우 bitShift 함수가 오류를 발생시키는 대신 0 또는 기본 문자를 반환하도록 했습니다. #71580 (Pablo Marcos).
  • 특정 엔진에서 materialized view 사용 시 server가 충돌하던 문제를 수정했습니다. #71593 (Pervakov Grigorii).
  • 상수 배열의 별칭을 포함한 중첩 데이터 구조에 대해 ARRAY JOIN을 수행할 때 널 포인터 역참조가 발생하던 문제를 수정했습니다. 이로써 #71677이 해결되었습니다. #71678 (Alexey Milovidov).
  • 빈 Tuple로 ALTER를 수행할 때 발생하는 LOGICAL_ERROR를 수정했습니다. 이로써 #71647이 해결됩니다. #71679 (Amos Bird).
  • NOT IN 연산자에서는 파티션 컬럼에 대한 프레디케이트의 상수 Set을 변환하지 않습니다. #71695 (Eduard Karacharov).
  • LowCardinality(Nullable)에서 Dynamic으로 CAST할 때 발생할 수 있던 문제를 수정했습니다. 이전에는 Bad cast from type DB::ColumnVector<int> to DB::ColumnNullable 오류로 이어질 수 있었습니다. #71742 (Pavel Kruglov).
  • DateTime64 유형의 기본 키가 있는 WHERE 조건에서 발생하던 toDayOfWeek 예외를 수정했습니다. #71849 (Yakov Olkhovskiy).
  • 희소 컬럼으로 파싱한 뒤 기본값이 채워지지 않던 문제가 수정되었습니다. #71854 (Anton Popov).
  • 분산 테이블에서 입력이 ALIAS인 경우 발생하는 GROUPING 함수 오류를 수정하고 #68602를 해결했습니다. #71855 (Vladimir Cherkasov).
  • WITH TIES 절을 사용하는 SELECT SQL 문이 충분한 수의 행을 반환하지 못할 수 있던 문제를 수정했습니다. #71886 (wxybear).
  • arrayWithConstant 평가에서 배열 크기 제한을 초과한 것으로 컬럼을 잘못 판단해 발생하던 TOO_LARGE_ARRAY_SIZE 예외를 수정했습니다. #71894 (Udi).
  • clickhouse-benchmark가 1초 이상 걸리는 쿼리에 대해 잘못된 메트릭을 보고했습니다. #71898 (Alexey Milovidov).
  • clickhouse-client에서 진행률 표시기와 진행률 테이블 간 데이터 레이스를 수정했습니다. 이 문제는 FROM INFILE을 사용할 때 발생합니다. INSERT 쿼리 중 키 입력을 감지해 진행률 테이블 표시를 전환합니다. #71901 (Julia Kartseva).
  • Pretty JSON 포맷에서 Dynamic 값 직렬화 문제를 수정했습니다. #71923 (Pavel Kruglov).
  • 24.6에서 오작동하던 system.s3/azure_queue_log의 rows_processed 컬럼을 수정했습니다. #69975를 해결합니다. #71946 (Kseniia Sumarokova).
  • s3/s3Cluster 함수가 불완전한 결과를 반환하거나 예외를 발생시킬 수 있던 문제를 수정했습니다. 이 문제는 s3 URI에서 glob 패턴(예: pattern/*)을 사용하고, 키가 pattern/인 빈 객체가 존재해야 하는 경우와 관련이 있었습니다(이러한 객체는 S3 Console에서 자동으로 생성됩니다). 또한 설정 s3_skip_empty_files의 기본값이 false에서 true로 변경되었습니다. #71947 (Nikita Taranov).
  • clickhouse-client 구문 강조에서 발생하던 충돌을 수정했습니다. #71864를 해결합니다. #71949 (Nikolay Degterinsky).
  • 첫 번째 인수가 상수일 때 ORDER BY에 이항 단조 함수가 포함된 MergeTree 테이블에서 발생하는 Illegal type 오류를 수정했습니다. #71941을 수정합니다. #71966 (Nikolai Kochetov).
  • subquery 내부에서 사용되는 EXPLAIN AST에는 SELECT 쿼리만 허용됩니다. 다른 유형의 쿼리를 사용하면 논리 오류인 ‘Bad cast from type DB::ASTCreateQuery to DB::ASTSelectWithUnionQuery’ 또는 Inconsistent AST formatting이 발생합니다. #71982 (Pavel Kruglov).
  • clickhouse-client로 레코드를 삽입할 때 클라이언트는 서버에서 컬럼 설명을 읽습니다. 하지만 설명을 잘못된 순서로 기록하는 버그가 있었으며, 올바른 순서는 [statistics, ttl, settings]여야 합니다. #71991 (Han Fei).
  • format_alter_commands_with_parentheses가 활성화된 경우 MOVE PARTITION ... TO TABLE ... ALTER 명령의 포맷을 수정했습니다. #72080 (János Benjamin Antal).
  • File/S3/URL/HDFS/Azure 엔진의 CREATE 쿼리에 추론된 포맷 이름을 추가했습니다. 이전에는 서버가 재시작될 때마다 포맷 이름을 추론했으며, 지정된 데이터 파일이 삭제되면 서버 시작 중 오류가 발생했습니다. #72108 (Pavel Kruglov).
  • min_age_to_force_merge_on_partition_only가 이미 단일 파트로 머지된 동일한 파티션에 대해 반복적으로 머지를 시도하느라 멈추고, 여러 파트를 가진 파티션은 머지하지 않던 버그를 수정했습니다. #72209 (Christoph Wurm).
  • 희소 컬럼을 처리하는 드문 경우에 발생하던 SimpleSquashingChunksTransform의 크래시를 수정했습니다. #72226 (Vladimir Cherkasov).
  • GraceHashJoin의 data race를 수정하여 조인 출력에서 일부 행이 누락될 수 있던 문제를 해결했습니다. #72233 (Nikita Taranov).
  • 구체화된 _block_number 컬럼이 있는 ALTER DELETE 쿼리의 문제를 수정했습니다(설정 enable_block_number_column이 활성화된 경우). #72261 (Anton Popov).
  • ColumnDynamic::dumpStructure()ConcurrentHashJoin 생성자 등에서 동시에 호출될 때 발생하던 데이터 레이스를 수정했습니다. #72278 (Nikita Taranov).
  • ORDER BY ... WITH FILL에서 중복 컬럼으로 인해 발생할 수 있는 LOGICAL_ERROR 문제를 수정했습니다. #72387 (Vladimir Cherkasov).
  • optimize_functions_to_subcolumns 적용 후 여러 사례에서 발생한 타입 불일치를 수정했습니다. #72394 (Anton Popov).
  • BACKUP DATABASE db EXCEPT TABLES db.table 쿼리 파싱 중 발생하던 오류를 수정했습니다. #72429 (Konstantin Bogdanov).
  • 빈 Variant를 생성하지 못하도록 했습니다. #72454 (Pavel Kruglov).
  • system.mergesresult_part_path 잘못된 포맷을 수정했습니다. #72567 (Konstantin Bogdanov).
  • 요소가 하나인 glob 파싱을 수정했습니다. #72572 (Konstantin Bogdanov).
  • ARRAY JOIN이 포함된 분산 쿼리에서 팔로워 server의 쿼리 생성 문제를 수정했습니다. #69276를 수정합니다. #72608 (Dmitry Novik).
  • DateTime64에서 DateTime64가 아무것도 반환하지 않는 버그를 수정했습니다. #72640 (Yarik Briukhovetskyi).
  • tracked_files_limit 설정값이 S3 파일 생성 속도보다 작은 경우 S3Queue Unordered mode에서 발생하던 “No such key” 오류를 수정했습니다. #72738 (Kseniia Sumarokova).
  • 마크 캐시가 크면 이를 삭제하는 데 상당한 시간이 걸릴 수 있습니다. 이 동안 Context 뮤텍스를 잡고 있으면 다른 많은 작업이 막히고, 심지어 뮤텍스가 해제될 때까지는 새 클라이언트 connection도 설정할 수 없습니다. 또한 동기화를 위해 이 뮤텍스를 계속 잡고 있을 필요는 없으며, shared ptr를 통해 캐시에 대한 로컬 참조만 유지하면 충분합니다. #72749 (Alexander Gololobov).
  • PK 캐시가 테스트 인스턴스 중 하나에서 크기를 크게 과소평가하고 있었습니다. 특히 LowCardinality 컬럼에서는 딕셔너리 크기가 포함되지 않았습니다. 수정은 캐시 항목 크기에 대한 추가 오버헤드 추정치와 함께 column->allocatedBytes()를 사용하도록 변경한 것입니다. #72750 (Alexander Gololobov).
  • 로컬에 사용자가 존재하지 않을 때 RemoteQueryExecutor에서 예외가 발생하던 문제를 수정했습니다. #72759 (Andrey Zvonov).
  • 구체화된 _block_number 컬럼이 있는 경우 발생하던 뮤테이션 문제가 수정되었습니다(enable_block_number_column 설정이 활성화된 경우). #72854 (Anton Popov).
  • 백업에 빈 파일이 있는 경우 일반적인 재기록 가능 디스크에서 백업/복원이 제대로 작동하지 않던 문제를 수정했습니다. #72858 (Kseniia Sumarokova).
  • DistributedAsyncInsertDirectoryQueue에서 삽입 작업이 제대로 취소되도록 수정했습니다. #72885 (Antonio Andelic).
  • 잘못된 데이터를 희소 컬럼으로 파싱할 때 발생하던 크래시를 수정했습니다(설정 enable_parsing_to_custom_serialization이 활성화된 경우 발생할 수 있습니다). #72891 (Anton Popov).
  • 백업 복원 중 발생할 수 있는 비정상 종료 문제를 수정했습니다. #72947 (Kseniia Sumarokova).
  • 쿼리의 ON 절에 부등식 필터가 포함된 복잡한 조건이 있을 때 발생할 수 있는 parallel_hash JOIN 메서드의 버그를 수정했습니다. #72993 (Nikita Taranov).
  • 손상된 역직렬화를 방지하기 위해 JSON 파싱 중 기본 포맷 설정을 사용합니다. #73043 (Pavel Kruglov).
  • 지원되지 않는 저장소에서의 트랜잭션 충돌을 수정했습니다. #73045 (Raúl Marín).
  • Tuple 파싱 중 중복된 JSON 키를 검사하도록 했습니다. 이전에는 이로 인해 파싱 중 논리 오류 Invalid number of rows in Chunk가 발생할 수 있었습니다. #73082 (Pavel Kruglov).
마지막 수정일 2026년 6월 10일