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

2024 변경 내역

목차

ClickHouse v24.12 릴리스, 2024-12-19
ClickHouse v24.11 릴리스, 2024-11-26
ClickHouse v24.10 릴리스, 2024-10-31
ClickHouse v24.9 릴리스, 2024-09-26
ClickHouse v24.8 LTS 릴리스, 2024-08-20
ClickHouse v24.7 릴리스, 2024-07-30
ClickHouse v24.6 릴리스, 2024-07-01
ClickHouse v24.5 릴리스, 2024-05-30
ClickHouse v24.4 릴리스, 2024-04-30
ClickHouse v24.3 LTS 릴리스, 2024-03-26
ClickHouse v24.2 릴리스, 2024-02-29
ClickHouse v24.1 릴리스, 2024-01-30
2023년 변경 로그

ClickHouse 24.12 릴리스, 2024-12-19. 발표 자료, 영상

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

  • greatestleast 함수는 이제 NULL 입력 값을 무시하며, 이전에는 인수 중 하나가 NULL이면 NULL을 반환했습니다. 예를 들어, SELECT greatest(1, 2, NULL)은 이제 2를 반환합니다. 이는 PostgreSQL과의 동작을 일치시키기 위한 변경이지만, 동시에 NULL을 반환하는 MySQL과의 호환성은 깨집니다. 이전 동작을 유지하려면 설정 least_greatest_legacy_null_behavior(기본값: false)를 true로 설정하십시오. #65519 #73344 (kevinyhzou).
  • 새로운 MongoDB 통합이 이제 기본값입니다. 기존 MongoDB 드라이버(Poco 드라이버 기반)를 계속 사용하려면 서버 설정 use_legacy_mongodb_integration을 활성화하면 됩니다. #73359 (Kirill Nikiforov.

새로운 기능

  • JSON/Dynamic/Variant 타입을 실험적 기능에서 베타 단계로 승격했습니다. #72294 (Pavel Kruglov). 또한 모든 수정 사항과 이 변경 사항을 24.11에도 백포트했습니다.
  • Iceberg data storage 포맷의 스키마 진화(schema evolution)는 테이블 스키마를 수정하기 위한 폭넓은 옵션을 제공합니다. 컬럼 순서, 컬럼 이름, 단순 타입 확장 등은 내부적으로 변경될 수 있습니다. #69445 (Daniil Ivanik).
  • Iceberg REST Catalog와의 통합: 전체 카탈로그를 ClickHouse에 연결하는 새로운 데이터베이스 엔진 「Iceberg」. #71542 (Kseniia Sumarokova).
  • MergeTree 테이블의 기본 인덱스에 대해 캐시가 추가되었습니다(테이블 설정 use_primary_key_cache로 활성화할 수 있습니다). 기본 인덱스에 대해 lazy load와 캐시가 활성화되어 있는 경우, 기본 인덱스는 항상 메모리에 유지되는 대신 mark 캐시와 유사하게 필요할 때 캐시에 로드됩니다. 데이터 파트의 insert/merge/fetch 작업 시와 테이블 재시작 시에 기본 인덱스를 사전 로드(prewarm)하는 기능이 추가되었습니다(설정 prewarm_primary_key_cache로 활성화할 수 있습니다). 이를 통해 공유 스토리지에서 매우 큰 테이블의 메모리 사용량을 줄일 수 있으며, 레코드 수가 1천조 개를 넘는 테이블에서 테스트를 완료했습니다. #72102 (Anton Popov). #72750 (Alexander Gololobov).
  • 지정된 테이블의 모든 파트 또는 테이블을 지정하지 않은 경우 모든 테이블의 기본 인덱스를 로드하는 SYSTEM LOAD PRIMARY KEY 명령을 구현합니다. 이는 벤치마크 수행과 쿼리 실행 중 추가 지연을 방지하는 데 유용합니다. #66252 #67733 (ZAWA_ll).
  • MergeTree 테이블을 ReplicatedMergeTree로, 또는 그 반대로 ATTACH할 수 있는 쿼리가 추가되었습니다: ATTACH TABLE ... AS REPLICATEDATTACH TABLE ... AS NOT REPLICATED. #65401 (Kirill).
  • HTTP 응답 헤더를 사용자 정의할 수 있는 새로운 설정 http_response_headers가 추가되었습니다. 예를 들어, 데이터베이스에 저장된 이미지를 브라우저에서 렌더링하도록 설정할 수 있습니다. 이로써 #59620가 해결되었습니다. #72656 (Alexey Milovidov).
  • DateTime64를 고정된 초 단위 정밀도의 Int64 값으로 변환하는 함수 toUnixTimestamp64Second를 추가하여, 날짜가 유닉스 에포크 이전인 경우에도 음수 값을 반환할 수 있도록 합니다. #70597 (zhanglistar). #73146 (Robert Schulze).
  • 소스 테이블의 프로젝션과 보조 인덱스 집합이 대상 테이블에 존재하는 것의 부분집합인 경우 ATTACH 연산을 허용하도록 새로운 설정 enforce_index_structure_match_on_partition_manipulation을 추가합니다. #70602를 종료했습니다. #70603 (zwy991114).
  • ALTER USER {ADD|MODIFY|DROP SETTING}, ALTER USER {ADD|DROP PROFILE} 구문을 추가했으며, ALTER ROLE 및 ALTER PROFILE에도 동일하게 적용했습니다. 이제 전체 설정 집합을 모두 교체하는 대신 수정할 수 있습니다. #72050 (pufit).
  • arrayPRAUC FUNCTION을 추가했습니다. Precision-Recall 곡선의 AUC(Area Under the Curve)를 계산합니다. #72073 (Emmanuel).
  • 배열 타입에 indexOfAssumeSorted 함수를 추가합니다. 비내림차순으로 정렬된 배열에서의 검색을 최적화합니다. 효과는 매우 큰 배열(10만 개 이상의 요소)에서 나타납니다. #72517 (Eric Kurbanov).
  • groupConcat 집계 FUNCTION에서 구분자를 선택적인 두 번째 인자로 사용할 수 있도록 했습니다. #72540 (Yarik Briukhovetskyi).
  • 이제 translate FUNCTION은 from 인자가 to 인자보다 문자를 더 많이 포함하는 경우 문자 삭제를 지원합니다. 예를 들어, SELECT translate('clickhouse', 'clickhouse', 'CLICK')는 이제 CLICK을 반환합니다. #71441 (shuai.xu).

실험적 기능

  • MergeTree 정렬 키에서 내림차순 정렬을 지원하도록 하는 새로운 MergeTree 설정 allow_experimental_reverse_key가 추가되었습니다. 이는 특히 TopN 쿼리와 같은 시계열 분석에 유용합니다. 사용 예: ENGINE = MergeTree ORDER BY (time DESC, key) - time 필드를 내림차순으로 정렬합니다. #71095 (Amos Bird).

성능 개선

  • JOIN 재정렬. 쿼리 플랜에서 inner(빌드) 테이블로 사용할 조인 양측 중 어느 테이블을 선택할지 지정하는 옵션이 추가되었습니다. 이는 query_plan_join_swap_table로 제어되며, auto로 설정할 수 있습니다. 이 모드에서 ClickHouse는 행 수가 가장 적은 테이블을 선택하려고 시도합니다. #71577 (Vladimir Cherkasov).
  • 이제 join_algorithm 설정이 default인 경우(적용 가능한 경우) parallel_hash 알고리즘이 사용됩니다. parallel_hash를 사용할 수 없는 경우에는 이전의 두 가지 대안(directhash)이 여전히 사용 대상으로 고려됩니다. #70788 (Nikita Taranov).
  • 조인 시 사용되는 해시 테이블 수를 줄이기 위해 WHEREON 표현식에서 공통 표현식을 추출하는 옵션을 추가했습니다. 이는 JOIN ON 조건에서 AND로 묶인 서로 다른 OR 파트 내부에 공통 파트가 있을 때 유용합니다. optimize_extract_common_expressions = 1 설정으로 활성화할 수 있습니다. #71537 (János Benjamin Antal).
  • SELECT 쿼리에서 인덱스가 설정된 컬럼이 LowCardinality(String)으로 CAST되는 경우에도 인덱스를 사용할 수 있도록 합니다. 이는 Merge 테이블을 대상으로 쿼리를 실행할 때 일부 테이블은 String, 일부 테이블은 LowCardinality(String) 타입을 사용하는 경우에 해당할 수 있습니다. #71598 (Yarik Briukhovetskyi).
  • 병렬 레플리카와 local plan이 활성화된 상태에서 쿼리를 실행할 때, worker에서는 인덱스 분석을 수행하지 않습니다. 코디네이터가 자신 쪽(쿼리 이니시에이터)에서 수행한 인덱스 분석 결과를 기반으로 각 worker가 읽을 범위를 결정합니다. 이렇게 하면 병렬 레플리카를 사용하는 짧은 쿼리도 단일 노드 쿼리만큼 지연 시간이 낮아집니다. #72109 (Igor Nikonov).
  • 객체 스토리지 디스크에서 clickhouse disks remove --recursive 명령의 메모리 사용량이 줄어들었습니다. #67323 (Kirill).
  • #57631에서 도입된 compact 파트에서 단일 컬럼의 서브컬럼을 읽는 최적화를 복원합니다. 이 최적화는 실수로 삭제되었습니다. #72285 (Pavel Kruglov).
  • 비교기에서 가상 호출을 제거하여 LowCardinality(String) 컬럼 정렬을 가속했습니다. #72337 (Alexander Gololobov).
  • 일부 단순 데이터 타입에 대해 argMin/argMax FUNCTION을 최적화했습니다. #72350 (alesapin).
  • 메모리 트래커에서 공유 락(shared lock)을 사용하도록 잠금 방식을 최적화하여 락 경합을 줄이고, CPU 코어 수가 매우 많은 시스템에서 성능을 향상합니다. #72375 (Jiebin Sun).
  • 새 설정 use_async_executor_for_materialized_views가 추가되었습니다. materialized view 쿼리를 비동기(및 잠재적으로는 멀티스레드) 방식으로 실행하여 INSERT 시 뷰 처리 속도를 높일 수 있지만, 메모리 사용량이 증가합니다. #72497 (alesapin).
  • AggregateFunction 데이터 타입 및 분산 쿼리에서 집계 함수 상태 역직렬화 성능이 향상되었습니다. RowBinary 포맷 파싱 성능도 소폭 향상되었습니다. #72818 (Anton Popov).
  • 병렬 레플리카로 읽을 때 범위를 테이블 키 순서대로 분할하여 읽기 시 메모리 사용량을 줄였습니다. #72173 (JIaQi).
  • 삽입 배치 내에 단일 파티션 키 값만 있는 경우 MergeTree 테이블로의 삽입 성능을 향상했습니다. #72348 (alesapin).
  • 백업에서 복원할 때 테이블을 병렬로 생성하는 기능을 도입합니다. 이 PR 이전에는 RESTORE 명령이 항상 단일 스레드에서만 테이블을 생성해서, 많은 테이블을 포함하는 백업의 경우 속도가 느릴 수 있었습니다. #72427 (Vitaly Baranov).
  • mark 캐시가 큰 경우 삭제하는 데 상당한 시간이 걸릴 수 있습니다. 이 동안 context mutex를 잡고 있으면 많은 다른 작업이 차단되고, 해제될 때까지 새로운 클라이언트 연결조차 생성되지 못할 수 있습니다. 또한 동기화를 위해 이 mutex를 보유할 필요는 없으며, shared_ptr을 통해 캐시에 대한 로컬 참조만 가지고 있어도 충분합니다. #72749 (Alexander Gololobov).

개선 사항

  • allow_experimental_join_condition 설정을 제거해 기본적으로 non-equi 조인 조건을 허용하도록 했습니다. #69910 (Vladimir Cherkasov).
  • 서버 구성 파일(users.xml)의 설정이 이제 클라이언트에도 적용됩니다. 예를 들어 date_time_output_format과 같은 포맷 관련 설정에 유용합니다. #71178 (Michael Kolupaev).
  • 서버/사용자 메모리 사용량에 따라 GROUP BY/ORDER BY 연산을 자동으로 디스크로 스필(spill)합니다. max_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sort 쿼리 설정으로 제어됩니다. #71406 (Azat Khuzhin).
  • 새로운 취소 로직이 추가되었습니다. CancellationChecker는 시작된 모든 쿼리에 대해 타임아웃을 확인하고, 타임아웃이 발생하면 해당 쿼리를 중지합니다. #69880 (Yarik Briukhovetskyi).
  • Object에서 JSON으로의 ALTER 작업을 지원하여, 사용이 중단된 Object 타입에서 손쉽게 마이그레이션할 수 있습니다. #71784 (Pavel Kruglov).
  • Enum에 존재하지 않는 값도 Set에 허용합니다. #72662를 수정합니다. #72686 (zhanglistar).
  • Enum 데이터 타입에 대해 문자열 검색 연산자(예: LIKE)를 지원하도록 하여 #72661을 구현했습니다. #72732 (zhanglistar).
  • 의미 없는 ALTER USER 쿼리가 허용되던 문제가 있었습니다. #71227를 수정했습니다. #71286 (Arthur Passos).
  • 분산 INSERT ... SELECT용 실행 계획을 생성할 때 prefer_locahost_replica 설정을 반영하도록 했습니다. #72190 (filimonov).
  • Azure에서 Iceberg 사양을 위반하여 Iceberg v1을 Iceberg v2로 잘못 표기했습니다. 이 문제는 여기에 설명되어 있습니다. Azure Iceberg Writer는 사양을 위반하는 Iceberg 메타데이터 파일(및 매니페스트 파일)을 생성합니다. 현재는 (그들이 이런 방식으로 작성했기 때문에) v1 Iceberg 형식 메타데이터를 v2 리더로 읽으려 시도하며, 매니페스트 파일에 해당 필드를 생성하지 않았을 경우 오류를 발생시키도록 했습니다. #72277 (Daniil Ivanik).
  • 이제 쿼리에서 UNION [ALL]을 사용하는 CREATE MATERIALIZED VIEW가 허용됩니다. 동작은 JOIN이 있는 materialized view와 동일합니다. SELECT 표현식에서 첫 번째 테이블만 삽입에 대한 트리거로 동작하며, 나머지 테이블은 모두 무시됩니다. 그러나 첫 번째 테이블에 대한 참조가 여러 번 있는 경우(예: 자기 자신과의 UNION) 이들 모두가 삽입된 데이터 블록으로 처리됩니다. #72347 (alesapin).
  • ClickHouse를 딕셔너리의 소스로 사용할 때 소스 쿼리 유효성 검사를 추가했습니다. #72548 (Alexey Katsman).
  • 구성을 다시 로드할 때에도 ClickHouse가 ZooKeeper 변경 사항을 인식하도록 했습니다. #72593 (Azat Khuzhin).
  • 캐시된 마크의 메모리 사용량 추정을 개선하여 캐시 전체 메모리 사용량을 줄였습니다. #72630 (Antonio Andelic).
  • 새 메트릭 StartupScriptsExecutionState를 추가합니다. 이 메트릭은 세 가지 값을 가질 수 있습니다: 0 = 시작 스크립트가 아직 완료되지 않음, 1 = 시작 스크립트가 성공적으로 실행됨, 2 = 시작 스크립트가 실패함. 이 메트릭은 특히 기본 구성에 대한 릴리스 이후에 Cloud에서 시작 스크립트가 성공적으로 실행되고 있는지 파악할 수 있어야 하므로 필요합니다. #72637 (Miсhael Stetsyuk).
  • 새로운 MergeTreeIndexGranularityInternalArraysTotalSize 메트릭을 system.metrics에 추가합니다. 이 메트릭은 대규모 데이터셋을 가진 인스턴스를 찾는 데 필요합니다.
  • 복제된 테이블(Replicated Table)을 생성할 때 재시도 기능을 추가했습니다. #72682 (Vitaly Baranov).
  • 비활성 파트의 총 바이트 수를 집계할 수 있도록 system.tablestotal_bytes_with_inactive를 추가했습니다. #72690 (Kai Zhu).
  • MergeTree 설정을 system.settings_changes에 추가했습니다. #72694 (Raúl Marín).
  • notEmpty 함수에서 JSON 타입을 지원합니다. #72741 (Pavel Kruglov).
  • GCS S3 오류 AuthenticationRequired를 파싱하는 기능을 지원합니다. #72753 (Vitaly Baranov).
  • 이제 ifNullcoalesce 함수에서 Dynamic 타입을 지원합니다. #72772 (Pavel Kruglov).
  • toFloat64/touInt32/등의 함수에서 Dynamic을 지원하도록 했습니다. #72989 (Pavel Kruglov).
  • 백업 생성 또는 복원 시 S3 API 응답을 파싱할 때 사용하도록 S3 요청 설정 http_max_fields, http_max_field_name_size, http_max_field_value_size를 추가합니다. #72778 (Vitaly Baranov).
  • 이 메타데이터를 사용하는 마지막 테이블이 삭제된 이후에만 Storage S3(Azure)Queue에서 Keeper의 테이블 메타데이터가 삭제되도록 했습니다. #72810 (Kseniia Sumarokova).
  • JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCount 프로파일 이벤트를 추가했습니다. #72842 (Vladimir Cherkasov).
  • MergeTree 정렬 키와 skip 인덱스에서 하위 컬럼을 지원합니다. #72644 (Pavel Kruglov).

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

  • MergeTree에서 (객체 스토리지 작업 등으로 인해) 파트를 detached 디렉터리로 이동하는 작업이 실패한 이후 파트 간 교차가 발생할 수 있는 문제를 수정합니다. #70476 (Azat Khuzhin).
  • 테이블 이름이 너무 긴 경우의 오류 감지 방식을 수정합니다. 허용되는 최대 길이를 알려 주는 진단 메시지를 제공합니다. 새 FUNCTION getMaxTableNameLengthForDatabase를 추가합니다. #70810 (Yarik Briukhovetskyi).
  • clickhouse-library-bridge 장애 이후 좀비 프로세스가 남는 문제를 수정했습니다(이 프로그램은 안전하지 않은 라이브러리 실행을 허용합니다). #71301 (MikhailBurdukov).
  • plain_rewritable 디스크에서 디렉터리 생성이 실패할 때 트랜잭션 롤백 과정에서 발생하는 NoSuchKey 오류를 수정합니다. #71439 (Julia Kartseva).
  • Pretty JSON 형식에서 Dynamic 값의 직렬화 방식을 수정합니다. #71923 (Pavel Kruglov).
  • File/S3/URL/HDFS/Azure 엔진에서 CREATE 쿼리에 추론된 포맷 이름을 추가했습니다. 이전에는 서버를 다시 시작할 때마다 포맷 이름을 다시 추론했으며, 지정된 데이터 파일이 삭제된 경우 서버 시작 시 오류가 발생했습니다. #72108 (Pavel Kruglov).
  • 이전 분석기를 사용할 때 JOIN ON 절에서 UDF를 사용할 경우 발생하던 버그를 수정합니다. #72179 (Raúl Marín).
  • StorageObjectStorage의 몇 가지 작은 버그를 수정합니다. use_hive_partitioning을 기본값으로 활성화합니다. #72185 (Yarik Briukhovetskyi).
  • min_age_to_force_merge_on_partition_only가 이미 하나의 파트로 병합된 동일한 파티션을 반복해서 병합하려고 시도하느라 멈추고, 여러 파트를 가진 파티션은 병합하지 못하던 버그를 수정합니다. #72209 (Christoph Wurm).
  • 희소 컬럼을 처리하는 드문 상황에서 발생하던 SimpleSquashingChunksTransform의 비정상 종료 문제를 수정했습니다. #72226 (Vladimir Cherkasov).
  • GraceHashJoin에서 발생하던 데이터 레이스(data race)를 수정하여 조인 결과에서 일부 행이 누락될 수 있었던 문제를 해결했습니다. #72233 (Nikita Taranov).
  • enable_block_number_column 설정이 활성화된 경우 머티리얼라이즈드 _block_number 컬럼을 사용하는 ALTER DELETE 쿼리를 수정했습니다. #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).
  • AWS_CONTAINER_AUTHORIZATION_TOKEN_PATH 대신 AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE을 사용하도록 했습니다. #71074를 수정했습니다. #72397 (Konstantin Bogdanov).
  • BACKUP DATABASE db EXCEPT TABLES db.table 쿼리를 파싱할 때 발생하던 오류를 수정합니다. #72429 (Konstantin Bogdanov).
  • Variant를 생성할 수 없도록 했습니다. #72454 (Pavel Kruglov).
  • system.merges에서 result_part_path의 잘못된 형식 문제를 수정합니다. #72567 (Konstantin Bogdanov).
  • 요소가 하나뿐인 glob(예: {file})의 파싱을 수정합니다. #72572 (Konstantin Bogdanov).
  • 분산 쿼리에서 ARRAY JOIN이 사용된 경우 팔로워 서버용 쿼리 생성 로직을 수정했습니다. #69276 이슈를 수정했습니다. #72608 (Dmitry Novik).
  • DateTime64 IN DateTime64가 어떠한 결과도 반환하지 않던 버그를 수정했습니다. #72640 (Yarik Briukhovetskyi).
  • flatten_nested=0으로 생성된 테이블이 있는 복제된 데이터베이스(Replicated database)에 새 레플리카를 추가할 때 발생하던 메타데이터 불일치 문제를 수정했습니다. #72685 (Alexander Tokmakov).
  • Keeper 내부 통신용 고급 SSL 구성을 수정했습니다. #72730 (Antonio Andelic).
  • S3 파일이 생성되는 속도보다 작은 값으로 tracked_files_limit 설정이 구성된 S3Queue unordered 모드에서 발생하는 「No such key」 오류를 수정합니다. #72738 (Kseniia Sumarokova).
  • 로컬에 해당 사용자가 없을 때 RemoteQueryExecutor에서 예외가 발생하던 문제를 수정합니다. #72759 (Andrey Zvonov).
  • 구체화된 _block_number 컬럼(SETTING enable_block_number_column이 활성화된 경우)을 사용하는 뮤테이션을 수정했습니다. #72854 (Anton Popov).
  • 백업에 비어 있는 파일이 있는 경우 plain rewritable disk를 사용하는 백업/복원 기능이 동작하지 않던 문제를 수정했습니다. #72858 (Kseniia Sumarokova).
  • DistributedAsyncInsertDirectoryQueue에서 INSERT 취소가 올바르게 처리되도록 수정했습니다. #72885 (Antonio Andelic).
  • 잘못된 데이터를 희소 컬럼에 파싱하는 과정에서 발생하던 크래시를 수정했습니다(설정 enable_parsing_to_custom_serialization이 활성화된 경우 발생할 수 있습니다). #72891 (Anton Popov).
  • 백업 복원 시 발생할 수 있는 충돌 문제를 수정합니다. #72947 (Kseniia Sumarokova).
  • parallel_hash JOIN 메서드에서 부등식 필터가 포함된 ON 절의 복잡한 조건을 사용하는 쿼리에서 발생할 수 있던 버그를 수정했습니다. #72993 (Nikita Taranov).
  • JSON 파싱 시 기본 포맷 설정을 사용하여 역직렬화가 깨지는 문제를 방지합니다. #73043 (Pavel Kruglov).
  • 지원되지 않는 스토리지를 사용하는 트랜잭션에서 발생하던 충돌을 수정했습니다. #73045 (Raúl Marín).
  • MemoryTrackingMemoryResident 사이의 차이가 계속 커지면서 메모리 사용량이 과대 추정될 수 있는 문제를 수정합니다. #73081 (Azat Khuzhin).
  • Tuple 파싱 시 중복된 JSON 키를 검사하도록 했습니다. 이로 인해 이전에는 파싱 중에 논리적 오류 Invalid number of rows in Chunk가 발생할 수 있었습니다. #73082 (Pavel Kruglov).

빌드/테스트/패키징 개선

  • 이전에 /utils 폴더에 저장되어 소스에서 수동으로 컴파일해야 했던 모든 작은 유틸리티가 이제 기본 ClickHouse 번들에 포함됩니다. 다음 이슈가 해결됩니다: #72404. #72426 (Nikita Mikhaylov).
  • 22.3에서 도입되었던 /etc/systemd/system/clickhouse-server.service 제거 동작을 되돌렸습니다. #39323. #72259 (Mikhail f. Shiryaev).
  • 메모리/CPU 제한으로 인한 컴파일 실패를 피하기 위해 대형 translation unit(컴파일 단위)을 분할했습니다. #72352 (Yakov Olkhovskiy).
  • OSX: ICU 지원을 포함해 빌드하여 정렬 규칙(collation), 문자셋 변환 및 기타 현지화 기능을 사용할 수 있습니다. #73083 (Raúl Marín).

ClickHouse 24.11 릴리스(2024-11-26). 발표 자료, 동영상

이전 버전과 호환되지 않는 변경 사항

  • 시스템 테이블 generate_seriesgenerateSeries를 제거합니다. 이들은 여기에서 실수로 추가되었습니다: #59390. #71091 (Alexey Milovidov).
  • StorageExternalDistributed를 제거합니다. #70600을(를) 해결합니다. #71176 (flynn).
  • 테이블 엔진 Kafka, NATS, RabbitMQ는 이제 SOURCES 계층 구조에서 각 엔진별 grant로 제어됩니다. 이러한 엔진 유형으로 테이블을 생성하는 기본값이 아닌 데이터베이스 사용자에게 해당 grant를 추가해야 합니다. #71250 (Christoph Wurm).
  • 뮤테이션 쿼리를 실행하기 전에 전체 뮤테이션 쿼리(서브쿼리 포함)를 검사합니다. 이를 통해 잘못된 쿼리를 실수로 실행하고, 올바른 뮤테이션을 막는 유효하지 않은 뮤테이션이 누적되는 것을 방지합니다. #71300 (Christoph Wurm).
  • 파일 시스템 캐시 설정 skip_download_if_exceeds_query_cachefilesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit로 이름을 변경합니다. #71578 (Kseniia Sumarokova).
  • deltaSumTimestamp에서 Enum뿐만 아니라 UInt128UInt256 인자에 대한 지원을 제거합니다. 또한 deltaSumTimestamp의 두 번째(「timestamp」) 인자에 대해 Int8, UInt8, Int16, UInt16 형식에 대한 지원을 제거합니다. #71790 (Alexey Milovidov).
  • Dictionary storage, dictionary table function, 또는 딕셔너리 자체에 대한 직접 SELECT를 사용해 딕셔너리에서 데이터를 직접 가져올 때, 이제 해당 딕셔너리에 대해 SELECT 권한 또는 dictGet 권한만 있으면 충분합니다. 이는 ACL 우회를 방지하기 위한 이전 시도(https://github.com/ClickHouse/ClickHouse/pull/57362, https://github.com/ClickHouse/ClickHouse/pull/65359)와 일치합니다. 또한 후자의 PR이 이전 버전과 호환되도록 합니다. #72051 (Nikita Mikhaylov).

실험적 기능

  • 모든 실험/베타 기능을 비활성화하기 위한 전역 스위치 역할을 하도록 allow_feature_tier를 구현합니다. #71841 #71145 (Raúl Marín).
  • JSON 서브컬럼용 파일에서 이스케이프되지 않은 특수 기호로 인해 발생할 수 있는 No such file or directory 오류를 수정합니다. #71182 (Pavel Kruglov).
  • String에서 JSON으로 ALTER하는 작업을 지원합니다. 이 PR은 또한 JSON 및 Dynamic 타입의 직렬화를 새로운 버전 V2로 변경합니다. 이전 버전 V1은 merge_tree_use_v1_object_and_dynamic_serialization 설정을 활성화하면 여전히 사용할 수 있으며(업그레이드 중 문제 없이 이전 버전으로 롤백할 수 있도록 사용 가능), #70442 (Pavel Kruglov).
  • JSON 문자열을 이용한 직렬화/역직렬화를 통해 Map/Tuple/Object에서 새로운 JSON으로의 간단한 CAST를 구현합니다. #71320 (Pavel Kruglov).
  • 예기치 않은 결과를 초래할 수 있으므로 기본적으로 ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY에서 Variant/Dynamic 타입을 허용하지 않습니다. #69731 (Pavel Kruglov).
  • 혼동을 피하기 위해 min/max 함수에서 Dynamic/Variant 타입을 금지합니다. #71761 (Pavel Kruglov).

New Feature

  • 워크로드 및 리소스 관리를 설명하기 위한 SQL 문법을 추가했습니다. 자세한 내용은 https://clickhouse.com/docs/operations/workload-scheduling 을 참조하십시오. #69187 (Sergei Trifonov).
  • 새로운 데이터 타입 BFloat16을(를) 추가했습니다. 이 타입은 8비트 지수와 부호, 7비트 가수부를 사용하는 16비트 부동소수점을 표현합니다. #44206을(를) 해결합니다. #49937을(를) 해결합니다. #64712 (Alexey Milovidov).
  • 현재 사용자/역할에 특정 권한이 부여되었는지와 해당 테이블/컬럼이 메모리에 존재하는지를 확인하기 위한 CHECK GRANT 쿼리를 추가했습니다. #68885 (Unalian).
  • iceberg[S3;HDFS;Azure]Cluster, deltaLakeCluster, hudiCluster 테이블 함수를 추가했습니다. #72045 (Mikhail Artemenko).
  • http_handlers(dynamic_query_handler/predefined_query_handler)에서 user/password를 설정할 수 있는 기능을 추가했습니다. #70725 (Azat Khuzhin).
  • ORDER BY WITH FILL 연산자에서 staleness 절을 지원하도록 했습니다. #71151 (Mikhail Artemenko).
  • 각 인증 방법마다 고유한 만료 날짜를 설정할 수 있도록 하고, 사용자 엔터티에서 해당 설정을 제거했습니다. #70090 (Arthur Passos).
  • 새로운 함수 parseDateTime64, parseDateTime64OrNull, parseDateTime64OrZero를 추가했습니다. 기존 함수 parseDateTime(및 변형)과 비교하여, 이 함수들은 DateTime 대신 DateTime64 타입의 값을 반환합니다. #71581 (kevinyhzou).

성능 향상

  • 파트에 대해 granularity가 상수인 경우 인덱스 granularity 값의 메모리 사용을 최적화했습니다. 파트에 대해 항상 상수 granularity를 선택할 수 있는 설정(use_const_adaptive_granularity)을 추가하여, 관련 메타데이터가 메모리에서 항상 최적으로 유지되도록 했습니다. 이를 통해 공유 스토리지에서 수조 개의 행을 처리하는 대규모 워크로드에서 데이터 파트의 메타데이터(인덱스 granularity 값)로 인해 메모리 사용량이 지속적으로 증가하는 것을 방지할 수 있습니다. #71786 (Anton Popov).
  • 이제 join_algorithm = 'parallel_hash'일 때 병렬 처리를 위해 스레드들 사이에 분배할 때 입력 블록 컬럼을 더 이상 복사하지 않습니다. #67782 (Nikita Taranov).
  • 서로 겹치지 않는 파트에 대해 Replacing 병합 알고리즘을 최적화했습니다. #70977 (Anton Popov).
  • metrics 및 system.detached_parts에서 readonly 및 write-once 디스크의 분리된 파트를 더 이상 나열하지 않습니다. #71086 (Alexey Milovidov).
  • 기본적으로 부하가 큰 비동기 메트릭은 계산하지 않습니다. 이 기능은 #40332에서 도입되었지만, 단 한 명의 고객만 필요로 하는 부하가 큰 백그라운드 작업을 운영하는 것은 바람직하지 않습니다. #71087 (Alexey Milovidov).
  • plain_rewritable 디스크의 경우: 디렉터리를 나열할 때 객체 스토리지 API를 호출하지 마십시오. 이는 비용 효율성이 떨어질 수 있습니다. 대신 파일 이름 목록을 메모리에 저장하십시오. 이러한 트레이드오프로 초기 로드 시간이 늘어나고 파일 이름을 저장하는 데 필요한 메모리 사용량이 증가합니다. #70823 (Julia Kartseva).
  • 임계 구역을 줄여 system.query_metric_log 수집 주기의 성능과 정확도를 향상합니다. #71473 (Pablo Marcos).
  • 가상 행을 생성하여 read-in-order를 최적화해, 특히 여러 파트가 존재할 때 머지 정렬 시 읽어야 하는 데이터 양을 줄입니다. #62125 (Shichao Jin).
  • 서버 설정 async_load_system_database가 추가되어, 시스템 데이터베이스가 완전히 로드되지 않은 상태에서도 서버를 시작할 수 있게 되었습니다. 시스템 테이블이 많을 때 ClickHouse를 더 빠르게 시작하는 데 도움이 됩니다. #69847 (Sergei Trifonov).
  • clickhouse-compressor--threads 파라미터를 추가하여 데이터 압축을 병렬로 수행할 수 있게 했습니다. #70860 (Alexey Milovidov).
  • prewarm_mark_cache 설정을 추가하여, 테이블의 insert, merge, 파트 fetch 및 시작 시 마크를 마크 캐시에 미리 로드하도록 했습니다. #71053 (Anton Popov).
  • MergeTree 테이블 엔진 계열에서 메모리 사용량을 줄이기 위해 메모리에 상주하는 index_granularity 배열 크기를 필요한 만큼으로 축소했습니다. #71595 (alesapin).
  • 디스크 I/O를 수반하지 않는 읽기(non-disk read)에 대해 파일 시스템 캐시 설정 boundary_alignment를 비활성화하여, 캐시가 적용된 독립 원격 파일에서의 읽기 성능을 향상합니다. #71827 (Kseniia Sumarokova).
  • SELECT * FROM table LIMIT ...과 같은 쿼리는 실제로 사용되지 않는 경우에도 part 인덱스를 로드하곤 했습니다. #71866 (Alexander Gololobov).
  • parallel_replicas_local_plan을 기본적으로 활성화합니다. 쿼리를 시작하는 노드에서 완전한 로컬 실행 계획을 구성하면 리소스 소비를 줄이면서 병렬 레플리카 성능을 개선하고, 더 많은 쿼리 최적화를 적용할 수 있습니다. #70171 (Igor Nikonov).

개선 사항

  • ch queries.sql 형식으로 파일 인수를 사용하여 ClickHouse를 실행할 수 있도록 허용합니다. #71589 (Raúl Marín).
  • Vertical 포맷(쿼리를 \G로 끝낼 때도 활성화됨)에 Pretty 포맷의 기능이 추가되었습니다. 예: - 숫자의 천 단위 그룹을 강조 표시함; - 숫자에 대한 읽기 쉬운 힌트를 출력함. #71630 (Alexey Milovidov).
  • 쿼리를 시작한 노드에서 클러스터의 다른 노드로 외부 사용자 역할을 전달합니다. 쿼리 시작 노드만 외부 인증자(예: LDAP)에 접근할 수 있을 때 유용합니다. #70332 (Andrey Zvonov).
  • 집계 함수 any에 대해 anyRespectNulls, firstValueRespectNulls, anyValueRespectNulls 별칭을 추가했습니다. 또한 집계 함수 anyLast에 대해 anyLastRespectNulls, lastValueRespectNulls 별칭을 추가했습니다. 이를 통해 anyLast_respect_nullsStateIf 대신 SELECT anyLastRespectNullsStateIf와 같이, 카멜 케이스와 언더스코어를 혼용한 표기법 대신 카멜 케이스만 사용하는 보다 자연스러운 표기법을 사용할 수 있습니다. #71403 (Peter Nguyen).
  • date_time_utc 구성 매개변수를 추가하여 JSON 로그 형식에서 RFC 3339/ISO8601 형식의 UTC 날짜-시간을 지원하도록 했습니다. #71560 (Ali).
  • S3 엔드포인트에서 사용자 인증을 위한 새로운 헤더 유형(access_header)이 추가되었습니다. 이를 통해 우선순위가 가장 낮은 access 헤더를 설정할 수 있으며, 이 값은 다른 소스(예: 테이블 스키마나 이름이 지정된 컬렉션)에서 제공되는 access_key_id로 덮어써집니다. #71011 (MikhailBurdukov).
  • 고차 함수는 상수 배열과 상수로 캡처된 인수를 사용할 경우 상수를 반환합니다. #58400 (Alexey Milovidov).
  • 쿼리 계획 단계 이름(EXPLAIN PLAN json=1)과 파이프라인 프로세서 이름(EXPLAIN PIPELINE compact=0,graph=1)에 고유 ID가 접미사로 추가되었습니다. 이를 통해 프로세서 프로파일러 출력과 OpenTelemetry 트레이스를 EXPLAIN 출력과 대응시킬 수 있습니다. #63518 (qhsong).
  • Azure Blob Storage에 객체를 작성한 후 해당 객체가 실제로 존재하는지 확인할 수 있는 옵션이 추가되었으며, 이는 check_objects_after_upload 설정으로 제어됩니다. #64847 (Smita Kulkarni).
  • clickhouse-local에서 기본값으로 Atomic 데이터베이스를 사용합니다. #50647의 항목 1과 5를 해결합니다. #44817을 닫습니다. #68024 (Alexey Milovidov).
  • 예외가 클라이언트에 오류를 알리기 위해 HTTP 프로토콜을 위반합니다. #68800 (Sema Checherinda).
  • 분산 DDL 쿼리를 실행 중인 호스트를 보고하기 위해 replica_dir를 생성하고 DDLWorker에서 레플리카를 활성 상태로 표시합니다. #69658 (tuanpach).
  • distributed_ddl_output_mode_only_active로 설정된 경우, 데이터베이스에 대한 ON CLUSTER 쿼리는 활성 레플리카만을 대상으로 대기합니다. #69660 (tuanpach).
  • ON CLUSTER 백업 및 복구의 오류 처리와 취소 동작이 개선되었습니다: - 한 호스트에서 백업 또는 복구가 실패하면 다른 호스트의 작업이 자동으로 취소됩니다 - 일부 호스트만 실패하고 다른 호스트는 계속 작업을 수행하는 상황에서도 이상한 오류가 발생하지 않도록 개선되었습니다 - 한 호스트에서 백업 또는 복구가 취소되면 다른 호스트의 작업도 자동으로 취소됩니다 - test_disallow_concurrency 관련 문제를 수정하여, 이제 동시 실행 비활성화가 더 잘 동작합니다 - 백업과 복구 작업이 ZooKeeper 연결 끊김 상황에도 훨씬 더 견고하도록 개선되었습니다. #70027 (Vitaly Baranov).
  • S3Queue 스토리지에서 일부 설정에 대해 ALTER TABLE ... MODIFY/RESET SETTING ...을(를) 지원합니다. #70811 (Kseniia Sumarokova).
  • 서버 인증서 재로딩 절차와 동일한 방식으로 클라이언트 인증서를 재로딩할 수 있는 기능을 추가했습니다. #70997 (Roman Antonov).
  • 클라이언트 히스토리 크기를 설정 가능하게 하고 기본 크기를 늘렸습니다. #71014 (Jiří Kozlovský).
  • Parquet 네이티브 리더에 Boolean 타입 지원을 추가했습니다. #71055 (Arthur Passos).
  • S3와 상호 작용할 때 「Malformed message」와 같은 더 많은 종류의 오류에 대해 재시도를 수행합니다. #71088 (Alexey Milovidov).
  • 일부 S3 관련 메시지에 대한 로그 레벨을 낮춥니다. #71090 (Alexey Milovidov).
  • 공백이 포함된 이름의 HDFS 파일 쓰기를 지원합니다. #71105 (exmy).
  • 복제된 테이블(Replicated Table), 딕셔너리 및 뷰의 개수를 제한하는 설정을 추가했습니다. #71179 (Kirill).
  • AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE이 사용 가능하면 AWS_CONTAINER_AUTHORIZATION_TOKEN 대신 사용합니다. #71074를 수정합니다. #71269 (Konstantin Bogdanov).
  • ReplicatedMergeTree 재시작 스레드에서 metadata_version ZooKeeper 노드 생성을 제거합니다. 이 노드를 생성해야 하는 유일한 시나리오는 사용자가 20.4 이전 버전에서 24.10 이후 버전으로 바로 업그레이드한 경우입니다. ClickHouse는 1년 이상을 건너뛰는 업그레이드를 지원하지 않으므로, 노드를 생성하는 대신 예외를 발생시키고 사용자가 단계적으로 업그레이드하도록 안내해야 합니다. #71385 (Miсhael Stetsyuk).
  • 고급 대시보드에 호스트별 대시보드인 Overview (host)Cloud overview (host)를 추가합니다. #71422 (alesapin).
  • clickhouse-local은(는) 기본적으로 암시적 SELECT를 사용하여 계산기처럼 사용할 수 있습니다. 암시적 SELECT 모드에 대한 구문 하이라이트를 개선했습니다. #71620 (Alexey Milovidov).
  • 명령줄 애플리케이션에서 이제 여러 SQL 문으로 이루어진 입력도 구문 강조가 적용됩니다. #71622 (Alexey Milovidov).
  • 명령줄 애플리케이션은 오류 발생 시 0이 아닌 종료 코드를 반환합니다. 이전 버전에서는 disks 애플리케이션이 오류가 발생해도 0을 반환했고, 다른 애플리케이션들은 오류 코드 256(PARTITION_ALREADY_EXISTS) 및 512(SET_NON_GRANTED_ROLE)에 대해 0을 반환했습니다. #71623 (Alexey Milovidov).
  • user/group가 ID로 지정되면 clickhouse su가 실패합니다. 이 패치는 UID:GID 형식도 허용하도록 수정했습니다. #71626 (Mikhail f. Shiryaev).
  • filesystem_cache_prefer_bigger_buffer_size 설정을 통해 파일 시스템 캐시에서 메모리 버퍼 크기 증가를 비활성화할 수 있게 되었습니다. #71640 (Kseniia Sumarokova).
  • 파일 시스템 캐시에서 백그라운드 다운로드용 최대 파일 세그먼트 크기를 위한 별도 설정인 background_download_max_file_segment_size를 추가합니다. #71648 (Kseniia Sumarokova).
  • JSON 타입 파싱이 소폭 개선되었습니다. JSON path의 현재 블록에 여러 타입의 값이 포함되어 있는 경우, 특수한 best-effort 순서로 여러 타입을 시도해 가장 적절한 타입을 선택합니다. #71785 (Pavel Kruglov).
  • 이전에 system.asynchronous_metrics에서 읽을 때는 동시에 실행 중인 업데이트가 완료될 때까지 대기했습니다. 시스템에 부하가 많이 걸린 경우 이 작업은 오랜 시간이 걸릴 수 있습니다. 이번 변경으로 이전에 수집된 값은 항상 읽을 수 있습니다. #71798 (Alexander Gololobov).
  • S3Queue 및 AzureQueue: polling_max_timeout_ms를 10분, polling_backoff_ms를 30초로 설정합니다. #71817 (Kseniia Sumarokova).
  • history 기간 내에 HostResolver를 세 차례 업데이트합니다. #71863 (Sema Checherinda).
  • 고급 대시보드 HTML 페이지에 system.dashboards 테이블에 있는 대시보드를 선택할 수 있는 드롭다운 메뉴를 추가했습니다. #72081 (Sergei Trifonov).
  • 인증 후 기본 데이터베이스가 존재하는지 확인합니다. #71097 문제를 수정합니다. #71140 (Konstantin Bogdanov).

버그 수정(공식 안정 버전에서 사용자가 직접 확인할 수 있는 잘못된 동작)

  • ATTACH PART 쿼리 실행 중 중복 제거된 파트가 더 이상 attaching_ 접두사가 붙은 채로 남지 않습니다. #65636 (Kirill).
  • IN FUNCTION 사용 시 DateTime64의 정밀도가 손실되던 버그를 수정했습니다. #67230 (Yarik Briukhovetskyi).
  • ORDER BY ... WITH FILL에서 IGNORE/RESPECT NULLS를 사용하는 함수를 사용할 때 발생할 수 있는 논리 오류를 수정했습니다. #57609을(를) 해결했습니다. #68234 (Vladimir Cherkasov).
  • 메모리 한도에 도달했을 때 Native 포맷을 사용하는 비동기 INSERT에서 드물게 발생하던 논리적 오류를 수정했습니다. #68965 (Anton Popov).
  • EPHEMERAL 컬럼에 대한 CREATE TABLE 구문의 COMMENT를 수정했습니다. #70458 (Yakov Olkhovskiy).
  • JSONExtract에서 LowCardinality(Nullable)를 사용할 때 발생하는 논리적 오류를 수정했습니다. #70549 (Pavel Kruglov).
  • 동일한 zk path를 가진 다른 레플리카가 있더라도 system drop replica zkpath를 허용합니다. #70642 (MikhailBurdukov).
  • AggregateFunctionGroupArraySorted에서 발생하던 크래시와 메모리 누수를 수정했습니다. #70820 (Michael Kolupaev).
  • URL 엔진에서 사용자 헤더를 통해 Content-Type을 재정의할 수 있는 기능을 추가했습니다. #70859 (Artem Iurin).
  • StorageS3Queue에서 「해당 노드가 이미 존재하므로 /processed에 영구 노드를 생성할 수 없습니다(Cannot create a persistent node in /processed since it already exists)」라는 논리 오류를 수정합니다. #70984 (Kseniia Sumarokova).
  • 특정 상황에서 이름이 지정된 세션이 닫히지 않고 영구히 대기 상태로 남아 있던 문제를 수정했습니다. #70998 (Márcio Martins).
  • projection 경량한 삭제의 rebuild 옵션에서 _row_exists 컬럼을 고려하지 않았던 버그를 수정했습니다. #71089 (Shichao Jin).
  • Oracle Linux UEK 6.10에서 실행할 때 발생하는 AT_* is out of range 문제를 수정합니다. #71109 (Örjan Fors).
  • 예상치 못한 레이스 컨디션으로 인해 system.query_metric_log에 잘못 기록되던 값을 수정합니다. #71124 (Pablo Marcos).
  • quantileExactWeightedInterpolated의 잘못된 집계 함수 이름을 수정합니다. 이 버그는 https://github.com/ClickHouse/ClickHouse/pull/69619 에서 발생했습니다. cc @Algunenano. #71168 (李扬).
  • FUNCTION 비교에서 Dynamic 사용 시 발생하던 bad_weak_ptr 예외가 발생하던 문제를 수정합니다. #71183 (Pavel Kruglov).
  • 7z 파일을 읽는 Checks가 로컬 머신에서 수행되도록 합니다. #71184 (Daniil Ivanik).
  • HTTP 및 Async Inserts를 통해 Native format을 사용할 때 format 설정이 무시되던 문제를 수정했습니다. #71193 (Pavel Kruglov).
  • use_query_cache = 1 설정으로 실행되는 SELECT 쿼리에서 시스템 테이블 이름이 리터럴로 사용되는 경우(예: SELECT * FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true;) 더 이상 쿼리가 거부되지 않고, 이제 정상적으로 실행됩니다. #71254 (Robert Schulze).
  • enable_filesystem_cache=1로 설정되어 있지만 storage 구성의 disk에 cache 설정이 없는 경우 발생하던 메모리 사용량 증가 버그를 수정합니다. #71261 (Kseniia Sumarokova).
  • Dynamic 컬럼에서 LowCardinality 딕셔너리를 역직렬화하는 과정에서 발생할 수 있었던 "Cannot read all data" 오류를 수정했습니다. #71299 (Pavel Kruglov).
  • 클라이언트에서 parallel output format의 정리 작업이 불완전하던 문제를 수정했습니다. #71304 (Raúl Marín).
  • 이름이 지정된 컬렉션에서 누락되어 있던 unescaping 처리를 추가했습니다. 이 수정 없이는 clickhouse-server를 시작할 수 없습니다. #71308 (MikhailBurdukov).
  • 네이티브 프로토콜을 사용하는 비동기 INSERT에서 빈 블록이 발생하는 문제를 수정합니다. #71312 (Anton Popov).
  • 잘못된 와일드카드 권한을 부여할 때 AST 포맷이 일관되지 않게 출력되던 문제를 수정했습니다 #71309. #71332 (pufit).
  • std::terminate가 발생하지 않도록 데이터 파트 소멸자에 try/catch를 추가했습니다. #71364 (alesapin).
  • JSON 타입 힌트에서 의심스러운 타입과 실험적인 타입을 검사합니다. #71369 (Pavel Kruglov).
  • Linux 이외의 OS에서도 메모리 워커 스레드를 시작하도록 했습니다(#71051 수정). #71384 (Alexandre Snarskii).
  • Variant 컬럼에서 발생하던 Invalid number of rows in Chunk 오류를 수정했습니다. #71388 (Pavel Kruglov).
  • 이전 PostgreSQL 버전에서 발생하는 오류 메시지 「column "attgenerated" does not exist」를 수정하고, #60651를 해결했습니다. #71396 (0xMihalich).
  • 서버 로그에 스팸성 로그가 과도하게 쌓이는 것을 방지하기 위해, 인증 실패 시도는 이제 ERROR가 아닌 DEBUG 레벨로 기록되도록 변경되었습니다. #71405 (Robert Schulze).
  • 잘못된 인수(예: NULL)를 전달할 때 mongodb 테이블 함수가 비정상 종료되던 문제를 수정했습니다. #71426 (Vladimir Cherkasov).
  • optimize_rewrite_array_exists_to_has 사용 시 발생한 크래시를 수정했습니다. #71432 (Raúl Marín).
  • max_insert_delayed_streams_for_parallel_write 설정의 INSERT 시 사용 방식을 수정했습니다. 이전에는 여러 파티션에 데이터를 쓰는 INSERT에서 이 설정이 올바르게 동작하지 않아 메모리 사용량이 매우 커질 수 있었습니다. #71474 (Anton Popov).
  • arrayJoinWHERE 조건에 나타날 수 있을 때 발생할 수 있었던 Argument for function must be constant (기존 분석기(old analyzer)) 오류를 수정합니다. https://github.com/ClickHouse/ClickHouse/pull/65414 이후에 도입된 회귀(regression) 버그입니다. #71476 (Nikolai Kochetov).
  • 컬럼이 0개인 SortCursor(old analyzer)에서 크래시가 발생하지 않도록 했습니다. #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을 사용할 때 발생하던 Analyzer 문제를 수정합니다. #65598 이슈를 종료합니다. #71538 (Maksim Kita).
  • 제약 조건에서 UDF를 사용할 때 크래시가 발생하지 않도록 수정했습니다. #71541 (Raúl Marín).
  • 범위를 벗어난 경우 bitShift 함수에서 예외를 던지지 않고 0 또는 기본 문자(default char)를 반환하도록 했습니다. #71580 (Pablo Marcos).
  • 특정 엔진과 함께 materialized view를 사용할 때 서버가 크래시되는 문제를 수정했습니다. #71593 (Pervakov Grigorii).
  • 상수 배열에 대한 별칭을 포함하는 중첩 데이터 구조에 대해 ARRAY JOIN을 수행할 때 NULL 포인터 역참조가 발생하는 문제가 있었습니다. 이로써 #71677이(가) 해결됩니다. #71678 (Alexey Milovidov).
  • 빈 튜플을 사용해 ALTER를 수행할 때 발생하는 LOGICAL_ERROR를 수정합니다. 이는 #71647을(를) 해결합니다. #71679 (Amos Bird).
  • NOT IN 연산자가 사용된 경우 파티션 컬럼을 대상으로 하는 술어에서 상수 Set을 변환하지 않습니다. #71695 (Eduard Karacharov).
  • Docker 초기화 스크립트 실패 시 로그 메시지를 보다 명확히 이해할 수 있도록 수정합니다. #71734 (Андрей).
  • 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).
  • allow_experimental_join_condition 사용 시 발생할 수 있는 크래시를 수정하여 #71693 이슈를 해결했습니다. #71857 (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).
  • 클러스터 자동 검색을 위해 보조 Keeper를 사용합니다. #71911 (Anton Ivashkin).
  • 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).
  • 서브쿼리 내부에서 사용되는 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).
  • 병렬 레플리카를 사용하는 쿼리에서 RIGHT / FULL 조인의 동작을 수정했습니다. 이제 RIGHT 조인은 병렬 레플리카로 실행할 수 있으며(오른쪽 테이블 읽기가 분산됨), FULL 조인은 노드 간 병렬화할 수 없어 로컬에서만 실행됩니다. #71162 (Igor Nikonov).
  • 제한된 시스템 콜로 인해 Docker 컨테이너에서 실행되는 ClickHouse가 stderr에 "get_mempolicy: Operation not permitted"가 출력되던 문제를 수정했습니다. #70900 (filimonov).
  • attach 스레드가 아닌 재시작 스레드에서 ZooKeeper의 metadata_version 레코드를 수정하도록 했습니다. #70297 (Miсhael Stetsyuk).
  • 지원되지 않고 완전히 제거될 예정인 "zero-copy" 복제에 대한 수정입니다. zero-copy 복제를 사용하는 ReplicatedMergeTree에서 어떤 노드라도 해당 blob을 사용 중인 경우 blob을 삭제하지 않습니다. #71186 (Antonio Andelic).
  • 지원되지 않으며 앞으로 완전히 제거될 예정인 "zero-copy" 복제에 대한 수정입니다. Keeper를 사용할 수 없는 경우 발생할 수 있는 데이터 손실을 방지하기 위해, 파트를 zero-copy 디스크로 이동하기 전에 zero-copy 공유 잠금을 먼저 획득하도록 했습니다. #71845 (Aleksei Filatov).

ClickHouse 24.10 릴리스(2024-10-31). 발표 자료, 동영상

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

  • 괄호 안에 서브쿼리가 있는 UNION 체인에 포함된 쿼리에서 FORMAT 앞에 SETTINGS를 쓸 수 있도록 허용합니다. 이로써 #39712를 해결합니다. 또한 하나의 쿼리에서 SETTINGS 절이 연속해서 두 번 지정된 경우의 동작을 변경합니다. 가장 가까운 SETTINGS 절이 해당 서브쿼리에 우선적으로 적용됩니다. 이전 버전에서는 가장 바깥쪽 SETTINGS 절이 내부 SETTINGS 절보다 우선 적용될 수 있었습니다. #68614 (Alexey Milovidov).
  • 이제 기본적으로 [PRE]WHERE 절의 필터 조건 재정렬이 허용됩니다. allow_reorder_prewhere_conditionsfalse로 설정하여 비활성화할 수 있습니다. #70657 (Nikita Taranov).
  • 호환되지 않는 라이선스를 가진 idxd-config 라이브러리를 제거합니다. 이에 따라 실험적 Intel DeflateQPL 코덱도 제거됩니다. #70987 (Alexey Milovidov).

신기능

  • 와일드카드 접두사를 가진 테이블에 대한 접근 권한 부여를 허용합니다. GRANT SELECT ON db.table_pefix_* TO user. #65311 (pufit).
  • 쿼리 실행 중에 스페이스바를 누르면 클라이언트가 상세한 메트릭이 포함된 실시간 테이블을 표시합니다. clickhouse-client에서 새로운 --progress-table 옵션을 사용하여 전역적으로 활성화할 수 있습니다. 새로운 --enable-progress-table-toggle 옵션은 --progress-table 옵션과 연관되어 있으며, Ctrl+Space를 눌러 progress 테이블 렌더링을 토글합니다. #63689 (Maria Khristenko), #70423 (Julia Kartseva).
  • ETag와 파일 경로에서 생성한 해시를 캐시 키로 사용하여 객체 스토리지를 사용하는 테이블 엔진과 데이터 레이크의 읽기 파일을 캐시할 수 있게 했습니다. #70135 (Kseniia Sumarokova).
  • CREATE TABLE ... CLONE AS ... 쿼리를 사용한 테이블 생성을 지원합니다. 이 기능은 소스 테이블의 스키마를 복제한 다음, 모든 파티션을 새로 생성된 테이블에 첨부합니다. 이 기능은 MergeTree 계열의 테이블에서만 지원됩니다. #65015를 해결합니다. #69091 (tuanpach).
  • 새 시스템 테이블 system.query_metric_log를 추가했습니다. 이 테이블에는 개별 쿼리에 대해 system.events 테이블에서 가져온 메모리 및 메트릭 값의 이력이 포함되며, 주기적으로 디스크에 플러시됩니다. #66532 (Pablo Marcos).
  • 간단한 SELECT 쿼리는 암시적 SELECT를 통해 계산기 스타일의 표현식을 사용할 수 있으며, 예를 들어 ch "1 + 2"처럼 작성할 수 있습니다. 이는 새 설정인 implicit_select로 제어됩니다. #68502 (Alexey Milovidov).
  • 형식 변환을 위한 단축 기능으로 clickhouse local에서 --copy 모드를 지원합니다. #68503. #68583 (Denis Hananein).
  • 머지 작업을 시각화할 수 있는 내장 HTML 페이지를 /merges 경로에서 사용할 수 있도록 추가했습니다. #70821 (Alexey Milovidov).
  • arrayUnion FUNCTION 지원을 추가했습니다. #68989 (Peter Nguyen).
  • 매개변수화된 SQL 별칭을 허용합니다. #50665 (Anton Kozlov).
  • 새로운 집계 FUNCTION quantileExactWeightedInterpolated가 추가되었습니다. 이는 quantileExactWeighted를 기반으로 하는 보간(interpolated) 버전입니다. 이미 quantileExactInterpolatedWeighted가 있는데 왜 새로운 quantileExactWeightedInterpolated가 필요한지 궁금할 수 있습니다. 그 이유는 새로운 FUNCTION이 기존 것보다 더 정확하기 때문입니다. Spark와의 호환성을 위한 것입니다. #69619 (李扬).
  • 새로운 함수 arrayElementOrNull이 추가되었습니다. 배열 인덱스가 범위를 벗어나거나 맵 키를 찾지 못하면 NULL을 반환합니다. #69646 (李扬).
  • config.xml 파일의 새 필드인 message_regexpmessage_regexp_negative를 통해 정규식을 지정하여 로그를 필터링할 수 있습니다. 로깅은 개발자에게 가장 직관적인 사용 경험을 제공하기 위해 색상이 없는 서식화된 텍스트에 대해 적용됩니다. #69657 (Peter Nguyen).
  • 문자열에 대해 RIPEMD-160 암호화 해시를 계산하는 RIPEMD160 함수를 추가했습니다. 예: SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))37F332F68DB77BD9D7EDD4969571AD671CF9DD3B를 반환합니다. #70087 (Dergousov Maxim).
  • HDFSIceberg 테이블 읽기를 지원합니다. #70268 (flynn).
  • 이제 WITH ... INSERT 형태의 공통 테이블 식(CTE)를 지원합니다. 기존에는 INSERT ... WITH ... 구문만 지원했습니다. #70593 (Shichao Jin).
  • MongoDB 통합: 모든 MongoDB 타입을 지원하고, MongoDB 측 WHERE 및 ORDER BY SQL 문을 지원하며, MongoDB에서 지원되지 않는 표현식에는 제한이 적용됩니다. 새로운 통합 기능은 기본적으로 비활성화되어 있으므로, 사용하려면 서버 구성에서 <use_legacy_mongodb_integration> 값을 false로 설정해야 합니다. #63279 (Kirill Nikiforov).
  • 새로운 함수 getSettingOrDefault가 추가되어, 현재 프로필에 사용자 지정 설정이 없을 경우 예외를 발생시키지 않고 기본값을 반환합니다. #69917 (Shankar).

실험적 기능

  • 갱신 가능 구체화 뷰가 프로덕션 환경에서 사용할 수 있는 수준으로 안정화되었습니다. #70550 (Michael Kolupaev). 갱신 가능 구체화 뷰는 이제 복제된 데이터베이스(Replicated database)에서도 지원됩니다. #60669 (Michael Kolupaev).
  • 병렬 레플리카(parallel replicas)가 실험적 단계에서 베타 단계로 전환되었습니다. 병렬 레플리카 알고리즘의 동작을 제어하는 설정이 재구성되었습니다. 간단히 요약하면, ClickHouse에는 여러 레플리카를 사용하는 병렬 읽기를 위해 4개의 서로 다른 알고리즘이 있으며, 이는 설정 parallel_replicas_mode에 반영되며 기본값은 read_tasks입니다. 추가로 토글 스위치 형태의 설정 enable_parallel_replicas가 추가되었습니다. #63151 (Alexey Milovidov), (Nikita Mikhaylov).
  • 대부분의 함수에서 Dynamic 타입을 지원하도록, Dynamic 타입 내부의 타입에서 해당 함수를 실행하도록 구현했습니다. #69691 (Pavel Kruglov).
  • 설정 input_format_binary_read_json_as_string/output_format_binary_write_json_as_string을 사용하면 RowBinary 포맷에서 JSON 타입을 바이너리 문자열로 읽고 쓸 수 있습니다. #70288 (Pavel Kruglov).
  • Native 포맷에서 JSON 컬럼을 단일 String 컬럼으로 직렬화/역직렬화할 수 있습니다. 출력에는 설정 output_format_native_write_json_as_string을 사용합니다. 입력의 경우 컬럼 데이터 앞에 직렬화 버전으로 1을 지정해야 합니다. #70312 (Pavel Kruglov).
  • MergeTree 테이블에서, 파트 수가 한계에 가까운 파티션에 대해 보다 공격적으로 동작하는 특수한(실험적) 머지 셀렉터 모드가 도입되었습니다. 이는 merge_selector_use_blurry_base MergeTree 레벨 설정으로 제어됩니다. #70645 (Nikita Mikhaylov).
  • Avro의 Union 타입과 ClickHouse의 Variant 타입 간에 범용 ser/de(직렬화/역직렬화)를 구현했습니다. #69713을 해결합니다. #69712 (Jiří Kozlovský).

성능 향상

  • IDiskIObjectStorage를 리팩터링하여 성능을 개선했습니다. plainplain_rewritable 객체 스토리지의 테이블이 더 빠르게 초기화됩니다. #68146 (Alexey Milovidov, Julia Kartseva). 비용 효율성이 떨어질 수 있으므로, plain_rewritable 디스크에서 파일 또는 디렉터리 존재 여부를 판단할 때 객체 스토리지 LIST API를 호출하지 않도록 했습니다. #70852 (Julia Kartseva). plain_rewritable 디스크에서 객체 스토리지 HEAD API 요청 횟수를 줄였습니다. #70915 (Julia Kartseva).
  • 데이터를 희소 컬럼(sparse column)으로 직접 파싱할 수 있는 기능이 추가되었습니다. #69828 (Anton Popov).
  • 값이 많이 누락된 포맷(예: JSONEachRow)을 파싱할 때의 성능을 개선했습니다. #69875 (Anton Popov).
  • Parquet row group의 병렬 읽기와 단일 스레드 모드에서의 row group 미리 가져오기를 지원합니다. #69862 (LiuNeng).
  • 이제 pointInPolygon에 대해 minmax 인덱스를 지원합니다. #62085 (JackyWoo).
  • Parquet 파일을 읽을 때 블룸 필터를 사용하도록 했습니다. #62966 (Arthur Passos).
  • 락 프리(lock-free) 파트 이름 변경을 통해 파트 락으로 인한 INSERTSELECT에 영향을 주지 않도록 했습니다. 일반적인 상황에서 fsync_part_directory가 활성화된 상태로 INSERT와 병렬로 수행되는 SELECT의 QPS가 2배 증가했으며, 고부하 환경에서는 효과가 더 큽니다. 현재는 ReplicatedMergeTree에만 적용됩니다. #64955 (Azat Khuzhin).
  • materialize ttl에서 ttl_only_drop_parts를 준수하고, TTL을 다시 계산하는 데 필요한 컬럼만 읽어, 파트를 빈 파트로 교체하는 방식으로 삭제합니다. #65488 (Andrey Zvonov).
  • ThreadPool에서 스레드 생성을 최적화하여 락 경합을 최소화했습니다. 이제 스레드 생성은 크리티컬 섹션 밖에서 수행되어 고부하 상황에서 작업 스케줄링 및 스레드 관리 지연을 방지합니다. 이를 통해 동시 부하가 높은 상황에서도 ClickHouse의 응답성이 크게 향상됩니다. #68694 (filimonov).
  • ORC에서 LowCardinality 문자열 컬럼을 읽을 수 있도록 지원합니다. #69481 (李扬).
  • part_log, query_views_log, filesystem_cache_log 등의 시스템 로그에서 ProfileEventsLowCardinality를 사용합니다. #70152 (Alexey Milovidov).
  • fromUnixTimestamptoUnixTimestamp FUNCTION의 성능을 향상했습니다. #71042 (kevinyhzou).
  • 블로킹 I/O에서 읽을 때 서버 전체에 대해 페이지 캐시의 논블로킹 읽기를 비활성화하지 않도록 했습니다. 단일 파일 시스템(예: tmpfs)만 preadv2 시스템 콜을 지원하지 않고 다른 파일 시스템은 지원하는 경우 성능이 저하되는 문제가 있었습니다. #70299 (Antonio Andelic).
  • ALTER TABLE .. REPLACE PARTITION은(는) 더 이상 다른 파티션에서 진행 중인 뮤테이션/머지 작업을 기다리지 않습니다. #59138 (Vasily Nemkov).
  • Keeper에서 ACL을 동기화할 때는 검증을 수행하지 않습니다. 생성 시점에 이미 검증을 수행합니다. 큰 문제는 없지만, 수만 개 이상의 사용자 계정이 생성된 설치 환경에서는 불필요한 해시 검증 때문에 서버가 시작될 때(Keeper에서 모든 항목을 동기화함) 작업이 완료될 때까지 오랜 시간이 걸릴 수 있습니다. #70644 (Raúl Marín).

개선 사항

  • CREATE TABLE AS는 (MergeTree 테이블의) PRIMARY KEY, ORDER BY 등과 같은 절을 복사합니다. #69739 (sakulali).
  • Keeper에서 64비트 XID를 지원합니다. use_xid_64 설정값으로 활성화할 수 있습니다. #69908 (Antonio Andelic).
  • Bool 설정용 명령줄 인자는 인자에 값이 제공되지 않으면 true로 설정됩니다(예: clickhouse-client --optimize_aggregation_in_order --query "SELECT 1"). #70459 (davidtsuk).
  • 디스크의 여유 공간이 거의 없는 경우 INSERT가 수행되지 않도록 하기 위해 사용자 수준 설정인 min_free_disk_bytes_to_perform_insertmin_free_disk_perform_to_throw_insert를 추가했습니다. #69755 (Marco Vilas Boas).
  • settings에 대한 내장 문서는 웹사이트 문서보다 훨씬 더 자세하고 완전하게 제공됩니다. 이는 웹사이트 문서가 소스 코드로부터 항상 자동 생성되도록 하기 위한 첫 단계입니다. 이는 장기적으로 다음과 같은 의미를 갖습니다: - 모든 settings가 반드시 포함됩니다. - 기본값이 오래되어 실제와 달라질 가능성이 없습니다. - 각 ClickHouse 버전별로 이 문서를 생성할 수 있습니다. - 서버가 인터넷에 접속할 수 없는 경우에도 서버 자체에서 문서를 표시할 수 있습니다. 웹사이트의 문서를 소스 코드에서 생성하도록 했습니다. #70289 (Alexey Milovidov).
  • 함수 replace에서 빈 검색 문자열(needle)을 허용하여 PostgreSQL과 동일한 동작을 하도록 했습니다. #69918 (zhanglistar).
  • 함수 replaceRegexp*에서 needle 인수로 빈 문자열을 허용하도록 했습니다. #70053 (zhanglistar).
  • data/database_name/ 디렉터리의 테이블에 대한 심볼릭 링크는 스토리지 정책에 따라 기본 디스크의 store/... 디렉터리가 아니라 테이블 데이터의 실제 경로를 가리키도록 생성됩니다. #61777 (Kirill).
  • JSON에서 Enum 필드를 파싱할 때, 정수 값을 담고 있는 문자열은 해당하는 Enum 요소로 해석됩니다. 이로써 #65119 이슈가 해결되었습니다. #66801 (scanhex12).
  • 빈 문자열에 대해 LEADING 또는 TRAILING을 사용한 TRIM을 no-op(동작 없음)으로 처리하도록 허용합니다. #67792 해결. #68455 (Peter Nguyen).
  • cast(timestamp as String)을 Spark와 더 잘 호환되도록 개선합니다. #69179 (Wenzheng Liu).
  • enable_analyzertrue로 설정된 경우 항상 새 분석기를 사용하여 상수 표현식을 계산합니다. 상수 표현식에 대해 SELECT 쿼리를 사용하지 않고도 executable 테이블 함수 인수를 계산하도록 지원합니다. #69292 (Dmitry Novik).
  • 식별자에 특수 문자가 포함되는 것을 허용하지 않도록 하는 설정 enable_secure_identifiers를 추가합니다. #69411 (tuanpach).
  • SHOW CREATE TABLE 쿼리 결과에서 식별자 따옴표 처리 동작을 정의하기 위해 show_create_query_identifier_quoting_rule를 추가합니다. 가능한 값은 다음과 같습니다. - user_display: 식별자가 키워드인 경우. - when_necessary: 식별자가 {"distinct", "all", "table"} 중 하나이고, 컬럼 이름, 딕셔너리 속성 이름 등에서 모호성을 유발할 수 있는 경우. - always: 항상 식별자에 따옴표를 사용합니다. #69448 (tuanpach).
  • 액세스 엔터티 종속성 복원을 개선했습니다 #69563 (Vitaly Baranov).
  • clickhouse-client 또는 다른 CLI 애플리케이션을 실행했을 때 서버 과부하로 시작이 느려지고, 그 사이에 SELECT와 같은 쿼리 입력을 시작하는 경우, 이전 버전에서는 인사 메시지를 출력하기 전에 터미널 에코에 남아 있는 내용을 먼저 표시하여 ClickHouse local version 24.10.1.1. 대신 SELECTClickHouse local version 24.10.1.1.처럼 출력되었습니다. 이제 이 동작이 수정되었습니다. 이 변경으로 #31696 이슈가 해결되었습니다. #69856 (Alexey Milovidov).
  • system.replicas 테이블에 새 컬럼 readonly_duration을 추가합니다. 알림에서 실제 읽기 전용 레플리카와 센티넬 레플리카를 구분할 수 있도록 하기 위한 변경입니다. #69871 (Miсhael Stetsyuk).
  • join_output_by_rowlist_perkey_rows_threshold 설정 타입을 부호 없는 정수(unsigned integer)로 변경했습니다. #69886 (kevinyhzou).
  • OpenTelemetry span 로깅을 개선하여 쿼리 설정을 포함하도록 했습니다. #70011 (sharathks118).
  • 람다 결과 타입이 예상과 다른 경우 고차 배열 함수에 대한 진단 정보를 추가합니다. #70093 (ttanay).
  • Keeper 개선: 클러스터 변경 시 락(잠금) 사용을 줄였습니다. #70275 (Antonio Andelic).
  • SHOW GRANTS 명령에 WITH IMPLICITFINAL 키워드를 추가합니다. 암시적으로 부여되는 권한과 관련된 사소한 버그를 수정합니다: #70094. #70293 (pufit).
  • MergeTree 설정에서 compatibility를 준수합니다. compatibility 값은 서버 시작 시 default 프로필에서 가져오며, 기본 MergeTree 설정도 이에 따라 변경됩니다. 이후에 compatibility 설정을 변경해도 MergeTree 설정에는 영향을 주지 않습니다. #70322 (Nikolai Kochetov).
  • 서버 간 통신 중 오류 발생 시, 큰 HTTP 응답 본문이 로그에 과도하게 남지 않도록 했습니다. #70487 (Vladimir Cherkasov).
  • 한 번에 이동할 수 있는 파트의 최대 개수를 제어하기 위한 새 설정 max_parts_to_move가 추가되었습니다. #70520 (Vladimir Cherkasov).
  • 특정 로그 메시지가 기록되는 빈도를 제한합니다. #70601 (Alexey Milovidov).
  • PART 한정자를 사용하는 CHECK TABLE이 클라이언트에서 잘못된 형식으로 출력되었습니다. #70660 (Alexey Milovidov).
  • Parquet 네이티브 writer로 컬럼 인덱스와 오프셋 인덱스를 작성할 수 있도록 지원합니다. #70669 (LiuNeng).
  • DateTime64에 대해 마이크로초 단위 및 타임존 정보를 Joda 문법(「Joda」는 날짜와 시간을 위한 널리 사용되는 Java 라이브러리이며, 「Joda 문법」은 해당 라이브러리의 형식입니다)으로 파싱하는 기능을 지원합니다. #70737 (kevinyhzou).
  • Cloud 스토리지가 일괄 삭제(batch delete)을 지원하는지 여부를 확인하는 방식을 변경했습니다. #70786 (Vitaly Baranov).
  • 네이티브 리더에서 Parquet 페이지 v2를 지원합니다. #70807 (Arthur Passos).
  • 테이블에 storage_policydisk가 모두 설정되어 있는지 확인하는 기능이 추가되었습니다. disk SETTING을 사용할 때 새로운 저장소 정책이 기존 정책과 호환되는지 확인하는 기능도 추가되었습니다. #70839 (Kirill).
  • system.s3_queue_settingssystem.azure_queue_settings가 추가되었습니다. #70841 (Kseniia Sumarokova).
  • 이제 base58Encodebase58Decode 함수는 FixedString 타입의 인수를 허용합니다. 예: SELECT base58Encode(toFixedString('plaintext', 9));. #70846 (Faizan Patel).
  • part log의 모든 항목 유형에 partition 컬럼을 추가합니다. 이전에는 일부 항목에서만 설정되어 있었습니다. 이 변경으로 #70819 이슈가 해결됩니다. #70848 (Alexey Milovidov).
  • 머지 작업 분석 및 시각화에 도움이 되도록 system.part_logMergeStartMutateStart 이벤트를 추가합니다. #70850 (Alexey Milovidov).
  • 머지된 소스 파트 개수에 대한 프로파일 이벤트를 추가했습니다. 이를 통해 프로덕션 환경에서 MergeTree의 팬아웃을 모니터링할 수 있습니다. #70908 (Alexey Milovidov).
  • 파일 시스템 캐시에 대한 백그라운드 다운로드가 다시 활성화되었습니다. #70929 (Nikita Taranov).
  • 전문가용으로만 사용되는 Trivial이라는 새로운 머지 셀렉터 알고리즘을 추가합니다. 이 알고리즘은 Simple 머지 셀렉터보다 효율이 떨어집니다. #70969 (Alexey Milovidov).
  • 원자적 CREATE OR REPLACE VIEW를 지원합니다. #70536 (tuanpach)
  • 집계 함수 windowFunnelstrict_once 모드를 추가하여, 하나의 이벤트가 여러 조건과 일치하는 경우 여러 번 집계되지 않도록 했습니다. 이로써 #21835 이슈를 해결했습니다. #69738 (Vladimir Cherkasov).

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

  • 전역 컨텍스트 객체에서 구성 업데이트를 적용합니다. 이를 통해 #62308과 같은 문제가 해결됩니다. #62944 (Amos Bird).
  • ReadSettings가 기본값만 사용되어 사용자가 설정한 값을 사용하지 않던 문제를 수정했습니다. #65625 (Kseniia Sumarokova).
  • 부호 있는 인자를 사용할 때 sumMapFiltered에서 발생하는 타입 불일치 문제를 수정했습니다. #58408 (Chen768959).
  • 선택적 시간대 인자가 전달될 때 toHour와 유사한 변환 함수들의 단조성이 깨지던 문제를 수정합니다. #60264 (Amos Bird).
  • Merge 테이블에 대한 supportsPrewhere 검사를 완화했습니다. 이 변경으로 #61064가 수정되었습니다. 해당 검사는 #60082에서 불필요하게 강화되었습니다. #61091 (Amos Bird).
  • concurrent_threads_soft_limit_num 한계가 올바르게 적용되도록 use_concurrency_control 설정 처리 방식을 수정했습니다. 이에 따라 이전에는 제대로 동작하지 않던 동시성 제어 기능이 기본값으로 활성화됩니다. #61473 (Sergei Trifonov).
  • NOT과 같은 다른 FUNCTION 내부에 있는 IS NULL 검사가 잘못된 결과를 초래할 수 있는 경우 JOIN ON 절 최적화를 잘못 수행하던 문제를 수정했습니다. #67915 이슈를 종료합니다. #68049 (Vladimir Cherkasov).
  • 테이블의 CREATE 쿼리가 잘못되도록 만드는 ALTER 쿼리를 허용하지 않습니다. #68574 (János Benjamin Antal).
  • 튜플과 배열에서 negate (-) 및 NOT 함수 사용 시 AST 포매팅이 일관되지 않던 문제를 수정합니다. #68600 (Vladimir Cherkasov).
  • 역직렬화 중에 Dynamic에 불완전한 타입이 삽입될 수 있던 문제를 수정했습니다. 이로 인해 Parameter out of bound 오류가 발생할 수 있었습니다. #69291 (Pavel Kruglov).
  • 프로덕션 환경에서는 사용이 권장되지 않는 실험적 기능인 제로-카피 복제에서, 제로-카피를 사용하는 복제된 MergeTree에서 restore replica 실행 후 발생하던 무한 루프를 수정합니다. #69293 (MikhailBurdukov).
  • 스토리지 S3Queue에서 processing_threads_num의 기본값을 CPU 코어 수로 되돌립니다. #69384 (Kseniia Sumarokova).
  • 중첩된 반복 protobuf를 중첩 컬럼으로 직렬화/역직렬화할 때 try/catch 흐름을 우회하도록 변경하여 #41971 문제를 수정했습니다. #69556 (Eliot Hautefeuille).
  • PostgreSQL engine에서 FixedString 컬럼에 데이터 삽입 시 발생하던 크래시를 수정합니다. #69584 (Pavel Kruglov).
  • create view t as (with recursive 42 as ttt select ttt);를 실행할 때 크래시가 발생하던 문제를 수정했습니다. #69676 (Han Fei).
  • 값 유형이 DateTime64인 경우 maxMapState가 「Bad get」 예외를 던지던 문제를 수정했습니다. #69787 (Michael Kolupaev).
  • LowCardinality 컬럼에서 getSubcolumn을 올바르게 동작하도록 하기 위해 useDefaultImplementationForLowCardinalityColumns를 재정의하여 true를 반환하도록 했습니다. #69831 (Miсhael Stetsyuk).
  • 분산 테이블에 대한 DROP이 실패했을 때 distributed send가 영구적으로 차단되던 문제를 수정했습니다. #69843 (Azat Khuzhin).
  • NaN 키를 가진 WITH FILL을 포함하는, 취소할 수 없던 쿼리를 수정합니다. 이로써 #69261이(가) 해결됩니다. #69845 (Alexey Milovidov).
  • 이전 호환성 값을 사용할 때 analyzer 기본값을 수정했습니다. #69895 (Raúl Marín).
  • 기존 테이블을 DROP하는 동안에는 CREATE OR REPLACE VIEW 실행 시 의존성을 검사하지 않습니다. 이전에는 재생성된 VIEW에 의존하는 테이블이 있을 경우 CREATE OR REPLACE 쿼리가 실패했습니다. #69907 (Pavel Kruglov).
  • Decimal 관련 수정입니다. 이슈 #69730을(를) 해결합니다. #69978 (Arthur Passos).
  • 이제 DEFINER/INVOKER가 매개변수화된 VIEW에서도 동작합니다. #69984 (pufit).
  • VIEW 정의자(definer)를 파싱하는 로직을 수정했습니다. #69985 (pufit).
  • Date 또는 Date32 인수를 사용하는 쿼리의 결과가 타임존 설정에 따라 변경될 수 있던 버그를 수정했습니다. #70036 (Yarik Briukhovetskyi).
  • 중첩 뷰와 WHERE 조건이 포함된 쿼리에서 발생하는 Block structure mismatch 문제를 수정합니다. 관련 이슈: #66209. #70054 (Nikolai Kochetov).
  • tuple 함수를 평가할 때 서로 다른 이름을 가진 named tuple 간에 컬럼을 재사용하지 않도록 했습니다. 이는 #70022를 수정합니다. #70103 (Amos Bird).
  • 범위 내 리터럴을 대체할 때 잘못된 LOGICAL_ERROR가 발생하던 문제를 수정합니다. #70122 (Pablo Marcos).
  • ALTER TABLE MODIFY COLUMN/QUERY 수행 시 Nullable(Nothing) 타입을 검사하여 테이블에서 해당 데이터 타입 사용을 허용하지 않습니다. #70123 (Pavel Kruglov).
  • 잘못된 쿼리 JOIN ... ON * 에 대해 올바른 오류 메시지가 출력되도록 수정하고 #68650 이슈를 해결했습니다. #70124 (Vladimir Cherkasov).
  • 건너뛰기 인덱스 사용 시 잘못된 결과가 반환되던 문제를 수정했습니다. #70127 (Raúl Marín).
  • ColumnObject/ColumnTuple의 decompress 메서드에 있던 데이터 레이스를 수정하여 해제된 메모리를 사용하는(heap use after free) 문제가 발생할 수 있는 가능성을 제거했습니다. #70137 (Pavel Kruglov).
  • Dynamic 타입을 사용하는 ALTER COLUMN에서 발생할 수 있는 멈춤(hang) 현상을 수정했습니다. #70144 (Pavel Kruglov).
  • 이제 ClickHouse는 더 많은 오류를 재시도 가능한 오류로 간주하고, 이러한 오류가 발생하더라도 데이터 파트를 손상된 것으로 표시하지 않습니다. #70145 (alesapin).
  • JSON 서브컬럼에서 Dynamic 타입을 생성할 때 올바른 max_types 파라미터를 사용하도록 수정합니다. #70147 (Pavel Kruglov).
  • bcrypt 비밀번호 인증 방식을 사용하는 사용자에 대해 system.query_log에 비밀번호가 표시되던 문제를 수정합니다. #70148 (Nikolay Degterinsky).
  • 네이티브 인터페이스(InterfaceNativeSendBytes)에 대한 이벤트 카운터를 수정했습니다. #70153 (Yakov Olkhovskiy).
  • JSON 컬럼과 관련된 잠재적인 크래시 문제를 수정했습니다. #70172 (Pavel Kruglov).
  • arrayMin 및 arrayMax 함수의 여러 문제를 수정합니다. #70207 (Raúl Marín).
  • JSON 타입 파서가 allow_simdjson 설정을 따르도록 수정했습니다. #70218 (Pavel Kruglov).
  • 두 개의 SELECT와 INTERSECT를 사용하는 materialized view를 생성할 때 발생할 수 있던 널 포인터 역참조를 수정하였습니다. 예를 들어 CREATE MATERIALIZED VIEW v0 AS (SELECT 1) INTERSECT (SELECT 1);. #70264 (Konstantin Bogdanov).
  • 시작 스크립트로 전역 설정을 수정하지 마십시오. 이전에는 시작 스크립트에서 설정을 변경하면 전역적으로 적용되었습니다. #70310 (Antonio Andelic).
  • Dynamic 타입에서 max_types 파라미터를 줄이는 ALTER을 실행할 때 서버가 크래시될 수 있던 문제를 수정했습니다. #70328 (Pavel Kruglov).
  • WITH FILL을 잘못 사용했을 때 발생하던 크래시를 수정했습니다. #70338 (Raúl Marín).
  • SYSTEM DROP FORMAT SCHEMA CACHE FOR Protobuf에서 발생할 수 있는 use-after-free 문제를 수정했습니다. #70358 (Azat Khuzhin).
  • GROUP BY에서 JSON 하위 객체의 서브컬럼을 사용할 때 발생하던 크래시를 수정했습니다. #70374 (Pavel Kruglov).
  • 행이 없는 파트는 수직 병합 시 미리 페치하지 않습니다. #70452 (Antonio Andelic).
  • lambda FUNCTION이 포함된 WHERE 절에서 발생하는 크래시를 수정합니다. #70464 (Raúl Marín).
  • Replicated 데이터베이스에서 보조 레플리카에 테이블 함수 소스를 사용할 수 없는 경우, CREATE ... AS table_function(...)를 사용한 테이블 생성이 실패하던 문제를 수정했습니다. #70511 (Kseniia Sumarokova).
  • wait_for_async_insert=1이 설정된 비동기 insert에서 모든 출력을 무시하도록 했습니다. #62644를 수정합니다. #70530 (Konstantin Bogdanov).
  • system.remote_data_paths에서 섀도 디렉터리를 탐색할 때 frozen_metadata.txt를 무시합니다. #70590 (Aleksei Filatov).
  • 정렬되지 않은 메모리에서 상태 저장 윈도우 함수가 생성되던 문제를 수정했습니다. #70631 (Raúl Marín).
  • 비어 있지 않은 기본 표현식을 가진 Array 타입 컬럼을 추가한 후 SELECT 쿼리와 머지 작업에서 드물게 발생하던 크래시를 수정했습니다. #70695 (Anton Popov).
  • S3 테이블 함수로의 INSERT가 쿼리 설정을 준수하도록 수정되었습니다. #70696 (Vladimir Cherkasov).
  • 지원되지 않는 필드를 건너뛰는 설정이 활성화된 상태에서 protobuf 스키마를 추론할 때 발생하던 무한 재귀를 수정합니다. #70697 (Raúl Marín).
  • 기본값으로 enable_named_columns_in_function_tuple를 비활성화했습니다. #70833 (Raúl Marín).
  • 서버의 CPU 코어 수에서 자동으로 결정된 경우 S3Queue 테이블 엔진의 processing_threads_num 설정이 적용되지 않던 문제를 수정합니다. #70837 (Kseniia Sumarokova).
  • 집계 상태에서 이름이 지정된 튜플 인수를 정규화합니다. 이로써 #69732가 수정됩니다. #70853 (Amos Bird).
  • 2단계 해시 테이블에서 음수 0 값으로 인해 발생하는 논리 오류를 수정합니다. 이 변경으로 #70973를 해결합니다. #70979 (Alexey Milovidov).
  • 분산 및 병렬 레플리카에서 limit bylimit with ties를 수정했습니다. #70880 (Nikita Taranov).

ClickHouse 24.9 릴리스 (2024-09-26). 발표 자료, 영상

이전 버전과의 하위 호환성이 깨지는 변경 사항

  • a[b].c와 같은 표현식이 이름이 있는 튜플(named tuple)에 대해 지원되며, 임의의 표현식에서의 이름 기반 서브스크립트(예: expr().name)도 지원됩니다. 이는 JSON을 처리할 때 유용합니다. 이 변경으로 #54965가 해결되었습니다. 이전 버전에서는 expr().name 형태의 표현식이 tupleElement(expr(), name)으로 파싱되었고, 쿼리 분석기는 해당 튜플 요소를 찾는 대신 name이라는 컬럼을 찾았습니다. 새 버전에서는 이것이 tupleElement(expr(), 'name')으로 변경되었습니다. 대부분의 경우 이전 버전에서는 의도대로 동작하지 않았지만, 이 변경이 비호환성을 초래할 수도 있는 매우 이례적인 시나리오를 상정할 수 있습니다. 예를 들어, 튜플 요소의 이름을 튜플 요소 이름과는 다른 이름의 컬럼이나 별칭에 저장한 경우입니다: SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a. 이러한 쿼리를 실제로 사용했을 가능성은 매우 낮지만, 여전히 이 변경을 잠재적으로 이전 버전과 호환되지 않는 변경으로 표시해야 합니다. #68435 (Alexey Milovidov).
  • print_pretty_type_names 설정이 활성화된 경우, SHOW CREATE TABLE SQL 문, formatQuery 함수, 그리고 clickhouse-clientclickhouse-local의 대화형 모드에서 Tuple 데이터 타입을 Pretty 형식으로 출력합니다. 이전 버전에서는 이 설정이 DESCRIBE 쿼리와 toTypeName에만 적용되었습니다. 이 변경으로 #65753가 해결되었습니다. #68492 (Alexey Milovidov).
  • Replicated 데이터베이스에서 테이블을 생성할 때 UUID를 명시적으로 지정하는 것을 허용하지 않습니다. 또한 Replicated 데이터베이스의 *MergeTree 테이블에 대해 Keeper 경로와 레플리카 이름을 명시적으로 지정하는 것도 허용하지 않습니다. 이 변경은 새로운 설정 database_replicated_allow_explicit_uuid를 도입하고, database_replicated_allow_replicated_engine_arguments의 타입을 Bool에서 UInt64로 변경합니다. #66104 (Alexander Tokmakov).

새 기능

  • 사용자가 하나의 인증 방법만 가지는 대신 여러 개의 인증 방법을 사용할 수 있도록 허용합니다. 인증 방법을 가장 최근에 추가된 방법으로 재설정할 수 있도록 허용합니다. 일정 기간 동안 일부 인스턴스를 24.8에서, 하나를 24.9에서 실행하려는 경우, 잠재적인 비호환성을 피하기 위해 해당 기간 동안 max_authentication_methods_per_user = 1로 설정하는 것이 좋습니다. #65277 (Arthur Passos).
  • ATTACH PARTITION ALL FROM 지원을 추가했습니다. #61987 (Kirill Nikiforov).
  • input_format_json_empty_as_default 설정을 추가했습니다. 이 설정을 활성화하면 JSON 입력에서 빈 필드를 기본값으로 처리합니다. #59339 이슈를 해결합니다. #66782 (Alexis Arnaud).
  • 문자열의 일부를 다른 문자열로 대체하는 overlayoverlayUTF8 함수를 추가했습니다. 예를 들어, SELECT overlay('Hello New York', 'Jersey', 11)Hello New Jersey를 반환합니다. #66933 (李扬).
  • 파티션에서 경량한 삭제를 지원하는 기능을 추가했습니다 DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr; #67805 (sunny).
  • 서로 다른 단위(예: 초, 분)를 가지는 Interval 데이터 타입 값 간의 비교를 구현하여, 이제 최소 공통 상위 타입으로 변환된 후 비교되도록 했습니다. #68057 (Yarik Briukhovetskyi).
  • CREATE 문에서 기본적으로 IF NOT EXISTS 동작을 하도록 create_if_not_exists 설정을 추가했습니다. #68164 (Peter Nguyen).
  • Azure 및 로컬 환경에서 Iceberg 테이블을 읽을 수 있도록 합니다. #68210 (Daniil Ivanik).
  • 쿼리 캐시 항목을 이제 태그로 삭제할 수 있습니다. 예를 들어 SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc'로 생성된 쿼리 캐시 항목은 SYSTEM DROP QUERY CACHE TAG 'abc' 명령으로 삭제할 수 있습니다. #68477 (Michał Tabaszewski).
  • 이름이 지정된 컬렉션에 저장소 암호화를 추가합니다. #68615 (Pablo Marcos).
  • URL 테이블 엔진에 가상 컬럼 _headers를 추가합니다. #65026 이슈를 해결합니다. #68867 (flynn).
  • 사용 가능한 프로젝션을 추적할 수 있도록 system.projections 테이블을 추가했습니다. #68901 (Jordi Villar).
  • Spark 호환성을 위해 새로운 FUNCTION arrayZipUnaligned를 추가했습니다(Spark에서는 arrays_zip라는 이름을 사용하며). 이 FUNCTION은 기존 arrayZip을 기반으로 정렬이 맞지 않는 배열도 허용합니다. #69030 (李扬).
  • 노드를 원자적으로 복사/이동할 수 있도록 Keeper 클라이언트 커맨드 라인 애플리케이션에 cp/mv 명령을 추가했습니다. #69034 (Mikhail Artemenko).
  • FUNCTION arrayAUC에 인자 scale(기본값: true)를 추가하여 정규화 단계를 생략할 수 있도록 합니다(이슈 #69609). #69717 (gabrielmcg44).

실험적 기능

  • 텍스트 포맷에서 컬럼/배열 요소에 대해 가능한 타입이 둘 이상일 때 Variant 타입이 스키마 추론 과정에서 추론될 수 있도록 하는 input_format_try_infer_variants 설정을 추가합니다. #63798 (Shaun Struwig).
  • JSON 컬럼 타입 내용의 분석을 개선하기 위해 집계 함수 distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes를 추가합니다. #68463 (Kruglov Pavel).
  • 병렬 레플리카 간에 마크 단위 분배를 consistent hash(컨시스턴트 해시)를 사용해 결정하는 새로운 알고리즘을 도입합니다. 서로 다른 읽기 패턴에 대해 선택되는 마크 개수를 다르게 하여 성능을 향상합니다. #68424 (Nikita Taranov).
  • 이전에는 병렬 레플리카 알림 처리에서 파트 중복 제거 로직의 알고리즘 복잡도가 O(n^2)였으며, 많은 파트(또는 파티션)를 가진 테이블에서는 눈에 띄는 시간이 소요될 수 있었습니다. 이 변경으로 복잡도가 O(n*log(n))으로 개선됩니다. #69596 (Alexander Gololobov).
  • 갱신 가능 구체화 뷰(refreshable materialized view) 개선: 전체 테이블을 덮어쓰는 대신 기존 테이블에 행을 추가하는 append 모드(... REFRESH EVERY 1 MINUTE APPEND ...), 재시도(기본적으로 비활성화되어 있으며 쿼리의 SETTINGS 섹션에서 구성), 현재 실행 중인 리프레시가 완료될 때까지 대기하는 SYSTEM WAIT VIEW <name> 쿼리, 기타 여러 수정 사항이 포함됩니다. #58934 (Michael Kolupaev).
  • 새로운 (실험적) 통계 유형으로 min_max를 추가합니다. 이 통계는 예를 들어 x < 100과 같은 숫자 컬럼에 대한 범위 조건을 추정하는 것을 지원합니다. #67013 (JackyWoo).
  • Variant/Dynamic 컬럼에 대한 castOrDefault 동작을 개선하여, 내부 타입들이 전혀 상호 변환 가능하지 않은 경우에도 동작하도록 합니다. #67150 (Kruglov Pavel).
  • 컬럼 부분 집합의 복제가 이제 MaterializedPostgreSQL을 통해 가능해집니다. #33748를 해결합니다. #69092 (Kruglov Kirill).

성능 개선

  • Hive 파티셔닝에서 필요한 파일만 읽도록 구현했습니다. #68963 (Yarik Briukhovetskyi).
  • LEFT 또는 INNER 해시 조인에서 테이블 키가 조밀한 경우, 키를 기준으로 오른쪽 테이블을 재배열하여 JOIN 성능을 개선했습니다. #60341 (kevinyhzou).
  • 행 목록을 지연 추가(lazy append)하는 방식으로 ALL JOIN 성능을 개선했습니다. #63677 (kevinyhzou).
  • 부팅 과정에서 파일 시스템 캐시 메타데이터를 비동기적으로 로드하도록 하여 재시작 속도를 향상했습니다 (load_metadata_asynchronously 설정으로 제어). #65736 (Daniel Pozo Escalona).
  • arraymap 함수가 일부 일반적인 케이스를 훨씬 더 빠르게 처리하도록 최적화했습니다. #67707 (李扬).
  • 특히 컬럼에 NULL이 전혀 없을 때 ORC 문자열 읽기에 대해 단순한 최적화를 수행했습니다. #67794 (李扬).
  • 머지(merge) 단계의 스케줄링 오버헤드를 줄여 머지의 전체적인 성능을 개선했습니다. #68016 (Anton Popov).
  • 프로파일이 설정되지 않았고 자격 증명이 설정되지 않았으며 IMDS를 사용할 수 없는 경우(예: Cloud 외부에 있는 머신에서 public 버킷을 쿼리하는 경우) S3로의 요청을 더 빠르게 처리하도록 했습니다. 이 변경으로 #52771을(를) 해결했습니다. #68082 (Alexey Milovidov).
  • 일부 성능 향상을 위해 RowInputFormatWithNamesAndTypes에서 포맷 리더의 가상 호출을 제거했습니다(devirtualize). #68437 (李扬).
  • CPU 활용도를 극대화하기 위해 GROUP BY 키로 집계할 때 uniq 집계 함수에 대해 병렬 머지를 추가했습니다. #68441 (Jiebin Sun).
  • 사용자가 ORC 출력 포맷에서 문자열 컬럼에 대해 딕셔너리 인코딩을 활성화할 수 있도록 output_format_orc_dictionary_key_size_threshold 설정을 추가했습니다. 이를 통해 출력 ORC 파일 크기를 줄이고 읽기 성능을 크게 개선할 수 있습니다. #68591 (李扬).
  • 서브트리를 포함한 노드를 모두 제거하는 새 Keeper 요청 RemoveRecursive를 도입했습니다. #69332 (Mikhail Artemenko).
  • 벡터 유사도 인덱스가 있는 테이블에 데이터를 삽입할 때, 벡터 인덱스에 데이터를 병렬로 추가하여 삽입 성능을 향상했습니다. #69493 (flynn).
  • 적응형 쓰기 버퍼 크기를 사용하여 JSON으로의 INSERT 시 메모리 사용량을 줄였습니다. wide part의 JSON 컬럼이 생성하는 많은 파일은 데이터 양이 적으며, 이들에 1MB 버퍼를 할당하는 것은 비효율적입니다. #69272 (Kruglov Pavel).
  • concurrent hash join 스레드 풀에서 스레드를 반환하지 않도록 하여, 쿼리가 과도하게 스레드를 생성하는 문제를 방지했습니다. #69406 (Duc Canh Le).

개선 사항

  • 이제 CREATE TABLE AS 구문이 PRIMARY KEY, ORDER BY 및 이와 유사한 절을 복사합니다. 현재는 MergeTree 계열 테이블 엔진에서만 이를 지원합니다. #69076 (sakulali).
  • 작은 엔터티 파싱과 관련된 코드베이스의 일부를 강화했습니다. 다음과 같은 (사소한) 버그들이 발견되어 수정되었습니다: - DeltaLake 테이블이 Bool로 파티션된 경우, 파티션 값이 항상 false로 해석되던 문제; - ExternalDistributed 테이블이 제공된 주소들 중 단일 세그먼트만 사용하던 문제; max_threads 설정값 등이 auto(N) 대신 'auto(N)'로 출력되던 문제. #52503 (Alexey Milovidov).
  • CPU 사용량 산정 시 시스템 전체 메트릭 대신 cgroup별 메트릭을 사용합니다. #62003 (Nikita Taranov).
  • 원격 S3 디스크에 대한 I/O 스케줄링은 이제 bandwidth_limit로 인한 대역폭 스로틀링 문제를 해결하기 위해 전체 S3 요청 단위가 아니라 HTTP 소켓 스트림 수준에서 수행되도록 변경되었습니다. #65182 (Sergei Trifonov).
  • upperUTF8lowerUTF8 함수는 이전에는 키릴 문자만 대문자/소문자로 변환할 수 있었습니다. 이제 이 제한이 제거되어 임의의 언어 문자도 대문자/소문자로 변환할 수 있습니다. 예: SELECT upperUTF8('Süden')은 이제 SÜDEN을 반환합니다. #65761 (李扬).
  • 경량한 삭제가 프로젝션이 있는 테이블에서 발생할 때는, 지금까지는 경량한 삭제가 일어나는 경우 예외를 발생시키거나(기본값) 프로젝션을 드롭(drop)하는 두 가지 선택지만 있었으나, 이제는 세 번째 옵션으로 경량한 삭제를 수행한 뒤 프로젝션을 다시 빌드할 수 있습니다. #66169 (jsc0218).
  • 두 가지 옵션(dns_allow_resolve_names_to_ipv4dns_allow_resolve_names_to_ipv6)이 추가되어 IP 패밀리별로 연결을 차단할 수 있게 되었습니다. #66895 (MikhailBurdukov).
  • clickhouse-client에서 Ctrl-Z 무시 동작을 설정(ignore_shell_suspend)으로 구성할 수 있도록 했습니다. #67134 (Azat Khuzhin).
  • JSON 출력 형식에서 UTF-8 검증을 개선합니다. 결과 데이터에 특정 바이트 시퀀스가 포함된 경우에도 유효한 JSON이 생성되도록 보장합니다. #67938 (mwoenker).
  • 내부 동작 분석을 위해 머지(merge) 및 뮤테이션에 대한 프로파일 이벤트를 추가했습니다. #68015 (Anton Popov).
  • ODBC: 서버 설정에서 http_max_tries 값을 가져오도록 변경했습니다. #68128 (Rodolphe Dugé de Bernonville).
  • X.509 SubjectAltName 확장에서 사용자 식별을 위한 와일드카드 지원을 추가합니다. #68236 (Marco Vilas Boas).
  • 날짜/시간 값에 대한 스키마 추론(schema inference)을 개선했습니다. 이제 DateTime64는 날짜/시간 값에 소수 부분이 있을 때에만 사용되고, 그렇지 않은 경우에는 일반 DateTime이 사용됩니다. 특히 문자열에서 경계 사례(corner case)로 날짜/시간이 추론되는 일을 피하기 위해, date_time_input_format='best_effort'인 경우를 포함하여 Date/DateTime 추론이 이전보다 더 엄격해졌습니다. #68382 (Kruglov Pavel).
  • 사전에서 named collection 관련 기존 코드를 삭제하고, 사전에서 DDL로 생성된 named collection을 사용할 수 있도록 하는 새로운 코드로 교체합니다. #60936, #36890을(를) 해결합니다. #68412 (Kseniia Sumarokova).
  • 외부 HTTP 인증자에는 기본값으로 설정된 HTTP/1.0 대신 HTTP/1.1을 사용합니다. #68456 (Aleksei Filatov).
  • 스레드 풀 내부 진단을 위한 새로운 메트릭 세트를 추가하여 스레드 풀의 성능과 동작을 보다 깊이 분석할 수 있습니다. #68674 (filimonov).
  • Values 포맷을 사용하는 비동기 insert 작업에서 쿼리 파라미터를 지원합니다. #68741 (Anton Popov).
  • dateTrunctoStartOfInterval에서 Date32를 지원합니다. #68874 (LiuNeng).
  • system.processors_profile_logplan_step_nameplan_step_description 컬럼을 추가합니다. #68954 (Alexander Gololobov).
  • 임베디드 사전에서 스페인어를 지원합니다. #69035 (Vasily Okunev).
  • 간단한 장애 정보 메시지에 CPU 아키텍처를 추가합니다. #69037 (Konstantin Bogdanov).
  • 재시도 중에 새로운 Keeper 연결을 수립할 수 없는 경우 쿼리가 더 빠르게 실패합니다. #69148 (Raúl Marín).
  • Database Factory를 업데이트하여 StorageFactory와 유사하게 사용자 정의 데이터베이스 엔진에서 인자, 설정 및 테이블 재정의를 사용할 수 있도록 했습니다. #69201 (NikBarykin).
  • 모든 외부 테이블 엔진과 함수(functions)를 Null 엔진으로 대체하는 복구 모드(restore_replace_external_engines_to_null, restore_replace_external_table_functions_to_null 설정)는 테이블에 SETTINGS가 있는 경우 실패하는 문제가 있었습니다. 이제 이러한 경우 테이블 정의에서 해당 설정을 제거하여 이러한 테이블을 복구할 수 있습니다. #69253 (Ilya Yatsishin).
  • ClickHouse 이미지의 entrypoint에서 CLICKHOUSE_PASSWORD가 XML에 대해 올바르게 이스케이프되도록 수정했습니다. #69301 (aohoyd).
  • arrayZip/arrayZipUnaligned에서, concathttps://github.com/ClickHouse/ClickHouse/pull/65887 에서 그랬던 것처럼 빈 인수를 허용합니다. Gluten CH Backend에서 Spark와의 호환성을 위한 변경입니다. #69576 (李扬).
  • Keeper 내부 통신을 위한 더 고급 SSL 옵션(예를 들어, 암호(passphrase)가 설정된 개인 키)을 지원합니다. #69582 (Antonio Andelic).
  • 파트와 파티션이 많은 대형 테이블에서는 인덱스 분석에 상당한 시간이 소요될 수 있습니다. 이 변경으로 해당 단계에서 부하가 큰 쿼리를 강제 종료할 수 있게 됩니다. #69606 (Alexander Gololobov).
  • gcs 테이블 FUNCTION에서 민감한 정보를 마스킹하도록 개선했습니다. #69611 (Vitaly Baranov).
  • 행 수가 줄어드는 머지 작업에 대해 프로젝션을 재생성합니다. #62364 (cangyin).

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

  • 실험적이며 아직 공식적으로 지원되지 않는 MaterializedPostgreSQL 엔진에서 pg 데이터베이스 이름(pg dbname)에 "-"가 포함된 경우 테이블을 ATTACH할 때의 동작을 수정했습니다. #62730 (takakawa).
  • 실험적이며 전혀 지원되지 않는 MaterializedPostgreSQL 엔진에서 adnum ordering이 깨졌을 때 생성 컬럼에서 발생하던 오류를 수정했습니다. #63161. 실험적이며 전혀 지원되지 않는 MaterializedPostgreSQL 엔진에서 테이블에 생성 컬럼이 존재할 경우, 기본값으로 nextval 표현식을 사용하는 id 컬럼에서 발생하던 오류를 수정했습니다. 실험적이며 전혀 지원되지 않는 MaterializedPostgreSQL 엔진에서 [a-z1-9-]를 제외한 기호를 사용하는 publication을 DROP할 때 발생하던 오류를 수정했습니다. #67664 (Kruglov Kirill).
  • Storage Join이 왼쪽 테이블의 널 허용 컬럼을 지원하도록 수정하여 #61247을(를) 해결. #66926 (vdimir).
  • IN 연산자에 Decimal()로의 변환이 포함된 경우, 병렬 레플리카(쿼리 분산 시 포함)를 사용할 때 잘못된 쿼리 결과가 반환되었습니다. 이 버그는 새 분석기(new analyzer) 도입 시 발생했습니다. #67234 (Igor Nikonov).
  • alter modify order by 구문으로 인해 메타데이터가 불일치하던 문제를 수정합니다. #67436 (iceFireser).
  • fromModifiedJulianDay 함수의 상한값을 수정했습니다. 원래 9999-12-31이어야 했으나, 실수로 9999-01-01로 설정되어 있었습니다. #67583 (PHO).
  • IN 쿼리에서 튜플의 처음 위치에 인덱스가 있지 않을 때 발생하던 문제를 수정합니다. #67626 (Yarik Briukhovetskyi).
  • RoleCache의 만료 처리를 수정합니다. #67748 (Vitaly Baranov).
  • window VIEW에서 플러시가 느려 블록이 누락되던 문제를 수정합니다. #67983 (Raúl Marín).
  • 잘못된 날짜 형식으로 인해 발생했던 MSan 문제를 수정했습니다. #68105 (JackyWoo).
  • 파일의 데이터 타입이 요청한 타입과 크게 다른 경우(예: ... FROM file('a.parquet', Parquet, 'x String')를 사용했지만 실제 파일에는 x Int64가 있는 경우) Parquet 필터링에서 발생하던 비정상 종료 문제를 수정했습니다. 이 수정이 적용되지 않은 경우에는 우회 방법으로 input_format_parquet_filter_push_down = 0을 사용하십시오. #68131 (Michael Kolupaev).
  • #67091 변경으로 인해 lag/lead에서 발생한 크래시를 수정합니다. #68262 (lgbo).
  • 쿼리 취소 시 발생하는 Postgres 크래시를 수정하도록 시도했습니다. #68288 (Kseniia Sumarokova).
  • https://github.com/ClickHouse/ClickHouse/pull/61984 이후에도 schema_inference_make_columns_nullable=0는 Parquet/Arrow 포맷에서 컬럼을 Nullable로 만들 수 있습니다. 이 변경은 하위 호환되지 않았고, 사용자들이 동작 변화에 대해 인지했습니다. 이 PR은 schema_inference_make_columns_nullable=0가 이전처럼 동작하도록(널 허용(Nullable) 컬럼이 더 이상 추론되지 않도록) 수정하고, 이 설정에 대한 새로운 값 auto를 도입하여 데이터에 널 허용 여부 정보가 있는 경우에만 컬럼을 Nullable로 만들도록 합니다. #68298 (Kruglov Pavel).
  • #50868을(를) 수정합니다. 분산 쿼리 내부의 중첩 서브쿼리에서 반환되는 작은 값의 DateTime64 상수가 잘못 NULL로 변환되어, 오류 및 잘못된 쿼리 결과가 발생할 수 있었습니다. #68323 (Shankar).
  • 쿼리 SYSTEM SYNC REPLICA에서 누락되어 있던 sync replica 모드를 수정했습니다. #68326 (Duc Canh Le).
  • 키 조건 관련 버그를 수정했습니다. #68354 (Han Fei).
  • LDAP 외부 사용자 디렉터리에서 사용 중인 role을 삭제하거나 이름을 변경할 때 발생하던 크래시를 수정했습니다. #68355 (Andrey Zvonov).
  • system.view_refreshes 시스템 테이블에서 Progress 컬럼 값이 1보다 크게 표시되던 문제를 수정합니다 #68377. #68378 (megao).
  • 정규식 플래그가 올바르게 처리되도록 수정했습니다. #68389 (Han Fei).
  • PostgreSQL 스타일의 캐스트 연산자(::)가 SQL 스타일 16진수 및 이진 문자열 리터럴(예: SELECT x'414243'::String)에서도 정상적으로 동작합니다. 이 변경으로 #68324가 해결되었습니다. #68482 (Alexey Milovidov).
  • https://github.com/ClickHouse/ClickHouse/pull/68131에 대한 마이너 패치입니다. #68494 (Chang chen).
  • 정수 n에 대한 SAMPLE n 동작을 수정합니다. #68239 #68499 (Denis Hananein).
  • mann-whitney-utest에서 두 분포의 크기가 동일하지 않을 때 발생하던 버그를 수정했습니다. #68556 (Han Fei).
  • 예기치 않은 재시작 후 손상된 파트에 의해 덮여 있는 파트가 비정상적으로 처리되어 ReplicatedMergeTree 복제가 시작되지 않는 문제가 발생했습니다. #68584 (baolin).
  • 함수 sipHash64Keyed, sipHash128Keyed, sipHash128ReferenceKeyed를 비어 있는 배열(array)이나 튜플(tuple)에 적용할 때 발생하던 LOGICAL_ERROR를 수정했습니다. #68630 (Robert Schulze).
  • 전체 텍스트 인덱스가 여러 컬럼을 인덱싱할 때 잘못된 컬럼이 필터링될 수 있습니다. 서로 다른 컬럼 사이에서 row_id를 초기화하지 않았으며, 재현 방법은 tests/queries/0_stateless/03228_full_text_with_multi_col.sql에 있습니다. 이 수정이 없으면 이러한 문제가 발생할 수 있습니다. #68644 (siyuan).
  • Replicated 테이블을 생성할 때 replica_name에 유효하지 않은 문자 '\t' 및 '\n'이 포함되어 LogEntry에서 'source replica'가 잘못 파싱되던 문제를 수정합니다. 이슈 #68640에 언급되었습니다. #68645 (Zhigao Hong).
  • 분산 테이블에 가상 컬럼 _table_database를 다시 추가했습니다. 이 컬럼들은 24.3 버전까지 제공되었습니다. #68672 (Anton Popov).
  • Variant 컬럼 순열 시 발생할 수 있는 Size of permutation (0) is less than required (...) 오류를 수정합니다. #68681 (Kruglov Pavel).
  • 새 JSON 컬럼 사용 시 발생할 수 있는 DB::Exception: Block structure mismatch in joined block stream: different columns: 오류를 수정합니다. #68686 (Kruglov Pavel).
  • 함수 sipHash(64/128)Keyed에서 키가 배열인 맵을 해싱할 때 구체화된 상수 키(materialized constant keys) 처리와 관련된 문제를 수정했습니다. #68731 (Salvatore Mesoraca).
  • ColumnsDescription::toString이 각 컬럼을 동일한 IAST::FormatState object를 사용하여 포맷하도록 변경했습니다. 이를 통해 디스크와 ZooKeeper에 기록되는 컬럼 메타데이터가 일관된 형식으로 저장됩니다. #68733 (Miсhael Stetsyuk).
  • GROUPING SETS에 대한 집계 데이터 병합을 수정합니다. #68744 (Nikolai Kochetov).
  • ReplicatedMergeTree 테이블을 생성한 뒤 컬럼을 변경하고 MODIFY STATISTICS를 실행할 때 발생하던 논리 오류를 수정합니다. #68820 (Han Fei).
  • analyzer에서 서브쿼리의 동적 서브컬럼 해석 처리 문제를 수정합니다. #68824 (Kruglov Pavel).
  • DeltaLake에서 복합 타입 메타데이터 파싱을 수정합니다. #68739 이슈를 종료합니다. #68836 (Kseniia Sumarokova).
  • 테이블에 비동기 insert를 수행한 뒤 테이블로 flush되기 전에 ALTER ADD/MODIFY COLUMN 쿼리로 테이블 메타데이터가 변경되는 경우 발생하던 문제를 수정했습니다. #68837 (Anton Popov).
  • array에 비어 있는 tuple을 넘길 때 발생하는 예기치 않은 예외를 수정합니다. 이로써 #68618 이슈를 해결합니다. #68848 (Amos Bird).
  • 순수 메타데이터 뮤테이션 명령어의 파싱을 수정합니다. #68935 (János Benjamin Antal).
  • anyHeavy 상태 병합 시 잘못된 결과가 나올 수 있던 문제를 수정합니다. #68950 (Raúl Marín).
  • optimize_functions_to_subcolumns 설정이 활성화된 상태에서 Materialized Views로 쓰기할 때 발생하던 문제를 수정했습니다. #68951 (Anton Popov).
  • const Dynamic 컬럼 메서드에서 serialization 캐시를 사용하지 않도록 했습니다. 이는 집계 과정에서 초기화되지 않은 값을 사용하는 문제나 경쟁 상태를 유발할 수 있기 때문입니다. #68953 (Kruglov Pavel).
  • JSON 타입을 파싱할 때 일부 경우에 기본값으로 null을 삽입해야 함에도 파싱 오류가 발생하던 문제를 수정합니다. #68955 (Kruglov Pavel).
  • 일부 압축된 응답에서 Content-Encoding 헤더가 전송되지 않던 문제를 수정했습니다. #64802. #68975 (Konstantin Bogdanov).
  • 경로가 잘못 연결되어 // 부분이 포함되는 경우가 있었는데, 경로 정규화를 통해 이 문제를 해결했습니다. #69066 (Yarik Briukhovetskyi).
  • 비동기 insert가 비어 있을 때 발생하는 논리 오류를 수정했습니다. #69080 (Han Fei).
  • 쿼리 취소 중 clickhouse-client에서 진행률 표시와 관련된 데이터 레이스 문제를 수정했습니다. #69081 (Sergei Trifonov).
  • 현재 실험적 기능인 벡터 유사도 인덱스가 거리 함수로 cosine distance를 사용할 때 사용되지 않던 버그를 수정했습니다. #69090 (flynn).
  • 이 변경은 초기 생성 과정 중 서버 장애가 발생한 뒤 Replicated 데이터베이스(Replicated database)를 다시 생성하려 할 때 오류가 발생할 수 있던 문제를 해결합니다. #69102 (Miсhael Stetsyuk).
  • input_format_csv_try_infer_numbers_from_strings = 1일 때 CSV에서 String 값으로부터 Bool 타입을 추론하지 않도록 했습니다. 이는 문자열에서 bool 값을 읽는 것을 허용하지 않기 때문입니다. #69109 (Kruglov Pavel).
  • --multiquery가 활성화된 경우 클라이언트에서 EXPLAIN AST INSERT 쿼리 파싱 오류를 수정합니다. #69123 (wxybear).
  • UNION 절이 있는 서브쿼리가 병렬 레플리카를 사용하는 쿼리에서 올바르게 처리되지 않아 LOGICAL_ERROR Duplicate announcement received for replica 오류가 발생했습니다. #69146 (Igor Nikonov).
  • s3Cluster에서 structure 인자가 전파되는 방식을 수정했습니다. 이전에는 s3Cluster의 레플리카로 쿼리를 전송할 때 컬럼의 DEFAULT 식이 손실될 수 있었습니다. #69147 (Kruglov Pavel).
  • 표현식을 대상 타입으로 변환할 때 Values 포맷의 포맷 설정을 준수하도록 했습니다. #69149 (Kruglov Pavel).
  • readonly 사용자에 대해 clickhouse-client --queries-file가 동작하도록 수정했습니다(이전에는 readonly 모드에서 Cannot modify 'log_comment' setting in readonly mode 오류가 발생하며 실패했습니다). #69175 (Azat Khuzhin).
  • clickhouse-client가 조기에 종료된 프로세스에 파이프로 연결되었을 때 발생하는 데이터 레이스를 수정합니다. #69186 (vdimir).
  • JSON/Dynamic 타입에서 uniqGROUP BY 사용 시 잘못된 결과가 반환되던 문제를 수정했습니다. #69203 (Kruglov Pavel).
  • 비동기 INSERT에 대한 INFILE 포맷 감지를 수정합니다. FORMAT 절에서 포맷을 명시적으로 지정하지 않은 경우, INFILE의 파일 확장자를 기반으로 포맷을 감지할 수 있습니다. #69237 (Julia Kartseva).
  • 이 이슈 이후 운영 환경의 상당수 테이블 레플리카에서 metadata_version 노드 값이 0이면서 동시에 해당 테이블의 metadata 노드 버전과는 다른 값인 경우가 있습니다. 이로 인해 이러한 레플리카에서는 alter 쿼리가 실패합니다. #69274 (Miсhael Stetsyuk).
  • Dynamic 타입을 기본 키 타입으로는 안전하지 않은 타입으로 표시하여 Fields 관련 문제를 방지합니다. #69311 (Kruglov Pavel).
  • 액세스 엔티티 종속성 복원 기능을 개선합니다. #69346 (Vitaly Baranov).
  • 삽입 시 사용할 연결을 얻기 위한 모든 시도가 실패했을 때 발생하던 정의되지 않은 동작을 수정했습니다. #69390 (Pablo Marcos).
  • #69135를 종료합니다. cross 조인에 대해 조인된 데이터를 재사용하려는 경우를 생각해 볼 수 있지만, 현재 ClickHouse에서는 그런 상황이 발생하지 않습니다. 따라서 reuseJoinedData 안에서 have_compressed를 유지하는 것이 더 좋습니다. #69404 (lgbo).
  • 파라미터가 희소 컬럼인 경우 materialize() 함수가 전체 컬럼을 반환하도록 변경했습니다. #69429 (Alexander Gololobov).
  • 함수 sqidDecode에서 발생하던 LOGICAL_ERROR를 수정했습니다 (#69450). #69451 (Robert Schulze).
  • 24.6에서 s3queue 문제 및 복제된 데이터베이스에서의 CREATE 쿼리 문제에 대한 빠른 수정. #69454 (Kseniia Sumarokova).
  • INSERT INTO ... SELECT 또는 CREATE TABLE AS SELECT 쿼리에서 squashing 때문에 메모리 사용량이 과도하게 높아지던 문제를 수정했습니다. #69469 (Yarik Briukhovetskyi).
  • 테이블 이름에 점(.)이 포함된 경우에도 이제 SHOW COLUMNSSHOW INDEX SQL 문이 올바르게 동작합니다. #69514 (Salvatore Mesoraca).
  • 이제 overflow mode가 'throw'가 아닌 쿼리에는 쿼리 캐시를 사용할 수 없습니다. 이를 통해 일부가 잘려 잘못된 쿼리 결과가 쿼리 캐시에 저장될 수 있는 상황을 방지합니다. (issue #67476). #69549 (Robert Schulze).
  • 조건을 PREWHERE 절로 이동할 때 원래 조건 순서를 유지합니다. 이전에는 순서가 변경될 수 있어, 순서가 중요한 경우 쿼리가 실패할 수 있었습니다. #69560 (Kruglov Pavel).
  • ZNOAUTH 오류 발생 후 Keeper 다중 요청 전처리를 수정했습니다. #69627 (Antonio Andelic).
  • DatabaseReplicated에서 새 레플리카를 생성할 때 WHERE 절이 있는 TTL로 인해 발생했을 수 있는 METADATA_MISMATCH 오류를 수정합니다. #69736 (Nikolay Degterinsky).
  • StorageS3(Azure)Queue 설정 tracked_file_ttl_sec를 수정했습니다. tracked_file_ttl_sec 키로 Keeper에 기록했지만, 오타로 인해 tracked_files_ttl_sec로 읽도록 되어 있었습니다. #69742 (Kseniia Sumarokova).
  • gethyperrectangleforrowgroup에서 tryconvertfieldtotype를 사용하도록 수정했습니다. #69745 (Miсhael Stetsyuk).
  • "Fix prewhere without columns and without adaptive index granularity (almost w/o anything)"' 변경을 되돌렸습니다. 이 변경을 되돌리면서 이전 CH 릴리스(대략 2021년 또는 그 이전 버전)에서 생성된 데이터 파트를 읽을 때 일부 오류가 발생할 수 있습니다. #68897 (Alexander Gololobov).

ClickHouse 24.8 LTS 릴리스, 2024년 8월 20일. 발표 자료, 영상

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

  • clickhouse-clientclickhouse-local은 이제 기본적으로 단일 쿼리 모드가 아닌 다중 쿼리 모드로 동작합니다. 예를 들어 이제는 clickhouse-client -q "SELECT 1; SELECT 2"가 그대로 동작하며, 이전에는 --multiquery(또는 -n)를 추가해야 했습니다. 따라서 --multiquery/-n 스위치는 더 이상 필요하지 않습니다. 다중 쿼리 문에서의 INSERT 쿼리는 FORMAT 절에 따라 별도로 처리됩니다. FORMAT이 VALUES인 경우(가장 일반적인 경우), INSERT 문 종료는 쿼리 끝의 세미콜론 ;으로 표시됩니다. 그 외 모든 FORMAT(예: CSV 또는 JSONEachRow)에서는 쿼리 끝의 두 개의 개행 문자 \n\n이 INSERT 문 종료를 나타냅니다. #63898 (FFish).
  • 이전 버전에서는 LowCardinality 데이터 타입에 대해 데이터 타입 이름 뒤에 WithDictionary를 추가하는 대체 구문을 사용할 수 있었습니다. 이는 초기 동작 구현이었으며, 문서화되거나 공개되지 않았습니다. 이제 이 구문은 사용 중단(deprecated)되었습니다. 이 구문을 사용하고 있다면, 테이블에 대해 ALTER를 실행하여 데이터 타입 이름을 LowCardinality로 변경해야 합니다. #66842 (Alexey Milovidov).
  • 분산 대상 테이블과 함께 사용되는 스토리지 Buffer의 논리적 오류를 수정했습니다. 이는 하위 호환되지 않는 변경 사항입니다. 분산 대상 테이블과 함께 Buffer를 사용하는 쿼리는 해당 테이블이 쿼리 내에 두 번 이상 등장하는 경우(예: self-join) 더 이상 동작하지 않을 수 있습니다. #67015 (vdimir).
  • 이전 버전에서는 Gamma 함수에 기반한 임의 분포(Chi-Squared, Student, Fisher 등)를 0에 가까운 음수 인자로 호출하면 계산에 매우 긴 시간이 걸리거나 무한 루프에 빠질 수 있었습니다. 새 버전에서는 이러한 함수들을 0 또는 음수 인자로 호출하면 예외가 발생합니다. 이 변경으로 #67297가 해결되었습니다. #67326 (Alexey Milovidov).
  • 시스템 테이블 text_log가 기본적으로 활성화되었습니다. 이는 이전 버전과 완전히 호환되지만, 로컬 디스크에서 디스크 사용량이 아주 조금 증가한 것을 느낄 수 있습니다(이 시스템 테이블은 극히 적은 디스크 공간만 사용합니다). #67428 (Alexey Milovidov).
  • 이전 버전에서는 매우 큰 배열 생성을 요청할 경우 arrayWithConstant가 느릴 수 있었습니다. 새 버전에서는 배열당 1 GB로 제한됩니다. 이 변경으로 #32754가 해결되었습니다. #67741 (Alexey Milovidov).
  • REPLACE 수정자의 포매팅을 수정했습니다(괄호 생략을 허용하지 않음). #67774 (Azat Khuzhin).
  • #68349에 백포트됨: Dynamic 타입을 재구현했습니다. 이제 Dynamic 데이터 타입의 제한에 도달했을 때, 새로운 타입은 String으로 캐스팅되지 않고, 바이너리 인코딩된 데이터 타입과 함께 바이너리 포맷의 특수 데이터 구조에 저장됩니다. 이제까지 Dynamic 컬럼에 삽입된 모든 타입은 서브컬럼으로부터 읽을 수 있습니다. #68132 (Kruglov Pavel).

새로운 기능

  • 특정 엔진에서 머지 시 프로젝션을 제어하고 OPTIMIZE DEDUPLICATE 쿼리에서의 동작을 제어하기 위한 새로운 MergeTree 설정 deduplicate_merge_projection_mode가 추가되었습니다. 지원되는 옵션은 다음과 같습니다. throw(프로젝션이 *MergeTree 엔진에서 완전히 지원되지 않는 경우 예외를 발생시킴), drop(프로젝션 자체를 일관되게 머지할 수 없는 경우 머지 과정에서 해당 프로젝션을 제거), rebuild(프로젝션을 처음부터 다시 생성하는 옵션으로, 비용이 큰 작업임). #66672 (jsc0218).
  • S3 테이블 엔진에 _etag 가상 컬럼을 추가합니다. 이슈 #65312를 해결합니다. #65386 (skyoct).
  • 쿼리 캐시를 위한 태깅(네임스페이스) 메커니즘이 추가되었습니다. 동일한 쿼리라도 서로 다른 태그를 사용하면 쿼리 캐시에서 서로 다른 쿼리로 간주합니다. 예: SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'abc'SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'def'는 이제 서로 다른 쿼리 캐시 항목을 생성합니다. #68235 (sakulali).
  • 좌측 및 우측 테이블의 컬럼이 모두 포함된 부등식 조건(예: t1.y < t2.y)에서도 사용할 수 있도록 JOIN strictness의 더 다양한 변형(LEFT/RIGHT SEMI/ANTI/ANY JOIN)을 지원합니다(설정 allow_experimental_join_condition 참고). #64281 (lgbo).
  • Hive 스타일 파티셔닝을 서로 다른 엔진(File, URL, S3, AzureBlobStorage, HDFS)에서 지원합니다. Hive 스타일 파티셔닝은 데이터를 파티션된 하위 디렉터리로 구성하여 대규모 데이터셋을 효율적으로 쿼리하고 관리할 수 있도록 합니다. 현재는 해당 이름과 데이터를 갖는 가상 컬럼만 생성합니다. 후속 PR에서는 적절한 데이터 필터링(성능 향상)을 도입할 예정입니다. #65997 (Yarik Briukhovetskyi).
  • Spark 호환성을 위해 printf FUNCTION을 추가했습니다(다만 기존 format FUNCTION도 사용할 수 있습니다). #66257 (李扬).
  • 테스트에 유용하도록 외부 엔진과 table_engines를 Null 엔진으로 대체하는 옵션 restore_replace_external_engines_to_nullrestore_replace_external_table_functions_to_null을(를) 추가했습니다. RESTORE 및 명시적인 테이블 생성 시 동작합니다. #66536 (Ilya Yatsishin).
  • readWKTLineString 함수를 사용하여 WKT 형식의 MULTILINESTRING 지오메트리를 읽을 수 있는 기능이 추가되었습니다. #67647 (Jacob Reckhard).
  • 새로운 테이블 함수 fuzzQuery를 추가했습니다. 이 함수는 주어진 쿼리 문자열에 무작위 변형을 적용할 수 있습니다. 예: SELECT query FROM fuzzQuery('SELECT 1') LIMIT 5;. #67655 (pufit).
  • 모든 분리된 파티션을 삭제하는 ALTER TABLE ... DROP DETACHED PARTITION ALL 쿼리를 추가했습니다. #67885 (Duc Canh Le).
  • 새로운 설정인 rows_before_aggregation이 활성화되면 쿼리 응답에 rows_before_aggregation_at_least 통계가 추가됩니다. 이 통계는 집계 이전에 읽힌 행 수를 나타냅니다. 분산 쿼리의 경우, limit 없이 group by 또는 max 집계 함수를 사용할 때 rows_before_aggregation_at_least는 쿼리에 의해 처리된 행 수를 반영할 수 있습니다. #66084 (morning-color).
  • Join 테이블에서 OPTIMIZE 쿼리를 실행하여 메모리 사용량을 줄일 수 있습니다. #67883 (Duc Canh Le).
  • URL에 &run=1을 추가하면 Play에서 쿼리를 즉시 실행할 수 있게 되었습니다 #66457 (Aleksandr Musorin).

실험적 기능

  • 새로운 JSON 데이터 타입을 구현했습니다. #66444 (Kruglov Pavel).
  • 새로운 TimeSeries 테이블 엔진을 추가했습니다. #64183 (Vitaly Baranov).
  • 오프셋을 Kafka에 커밋하는 방식에 의존하지 않고 Keeper에 저장하기 위한 새로운 실험적 Kafka 스토리지 엔진을 추가했습니다. 이를 통해 큐에서의 소비를 기준으로 했을 때 ClickHouse 테이블로의 커밋이 원자적으로 이루어집니다. #57625 (János Benjamin Antal).
  • 병렬 레플리카에 대해 적응형 읽기 작업 크기 계산 방식(여기서 적응형이란 읽기 컬럼 크기에 따라 달라진다는 의미)을 사용하도록 했습니다. #60377 (Nikita Taranov).
  • col = 'val'과 같은 동등 조건절에 대한 선택도 추정값을 제공하는 통계 유형 count_min(count-min sketch)을 추가했습니다. 지원되는 데이터 타입은 문자열, 날짜, DateTime 및 숫자 타입입니다. #65521 (JackyWoo).

성능 개선

  • optimize_functions_to_subcolumns 설정이 기본적으로 활성화되었습니다. #68053 (Anton Popov).
  • 객체 스토리지의 MergeTree 데이터와 분리하여 plain_rewritable 디스크 디렉터리 메타데이터를 __meta 레이아웃에 저장하도록 했습니다. 또한 plain_rewritable 디스크를 평면 디렉터리 구조로 변경했습니다. #65751 (Julia Kartseva).
  • 모든 서브컬럼에 필요한 메모리를 미리 예약하여 String/Array/Map/Variant/Dynamic 타입에 대한 컬럼 스쿼싱(INSERT 쿼리에서 발생하는 작업)을 개선했습니다. #67043 (Kruglov Pavel).
  • SYSTEM FLUSH LOGS 실행 속도를 높이고, 종료 시 로그를 플러시하도록 했습니다. #67472 (Sema Checherinda).
  • 머지 작업의 스케줄링 단계에서 발생하는 오버헤드를 줄여 전체적인 머지 성능을 개선했습니다. #68016 (Anton Popov).
  • DROP DATABASE 쿼리 실행 시 테이블 제거 속도를 높였으며, database_catalog_drop_table_concurrency의 기본값을 16으로 증가시켰습니다. #67228 (Nikita Mikhaylov).
  • ORC를 쓸 때 배열 컬럼에 대해 과도한 capacity 할당을 피하도록 변경했습니다. Array 컬럼의 성능이 15% 향상되었습니다. #67879 (李扬).
  • 비복제 MergeTree에 대한 뮤테이션 속도를 대폭 향상했습니다. #66911 #66909 (Alexey Milovidov).

개선 사항

  • allow_experimental_analyzer 설정은 enable_analyzer로 이름이 변경되었습니다. 이전 이름은 별칭(alias) 형태로 유지됩니다. 이는 Analyzer가 더 이상 베타 단계가 아니며, 완전히 프로덕션 환경용 기능으로 승격되었음을 의미합니다. #66438 (Nikita Mikhaylov).
  • 날짜-시간 스키마 추론을 개선했습니다. 이제 날짜-시간 값에 소수 부분이 있는 경우에만 DateTime64가 사용되며, 그렇지 않은 경우에는 일반 DateTime이 사용됩니다. 특히 문자열에서 날짜-시간을 잘못 추론하는 경계 상황을 피하기 위해, date_time_input_format='best_effort' 인 경우를 포함하여 Date/DateTime 추론이 더 엄격해졌습니다. #68382 (Kruglov Pavel).
  • ClickHouse 서버가 이제 새로운 설정 max_keep_alive_requests를 지원합니다. 서버로의 keep-alive HTTP 연결에서는 이 설정이 keep_alive_timeout과 함께 동작합니다. 유휴 타임아웃이 아직 만료되지 않았더라도 해당 연결을 통해 처리된 요청 수가 이미 max_keep_alive_requests를 초과하면, 서버가 해당 연결을 종료합니다. #61793 (Nikita Taranov).
  • 고급 대시보드에 다양한 개선이 이루어졌습니다. #67697 이슈를 해결했습니다. #63407 이슈를 해결했습니다. #51129 이슈를 해결했습니다. #61204 이슈를 해결했습니다. #67701 (Alexey Milovidov).
  • 분산 테이블(Distributed table)을 생성할 때 REMOTE에 대한 권한은 더 이상 필요하지 않습니다. Distributed 엔진에 대한 권한만으로 충분합니다. #65419 (jsc0218).
  • 재정의가 가능하도록 Docker 이미지에서 Keeper용 로그를 명시적으로 전달하지 않도록 했습니다. #65564 (Azat Khuzhin).
  • BACKUPRESTORE 쿼리용 use_same_password_for_base_backup 설정을 도입하여, 비밀번호로 보호된 아카이브로 증분 백업을 생성하고 해당 아카이브에서 복원할 수 있도록 했습니다. #66214 (Samuele).
  • ATTACH 쿼리에서는 async_load_databases 설정을 무시합니다(이전에는 테이블이 실제로 ATTACH되기 전에 ATTACH가 반환되는 경우가 있었습니다). #66240 (Azat Khuzhin).
  • 리소스 부족으로 인해 거부된 연결에 대한 로그 및 메트릭이 추가되었습니다. #66410 (Alexander Tokmakov).
  • MongoDB 엔진에서 UUID 타입을 올바르게 지원합니다. #66671 (Azat Khuzhin).
  • 복제 지연 및 복구 시간 지표를 추가했습니다. #66703 (Miсhael Stetsyuk).
  • DiskS3NoSuchKeyErrors 메트릭을 추가합니다. #66704 (Miсhael Stetsyuk).
  • COMMENT 절이 모든 테이블 엔진에서 정상적으로 동작하도록 개선했습니다. #66832 (Joe Lynch).
  • mapFromArrays 함수는 이제 첫 번째 인수로 Map(K, V)를 허용합니다. 예를 들어 SELECT mapFromArrays(map('a', 4, 'b', 4), ['aa', 'bb'])가 이제 실행되며 {('a',4):'aa',('b',4):'bb'}를 반환합니다. 또한 첫 번째 인수가 Array 타입인 경우, 실제 배열 값이 NULL이 아니라면 Array(Nullable(T)) 또는 Array(LowCardinality(Nullable(T))) 타입도 사용할 수 있습니다. #67103 (李扬).
  • clickhouse-local의 구성을 ~/.clickhouse-local에서 읽도록 했습니다. #67135 (Azat Khuzhin).
  • 설정 input_format_orc_read_use_writer_time_zone의 이름을 input_format_orc_reader_timezone로 변경하고, 리더 타임존을 설정할 수 있도록 했습니다. #67175 (kevinyhzou).
  • HTTP 연결 후 피어에 의해 즉시 리셋되는 경우 Socket is not connected 오류의 수준을 낮춥니다. #34218을(를) 종료합니다. #67177 (vdimir).
  • 구성에서 system.dashboards용 대시보드를 로드할 수 있는 기능을 추가했습니다(설정되면 기본 대시보드 프리셋을 덮어씁니다). #67232 (Azat Khuzhin).
  • SQL의 윈도 함수(window function)는 전통적으로 스네이크 케이스(snake case)를 사용합니다. ClickHouse는 camelCase를 사용하므로, 새로운 별칭(alias)인 denseRank()percentRank()가 추가되었습니다. 이 새로운 함수들은 기존 dense_rank()percent_rank() 함수와 완전히 동일한 방식으로 호출할 수 있습니다. 스네이크 케이스와 camelCase 표기법은 모두 계속 사용할 수 있습니다. 각 함수에 대한 새로운 테스트도 추가되었습니다. 이 변경으로 #67042가 해결되었습니다. #67334 (Peter Nguyen).
  • 구성 파일 형식이 .xml, .yml, .yaml이 아닐 경우 자동으로 감지합니다. 파일이 < 문자로 시작하면 XML로, 그렇지 않으면 YAML로 간주합니다. 파이프를 통해 구성 파일을 전달할 때 유용합니다: clickhouse-server --config-file <(echo "hello: world"). #67391 (sakulali).
  • 이제 formatDateTimeformatDateTimeInJodaSyntax FUNCTION은 format 매개변수를 선택적으로 처리합니다. 이 매개변수가 지정되지 않으면 각각 %Y-%m-%d %H:%i:%syyyy-MM-dd HH:mm:ss 형식 문자열이 기본값으로 사용됩니다. 예를 들어 이제 SELECT parseDateTime('2021-01-04 23:12:34')는 DateTime 값 2021-01-04 23:12:34를 반환합니다(이전에는 예외를 던졌습니다). #67399 (Robert Schulze).
  • 타임아웃 또는 연결 손실로 인해 실패한 KeeperMap의 Keeper 요청을 자동으로 재시도합니다. #67448 (Antonio Andelic).
  • ClickHouse 재시작 후 스택 트레이스의 적절한 분석 및 심볼리케이션이 가능하도록 Aarch64 Linux 빌드에 -no-pie를 추가했습니다. #67916 (filimonov).
  • 머지와 뮤테이션에 대한 프로파일 이벤트를 추가하여 인스트로스펙션을 개선했습니다. #68015 (Anton Popov).
  • 복제되지 않은(non-replicated) MergeTree에 대한 불필요한 로그를 제거합니다. #68238 (Daniil Ivanik).

빌드/테스트/패키징 개선

  • 통합 테스트의 flaky 체크는 이제 각 테스트 케이스를 여러 번 실행하여 테스트의 더 많은 문제를 찾아내고 신뢰성을 높이도록 되어 있습니다. 동일한 환경에서 테스트 케이스를 여러 번 실행하기 위해 pytest-repeat 라이브러리를 사용합니다. 테스트 케이스가 통과하려면 테스트 케이스 종료 시 테이블과 기타 엔티티를 정리하는 것이 중요합니다. 필요한 컨테이너를 한 번만 시작하므로, 반복 실행은 여러 번의 pytest 실행보다 훨씬 더 빠르게 동작합니다. #66986 (Ilya Yatsishin).
  • CLion과 ClickHouse를 함께 사용하는 데 있던 제약을 제거했습니다. 이전 버전에서는 CLion이 키를 입력할 때마다 1분가량 멈추는 문제가 있었습니다. 이 변경으로 #66994가 해결됩니다. #66995 (Alexey Milovidov).
  • getauxval: 최신 Linux 커널에서 ASLR 엔트로피가 높아져 sanitizer 재실행(re-exec) 시 발생하던 크래시를 방지했습니다. #67081 (Raúl Marín).
  • 클라이언트 코드의 일부를 단일 파일로 추출하고, 디버그 빌드에 대해서도 가능한 가장 높은 수준의 최적화를 적용했습니다. 이를 통해 #65745가 해결됩니다. #67215 (Nikita Mikhaylov).

버그 수정

  • 실험적인 Variant 데이터 타입에만 해당됩니다. Variant + AggregateFunction 타입 사용 시 크래시가 발생하던 문제를 수정했습니다. #67122 (Kruglov Pavel).
  • 연결이 비어 있을 때 DistributedAsyncInsert가 충돌하는 문제를 수정했습니다. #67219 (Pablo Marcos).
  • tuple() 인자를 사용할 때 uniquniqTheta가 크래시가 발생하던 문제를 수정합니다. #67303 이슈를 종료합니다. #67306 (flynn).
  • #66026을(를) 수정합니다. ReplaceTableNodeToDummyVisitor에서 해결되지 않은 테이블 FUNCTION 인자를 순회하지 않도록 합니다. #67522 (Dmitry Novik).
  • JSONMergePatch FUNCTION에서 발생할 수 있었던 스택 오버플로를 수정했습니다. 기존 이름이 잘못되어 이 FUNCTION의 이름을 jsonMergePatch에서 JSONMergePatch로 변경했습니다. 이전 이름은 호환성을 위해 계속 유지합니다. FUNCTION에서 발생하는 오류의 진단을 개선했습니다. #67304를 해결합니다. #67756 (Alexey Milovidov).
  • 특정 방식으로 조작된 쿼리로 인해 hopEnd, hopStart, tumbleEnd, tumbleStart에서 NULL 포인터가 역참조되어 서버가 비정상 종료되던 문제를 수정했습니다. #68098 (Salvatore Mesoraca).
  • 서브쿼리로 필터링할 때 일부 시스템 테이블에서 발생하던 Not-ready Set 문제를 수정했습니다. #66018 (Michael Kolupaev).
  • ALTER ADD COLUMN 쿼리 실행 후 서브컬럼을 읽는 동작을 수정했습니다. #66243 (Anton Popov).
  • PostgreSQL 같은 엔진을 사용하는 외부 데이터베이스로 전송되는 쿼리에서 boolean 리터럴 처리 방식을 수정했습니다. #66282 (vdimir).
  • 별칭이 지정된 JOIN ON 표현식을 포함한 쿼리의 포맷을 수정했습니다. 예를 들어 ... JOIN t2 ON (x = y) AS e ORDER BY x... JOIN t2 ON ((x = y) AS e) ORDER BY x로 포맷되어야 합니다. #66312 (vdimir).
  • cluster()에서 서버 간 secret 처리 방식을 수정하여, 이전과 같이 초기 사용자가 유지되도록 했습니다. #66364 (Azat Khuzhin).
  • null 값을 포함하는 Array 필드를 Array(Variant)로 변환할 때 발생할 수 있는 런타임 오류를 수정했습니다. #66727 (Kruglov Pavel).
  • Context::getDDLWorker에서 간헐적으로 발생하던 교착 상태를 수정합니다. #66843 (Alexander Gololobov).
  • 불완전한 DROP 이후 KeeperMap 테이블을 생성하지 못하던 문제를 수정했습니다. #66865 (Antonio Andelic).
  • s3_plain_rewritable 디스크로 복원 시 발생하던 broken part 오류를 수정했습니다. #66881 (Vitaly Baranov).
  • 드물게 ClickHouse가 디스크에 존재하는 예기치 않은 프로젝션 때문에 파트를 손상된 것으로 잘못 판단할 수 있었는데, 이제 수정되었습니다. #66898 (alesapin).
  • 스키마 추론에서 잘못된 포맷 감지로 인해 논리적 오류 「Format doesn't support schema inference.」가 발생할 수 있었던 문제를 수정했습니다. #66899 (Kruglov Pavel).
  • 병렬 레플리카에서 쿼리 취소 시 데드락이 발생할 수 있던 문제를 수정합니다. #66905 (Nikita Taranov).
  • database_replicated_allow_heavy_create가 설정된 경우에도 CREATE AS SELECT를 금지합니다. 이는 23.12 버전에서는 항상 금지되어 있었으나, 미출시 24.7 버전에서는 해당 설정이 활성화된 경우 실수로 허용되었습니다. #66980 (vdimir).
  • max_rows_to_read 한도가 설정된 상태에서 numbers에서 읽기를 수행할 때 예외가 잘못 발생할 수 있었습니다. 이 변경으로 #66992가 해결됩니다. #66996 (Alexey Milovidov).
  • lagInFrame 및 leadInFrame 윈도우 함수에 적절한 형식 변환을 추가하여 msan 테스트 문제를 수정합니다. #67091 (Yakov Olkhovskiy).
  • TRUNCATE DATABASE가 과거에는 DROP DATABASE 쿼리처럼 동작하여 복제를 중단시키던 문제가 있었는데, 이 문제가 수정되었습니다. #67129 (Alexander Tokmakov).
  • clickhouse-local에서 별도의 클라이언트 컨텍스트를 사용하도록 했습니다. #67133 (Vitaly Baranov).
  • Distriburted 테이블 위의 Merge 테이블에서 하나의 세그먼트만 사용하는 쿼리가 데이터를 읽을 때, 소스 스트림에서는 상수가 아니지만 결과에서는 상수여야 하는 컬럼에 대해 발생하던 Cannot convert column because it is non constant in source stream but must be constant in result. 오류를 수정합니다. #67146 (Nikolai Kochetov).
  • enable_order_by_all이 비활성화된 상태와 병렬 레플리카(분산 쿼리 포함) 환경에서 ORDER BY all이 올바르게 동작하도록 수정했습니다. #67153 (Igor Nikonov).
  • schema 캐시에서 스키마 추론 시 input_format_max_bytes_to_read가 잘못 사용되던 문제를 수정합니다. #67157 (Kruglov Pavel).
  • 단일 널 허용 키에 대해 GROUP BY를 수행하는 동안 예외가 발생할 때 COUNT DISTINCT 연산에서 발생하던 메모리 누수를 수정합니다. #67171 (Jet He).
  • OUTER JOIN을 INNER JOIN으로 잘못 변환하던 최적화의 오류를 수정합니다. #67156을(를) 해결합니다. #66447을(를) 해결합니다. 이 버그는 https://github.com/ClickHouse/ClickHouse/pull/62907에서 도입되었습니다. #67178 (Maksim Kita).
  • Conversion from AggregateFunction(name, Type) to AggregateFunction(name, Nullable(Type)) is not supported 오류를 수정했습니다. 이 버그는 optimize_rewrite_aggregate_function_with_if 최적화로 인해 발생했습니다. #67112을 수정했습니다. #67229 (Nikolai Kochetov).
  • IN 함수의 좌변(lhs)으로 빈 튜플을 사용할 때 쿼리가 응답하지 않는 문제를 수정합니다. #67295 (Duc Canh Le).
  • 아주 깊게 중첩된 JSON 데이터를 생성하면 알 수 없는 필드를 건너뛰는 과정에서 스택 오버플로우가 발생할 수 있었습니다. 이번 수정으로 #67292가 해결되었습니다. #67324 (Alexey Milovidov).
  • 시작 중 예외 발생 후 ReplicatedMergeTree 테이블을 attach하는 과정에서의 문제를 수정했습니다. #67360 (Antonio Andelic).
  • Aggregator에서 스레드 그룹에서 잘못 분리(detach)되는 바람에 발생하던 세그멘테이션 폴트(segfault)를 수정합니다. #67385 (Antonio Andelic).
  • PK에 비결정적 FUNCTION이 지정되는 또 다른 경우를 수정했습니다. #67395 (Nikolai Kochetov).
  • bloom_filter 인덱스가 (k=2)=(k=2) 또는 has([1,2,3], k)와 같은 다소 특이한 조건을 사용하는 쿼리를 실패하게 만들던 문제를 수정했습니다. #67423 (Michael Kolupaev).
  • 이제 아카이브가 아닌 경우 ::가 포함된 파일 이름/URI를 올바르게 파싱합니다. #67433 (Antonio Andelic).
  • WriteBuffer가 취소된 경우 ~WriteBufferFromS3에서 작업 대기 로직을 수정합니다. #67459 (Kseniia Sumarokova).
  • RESTORE 중에 임시 파트 디렉터리가 삭제되지 않도록 보호합니다. #67491 (Vitaly Baranov).
  • 중첩된 short-circuit FUNCTION의 실행을 수정했습니다. #67520 (Kruglov Pavel).
  • Logical error: Expected the argument №N of type T to have X rows, but it has 0 오류를 수정합니다. 이 오류는 새 분석기 사용 시 GROUP BY에 상수 표현식이 포함된 원격 쿼리에서 발생할 수 있습니다. #67536 (Nikolai Kochetov).
  • NULL을 포함하는 튜플에 대한 조인을 수정합니다: 새로운 analyzer를 사용하고 JOIN ON 절에서 NULL이 포함된 튜플을 사용하는 일부 쿼리가 잘못된 결과를 반환했습니다. #67538 (vdimir).
  • 비퇴출(non-evictable) 캐시가 가득 찬 경우 FileCache::freeSpaceRatioKeepingThreadFunc()가 중복해서 재예약되는 문제를 수정합니다. #67540 (Kseniia Sumarokova).
  • HTTP 인터페이스를 통해 Kafka, RabbitMQ, NATS와 같은 스트림형 엔진으로 데이터를 삽입할 때 발생하던 문제를 수정합니다. #67554 (János Benjamin Antal).
  • DateTime64 값이 작은 경우 잘못된 결과를 반환하던 toStartOfWeek 함수를 수정했습니다. #67558 (Yarik Briukhovetskyi).
  • 재귀 CTE를 사용하는 뷰를 생성할 수 없던 문제를 수정했습니다. #67587 (Yakov Olkhovskiy).
  • filesystem cache에서 발생하는 Logical error: 'file_offset_of_buffer_end <= read_until_position'를 수정합니다. #57508 이슈를 닫습니다. #67623 (Kseniia Sumarokova).
  • #62282를 수정했습니다. convertFieldToString() 호출을 제거하고 데이터 타입별 직렬화 코드를 추가했습니다. 여러 데이터 타입에서 파라미터 값이 데이터 타입 인스턴스를 반환하는 함수나 표현식인 경우, 파라미터화된 VIEW 치환이 동작하지 않는 문제가 있었습니다. #67654 (Shankar).
  • percent_rank에서 발생하던 크래시를 수정했습니다. percent_rank의 기본 프레임 타입이 range unbounded preceding and unbounded following으로 변경되었습니다. 이제 IWindowFunction의 기본 윈도우 프레임이 고려되어, SQL에서 윈도우 프레임이 정의되지 않은 윈도우 함수도 서로 다른 WindowTransfomer에 올바르게 배치될 수 있습니다. #67661 (lgbo).
  • UNION을 사용하는 SQL UDF 재로드 문제를 수정합니다. 이전에는 서버를 재시작하면 해당 UDF가 무효화될 수 있었습니다. #67665 (Antonio Andelic).
  • 실험적인 Variant 타입과 설정 use_variant_as_common_type이 활성화된 상태에서 Tuple 및 맵을 사용하는 if 함수에서 발생할 수 있는 논리적 오류 「Unexpected return type from if」를 수정합니다. #67687 (Kruglov Pavel).
  • Linux 커널의 버그로 인해 TimerDescriptor::drain에서 쿼리가 멈출 수 있습니다. 이 버그 수정으로 #37686이(가) 해결되었습니다. #67702 (Alexey Milovidov).
  • RESTORE ON CLUSTER 명령의 완료 처리 동작을 수정했습니다. #67720 (Vitaly Baranov).
  • 로딩 중 CANNOT_SCHEDULE_TASK가 발생할 때 딕셔너리가 중단되는 현상을 수정합니다. #67751 (Azat Khuzhin).
  • c에 블룸 필터 인덱스가 있는 경우 SELECT count() FROM t WHERE cast(c = 1 or c = 9999 AS Bool) SETTINGS use_skip_indexes=1와 같은 쿼리가 이제 정상적으로 동작합니다. #67781 (jsc0218).
  • 키와 필터 없이 집계를 수행하는 일부 쿼리에서 잘못된 집계 결과가 나오는 문제를 수정했습니다. 관련 이슈 #67419를 종료했습니다. #67804 (vdimir).
  • ALTER ADD/MODIFY COLUMN에서 실험적이거나 의심스러운 데이터 타입을 검증합니다. #67911 (Kruglov Pavel).
  • 분산 쿼리에서 상수 폴딩 이후 DateTime64 파싱 문제를 수정하고 #66773 이슈를 종료했습니다. #67920 (vdimir).
  • 비결정적 함수가 포함된 조건식에서 잘못된 count() 결과가 나오는 문제를 수정했습니다. #67922 (János Benjamin Antal).
  • 사용 가능한 CPU 수가 제한된 컨테이너화된 환경에서 최대 스레드 소프트 한도 계산을 수정했습니다. #67963 (Robert Schulze).
  • 이제 ClickHouse는 디스크에는 존재하지 않지만 checksums.txt에는 projection이 기록되어 있더라도 해당 파트를 손상된 파트로 간주하지 않습니다. #68003 (alesapin).
  • 새 analyzer에서 뮤테이션 시 변경되지 않은 파트를 건너뛰지 못하던 문제를 수정했습니다. 이전에는 analyzer가 활성화된 상태에서, 조건절에 따르면 뮤테이션의 대상이 아닌 파트임에도 불구하고 해당 파트의 데이터가 뮤테이션에 의해 다시 기록될 수 있었습니다. #68052 (Anton Popov).
  • OFFSET을 사용하는 서브쿼리에서 정렬을 생략하는 잘못된 최적화를 제거합니다. #67906을(를) 수정합니다. #68099 (Graham Campbell).
  • 집계 프로젝션 최적화 시 발생하는 AggregatingStep stream에서 Block 구조 불일치: 다른 타입 오류를 수정하려고 시도했습니다. #68107 (Nikolai Kochetov).
  • 쿼리 취소 시 발생하는 Postgres 크래시를 수정했습니다. #68288 (Kseniia Sumarokova).
  • SYSTEM SYNC REPLICA 쿼리에서 누락되어 있던 sync 레플리카 모드를 수정했습니다. #68326 (Duc Canh Le).

ClickHouse 24.7 릴리스, 2024-07-30. 발표 자료, 동영상

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

  • Replicated 데이터베이스에서 CRATE MATERIALIZED VIEW ... ENGINE Replicated*MergeTree POPULATE AS SELECT ... 를 사용할 수 없습니다. #63963 (vdimir).
  • clickhouse-keeper-client 는 이제 ls '/hello/world' 와 같은 문자열 리터럴로 된 경로만 허용하며, ls /hello/world 와 같은 리터럴이 아닌 경로는 허용하지 않습니다. #65494 (Alexey Milovidov).
  • 메트릭 KeeperOutstandingRequets 의 이름이 KeeperOutstandingRequests 로 변경되었습니다. #66206 (Robert Schulze).
  • system.functions 테이블에서 is_deterministic 필드를 제거했습니다. #66630 (Alexey Milovidov).
  • 함수 tuple 은 이제 쿼리에서 이름이 지정된 튜플을 구성하려고 시도합니다(enable_named_columns_in_function_tuple 로 제어). 튜플에서 이름을 추출하는 함수 tupleNames 를 도입했습니다. #54881 (Amos Bird).
  • materialized view 에 대한 중복 제거 방식이 변경되었습니다. 다음과 같은 많은 사례가 수정되었습니다. - 대상 테이블에서 데이터가 2개 이상의 블록으로 분할되고, 이 블록이 병렬로 삽입될 때 중복으로 간주되던 경우. - MV 대상 테이블에서, 서로 다른 입력 데이터에 대해 집계를 수행하는 과정에서 MV 가 자주 동일한 결과 데이터를 생성하여 동일한 블록이 중복 제거되던 경우. - MV 대상 테이블에서, 서로 다른 MV 에서 온 동일한 블록이 중복 제거되던 경우. #61601 (Sema Checherinda).
  • 함수 bitShiftLeftbitShitfRight 는 범위를 벗어난 시프트 위치에 대해 오류를 반환합니다. #65838 (Pablo Marcos).

새로운 기능

  • full_sorting_join 알고리즘에 ASOF JOIN 지원을 추가합니다. #55051 (vdimir).
  • clickhouse-client에서 JWT 인증을 지원합니다(ClickHouse Cloud에서만 사용 가능합니다). #62829 (Konstantin Bogdanov).
  • SQL 함수 changeYear, changeMonth, changeDay, changeHour, changeMinute, changeSecond를 추가합니다. 예를 들어, SELECT changeMonth(toDate('2024-06-14'), 7)은 날짜 2024-07-14를 반환합니다. #63186 (cucumber95).
  • 시작 단계에서 미리 구성된 쿼리를 실행할 수 있는 startup script를 도입합니다. #64889 (pufit).
  • 클라이언트 설정에서 accept_invalid_certificate를 지원하여, 자체 서명된 인증서로 실행 중인 서버에 클라이언트가 보안 TCP로 연결할 수 있도록 합니다. 이는 openSSL 클라이언트 설정인 verificationMode=none + invalidCertificateHandler.name=AcceptCertificateHandler에 대한 축약형으로 사용할 수 있습니다. #65238 (peacewalker122).
  • 테이블 system.errors의 오류 값 이력을 포함하고, 주기적으로 디스크에 플러시되는 system.error_log를 추가합니다. #65381 (Pablo Marcos).
  • 집계 함수 groupConcat을 추가합니다. arrayStringConcat( groupArray(column), ',')와 거의 동일합니다. 문자열 구분자와 처리할 요소 개수라는 2개의 매개변수를 받을 수 있습니다. #65451 (Yarik Briukhovetskyi).
  • AzureQueue 스토리지를 추가합니다. #65458 (Kseniia Sumarokova).
  • Parquet 파일에 페이지 인덱스를 기록할지 비활성화/활성화하는 새로운 설정을 추가합니다. #65475 (lgbo).
  • 콘솔(활성화된 경우)로 출력되는 로그 레벨을 제어하기 위한 logger.console_log_level 서버 설정을 도입합니다. #65559 (Azat Khuzhin).
  • 테이블 함수 file에서 디렉터리 경로 끝에 와일드카드 *를 자동으로 추가합니다. #66019 (Zhidong (David) Guo).
  • 비대화형 모드에서 클라이언트에 --memory-usage 옵션을 추가합니다. #66393 (vdimir).
  • clickhouse-disks용 대화형 클라이언트를 만들고, 로컬 디렉터리에서 로컬 디스크를 추가합니다. #64446 (Daniil Ivanik).
  • 테이블에 프로젝션이 있는 상태에서 경량한 삭제가 발생하는 경우, 사용자가 예외를 발생시키는 것(기본값)과 프로젝션을 드롭하는 것 중에서 선택할 수 있는 옵션을 제공합니다. #65594 (jsc0218).
  • 분리(detach)된 모든 테이블에 대한 주요 정보를 담은 system 테이블들을 추가합니다. #65400 (Konstantin Morozov).

실험적 기능

  • Variant 데이터 타입의 바이너리 직렬화를 변경합니다. 단일 Variant만 포함하거나 NULL 값만 있는 그래뉼의 경우 동일한 discriminator를 여러 번 기록하지 않도록 compact 모드를 추가합니다. 기본적으로 활성화되어 있는 MergeTree 설정 use_compact_variant_discriminators_serialization을 추가합니다. Variant 타입은 여전히 실험적이므로 직렬화 방식의 이전 버전과의 비호환 변경은 허용됩니다. #62774 (Kruglov Pavel).
  • clickhouse-keeper에 디스크 기반 백엔드 스토리지 지원을 추가합니다. #56626 (Han Fei).
  • JSONExtract 함수들을 리팩터링하고, 실험적인 Dynamic 타입을 포함해 더 많은 타입을 지원합니다. #66046 (Kruglov Pavel).
  • VariantDynamic 서브컬럼에 대해 null 맵 서브컬럼을 지원합니다. #66178 (Kruglov Pavel).
  • 변경된 Memory 테이블에서 Dynamic 서브컬럼을 읽을 때의 문제를 수정합니다. 이전에는 ALTER를 통해 Memory 테이블의 Dynamic 타입 max_types 파라미터를 변경하면 이후 서브컬럼 읽기에서 잘못된 결과가 반환될 수 있었습니다. #66066 (Kruglov Pavel).
  • 사용자 정의 키를 사용하는 병렬 레플리카에서 cluster_for_parallel_replicas 지원을 추가합니다. 이를 통해 MergeTree 테이블에서 사용자 정의 키와 함께 병렬 레플리카를 사용할 수 있습니다. #65453 (Antonio Andelic).

성능 향상

  • 정수(int)를 문자열(string)로 변환하는 알고리즘을 더 빠른 알고리즘(수정된 amdn/itoa에서 수정된 jeaiii/itoa로)으로 교체했습니다. #61661 (Raúl Marín).
  • join(parallel_hash 알고리즘)에서 생성되는 해시 테이블의 크기를 이제 수집하여 캐시합니다. 이 정보는 이후 쿼리 실행 시 해시 테이블을 미리 할당(preallocate)하여 해시 테이블 리사이즈에 드는 시간을 절약하는 데 사용됩니다. #64553 (Nikita Taranov).
  • 버퍼링을 사용하여 기본 키에 대한 ORDER BY와 높은 선택도를 가진 조건이 포함된 WHERE가 있는 쿼리를 최적화했습니다. 이는 read_in_order_use_buffering 설정(기본값으로 활성화됨)으로 제어되며, 쿼리의 메모리 사용량이 증가할 수 있습니다. #64607 (Anton Popov).
  • plain_rewritable 메타데이터 로딩 성능을 개선했습니다. #65634 (Alexey Milovidov).
  • 읽기 전용 디스크의 테이블을 attach할 때, 오래된 파트를 로드하지 않아 더 적은 리소스를 사용합니다. #65635 (Alexey Milovidov).
  • Set 인덱스에 대해 minmax 하이퍼직사각형을 지원합니다. #65676 (AntiTopQuark).
  • 전체 메모리 사용량을 줄이기 위해 오래된 파트의 프라이머리 인덱스를 언로드합니다. #65852 (Anton Popov).
  • 패턴이 메타문자, 패턴 클래스, 플래그, 그룹 문자 등을 포함하지 않는 단순한 경우, replaceRegexpAllreplaceRegexpOne 함수가 이제 훨씬 더 빠르게 동작합니다. (Taiyang Li에게 감사드립니다.) #66185 (Robert Schulze).
  • S3 요청: 쿼리에 대한 재시도 시간을 줄이고, 백업에 대한 재시도 횟수를 늘렸습니다. 쿼리는 8.5분 동안 최대 100회 재시도하고, 백업 복원은 1.2시간 동안 최대 1000회 재시도합니다. #65232 (Sema Checherinda).
  • 쿼리 플랜의 LIMIT 최적화를 지원합니다. PostgreSQL 스토리지와 테이블 함수에 대해 LIMIT 푸시다운을 지원합니다. #65454 (Maksim Kita).
  • ZooKeeper 로드 밸런싱을 개선했습니다. 최적 노드가 사용 가능해질 때까지 fallback_session_lifetime과 관계없이 현재 세션이 만료되지 않습니다. AZ 인식(AZ-aware) 로드 밸런싱을 지원합니다. #65570 (Alexander Tokmakov).
  • DatabaseCatalog는 최대 database_catalog_drop_table_concurrency 개의 스레드를 사용하여 테이블을 더 빠르게 삭제합니다. #66065 (Sema Checherinda).

개선 사항

  • ZooKeeper 로드 밸런싱이 개선되었습니다. fallback_session_lifetime 값과 관계없이 최적 노드가 사용 가능해질 때까지 현재 세션이 만료되지 않습니다. 가용 영역(AZ)을 인지하는 로드 밸런싱을 지원합니다. #65570 (Alexander Tokmakov).
  • optimize_trivial_insert_select 설정은 기본값이 비활성화입니다. 대부분의 경우 이렇게 하는 것이 도움이 됩니다. 그러나 INSERT SELECT가 더 느려지거나 메모리 사용량이 증가하는 경우, 이 설정을 다시 활성화하거나 SET compatibility = '24.6'를 설정할 수 있습니다. #58970 (Alexey Milovidov).
  • clickhouse-client 또는 clickhouse-local이 충돌할 경우 스택 트레이스와 진단 정보를 출력합니다. #61109 (Alexander Tokmakov).
  • SHOW INDEX | INDEXES | INDICES | KEYS의 결과는 이전에는 기본 키 컬럼 이름을 기준으로 정렬되었습니다. 이는 직관적이지 않아서, 이제 결과는 기본 키 내에서 기본 키 컬럼이 위치한 순서를 기준으로 정렬됩니다. #61131 (Robert Schulze).
  • Materialized View에서의 중복 제거 동작 방식을 변경했습니다. 다음과 같은 여러 사례가 수정되었습니다: - 대상 테이블에서: 데이터가 2개 이상의 블록으로 분할되고, 그 블록이 병렬로 삽입될 때 해당 블록이 중복으로 잘못 간주되는 경우. - MV 대상 테이블에서: 집계를 수행하는 과정에서 서로 다른 입력 데이터에 대해 MV가 동일한 결과 데이터를 자주 생성하여, 동일한 블록이 중복 제거되는 경우. - MV 대상 테이블에서: 서로 다른 MV에서 온 동일한 블록이 중복 제거되는 경우. #61601 (Sema Checherinda).
  • 파티션이 적용된 DeltaLake 데이터를 읽는 기능을 지원합니다. 데이터 대신 메타데이터를 읽어 DeltaLake 스키마를 추론합니다. #63201 (Kseniia Sumarokova).
  • 컴포저블 프로토콜에서 TLS 계층은 certificateFileprivateKeyFile 매개변수만 허용했습니다. https://clickhouse.com/docs/operations/settings/composable-protocols. #63985 (Anton Ivashkin).
  • 기본 키를 사용해 WHERE 절을 평가하는 SELECT 쿼리 수를 나타내는 프로파일 이벤트 SelectQueriesWithPrimaryKeyUsage를 추가했습니다. #64492 (0x01f).
  • StorageS3Queue 관련 수정 및 개선. 서버의 물리적 CPU 코어 수에 따라 s3queue_processing_threads_num의 기본값을 자동으로 결정하도록 변경합니다(이전 기본값은 1). s3queue_loading_retries의 기본값을 10으로 설정합니다. system.s3queue의 예외 컬럼에서 모호하게 표시될 수 있던 "Uncaught exception" 메시지를 수정합니다. MEMORY_LIMIT_EXCEEDED 예외 발생 시 재시도 카운트를 증가시키지 않습니다. 파일이 테이블에 완전히 삽입되기 전에 커밋되는 문제를 방지하기 위해, 파일 커밋 단계를 테이블로의 삽입이 완전히 완료된 이후 단계로 옮깁니다. 커밋 및 플러시 타이밍을 더 잘 제어하기 위해 s3queue_max_processed_files_before_commit, s3queue_max_processed_rows_before_commit, s3queue_max_processed_bytes_before_commit, s3queue_max_processing_time_sec_before_commit 설정을 추가합니다. #65046 (Kseniia Sumarokova).
  • 매개변수화된 VIEW FUNCTION에서 별칭(alias)을 지원합니다 (새 분석기에서만). #65190 (Kseniia Sumarokova).
  • azureBlobStorage 로그에서 account key가 마스킹되도록 변경했습니다. #65273 (SmitaRKulkarni).
  • 필터 식이 PARTITION BY 표현식의 일부인 경우에도 IN 술어에 대한 파티션 프루닝(partition pruning)을 수행합니다. #65335 (Eduard Karacharov).
  • arrayMin/arrayMax는 비교 가능한 모든 데이터 타입에 적용 가능합니다. #65455 (pn).
  • 페이지 캐시가 사용 중인 메모리를 제외하도록 cgroups v2에 대한 메모리 사용량 산정을 개선했습니다. #65470 (Nikita Taranov).
  • EmbeddedRocksDB 테이블에 삽입하기 위해 청크를 직렬화할 때 각 행마다 포맷 설정을 생성하지 않도록 했습니다. #65474 (Duc Canh Le).
  • clickhouse-local 프롬프트를 :)만 표시하도록 간소화했습니다. macOS에서 getFQDNOrHostName() 함수 실행에 시간이 너무 오래 걸리고, clickhouse-local 프롬프트에는 호스트명을 표시하지 않으려 합니다. #65510 (Konstantin Bogdanov).
  • 낮은 사양의 가상 머신에서 per-CPU arena와 관련된 jemalloc 메시지가 출력되지 않도록 했습니다. #65532 (Alexey Milovidov).
  • 기본적으로 파일 시스템 캐시의 백그라운드 다운로드를 비활성화합니다. 백그라운드 다운로드 스레드를 사용할 경우 버퍼는 쿼리 컨텍스트 안에서 할당되지만 메모리 해제는 쿼리 컨텍스트 밖에서 수행되기 때문에, 「Memory limit exceeded」 오류가 발생할 수 있는 이슈를 수정한 뒤 다시 활성화할 예정입니다. 또한 백그라운드 워커가 다운로드할 수 있는 최대 크기를 지정하는 별도의 설정을 추가해야 합니다(현재는 max_file_segment_size 로 제한되며, 이 값이 너무 클 수 있습니다). #65534 (Kseniia Sumarokova).
  • 구성에 새로운 옵션 <config_reload_interval_ms>를 추가하여 ClickHouse가 구성을 다시 로드하는 주기를 지정할 수 있도록 했습니다. #65545 (alesapin).
  • ClickHouse 데이터 타입에 대한 이진 인코딩을 구현하고 해당 사양을 문서에 추가합니다. 이를 Dynamic binary serialization에서 사용하며, 설정을 통해 RowBinaryWithNamesAndTypes 및 Native 형식에서도 사용할 수 있도록 합니다. #65546 (Kruglov Pavel).
  • 서버 설정 compiled_expression_cache_sizecompiled_expression_cache_elements_size가 이제 system.server_settings에서 표시됩니다. #65584 (Robert Schulze).
  • x509 SubjectAltName 확장을 기반으로 한 사용자 식별 지원이 추가되었습니다. #65626 (Anton Kozlov).
  • clickhouse-local은(는) 설정 파일에 지정된 max_server_memory_usagemax_server_memory_usage_to_ram_ratio 값을 사용합니다. 또한 clickhouse-server와 마찬가지로 기본적으로 시스템 메모리의 90%를 최대 메모리 사용량 한도로 설정합니다. #65697 (Alexey Milovidov).
  • 파일을 ClickHouse에 백업하기 위한 스크립트를 추가했습니다. #65699 (Alexey Milovidov).
  • PostgreSQL 소스에서 쿼리 취소를 지원합니다. #65722 (Maksim Kita).
  • 분산 쿼리에서 allow_experimental_analyzer 설정을 이니시에이터(initiator)가 제어하도록 했습니다. 이를 통해 혼합 버전 클러스터에서 운영 시 호환성과 정확성을 보장합니다. #65777 (Nikita Mikhaylov).
  • Keeper에서 cgroup CPU 제한을 준수하도록 했습니다. #65819 (Antonio Andelic).
  • 인수가 비어 있는 concat 함수를 사용할 수 있도록 했습니다. :) select concat();. #65887 (李扬).
  • clickhouse-local에서 named collection을 제어할 수 있도록 지원합니다. #65973 (Alexey Milovidov).
  • Azure 관련 프로파일링 이벤트를 개선합니다. #65999 (alesapin).
  • ORC 파일을 작성자의 시간대를 기준으로 읽는 기능을 지원합니다. #66025 (kevinyhzou).
  • PostgreSQL에 대한 연결을 제어하는 설정을 추가했습니다. postgresql_connection_attempt_timeout 설정은 연결 URL의 connect_timeout 매개변수에 전달되는 값을 지정합니다. postgresql_connection_pool_retries 설정은 PostgreSQL 엔드포인트에 대한 연결을 수립하기 위한 재시도 횟수를 지정합니다. #66232 (Dmitry Novik).
  • system.processors_profile_log에서 input_wait_elapsed_us/elapsed_us의 부정확도를 줄였습니다. #66239 (Azat Khuzhin).
  • 파일 시스템 캐시용 ProfileEvents를 개선합니다. #66249 (zhukai).
  • 복제 스토리지에서 named collection 관리를 위해 쿼리에서 ON CLUSTER 절을 무시하도록 하는 설정을 추가했습니다. #66288 (MikhailBurdukov).
  • 이제 generateSnowflakeID 함수는 대규모 클러스터에서 충돌을 방지하기 위해 머신 ID를 매개변수로 지정할 수 있습니다. #66374 (ZAWA_ll).
  • 대화형 모드에서 Ctrl+Z에 의한 일시 중지를 비활성화합니다. 이는 자주 발생하는 실수의 원인이며, 거의 모든 사용자에게 의도된 동작이라고 보기 어렵습니다. 터미널 애플리케이션을 백그라운드 작업으로 보내는 기능을 반길 극소수의 고급 사용자가 있을 수 있다고 생각하지만, 개인적으로는 그런 사용자를 한 명도 알지 못합니다. #66511 (Alexey Milovidov).
  • Dictionaries에서 프라이머리 키 타입을 검증하는 옵션을 추가했습니다. 이 옵션이 없으면 simple 레이아웃을 사용할 때 모든 컬럼 타입이 자동으로 UInt64로 변환됩니다. #66595 (MikhailBurdukov).

버그 수정(공식 안정 버전에서 사용자가 직접 인지할 수 있는 오동작)

  • CREATE/REPLACE/RENAME/EXCHANGE 쿼리에서 순환 의존성을 검사하여, 순환 의존성이 있을 경우 예외를 던지도록 했습니다. 이전에는 이러한 순환 의존성으로 인해 서버 시작 시 교착 상태가 발생할 수 있었습니다. 또한 의존성을 생성하는 과정에서의 몇 가지 버그를 수정했습니다. #65405 (Kruglov Pavel).
  • 함수 호출 시 LowCardinality 컬럼의 크기가 예상과 다르게 설정되던 문제를 수정합니다. #65298 (Raúl Marín).
  • maxIntersections에서 발생하던 크래시를 수정합니다. #65689 (Raúl Marín).
  • 재시작 후 초기화되던 USER 정의의 VALID UNTIL 절 문제를 수정했습니다. #66409 (Nikolay Degterinsky).
  • SHOW MERGES의 remaining time 컬럼을 수정했습니다. #66735 (Alexey Milovidov).
  • clickhouse-client에서 Query was cancelled가 두 번 출력되는 문제가 있었습니다. 이 문제가 수정되었습니다. #66005 (Nikita Mikhaylov).
  • MySQL의 NULL 필드를 ClickHouse의 NOT NULL 필드로 매핑하도록 TABLE OVERRIDE를 설정한 상태에서, 지원되지 않는 실험적 기능인 MaterializedMySQL을 사용할 때 발생하던 크래시를 수정했습니다. #54649 (Filipp Ozinov).
  • PREWHERE 표현식이 어떤 컬럼도 읽지 않고, 테이블에 adaptive index granularity가 설정되어 있지 않은(매우 오래된 테이블) 경우에 발생하던 논리적 오류를 수정합니다. #59173 (Alexander Gololobov).
  • 쿼리 취소 시 cancellation buffer 관련 버그를 수정합니다. #64478 (Sema Checherinda).
  • 메타데이터에서 파트 컬럼을 채우는 로직을 수정했습니다 (columns.txt가 존재하지 않을 때). #64757 (Azat Khuzhin).
  • ALTER TABLE ... ON CLUSTER ... MODIFY SQL SECURITY에서 발생하던 크래시 문제를 수정했습니다. #64957 (pufit).
  • AccessControl 소멸 시 발생하던 크래시를 수정했습니다: 명시적인 종료 처리를 추가했습니다. #64993 (Vitaly Baranov).
  • uniq* 계열 함수의 인자에서 단사 함수(injective function)를 재귀적으로 제거하도록 수정했습니다. 이 동작은 이전에는 올바르게 동작했으나 새로운 analyzer에서 깨져 있었습니다. #65140 (Duc Canh Le).
  • CTE를 사용하는 쿼리에서 예기치 않은 projection 이름이 설정되던 문제를 수정합니다. #65267 (wudidapaopao).
  • 직접 쿼리하거나 Dictionary 테이블 엔진을 통해 딕셔너리에 접근할 때 dictGet 권한이 필요하도록 변경했습니다. #65359 (Joe Lynch).
  • 증분 백업 사용 시 사용자별 S3 인증 문제를 수정했습니다. #65481 (Antonio Andelic).
  • read-in-order 최적화가 활성화된 상태에서 FINAL이 포함된 쿼리에 대해 non-intersecting-parts 최적화를 비활성화했습니다. 이로 인해 쿼리 결과가 잘못될 수 있습니다. 이 수정 사항이 병합되기 전까지는 임시 방편으로 do_not_merge_across_partitions_select_finalsplit_parts_ranges_into_intersecting_and_non_intersecting_final을 비활성화하십시오. #65505 (Nikolai Kochetov).
  • list 배치에 포함된 모든 파일이 필터링된 경우 Index out of bound for blob metadata 예외가 발생하던 문제를 수정했습니다. #65523 (Kseniia Sumarokova).
  • projection에서 중복 제거 머지를 수행할 때 발생하는 NOT_FOUND_COLUMN_IN_BLOCK 오류를 수정합니다. #65573 (Yakov Olkhovskiy).
  • MergeJoin의 버그를 수정했습니다. 희소 직렬화에서 컬럼이 필요한 변환 없이 중첩 타입의 컬럼으로 잘못 처리될 수 있었습니다. #65632 (Nikita Taranov).
  • 호환성 레벨 '23.4'가 올바르게 적용되지 않았던 버그를 수정했습니다. #65737 (cw5121).
  • 널 허용 필드가 있는 ODBC 테이블 처리를 수정했습니다. #65738 (Rodolphe Dugé de Bernonville).
  • 치명적인 오류 발생 시 TCPHandler에서 발생할 수 있던 데이터 레이스를 수정합니다. #65744 (Kseniia Sumarokova).
  • parseDateTime FUNCTION에서 %F%D 플레이스홀더 사용 시 발생하던 잘못된 예외가 발생하는 문제를 수정합니다. #65768 (Antonio Andelic).
  • PostgreSQL에서 데이터를 읽는 쿼리에 대해서는 ClickHouse 쿼리가 완료되면 내부 PostgreSQL 쿼리를 취소합니다. 그렇지 않으면 ClickHouse 쿼리는 내부 PostgreSQL 쿼리가 완료될 때까지 취소할 수 없습니다. #65771 (Maksim Kita).
  • old analyzer와 dictGetOrDefault를 함께 사용할 때 단락 평가(short-circuit) 로직에 발생하던 버그를 수정합니다. #65802 (jsc0218).
  • TTL을 사용하는 EmbeddedRocksDB에서 손상된 SST 파일이 기록되던 버그를 수정합니다. #65816 (Duc Canh Le).
  • 함수 bitTest, bitTestAll, bitTestAny는 이제 지정된 비트 인덱스가 범위를 벗어나는 경우 오류를 반환합니다 #65818 (Pablo Marcos).
  • join_any_take_last_row SETTING은 해시 조인이 포함된 모든 쿼리에서 지원됩니다. #65820 (vdimir).
  • IS NULL 검사가 포함된 조인 조건 처리 방식을 개선했습니다(예를 들어 ON (a = b AND (a IS NOT NULL) AND (b IS NOT NULL) ) OR ( (a IS NULL) AND (b IS NULL) )ON a <=> b로 재작성되도록 했습니다). IS NULL이 아닌 다른 조건이 함께 존재할 때 발생하던 잘못된 최적화를 수정했습니다. #65835 (vdimir).
  • S3Queue의 증가하던 메모리 사용량 문제를 수정했습니다. #65839 (Kseniia Sumarokova).
  • arrayAUC에서 동점(tie) 처리를 sklearn과 일치하도록 수정합니다. #65840 (gabrielmcg44).
  • MySQL 서버 프로토콜의 TLS 연결에서 발생할 수 있는 문제를 수정합니다. #65917 (Azat Khuzhin).
  • MySQL 클라이언트 프로토콜의 TLS 연결에서 발생할 수 있는 잠재적인 문제를 수정합니다. #65938 (Azat Khuzhin).
  • 타임아웃이 0일 때 SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITE 처리 방식을 수정합니다. #65941 (Azat Khuzhin).
  • input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines/input_format_csv_try_infer_numbers_from_strings/input_format_csv_try_infer_strings_from_quoted_tuples 설정이 결과 스키마를 변경할 수 있으므로, 스키마 추론 캐시에 누락되어 있던 해당 설정들을 추가합니다. 이를 통해 이러한 설정이 변경된 상태에서 스키마 추론 시 잘못된 결과가 나오는 것을 방지합니다. #65980 (Kruglov Pavel).
  • 컬럼 _size는 S3 엔진과 S3 테이블 함수에서 아카이브 자체의 크기가 아니라 아카이브 안에 있는 파일의 크기를 나타냅니다. #65993 (Daniil Ivanik).
  • analyzer에서 동적 서브컬럼을 해석하는 로직을 수정하여, 동적 서브컬럼을 읽을 때 전체 컬럼을 읽지 않도록 했습니다. #66004 (Kruglov Pavel).
  • replace 오버라이드를 사용하는 from_env 설정 병합을 수정합니다. #66034 (Azat Khuzhin).
  • 종료 시 GRPCServer가 멈출 수 있는 문제를 수정합니다. #66061 (Vitaly Baranov).
  • 상수가 아닌 LowCardinality 인수를 사용하는 has 함수의 여러 경우를 수정했습니다. #66088 (Anton Popov).
  • groupArrayIntersect의 동작을 수정했습니다. merge() 함수에서 잘못 동작하고 있었습니다. 또한 숫자형 및 일반 데이터에 대한 deserialise()의 동작도 수정했습니다. #66103 (Yarik Briukhovetskyi).
  • unbin/unhex 구현에서 버퍼 오버플로우 버그를 수정했습니다. #66106 (Nikita Taranov).
  • #64760에서 도입된 merge-filters 최적화를 비활성화합니다. 이 최적화가 두 개의 필터 식을 병합하는 과정에서 단락(short-circuit) 평가를 적용하지 않으면 예외가 발생할 수 있습니다. #66126 (Nikolai Kochetov).
  • 서버가 이제 Avro 규격에서 허용되는 음수 블록 크기를 가진 배열이 인코딩된 Avro 파일을 파싱하지 못하던 문제를 수정했습니다. #66130 (Serge Klochkov).
  • ZooKeeper 클라이언트의 버그를 수정했습니다. ZooKeeper에서 하드웨어 오류를 받은 이후 세션이 사용할 수 없는 상태로 멈춰 버릴 수 있었습니다. 예를 들어 ClickHouse Keeper의 "soft memory limit" 때문에 이러한 문제가 발생할 수 있습니다. #66140 (Alexander Tokmakov).
  • SumIfToCountIfVisitor 및 부호 있는 정수 처리와 관련된 문제를 수정합니다. #66146 (Raúl Marín).
  • 분산 쿼리 결과에서 데이터가 누락되는 드문 문제를 수정합니다. #66174 (vdimir).
  • StorageDeltaLake에서 메타데이터 필드의 파싱 순서를 수정합니다. #66211 (Kseniia Sumarokova).
  • distributed_ddl_output_modenone_only_active 모드에서는 TIMEOUT_EXCEEDED를 발생시키지 않도록 변경했습니다. #66218 (Alexander Tokmakov).
  • system.numbers_mt에 인덱스를 사용할 수 없는 경우의 LIMIT 처리를 수정합니다. #66231 (János Benjamin Antal).
  • Docker와 같은 컨테이너에서 서버가 실행되는 경우, cgroups v2에 의해 지정된 사용 가능한 CPU 코어의 최대 개수를 ClickHouse 서버가 감지하는 방법을 수정했습니다. 자세히 말해, 컨테이너는 이름이 비어 있는 루트 cgroup에서 프로세스를 실행하는 경우가 많습니다. 이 경우 ClickHouse는 cgroups v2에 의해 설정된 CPU 제한을 무시했습니다. #66237 (filimonov).
  • 제약 조건에서 IN 연산자가 포함된 서브쿼리를 사용할 때 발생하던 Not-ready set 오류를 수정했습니다. #66261 (Nikolai Kochetov).
  • S3 또는 AzureBlobStorage로 복사하는 과정에서의 오류 보고를 수정합니다. #66295 (Vitaly Baranov).
  • watchdog이 링크가 해제된(로테이션된) 로그 파일의 파일 디스크립터를 계속 보유하지 않도록 했습니다. #66334 (Aleksei Filatov).
  • logicalexpressionoptimizerpass에서 상수의 논리 타입이 소실되던 버그를 수정합니다. #66344 (pn).
  • group_by_use_nulls=true 및 새로운 analyzer를 사용할 때 발생하던 Column identifier is already registered 오류를 수정했습니다. #66400 (Nikolai Kochetov).
  • PostgreSQL과 같은 table external engine을 사용하는 테이블에 대한 조인 및 필터링 쿼리에서, 지나치게 공격적인 filter pushdown으로 인해 잘못된 결과가 반환될 수 있는 문제를 수정했습니다. 이제 외부 테이블과의 outer join인 경우 WHERE 절의 조건을 외부 데이터베이스로 전송(푸시다운)하지 않습니다. #66402 (vdimir).
  • cross join에서 누락돼 있던 컬럼 materialization을 추가했습니다. #66413 (lgbo).
  • 상수 표현식을 GROUP BY 키에 사용하는 쿼리에서 새 analyzer가 활성화된 경우 발생하는 Cannot find column 오류를 수정합니다. #66433 (Nikolai Kochetov).
  • 잘못된 배열 중첩 수준으로 인해 Npy 포맷으로부터의 가져오기(import) 중 발생할 수 있는 논리 오류를 방지하고, 기타 오류 유형에 대한 테스트를 수정합니다. #66461 (Yarik Briukhovetskyi).
  • 조건식에 비결정적 함수가 있을 때 잘못된 count() 결과가 나오는 문제를 수정했습니다. #66510 (Duc Canh Le).
  • Allocator::realloc에 대한 메모리 추적이 올바르게 이루어지도록 수정했습니다. #66548 (Antonio Andelic).
  • 빈 튜플을 해싱할 때 초기화되지 않은 메모리를 읽게 되던 문제를 수정했습니다. #66562 (Alexey Milovidov).
  • WINDOW가 포함된 쿼리에서 잘못된 결과가 반환되는 문제를 수정합니다. 이 문제는 PARTITION 컬럼이 희소 직렬화를 사용하고 윈도우 함수가 병렬로 실행될 때 발생할 수 있습니다. #66579 (Nikolai Kochetov).
  • 로컬 스토리지에서 named collection을 삭제할 때 발생하던 문제를 수정합니다. #66599 (János Benjamin Antal).
  • ColumnTuple::insertManyFrom에서 column_length가 업데이트되지 않던 버그를 수정합니다. #66626 (lgbo).
  • (column IS NULL) 표현식을 사용하는 쿼리에서 발생하던 Unknown identifierColumn is not under aggregate function 오류를 수정합니다. 이 버그는 analyzer 비활성화 시에만 #65088에 의해 트리거되었습니다. #66654 (Nikolai Kochetov).
  • 새 분석기(new analyzer)를 사용할 때 IN 연산자의 첫 번째 인수로 스칼라 서브쿼리를 사용하면 발생하던 Method getResultType is not supported for QUERY query node 오류를 수정했습니다. #66655 (Nikolai Kochetov).
  • variant 서브컬럼을 읽을 때 발생할 수 있는 PARAMETER_OUT_OF_BOUND 오류를 수정했습니다. #66659 (Kruglov Pavel).
  • 컬럼을 drop한 이후 merge가 멈출 수 있는 드문 문제를 수정합니다. #66707 (Raúl Marín).
  • 원격 소스에서 수행되는 INSERT SELECT 쿼리의 isUniqTypes 어설션을 수정합니다. #66722 (Sema Checherinda).
  • PrometheusRequestHandler의 논리적 오류를 수정했습니다. #66621 (Vitaly Baranov).
  • 퍼저(fuzzer)로 발견된 indexHint 함수 관련 케이스를 수정합니다. #66286 (Anton Popov).
  • 'create table b empty as a'의 AST 포맷을 수정합니다. #64951 (Michael Kolupaev).

ClickHouse 24.6 릴리스, 2024-07-01. 발표 자료, 동영상

이전 버전과의 비호환 변경 사항

  • 데이터베이스와 테이블의 비동기 로드를 기본값으로 활성화합니다. config.xmlasync_load_databases를 참조하십시오. 이 변경 사항은 완전히 호환되지만, 동작상의 차이를 유발할 수 있습니다. 이전 버전처럼 async_load_databases가 false인 경우, 서버는 모든 테이블이 로드될 때까지 연결을 허용하지 않습니다. 새 버전처럼 async_load_databases가 true인 경우, 서버는 모든 테이블이 로드되기 전에 연결을 허용할 수 있습니다. 아직 로드되지 않은 테이블에 대해 쿼리를 실행하면, 테이블이 로드될 때까지 대기하며, 이 과정은 상당한 시간이 걸릴 수 있습니다. 이는 서버가 로드 밸런서 하에 있는 대규모 분산 시스템의 일부인 경우 동작이 달라질 수 있습니다. 첫 번째 경우에는 로드 밸런서가 연결 거부를 받고 다른 서버로 빠르게 장애 조치할 수 있습니다. 두 번째 경우에는 로드 밸런서가 아직 테이블을 로드 중인 서버에 연결할 수 있으며, 이때 쿼리 지연 시간이 더 길어집니다. 또한, 대기 상태에 쿼리가 많이 누적되면 동시에 처리되기 시작하면서 「thundering herd」 문제가 발생할 수 있습니다. 이는 부하가 매우 높은 분산 백엔드에서만 차이를 유발할 수 있습니다. 이 문제를 방지하려면 async_load_databases 값을 false로 설정하면 됩니다. #57695 (Alexey Milovidov).
  • MergeTree 테이블에 대해 replace_long_file_name_to_hash 설정이 기본적으로 활성화됩니다. #64457 (Anton Popov). 이 설정은 완전히 호환되며, 업그레이드 시 추가 작업이 필요하지 않습니다. 새 데이터 형식은 23.9 버전 이상에서 모두 지원됩니다. 이 설정을 활성화한 이후에는 23.8 이하 버전으로 다운그레이드할 수 없습니다.
  • 일부 잘못된 쿼리는 파싱 단계에서 더 일찍 실패합니다. 참고: 인라인 KQL 표현식(실험적 Kusto 언어)을 문자열 리터럴 없이 kql 테이블 함수에 넣는 경우(예: kql(garbage | trash) 대신 kql('garbage | trash') 또는 kql($$garbage | trash$$))에 대한 지원이 비활성화되었습니다. 이 기능은 의도치 않게 도입된 것이며 존재해서는 안 됩니다. #61500 (Alexey Milovidov).
  • 스토리지 S3QueueOrdered 모드에서 병렬 처리를 다시 설계했습니다. 이 PR은 s3queue_processing_threads_num 또는 s3queue_total_shards_num 설정을 사용한 경우 Ordered 모드에서 이전 버전과 호환되지 않습니다. s3queue_total_shards_num 설정은 삭제되었으며, 이전에는 현재는 사용이 중단된 s3queue_allow_experimental_sharded_mode 하에서만 사용할 수 있었습니다. 새로운 설정인 s3queue_buckets가 추가되었습니다. #64349 (Kseniia Sumarokova).
  • 새로운 함수 snowflakeIDToDateTime, snowflakeIDToDateTime64, dateTimeToSnowflakeID, dateTime64ToSnowflakeID가 추가되었습니다. 기존 함수인 snowflakeToDateTime, snowflakeToDateTime64, dateTimeToSnowflake, dateTime64ToSnowflake와 달리, 새 함수는 generateSnowflakeID FUNCTION과 호환됩니다. 즉, generateSnowflakeID가 생성한 snowflake ID를 입력으로 받고, generateSnowflakeID와 동일한 타입(즉, UInt64)의 snowflake ID를 생성합니다. 또한 새 함수는 generateSnowflakeID와 마찬가지로 기본적으로 UNIX epoch(1970-01-01)을 사용합니다. 필요하면, Twitter/X의 epoch(UNIX epoch 이후 1288834974657밀리초, 즉 2010-11-04)와 같이 다른 epoch를 전달할 수 있습니다. 이전 변환 함수는 사용 중단(deprecated) 상태이며 전환 기간 이후 제거될 예정입니다. 그럼에도 계속 사용하려면 allow_deprecated_snowflake_conversion_functions 설정을 활성화하십시오. #64948 (Robert Schulze).

새로운 기능

  • ClickHouse Keeper에 이름이 있는 컬렉션을 저장할 수 있도록 했습니다. #64574 (Kseniia Sumarokova).
  • 빈 튜플을 지원합니다. #55061 (Amos Bird).
  • Hilbert 곡선 인코딩 및 디코딩 함수를 추가합니다. #60156 (Artem Mustafin).
  • hilbertEncode를 사용한 인덱스 분석 지원이 추가되었습니다. #64662 (Artem Mustafin).
  • readWKTLineString 함수를 사용해 WKT 형식의 LINESTRING geometry를 읽을 수 있도록 지원을 추가했습니다. #62519 (Nikita Mikhaylov).
  • 다른 디스크에 있는 파트를 attach할 수 있도록 했습니다. #63087 (Unalian).
  • Twitter 스타일의 Snowflake ID를 생성하는 새로운 SQL 함수 generateSnowflakeID가 추가되었습니다. #63577 (Danila Puzov).
  • 머지와 뮤테이션 및 기타 워크로드 간의 리소스 사용과 공유를 제어하기 위해 merge_workloadmutation_workload SETTING을 추가했습니다. #64061 (Sergei Trifonov).
  • = 연산자를 사용하여 IPv4IPv6 타입을 비교할 수 있도록 지원이 추가되었습니다. #64292 (Francisco J. Jurado Moreno).
  • 이항 수학 함수(pow, atan2, max2, min2, hypot)에서 Decimal 타입 인수를 지원합니다. #64582 (Mikhail Gorshkov).
  • SQL 함수 parseReadableSize(및 그 변형인 OrNull, OrZero)를 추가했습니다. #64742 (Francisco J. Jurado Moreno).
  • CREATE 쿼리에서 데이터베이스 또는 테이블 수를 제한할 수 있도록 서버 설정 max_table_num_to_throwmax_database_num_to_throw를 추가합니다. #64781 (Xu Jia).
  • _time 가상 컬럼을 S3/file/hdfs/url/azureBlobStorage와 같은 파일 기반 스토리지에 추가합니다. #64947 (Ilya Golshtein).
  • 새로운 함수 base64URLEncode, base64URLDecode, tryBase64URLDecode가 추가되었습니다. #64991 (Mikhail Gorshkov).
  • 새로운 함수 editDistanceUTF8가 추가되어 두 개의 UTF8 문자열 사이의 편집 거리를 계산할 수 있습니다. #65269 (LiuNeng).
  • 사용자 정의 HTTP 핸들러에서 사용자 정의 응답 헤더를 지원하기 위해 http_response_headers 설정을 추가했습니다. #63562 (Grigorii).
  • 쿼리 결과를 무한 루프 형태로 반환할 수 있도록 지원하는 새로운 테이블 함수인 loop를 추가했습니다. #63452 (Sariel). 테스트에 유용합니다.
  • system.query_log에 두 개의 컬럼 used_privilegesmissing_privileges가 도입되었습니다. used_privileges에는 쿼리 실행 중에 검사된 권한이 기록되고, missing_privileges에는 필요한 권한 중 누락된 권한이 포함됩니다. #64597 (Alexey Katsman).
  • 긴 테이블(기본적으로 50행 이상)의 경우 테이블 끝부분에 컬럼 이름을 표시하도록 하는 output_format_pretty_display_footer_column_names 설정이 추가되었습니다. 최소 행 수에 대한 임계값은 output_format_pretty_display_footer_column_names_min_rows로 제어합니다. #65144 (Shaun Struwig).

Experimental Feature

  • 「고유 값 개수」 유형의 통계를 추가합니다. #59357 (Han Fei).
  • ReplicatedMergeTree에서 통계를 지원합니다. #64934 (Han Fei).
  • Replicated 데이터베이스에 「replica group」이 설정되어 있는 경우, 각 그룹의 레플리카를 모두 포함하는 클러스터를 자동으로 생성합니다. #64312 (Alexander Tokmakov).
  • 동적 세그먼트를 사용하는 병렬 레플리카에서 범위 필터를 사용할 때 쿼리를 어떻게 병렬화할지 제어하기 위한 설정 parallel_replicas_custom_key_range_lowerparallel_replicas_custom_key_range_upper를 추가합니다. #64604 (josh-hildred).

성능 향상

  • PRIMARY KEY가 설정한 순서를 위반하지 않으면서 데이터 크기를 최적화할 수 있도록, 데이터 삽입 시 행을 재배치하는 기능이 추가되었습니다. 이 기능은 설정 optimize_row_order로 제어됩니다(기본값: off). #63578 (Igor Markelov).
  • 네이티브 Parquet 리더를 추가하여 Parquet 바이너리를 ClickHouse 컬럼으로 직접 읽을 수 있습니다. 해당 기능은 설정 input_format_parquet_use_native_reader로 제어되며(기본값은 비활성화), #60361에서 추가되었습니다(ZhiHong Zhang).
  • 쿼리 필터로 MergeTree 테이블에서 정확한 범위를 선택할 수 있을 때, 부분적인 trivial COUNT 최적화를 지원합니다. #60463 (Amos Bird).
  • 여러 스레드에서 나온 청크를 하나의 변환 단계에서 모아 처리하여 멀티스레드 INSERT의 최대 메모리 사용량을 줄입니다. #61047 (Yarik Briukhovetskyi).
  • Azure 객체 스토리지를 사용할 때 고정된 메모리 할당 방식을 사용해 추가 버퍼 할당을 피함으로써 메모리 사용량을 줄입니다. #63160 (SmitaRKulkarni).
  • ColumnNullable::size에서 가상 함수 호출 수를 줄였습니다. #60556 (HappenLee).
  • 정규 표현식 인자로 단일 문자를 사용할 때 splitByRegexp 함수의 성능을 향상했습니다. #62696 (Robert Schulze).
  • 8비트 및 16비트 키에서 사용된 최소 및 최대 키를 추적하여 집계를 가속합니다. 이를 통해 검사해야 하는 셀 수를 줄일 수 있습니다. #62746 (Jiebin Sun).
  • 왼쪽 피연산자가 LowCardinality이고 오른쪽이 상수 집합인 경우 IN 연산자를 최적화합니다. #64060 (Zhiguo Zhou).
  • ConcurrentHashJoin 내부에서 해시 테이블을 초기화하고 소멸시키기 위해 스레드 풀을 사용하도록 했습니다. #64241 (Nikita Taranov).
  • 희소 컬럼을 포함한 테이블에서 수직 병합을 최적화했습니다. #64311 (Anton Popov).
  • 수직 병합 수행 시 원격 파일 시스템에서 데이터를 미리 가져오는 기능을 활성화했습니다. 이는 데이터가 원격 파일 시스템에 저장된 테이블에서 수직 병합의 지연 시간을 줄여 줍니다. #64314 (Anton Popov).
  • ColumnSparse::filterisDefault에 대한 중복 호출을 줄여 성능을 개선했습니다. #64426 (Jiebin Sun).
  • 여러 비동기 getChildren 요청을 통해 find_super_nodesfind_big_family keeper-client 명령을 가속했습니다. #64628 (Alexander Gololobov).
  • 널 허용 숫자 타입 인자를 사용하는 least/greatest FUNCTION을 개선합니다. #64668 (KevinyhZou).
  • 쿼리 플랜에서 연속된 두 개의 필터링 단계를 하나로 병합할 수 있도록 했습니다. 이를 통해 상위 단계의 필터 조건을 하위 단계로 푸시다운할 수 있는 경우 필터 푸시다운(filter push-down) 최적화가 향상됩니다. #64760 (Nikolai Kochetov).
  • vertical final 구현에 있던 잘못된 최적화를 제거하고, vertical final 알고리즘을 기본값으로 다시 활성화합니다. #64783 (Duc Canh Le).
  • 필터 표현식에서 ALIAS 노드를 제거합니다. 이를 통해 PREWHERE가 있는 쿼리(새로운 분석기 사용 시)의 성능이 소폭 향상됩니다. #64793 (Nikolai Kochetov).
  • OpenSSL 세션 캐싱을 다시 활성화했습니다. #65111 (Robert Schulze).
  • 삽입 시 skip 인덱스와 통계가 구체화되지 않도록 하는 설정(materialize_skip_indexes_on_insertmaterialize_statistics_on_insert)을 추가했습니다. #64391 (Anton Popov).
  • 할당된 메모리 크기를 기반으로 row group 크기를 계산하여 단일 스레드 모드에서 Parquet writer의 최대 메모리 사용량을 줄였습니다. #64424 (LiuNeng).
  • 희소 컬럼의 이터레이터를 개선하여 size 호출 횟수를 줄입니다. #64497 (Jiebin Sun).
  • 백업 시 Azure Blob Storage에 서버 측 복사를 사용하도록 조건을 수정했습니다. #64518 (SmitaRKulkarni).
  • skip 인덱스 개수가 많은 테이블에서 수직 병합의 메모리 사용량을 최적화했습니다. #64580 (Anton Popov).

개선 사항

  • 시스템 테이블에 대해 SHOW CREATE TABLE을 실행하면 이제 각 테이블이 왜 필요한지 설명하는, 매우 유용한 고유 주석이 함께 표시됩니다. #63788 (Nikita Mikhaylov).
  • round(), roundBankers(), floor(), ceil(), trunc() 함수의 두 번째 인수(스케일)는 이제 상수가 아닌 값(non-const)으로 지정할 수 있습니다. #64798 (Mikhail Gorshkov).
  • 새 디스크를 추가할 때 Distributed 테이블의 스토리지 정책(storage policy)이 자동으로 다시 로드되도록 했습니다. #58285 (Duc Canh Le).
  • 부하로 포화된 서비스에서 스레드를 스케줄링할 때 MergeTree 인덱스 분석 중 발생할 수 있는 잠재적인 데드락을 방지합니다. #59427 (Sean Haynes).
  • S3 프록시 지원 및 터널링과 관련된 몇 가지 사소한 엣지 케이스를 수정했습니다. #63427 (Arthur Passos).
  • io_uring 재제출 작업의 가시성을 개선합니다. 프로파일링 이벤트 IOUringSQEsResubmits의 이름을 IOUringSQEsResubmitsAsync으로 변경하고, 새로운 이벤트 IOUringSQEsResubmitsSync를 추가합니다. #63699 (Tomer Shafir).
  • 메타데이터 스토리지 디스크의 여유 공간을 유지하기 위한 새로운 설정인 metadata_keep_free_space_bytes가 추가되었습니다. #64128 (MikhailBurdukov).
  • plain_rewritable 메타데이터 스토리지가 생성하고 제거한 디렉터리 수와 로컬-원격 인메모리 맵(맵)의 엔트리 수를 추적하기 위한 메트릭을 추가합니다. #64175 (Julia Kartseva).
  • 이제 쿼리 캐시는 서로 다른 설정을 가진 동일한 쿼리를 서로 다른 쿼리로 간주합니다. 이를 통해 limit 또는 additional_table_filters와 같은 서로 다른 설정이 쿼리 결과에 영향을 미치는 경우에도 동작의 안정성이 향상됩니다. #64205 (Robert Schulze).
  • 객체 스토리지에서 비표준 오류 코드 QpsLimitExceeded를 재시도 가능한 오류로 처리하도록 지원합니다. #64225 (Sema Checherinda).
  • 해당 테이블의 ZooKeeper 경로가 이미 존재하는 경우 MergeTree 테이블을 복제된 테이블(Replicated Table)로 변환할 수 없도록 했습니다. #64244 (Kirill).
  • 평균 출력 블록 크기(바이트 단위)를 제어하기 위한 새로운 설정 input_format_parquet_prefer_block_bytes를 추가하고, input_format_parquet_max_block_size의 기본값을 65409로 변경했습니다. #64427 (LiuNeng).
  • no_proxy 환경 변수와 ClickHouse 프록시 구성에 지정된 호스트는 프록시를 우회할 수 있도록 허용합니다. #63314 (Arthur Passos).
  • Keeper가 전역 스레드 풀에서 항상 충분한 개수의 스레드로 시작되도록 했습니다. #64444 (Duc Canh Le).
  • 사용자 config에 정의된 설정은 객체 스토리지를 사용하는 MergeTree 테이블의 머지 및 뮤테이션에 영향을 미치지 않습니다. #64456 (alesapin).
  • 객체 스토리지에서 비표준 오류 코드 TotalQpsLimitExceeded를 재시도 가능한 오류로 지원합니다. #64520 (Sema Checherinda).
  • 오픈 소스 및 ClickHouse Cloud 버전 모두에서 고급 대시보드에 '최대 동시 네트워크 연결 수' 차트를 추가했습니다. #64610 (Thom O'Connor).
  • zeros_mtgenerateRandom의 진행 상황 보고를 개선합니다. #64804 (Raúl Marín).
  • 샘플링이 현재 활성화되어 있는지를 표시하기 위해 비동기 메트릭 jemalloc.profile.active를 추가했습니다. 이는 prof.active에 더해지는 추가 활성화 메커니즘으로, 호출 스레드가 샘플링을 수행하려면 둘 다 활성화되어 있어야 합니다. #64842 (Unalian).
  • allow_experimental_join_condition에 대한 중요 표시를 제거합니다. 이 표시는 혼합 버전 클러스터에서 분산 쿼리가 정상적으로 실행되는 것을 방해했을 수 있습니다. #65008 (Nikita Mikhaylov).
  • 서버 비동기 메트릭 DiskGetObjectThrottler*DiskGetObjectThrottler*를 추가하여, 디스크 설정 s3_max_get_rpss3_max_put_rps로 정의된 초당 요청 수 제한(rate limit)과 디스크에서 제한에 걸리지 않고 전송할 수 있는 현재 가능한 요청 수를 반영합니다. 이 메트릭은 제한이 설정된 각 디스크에 대해 정의됩니다. #65050 (Sergei Trifonov).
  • Poco::ThreadPool에 대한 전역 trace collector를 초기화합니다 (Keeper 등에서 필요). #65239 (Kseniia Sumarokova).
  • bcrypt_hash로 USER를 생성할 때 검증을 추가했습니다. #65242 (Raúl Marín).
  • PREWHERE 실행 중 및 실행 후에 읽은 행 수에 대한 프로파일 이벤트를 추가합니다. #64198 (Nikita Taranov).
  • 병렬 레플리카 사용 시 EXPLAIN PLAN에 쿼리를 출력합니다. #64298 (vdimir).
  • allow_deprecated_functions 설정을 allow_deprecated_error_prone_window_functions로 이름을 변경합니다. #64358 (Raúl Marín).
  • file table function에서 파일 디스크립터에도 max_read_buffer_size 설정을 준수하도록 했습니다. #64532 (Azat Khuzhin).
  • 지원되지 않는 스토리지에서는 materialized view에도 트랜잭션을 비활성화했습니다. #64918 (alesapin).
  • 이전 분석기에서 QUALIFY 절 사용을 금지했습니다. 이전 분석기는 QUALIFY를 무시했기 때문에 뮤테이션에서 예기치 않은 데이터 삭제가 발생할 수 있었습니다. #65356 (Dmitry Novik).

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

  • Apache ORC 라이브러리의 버그가 수정되었습니다. 모든 플랫폼에서 부호 없는 타입을 기록할 때와 ARM에서 Int8 타입을 기록할 때 ORC 통계 계산이 잘못되던 문제를 수정했습니다. #64563 (Michael Kolupaev).
  • CSV 형식에서 Tuple을 처리하고 해석하는 방식이 이전 ClickHouse 동작과 동일하도록 되돌렸습니다. 이 변경으로 https://github.com/ClickHouse/ClickHouse/pull/60994 가 사실상 되돌려지며, 다음 몇 가지 설정에서만 사용 가능합니다: output_format_csv_serialize_tuple_into_separate_columns, input_format_csv_deserialize_separate_columns_into_tuple, input_format_csv_try_infer_strings_from_quoted_tuples. #65170 (Nikita Mikhaylov).
  • 특정 상황에서 사용자가 필요한 권한 부여 없이 default 데이터베이스에서 권한을 상승시킬 수 있었던 권한 오류를 수정합니다. #64769 (pufit).
  • UniqInjectiveFunctionsEliminationPass와 uniqCombined에서 발생한 크래시를 수정했습니다. #65188 (Raúl Marín).
  • 세션 종료 시 다이제스트 불일치가 발생하는 ClickHouse Keeper의 버그를 수정합니다. #65198 (Aleksei Filatov).
  • Distinct 조합자에 대해 올바른 메모리 정렬을 사용하도록 했습니다. 이전에는 이 조합자를 사용할 때 잘못된 메모리 할당으로 인해 충돌이 발생할 수 있었습니다. #65379 (Antonio Andelic).
  • DISTINCT와 윈도 함수(window function)를 함께 사용할 때 발생하던 비정상 종료 문제를 수정했습니다. #64767 (Igor Nikonov).
  • 'set' skip 인덱스가 IN 및 indexHint()와 함께 작동하지 않던 문제를 수정했습니다. #62083 (Michael Kolupaev).
  • 매개변수화된 VIEW 값 설정 시 FUNCTION 실행을 지원합니다. #63502 (SmitaRKulkarni).
  • Parquet 메모리 사용량 추적을 수정했습니다. #63584 (Michael Kolupaev).
  • Tuple(Map(LowCardinality(String), String), ...) 타입 컬럼을 읽는 동작을 수정했습니다. #63956 (Anton Popov).
  • 서로 다른 타입(식과 FUNCTION)으로 된 순환 별칭에서 발생하는 Cyclic aliases 오류를 수정합니다. #63993 (Nikolai Kochetov).
  • 이 수정으로 쿼리 파이프라인에서 각 개별 VIEW에 대해 올바른 정의자(definer)가 지정된, 적절히 재정의된 컨텍스트가 사용됩니다. #64079 (pufit).
  • 분석기 수정: INTERPOLATE 사용 시 발생하던 "Not found column" 오류를 수정했습니다. #64096 (Yakov Olkhovskiy).
  • 파일이 포함된 디스크와 다른 자격 증명을 사용하는 S3 버킷으로 백업을 생성할 때 발생하던 문제를 수정했습니다. #64153 (Antonio Andelic).
  • 이제 쿼리 캐시는 서로 다른 데이터베이스에 대해 실행된 동일한 쿼리라도 서로 다른 것으로 간주합니다. 이전 동작은 테이블에서 읽기 권한이 없을 때 이를 우회하는 데 악용될 수 있었습니다. #64199 (Robert Schulze).
  • StatusFile에서 ~WriteBufferFromFileDescriptor 실행 중 처리되지 않은 예외로 인해 중단(abort)이 발생할 수 있는 문제를 수정합니다. #64206 (Kruglov Pavel).
  • ARRAY JOIN이 포함된 분산 쿼리에서 발생하는 duplicate alias 오류를 수정합니다. #64226 (Nikolai Kochetov).
  • 문자열을 정수로 accurateCast할 때 발생하던 예기치 않은 동작을 수정합니다. #64255 (wudidapaopao).
  • 상호 배타적인 원자를 포함하는 OR 그룹이 있는 경우를 위해 CNF 단순화 로직을 수정했습니다. #64256 (Eduard Karacharov).
  • Query Tree 크기 검증을 수정했습니다. #64377 (Dmitry Novik).
  • PREWHERE를 사용하는 Buffer 테이블에서 발생하는 Logical error: Bad cast 오류를 수정했습니다. #64388 (Nikolai Kochetov).
  • blob_storage_log가 객체 스토리지에 저장되는 경우 재귀적 로깅이 발생하지 않도록 합니다. #64393 (vdimir).
  • 기본값 표현식을 사용하는 테이블에 대한 CREATE TABLE AS 쿼리를 수정했습니다. #64455 (Anton Popov).
  • 널 허용 키를 가진 테이블에서 ORDER BY ... NULLS FIRST / LAST를 사용할 때 optimize_read_in_order의 동작을 수정했습니다. #64483 (Eduard Karacharov).
  • GLOBAL IN에 대한 별칭을 사용하는 쿼리에서 발생하던 Expression nodes list expected 1 projection namesUnknown expression or identifier 오류를 수정합니다. #64517 (Nikolai Kochetov).
  • GROUP BY 키에 상수 CTE가 포함된 분산 쿼리에서 발생하던 Cannot find column 오류를 수정했습니다. #64519 (Nikolai Kochetov).
  • 아직 복원되지 않은 definer가 지정된 MV를 생성해 백업에서의 복원이 차단될 때 발생하던 crash loop 문제를 수정했습니다. #64595 (pufit).
  • 포매터가 생성한 문자열의 길이가 홀수이고 마지막 문자가 0인 경우 함수 formatDateTimeInJodaSyntax의 출력을 수정했습니다. 예를 들어, SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D')는 이제 이전의 15 대신 올바르게 150을 반환합니다. #64614 (LiuNeng).
  • -If 결합자가 이미 사용된 경우 집계를 재작성하지 않습니다. #64638 (Dmitry Novik).
  • 작은 버퍼인 경우(예: --max_read_buffer_size 1) float 형에 대한 타입 추론을 수정했습니다. #64641 (Azat Khuzhin).
  • 표현식이 포함된 TTL이 동작하지 않을 수 있었던 버그를 수정했습니다. #64694 (alesapin).
  • 새 분석기에서 항상 참인 WHEREPREWHERE 표현식을 제거하는 기능을 수정합니다. #64695 (Nikolai Kochetov).
  • startsWith, endsWith, match, multiSearchAny 결과로 필터링할 때 토큰 기반 텍스트 인덱스(ngrambf, full_text)에 의해 과도한 부분 제거가 발생하던 문제를 수정했습니다. #64720 (Eduard Karacharov).
  • UTF8::computeWidth FUNCTION에서 ANSI CSI 이스케이프 처리와 관련된 잘못된 동작을 수정합니다. #64756 (Shaun Struwig).
  • 서브쿼리 전반에서 ORDER BY / LIMIT BY가 잘못 제거되던 문제를 수정합니다. #64766 (Raúl Marín).
  • 혼합 조인 조건에 포함된 Set에 대한 서브쿼리를 사용하는 실험적 비등가 조인의 동작을 수정했습니다. #64775 (lgbo).
  • plain_rewritable 디스크에서 로컬 캐시가 비정상 종료되던 문제를 수정했습니다. #64778 (Julia Kartseva).
  • Keeper 수정: mntr 명령에서 zk_latest_snapshot_size의 올바른 값을 반환하도록 수정했습니다. #64784 (Antonio Andelic).
  • Nested 컬럼에 대한 ARRAY JOIN이 포함된 분산 쿼리에서 발생하던 Cannot find column 오류를 수정합니다. #64755를 해결합니다. #64801 (Nikolai Kochetov).
  • slru 캐시 정책의 메모리 누수를 수정했습니다. #64803 (Kseniia Sumarokova).
  • S3에서 데이터를 읽는 쿼리, HTTP 프로토콜을 사용하는 쿼리, 비동기 insert 등 여러 종류의 쿼리에서 발생할 수 있던 잘못된 메모리 사용량 추적 문제를 수정했습니다. #64844 (Anton Popov).
  • materialized view가 소스 테이블과 다른 타입의 컬럼을 가질 때, 해당 materialized view에서 PREWHERE를 사용해 읽는 쿼리에서 발생하는 Block structure mismatch 오류를 수정합니다. 관련 이슈 #64611을(를) 해결합니다. #64855 (Nikolai Kochetov).
  • 테이블에 TTL이 있고 서브쿼리와 복제 데이터베이스(replicated database), parallel replicas, analyzer를 함께 사용하는 경우 드물게 발생하던 크래시를 수정했습니다. 매우 드문 경우이지만, TTL을 서브쿼리와 함께 사용하는 것은 권장되지 않습니다. #64858 (alesapin).
  • 대량 삭제 배치를 수행할 때 blob_storage_log에서 Delete 이벤트가 중복으로 기록되던 문제를 수정합니다. #64924 (vdimir).
  • [Zoo]Keeper에서 서버 시작 직후, 설정에 [Zoo]Keeper에서 include한 항목이 있는 경우 발생할 수 있던 Session moved to another server 오류를 수정했습니다. #64986 (Alexander Tokmakov).
  • https://github.com/ClickHouse/ClickHouse/pull/54211에서 파라미터화된 VIEW에 대해 동작하지 않게 된 ALTER MODIFY COMMENT 쿼리를 수정했습니다. #65031 (Nikolay Degterinsky).
  • cluster_secure_connection 파라미터가 활성화되었을 때 DatabaseReplicated에서 host_id를 수정합니다. 이전에는 해당 파라미터가 활성화되어 있어도 DatabaseReplicated에 의해 생성된 클러스터 내 모든 연결이 보안 연결로 설정되지 않았습니다. #65054 (Nikolay Degterinsky).
  • StorageMerge에 대한 PREWHERE 최적화 이후 발생하는 Not-ready Set 오류를 수정했습니다. #65057 (Nikolai Kochetov).
  • File 계열 스토리지에서 finalized 버퍼에 데이터를 기록하지 않도록 했습니다. #65063 (Kruglov Pavel).
  • 순환 별칭으로 인해 쿼리가 무한히 실행될 수 있는 문제를 수정합니다. #64849를 수정합니다. #65081 (Nikolai Kochetov).
  • 새 분석기(new analyzer)에서 INTERPOLATE (alias)를 사용하는 원격 쿼리에 대해 발생하던 Unknown expression identifier 오류를 수정합니다. GitHub 이슈 #64636를 해결합니다. #65090 (Nikolai Kochetov).
  • 집계 연산 밖으로 산술 연산을 이동시키는 최적화를 수정했습니다. 새로운 analyzer에서는 이 최적화가 한 번만 적용되었습니다. #65104 (Dmitry Novik).
  • 새 analyzer에서 집계 함수 이름 재작성 로직을 수정했습니다. #65110 (Dmitry Novik).
  • 클라이언트 소켓에서 요청 본문(일부)을 읽는 동안 수신 타임아웃이 발생했을 때 200 OK 대신 5xx 상태 코드로 응답합니다. #65118 (Julian Maicher).
  • hedged request에서 발생할 수 있는 크래시를 수정했습니다. #65206 (Azat Khuzhin).
  • Hashed 및 Hashed_Array 딕셔너리에서 단락(short-circuit) 평가 시 초기화되지 않은 숫자를 읽어 다양한 오류가 발생할 수 있던 버그를 수정합니다. #65256 (jsc0218).
  • 이 PR은 IN 연산자의 타입 변환 과정에서 상수(IN 연산자의 두 번째 파라미터)의 타입 정보가 항상 유지되도록 합니다. 그렇지 않으면 타입 정보가 손실되어 DateTime에서 Date로의 변환과 같은 일부 변환이 실패할 수 있습니다. 이로써 #64487이 수정됩니다. #65315 (pn).

빌드/테스트/패키징 개선

  • LLVM XRay 지원을 추가합니다. #64592 #64837 (Tomer Shafir).
  • S3/hdfs/azure 스토리지 구현을 IObjectStorage로 동작하는 단일 클래스로 통합합니다. *Cluster, 데이터 레이크 및 Queue 스토리지에도 동일하게 적용합니다. #59767 (Kseniia Sumarokova).
  • data part writer를 리팩터링하여 MergeTreeData 및 DataPart에 대한 의존성을 제거합니다. #63620 (Alexander Gololobov).
  • KeyCondition 및 키 분석을 리팩터링하여 PartitionPruner와 단순 count 최적화를 개선합니다. 이는 #60463와는 분리된 변경입니다. #61459 (Amos Bird).
  • 모든 함수가 올바른 크기의 컬럼으로 호출되는지 검증하기 위한 assertion(어설션)을 도입합니다. #63723 (Raúl Marín).
  • ClickHouse 서버 데몬을 시작하기 위해 rc init 스크립트를 사용할 때 network 서비스가 필수 서비스가 되도록 변경합니다. #60650 (Chun-Sheng, Li).
  • 일부 느린 테스트의 규모를 줄입니다. #64387 #64452 (Raúl Marín).
  • keeper-bench를 사용해 ZooKeeper 로그를 재생합니다. #62481 (Antonio Andelic).

ClickHouse 24.5 릴리스, 2024-05-30. 발표 자료, 동영상

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

  • "inverted indexes"를 덜 기술적이고 더 사용자 친화적인 이름인 "full-text indexes"로 이름을 변경했습니다. 이로 인해 내부 테이블 메타데이터가 변경되며, 기존의 (실험적인) 역인덱스가 존재하는 테이블은 동작에 문제가 발생합니다. 업그레이드 전에 해당 인덱스를 반드시 삭제한 뒤, 업그레이드 후 다시 생성하십시오. #62884 (Robert Schulze).
  • neighbor, runningAccumulate, runningDifferenceStartingWithFirstValue, runningDifference 함수의 사용은 (오류가 발생하기 쉽기 때문에) 더 이상 권장되지 않습니다. 대신 적절한 윈도우 함수를 사용해야 합니다. 이 함수들을 다시 허용하려면 allow_deprecated_error_prone_window_functions = 1로 설정하거나 compatibility = '24.4' 이하로 설정하십시오. #63132 (Nikita Taranov).
  • 컬럼 수가 매우 많고, 많은 데이터베이스나 테이블에 SHOW TABLES 권한이 부여되지 않은 경우에도 system.columns에 대한 쿼리가 더 빠르게 동작합니다. 이전 버전에서는 특정 컬럼에만 SHOW COLUMNS 권한을 부여하고 해당 테이블에 SHOW TABLES 권한을 부여하지 않은 경우에도 system.columns 테이블에 이 컬럼들이 표시되었지만, 새 버전에서는 해당 테이블 전체를 건너뜁니다. 쿼리를 느리게 만들던 "Access granted" 및 "Access denied" 추적 로그 메시지를 제거했습니다. #63439 (Alexey Milovidov).

새 기능

  • application/x-www-form-urlencoded 형식의 단일 레코드를 읽고 쓰기 위한 Form 포맷을 추가합니다. #60199 (Shaun Struwig).
  • CROSS JOIN에서 압축을 사용할 수 있도록 했습니다. #60459 (p1rattttt).
  • 크기가 제한을 초과하는 경우 임시 파일을 사용하여 CROSS JOIN을 수행할 수 있는 기능이 추가되었습니다. #63432 (p1rattttt).
  • 좌측과 우측 테이블의 컬럼을 모두 참조하는 부등호 조건(예: t1.y < t2.y)을 사용하는 조인을 지원합니다. 이 기능을 사용하려면 SET allow_experimental_join_condition = 1로 설정하십시오. #60920 (lgbo).
  • 맵은 이제 Float32, Float64, Array(T), Map(K, V)Tuple(T1, T2, ...)를 키로 사용할 수 있습니다. #54537 이슈를 해결합니다. #59318 (李扬).
  • RocksDB의 내장 memtable에 의존하는 대신 SST 파일을 생성해 수집하는 방식으로 EmbeddedRocksDB에 대량 로딩을 도입합니다. 이는 특히 StorageEmbeddedRocksDB 테이블에 대한 장시간 실행되는 insert 쿼리에서 데이터 import 속도를 높이는 데 도움이 됩니다. 또한 EmbeddedRocksDB 테이블 설정을 도입합니다. #59163 #63324 (Duc Canh Le).
  • input_format_tsv_crlf_end_of_line 설정을 사용하여 TSV 형식에서 CRLF를 파싱할 수 있게 되었습니다. #56257 이슈를 해결합니다. #59747 (Shaun Struwig).
  • 누락된 필드에 대해 NULL 값을 강제하는 새로운 설정 input_format_force_null_for_omitted_fields가 추가되었습니다. #60887 (Constantine Peresypkin).
  • 이전에 S3 스토리지와 S3 테이블 함수는 tarball, zip, 7z 같은 아카이브 컨테이너 파일에서 SELECT하는 기능을 지원하지 않았습니다. 이제는 S3에 있는 아카이브 내부의 파일들을 순회(iterate)하며 조회할 수 있습니다. #62259 (Daniil Ivanik).
  • 조건부 함수 clamp를 지원합니다. #62377 (skyoct).
  • NPy 출력 포맷을 추가했습니다. #62430 (豪肥肥).
  • Raw 포맷이 TSVRaw의 동의어로 추가되었습니다. #63394 (Unalian).
  • 버전 7 UUID(타임스탬프 기반 UUID로 무작위 컴포넌트를 포함)를 생성하는 새로운 SQL 함수 generateUUIDv7가 추가되었습니다. 또한 UUID에서 바이트를 추출하는 새로운 함수 UUIDToNum과, 버전 7 UUID에서 타임스탬프 컴포넌트를 추출하는 새로운 함수 UUIDv7ToDateTime도 추가되었습니다. #62852 (Alexey Petrunyaka).
  • Linux 및 MacOS에서 프로그램의 stdout이 압축 확장자를 가진 파일로 리디렉션된 경우, 아무 작업도 하지 않는 대신 해당 확장자에 맞는 압축 방식을 사용하여 출력합니다( INTO OUTFILE와 유사하게 동작). #63662 (v01dXYZ).
  • 연결된 테이블 개수가 많을 때 표시되는 경고 메시지를 테이블, VIEW, 딕셔너리를 구분해 표시하도록 변경했습니다. #64180 (Francisco J. Jurado Moreno).
  • ClickHouse 서버의 azureBlobStorage 함수에서 Azure Blob Storage에 대한 인증에 Azure Workload identity를 사용할 수 있도록 지원합니다. 설정에서 use_workload_identity 매개변수를 지정하면, 인증에 workload identity가 사용됩니다. #57881 (Vinay Suryadevara).
  • system.parts_columns 테이블에 TTL 정보를 추가했습니다. #63200 (litlig).

실험적 기능

  • 사전에 모든 타입을 알지 못해도 그 안에 어떤 타입의 값이든 저장할 수 있는 Dynamic 데이터 타입을 구현했습니다. Dynamic 타입은 allow_experimental_dynamic_type 설정을 활성화하면 사용할 수 있습니다. 참고: #54864. #63058 (Kruglov Pavel).
  • MySQL에 대한 연결 없이도 MaterializedMySQL 데이터베이스를 생성할 수 있도록 했습니다. #63397 (Kirill).
  • Replicated 데이터베이스의 레플리카에서 일부 DDL 작업이 동일한 오류로 연속 max_retries_before_automatic_recovery(기본값 100)회 이상 실패하는 경우, 해당 레플리카를 자동으로 손실된 것으로 간주하고 복구를 시작하도록 했습니다. 또한 엔트리 실행 초기 단계에서 예외가 발생할 때 DDL 엔트리를 건너뛰게 될 수 있었던 버그를 수정했습니다. #63549 (Alexander Tokmakov).
  • StorageS3Queue에 대해 실패한 파일도 s3queue_tracked_file_ttl_secs3queue_traked_files_limit에 포함되어 집계되도록 했습니다. #63638 (Kseniia Sumarokova).

성능 개선

  • 파일시스템 캐시에서의 경합을 줄였습니다(4부). 백그라운드에서 추가 제거(eviction) 작업을 수행하여 파일시스템 캐시가 한계까지 채워지지 않도록 합니다(keep_free_space_size(elements)_ratio로 제어). 이를 통해 쿼리의 공간 예약(tryReserve 메서드)으로 인한 압박을 줄일 수 있습니다. 또한 가능한 한 lock-free 방식으로 수행하여 일반적인 캐시 사용을 차단하지 않도록 했습니다. #61250 (Kseniia Sumarokova).
  • INSERT 수행 시 새로 생성된 projection 블록의 머지를 건너뜁니다. #59405 (Nikita Taranov).
  • 입력 문자열이 모두 ASCII 문자이면 문자열 함수 ...UTF8을 ASCII 기반(asciily)으로 처리합니다. https://github.com/apache/doris/pull/29799 에서 영감을 받았습니다. 전체적으로 1.07배~1.62배 속도가 향상되었습니다. 일부 경우에는 피크 메모리 사용량도 감소했습니다. #61632 (李扬).
  • StorageS3에서 selection ({}) glob 패턴의 성능을 개선했습니다. #62120 (Andrey Zvonov).
  • HostResolver가 각 IP 주소를 여러 번 보유하던 동작을 개선했습니다. 원격 호스트에 여러 개의 IP가 있고, 어떤 이유(예: 방화벽 규칙)로 일부 IP에는 접근이 허용되고 다른 IP에는 금지된 경우, 금지된 IP 중 첫 번째 레코드만 실패로 표시되고 각 시도 시 이 IP들이 다시 선택될 가능성이 있었습니다(그리고 다시 실패). 이를 수정하더라도 120초마다 DNS 캐시가 삭제되어 IP가 다시 선택될 수 있었습니다. #62652 (Anton Ivashkin).
  • 새로운 설정 prefer_merge_sort_block_bytes를 추가하여 메모리 사용량을 제어하고, 컬럼이 많을 때 머지 중 정렬 속도를 최대 2배까지 향상시켰습니다. #62904 (LiuNeng).
  • clickhouse-local이 더 빠르게 시작됩니다. 이전 버전에서는 임시 디렉터리를 삭제하지 않는 문제가 있었는데, 이제는 삭제합니다. 이로써 #62941를 해결했습니다. #63074 (Alexey Milovidov).
  • 새로운 analyzer에 대한 마이크로 최적화를 적용했습니다. #63429 (Raúl Marín).
  • DateTimeDateTime64와 비교할 때 인덱스 분석이 동작하도록 했습니다. #63441를 해결합니다. #63443 #63532 (Alexey Milovidov).
  • set 타입 인덱스에서 불필요한 데이터를 제거하여 약 1.5배 정도 속도를 향상시켰습니다. #64098 (Alexey Milovidov).
  • 파일시스템 캐시에 쓸 때 데이터 복사를 제거했습니다. #63401 (Kseniia Sumarokova).
  • Azure Blob Storage를 사용하는 백업에서 multicopy를 사용하도록 했습니다. #64116 (alesapin).
  • 서로 다른 컨테이너 간에도 Azure에서 native copy를 사용할 수 있도록 허용했습니다. #64154 (alesapin).
  • 마침내 Azure에 대해 native copy를 활성화했습니다. #64182 (alesapin).

개선 사항

  • 위치 인수로 전달된 쿼리 또는 쿼리 파일과 함께 clickhouse-local 및 그 단축 명령어인 clickhousech를 사용할 수 있도록 합니다. 예: ch "SELECT 1", ch --param_test Hello "SELECT {test:String}", ch query.sql. 이 변경으로 #62361가 해결됩니다. #63081 (Alexey Milovidov).
  • 로컬 및 Azure(azure_blob_storage) 객체 스토리지에서 plain_rewritable 메타데이터를 활성화합니다. #63365 (Julia Kartseva).
  • 영어 스타일의 유니코드 따옴표(예: “Hello”, 'world')를 지원합니다. 일반적으로는 다소 애매할 수 있으나, Google Docs와 같은 워드 프로세서에서 쿼리를 입력할 때에는 유용합니다. 이 변경으로 #58634가 해결되었습니다. #63381 (Alexey Milovidov).
  • INSERT 쿼리에서 컬럼 목록의 마지막에 오는 쉼표(후행 쉼표)를 허용합니다. 예를 들어 INSERT INTO test (a, b, c, ) VALUES .... #63803 (Alexey Milovidov).
  • Regexp 포맷의 예외 메시지를 개선했습니다. #63804 (Alexey Milovidov).
  • Values 형식에서 후행 쉼표를 허용합니다. 예를 들어 다음 쿼리가 허용됩니다: INSERT INTO test (a, b, c) VALUES (4, 5, 6,);. #63810 (Alexey Milovidov).
  • 손상된 메시지에 대해 RabbitMQ가 nack를 보내도록 했습니다. #45350을(를) 해결합니다. #60312 (Kseniia Sumarokova).
  • 디버그 정보를 해석하는 동안(예: sampling 쿼리 프로파일러 사용 시) 비동기 스택 언와인딩에서 발생하던 크래시를 수정했습니다. 이를 통해 #60460 이슈가 해결되었습니다. #60468 (Alexey Milovidov).
  • 디스크인 경우와 스토리지인 경우를 구분해 S3 오류 'no key'에 대해 서로 다른 메시지를 제공합니다. #61108 (Sema Checherinda).
  • 진행률 표시줄이 system.zeros, system.zeros_mt 테이블에서 LIMIT를 사용하는 단순 쿼리에 대해 동작합니다 (system.numberssystem.numbers_mt에서는 이미 동작함), 그리고 generateRandom 테이블 함수에서도 동작합니다. 추가로, 전체 레코드 수가 max_rows_to_read 제한보다 클 경우 예외를 더 이른 시점에 발생시킵니다. 이를 통해 #58183이 해결되었습니다. #61823 (Alexey Milovidov).
  • YAML 설정에서 "Merge Key" 지원 추가(이는 YAML의 다소 특이한 기능이니, 신경 쓰지 않으셔도 됩니다). #62685 (Azat Khuzhin).
  • Replicated 소스에서 비결정적 함수(non-deterministic function)를 사용할 때 표시되는 오류 메시지를 개선했습니다. #62896 (Grégoire Pineau).
  • remote에서 Distributed over Distributed를 사용할 때 interserver secret을 수정합니다. #63013 (Azat Khuzhin).
  • YAML 파일에서 include_from을 지원합니다. 하지만 config.d를 사용하는 것이 더 권장됩니다. #63106 (Eduard Karacharov).
  • skim 제안에서 항목을 선택한 후에도 터미널의 이전 출력이 유지되도록 했습니다. #63261 (FlameFactory).
  • 이제 필드의 너비(Pretty 포맷 또는 visibleWidth 함수에서)가 ANSI 이스케이프 시퀀스를 올바르게 무시합니다. #63270 (Shaun Struwig).
  • 필요한 경우 NUMBER_OF_ARGUMENTS_DOESNT_MATCH 오류 코드 사용을 더 정확한 오류 코드로 대체합니다. #63406 (Yohann Jardin).
  • 이제 clickhouse-client에서 명령줄 제안 기능을 위한 쿼리에 대해 os_userclient_hostname이 올바르게 설정됩니다. 이로써 #63430이 해결되었습니다. #63433 (Alexey Milovidov).
  • max_block_size가 0인 경우 기본값으로 자동으로 수정되도록 했습니다. #63587 (Antonio Andelic).
  • 바이너리 변경을 감지했을 때 자동으로 이름을 변경할 수 있도록 trace_logbuild_id ALIAS 컬럼을 추가합니다. 이는 #52086 문제를 해결하기 위한 것입니다. #63656 (Zimu Li).
  • 객체 스토리지 디스크에서 truncate 연산을 사용할 수 있도록 지원합니다. #63693 (MikhailBurdukov).
  • 키워드 목록 불러오기가 이제 서버 리비전에 의존하며, 구버전 ClickHouse 서버에서는 비활성화됩니다. CC @azat. #63786 (Nikita Mikhaylov).
  • ClickHouse 디스크는 실제 메타데이터 형식 버전을 확인하기 위해 서버 설정을 읽어야 합니다. #63831 (Sema Checherinda).
  • stdout가 TTY가 아닐 때 Pretty 포맷 제한(output_format_pretty_max_rows/output_format_pretty_max_value_width)을 해제합니다. #63942 (Azat Khuzhin).
  • 이제 ClickHouse를 AWS Lambda 내에서 사용할 때 예외 처리가 제대로 동작합니다. 작성자: Alexey Coolnev. #64014 (Alexey Milovidov).
  • HTTP를 통해 전달된 잘못된 압축 데이터에 대해 CORRUPTED_DATA 대신 CANNOT_DECOMPRESS 예외를 던지도록 했습니다. #64036 (vdimir).
  • Pretty 포맷에서 단일 큰 숫자에 대한 힌트가 이제 널 허용 및 LowCardinality에서도 동작합니다. #61993를 해결합니다. #64084 (Alexey Milovidov).
  • 인덱스를 사용한 파트 필터링과 관련해 metrics, logs, thread 이름을 추가했습니다. #64130 (Alexey Milovidov).
  • ATTACH 시에는 allow_suspicious_primary_key를 무시하고 ALTER 시에는 이를 검증하도록 했습니다. #64202 (Azat Khuzhin).

빌드/테스트/패키징 개선

버그 수정

  • 기본적으로 enable_vertical_final 설정을 비활성화했습니다. 이 기능에는 버그가 있으므로 사용하면 안 됩니다: #64543. #64544 (Alexander Tokmakov).
  • 여러 세그먼트를 사용하는 경우 백업이 생성되지 않던 문제를 수정 #57684 (Vitaly Baranov).
  • CREATE 쿼리의 컬럼 목록에 지정된 프로젝션/인덱스/기본 키가 MV의 내부 테이블로 전달되지 않던 문제를 수정했습니다. #59183 (Azat Khuzhin).
  • boundRatio의 잘못된 병합 문제를 수정합니다 #60532 (Tao Wang).
  • const low-cardinality 컬럼에서 일부 함수를 호출할 때 발생하던 크래시를 수정했습니다 #61966 (Michael Kolupaev).
  • adaptive granularity를 사용하지 않는 테이블에서 FINAL을 사용한 쿼리가 잘못된 결과를 반환하던 문제를 수정했습니다 #62432 (Duc Canh Le).
  • 메모리 컨트롤러용 cgroups v2 지원 감지 로직을 개선합니다 #62903 (Robert Schulze).
  • 클라이언트에서 외부 테이블을 연속으로 사용할 때의 동작을 수정합니다 #62964 (Azat Khuzhin).
  • untuple 및 해결되지 않은 lambda 사용 시 발생하던 크래시를 수정 #63131 (Raúl Marín).
  • 서버가 너무 일찍 연결을 수신(listen)하기 시작하는 문제를 수정합니다 #63181 (alesapin).
  • DROP PART 명령 이후 재시작 시 서로 겹치는 파트를 수정합니다 #63202 (Han Fei).
  • 시작 시 SQL 보안 기본값이 올바르게 로드되도록 수정했습니다 #63209 (pufit).
  • JOIN filter push down 및 filter join 관련 수정 #63234 (Maksim Kita).
  • AzureObjectStorage::listObjects에서 발생하던 무한 루프를 수정했습니다 #63257 (Julia Kartseva).
  • CROSS JOIN에서 join_algorithm 설정이 무시되던 문제를 수정 #63273 (vdimir).
  • WriteBufferToFileSegment 및 StatusFile의 finalize 함수를 수정했습니다 #63346 (vdimir).
  • 드문 경우에 ALTER 이후 SELECT 쿼리를 수행할 때 발생하던 논리적 오류를 수정합니다 #63353 (alesapin).
  • session_timezone 사용 시 X-ClickHouse-Timezone 헤더 동작을 수정합니다 #63377 (Andrey Zvonov).
  • WITH ROLLUP 그룹화와 LowCardinality 타입을 함께 사용할 때 발생하던 디버그 어서션(assert) 오류를 수정합니다. #63398 (Raúl Marín).
  • group_by_use_nulls에 대한 소규모 수정 #63405 (vdimir).
  • 테이블 메타데이터에서 프로젝션이 제거되었지만 파트에는 여전히 프로젝션이 남아 있는 경우 프로젝션 파트의 백업/복원 기능을 수정합니다 #63426 (Kseniia Sumarokova).
  • MySQL 딕셔너리 소스 수정 #63481 (vdimir).
  • 데이터가 없는 경우 AsyncInsertFlush에서 QueryFinish를 삽입하도록 수정했습니다 #63483 (Raúl Marín).
  • 수정: system.query_log에서 used_dictionaries가 비어 있던 문제 #63487 (Eduard Karacharov).
  • MergeTreePrefetchedReadPool을 더 안전하게 개선 #63513 (Antonio Andelic).
  • sentry가 활성화된 상태에서 종료 시 발생하던 크래시를 수정합니다 (sentry보다 먼저 openssl이 해제되던 문제로 인함) #63548 (Azat Khuzhin).
  • Keyed hashing에서 Array 및 맵 지원 문제를 수정 #63628 (Salvatore Mesoraca).
  • Parquet 및 아마도 StorageMerge에서의 필터 푸시다운을 수정했습니다. #63642 (Michael Kolupaev).
  • ZooKeeper 경로가 이미 존재하는 경우 Replicated 테이블로 변환되지 않도록 합니다 #63670 (Kirill).
  • Analyzer: 뷰에서 필요한 컬럼만 읽도록 수정함 #63688 (Maksim Kita).
  • Analyzer: WINDOW 재정의 금지 #63694 (Dmitry Novik).
  • experimental Replicated database에서 flatten_nested가 제대로 동작하지 않는 문제가 있었습니다. #63695 (Nikolai Kochetov).
  • #63653#63722을(를) 수정했습니다(Nikolai Kochetov).
  • Array(Nothing)을 Map(Nothing, Nothing)으로 캐스트할 수 있도록 허용합니다. #63753 (Nikolai Kochetov).
  • partial_merge 조인에서 발생하던 ILLEGAL_COLUMN 오류를 수정합니다 #63755 (vdimir).
  • 수정: 윈도 함수에서 불필요한 distinct 절 제거 #63776 (Igor Nikonov).
  • SYSTEM UNLOAD PRIMARY KEY 실행 시 발생할 수 있는 크래시를 수정합니다. #63778 (Raúl Marín).
  • 중복된 순환 별칭이 있는 쿼리를 수정합니다. #63791 (Nikolai Kochetov).
  • TokenIterator가 원래 의도한 대로 lazy하게 동작하도록 수정했습니다 #63801 (Alexey Milovidov).
  • S3 URI용 endpoint_subpath 설정을 추가합니다 #63806 (Julia Kartseva).
  • ParallelReadBuffer에서 발생할 수 있는 교착 상태를 수정했습니다. #63814 (Antonio Andelic).
  • JOIN 필터 푸시다운에서 동등한 컬럼 처리 수정 #63819 (Maksim Kita).
  • Lazy 데이터베이스에서 DROP을 수행한 후 모든 디스크의 데이터를 제거하도록 수정했습니다. #63848 (MikhailBurdukov).
  • 병렬 레플리카 및 새로운 analyzer 사용 시 MV에서 데이터를 읽을 때 잘못된 결과가 반환되던 문제를 수정합니다 #63861 (Nikita Taranov).
  • keeper-client의 find_super_nodesfind_big_family 명령에 대한 수정 #63862 (Alexander Gololobov).
  • 람다 실행 이름을 업데이트합니다 #63864 (Nikolai Kochetov).
  • CPU/Real 프로파일러로 인해 발생하는 SIGSEGV를 수정함 #63865 (Azat Khuzhin).
  • EXPLAIN CURRENT TRANSACTION 쿼리를 수정했습니다. #63926 (Anton Popov).
  • Analyzer 수정: 끝없이 이어지는 재귀 문제(「there's turtles all the way down...」)를 수정했습니다. #63930 (Yakov Olkhovskiy).
  • plain_rewritable 디스크에서 특정 ALTER TABLE 명령을 허용하도록 했습니다 #63933 (Julia Kartseva).
  • 분산 쿼리에서 재귀 CTE 관련 수정 #63939 (Maksim Kita).
  • Analyzer: COLUMNS 처리 수정 #63962 (Dmitry Novik).
  • analyzer에서 LIMIT BY와 skip_unused_shards를 지원하도록 수정했습니다 #63983 (Nikolai Kochetov).
  • 실험적 Kusto 관련 일부 임시 코드 정리 #63992 (Yong Wang).
  • 신뢰할 수 없는 바이너리 입력을 보다 안전한 방식으로 역직렬화하도록 개선했습니다 #64024 (Robert Schulze).
  • MergeTree 패밀리가 아닌 테이블을 대상으로 하는 분산 테이블에서 final 설정이 1인 쿼리의 쿼리 분석을 수정합니다. #64037 (Nikolai Kochetov).
  • recoverLostReplica에 누락되어 있던 설정을 추가합니다 #64040 (Raúl Marín).
  • analyzer 기반 SQL 보안 액세스 검사를 수정합니다 #64079 (pufit).
  • 애널라이저를 수정하여 DAG에서 interpolate expression만 사용되도록 했습니다. #64096 (Yakov Olkhovskiy).
  • Azure 백업이 멀티파트 블록을 기록할 때 네이티브가 아닌 copy 경우 max_upload_part_size 대신 1 MiB(읽기 버퍼 크기)를 사용하도록 수정했습니다 #64117 (Kseniia Sumarokova).
  • 백업 복사 중 폴백이 올바르게 동작하도록 수정 #64153 (Antonio Andelic).
  • CREATE TABLE을 materialized view로 사용할 때 LOGICAL_ERROR가 발생하지 않도록 합니다. #64174 (Raúl Marín).
  • 쿼리 캐시(Query Cache): 서로 다른 데이터베이스에 대해 실행된 동일한 쿼리를 서로 다른 것으로 취급하도록 수정 #64199 (Robert Schulze).
  • Keeper에서 text_log을 무시하도록 수정했습니다 #64218 (Antonio Andelic).
  • prewhere가 있는 Buffer 테이블에서 잘못된 형 변환으로 인해 발생하는 논리 오류를 수정합니다. #64388 (Nikolai Kochetov).

ClickHouse 24.4 릴리스, 2024-04-30. 발표 자료, 영상

업그레이드 참고 사항

  • clickhouse-odbc-bridgeclickhouse-library-bridge가 이제 별도의 패키지로 분리되었습니다. 이 변경으로 #61677이(가) 해결되었습니다. #62114 (Alexey Milovidov).
  • 실험적인 레플리카 병렬 읽기를 위한 설정인 max_parallel_replicas 값을 의미가 없는 0으로는 설정할 수 없도록 변경했습니다. #60140를 해결합니다. #61201 (Kruglov Pavel).
  • 사용 중단(deprecated)된 LIVE VIEW 기능의 일부였던 INSERT WATCH 쿼리에 대한 지원을 제거했습니다. #62382 (Alexey Milovidov).
  • optimize_monotonous_functions_in_order_by 설정을 제거했습니다. #63004 (Raúl Marín).
  • Replicated 데이터베이스 엔진에서 실험(experimental) 태그를 제거했습니다. 이제 Beta 단계에 있습니다. #62937 (Justin de Guzman).

새로운 기능

  • 재귀 CTE를 지원합니다. #62074 (Maksim Kita).
  • QUALIFY 절을 지원합니다. #47819를 해결합니다. #62619 (Maksim Kita).
  • 이제 테이블 엔진에 대해 권한을 부여(GRANT)할 수 있으며, 기존 사용자 동작에는 영향을 주지 않습니다. #60117 (jsc0218).
  • INSERT 연산을 지원하고 로컬에 메타데이터를 저장할 필요가 없는, 재기록 가능한 S3 디스크를 추가했습니다. #61116 (Julia Kartseva). 주요 사용 사례는 system 테이블입니다.
  • 클라이언트에서 입력하는 동안의 구문 강조 표시가 이제 구문(syntax) 수준에서 동작합니다(이전에는 lexer 수준에서 동작했습니다). #62123 (Alexey Milovidov).
  • DROP TABLE a, b, c와 같이 여러 테이블을 동시에 삭제하는 것을 지원합니다. #58705 (zhongyuankai).
  • 이제 ALTER MODIFY SETTING을 통해 memory 테이블 설정을 수정할 수 있습니다. 예: ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;. #62039 (zhongyuankai).
  • HTTP 인터페이스에 role 쿼리 매개변수를 추가했습니다. 이는 SET ROLE x와 유사하게 동작하며, SQL 문이 실행되기 전에 role을 적용합니다. HTTP 인터페이스에서는 여러 SQL 문을 허용하지 않으므로 SET ROLE x와 실제 SQL 문을 동시에 전송할 수 없다는 제약을 이 방식으로 우회할 수 있습니다. 예를 들어 ?role=x&role=y와 같이 여러 role을 설정할 수 있으며, 이는 SET ROLE x, y와 동일하게 동작합니다. #62669 (Serge Klochkov).
  • 테이블의 기본 키에 대한 메모리 사용량을 해제하여 줄이기 위해 SYSTEM UNLOAD PRIMARY KEY를 추가했습니다. #62738 (Pablo Marcos).
  • system.text_logvalue1, value2, ..., value10 컬럼을 추가했습니다. 이 컬럼들은 메시지 서식을 지정하는 데 사용된 값을 담고 있습니다. #59619 (Alexey Katsman).
  • INSERT 시에 할당된, 블록 내 원래 행 번호를 저장하는 지속형 가상 컬럼 _block_offset을 추가했습니다. MergeTree 설정 enable_block_offset_column으로 컬럼 _block_offset의 지속성을 활성화할 수 있습니다. 또한, 파트의 최소 블록 번호 또는 뮤테이션(mutation) 버전 중 하나를 포함하는 가상 컬럼 _part_data_version을 추가했습니다. 지속형 가상 컬럼 _block_number는 더 이상 실험적 기능으로 간주되지 않습니다. #60676 (Anton Popov).
  • JSON 입력 포맷에서 잘못된 escape 시퀀스를 그대로 저장할 수 있도록 하는 설정 input_format_json_throw_on_bad_escape_sequence를 추가했습니다. 이 설정을 비활성화하면 잘못된 escape 시퀀스를 JSON 입력 포맷에 그대로 저장할 수 있습니다. #61889 (Kruglov Pavel).

성능 개선

  • 동치 Set을 활용한 JOIN 필터 푸시다운 개선. #61216 (Maksim Kita).
  • JOIN 이후의 조건이 항상 기본값만 걸러내는 경우, OUTER JOIN을 INNER JOIN으로 변환하는 최적화를 수행합니다. 이 최적화는 기본적으로 활성화되어 있는 query_plan_convert_outer_join_to_inner_join 설정으로 제어할 수 있습니다. #62907 (Maksim Kita).
  • AWS S3에 대한 개선 사항입니다. 클라이언트는 서버에 헤더 'Keep-Alive: timeout=X'를 전송해야 합니다. 클라이언트가 해당 헤더가 포함된 서버 응답을 받으면 서버에서 전달한 값을 사용해야 합니다. 또한 클라이언트는 연결 종료 경쟁 상태(connection close race)를 피하기 위해, 거의 만료되기 직전인 연결은 사용하지 않는 것이 좋습니다. #62249 (Sema Checherinda).
  • SELECT 쿼리에서 뮤테이션으로 인한 오버헤드를 줄였습니다(v2). #60856 (Azat Khuzhin).
  • PODArray에서 더 자주 호출되는 함수는 이제 강제로 인라인 처리됩니다. #61144 (李扬).
  • 필요한 컬럼을 모두 읽으면 JSON 파싱 시 객체의 나머지 부분을 건너뛰어 성능을 향상했습니다. #62210 (lgbo).
  • file/s3/hdfs/url/... 테이블 함수에서 파일로부터 수행되는 단순 INSERT SELECT 작업의 성능을 개선합니다. 병렬 파싱에 사용되는 스레드 수를 제어하기 위해 별도의 max_parsing_threads 설정을 추가합니다. #62404 (Kruglov Pavel).
  • 함수 to_utc_timestampfrom_utc_timestamp의 속도가 이제 약 2배 향상되었습니다. #62583 (KevinyhZou).
  • 입력 값 대부분이 파싱 불가능한 값인 경우, parseDateTimeOrNull, parseDateTimeOrZero, parseDateTimeInJodaSyntaxOrNull, parseDateTimeInJodaSyntaxOrZero 함수가 이제 훨씬 더 빠르게(10배~1000배) 동작합니다. #62634 (LiuNeng).
  • system.query_cache에 대한 SELECT 쿼리 실행은 쿼리 캐시에 많은 엔트리(예: 100,000개 초과)가 저장되어 있을 때 이제 눈에 띄게 더 빨라졌습니다. #62671 (Robert Schulze).
  • 파일 시스템 캐시에서의 경합 감소 (파트 3): 공간 예약을 시도할 때 잠금 없이 파일 시스템에서 제거를 수행합니다. #61163 (Kseniia Sumarokova).
  • 파일 시스템 캐시의 동적 크기 조절 속도를 향상했습니다. #61723 (Kseniia Sumarokova).
  • INVALIDATE_QUERY가 있는 딕셔너리 소스는 시작 시 두 번 로드되지 않도록 변경되었습니다. #62050 (vdimir).
  • 기본 키가 포함된 불리언 표현식 뒤에 불필요한 = 1 또는 = 0이 추가되면 기본 인덱스(primary index)가 사용되지 않는 문제를 수정합니다. 예를 들어 SELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1SELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0는 모두 기본 인덱스를 사용할 수 있음에도 전체 테이블 스캔을 수행했습니다. #62142 (josh-hildred).
  • 전체 결과를 하나의 큰 청크에 누적하는 대신 system.remote_data_paths에서 청크 스트림을 반환합니다. 이를 통해 메모리 사용량을 줄이고, 중간 진행 상황을 표시하며, 쿼리를 취소할 수 있습니다. #62613 (Alexander Gololobov).

실험적 기능

  • azure_allow_parallel_part_upload 설정으로 관리되는 Azure Blob Storage에 대해 병렬 쓰기 버퍼를 지원합니다. #62534 (SmitaRKulkarni).
  • Userspace 페이지 캐시가 이제 정적 웹 스토리지(disk(type = web))에서도 동작합니다. 활성화하려면 클라이언트 설정 use_page_cache_for_disks_without_file_cache=1을 사용하십시오. #61911 (Michael Kolupaev).
  • Variant 타입에서 Bool 및 숫자 variant를 의심스러운 것으로 간주하지 않습니다. #61999 (Kruglov Pavel).
  • 파싱을 사용하여 String에서 Variant로의 변환을 개선합니다. #62005 (Kruglov Pavel).
  • JSONExtract 함수에서 Variant를 지원합니다. #62014 (Kruglov Pavel).
  • Variant 타입을 비교 가능하도록 표시하여 primary key에서 사용할 수 있게 합니다. #62693 (Kruglov Pavel).

개선 사항

  • 편의상 SELECT * FROM numbers()는 제한 없이 동작하는 SELECT * FROM system.numbers와 동일하게 동작합니다. #61969 (YenchangChan).
  • Kafka 설정에서 consumer/producer 태그를 별도로 도입했습니다. 이를 통해 consumer 속성이 producer 인스턴스에, 또는 그 반대로 지정되었을 때 librdkafka(버그가 매우 많아 품질이 좋지 않은 C 라이브러리)에서 발생하던 경고 메시지를 방지합니다(예: Configuration property session.timeout.ms is a consumer property and will be ignored by this producer instance). 관련 이슈: #58983. #58956 (Aleksandr Musorin).
  • 이제 date_diffage 함수는 결과를 마이크로초 정밀도 대신 나노초 정밀도로 계산합니다. 또한 unit 매개변수에 사용할 수 있는 값으로 nanosecond(또는 nanoseconds, ns)를 제공합니다. #61409 (Austin Kothig).
  • date_trunc에 나노초, 마이크로초, 밀리초 단위 지원을 추가했습니다. #62335 (Misz606).
  • 인증서가 다시 로드될 때 인증서 체인도 함께 다시 로드되도록 했습니다. #61671 (Pervakov Grigorii).
  • 레플리카 경로에 활성 레플리카가 있는 경우 테이블을 ATTACH하지 못하도록 하여 오류 #60432가 발생하지 않도록 했습니다. #61876 (Arthur Passos).
  • clickhouse-local에서 input 지원을 구현했습니다. #61923 (Azat Khuzhin).
  • strictness가 ANYJoin table engine은 다시 로드된 후에도 결과가 일관되게 유지됩니다. 동일한 키를 가진 여러 행이 삽입되는 경우 첫 번째 행이 더 높은 우선순위를 갖습니다(이전에는 테이블 로딩 시 무작위로 선택되었습니다). #51027를 해결했습니다. #61972 (vdimir).
  • Apache Arrow 스키마에서 널 허용 컬럼 타입을 자동으로 추론합니다. #61984 (Maksim Kita).
  • 집계 수행 중 집계 상태의 병렬 머지를 취소할 수 있도록 했습니다. 예: uniqExact. #61992 (Maksim Kita).
  • system.keywords를 사용해 제안 항목을 채우고, 내부 전역에서도 이를 사용하도록 합니다. #62000 (Nikita Mikhaylov).
  • ReplicatedMergeTree에 대한 OPTIMIZE FINAL은 이제 현재 활성화된 머지 작업이 완료될 때까지 기다린 다음 최종 머지를 다시 스케줄하려고 시도합니다. 이를 통해 일반적인 MergeTree 동작과 더욱 잘 일치하도록 합니다. #62067 (Nikita Taranov).
  • Hive 텍스트 파일에서 데이터를 읽을 때, Hive 텍스트 파일의 첫 번째 줄을 사용하여 입력 필드 개수를 조정합니다. 그런데 첫 번째 줄의 필드 개수가 정의된 Hive 테이블과 일치하지 않는 경우가 있습니다. 예를 들어 Hive 테이블이 test_tbl(a Int32, b Int32, c Int32)처럼 3개의 컬럼을 갖도록 정의되어 있지만 텍스트 파일의 첫 번째 줄에는 필드가 2개만 있는 경우입니다. 이 상황에서는 입력 필드 개수가 2개로 조정되고, 텍스트 파일의 다음 줄에 3개의 필드가 있는 경우 세 번째 필드는 읽히지 못하고 기본값 0으로 설정되는데, 이는 올바르지 않습니다. #62086 (KevinyhZou).
  • CREATE AS가 이제 테이블의 주석을 복사합니다. #62117 (Pablo Marcos).
  • zookeeper 테이블에 쿼리 진행 정보를 추가합니다. #62152 (JackyWoo).
  • 서버 전역에서 trace collector(Real 및 CPU)를 활성화할 수 있는 기능을 추가했습니다. #62189 (alesapin).
  • lightweight_deletes_sync 설정이 추가되었습니다(기본값: 2 - 모든 레플리카가 동기적으로 완료될 때까지 대기). 이 설정은 mutations_sync와 비슷하지만 경량한 삭제의 동작에만 영향을 줍니다. #62195 (Anton Popov).
  • 커스텀 settings의 값을 파싱할 때 boolean과 정수를 구분하도록 개선했습니다: SET custom_a = true; SET custom_b = 1;. #62206 (Vitaly Baranov).
  • AWS PrivateLink 인터페이스 엔드포인트를 통한 S3 액세스를 지원합니다. #60021, #31074, #53761 이슈를 해결합니다. #62208 (Arthur Passos).
  • 존재하지 않을 경우 clickhouse-client에서 UDF용 디렉터리를 생성하지 않도록 했습니다. 이 변경으로 #59597 이슈가 해결되었습니다. #62366 (Alexey Milovidov).
  • 이제 쿼리 캐시는 시스템 테이블(system.*, information_schema.*, INFORMATION_SCHEMA.*)을 대상으로 하는 쿼리 결과를 더 이상 캐시하지 않습니다. #62376 (Robert Schulze).
  • MOVE PARTITION TO TABLE 쿼리는 파트 개수 제한을 초과하지 않도록 지연되거나 TOO_MANY_PARTS 예외를 발생시킬 수 있습니다. INSERT 쿼리에 적용되는 것과 동일한 설정과 제한이 적용됩니다 (max_parts_in_total, parts_to_delay_insert, parts_to_throw_insert, inactive_parts_to_throw_insert, inactive_parts_to_delay_insert, max_avg_part_size_for_too_many_parts, min_delay_to_insert_ms, max_delay_to_insert 설정을 참조하십시오). #62420 (Sergei Trifonov).
  • macOS의 기본 설치 디렉터리를 /usr/bin에서 /usr/local/bin으로 변경했습니다. 이는 macOS El Capitan(2015)에서 도입된 Apple의 System Integrity Protection 때문에, sudo를 사용하더라도 /usr/bin에 쓰기 작업을 수행할 수 없기 때문입니다. #62489 (haohang).
  • transform이 항상 첫 번째로 일치하는 값을 반환하도록 했습니다. #62518 (Raúl Marín).
  • 누락되어 있던 hostname 컬럼을 시스템 테이블 blob_storage_log에 추가했습니다. #62456 (Jayme Bird).
  • 다른 시스템 테이블과의 일관성을 맞추기 위해 이제 system.backup_logevent_time 컬럼이 추가되었습니다. #62541 (Jayme Bird).
  • system.backup_log 테이블에 이제 event_date, event_time를 사용하는 기본 정렬 키("default" sorting key)가 설정되었으며, 이는 다른 _log 테이블 엔진과 동일합니다. #62667 (Nikita Mikhaylov).
  • RESTORE를 실행하는 동안 테이블의 DEFAULT 표현식이 평가되지 않도록 했습니다. #62601 (Vitaly Baranov).
  • S3 storage와 백업에도 S3 disk와 동일한 기본 keep alive 설정이 필요합니다. #62648 (Sema Checherinda).
  • 단일 테이블을 사용하는 여러 소비자에서 생성되는 로그 메시지를 구분할 수 있도록, 수많은 버그로 악명 높은 C 라이브러리인 librdkafka의 클라이언트 식별자를 로그 메시지에 추가합니다. #62813 (János Benjamin Antal).
  • 복제 데이터베이스(Replicated database)의 ZooKeeper 경로에서 특수 매크로 {uuid}{database}를 사용할 수 있도록 했습니다. #62818 (Vitaly Baranov).
  • HTTP 요청에서 서로 다른 인증 방식과 함께 QUOTA 키를 사용할 수 있도록 했습니다. #62842 (Kseniia Sumarokova).
  • clickhouse clientclickhouse local에서 명령줄 인수 --help의 출력 상세 수준을 낮추었습니다. 기존과 동일한 출력은 이제 --help --verbose로 생성됩니다. #62973 (Yarik Briukhovetskyi).
  • log_bin_use_v1_row_events는 MySQL 8.3에서 제거되었으며, 이에 맞춰 실험적인 MaterializedMySQL 엔진이 조정되었습니다 #60479. #63101 (Eugene Klimov). 작성자: Nikolay Yankin.

빌드/테스트/패키징 개선 사항

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

  • 쿼럼 insert 트랜잭션을 롤백할 때 발생하는 논리 오류를 수정했습니다. #61953 (Han Fei).
  • COUNT(*)와 FILTER 절을 함께 사용할 때 발생하는 파서 오류를 수정했습니다 #61357 (Duc Canh Le).
  • group_by_use_nulls + grouping sets + analyzer + materialize/constant 조합에서 발생하는 논리 오류를 수정했습니다. #61567 (Kruglov Pavel).
  • 이동된 파트를 제거하기 전에 머지를 취소하도록 함 #61610 (János Benjamin Antal).
  • Apache Arrow에서 발생하던 비정상 종료(abort) 문제를 수정합니다. #61720 (Kruglov Pavel).
  • 특정 디스크에 해당하는 올바른 경로에서 convert_to_replicated 플래그를 검색합니다 #61769 (Kirill).
  • distributed_foreground_insert/distributed_background_insert_batch에서 발생할 수 있는 연결 관련 데이터 레이스를 수정했습니다. #61867 (Azat Khuzhin).
  • 행 입력 포맷에서 이를 건너뛸 수 있도록 CANNOT_PARSE_ESCAPE_SEQUENCE 오류를 파싱 오류로 표시하도록 했습니다 #61883 (Kruglov Pavel).
  • http_wait_end_of_query 사용 시 HTTP에서 출력 포맷으로 예외 메시지를 기록하는 방식을 수정 #61951 (Kruglov Pavel).
  • LowCardinality와 JSONExtact 함수를 함께 사용할 때 발생하던 문제를 올바르게 수정했습니다. #61957 (Nikita Mikhaylov).
  • ROW POLICY에 expression이 없을 때 Merge 엔진에서 크래시가 발생합니다 #61971 (Ilya Golshtein).
  • WriteBufferAzureBlobStorage 소멸자에서 처리되지 않은 예외가 발생하던 문제를 수정 #61988 (SmitaRKulkarni).
  • ReplicatedMergeTree에서 컬럼 정의 없이 CREATE TABLE이 작동하지 않던 문제를 수정했습니다. #62040 (Azat Khuzhin).
  • 복합 샤딩 키에서 optimize_skip_unused_shards_rewrite_in 설정을 수정합니다 #62047 (Azat Khuzhin).
  • 리디렉션 시 ReadWriteBufferFromHTTP가 Host 헤더를 올바르게 설정하도록 수정 #62068 (Sema Checherinda).
  • 외부 테이블에서 데이터 형식 Bool을 파싱하지 못하던 문제를 수정했습니다 #62115 (Duc Canh Le).
  • Analyzer: 쿼리 파라미터 해석 문제 수정. #62186 (Dmitry Novik).
  • readonly 상태에서 파트를 복원하는 동작을 수정했습니다 #62207 (Vitaly Baranov).
  • SQL UDF를 포함하는 인덱스 정의에서 발생하던 충돌을 수정합니다 #62225 (vdimir).
  • analyzer와 함께 사용하는 generateRandom의 NULL 난수 시드 문제를 수정합니다. #62248 (Nikolai Kochetov).
  • Distinct Transform에서 const 컬럼을 올바르게 처리하도록 수정 #62250 (Antonio Andelic).
  • FINAL 수정자를 사용하는 쿼리에서 Parts Splitter를 수정했습니다 #62268 (Nikita Taranov).
  • Analyzer: 별칭을 파라미터화된 VIEW로 해석하는 로직 수정 #62274 (Dmitry Novik).
  • Analyzer: 상위 스코프의 이름 해석을 수정합니다 #62281 (Dmitry Novik).
  • 널 허용 비-네이티브 숫자 컬럼에서의 argMax 동작을 수정했습니다. #62285 (Raúl Marín).
  • Ordinary 데이터베이스에서 materialized view의 BACKUP 및 RESTORE 동작을 수정했습니다 #62295 (Vitaly Baranov).
  • Context의 스칼라 처리에서 발생하는 데이터 레이스를 수정합니다 #62305 (Kruglov Pavel).
  • materialized view의 기본 키 수정 #62319 (Murat Khairulin).
  • 지원되지 않는 테이블에는 멀티스레드 insert 파이프라인을 생성하지 않습니다. #62333 (vdimir).
  • 분산 쿼리에서 positional arguments를 사용하는 경우 analyzer를 수정함 #62362 (flynn).
  • analyzer에서 Merge 엔진의 additional_table_filters에 대한 filter pushdown 동작을 수정했습니다 #62398 (Kruglov Pavel).
  • analyzer를 사용하여 GLOBAL IN 테이블 쿼리를 수정했습니다. #62409 (Nikolai Kochetov).
  • 파티션 단위 쓰기 시 S3/HDFS/Azure 엔진에서 truncate_on_insert/create_new_file_on_insert 설정을 따르도록 수정함 #62425 (Kruglov Pavel).
  • AzureBlobStorage의 백업 복원 경로를 수정합니다 #62447 (SmitaRKulkarni).
  • SimpleSquashingChunksTransform를 수정했습니다 #62451 (Nikita Taranov).
  • 중첩된 lambda의 캡처를 수정합니다. #62462 (Nikolai Kochetov).
  • 재귀 타입을 사용하는 protobuf를 읽을 때 발생할 수 있던 비정상 종료를 방지합니다 #62506 (Raúl Marín).
  • 하나의 파티션을 자기 자신으로 이동하려 할 때 발생하던 버그를 수정했습니다 #62524 (helifu).
  • LIMIT 절의 스칼라 서브쿼리를 수정했습니다 #62567 (Nikolai Kochetov).
  • 실험적이며 공식적으로 지원되지 않는 Hive 엔진에서 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. 애초에 이 엔진은 그다지 좋아하지도 않습니다. #62578 (Nikolay Degterinsky).
  • groupArraySorted의 메모리 누수 문제를 수정했습니다. #62597 (Antonio Andelic).
  • largestTriangleThreeBuckets에서 발생하던 크래시를 수정했습니다 #62646 (Raúl Marín).
  • 더 큰 해상도에서 tumble[Start,End] 및 hop[Start,End] 동작을 수정했습니다 #62705 (Jordi Villar).
  • argMin/argMax combinator 상태를 수정합니다 #62708 (Raúl Marín).
  • 캐시 잠금 경합 최적화 때문에 캐시에 있는 임시 데이터가 제대로 처리되지 않던 문제를 수정합니다 #62715 (Kseniia Sumarokova).
  • mergeTreeIndex 함수에서 발생하던 충돌을 수정했습니다. #62762 (Anton Popov).
  • 수정: 업데이트: 중첩된 materialized 컬럼: 크기 검사 관련 수정 #62773 (Eliot Hautefeuille).
  • analyzer를 사용하는 CTE에서 FINAL 수정자가 무시되던 문제를 수정했습니다 #62811 (Duc Canh Le).
  • HTTP 인터페이스에서 JSON 포맷을 사용할 때 formatRow 함수에서 발생하던 비정상 종료 문제를 수정했습니다. #62840 (Anton Popov).
  • Azure: endpoint 객체에서 최종 URL을 구성하는 로직 수정 #62850 (Daniel Pozo Escalona).
  • GCD 코덱 문제를 수정했습니다. #62853 (Nikita Taranov).
  • hyperrectangle에서 LowCardinality(널 허용) 키 처리를 수정했습니다. #62866 (Amos Bird).
  • 입력 값이 UInt32 범위를 벗어나는 경우 Joda 구문에서 fromUnixtimestamp 함수를 수정함 #62901 (KevinyhZou).
  • sum(널 허용 데이터)에 대해 optimize_rewrite_aggregate_function_with_if 최적화를 비활성화했습니다 #62912 (Raúl Marín).
  • 소스 테이블의 컬럼 타입이 서로 다른 경우 StorageBuffer에서 PREWHERE가 올바르게 동작하도록 수정했습니다. #62916 (Nikolai Kochetov).
  • 캐시 키 디렉터리 생성 실패를 임시 데이터 캐시가 잘못 처리하던 문제를 수정합니다 #62925 (Kseniia Sumarokova).
  • gRPC: IPv6 피어 연결 시 발생하던 충돌 문제 수정 #62978 (Konstantin Bogdanov).
  • 레플리카 fetch 작업 중 발생할 수 있는 CHECKSUM_DOESNT_MATCH(및 기타 오류)를 수정했습니다. #62987 (Azat Khuzhin).
  • 캐시의 임시 데이터를 처리하는 동안 처리되지 않은 예외로 인해 프로세스가 종료되던 문제를 수정합니다 #62998 (Kseniia Sumarokova).
  • optimize_rewrite_aggregate_function_with_if의 암시적 형변환 문제를 수정 #62999 (Raúl Marín).
  • ~RestorerFromBackup에서 발생하던 처리되지 않은 예외를 수정했습니다. #63040 (Vitaly Baranov).
  • 보조 쿼리에서 GROUP BY 키의 서버 상수를 제거하지 않도록 했습니다. #63047 (Nikolai Kochetov).
  • FUNCTION abs의 단조성(monotonicity)을 잘못 판정하던 문제 수정 #63097 (Duc Canh Le).
  • MongoDB engine에서 SSL 핸드셰이크 시 사용할 서버 이름을 설정하도록 수정했습니다 #63122 (Alexander Gololobov).
  • MongoDB wire protocol 버전 확인을 위해 "config" 대신 사용자가 지정한 데이터베이스를 사용합니다 #63126 (Alexander Gololobov).

ClickHouse 24.3 LTS 릴리스, 2024-03-27. 발표 자료, 동영상

업그레이드 노트

  • allow_experimental_analyzer 설정은 기본적으로 활성화되어 있으며, 쿼리 분석을 호환성과 기능 완성도가 더 높은 새로운 구현으로 전환합니다. 「analyzer」 기능은 실험(experimental) 단계가 아니라 베타 단계로 간주됩니다. compatibility24.2로 설정하거나 allow_experimental_analyzer 설정을 비활성화하여 이전 동작으로 되돌릴 수 있습니다. YouTube 동영상 보기.
  • ClickHouse는 일반적으로 UTF-8 텍스트를 저장하는 String 데이터 타입에 임의의 바이너리 데이터를 허용합니다. Parquet/ORC/Arrow의 String은 UTF-8만을 지원합니다. 그래서 ClickHouse의 String 데이터 타입에 대해 Arrow에서 어떤 데이터 타입(String 또는 Binary)을 사용할지 선택할 수 있습니다. 이는 output_format_parquet_string_as_string, output_format_orc_string_as_string, output_format_arrow_string_as_string 설정으로 제어됩니다. Binary를 사용하는 것이 더 올바르고 호환성도 높지만, 기본값으로 String을 사용하면 대부분의 경우 사용자 기대와 더 잘 맞습니다. Parquet/ORC/Arrow는 lz4와 zstd를 포함한 다양한 압축 방식을 지원합니다. ClickHouse는 이러한 각 압축 방식을 모두 지원합니다. 일부 기능이 떨어지는 도구들은 더 빠른 lz4 압축 방식을 지원하지 못하므로, 기본값으로 zstd를 설정해 두었습니다. 이는 output_format_parquet_compression_method, output_format_orc_compression_method, output_format_arrow_compression_method 설정으로 제어됩니다. Parquet과 ORC에 대해서는 기본값을 zstd로 변경했지만, Arrow에 대해서는 변경하지 않았습니다(저수준 사용 시를 중시하기 때문입니다). #61817 (Alexey Milovidov).
  • 새로운 ClickHouse 버전에서는 geoDistance, greatCircleDistance, greatCircleAngle 함수가 모든 인자가 Float64인 경우 내부 계산과 반환 타입에 64비트 배정밀도 부동소수점 데이터 타입을 사용합니다. 이는 #58476에서 보고된 문제를 해결합니다. 이전 버전에서는 해당 함수가 항상 Float32를 사용했습니다. geo_distance_returns_float64_on_float64_argumentsfalse로 설정하거나 compatibility24.2 또는 그 이전으로 설정하여 이전 동작으로 전환할 수 있습니다. #61848 (Alexey Milovidov). 공동 작성: Geet Patel.
  • 구식 인메모리 데이터 파트는 버전 23.5부터 사용 중단되었고, 버전 23.10부터는 더 이상 지원되지 않았습니다. 이제 남아 있던 관련 코드가 제거되었습니다. #55186#45409의 연장선에 있는 작업입니다. 인메모리 데이터 파트는 23.5 이전 버전에서만 사용 가능했고, 또한 MergeTree 테이블에 대해 해당 SETTINGS를 수동으로 지정해 직접 활성화해야만 했기 때문에 인메모리 데이터 파트를 사용했을 가능성은 낮습니다. 인메모리 데이터 파트가 있는지 확인하려면 다음 쿼리를 실행합니다: SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type. 인메모리 데이터 파트 사용을 비활성화하려면 다음을 실행합니다: ALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULT. 오래된 ClickHouse 릴리스에서 업그레이드하기 전에 우선 인메모리 데이터 파트가 남아 있지 않은지 확인하십시오. 인메모리 데이터 파트가 있는 경우, 먼저 해당 사용을 비활성화한 뒤 인메모리 데이터 파트가 더 이상 없어질 때까지 기다린 후 업그레이드를 진행하십시오. #61127 (Alexey Milovidov).
  • system.zookeeper 테이블에서 컬럼 이름을 duration_ms에서 duration_microseconds로 변경하여, 지속 시간이 마이크로초 단위의 해상도임을 더 정확하게 반영하도록 했습니다. #60774 (Duc Canh Le).
  • async_insertdeduplicate_blocks_in_dependent_materialized_views 쿼리 수준 설정이 동시에 활성화된 경우, 들어오는 INSERT 쿼리를 거부합니다. 이 동작은 throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert 설정으로 제어되며, 기본적으로 활성화되어 있습니다. 이는 https://github.com/ClickHouse/ClickHouse/pull/59915 PR의 진행을 막고 있던 https://github.com/ClickHouse/ClickHouse/pull/59699 의 후속 작업으로, 해당 PR을 진행 가능하게 만드는 데 필요합니다. #60888 (Nikita Mikhaylov).
  • 유틸리티 clickhouse-copier는 GitHub의 별도 리포지토리(https://github.com/ClickHouse/copier)로 이동되었습니다. 더 이상 번들에 포함되지 않지만, 여전히 별도로 다운로드하여 사용할 수 있습니다. 다음 이슈들이 해결되었습니다: #60734 #60540 #60250 #52917 #51140 #47517 #47189 #46598 #40257 #36504 #35485 #33702 #26702.
  • MySQL과의 호환성을 높이기 위해 이제 호환용 별칭 locate는 기본적으로 (needle, haystack[, start_pos]) 형태의 인수를 허용합니다. 이전 동작인 (haystack, needle, [, start_pos])function_locate_has_mysql_compatible_argument_order = 0으로 설정하면 복원할 수 있습니다. #61092 (Robert Schulze).
  • 기본적으로 MergeTree 테이블의 ORDER BY에서 SimpleAggregateFunction 사용을 금지합니다(비교가 불가능하기 때문에 AggregateFunction과 마찬가지로 금지됩니다). 허용하려면 allow_suspicious_primary_key를 사용하십시오. #61399 (Azat Khuzhin).
  • Ordinary 데이터베이스 엔진은 사용이 중단되었습니다(deprecated). 서버에서 이 엔진을 사용 중인 경우 clickhouse-client에서 경고 메시지가 표시됩니다. 이 변경으로 #52229가 해결됩니다. #56942 (shabroo).

New Feature

  • 백업을 zip에 더해 tar 형식으로도 읽고 쓸 수 있도록 지원합니다. #59535 (josh-hildred).
  • S3 Express 버킷을 지원하도록 구현했습니다. #59965 (Nikita Taranov).
  • 다른 디스크에서 파트를 첨부할 수 있도록 지원합니다(하드 링크 대신 복사를 사용). #60112 (Unalian).
  • 크기 한도가 있는 Memory 테이블: min_bytes_to_keep, max_bytes_to_keep, min_rows_to_keep, max_rows_to_keep 설정으로 제어됩니다. #60612 (Jake Bamrah).
  • 대기 중인 쿼리와 실행 중인 쿼리 개수에 대해 별도의 제한을 둡니다. 서버 설정 max_waiting_queries가 추가되어, async_load_databases로 인해 대기 중인 쿼리 개수를 제한합니다. 기존 실행 중인 쿼리 개수 제한에는 더 이상 대기 중인 쿼리가 포함되지 않습니다. #61053 (Sergei Trifonov).
  • 파서에서 사용하는 모든 키워드를 포함하는 system.keywords 테이블을 추가했습니다. 주로 더 나은 퍼징과 구문 하이라이팅을 위해 필요하며 사용됩니다. #51808 (Nikita Mikhaylov).
  • ATTACH PARTITION ALL 지원을 추가했습니다. #61107 (Kirill Nikiforov).
  • 새로운 함수 getClientHTTPHeader를 추가했습니다. 이로써 #54665가 해결되었습니다. @lingtaolf와 공동 작성했습니다. #61820 (Alexey Milovidov).
  • generate_series를 테이블 함수로 추가했습니다(PostgreSQL과의 호환성을 위한 별칭으로, 기존 numbers 함수에 대응). 이 함수는 자연수에 대한 산술 수열을 갖는 테이블을 생성합니다. #59390 (divanik).
  • 값의 개수와 그 오차를 반환하는 topK/topkWeighed 지원 모드를 추가했습니다. #54508 (UnamedRus).
  • DateTime 또는 DateTime64 타입 값에 대해 밀리초 구성 요소를 반환하는 함수 toMillisecond를 추가했습니다. #60281 (Shaun Struwig).
  • clickhouse-server에 대해 HTTP 리다이렉트 핸들러를 구성할 수 있습니다. 예를 들어 /를 Play UI로 리다이렉트하도록 설정할 수 있습니다. #60390 (Alexey Milovidov).

성능 개선

  • 함수 dotProduct를 최적화하여 불필요하며 비용이 많이 드는 메모리 복사를 생략했습니다. #60928 (Robert Schulze).
  • 256비트 정수 출력이 30배 빨라졌습니다. #61100 (Raúl Marín).
  • 테이블의 기본 키에 대부분 의미 없는 컬럼이 포함되어 있다면, 해당 컬럼을 메모리에 유지하지 않도록 할 수 있습니다. 이는 새 설정인 primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns로 제어되며, 기본값은 0.9입니다. 이 값의 의미는 다음과 같습니다. 복합 기본 키에서 어떤 컬럼의 값이 전체 행의 최소 90%에서 서로 다르게 나타나면, 그 뒤에 오는 컬럼들은 메모리로 로드되지 않습니다. #60255 (Alexey Milovidov).
  • 여러 Nullable 컬럼을 포함하는 경우 직렬화된 집계 메서드의 성능을 개선합니다. #55809 (Amos Bird).
  • JSON 출력을 지연 방식으로 생성하여 ALL JOIN의 성능을 향상합니다. #58278 (LiuNeng).
  • AWS S3 등 외부 서비스와의 HTTP/HTTPS 연결을, 응답이 3xx 또는 4xx인 경우에도 모든 사용 시나리오에서 재사용할 수 있도록 했습니다. #58845 (Sema Checherinda).
  • 집계 함수 argMin / argMax / any / anyLast / anyHeavyORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1 쿼리의 성능이 개선되었습니다. #58640 (Raúl Marín).
  • 컬럼 필터에 대한 간단한 최적화입니다. 경우에 따라 최대 메모리 사용량을 원래의 44% 수준으로 줄일 수 있습니다. #59698 (李扬).
  • 결과 타입의 기본 타입이 숫자형일 때 multiIf 함수를 열 지향 방식으로 실행합니다. #60384 (李扬).
  • 더 빠른 뮤텍스(거의 2배 속도). #60823 (Azat Khuzhin).
  • 분산 쿼리가 완료될 때 여러 연결을 병렬로 정리하도록 개선했습니다. #60845 (lizhuoyu5).
  • 널 허용 숫자 또는 널 허용 문자열 컬럼 간의 데이터 이동을 최적화하여 일부 마이크로 벤치마크에서 성능이 향상되었습니다. #60846 (李扬).
  • 파일 시스템 캐시를 사용하는 연산에서 락 경합으로 인한 영향이 줄어듭니다. #61066 (Alexey Milovidov).
  • 컴파일러의 잘못된 최적화를 방지하여 array 조인 및 기타 조인을 최적화했습니다. #61074 이슈를 종료했습니다. #61075 (李扬).
  • 구문 오류가 있는 쿼리에 정규식을 사용하는 COLUMNS 매처가 포함되어 있으면, 파서의 백트래킹 과정에서 매번 정규식을 컴파일하고 한 번만 컴파일하여 재사용하지 않았습니다. 이는 근본적인 설계 오류였습니다. 컴파일된 정규식은 AST에 저장되었습니다. 하지만 AST의 A는 「abstract」를 의미하며, 이는 AST가 무거운(리소스를 많이 사용하는) 객체를 포함해서는 안 된다는 뜻입니다. AST의 일부는 파싱 과정에서 생성되었다가 폐기될 수 있으며, 여기에는 다수의 백트래킹도 포함됩니다. 이로 인해 파싱 단계가 느려지고, 결과적으로 읽기 전용 사용자에 의한 서비스 거부(DoS) 공격이 가능해집니다. 그러나 더 큰 문제는 이로 인해 퍼저(fuzzer)의 진행이 방해된다는 점입니다. #61543 (Alexey Milovidov).
  • 단일 값 IN 연산을 최적화하는 새로운 analyzer pass를 추가했습니다. #61564 (LiuNeng).
  • DNSResolver는 AWS S3의 여러 엔드포인트를 고르게 사용하기 위해, 해석된 IP 주소 집합의 순서를 섞습니다. #60965 (Sema Checherinda).

Experimental Feature

  • Azure blob storage에 대한 병렬 읽기를 지원합니다. 이를 통해 실험적인 Azure 객체 스토리지의 성능이 향상됩니다. #61503 (SmitaRKulkarni).
  • S3와 유사하게 Azure blob storage용 비동기 WriteBuffer를 추가합니다. 이를 통해 실험적인 Azure 객체 스토리지의 성능이 향상됩니다. #59929 (SmitaRKulkarni).
  • Azure Blob Storage를 사용할 때 백업 I/O 작업에 대해 managed identity를 사용합니다. 스토리지 계정 수준의 권한이 필요한, 존재하지 않는 컨테이너를 ClickHouse가 생성하려고 시도하지 않도록 막는 설정을 추가합니다. #61785 (Daniel Pozo Escalona).
  • 병렬 레플리카에서 IN 절의 서브쿼리가 동작하도록 허용하는 설정 parallel_replicas_allow_in_with_subquery = 1 를 추가합니다. #60950 (Nikolai Kochetov).
  • "zero-copy" 복제에 대한 변경 사항: 테이블이 삭제될 때 해당 테이블과 관련된 모든 zero copy lock을 삭제해야 합니다. 또한 이러한 lock을 포함하는 디렉터리도 제거해야 합니다. #57575 (Sema Checherinda).

개선 사항

  • 기본 테이블 엔진으로 MergeTree를 사용하도록 했습니다. #60524 (Alexey Milovidov)
  • output_format_pretty_row_numbers를 기본값으로 활성화하도록 변경했습니다. 이는 사용 편의성 측면에서 더 좋습니다. #61791 (Alexey Milovidov).
  • 이전 버전에서는 Pretty 형식에서 일부 숫자의 표시가 충분히 예쁘지 않았습니다. #61794 (Alexey Milovidov).
  • SHOW CREATE TABLE 쿼리 결과처럼 결과 집합에 단일 값만 있는 경우, Pretty 포맷에서 긴 값이 잘리지 않습니다. #61795 (Alexey Milovidov).
  • clickhouse-local과 마찬가지로 clickhouse-client--format 옵션의 동의어로 --output-format 옵션을 사용할 수 있습니다. 이 변경으로 #59848이슈가 해결됩니다. #61797 (Alexey Milovidov).
  • stdout가 터미널에 연결되어 있고 출력 포맷이 지정되지 않은 경우, clickhouse-client 및 유사한 도구는 인터랙티브 모드와 마찬가지로 기본적으로 PrettyCompact를 사용합니다. clickhouse-clientclickhouse-local은 입력 및 출력 포맷에 대한 명령줄 인자를 통합된 방식으로 처리합니다. 이 변경으로 #61272가 해결되었습니다. #61800 (Alexey Milovidov).
  • 가독성을 높이기 위해 Pretty 포맷에서 숫자 그룹을 밑줄(_)로 구분합니다. 이는 새로운 설정인 output_format_pretty_highlight_digit_groups로 제어됩니다. #61802 (Alexey Milovidov).
  • SYSTEM FLUSH DISTRIBUTED를 통해 초기 INSERT 설정을 재정의할 수 있는 기능이 추가되었습니다. #61832 (Azat Khuzhin).
  • 프로세서 프로파일링(정렬, 집계 등 작업에 소요된 시간 및 입·출력 바이트 수)을 기본 설정으로 활성화합니다. #61096 (Azat Khuzhin).
  • Filesystem 데이터베이스에서 확장자가 없는 파일을 지원합니다. #60795 (Kruglov Pavel).
  • Tsv, TSV, tsv, 또는 rowbinary처럼 모든 포맷 이름을 대소문자를 구분하지 않도록 만들었습니다. #60420 (豪肥肥). 여전히 JSON 😇처럼 올바르게 작성해 주시면 감사하겠고, Json 🤮처럼 쓰는 것은 달가워하지 않지만, 실제로는 선호하는 방식으로 표기하셔도 개의치 않습니다.
  • distributed_ddl_output_mode 설정에 none_only_active 모드를 추가했습니다. #60340 (Alexander Tokmakov).
  • 고급 대시보드에서 멀티라인 그래프의 색상이 조금 더 보기 좋게 개선되었습니다. #60391 (Alexey Milovidov).
  • Advanced 대시보드에서 이제 스크롤할 때에도 컨트롤이 항상 화면에 표시됩니다. 이를 통해 위로 스크롤하지 않고도 새 차트를 추가할 수 있습니다. #60692 (Alexey Milovidov).
  • materialized view에 대해 MODIFY COLUMN 쿼리를 실행할 때, 모든 컬럼이 존재하는지 확인하기 위해 내부 테이블 구조를 확인합니다. #47427 (sunny).
  • String 타입과 Enum 타입은 배열, UNION 쿼리, 조건식 등 동일한 컨텍스트에서 사용할 수 있습니다. 이 변경으로 #60726이 해결되었습니다. #60727 (Alexey Milovidov).
  • 쿼리 처리를 위한 외부 데이터 구조에서 Enum을 선언할 수 있도록 지원합니다(쿼리에 제공할 수 있는 즉석 임시 테이블입니다). #57857 (Duc Canh Le).
  • 머지할 파트를 선택할 때 경량한 삭제가 적용된 행을 고려하여, 결과 파트의 디스크 크기를 보다 정확하게 추정하도록 했습니다. #58223 (Zhuo Qiu).
  • 더 많은 시스템 테이블 컬럼에 주석을 추가했습니다. https://github.com/ClickHouse/ClickHouse/pull/58356의 후속 작업입니다. #59016 (Nikita Mikhaylov).
  • 이제 PREWHERE에서 virtual 컬럼을 사용할 수 있습니다. _part_offset과 같은 non-const virtual 컬럼에 특히 유용합니다. #59033 (Amos Bird). virtual 컬럼의 전반적인 사용성이 개선되었습니다. 이제 PREWHERE에서 virtual 컬럼을 사용할 수 있으며(이는 _part_offset과 같은 non-const virtual 컬럼에 특히 유용합니다), virtual 컬럼에 대한 내장 문서는 describe_include_virtual_columns SETTING을 활성화한 DESCRIBE 쿼리에서 컬럼 주석(comment)의 형태로 제공됩니다. #60205 (Anton Popov).
  • 상수 키를 사용하는 대신 이제 객체 스토리지는 객체 삭제 가능 여부를 결정하기 위한 키를 생성합니다. #59495 (Sema Checherinda).
  • 객체 스토리지 유형에서 "local_blob_storage" 대신 "local"을 사용할 수 있도록 했습니다. #60165 (Kseniia Sumarokova).
  • DETACH/서버 종료 시 및 SYSTEM FLUSH DISTRIBUTED 실행 시 Distributed 엔진의 대기 중인 INSERT 블록이 병렬로 플러시됩니다(병렬 처리는 테이블에 다중 디스크 정책이 설정된 경우에만 동작하며, 이는 현재 Distributed 엔진의 모든 동작과 동일합니다). #60225 (Azat Khuzhin).
  • 머지 작업에서 read-through cache 사용을 강제하는 설정을 추가했습니다. #60308 (Kseniia Sumarokova).
  • MySQL 호환성 프로토콜이 개선되었습니다. 이슈 #57598에서는 트랜잭션 처리와 관련된 동작 차이를 언급합니다. 활성 트랜잭션이 없을 때 COMMIT/ROLLBACK을 실행하면 MySQL의 동작과는 달리 오류로 처리되는 문제가 있었습니다. #60338 (PapaToemmsn).
  • substring 함수에 새 별칭 byteSlice가 추가되었습니다. #60494 (Robert Schulze).
  • 모호성을 줄이기 위해 서버 설정 dns_cache_max_sizedns_cache_max_entries로 이름을 변경했습니다. #60500 (Kirill Nikiforov).
  • SHOW INDEX | INDEXES | INDICES | KEYS 명령은 더 이상 기본 키 컬럼을 기준으로 정렬하지 않습니다(기존 동작은 직관적이지 않았습니다). #60514 (Robert Schulze).
  • Keeper 개선: 데이터 손실을 방지하기 위해 시작 시 잘못된 스냅샷이 감지되면 중단하도록 했습니다. #60537 (Antonio Andelic).
  • tzdata를 2024a 버전으로 업데이트합니다. #60768 (Raúl Marín).
  • Keeper 개선: Keeper 설정에서 leadership_expiry_ms를 지원합니다. #60806 (Brokenice0415).
  • input_format_try_infer_exponent_floats 설정과 관계없이 JSON 형식에서 지수 표기 숫자를 항상 추론합니다. JSON 객체에서 named Tuples를 추론하는 동안 예외를 발생시키는 대신, 모호한 경로에 대해 String 타입을 사용할 수 있게 해 주는 input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects 설정을 추가합니다. #60808 (Kruglov Pavel).
  • MySQL에서 일반적으로 사용하는 START TRANSACTION 구문을 지원하도록 추가하여 https://github.com/ClickHouse/ClickHouse/discussions/60865 토론을 해결했습니다. #60886 (Zach Naimon).
  • full-sorting merge join 알고리즘에서 null 값을 가장 큰/가장 작은 값으로 취급하도록 하는 플래그를 추가합니다. 이를 통해 Apache Spark와 같은 다른 SQL 시스템과 동작 방식이 호환되도록 합니다. #60896 (loudongfeng).
  • clickhouse-clientclickhouse-local에서 파일 확장자에 따라 출력 형식을 자동으로 감지하는 기능을 지원합니다. #61036 (豪肥肥).
  • Linux의 CGroups 값이 변경될 때 런타임에서 메모리 제한이 업데이트되도록 했습니다. #61049 (Han Fei).
  • 실수로 누락되어 있던 함수 toUInt128OrZero가 추가되었습니다(이 누락은 https://github.com/ClickHouse/ClickHouse/pull/945 와 관련됨). 호환성 별칭 FROM_UNIXTIMEDATE_FORMAT(ClickHouse 고유 기능이 아니며 MySQL 호환을 위해서만 존재함)은 SQL 호환성 별칭에서 기대되는 대로 대소문자를 구분하지 않도록 변경되었습니다. #61114 (Alexey Milovidov).
  • 액세스 검사(access checks)가 개선되어, 대상 사용자에게 해당 권한이 부여되어 있지 않더라도, 그리고 권한을 취소하는 사용자에게 해당 권한을 부여한 적이 없더라도 해당 권한을 취소할 수 있게 되었습니다. 예시: GRANT SELECT ON *.* TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit).
  • Nullable 컬럼에서 has() 함수 동작을 수정합니다(#60214 문제 해결). #61249 (Mikhail Koviazin).
  • 이제 서브트리 <include from_zk="/path" merge="true">에 대한 구성 치환에서 merge="true" 속성을 지정할 수 있습니다. 이 속성이 지정된 경우 ClickHouse는 해당 서브트리를 기존 구성과 병합하고, 지정되지 않은 경우 기본 동작으로 기존 구성에 새 내용을 덧붙입니다. #61299 (alesapin).
  • 가상 메모리 매핑에 대한 비동기 메트릭인 VMMaxMapCountVMNumMaps를 추가했습니다. #60662를 해결했습니다. #61354 (Tuan Pham Anh).
  • partial_merge JOIN 알고리즘에서만 동작하던 기존 방식에서 확장하여, 외부 메모리 정렬 및 외부 메모리 GROUP BY와 같이 임시 데이터를 생성하는 모든 곳에서 temporary_files_codec 설정을 사용하도록 했습니다. #61456 (Maksim Kita).
  • 쿼리 파싱의 복잡성을 제한할 수 있도록 max_parser_backtracks라는 새로운 설정을 추가했습니다. #61502 (Alexey Milovidov).
  • 파일 시스템 캐시를 동적으로 리사이즈하는 과정에서 경합이 줄어들었습니다. #61524 (Kseniia Sumarokova).
  • StorageS3 큐의 세그먼트 모드를 사용할 수 없도록 했습니다. 이 모드는 다시 설계될 예정입니다. #61537 (Kseniia Sumarokova).
  • 오타를 수정했습니다: use_leagcy_max_leveluse_legacy_max_level로 고쳤습니다. #61545 (William Schoeffel).
  • system.blob_storage_log에서 일부 중복된 항목을 제거합니다. #61622 (YenchangChan).
  • MySQL 호환을 위한 별칭으로 current_user 함수를 추가했습니다. #61770 (Yarik Briukhovetskyi).
  • 혼합 x86-64 / ARM 클러스터에서 부동 소수점 집계 함수 상태의 불일치 문제를 수정합니다 #60610 (Harry Lee).

빌드/테스트/패키징 개선

  • 실시간 쿼리 프로파일러가 이제 AArch64에서도 동작합니다. 이전 버전에서는 프로그램이 시스템 콜(syscall) 안에서 시간을 소비하지 않을 때에만 동작했습니다. #60807 (Alexey Milovidov).
  • ClickHouse 버전이 Docker 레이블에 추가되었습니다. #54224를 해결합니다. #60949 (Nikolay Monkov).
  • prqlc를 0.11.3으로 업그레이드했습니다. #60616 (Maximilian Roos).
  • clickhouse-local에 범용 쿼리 텍스트 퍼저를 추가했습니다. #61508 (Alexey Milovidov).

버그 수정(공식 안정 버전에서 사용자에게 직접 보이는 오동작)

  • 문서에서 0이 모든 항목을 유지하도록 한다고 설명되어 있으므로 MergeTree에서 finished_mutations_to_keep=0 설정의 동작을 수정했습니다 #60031 (Azat Khuzhin).
  • FINAL 최적화에 문제가 있었고, 작성자는 이를 다음과 같이 설명했습니다: "PartsSplitter invalid ranges for the same part". #60041 (Maksim Kita).
  • 실험적 기능으로서 공식적으로 지원되지 않는 Apache Hive에서 문제가 발생했습니다. #60262 (shanfengp).
  • 실험적 병렬 레플리카 기능 개선: 병렬 레플리카가 변경된 경우 강제로 다시 분석하도록 함 #60362 (Raúl Marín).
  • 새 디스크 구성 옵션에서 plain 메타데이터 타입 사용을 수정했습니다. #60396 (Kseniia Sumarokova).
  • mapContainsKeyLike의 논리 오류 'Cannot capture column because it has incompatible type'를 수정하려고 시도했습니다 #60451 (Kruglov Pavel).
  • CREATE TABLE 시 스칼라 서브쿼리를 계산하지 않도록 했습니다. #60464 (Nikolai Kochetov).
  • 오류로 인해 많은 행이 건너뛰어질 때 병렬 파싱에서 발생하는 교착 상태를 수정합니다 #60516 (Kruglov Pavel).
  • 실험적 KQL(Kusto) 지원 기능에 문제가 있어 max_query_size_for_kql_compound_operator를 수정했습니다: #60534 (Yong Wang).
  • Keeper 수정: 커밋 로그를 기다릴 때 타임아웃을 추가 #60544 (Antonio Andelic).
  • date 타입에 대해 숫자 입력 힌트를 출력하지 않도록 함 #60577 (Raúl Marín).
  • 필터에서 비결정적 함수가 사용된 MergeTree에서의 읽기 문제를 수정했습니다 #60586 (Kruglov Pavel).
  • 호환성 설정 값 타입이 잘못되었을 때 발생하던 논리 오류를 수정했습니다 #60596 (Kruglov Pavel).
  • fix(prql): 더 견고한 panic 처리기 #60615 (Maximilian Roos).
  • 10진수 및 날짜 인수에 대한 intDiv를 수정했습니다. #60672 (Yarik Briukhovetskyi).
  • 수정: ALTER MODIFY 쿼리에서 CTE를 전개하도록 수정 #60682 (Yakov Olkhovskiy).
  • Atomic/Ordinary가 아닌 데이터베이스 엔진(예: Memory)에 대한 system.parts 처리를 수정했습니다. #60689 (Azat Khuzhin).
  • 매개변수화된 뷰에서 발생하던 「Invalid storage definition in metadata file」 오류를 수정합니다 #60708 (Azat Khuzhin).
  • CompressionCodecMultiple에서 발생하던 버퍼 오버플로우 문제를 수정했습니다. #60731 (Alexey Milovidov).
  • SQL/JSON에서 의미 없는 데이터를 제거했습니다 #60738 (Alexey Milovidov).
  • 집계 함수 quantileGK에서 잘못된 assertion을 제거했습니다 #60740 (李扬).
  • streams 값을 1로 설정하여 insert-select + insert_deduplication_token 버그를 수정했습니다 #60745 (Jordi Villar).
  • 지원되지 않는 multipart 업로드 작업에서 사용자 정의 메타데이터 헤더를 설정하지 못하도록 합니다 #60748 (Francisco J. Jurado Moreno).
  • toStartOfInterval 함수 수정 #60763 (Andrey Zvonov).
  • arrayEnumerateRanked에서 발생하는 크래시를 수정했습니다 #60764 (Raúl Marín).
  • INSERT SELECT JOIN에서 input()을 사용할 때 발생하던 크래시를 수정했습니다 #60765 (Kruglov Pavel).
  • 서브쿼리에서 allow_experimental_analyzer 값이 서로 다를 때 발생하던 충돌을 수정했습니다. #60770 (Dmitry Novik).
  • S3에서 읽을 때 재귀 처리를 제거합니다 #60849 (Antonio Andelic).
  • HashedDictionaryParallelLoader에서 오류가 발생하면 멈춰 버릴 수 있는 문제를 수정했습니다 #60926 (vdimir).
  • Replicated database에서의 async RESTORE를 수정합니다(실험적 기능). #60934 (Antonio Andelic).
  • 네이티브 프로토콜을 통해 Log 테이블에 비동기 INSERT를 수행할 때 발생하던 교착 상태를 수정했습니다 #61055 (Anton Popov).
  • RangeHashedDictionary에서 dictGetOrDefault의 기본 인자 지연 평가 동작을 수정했습니다 #61196 (Kruglov Pavel).
  • groupArraySorted에서 발생하던 여러 버그를 수정했습니다. #61203 (Raúl Marín).
  • 단독 바이너리에서 Keeper 재구성 문제를 수정함 #61233 (Antonio Andelic).
  • S3 엔진에서 session_token 사용 방식을 수정합니다 #61234 (Kruglov Pavel).
  • 집계 FUNCTION uniqExact에서 잘못된 결과가 발생할 수 있는 문제를 수정했습니다. #61257 (Anton Popov).
  • SHOW DATABASE의 버그를 수정했습니다 #61269 (Raúl Marín).
  • RabbitMQ storage에서 MATERIALIZED 컬럼 관련 논리 오류를 수정했습니다 #61320 (vdimir).
  • CREATE OR REPLACE DICTIONARY 구문을 수정했습니다 #61356 (Vitaly Baranov).
  • 외부 ON CLUSTER를 사용하는 ATTACH 쿼리를 수정함 #61365 (Nikolay Degterinsky).
  • 널 허용 키에 대한 연속 키 최적화를 수정했습니다 #61393 (Anton Popov).
  • actions DAG 분할과 관련된 문제를 수정 #61458 (Raúl Marín).
  • 실패한 RESTORE 작업을 종료하는 처리 수정 #61466 (Vitaly Baranov).
  • 호환성 설정 사용 시 async_insert_use_adaptive_busy_timeout이 올바르게 비활성화되도록 수정 #61468 (Raúl Marín).
  • restore 풀에서 대기열 사용을 허용합니다 #61475 (Nikita Taranov).
  • UUID를 사용해 system.parts를 읽을 때 발생하던 불일치 문제를 수정합니다. #61479 (Dan Wu).
  • ALTER QUERY MODIFY SQL SECURITY 동작을 수정했습니다. #61480 (pufit).
  • 윈도우 VIEW(실험적 기능)에서 발생하던 크래시를 수정했습니다. #61526 (Alexey Milovidov).
  • repeat 함수에서 non-native 정수형 사용 시의 동작을 수정합니다 #61527 (Antonio Andelic).
  • 클라이언트의 -s 인자를 수정했습니다 #61530 (Mikhail f. Shiryaev).
  • arrayPartialReverseSort에서 발생하던 크래시를 수정했습니다 #61539 (Raúl Marín).
  • const position을 사용하는 문자열 검색을 수정했습니다 #61547 (Antonio Andelic).
  • DateTime64 타입과 함께 사용할 때 오류를 발생시키던 addDays 함수를 수정했습니다. #61561 (Shuai li).
  • JSONExtract에서 LowCardinality 입력 타입을 사용할 수 없도록 했습니다 #61617 (Julia Kartseva).
  • 중복 제거가 적용된 비동기 insert에 대해 system.part_log를 수정했습니다 #61620 (Antonio Andelic).
  • system.parts에서 발생할 수 있던 Non-ready set 예외를 수정했습니다. #61666 (Nikolai Kochetov).
  • REPLACE_RANGE의 actual_part_name을 수정합니다 (Entry actual part isn't empty yet) #61675 (Alexander Tokmakov).
  • multiSearchAllPositionsCaseInsensitiveUTF8에서 잘못된 UTF-8에 대한 sanitizer 리포트를 수정했습니다. #61749 (pufit).
  • RANGE 프레임이 널 허용 컬럼에서 지원되지 않는다는 사항을 바로잡았습니다. #61766 (YuanLiu).

ClickHouse 24.2 릴리스, 2024-02-29. 발표 자료, 동영상

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

  • 중첩 타입에서 의심스럽거나 실험적인 타입을 검증합니다. 이전에는 Array/Tuple/Map 같은 중첩 타입에서 이러한 타입(JSON 제외)을 검증하지 않았습니다. #59385 (Kruglov Pavel).
  • 스레드 수와 블록 크기에 대한 유효성(sanity) 검사를 추가합니다. #60138 (Raúl Marín).
  • 기본적으로 지수 표기법의 부동소수점을 추론하지 않습니다. 이전 동작을 복원하는 input_format_try_infer_exponent_floats 설정을 추가합니다(기본값: 비활성화). #59476를 종료합니다. #59500 (Kruglov Pavel).
  • ALTER 연산을 괄호로 둘러싸는 것을 허용합니다. 괄호 출력 여부는 format_alter_operations_with_parentheses 설정으로 제어할 수 있습니다. 기본적으로, 포매팅된 쿼리에서는 일부 위치에서 포매팅된 ALTER 연산을 메타데이터(예: 뮤테이션)로 저장하기 때문에 괄호가 출력됩니다. 새로운 구문은 ALTER 연산이 리스트로 끝나는 일부 쿼리를 더 명확하게 해 줍니다. 예: ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN c 는 이전 구문으로는 올바르게 파싱할 수 없습니다. 새로운 구문에서는 ALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c) 쿼리가 명확합니다. 이전 버전은 새 구문을 읽을 수 없으므로, 단일 클러스터에서 ClickHouse의 신버전과 구버전이 혼재된 경우 새 구문 사용이 문제를 일으킬 수 있습니다. #59532 (János Benjamin Antal).
  • materialized view 보안 문제를 수정합니다. 이 문제로 인해 사용자가 필요한 권한 없이 테이블에 데이터를 INSERT할 수 있었습니다. 이번 수정에서는 사용자가 materialized view 뿐만 아니라 모든 하위 테이블에 INSERT할 권한이 있는지도 검증합니다. 이는 이전에는 동작하던 일부 쿼리가 이제 Not enough privileges 오류와 함께 실패할 수 있음을 의미합니다. 이 문제를 해결하기 위해, 이 릴리스에서는 view용 SQL security 신규 기능을 도입합니다 https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security. #54901 #60439 (pufit).

신규 기능

  • view 및 materialized view에서 definer 사용자를 지정할 수 있는 새로운 구문이 추가되었습니다. 이를 통해 기반 테이블에 대한 명시적인 권한 부여 없이도 뷰에서 SELECT/INSERT를 실행할 수 있습니다. 즉, 뷰가 권한을 캡슐화하게 됩니다. #54901 #60439 (pufit).
  • file/s3/hdfs/url/azureBlobStorage 엔진에서 파일 형식을 알 수 없는 경우 스키마 추론 중에 파일 형식을 자동으로 감지하도록 시도합니다. #50576을(를) 해결합니다. #59092 (Kruglov Pavel).
  • 비동기 INSERT 타임아웃에 대한 자동 조정 기능을 도입했습니다. 다음 설정이 추가되었습니다: async_insert_poll_timeout_ms, async_insert_use_adaptive_busy_timeout, async_insert_busy_timeout_min_ms, async_insert_busy_timeout_max_ms, async_insert_busy_timeout_increase_rate, async_insert_busy_timeout_decrease_rate. #58486 (Julia Kartseva).
  • 최대 연속 로그인 실패 횟수에 대한 QUOTA를 설정할 수 있습니다. #54737 (Alexey Gerasimchuck).
  • 새로운 집계 함수 groupArrayIntersect. 다음 이슈의 후속입니다: #49862. #59598 (Yarik Briukhovetskyi).
  • AzureBlobStorage에 대한 백업 및 복원 기능을 지원합니다. #50747를 해결합니다. #56988 (SmitaRKulkarni).
  • 사용자는 이제 format_template_row의 대안으로 format_schema_rows_template를 사용하여 쿼리에서 템플릿 문자열을 직접 지정할 수 있습니다. #31363을(를) 해결합니다. #59088 (Shaun Struwig).
  • 서로 다른 종류의 MergeTree 테이블을 복제 엔진(Replicated engine)으로 자동 변환하는 기능이 구현되었습니다. 테이블의 데이터 디렉터리(/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/)에 빈 convert_to_replicated 파일을 생성하면, 다음 서버 시작 시 해당 테이블이 자동으로 변환됩니다. #57798 (Kirill).
  • 빈 파티션과 관련된 ZooKeeper 노드를 제거하는 ALTER TABLE table FORGET PARTITION partition 쿼리가 추가되었습니다. #59507 (Sergei Trifonov). 이는 전문가용 기능입니다.
  • NATS 테이블 엔진에 JWT 자격 증명 파일 지원을 추가했습니다. #59543 (Nickolaj Jepsen).
  • DNS 문제를 진단하는 데 유용한 system.dns_cache 테이블을 구현했습니다. #59856 (Kirill Nikiforov).
  • 코덱 LZ4HC는 새로운 레벨 2를 지원하며, 이는 이전 최소 레벨이던 3보다 빠르지만 압축률이 더 낮습니다. 이전 버전에서는 LZ4HC(2) 이하가 모두 LZ4HC(3)와 동일했습니다. 작성자: Cyan4973. #60090 (Alexey Milovidov).
  • DNS 문제를 디버깅하는 데 유용한 system.dns_cache 테이블을 구현했습니다. 새로운 서버 설정 dns_cache_max_size가 추가되었습니다. #60257 (Kirill Nikiforov).
  • merge 테이블 FUNCTION에서 merge(['db_name', ] 'tables_regexp') 형식의 단일 인자 버전을 지원합니다. #60372 (豪肥肥).
  • 음수 위치 인자를 지원합니다. #57736을(를) 해결합니다. #58292 (flynn).
  • 구성에서 user 키를 사용하여 특정 S3 설정에 대해 허용되는 사용자 집합을 지정할 수 있도록 지원합니다. #60144 (Antonio Andelic).
  • 테이블 함수 mergeTreeIndex가 추가되었습니다. 이 함수는 MergeTree 테이블의 인덱스와 마크 파일 내용을 제공합니다. 테이블 내부 구조를 살펴보는 용도로 사용할 수 있습니다. 구문: mergeTreeIndex(database, table, [with_marks = true]) 여기서 database.tableMergeTree 엔진을 사용하는 기존 테이블입니다. #58140 (Anton Popov).

실험적 기능

  • Tukey의 fences 알고리즘을 사용하여 시계열 데이터의 이상치를 탐지하는 함수 seriesOutliersDetectTukey가 추가되었습니다. #58632 (Bhavna Jindal). 다음 패치 릴리스에서 동작이 변경될 예정임을 유의하십시오.
  • 각 행에 대해 Variant 타입 이름을 가지는 Enum을 반환하는 함수 variantType이 추가되었습니다. #59398 (Kruglov Pavel).
  • parallel replicas( analyzer에서만 지원)에 대해 LEFT JOIN, ALL INNER JOIN, 그리고 단순 서브쿼리를 지원합니다. 새로운 설정 parallel_replicas_prefer_local_join은 로컬 JOIN 실행(기본값)과 GLOBAL JOIN 중 어느 것을 사용할지 결정합니다. 모든 테이블은 cluster_for_parallel_replicas의 각 레플리카에 존재해야 합니다. 새로운 설정 min_external_table_block_size_rowsmin_external_table_block_size_bytes는 임시 테이블로 전송되는 작은 블록을 합치는 데 사용됩니다(analyzer에서만 적용). #58916 (Nikolai Kochetov).
  • 새로운 레플리카를 추가하거나 복구하는 동안 Replicated 데이터베이스에서 테이블을 동시에 생성하는 것을 허용합니다. #59277 (Konstantin Bogdanov).
  • Variant 값에 대한 비교 연산자와 Variant 컬럼에 Field를 올바르게 삽입하는 기능을 구현했습니다. 기본적으로 유사한 Variant 타입들로 구성된 Variant 타입 생성을 허용하지 않습니다(설정 allow_suspicious_variant_types로 허용 가능). #59996#59850를 종료합니다. #60198 (Kruglov Pavel).
  • CTE( analyzer 사용 안 함)와 함께 parallel replicas JOIN을 비활성화합니다. #59239 (Raúl Marín).

성능 개선

  • 프라이머리 키에서 사용하는 메모리량이 줄었습니다. #60049 (Alexey Milovidov).
  • 기본 키 및 기타 일부 연산의 메모리 사용량을 줄였습니다. #60050 (Alexey Milovidov).
  • 테이블의 기본 키는 처음 접근할 때 메모리에 지연 방식으로 로드됩니다. 이는 새로운 MergeTree 설정인 primary_key_lazy_load에 의해 제어되며, 기본적으로 활성화되어 있습니다. 이로 인해 다음과 같은 장점이 있습니다: - 사용되지 않는 테이블에 대해서는 기본 키가 로드되지 않습니다. - 메모리가 충분하지 않은 경우, 서버 시작 시점이 아니라 처음 사용 시점에 예외가 발생합니다. 반면 다음과 같은 단점이 있습니다: - 기본 키를 로드하는 지연 시간은 연결을 수락하기 전에 미리 발생하는 것이 아니라 첫 번째 쿼리 시에 발생하며, 이론적으로는 「thundering-herd」 문제가 발생할 수 있습니다. 이 변경으로 #11188이 해결되었습니다. #60093 (Alexey Milovidov).
  • 벡터 검색에 사용되는 벡터화된 거리(distance) 함수. #58866 (Robert Schulze).
  • 벡터 검색에 유용한 벡터화 FUNCTION인 dotProduct. #60202 (Robert Schulze).
  • dictGetOrDefault FUNCTION에 단락 평가(short-circuit evaluation) 기능을 추가합니다. #52098 이슈를 해결합니다. #57767 (jsc0218).
  • Keeper 개선: latest_logs_cache_size_thresholdcommit_logs_cache_size_threshold로 제어되는 일정량의 로그만 메모리에 캐시합니다. #59460 (Antonio Andelic).
  • Keeper 개선: 데이터 노드의 크기를 더욱 줄였습니다. #59592 (Antonio Andelic).
  • 결과 타입이 Float*/Decimal*/*Int*인 경우 if 함수의 브랜치 미스(branch miss)를 추가로 최적화했습니다. https://github.com/ClickHouse/ClickHouse/pull/57885 의 후속 작업입니다. #59148 (李扬).
  • 입력 타입이 Map인 경우 if 함수를 최적화하여 성능이 최대 약 10배 향상되었습니다. #59413 (李扬).
  • Int8 타입에 strict aliasing을 구현해 성능을 개선합니다 (UInt8 및 다른 모든 정수 타입에는 이미 적용되어 있습니다). #59485 (Raúl Marín).
  • bigint 및 big decimal 타입에서 분기 미스(branch miss)를 줄여 조건부 sum/avg 연산의 성능을 최적화합니다. #59504 (李扬).
  • 활성 뮤테이션이 적용 중인 SELECT 쿼리의 성능을 개선합니다. #59531 (Azat Khuzhin).
  • AVX2를 사용하여 함수 isNotNull을 최적화했습니다. #59621 (李扬).
  • 정렬되어 있거나 거의 정렬된 데이터에 대한 ASOF JOIN 성능을 개선합니다. #59731 (Maksim Kita).
  • async_insert_max_data_size의 이전 기본값이었던 1 MB는 너무 작은 것으로 판명되었습니다. 새 기본값은 10 MiB입니다. #59536 (Nikita Mikhaylov).
  • RESTORE 명령을 실행할 때 백업에서 테이블 메타데이터를 읽는 작업에 여러 스레드를 사용하도록 했습니다. #60040 (Vitaly Baranov).
  • 이제 StorageBuffer에 세그먼트가 1개보다 많은 경우(num_layers > 1), 모든 세그먼트에 대한 백그라운드 플러시가 여러 스레드에서 동시에 수행됩니다. #60111 (alesapin).

개선 내용

  • 출력 포맷이 Pretty이고 블록이 100만을 초과하는 단일 숫자 값 하나만 포함하는 경우, 표의 오른쪽에 사람이 읽기 쉬운 형태의 숫자가 함께 출력됩니다. #60379 (rogeryk).
  • split_parts_ranges_into_intersecting_and_non_intersecting_finalsplit_intersecting_parts_ranges_into_layers_final 설정을 추가했습니다. 이 설정은 FINAL이 포함된 쿼리에 대한 최적화를 비활성화하기 위해 필요하며, 원래는 디버그용으로만 사용됩니다. #59705 (Maksim Kita). 실제로는 그 용도에만 국한되지 않고, 성능을 다소 희생하는 대신 메모리 사용량을 줄이는 데에도 사용할 수 있습니다.
  • 설정 extract_kvp_max_pairs_per_rowextract_key_value_pairs_max_pairs_per_row로 이름을 변경합니다. 설정 이름에 불필요한 축약어가 포함되어 있던 문제는 https://github.com/ClickHouse/ClickHouse/pull/43606에서 도입되었습니다. 이 설정에 대한 문서를 수정합니다. #59683 (Alexey Milovidov). #59960 (jsc0218).
  • DEFAULT 또는 MATERIALIZED 표현식을 사용하는 컬럼에서 ALTER COLUMN MATERIALIZE를 실행할 때, 이제 의도된 의미(semantics)를 정확하게 따릅니다. #58023 (Duc Canh Le).
  • 뮤테이션 중 오류가 발생했을 때를 대비해 지수 백오프(exponential backoff) 로직을 도입했습니다. 이를 통해 CPU 사용량, 메모리 사용량 및 로그 파일 크기가 감소합니다. #58036 (MikhailBurdukov).
  • InitialQuery Profile Event를 집계하는 기능을 추가했습니다. #58195 (Unalian).
  • storage_configuration에서 volume_priority를 정의할 수 있게 되었습니다. #58533 (Andrey Zvonov).
  • T64 코덱에 Date32 타입 지원을 추가했습니다. #58738 (Hongbin Ma).
  • 여러 항목을 포함하는 타입에서 마지막 항목 뒤에 오는 쉼표(trailing comma)를 허용합니다. #59119 (Aleksandr Musorin).
  • 분산 테이블 엔진에 대한 설정을 이제 서버 구성 파일에서 지정할 수 있습니다(MergeTree 설정과 유사하게), 예를 들어 <distributed> <flush_on_detach>false</flush_on_detach> </distributed>와 같이 설정합니다. #59291 (Azat Khuzhin).
  • system.zookeeper를 읽을 때 연결 끊김과 세션 만료가 발생하면 이를 재시도합니다. 이는 특히 장애 주입으로 인한 연결 끊김이 있는 환경에서 system.zookeeper 테이블에서 많은 행을 읽을 때 유용합니다. #59388 (Alexander Gololobov).
  • input_format_values_interpret_expressions=0일 때 앞에 0이 붙은 숫자를 8진수로 해석하지 않습니다. #59403 (Joanna Hulboj).
  • 시작 시 및 설정 파일이 변경될 때마다 ClickHouse는 전체 메모리 트래커의 하드 메모리 한계값을 업데이트합니다. 이 한계값은 여러 서버 설정과 cgroups 한도(리눅스에서)를 기반으로 계산됩니다. 이전에는 /sys/fs/cgroup/memory.max(cgroups v2용) 경로가 하드코딩되어 있었습니다. 그 결과 /sys/fs/cgroup/my/nested/group/memory.max와 같이 중첩 그룹(계층 구조)에 대해 구성된 cgroup v2 메모리 한도는 무시되었습니다. 이제 이 문제가 수정되었습니다. cgroup v1 메모리 한도의 동작은 변경되지 않았습니다. #59435 (Robert Schulze).
  • INSERT 수행 중 PK/프로젝션/보조 인덱스 계산에 소요된 시간을 관측할 수 있도록 새로운 프로파일링 이벤트가 추가되었습니다. #59436 (Nikita Taranov).
  • 설정 s3queue_last_processed_path를 사용하여 Ordered 모드의 S3Queue를 생성할 때 시작 지점을 지정할 수 있도록 했습니다. #59446 (Kseniia Sumarokova).
  • clickhouse-localsystem.tables에서도 시스템 테이블에 대한 주석을 확인할 수 있도록 했습니다. #59493 (Nikita Mikhaylov).
  • system.zookeeper 테이블: 이전에는 전체 결과를 메모리에 모두 누적한 뒤 하나의 큰 청크로 반환했습니다. 이번 변경으로 system.zookeeper에서 대량의 행을 읽을 때 메모리 사용량을 줄이고, 중간 진행 상황(현재까지 읽은 행 수)을 표시할 수 있으며, 결과 집합이 클 때 연결 타임아웃이 발생하는 것을 방지할 수 있습니다. #59545 (Alexander Gololobov).
  • 이제 대시보드는 URL의 #hash에 대해 압축 및 비압축 상태를 모두 해석합니다(이전 버전과의 호환성 유지). #59124의 후속 작업입니다. #59548 (Amos Bird).
  • 코덱 DEFLATE_QPL에서 사용되는 Intel QPL 버전을 v1.3.1에서 v1.4.0으로 업데이트했습니다. 또한 폴링 타임아웃 메커니즘의 버그를 수정했습니다. 일부 경우에는 타임아웃이 발생하더라도 타임아웃이 제대로 동작하지 않아, 타임아웃 발생 시 IAA와 CPU가 버퍼를 동시에 처리하는 문제가 있음을 관찰했습니다. 현재로서는 IAA 코덱 상태가 QPL_STS_BEING_PROCESSED가 아님을 확인한 다음, SW 코덱으로 폴백하는 편이 좋습니다. #59551 (jasperzhu).
  • ClickHouse Cloud에서는 서버 버전 관련 경고를 표시하지 않습니다. ClickHouse Cloud에서 무중단 업그레이드를 자동으로 처리하기 때문입니다. #59657 (Alexey Milovidov).
  • 자가 추출 후 임시 바이너리 파일은 복사하는 대신 이동되도록 변경되었습니다. #59661 (Yakov Olkhovskiy).
  • Apple macOS에서 스택 언와인딩(stack unwinding)을 수정했습니다. 이 변경으로 #53653가 해결되었습니다. #59690 (Nikita Mikhaylov).
  • max_parser_depth SETTING이 잘못 구성되어 매우 큰 값으로 설정된 경우에도 파서에서 스택 오버플로를 검사하도록 했습니다. 이로써 #59622가 해결되었습니다. #59697 (Alexey Milovidov). #60434
  • Kafka 스토리지에서 XML과 SQL로 생성된 named collection의 동작을 통합했습니다. #59710 (Pervakov Grigorii).
  • merge_max_block_size_bytes 값이 충분히 작고 테이블에 폭이 큰 행(row)들(문자열 또는 튜플)이 포함되어 있는 경우, 백그라운드 머지 작업이 무한 루프에 빠질 수 있습니다. 이 문제를 수정했습니다. https://github.com/ClickHouse/ClickHouse/pull/59340 후속 작업입니다. #59812 (Nikita Mikhaylov).
  • CREATE TABLEuuid를 명시적으로 지정한 경우 replica_path에서 uuid를 허용합니다. #59908 (Azat Khuzhin).
  • system.tables 시스템 테이블에 ReplicatedMergeTree 테이블에 대한 metadata_version 컬럼을 추가합니다. #59942 (Maksim Kita).
  • Keeper 개선: Prometheus로 Keeper 관련 메트릭/이벤트만 전송합니다. #59945 (Antonio Andelic).
  • 대시보드는 업그레이드 이후 system 데이터베이스의 테이블 구조가 변경되었더라도 서로 다른 ClickHouse 버전에 걸친 메트릭을 표시합니다. #59967 (Alexey Milovidov).
  • 파일에서 AZ 정보를 불러올 수 있게 했습니다. #59976 (Konstantin Bogdanov).
  • Keeper 개선 사항: 디스크 관련 작업이 실패할 경우 재시도를 추가했습니다. #59980 (Antonio Andelic).
  • 새 구성 설정 backups.remove_backup_files_after_failure를 추가했습니다: <clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>. #60002 (Vitaly Baranov).
  • GCP가 GATEWAY_TIMEOUT HTTP 오류 코드와 함께 Internal Error를 반환하는 경우, S3 file GCP 복사가 버퍼 복사로 폴백되도록 했습니다. #60164 (Maksim Kita).
  • ULIDStringToDateTime에 단락 실행(short-circuit execution) 도입. #60211 (Juan Madurga).
  • system.backupssystem.backup_log 테이블에 query_id 컬럼이 추가되었습니다. error 컬럼에 오류 스택 트레이스가 추가되었습니다. #60220 (Maksim Kita).
  • MySQL 포트를 통한 연결은 이제 QuickSight를 즉시 지원할 수 있도록 prefer_column_name_to_alias = 1 설정이 자동으로 적용됩니다. 또한 mysql_map_string_to_text_in_show_columnsmysql_map_fixed_string_to_text_in_show_columns 설정이 기본적으로 활성화되며, 이들 역시 MySQL 연결에만 영향을 줍니다. 이를 통해 더 많은 BI 도구와의 호환성이 향상됩니다. #60365 (Robert Schulze).
  • JavaScript 코드의 경쟁 상태(race condition)를 수정하여 차트가 서로 겹쳐 표시되던 문제를 해결합니다. #60392 (Alexey Milovidov).

빌드/테스트/패키징 개선

  • 커버리지 수집 및 인트로스펙션을 포함하는 빌드와 테스트를 추가했습니다. #56102의 후속 작업입니다. #58792 (Alexey Milovidov).
  • CMake 크로스 컴파일 툴체인 변수가 설정된 경우 corrosion-cmake에서 Rust 툴체인을 업데이트합니다. #59309 (Aris Tritas).
  • ASTLiterals에 대해 일부 퍼징(fuzzing)을 추가했습니다. #59383 (Raúl Marín).
  • ClickHouse 컨테이너가 시작될 때마다 initdb 스크립트를 실행하려면 환경 변수 CLICKHOUSE_ALWAYS_RUN_INITDB_SCRIPTS를 설정해야 합니다. #59808 (Alexander Nikolaev).
  • 일반적인 ClickHouse 컴포넌트(예: server/client/...)를 비활성화하는 기능은 제거했지만, ODBC 또는 Keeper처럼 추가 라이브러리가 필요한 일부 컴포넌트는 유지했습니다. #59857 (Azat Khuzhin).
  • Query fuzzer가 쿼리 내부의 SETTINGS도 퍼징하도록 했습니다. #60087 (Alexey Milovidov).
  • clang-19(master)로 ClickHouse를 빌드하는 것을 지원합니다. #60448 (Alexey Milovidov).

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

  • TTL WHERE 절에서 발생하는 "Non-ready set" 오류를 수정합니다. #57430 (Nikolai Kochetov).
  • quantilesGK 함수의 버그를 수정했습니다 #58216 (李扬).
  • Decimal 인자를 사용하는 intDiv의 잘못된 동작을 수정합니다 #59243 (Yarik Briukhovetskyi).
  • FixedString 입력에서의 translate 함수 동작을 수정했습니다 #59356 (Raúl Marín).
  • Keeper에서 digest 계산을 수정했습니다 #59439 (Antonio Andelic).
  • 디버그 심볼이 없는 바이너리에서 스택 트레이스가 올바르게 생성되도록 수정합니다 #59444 (Azat Khuzhin).
  • 컬럼별 설정이 있는 경우를 처리하도록 ASTAlterCommand::formatImpl을(를) 수정했습니다... #59445 (János Benjamin Antal).
  • Analyzer에서 SELECT * FROM [...] ORDER BY ALL 쿼리 처리를 수정했습니다 #59462 (zhongyuankai).
  • 분산 쿼리 취소 시 발생할 수 있는 포착되지 않은 예외를 수정합니다 #59487 (Azat Khuzhin).
  • 복합 타입에 대해 permutation과 동일한 규칙을 사용하도록 MAX의 동작을 변경했습니다 #59498 (Raúl Marín).
  • update_insert_deduplication_token_in_dependent_materialized_views를 전달할 때의 코너 케이스를 수정했습니다. #59544 (Jordi Villar).
  • 빈 값에서 arrayElement / map이 잘못된 결과를 반환하던 문제를 수정 #59594 (Raúl Marín).
  • 비어 있는 상태를 병합할 때 topK에서 발생하던 충돌을 수정했습니다 #59603 (Raúl Marín).
  • 상수 세그먼트 키를 사용하는 분산 테이블 문제를 수정했습니다 #59606 (Vitaly Baranov).
  • WingFuzz에서 발견된 KQL 문제를 수정했습니다 #59626 (Yong Wang).
  • AsynchronousBoundedReadBuffer에서 발생하는 「Read beyond last offset」 오류를 수정합니다 #59630 (Vitaly Baranov).
  • RewriteSumFunctionWithSumAndCountVisitor에서 함수 별칭을 유지합니다 #59658 (Raúl Marín).
  • 초기 쿼리가 아닌 후속 쿼리의 시작 시간을 수정함 #59662 (Raúl Marín).
  • minmax 스키핑 인덱스에서 사용되는 인수 타입을 검증합니다. #59733 (Anton Popov).
  • FixedString 입력에서 leftPad / rightPad 함수를 수정했습니다. #59739 (Raúl Marín).
  • countMatches 함수에서 AST fuzzer 관련 문제를 수정했습니다. #59752 (Robert Schulze).
  • RabbitMQ: ack도 nack도 처리되지 않은 메시지가 발생하던 문제를 수정했습니다 #59775 (Kseniia Sumarokova).
  • StorageURL에서 쿼리 실행의 일부가 단일 스레드에서 수행되던 문제를 수정합니다 #59833 (Michael Kolupaev).
  • S3Queue: 초기화되지 않은 값 관련 문제 수정 #59897 (Kseniia Sumarokova).
  • 괄호로 둘러싸인 파티션 표현식의 파싱을 수정합니다 #59901 (János Benjamin Antal).
  • HTTP를 통해 사용할 때 JSONColumnsWithMetadata 형식에서 발생하던 크래시를 수정했습니다 #59925 (Kruglov Pavel).
  • Analyzer에서 반환 값이 달라지는 경우 sum을 count로 다시 작성하지 않도록 했습니다 #59926 (Azat Khuzhin).
  • UniqExactSet 읽기 시 크래시 수정 #59928 (Maksim Kita).
  • ReplicatedMergeTree에서 잘못된 metadata_version을 수정 #59946 (Maksim Kita).
  • StorageDistributed에서 발생하는 데이터 레이스 문제를 수정했습니다. #59987 (Nikita Taranov).
  • Docker: 옵션이 비활성화되어 있을 때가 아니라 활성화되어 있을 때 init 스크립트를 실행하도록 수정 #59991 (jktng).
  • SQLite에 대한 INSERT문에서 작은따옴표 처리 방식을 수정했습니다(역슬래시 대신 작은따옴표를 하나 더 붙여 이스케이프하도록 변경) #60015 (Azat Khuzhin).
  • arrayFold의 여러 논리 오류를 수정했습니다 #60022 (Raúl Marín).
  • 컬럼 별칭을 제거하던 optimize_uniq_to_count 동작을 수정합니다 #60026 (Raúl Marín).
  • DROP 시 S3Queue 테이블에서 발생할 수 있었던 예외를 수정했습니다 #60036 (Kseniia Sumarokova).
  • 단일 리터럴과 함께 사용된 NOT의 서식을 수정합니다 #60042 (Raúl Marín).
  • DDLLogEntry에서 하드코딩된 4096 대신 컨텍스트의 max_query_size를 사용합니다 #60083 (Kruglov Pavel).
  • table이라는 이름의 테이블을 포함하는 쿼리의 일관성 없는 포매팅을 수정합니다. 구조가 선형이 아닐 때 UNION ALL, INTERSECT, EXCEPT를 사용하는 쿼리의 잘못된 포매팅을 수정합니다. 이 변경으로 #52349가 해결됩니다. SYSTEM ... DROP FILESYSTEM CACHE, SYSTEM ... REFRESH/START/STOP/CANCEL/TEST VIEW, SYSTEM ENABLE/DISABLE FAILPOINT를 포함한 SYSTEM 쿼리의 잘못된 포매팅을 수정합니다. 파라미터화된 DDL 쿼리의 포매팅을 수정합니다. DESCRIBE FILESYSTEM CACHE 쿼리의 포매팅을 수정합니다. SET param_...(파라미터를 설정하는 쿼리)의 잘못된 포매팅을 수정합니다. CREATE INDEX 쿼리의 잘못된 포매팅을 수정합니다. CREATE USER 및 이와 유사한 쿼리의 일관성 없는 포매팅을 수정합니다. CREATE SETTINGS PROFILE의 일관성 없는 포매팅을 수정합니다. ALTER ... MODIFY REFRESH의 잘못된 포매팅을 수정합니다. 프레임 오프셋이 표현식인 경우 윈도 함수의 일관성 없는 포매팅을 수정합니다. RESPECT NULLSIGNORE NULLSplus와 같은 연산자를 구현하는 함수 뒤에 사용된 경우의 일관성 없는 포매팅을 수정합니다. SYSTEM SYNC REPLICA ... LIGHTWEIGHT FROM ...의 터무니없는 포매팅을 수정합니다. GROUP BY GROUPING SETS ... WITH ROLLUP/CUBE/TOTALS가 포함된 잘못된 쿼리의 일관성 없는 포매팅을 수정합니다. GRANT CURRENT GRANTS의 일관성 없는 포매팅을 수정합니다. CREATE TABLE (... COLLATE)의 일관성 없는 포매팅을 수정합니다. 추가로, 서브쿼리 내부의 EXPLAIN의 잘못된 포매팅을 수정했습니다(#60102). 람다 함수의 잘못된 포매팅을 수정했습니다(#60012). 앞으로 이러한 문제를 다시 놓치지 않도록 검사를 추가했습니다. #60095 (Alexey Milovidov).
  • 서브쿼리에서 EXPLAIN 출력 형식의 일관성이 깨지던 문제를 수정했습니다. #60102 (Alexey Milovidov).
  • 널 허용(Nullable) 타입에서 cosineDistance가 크래시 나는 문제를 수정했습니다. #60150 (Raúl Marín).
  • 문자열로 표현된 bool 값을 실제 bool 값으로 캐스팅할 수 있도록 했습니다 #60160 (Robert Schulze).
  • system.s3queue_log를 수정했습니다 #60166 (Kseniia Sumarokova).
  • arrayReduce에서 널 허용 집계 함수 이름을 사용할 때 발생하던 문제를 수정했습니다 #60188 (Raúl Marín).
  • S3Queue의 민감한 정보가 노출되지 않도록 숨겼습니다 #60233 (Kseniia Sumarokova).
  • HTTP 예외 코드를 수정했습니다. #60252 (Austin Kothig).
  • S3Queue: 버그를 수정합니다(간헐적으로 실패하던 test_storage_s3_queue/test.py::test_shards_distributed 테스트 문제도 함께 해결합니다) #60282 (Kseniia Sumarokova).
  • IPv6를 사용하는 해시 함수에서 초기화되지 않은 값의 사용과 잘못된 결과를 수정했습니다 #60359 (Kruglov Pavel).
  • null 인수를 사용하는 OptimizeDateOrDateTimeConverterWithPreimageVisitor에서 발생하는 문제를 수정했습니다. #60453 (Raúl Marín).
  • KQL 또는 PRQL 다이얼렉트 클라이언트에서 전송된 분산 테이블 쿼리가 레플리카에서 실행되지 못하게 하던 경미한 버그를 수정했습니다. #59674. #60470 (Alexey Milovidov) #59674 (Austin Kothig).

ClickHouse 24.1 릴리스, 2024-01-30. 발표 자료, 동영상

호환되지 않는 변경 사항

  • print_pretty_type_names 설정이 기본적으로 활성화되어 있습니다. 이전 동작을 유지하려면 이 설정을 비활성화하거나 SET compatibility = '23.12'를 사용하면 됩니다. #57726 (Alexey Milovidov).
  • MergeTree 설정 clean_deleted_rows는 사용이 중단(deprecated)되었으며, 이제 아무 효과도 없습니다. OPTIMIZE에 대한 CLEANUP 키워드는 기본적으로 허용되지 않습니다 (allow_experimental_replacing_merge_with_cleanup이 활성화된 경우는 예외). #58316 (Alexander Tokmakov).
  • 함수 reverseDNSQuery는 더 이상 사용할 수 없습니다. 이로써 #58368 이슈가 해결됩니다. #58369 (Alexey Milovidov).
  • 설정 파일에서 접근 제어(access control)를 개선하기 위한 다양한 변경 사항이 활성화되었습니다. 이 변경 사항은 동작에 영향을 주므로, access_control_improvements 섹션의 config.xml을 확인해야 합니다. 확신이 없다면 설정 파일의 값을 이전 버전과 동일하게 유지하십시오. #58584 (Alexey Milovidov).
  • NaN 값과 함께 sumMapFiltered가 동작하는 방식을 개선했습니다. 이제 NaN 값은 (무작위가 아니라) 끝에 위치하며, 어떤 값과도 서로 다른 값으로 간주됩니다. -0도 이제 0과 같은 값으로 처리되며, 0 값이 제거되므로 -0 값도 함께 제거됩니다. #58959 (Raúl Marín).
  • 함수 visibleWidth는 문서에 설명된 대로 동작합니다. 이전 버전에서는 문자열 직렬화 후 코드 포인트를 lengthUTF8 함수처럼 단순히 세었지만, zero-width 문자, 결합 문자, 전각 문자, 탭, 삭제 문자는 고려하지 않았습니다. 이제 동작이 이에 맞게 변경되었습니다. 이전 동작을 유지하려면 function_visible_width_behavior0으로 설정하거나, compatibility23.12 이하로 설정하십시오. #59022 (Alexey Milovidov).
  • 다음 두 가지 버그가 수정될 때까지 Kusto 방언(dialect)은 비활성화됩니다: #59037#59036. #59305 (Alexey Milovidov). Kusto를 사용하려는 모든 시도는 예외를 발생시킵니다.
  • 더 효율적으로 구현된 FINAL 수정자는 이제 max_threads = 1인 경우에도 순서 보장을 더 이상 제공하지 않습니다. 이전 동작에 의존하고 있다면, enable_vertical_final을 0으로 설정하거나 compatibility23.12로 설정하십시오.

새 기능

  • 여러 데이터 타입의 유니온을 표현하는 Variant 데이터 타입을 구현합니다. Variant(T1, T2, ..., TN) 타입은 이 타입의 각 행에 T1, T2, ..., TN 중 하나에 해당하는 값 또는 어떤 것도 아닌 NULL 값이 저장됨을 의미합니다. Variant 타입은 allow_experimental_variant_type 설정이 활성화된 경우 사용할 수 있습니다. 참조: #54864. #58047 (Kruglov Pavel).
  • 일부 설정(현재 min_compress_block_sizemax_compress_block_size)은 이제 컬럼 단위로 지정할 수 있으며, 이렇게 지정된 값은 해당 테이블 수준 설정보다 우선 적용됩니다. 예: CREATE TABLE tab (col String SETTINGS (min_compress_block_size = 81920, max_compress_block_size = 163840)) ENGINE = MergeTree ORDER BY tuple();. #55201 (Duc Canh Le).
  • quantileDD 집계 함수와 이에 대응하는 quantilesDDmedianDD를 추가했습니다. 이는 DDSketch https://www.vldb.org/pvldb/vol12/p2195-masson.pdf 를 기반으로 합니다. ### 사용자에게 노출되는 변경 사항에 대한 문서 항목입니다. #56342 (Srikanth Chekuri).
  • 어떤 종류의 객체 스토리지든, 어떤 종류의 메타데이터 타입과도 함께 구성할 수 있게 했습니다. #58357 (Kseniia Sumarokova).
  • 비활성 레플리카를 기다리지 않도록 distributed_ddl_output_modenull_status_on_timeout_only_activethrow_only_active 모드를 추가하였습니다. #58350 (Alexander Tokmakov).
  • 부분 배열을 구하는 함수 arrayShingles를 추가합니다. 예: arrayShingles([1, 2, 3, 4, 5], 3)[[1,2,3],[2,3,4],[3,4,5]]를 반환합니다. #58396 (Zheng Miao).
  • 국제 도메인 이름을 IDNA 표준에 따른 ASCII 표현으로 변환하는 데 유용한 punycodeEncode, punycodeDecode, idnaEncode, idnaDecode 함수를 추가했습니다. #58454 (Robert Schulze).
  • 문자열 유사도 함수 dramerauLevenshteinDistance, jaroSimilarity, jaroWinklerSimilarity가 추가되었습니다. #58531 (Robert Schulze).
  • output_format_compression_level 설정을 추가하여 출력 압축 수준을 변경할 수 있고, 출력 압축 방식이 zstd인 경우 output_format_compression_zstd_window_log 설정을 통해 zstd 압축의 윈도우 크기를 명시적으로 설정하고 long-range 모드를 활성화할 수 있습니다. INTO OUTFILE와 테이블 함수 file, url, hdfs, s3, azureBlobStorage에 기록할 때 적용됩니다. #58539 (Duc Canh Le).
  • 출력이 터미널이 아닌 경우 Pretty 포맷에서 ANSI 이스케이프 시퀀스를 자동으로 비활성화합니다. 설정 output_format_pretty_color에 새로운 auto 모드를 추가합니다. #58614 (Shaun Struwig).
  • Sqids를 디코딩하는 함수 sqidDecode를 추가했습니다. #58544 (Robert Schulze).
  • JSON 입력 포맷에서 Bool 값을 String으로 읽을 수 있습니다. 이 기능은 기본적으로 활성화된 input_format_json_read_bools_as_strings 설정을 통해 제어됩니다. #58561 (Kruglov Pavel).
  • 시계열 데이터를 계절 성분, 추세 성분 및 잔차 성분으로 분해하는 FUNCTION seriesDecomposeSTL이 추가되었습니다. #57078 (Bhavna Jindal).
  • MaterializedMySQL용 MySQL Binlog 클라이언트를 도입했습니다. 여러 데이터베이스에 대해 하나의 binlog 연결만 사용합니다. #57323 (Val Doroshchuk).
  • Intel QuickAssist Technology (QAT)는 하드웨어 가속 압축 및 암호화 기능을 제공합니다. ClickHouse에는 zstd 압축을 위해 QAT를 활용하는 새로운 압축 코덱 ZSTD_QAT가 추가되었습니다. 이 코덱은 Intel's QATlibIntel's QAT ZSTD Plugin을 사용합니다. 현재는 하드웨어에서 가속되는 것은 압축뿐이며(QAT를 초기화할 수 없으면 소프트웨어 폴백이 동작함), 압축 해제는 항상 소프트웨어에서 실행됩니다. #57509 (jasperzhu).
  • S3 디스크에 대해 객체 스토리지 키를 생성하는 새로운 방식을 도입했습니다. 이제 디스크 설명에서 key_template 옵션을 사용하여 re2 정규식 문법으로 키 형식을 정의할 수 있습니다. #57663 (Sema Checherinda).
  • system.dropped_tables_parts 테이블에는 system.dropped_tables 테이블(드롭되었지만 아직 제거되지 않은 테이블)의 파트가 포함됩니다. #58038 (Yakov Olkhovskiy).
  • 테이블에 연결된 materialized view 수를 제한할 수 있도록 max_materialized_views_size_for_table 설정을 추가합니다. #58068 (zhongyuankai).
  • clickhouse-format 개선 사항: VALUES가 포함된 INSERT 쿼리 지원, 주석 지원(출력에 포함하려면 --comments 사용), 긴 쿼리만 여러 줄 형식으로 서식을 지정하도록 하는 --max_line_length 옵션 지원. #58246 (vdimir).
  • clickhouse-local에서 system.parts를 포함한 모든 시스템 테이블을 attach합니다. 이로써 #58312 이슈가 종료됩니다. #58359 (Alexey Milovidov).
  • transform FUNCTION에서 Enum 데이터 타입을 지원합니다. 이로써 #58241이 종료되었습니다. #58360 (Alexey Milovidov).
  • 테이블 system.database_engines를 추가합니다. #58390 (Bharat Nallan). 코드베이스에서 데이터베이스 엔진을 독립적으로 등록할 수 있게 했습니다. #58365 (Bharat Nallan). 인터프리터를 독립적으로 등록할 수 있게 했습니다. #58443 (Bharat Nallan).
  • SYSTEM SYNC REPLICA LIGHTWEIGHT 쿼리에 FROM <Replicas> 수정자가 추가되었습니다. FROM 수정자를 사용하면 지정된 소스 레플리카와, ZooKeeper에 존재하지 않거나 source_replica가 비어 있는 레플리카에 대해서만 fetch 및 drop-range가 완료될 때까지 대기합니다. #58393 (Jayme Bird).
  • update_insert_deduplication_token_in_dependent_materialized_views 설정이 추가되었습니다. 이 설정은 종속 materialized view에서 INSERT 시 테이블 식별자를 사용해 INSERT 중복 제거 토큰을 업데이트하도록 합니다. 이로써 #59165 이슈가 해결되었습니다. #59238 (Maksim Kita).
  • 비동기 메트릭을 업데이트하는 SYSTEM RELOAD ASYNCHRONOUS METRICS 구문을 추가했습니다. 주로 테스트 및 개발 시에 유용합니다. #53710 (Robert Schulze).

성능 개선

  • 병렬 레플리카 간 조정이 더 나은 병렬성과 캐시 지역성을 위해 다시 설계되었습니다. 수백 개의 레플리카 환경에서 선형 확장성을 검증했습니다. 또한 순차 읽기를 지원하도록 개선되었습니다. #57968 (Nikita Taranov).
  • HTTP 발신 시 사용하던 버퍼링 기반 구현을 ClickHouse의 기본 버퍼로 교체합니다. 인터페이스별 바이트 카운팅 메트릭을 추가합니다. #56064 (Yakov Olkhovskiy).
  • 분산 쿼리에서 uniqExact의 대용량 집계 상태가 병렬로 병합됩니다. #59009 (Nikita Taranov).
  • MergeTree 테이블에서 데이터를 읽은 뒤 메모리 사용량을 줄였습니다. #59290 (Anton Popov).
  • 수직 병합에서 메모리 사용량을 줄였습니다. #59340 (Anton Popov).
  • Keeper 시작 시 발생하는 과도한 메모리 사용을 더 많은 경우에서 방지합니다. #58455 (Antonio Andelic).
  • Keeper 개선: 저장된 노드를 위한 Keeper의 메모리 사용량을 줄였습니다. #59002 (Antonio Andelic).
  • 캐시 친화성이 더 높은 최종 구현입니다. 동작 변경에 대한 참고 사항입니다. 이전에는 FINAL 수정자를 사용하고 단일 스트림으로 읽는 쿼리(예: max_threads = 1)는 ORDER BY 절을 명시적으로 지정하지 않아도 정렬된 출력을 생성했습니다. 그러나 enable_vertical_final = true로 설정된 경우(기본값)에는 더 이상 이러한 동작이 보장되지 않습니다. #54366 (Duc Canh Le).
  • 예를 들어 S3에서 읽을 때 사용되는 ReadBufferFromIStream에서 불필요한 추가 복사가 발생하지 않도록 했습니다. #56961 (Nikita Taranov).
  • 입력이 Array(Map)/Array(Array(Num))/Array(Array(String))/Array(BigInt)/Array(Decimal)일 때 arrayElement 함수가 최적화되었습니다. 이전 구현은 필요 이상으로 많은 메모리 할당을 수행했습니다. 이번 최적화로 특히 입력 타입이 Array(Map)일 때 최대 약 6배까지 속도가 향상됩니다. #56403 (李扬).
  • compact 파트에서 하나의 컬럼에서 둘 이상의 서브컬럼을 읽을 때 해당 컬럼을 한 번만 읽도록 최적화했습니다. #57631 (Kruglov Pavel).
  • sum(column + constant) 함수의 AST를 재작성합니다. Analyzer의 최적화 패스로 사용할 수 있습니다 #57853 (Jiebin Sun).
  • match FUNCTION 평가 시 이제 건너뛰기 인덱스 ngrambf_v1tokenbf_v1를 사용합니다. #57882 (凌涛).
  • 이제 match FUNCTION의 평가에 역색인(inverted index)을 사용합니다. #58284 (凌涛).
  • MergeTree FINAL이 동일한 non-L0 파트 내의 행들을 비교하지 않습니다. #58142 (Duc Canh Le).
  • iota 호출의 성능을 향상했습니다(배열을 연속된 숫자로 채우는 작업). #58271 (Raúl Marín).
  • 비수치형 타입에서 MIN/MAX 함수의 성능을 개선했습니다. #58334 (Raúl Marín).
  • BMI2/SSE intrinsics를 사용하여 필터 조합(다단계 PREWHERE 등)을 최적화했습니다. #58800 (Zhiguo Zhou).
  • clickhouse-local에서 사용하는 스레드 수를 1개 줄였습니다. #58968 (Alexey Milovidov).
  • 타입이 널 허용일 때 multiIf FUNCTION의 성능을 개선했습니다. #57745 (KevinyhZou).
  • 사용하지 않는 jemalloc 페이지를 정리(purge)하기 위한 SYSTEM JEMALLOC PURGE와, 프로파일러가 활성화되어 있을 때 jemalloc 프로파일을 제어하기 위한 SYSTEM JEMALLOC [ ENABLE | DISABLE | FLUSH ] PROFILE를 추가했습니다. Keeper에는 jemalloc 관련 4LW 명령을 추가했습니다. jemalloc 통계를 덤프하는 jmst, 프로파일러가 활성화되어 있을 때 jemalloc 프로파일을 제어하기 위한 jmfp, jmep, jmdp입니다. #58665 (Antonio Andelic).
  • S3로 백업할 때 메모리 사용량을 줄였습니다. #58962 (Vitaly Baranov).

개선 사항

  • 모든 시스템 테이블 컬럼에 주석(간단한 설명)을 추가했습니다. 이렇게 한 이유는 여러 가지가 있습니다. 시스템 테이블을 매우 많이 사용하는데, 특정 컬럼의 목적과 의미를 개발자가 파악하기 어려울 때가 종종 있습니다. 시스템 테이블은 자주 변경되며(새 컬럼을 추가하거나 기존 컬럼을 수정), 이에 대한 문서는 항상 최신 상태를 유지하지 못합니다. 예를 들어 system.parts 문서 페이지를 살펴보면, 많은 컬럼이 빠져 있습니다. 장기적으로는 ClickHouse에서 직접 문서를 생성할 수 있도록 하고자 합니다. #58356 (Nikita Mikhaylov).
  • PASTE JOIN에서 서브쿼리에 별칭을 지정하지 않은 쿼리도 허용합니다. #58654 (Yarik Briukhovetskyi).
  • macOS에서 MySQL/MariaDB 연동을 사용할 수 있도록 지원합니다. 이로써 #21191 이슈가 해결됩니다. #46316 (Alexey Milovidov) (Robert Schulze).
  • 기본값으로 max_rows_in_set_to_optimize_join를 비활성화했습니다. #56396 (vdimir).
  • ON CLUSTER DDL 쿼리와 Replicated 데이터베이스 엔진에서 호스트 이름을 조회하지 않도록 할 수 있는 <host_name> 설정 파라미터를 추가했습니다. 이를 통해 클러스터 정의가 변경될 때 큐가 멈춰 버리는 상황을 완화합니다. #57573를 종료합니다. #57603 (Nikolay Degterinsky).
  • 파일 시스템 캐시를 위해 load_metadata_threads를 16으로 설정합니다. 이렇게 하면 서버가 더 빨리 시작됩니다. #57732 (Alexey Milovidov).
  • 머지 및 뮤테이션 작업의 처리 속도를 제한(throttle)할 수 있는 기능을 추가했습니다(max_mutations_bandwidth_for_server/max_merges_bandwidth_for_server). #57877 (Azat Khuzhin).
  • system.server_settings 시스템 테이블에 있던 문서화되지 않은 (boolean) 컬럼 is_hot_reloadable을 (Enum8) 컬럼 changeable_without_restart로 교체했으며, 가능한 값은 No, Yes, IncreaseOnly, DecreaseOnly입니다. 또한 해당 컬럼을 문서화했습니다. #58029 (skyoct).
  • 클러스터 디스커버리에서 사용자 이름과 비밀번호를 설정할 수 있도록 지원합니다. #58063 이슈를 종료합니다. #58123 (vdimir).
  • ALTER TABLE ... PART에서 쿼리 파라미터를 지원합니다. #58297 (Azat Khuzhin).
  • Kafka 테이블에 대한 consumer를 필요할 때마다 동적으로 생성하되, 마지막으로 사용된 이후 일정 기간(kafka_consumers_pool_ttl_ms) 동안은 유지합니다. 이를 통해 system.kafka_consumers에 대한 통계 문제(아무도 Kafka 테이블에서 읽기를 수행하지 않을 때는 소비가 발생하지 않아, 지속적인 메모리 누수와 테이블 detach 지연으로 이어지는 문제)를 해결하며, 또한 이 PR은 system.kafka_consumers에 대한 통계를 기본 설정으로 다시 활성화합니다. #58310 (Azat Khuzhin).
  • sparkbar의 별칭으로 sparkBar가 추가되었습니다. #58335 (凌涛).
  • GCS에 업로드한 후에는 ComposeObject 요청을 더 이상 전송하지 않습니다. #58343 (Azat Khuzhin).
  • 구성 XML 파일에서 이름에 점(.)이 포함된 키를 올바르게 처리하도록 했습니다. #58354 (Azat Khuzhin).
  • 함수 format이 상수 인자에 대해서는 상수를 반환하도록 했습니다. 이 변경으로 #58355 이슈가 해결되었습니다. #58358 (Alexey Milovidov).
  • max_execution_timemax_estimated_execution_time을 분리할 수 있도록 max_estimated_execution_time 설정을 추가했습니다. #58402 (Zhang Yifan).
  • 잘못된 데이터베이스 엔진 이름이 사용될 경우 힌트를 제공합니다. #58444 (Bharat Nallan).
  • Arrow 딕셔너리에서 인덱스 타입을 보다 세밀하게 제어할 수 있도록 설정을 추가합니다. Arrow 권장 사항에 따라 기본 인덱스 타입으로 부호 있는 정수형을 사용합니다. 이 변경으로 #57401 이슈를 종료합니다. #58519 (Kruglov Pavel).
  • #58575를 구현하여 Docker 이미지 실행 시 CLICKHOUSE_PASSWORD_FILE 환경 변수를 지원하도록 했습니다. #58583 (Eyal Halpern Shalev).
  • 데이터를 읽기 위해 많은 스트림이 필요한 일부 쿼리를 실행하면, 이전에는 "Paste JOIN requires sorted tables only" 오류가 발생했습니다. 이제 이러한 경우 스트림 수가 1로 조정됩니다. #58608 (Yarik Briukhovetskyi).
  • INVALID_IDENTIFIER 오류 메시지를 개선했습니다. #58703 (Yakov Olkhovskiy).
  • normalizeQuery에서 부호가 있는 수치 리터럴 처리 방식을 개선했습니다. #58710 (Salvatore Mesoraca).
  • MySQL의 Point 데이터 타입을 지원합니다. #58721 (Kseniia Sumarokova).
  • Float32 컬럼과 const 문자열을 비교할 때, 이제 문자열을 Float64가 아니라 Float32로 읽습니다. #58724 (Raúl Marín).
  • S3 호환성을 개선하고 ECloud EOS 스토리지 지원을 추가했습니다. #58786 (xleoken).
  • 이제 KILL QUERY로 백업/복원 작업을 취소할 수 있습니다. 이 PR은 또한 실행 중인 백업과 복원 작업이 system.processes에서 보이도록 합니다. 아울러 서버 설정에 새로운 설정값 shutdown_wait_backups_and_restores(기본값=true)가 추가되어, 서버 종료 시 실행 중인 모든 백업과 복원 작업이 완료될 때까지 대기할지, 아니면 이를 즉시 취소할지를 지정할 수 있습니다. #58804 (Vitaly Baranov).
  • Avro 포맷에 ZSTD 코덱 지원을 추가했습니다. #58735를 해결했습니다. #58805 (flynn).
  • MySQL 인터페이스에서 net_write_timeoutnet_read_timeout 설정을 지원하게 되었습니다. net_write_timeout은 네이티브 ClickHouse 설정인 send_timeout으로, 마찬가지로 net_read_timeoutreceive_timeout으로 매핑됩니다. MySQL sql_select_limit 설정을 전체 SQL 문이 모두 대문자인 경우에만 설정할 수 있었던 문제를 수정했습니다. #58835 (Serge Klochkov).
  • 동일한 이름의 딕셔너리와 테이블을 생성하려 할 때 발생하는 충돌에 대해 개선된 예외 메시지를 제공합니다. #58841 (Yarik Briukhovetskyi).
  • 사용자 정의 디스크(SQL에서 생성된 디스크)의 경우 서버 설정에서 filesystem_caches_path(모든 filesystem cache에 대한 공통 디렉터리 접두사) 또는 custom_cached_disks_base_directory(사용자 정의 디스크에서 생성된 filesystem cache에만 해당하는 공통 디렉터리 접두사) 중 하나가 반드시 지정되어 있어야 합니다. custom_cached_disks_base_directory는 사용자 정의 디스크에 대해 filesystem_caches_path보다 우선순위가 높으며, 전자가 없을 때만 filesystem_caches_path가 사용됩니다. filesystem cache 설정인 path는 반드시 해당 디렉터리 내부에 있어야 하며, 그렇지 않으면 디스크가 생성되지 않도록 예외가 발생합니다. 이는 이전 버전에서 생성된 디스크가 있고 서버를 업그레이드한 경우에는 영향을 주지 않으며, 이때는 서버가 정상적으로 시작될 수 있도록 예외가 발생하지 않습니다. custom_cached_disks_base_directory는 기본 서버 설정에 /var/lib/clickhouse/caches/로 추가되었습니다. #57825를 종료합니다. #58869 (Kseniia Sumarokova).
  • MySQL 인터페이스가 SHOW WARNINGS/SHOW COUNT(*) WARNINGS 쿼리를 지원하게 되었지만, 반환되는 결과는 항상 빈 결과 집합입니다. #58929 (Serge Klochkov).
  • 병렬 분산 INSERT SELECT를 실행할 때 사용할 수 없는 레플리카는 건너뜁니다. #58931 (Alexander Tokmakov).
  • JSON 형식의 구조화된 로그 포맷을 사용하면서 사람이 읽기 쉬운 텍스트 기반 로그 레벨을 표시합니다. #58936 (Tim Liou).
  • MySQL 인터페이스에서 데이터 타입 별칭을 통해 CAST(x AS SIGNED)CAST(x AS UNSIGNED) SQL 문을 지원하게 되었습니다. SIGNED는 Int64, UNSIGNED는 UInt64에 해당합니다. 이를 통해 Looker Studio와 같은 BI 도구와의 호환성이 향상됩니다. #58954 (Serge Klochkov).
  • Docker 컨테이너에서 작업 디렉터리를 데이터 경로로 변경했습니다. #58975 (cangyin).
  • Azure Blob Storage용 설정 azure_max_unexpected_write_error_retries가 추가되었으며, azure 섹션의 config에서 설정할 수도 있습니다. #59001 (SmitaRKulkarni).
  • 손상된 데이터 레이크 테이블이 있더라도 서버를 시작할 수 있도록 허용합니다. #58625 이슈를 해결합니다. #59080 (Kseniia Sumarokova).
  • Iceberg 테이블 엔진에서 스키마 진화를 무시하고, 테이블 생성 시 사용자에 의해 지정된 스키마 또는 테이블 생성 시 메타데이터에서 파싱된 최신 스키마를 사용하여 모든 데이터를 읽도록 허용합니다. 이는 기본적으로 비활성화되어 있는 iceberg_engine_ignore_schema_evolution 설정을 통해 수행됩니다. 이 설정을 활성화하면 스키마가 진화한 경우에도 모든 데이터 파일이 동일한 스키마로 읽히므로, 잘못된 결과를 초래할 수 있다는 점에 유의해야 합니다. #59133 (Kruglov Pavel).
  • 읽기 전용/한 번만 쓰기 가능한 스토리지에서 변경 가능한 연산(INSERT/ALTER/OPTIMIZE/...)을 금지하고, 적절한 TABLE_IS_READ_ONLY 오류를 반환하도록 하여 잔여 데이터가 남지 않도록 합니다. 또한 한 번만 쓰기 가능한 디스크에서 CREATE/ATTACH 수행 시 format_version.txt와 같은 잔여 파일이 남지 않도록 합니다. ReplicatedMergeTree에 대해서는(MergeTree와 마찬가지로) DROP 명령을 무시합니다. s3_plain에서의 디렉터리 순회(MetadataStorageFromPlainObjectStorage::iterateDirectory)를 수정합니다. 참고로 읽기 전용 디스크는 web 디스크이고, 한 번만 쓰기 가능한 디스크는 s3_plain입니다. #59170 (Azat Khuzhin).
  • 실험적 _block_number 컬럼에서 ALTERmerge를 복잡하게 조합해 사용할 때 논리 오류가 발생할 수 있는 버그를 수정합니다. #56202를 해결하며, #58601를 대체합니다. #59295 (alesapin).
  • Play UI에서 JSON 내부에 예외가 포함되어 반환되는 경우를 인식합니다. #52853에 대한 조정입니다. #59303 (Alexey Milovidov).
  • /binary HTTP 핸들러는 쿼리 문자열(query string)에 user, host 및 선택적으로 password를 지정할 수 있도록 허용합니다. #59311 (Alexey Milovidov).
  • 압축된 인메모리 테이블 백업을 지원합니다. 이를 통해 #57893이(가) 해결되었습니다. #59315 (Alexey Milovidov).
  • BACKUPRESTORE 쿼리에서 FORMAT 절을 지원합니다. #59338 (Vitaly Baranov).
  • concatWithSeparator FUNCTION은 이제 StringFixedString 인자에만 국한되지 않고 임의의 인자 타입을 지원합니다. 예를 들어 SELECT concatWithSeparator('.', 'number', 1)은 이제 number.1을 반환합니다. #59341 (Robert Schulze).

빌드/테스트/패키징 개선

  • clickhouse 바이너리의 별칭을 개선하고(이제 ch/clickhouse는 인자에 따라 clickhouse-local 또는 clickhouse가 됨) 새로운 별칭에 대해 bash 자동 완성을 추가합니다. #58344 (Azat Khuzhin).
  • 모든 설정 변경 사항이 설정 변경 이력에 반영되어 있는지 확인하기 위해 CI에 설정 변경 사항 검사 기능을 추가합니다. #58555 (Kruglov Pavel).
  • stateful 테스트에서 S3에서 직접 attach된 테이블을 사용합니다. #58791 (Alexey Milovidov).
  • 마지막 10만 줄 대신 전체 fuzzer.log를 아카이브로 저장합니다. tail -n 100000 명령은 종종 테이블 정의가 있는 줄을 제거합니다. 예:. #58821 (Dmitry Novik).
  • macOS Aarch64에서 Rust를 활성화합니다(이로 인해 클라이언트에서 skim과 PRQL 언어를 사용한 퍼지 검색이 추가되지만, ClickHouse를 darwin에서 호스팅하는 사용자는 거의 없다고 생각하므로, 주로 클라이언트에서의 퍼지 검색을 위한 것이라고 볼 수 있습니다). #59272 (Azat Khuzhin).
  • x86_64와 ARM이 혼합된 클러스터에서의 집계 문제를 수정합니다. #59132 (Harry Lee).

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

  • 중첩된 LowCardinality에 대한 조인 키 변환을 추가했습니다 #51550 (vdimir).
  • flatten_nested=1인 경우, 실제 Nested 타입만 평탄화하고 Array(Tuple) 전체를 평탄화하지 않도록 했습니다. #56132 (Kruglov Pavel).
  • 삽입 시 프로젝션과 aggregate_functions_null_for_empty 설정과 관련된 버그를 수정했습니다. #56944 (Amos Bird).
  • 만료된 프로필 UUID로 인해 발생할 수 있었던 예외를 수정했습니다 #57263 (Vasily Nemkov).
  • StreamingFormatExecutor에서 읽기 버퍼 처리 방식을 수정했습니다. #57438 (Kruglov Pavel).
  • 뷰로 푸시하는 과정에서 대상 테이블이 DROP된 구체화된 뷰(Materialized View)는 무시합니다 #57520 (Kruglov Pavel).
  • ALTER_METADATA와 MERGE_PARTS 사이에서 발생할 수 있는 경쟁 조건(race condition)을 제거합니다. #57755 (Azat Khuzhin).
  • ROLLUP을 사용하는 GROUP BY에서 표현식 순서와 관련된 버그를 수정합니다 #57786 (Chen768959).
  • 사용 중단된 "zero-copy" 복제 기능에 대한 수정: 손상된 detached 파트가 있는 레플리카를 드롭한 후 누락되던 blob이 발생하는 문제를 수정함 #58333 (Alexander Tokmakov).
  • 사용자가 user_files_path 경로에서 심볼릭 링크를 사용할 수 있도록 허용합니다. #58447 (Duc Canh Le).
  • Graphite 테이블에 agg 함수가 없을 때 발생하던 충돌을 수정했습니다. #58453 (Duc Canh Le).
  • materialized view에서 여러 번 읽기를 허용할 수 있도록 StorageKafka에서의 읽기를 지연했습니다 #58477 (János Benjamin Antal).
  • 서로 교차되는 파트가 발생하는 비정상적인 경우를 수정 #58482 (Alexander Tokmakov).
  • LIMIT만 포함된 쿼리에서는 MergeTreePrefetchedReadPool을 비활성화합니다 #58505 (Maksim Kita).
  • 복원 중에도 일반 데이터베이스를 사용할 수 있도록 함 #58520 (Jihyuk Bok).
  • ORC/Parquet/...에 대한 Apache Hive 스레드풀 기반 읽기를 수정합니다. #58537 (sunny).
  • system.backup_log'의 base_backup_name 컬럼에서 자격 증명 정보가 노출되지 않도록 했습니다 #58550 (Daniel Pozo Escalona).
  • toStartOfInterval에서 밀리초·마이크로초 단위 값 반올림 #58557 (Yarik Briukhovetskyi).
  • ConcurrentHashJoin에서 max_joined_block_rows 설정을 비활성화합니다 #58595 (vdimir).
  • 이전 분석기에서 널 허용을 사용하는 조인 동작을 수정 #58596 (vdimir).
  • makeDateTime64: 상수가 아닌 fraction 인수를 허용하도록 했습니다 #58597 (Robert Schulze).
  • 인라인 프레임을 심볼화하는 과정에서 발생할 수 있는 NULL 포인터 역참조를 수정했습니다. #58607 (Azat Khuzhin).
  • 사용자 재생성 또는 역할 전환 시 쿼리 캐시 항목 간 격리를 개선합니다 #58611 (Robert Schulze).
  • PROJECTION 최적화 시 파티션 키 분석이 올바르게 동작하지 않던 문제를 수정합니다 #58638 (Amos Bird).
  • 쿼리 캐시: USER별 QUOTA 문제 수정 #58731 (Robert Schulze).
  • 병렬 윈도우 함수에서 스트림 파티셔닝을 수정했습니다 #58739 (Dmitry Novik).
  • addBatchLookupTable8에서 예외를 던질 때 발생하던 destroy의 이중 호출 문제를 수정함 #58745 (Raúl Marín).
  • 종료 중에는 Keeper에서 요청을 처리하지 않습니다 #58765 (Antonio Andelic).
  • SlabsPolygonIndex::find에서 발생하는 널 포인터 역참조를 수정했습니다 #58771 (Yarik Briukhovetskyi).
  • LowCardinality(널 허용) 컬럼에서 JSONExtract 함수 수정 #58808 (vdimir).
  • CREATE와 DROP을 사용해 매우 많은 테이블을 생성할 때 메모리 사용량이 예상치 못하게 누적되던 문제를 수정했습니다. #58831 (Maksim Kita).
  • mv에서 다중 읽기 파일 로그 저장 #58877 (János Benjamin Antal).
  • S3 액세스 키 ID에 대한 제한. #58900 (MikhailBurdukov).
  • clickhouse-local에서 제안 정보를 불러오는 동안 발생할 수 있었던 크래시를 수정했습니다 #58907 (Kruglov Pavel).
  • indexHint 사용 시 발생하던 크래시를 수정합니다 #58911 (Dmitry Novik).
  • 서버 재시작 후 StorageURL에서 헤더가 누락되던 문제 수정 #58933 (Michael Kolupaev).
  • Analyzer: storage를 insertion block으로 교체하는 기능을 수정합니다 #58958 (Yakov Olkhovskiy).
  • ReadBufferFromZipArchive에서 seek 동작을 수정합니다 #58966 (Michael Kolupaev).
  • 실험적인 역 인덱스(프로덕션 환경에서는 사용하지 마십시오)에 대한 수정: 이제 역 인덱스에 대해 DROP INDEX를 실행하면 해당하는 모든 파일이 영구 저장소에서 제거됩니다 #59040 (mochi).
  • query_factories_info에서 발생하던 데이터 레이스를 수정합니다 #59049 (Kseniia Sumarokova).
  • "Too many redirects" 오류 발생 시 재시도를 비활성화합니다 #59099 (skyoct).
  • 시작되지 않은 데이터베이스의 종료 시 발생하는 데드락을 수정합니다 #59137 (Sergei Trifonov).
  • 수정: 분산 쿼리에서 LIMIT BY 및 LIMIT 처리 #59153 (Igor Nikonov).
  • toString에서 널 허용 시간대를 사용할 때 발생하던 크래시를 수정했습니다. #59190 (Yarik Briukhovetskyi).
  • 잘못된 파일 경로로 인해 Iceberg 메타데이터에서 발생하는 비정상 종료 문제를 수정함 #59275 (Kruglov Pavel).
  • Rust 타깃 선택 항목에서 아키텍처 이름을 수정합니다 #59307 (p1rattttt).
  • system.tables에서 IN 절의 서브쿼리를 사용해 쿼리할 때 「준비되지 않은 Set」과 관련된 논리 오류를 수정합니다. #59351 (Nikolai Kochetov).

2023년 변경 내역

  • 목차
  • ClickHouse 24.12 릴리스, 2024-12-19. 발표 자료, 영상
  • ClickHouse 24.11 릴리스(2024-11-26). 발표 자료, 동영상
  • ClickHouse 24.10 릴리스(2024-10-31). 발표 자료, 동영상
  • ClickHouse 24.9 릴리스 (2024-09-26). 발표 자료, 영상
  • ClickHouse 24.8 LTS 릴리스, 2024년 8월 20일. 발표 자료, 영상
  • ClickHouse 24.7 릴리스, 2024-07-30. 발표 자료, 동영상
  • ClickHouse 24.6 릴리스, 2024-07-01. 발표 자료, 동영상
  • ClickHouse 24.5 릴리스, 2024-05-30. 발표 자료, 동영상
  • ClickHouse 24.4 릴리스, 2024-04-30. 발표 자료, 영상
  • ClickHouse 24.3 LTS 릴리스, 2024-03-27. 발표 자료, 동영상
  • ClickHouse 24.2 릴리스, 2024-02-29. 발표 자료, 동영상
  • ClickHouse 24.1 릴리스, 2024-01-30. 발표 자료, 동영상
  • 2023년 변경 내역