ClickHouse 릴리스 22.12, 2022-12-15. 발표자료, 동영상
업그레이드 참고 사항
String인수를 사용하는min,max,any*,argMin,argMax집계 함수 상태의 직렬화/역직렬화((de)serialization)에서 이전 버전과 호환되지 않던 문제를 수정했습니다. 이 비호환성은 22.9, 22.10, 22.11 브랜치에 영향을 미칩니다(각각 22.9.6, 22.10.4, 22.11.2부터 수정됨). 22.3, 22.7, 22.8 브랜치의 일부 마이너 릴리스도 영향을 받습니다: 22.3.13…22.3.14(22.3.15부터 수정됨), 22.8.6…22.8.9(22.8.10부터 수정됨), 22.7.6 이상(22.7에서는 수정되지 않을 예정이므로 22.7.*에서 22.8.10 이상으로 업그레이드하는 것을 권장합니다). 이 릴리스 노트는 영향을 받는 버전을 한 번도 사용한 적이 없는 사용자에게는 해당되지 않습니다. 호환되지 않는 버전은 위에 언급한 집계 함수의 상태를 읽을 때 문자열 끝에 추가'\0'를 붙입니다. 예를 들어, 이전 버전이anyState('foobar')의 상태를state_column에 저장했다면, 호환되지 않는 버전은anyMerge(state_column)에서'foobar\0'를 출력합니다. 또한 호환되지 않는 버전은 집계 함수의 상태를 끝의'\0'없이 기록합니다. 수정이 포함된 최신 버전은 한 가지 예외적인 경우를 제외하면, 호환되지 않는 버전을 포함한 모든 버전이 기록한 데이터를 올바르게 읽을 수 있습니다. 호환되지 않는 버전이 실제로 null 문자로 끝나는 문자열을 포함한 상태를 저장한 경우, 최신 버전은 영향을 받는 집계 함수의 상태를 읽을 때 끝의'\0'를 잘라냅니다. 예를 들어, 호환되지 않는 버전이anyState('abrac\0dabra\0')의 상태를state_column에 저장했다면, 최신 버전은anyMerge(state_column)에서'abrac\0dabra'를 출력합니다. 이 문제는 호환되지 않는 버전이 이전 버전 또는 최신 버전과 함께 cluster에서 동작할 때 분산 쿼리에도 영향을 줍니다. #43038 (Alexander Tokmakov, Raúl Marín). 참고: 모든 official ClickHouse builds에는 이미 해당 패치가 포함되어 있습니다. 이는 비공식 서드파티 빌드에는 반드시 해당되지 않으므로, 이러한 빌드는 사용하지 않는 것이 좋습니다.
새 기능
BSONEachRow입력/출력 포맷을 추가했습니다. 이 포맷에서는 ClickHouse가 각 행을 개별 BSON 문서로 포맷하거나 파싱하고, 각 컬럼은 컬럼 이름을 키로 하는 단일 BSON 필드로 포맷하거나 파싱합니다. #42033 (mark-polokhov).grace_hash조인 알고리즘을 추가했습니다.SET join_algorithm = 'grace_hash'로 활성화할 수 있습니다. #38191 (BigRedEye, Vladimir C).- 사용자 생성 및 변경 시 비밀번호 복잡성 규칙과 검사 항목을 설정할 수 있습니다. #43719 (Nikolay Degterinsky).
- 로그의 민감한 정보를 마스킹하고, 쿼리
SHOW CREATE TABLE및SELECT FROM system.tables출력에서 민감한 부분도 마스킹합니다. 또한 #41418도 해결합니다. #43227 (Vitaly Baranov). GROUP BY ALL구문 추가: #37631. #42265 (刘陶峰).FROM table SELECT column구문이 추가되었습니다. #41095 (Nikolay Degterinsky).- Spark SQL 호환성을 위해 함수
concatWithSeparator를 추가하고,concat_ws를 별칭으로 추가했습니다.concatAssumeInjective와 마찬가지로 GROUP BY 최적화를 지원하는 변형으로 함수concatWithSeparatorAssumeInjective도 추가했습니다. #43749 (李扬). - 고정 소수점 정밀도가 고정된 decimal 연산을 위한
multiplyDecimal및divideDecimal함수를 추가했습니다. #42438 (Andrey Zvonov). - 현재 이동 중인 파트 목록을 제공하는
system.moves테이블이 추가되었습니다. #42660 (Sergei Trifonov). - ClickHouse Keeper에 내장된 Prometheus 엔드포인트 지원이 추가되었습니다. #43087 (Antonio Andelic).
_를 구분자로 사용하는 숫자 리터럴을 지원합니다. 예를 들어1_000_000과 같습니다. #43925 (jh0x).cutURLParameter함수의 두 번째 매개변수로 배열을 사용할 수 있도록 추가되었습니다. 이를 통해 여러 매개변수를 제거할 수 있습니다. #6827를 해결했습니다. #43788 (Roman Vasin).system.data_skipping_indicestable에 인덱스 표현식이 포함된 컬럼을 추가했습니다. #43308 (Guillaume Tassery).- 시스템 테이블(system table)
databases에engine_full컬럼을 추가해, 시스템 테이블(system tables)을 통해 데이터베이스의 전체 엔진 정의에 접근할 수 있게 했습니다. #43468 (凌涛). - 새로운 해시 함수 xxh3가 추가되었습니다. 또한 라이브러리 업데이트로 인해 ARM에서
xxHash32와xxHash64의 성능도 향상되었습니다. #43411 (Nikita Taranov). - MergeTree 설정에 대한 제약 조건(constraints)을 정의하는 기능이 추가되었습니다. 예를 들어 사용자가
storage_policy를 재정의하지 못하도록 할 수 있습니다. #43903 (Sergei Trifonov). - 모든 JSON 입력 형식에서 중첩된 JSON 객체를 String으로 파싱할 수 있게 해주는 새로운 설정
input_format_json_read_objects_as_strings을 추가했습니다. 이 설정은 기본적으로 비활성화되어 있습니다. #44052 (Kruglov Pavel).
실험적 기능
- 비동기 삽입에 대한 중복 제거를 지원합니다. 이 변경 이전에는 여러 개의 작은 삽입이 하나의 삽입 배치에 함께 포함되었기 때문에 비동기 삽입에서 중복 제거를 지원하지 않았습니다. #38075를 해결합니다. #43304 (Han Fei).
- 실험적인 Annoy(벡터 유사도 검색) 인덱스에 cosine distance 지원을 추가했습니다. #42778 (Filatenkov Artur).
CREATE / ALTER / DROP NAMED COLLECTION쿼리를 추가했습니다. #43252 (Kseniia Sumarokova). 이 기능은 개발 중이며 22.12 버전 기준으로 이 쿼리는 아직 실제로 동작하지 않습니다. 혼동을 피하기 위해 이 변경 로그 항목만 추가했습니다. 명명된 컬렉션에 대한 기본 접근 권한을 config에 정의된 사용자로 제한합니다. 이를 보려면show_named_collections = 1을 설정해야 합니다. #43325 (Kseniia Sumarokova).system.named_collections테이블이 도입되었습니다 #43147 (Kseniia Sumarokova).
성능 개선
- 설정
max_streams_for_merge_tree_reading및allow_asynchronous_read_from_io_pool_for_merge_tree를 추가했습니다.max_streams_for_merge_tree_reading설정은 MergeTree 테이블의 읽기 스트림 수를 제한합니다.allow_asynchronous_read_from_io_pool_for_merge_tree설정은 백그라운드 I/O 풀을 통해MergeTree테이블을 읽을 수 있도록 합니다. 이 설정을max_streams_to_max_threads_ratio또는max_streams_for_merge_tree_reading와 함께 사용하면 I/O 바운드 쿼리에서 성능이 향상될 수 있습니다. #43260 (Nikolai Kochetov). 스토리지의 지연 시간이 높고 CPU 수가 적으며 데이터 파트 수가 많은 경우 성능이 최대 100배까지 향상됩니다. - 설정
merge_tree_min_rows_for_concurrent_read_for_remote_filesystem/merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem이 adaptive granularity를 제대로 반영하지 못했습니다. 큰 행은 읽기 행 수를 줄이지 못했으며(merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read에서는 줄어들었음), 이로 인해 원격 파일 시스템 사용 시 메모리 사용량이 높아질 수 있었습니다. #43965 (Nikolai Kochetov). - 머지할 파트를 선택할 때 ZooKeeper 또는 ClickHouse Keeper에 보내는 목록 조회 요청 수를 최적화했습니다. 이전에는 일부 경우 수천 건의 요청이 발생할 수 있었습니다. #43647을 수정했습니다. #43675 (Alexander Tokmakov).
max_size_to_preallocate_for_aggregation값이 너무 작으면 이제 최적화를 건너뜁니다. 이 설정의 기본값도10^8로 증가했습니다. #43945 (Nikita Taranov).- 오래된 데이터 파트 정리를 생략하여 server 종료 속도를 높였습니다. https://github.com/ClickHouse/ClickHouse/pull/41145 이후에는 이 작업이 더 이상 필요하지 않기 때문입니다. #43760 (Sema Checherinda).
- 이제
enable_memory_bound_merging_of_aggregation_results가 설정된 경우, initiator에서의 머지에도 로컬 집계 결과 머지와 동일한 메모리 제한 방식이 사용됩니다. #40879 (Nikita Taranov). - Keeper 개선: 이제 복제와 병렬로 로그를 디스크에 동기화하려고 시도합니다. #43450 (Antonio Andelic).
- Keeper 개선: 이제 요청을 더 자주 배칭합니다. 배칭은 새로운 설정
max_requests_quick_batch_size로 제어할 수 있습니다. #43686 (Antonio Andelic).
개선 사항
- 참조 종속성을 구현하고, 이를 사용해 백업에서 복원할 때 올바른 순서로 테이블을 생성합니다. #43834 (Vitaly Baranov).
- 시작 시 로딩 과정에서 실패가 발생하지 않도록
CREATE쿼리에서 UDFs를 치환하도록 변경했습니다. 또한 이제 UDFs를 컬럼의DEFAULT표현식으로 사용할 수 있습니다. #43539 (Antonio Andelic). - 다음 쿼리가 파트를 삭제하는 방식이 변경되었습니다: TRUNCATE TABLE, ALTER TABLE DROP PART, ALTER TABLE DROP PARTITION. 이제 이 쿼리들은 기존 파트를 덮는 빈 파트를 생성합니다. 그 결과 TRUNCATE 쿼리는 후속 배타적 잠금(exclusive lock) 없이 수행되므로 동시 읽기가 잠기지 않습니다. 또한 이 모든 쿼리에서 내구성도 확보했습니다. 요청이 성공하면 나중에 되살아난 파트가 나타나지 않습니다. 원자성은 트랜잭션 범위에서만 보장된다는 점에 유의하십시오. #41145 (Sema Checherinda).
SET param_x쿼리에서는 더 이상 매개변수 값에 문자열을 수동으로 직렬화할 필요가 없습니다. 예를 들어, 쿼리SET param_a = '[\'a\', \'b\']'는 이제SET param_a = ['a', 'b']처럼 작성할 수 있습니다. #41874 (Nikolay Degterinsky).- 클라이언트에서 STDIN을 통해 읽는 동안 진행 표시에서 읽은 행 수를 표시합니다. #43423를 해결합니다. #43442 (Kseniia Sumarokova).
- S3 테이블 함수 / 엔진에서 읽는 동안 진행률 표시줄이 표시됩니다. #43454 (Kseniia Sumarokova).
- 진행률 표시줄에 읽은 행과 기록된 행이 모두 표시됩니다. #43496 (Ilya Yatsishin).
filesystemAvailable및 관련 함수는 디스크 이름을 지정하는 선택적 인수 1개를 지원하며,filesystemFree는filesystemUnreserved로 변경되었습니다. #35076를 해결했습니다. #42064 (flynn).- LDAP 통합: search_limit의 기본값을 256으로 높이고, 이를 임의의 값으로 변경할 수 있는 LDAP 서버 구성 옵션을 추가했습니다. 해결: #42276. #42461 (Vasily Nemkov).
- 예외 메시지에서도 민감한 정보가 제거되도록 허용합니다(설정 파일의
query_masking_rules참조). #41418을 해결합니다. #42940 (filimonov). - MySQL 호환성을 위해
SHOW FULL TABLES ...같은 쿼리를 지원합니다. #43910 (Filatenkov Artur). - Keeper 개선: 노드를 leader로 수동으로 지정할 수 있는 4lw 명령
rqld를 추가했습니다. #43026 (JackyWoo). - 쿼리에서 분산 async INSERT에 대한 연결 타임아웃 설정을 적용합니다. #43156 (Azat Khuzhin).
unhex함수가 이제FixedString인수도 지원합니다. issue42369. #43207 (DR).- TTL 규칙에 따라 완전히 만료된 파트 삭제에 우선순위를 둡니다. #42869를 참조하십시오. #43222 (zhongyuankai).
- clickhouse-client에서 CPU 부하를 더 정확하고 신속하게 표시합니다. #43307 (Sergei Trifonov).
- 스토리지
S3및 테이블 함수s3에서Parquet,Arrow,ORC포맷으로 중첩 타입의 서브컬럼을 읽을 수 있도록 지원합니다. #43329 (chen). system.parts테이블에table_uuid컬럼이 추가되었습니다. #43404 (Azat Khuzhin).- 비대화형 모드에서 로컬에서 처리된 행 수를 표시하는 클라이언트 옵션(
--print-num-processed-rows)이 추가되었습니다. #43407 (jh0x). - 쿼리 계획(query plan)에
aggregation-in-order집계 최적화를 구현했습니다. 이 기능은 기본적으로 활성화되어 있지만,optimize_aggregation_in_order와 함께 사용할 때만 동작하며 이 설정은 기본적으로 비활성화되어 있습니다. 이전 AST 기반 버전을 사용하려면query_plan_aggregation_in_order = 0으로 설정하십시오. #43592 (Nikolai Kochetov). - 현재 스택, 프로파일 이벤트 이름, 증가값을 포함하여
trace_type = 'ProfileEvent'인 profile events를 증가할 때마다system.trace_log에 수집할 수 있도록 했습니다. 이 기능은trace_profile_events설정으로 활성화할 수 있으며, 쿼리 성능을 분석하는 데 사용할 수 있습니다. #43639 (Anton Popov). input_format_max_binary_string_size라는 새로운 설정을 추가해 RowBinary 포맷에서 문자열 크기를 제한합니다. #43842 (Kruglov Pavel).- ClickHouse가 원격 HTTP 서버에 요청을 보냈을 때 오류가 반환되면, 예외 메시지에 숫자 HTTP 코드가 올바르게 표시되지 않는 문제가 있었습니다. #43919를 해결했습니다. #43920 (Alexey Milovidov).
- 여러 조인 최적화가 진행되는 경우에도 쿼리 오류를 올바르게 보고합니다. #43583 (Salvatore).
빌드/테스트/패키징 개선
- 이제 systemd 통합이 서비스가 실제로 시작되어 요청을 처리할 준비가 되었음을 systemd에 올바르게 알립니다. #43400 (Коренберг Марк).
- OpenSSL FIPS Module을 사용해 OpenSSL과 함께 ClickHouse를 빌드하는 옵션이 추가되었습니다. 이 빌드 유형은 보안 검증을 위한 테스트가 수행되지 않았으며, 지원되지 않습니다. #43991 (Boris Kuschel).
- 이전 PR에서 구현된 새로운
DeflateQpl압축 코덱으로 업그레이드했습니다(자세한 내용: https://github.com/ClickHouse/ClickHouse/pull/39494). 이 패치는 다음과 같은 측면에서 코덱을 개선합니다. 1. QPL v0.2.0에서 QPL v0.3.0으로 업그레이드 Intel® Query Processing Library (QPL) 2. QPL v0.3.0의 빌드 문제를 해결하기 위해 CMake 파일 개선 3. QPL v0.2.0에서 런타임 로딩(dlopen)하는 대신, 빌드 시점에 QPL 라이브러리를 libaccel-config와 링크 4. CompressionCodecDeflateQpl.cpp의 로그 출력 문제 수정. #44024 (jasperzhu).
버그 수정(공식 안정 또는 프리스테이블 릴리스에서 사용자에게 드러나는 오동작)
- 비동기 삽입 사용 중 교착 상태가 발생할 수 있던 버그를 수정했습니다. #43233 (Anton Popov).
- AST 수준 최적화
optimize_normalize_count_variants의 잘못된 로직 일부를 수정했습니다. #43873 (Duc Canh Le). - 레플리카 간 체크섬이 일치하지 않을 때(예: 업그레이드 시 데이터 포맷 변경으로 인해 발생) 뮤테이션이 진행되지 않던 문제를 수정했습니다. #36877 (nvartolomei).
hdfsCluster테이블 함수에서 작동하지 않던skip_unavailable_shards최적화를 수정했습니다. #43236 (chen).s3의?와일드카드 지원 문제를 수정했습니다. #42731을 해결했습니다. #43253 (chen).Nullable요소를 포함한 배열에서arrayFirstOrNull및arrayLastOrNull함수가 null을 반환하는 문제를 수정했습니다. #43274 (Duc Canh Le).- Kafka 테이블과 관련된
UserTimeMicroseconds/SystemTimeMicroseconds계산 오류를 수정했습니다. #42791 (Azat Khuzhin). web디스크에서 예외를 숨기지 않도록 했습니다.web디스크의 재시도 문제를 수정했습니다. #42800 (Azat Khuzhin).- 삽입과 구체화된 뷰(materialized view) 삭제 사이의 (논리적) race condition을 수정했습니다. 실행 시작 시점에는 구체화된 뷰가 삽입의 종속성으로 존재했지만, 삽입 chain이 이에 접근하려는 시점에는 테이블이 이미 삭제된 상태여서, 구체화된 뷰가 INSERT와 동시에 삭제되면 race condition이 발생했습니다. 이로 인해
UNKNOWN_TABLE또는TABLE_IS_DROPPED예외가 발생해 삽입이 중단되었습니다. 이번 변경 이후에는 종속성이 사라진 경우 이러한 예외를 피하고 삽입을 계속 진행합니다. #43161 (AlfVII). quantiles함수에서 정의되지 않은 동작을 수정했습니다. 이 문제로 인해 초기화되지 않은 메모리가 사용될 수 있습니다. 퍼저가 발견했습니다. 이로써 #44066가 해결되었습니다. #44067 (Alexey Milovidov).CompressionCodecDelta에 압축되지 않은 크기가 0인 경우에 대한 추가 검사가 추가되었습니다. #43255 (Nikita Taranov).- 배열 내 데이터가 일관되지 않은 문제를 방지하기 위해 Parquet의 배열을 평탄화합니다. 이러한 잘못된 파일은 Apache Iceberg에서 생성될 수 있습니다. #43297 (Arthur Passos).
- short-circuit 함수 실행을 사용할 때
LowCardinality컬럼에서 발생하던 잘못된 CAST를 수정했습니다. #43311 (Kruglov Pavel). Merge엔진을 사용하는 테이블에서 prewhere 최적화와 함께SAMPLE BY를 사용하는 쿼리의 문제를 수정했습니다. #43315 (Antonio Andelic).- 스토리지 정책이 변경된 경우에도 테이블을 로드할 수 있도록
MergeTreeData의format_version파일 내용을 확인하고 비교합니다. #43328 (Antonio Andelic). Buffer테이블에 INSERT하는 과정에서 발생할 수 있는(가능성은 매우 낮은) “롤백할 컬럼이 없음” 논리 오류를 수정했습니다. #43336 (Azat Khuzhin).allow_function_parameters가 설정된 경우, 파서가 하나의 함수 안에서 소괄호를 무제한으로 구문 분석할 수 있었던 버그를 수정했습니다. #43350 (Nikolay Degterinsky).MaterializeMySQL(실험적 기능)는 DDLdrop table t1, t2를 지원하며, 대부분의 MySQL DROP DDL과 호환됩니다. #43366 (zzsmdfj).session_log(실험 기능): 매우 드물게 설정 프로필이 꼬인 경우 session_log 항목을 생성하지 못해 로그인할 수 없던 문제를 수정했습니다. #42641 (Vasily Nemkov).- 함수
if/multiIf에서 발생할 수 있는Cannot create non-empty column with type Nothing오류를 수정했습니다. #43356를 해결합니다. #43368 (Kruglov Pavel). - 행 수준 필터에서 컬럼의 기본값을 사용할 때 발생하던 버그를 수정했습니다. #43387 (Alexander Gololobov).
DISTINCT+LIMIT BY+LIMIT를 사용하는 쿼리는 예상보다 적은 행을 반환할 수 있습니다. #43377을 해결합니다. #43410 (Igor Nikonov).Nullable(Decimal(...))에서sumMap문제를 수정했습니다. #43414 (Azat Khuzhin).- macOS에서 hour/minute에 대한
date_diff문제를 수정했습니다. #42742를 해결했습니다. #43466 (zzsmdfj). - 머지/뮤테이션으로 인해 메모리 집계가 잘못되던 문제를 바로잡았습니다. #43516 (Azat Khuzhin).
toString(enum)이 포함된 조건에서 기본 키(primary key) 분석 문제를 수정했습니다. #43596 (Nikita Taranov). 이 오류는 @tisonkun이 발견했습니다.- 파티션 ATTACH가 완료된 후
clickhouse-copier가 상태와 Keeper의attach_is_done를 업데이트할 때 일관성이 유지되도록 했습니다. #43602 (lzydmxy). Replicated데이터베이스(실험적 기능)의 손실된 레플리카를 복구하는 동안, 두 테이블 이름을 원자적으로 맞바꿔야 하는 상황이 있을 수 있습니다(EXCHANGE 사용). 이전에는 RENAME 쿼리 2개를 사용하려고 했지만, 이는 명백히 실패했고 더 나아가 데이터베이스 레플리카의 전체 복구 프로세스까지 실패하게 했습니다. #43628 (Nikita Mikhaylov).s3Cluster함수에서NOT_FOUND_COLUMN_IN_BLOCK오류가 발생하는 문제를 수정했습니다. #43534를 해결합니다. #43629 (chen).- 키 이름은 같지만 중첩 수준이 다른 배열이 포함된 JSON 객체를 구문 분석하는 과정에서 발생할 수 있는 논리적 오류
Array sizes mismatched를 수정했습니다. #43569를 종료합니다. #43693 (Kruglov Pavel). - 분산
GROUP BY에서 집계 키에ALIAS컬럼이 포함된 경우 발생할 수 있던 예외를 수정했습니다. #43709 (Nikita Taranov). - zero-copy 복제(Experimental 기능)가 활성화되어 사용 중일 때 프로젝션이 손상될 수 있는 버그를 수정했습니다. #43764 (alesapin).
- AWS S3의 매우 큰 객체에 멀티파트 업로드를 사용하도록 수정했습니다. #43824 (ianton-ru).
ON CLUSTER를 사용하는ALTER ... RESET SETTING이 수정되었습니다. 이전에는 하나의 레플리카에만 적용될 수 있었습니다. #43843를 해결합니다. #43848 (Elena Torró).- 오른쪽 피연산자에
Join테이블 엔진이 있는 JOIN에서USING을 사용할 때 발생하는 논리 오류를 수정했습니다. #43963 (Vladimir C).Join테이블 엔진에서 키 순서가 잘못되는 버그를 수정했습니다. #44012 (Vladimir C). - Keeper 수정: Raft용 interserver 포트가 이미 사용 중인 경우 예외를 발생시킵니다. #43984 (Antonio Andelic).
- 서브쿼리에서 불필요한 컬럼 프루닝이 발생할 때 ORDER BY 위치 인수(예시:
ORDER BY 1, 2) 처리 문제를 수정했습니다. #43964를 해결합니다. #43987 (Kseniia Sumarokova). - 하위 쿼리에 HAVING은 포함되어 있지만 실제 집계가 없을 때 발생하던 예외를 수정했습니다. #44051 (Nikita Taranov).
- S3 멀티파트 업로드의 레이스 컨디션을 수정했습니다. 이 문제로 인해 백업에서 복원하는 동안
Part number must be an integer between 1 and 10000, inclusive. (S3_ERROR)오류가 발생할 수 있었습니다. #44065 (Vitaly Baranov).
ClickHouse 릴리스 22.11, 2022-11-17. 발표 자료, 비디오
하위 호환되지 않는 변경 사항
JSONExtract계열 함수는 이제 요청된 형식으로의 강제 변환을 시도합니다. #41502 (Márcio Martins).
새 기능
- ClickHouse Keeper와의 세션이 끊어졌을 때 ReplicatedMergeTree에 대한 INSERT 중 재시도를 지원합니다. 이는 장애 허용뿐 아니라, keeper가 재시작되더라도(예: 업그레이드로 인해) 삽입 중 사용자에게 오류를 반환하지 않도록 하여 더 나은 사용자 경험을 제공하는 것을 목표로 합니다. #42607 (Igor Nikonov).
- S3에 있는 테이블에만 사용할 수 있는 읽기 전용
Hudi및DeltaLake테이블 엔진을 추가했습니다. #41054 (Daniil Rubin, Kseniia Sumarokova). - 테이블 함수
hudi와deltaLake를 추가했습니다. #43080 (flynn). - 복합 시간 인터벌을 지원합니다. 1. 이제 인터벌에 대해 덧셈, 뺄셈 및 부호 반전 연산을 사용할 수 있습니다. 인터벌의 타입이 서로 다른 경우, 해당 타입들로 이루어진 Tuple로 변환됩니다. 2. 인터벌의 튜플은 Date/DateTime 필드에 더하거나 Date/DateTime 필드에서 뺄 수 있습니다. 3. 서로 다른 타입의 인터벌을 파싱하는 기능을 추가했습니다. 예시:
INTERVAL '1 HOUR 1 MINUTE 1 SECOND'. #42195 (Nikolay Degterinsky). - 파일 시스템과 S3에서 디렉터리를 재귀적으로 탐색할 수 있도록
**glob 지원이 추가되었습니다. #36316을 해결합니다. #42376 (SmitaRKulkarni). - 한 번 쓰고 여러 번 읽는 작업용
s3_plain디스크 유형을 도입합니다.s3_plain디스크에서MergeTree테이블의ATTACH를 구현합니다. #42628 (Azat Khuzhin). system.query_log에 적용된 행 수준 정책 정보를 추가했습니다. #39819 (Vladimir Chebotaryov).- ClickHouse Keeper에서 스냅샷을 수동으로 생성하는 4글자 명령
csnp를 추가했습니다. 또한 특정 노드의 Raft 정보를 가져올 수 있도록lgif도 추가했습니다(예: 마지막으로 생성된 스냅샷의 인덱스, 마지막으로 커밋된 로그 인덱스). #41766 (JackyWoo). - Apache Spark의
ascii함수와 같은 기능을 추가했습니다: https://spark.apache.org/docs/latest/api/sql/#ascii. #42670 (李扬). - 나머지 연산을 기반으로 음수가 아닌 결과를 반환하는 함수
pmod를 추가했습니다. #42755 (李扬). - 함수
formatReadableDecimalSize가 추가되었습니다. #42774 (Alejandro). - Apache Spark 또는 Impala의
rand함수와 유사한randCanonical함수를 추가했습니다. 이 함수는 [0, 1) 구간에서 서로 독립적이고 동일한 분포를 따르는 균등분포 값의 의사 난수 결과를 생성합니다. #43124 (李扬). - 함수
displayName를 추가했으며, #36770을 종료합니다. #37681 (hongbin). min_age_to_force_merge_on_partition_only설정을 추가하여 오래된 파트를 전체 파티션 단위에서만 최적화할 수 있도록 했습니다. #42659 (Antonio Andelic).- 임의 구조의 이름이 지정된 컬렉션, 접근 유형,
system.named_collections에 대한 범용 구현이 추가되었습니다. #43147 (Kseniia Sumarokova).
성능 개선
match함수는 문자열 prefix 조건에서 인덱스를 사용할 수 있습니다. 이로써 #37333이 해결되었습니다. #42458 (clarkcaoliu).- AND 및 OR 연산자가 연속으로 사용될 때 속도를 향상했습니다. #42214 (Zhiguo Zhou).
LineAsString입력 형식에 대한 병렬 parsing을 지원합니다. 성능이 소폭 향상됩니다. 이로써 #42502가 해결되었습니다. #42780 (Kruglov Pavel).- ClickHouse Keeper 성능 개선: 커밋되지 않은 상태가 있는 서로 다른 노드가 많은 경우 커밋 성능을 개선했습니다. 이는 follower 노드가 충분히 빠르게 동기화되지 못하는 경우에 도움이 됩니다. #42926 (Antonio Andelic).
NOT LIKE 'prefix%'와 같은 조건에서도 프라이머리 인덱스를 사용할 수 있습니다. #42209 (Duc Canh Le).
실험적 기능
Array(JSON)와 같이 다른 타입 내부에서Object타입을 지원합니다. #36969 (Anton Popov).- MaterializedMySQL에서 MySQL binlog의 SAVEPOINT 이벤트를 무시합니다. #42931 (zzsmdfj). MaterializedMySQL에서 SAVEPOINT 쿼리를 처리(무시)합니다. #43086 (Stig Bakken).
개선 사항
- 작은 LIMIT가 있는 단순한 쿼리는 읽어야 할 예상 행(row) 수를 올바르게 산정하므로 임계값이 제대로 확인됩니다. #7071을 해결합니다. #42580 (Han Fei).
- INSERT VALUES 쿼리에서 대화형 매개변수를 지원하도록 했습니다. #43077 (Nikolay Degterinsky).
system.table_functions에 새 필드allow_readonly를 추가하여 readonly 모드에서도 테이블 함수를 사용할 수 있게 했습니다. #42414을 해결합니다. 구현: *system.table_functions테이블에 새 필드 allow_readonly를 추가했습니다. * readonly 모드에서 테이블 함수를 사용할 수 있도록 새 필드 allow_readonly를 사용하게 업데이트했습니다. 테스트: * 파일 시스템 테스트tests/queries/0_stateless/02473_functions_in_readonly_mode.sh를 추가했습니다. 문서: * 테이블 함수에 대한 영어 문서를 업데이트했습니다. #42708 (SmitaRKulkarni).system.asynchronous_metrics에 내장 문서가 추가되었습니다. 이 문서는 Prometheus로도 내보내집니다.cache디스크 관련 메트릭 오류를 수정했습니다. 이전에는 모든cache디스크가 아니라 임의의cache디스크 하나에 대해서만 계산되었습니다. 이로써 #7644가 해결되었습니다. #43194 (Alexey Milovidov).- 스로틀링 알고리즘이 토큰 버킷 방식으로 변경되었습니다. #42665 (Sergei Trifonov).
- 비밀번호와 비밀 키를
system.query_log,/var/log/clickhouse-server/*.log, 그리고 오류 메시지에서 모두 마스킹합니다. #42484 (Vitaly Baranov). - 가져온 파트가 덮는 파트를 제거합니다(복제 지연이 증가할 가능성을 방지하기 위해). #39737 (Azat Khuzhin).
/dev/tty를 사용할 수 있으면 clickhouse-client와 clickhouse-local의 진행 상황이 STDERR에 기록되지 않고 터미널에 직접 표시됩니다. 따라서 STDERR를 파일로 리디렉션하더라도 진행 상황을 확인할 수 있으며, 터미널 이스케이프 시퀀스로 파일이 오염되지 않습니다. 진행 상황 표시는--progress false로 비활성화할 수 있습니다. 이 변경으로 #32238이 해결되었습니다. #42003 (Alexey Milovidov).- base64 인코딩 함수에
FixedString입력 지원을 추가했습니다. #42285 (ltrk2). system.detached_parts에bytes_on_disk및path컬럼을 추가합니다. #42264를 해결했습니다. #42303 (chen).- 테이블 함수에서 삽입 테이블의 구조를 사용하는 방식을 개선했습니다. 이제 설정
use_structure_from_insertion_table_in_table_functions에 새로운 값2를 사용할 수 있으며, 이는 ClickHouse가 삽입 테이블의 구조를 사용할 수 있는지 자동으로 판단하려고 시도함을 의미합니다. #40028을 해결했습니다. #42320 (Kruglov Pavel). - INSERT FROM INFILE에서 진행 표시가 되지 않던 문제를 수정했습니다. #42548를 해결했습니다. #42634 (chen).
- 관련 함수에서 반환할 최대 token 수를 지정할 수 있도록
tokens함수를 리팩터링했습니다(기본적으로 비활성화됨). #42673 (李扬). formatDateTime및FROM_UNIXTIME함수에서 이제Date32인수를 사용할 수 있습니다. #42737 (Roman Vasin).- tzdata를 2022f로 업데이트합니다. 멕시코는 이제 미국 국경 인근을 제외하고는 DST를 더 이상 시행하지 않습니다: https://www.timeanddate.com/news/time/mexico-abolishes-dst-2022.html. Chihuahua는 2022-10-30부터 연중 내내 UTC-6을 사용합니다. Fiji도 더 이상 DST를 시행하지 않습니다. 자세한 내용은 https://github.com/google/cctz/pull/235 및 https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1995209를 참조하십시오. #42796 (Alexey Milovidov).
- async inserts용
FailedAsyncInsertQuery이벤트 메트릭을 추가했습니다. #42814 (Krzysztof Góralski). - 쿼리 계획 상에
read-in-order최적화를 구현했습니다. 이 기능은 기본적으로 활성화되어 있습니다. 이전 AST 기반 버전을 사용하려면query_plan_read_in_order = 0으로 설정하십시오. #42829 (Nikolai Kochetov). - S3로 백업할 때 S3 멀티파트 업로드의 최대 10,000개 파트 제한 오류를 방지하기 위해 업로드 파트 크기를 지수적으로 늘립니다. #42833 (Vitaly Baranov).
- 머지 작업이 계속 처리 중이고 디스크 공간이 부족하면, 완전히 만료된 파트를 선택해 삭제하지 못해 디스크 공간 부족 상태가 발생합니다. 전체 파트가 만료된 경우에는 추가 디스크 공간을 확보할 필요가 없으므로 TTL이 정상적으로 실행되도록 했습니다. #42869 (zhongyuankai).
oss함수와OSS테이블 엔진을 추가했습니다(사용자에게 편리한 기능입니다). oss는 S3와 완전히 호환됩니다. #43155 (zzsmdfj).system.asynchronous_metrics테이블에 OS 관련 정보를 수집하는 과정의 오류 보고를 개선했습니다. #43192 (Alexey Milovidov).- ClickHouse가 MySQL 호환성 프로토콜을 사용해 자기 자신에 연결할 수 있도록
INFORMATION_SCHEMA테이블을 수정합니다. 별칭(alias) 대신 컬럼을 추가합니다(#9769 관련). 이를 통해 다양한 MySQL 클라이언트와의 호환성이 향상됩니다. #43198 (Filatenkov Artur). - MySQL 프로토콜로 연결하는 PowerBI와의 호환성을 위해 몇 가지 함수를 추가했습니다 #42612 (Filatenkov Artur).
- 변경 사항 관련 Dashboard 사용성 개선 #42872 (Vladimir C).
빌드/테스트/패키징 개선
- 각 pull request와 master 브랜치의 각 커밋에 대해 SQLancer를 실행합니다. SQLancer는 논리적 버그를 자동으로 탐지하는 데 중점을 둔 오픈소스 퍼저입니다. #42397 (Ilya Yatsishin).
- zlib-ng를 최신 버전으로 업데이트합니다. #42463 (Boris Kuschel).
- Jepsen으로 ClickHouse 서버를 테스트하는 기능을 추가했습니다. 참고로 Jepsen으로 ClickHouse Keeper를 테스트하는 기능은 이미 지원하고 있습니다. 이 pull request는 이 지원 범위를 복제된 테이블(Replicated tables)까지 확장합니다. #42619 (Antonio Andelic).
- clang-tidy 결과 캐싱에 https://github.com/matus-chochlik/ctcache를 사용합니다. #42913 (Mikhail f. Shiryaev).
- 수정 전에는 사용자 정의 config가 RPM에 의해
$file.rpmsave에 보존되었습니다. 이 PR은 이를 수정하여 패키지의 파일로 사용자 파일을 대체하지 않도록 합니다. #42936 (Mikhail f. Shiryaev). - Ubuntu Docker image에서 일부 라이브러리를 제거합니다. #42622 (Alexey Milovidov).
버그 수정(공식 안정 또는 프리스테이블 릴리스에서 사용자에게 드러나는 오동작)
- 별칭 AST를 복제하도록 정규화기를 업데이트했습니다. #42452을 해결합니다. 구현: * 대체될 때 별칭 AST를 복제하도록 QueryNormalizer를 업데이트했습니다. 이전에는 같은 객체를 그대로 할당했기 때문에 동일한 부모가 다시 삽입되는 문제가 발생했고, 그 결과 LogicalExpressinsOptimizer에서 예외가 발생했습니다. * 이 버그는 새 분석기(allow_experimental_analyzer)에서는 나타나지 않으므로 변경하지 않았습니다. 동일한 내용을 검증하는 테스트도 추가했습니다. #42827 (SmitaRKulkarni).
Lazy데이터베이스의 테이블 백업에서 발생하는 경쟁 상태를 수정했습니다. #43104 (Vitaly Baranov).skip_unavailable_shards수정:s3Cluster테이블 함수에서 작동하지 않던 문제를 해결했습니다. #43131 (chen).s3Cluster의 스키마 추론을 수정하고hdfsCluster를 개선했습니다. #41979 (Kruglov Pavel).- URL 테이블 엔진 / 테이블 함수에서 읽을 때의 재시도 문제를 수정했습니다. (재시도 가능한 오류는 필요 이상으로 여러 번 재시도될 수 있었고, 재시도할 수 없는 오류는 코드에서 어설션 실패를 일으켰습니다). #42224 (Kseniia Sumarokova).
- DNS 및 c-ares와 관련된 세그멘테이션 폴트가 보고되었으며 수정되었습니다. #42234 (Arthur Passos).
- PK 분석(단조성 검사) 중 발생할 수 있는
LOGICAL_ERRORArguments of 'plus' have incorrect data types를 수정했습니다. 첫 번째 인수가 상수인 단조 이항 함수의 잘못된 PK 분석도 수정했습니다. #42410 (Nikolai Kochetov). - 키 타입이 Nullable 내부에 포함될 수 없을 때 발생하던 잘못된 키 분석 문제를 수정했습니다. 이로써 #42456이 수정되었습니다. #42469 (Amos Bird).
- 설정 이름의 오타를 수정해
input_format_csv_use_best_effort_in_schema_inference설정 사용 시 스키마 추론 캐시가 잘못 사용되던 문제를 해결했습니다. #41735를 닫습니다. #42536 (Kruglov Pavel). - 데이터 타입이 LowCardinality일 때 잘못된 헤더로 Set이 생성되던 문제를 수정했습니다. #42460을 해결합니다. #42579 (flynn).
PREWHERE에서(U)Int128및(U)Int256값이 올바르게 검사되도록 수정되었습니다. #42605 (Antonio Andelic).- 함수 parser에서 세그멘테이션 폴트로 이어질 수 있었던 버그를 수정했습니다. #42724 (Nikolay Degterinsky).
truncate table의 잠금 문제를 수정했습니다. #42728 (flynn).- 파일이 존재하지 않을 때
web디스크에서 발생할 수 있는 크래시를 수정했습니다(OPTIMIZE TABLE FINAL에서도 결국 동일한 오류가 발생할 수 있음). #42767 (Azat Khuzhin). - enum 값에
SSL_CERTIFICATE가 포함되도록system.session_log의auth_type매핑을 수정했습니다. #42782 (Miel Donkers). - ASAN 빌드에서 CREATE USER 쿼리 파서의 stack-use-after-return 오류를 수정했습니다. #42804 (Nikolay Degterinsky).
- 문자가 16바이트 경계에 걸쳐 있는 경우
lowerUTF8/upperUTF8문제를 수정했습니다(문자열 길이가 16바이트를 초과하면 매우 자주 발생). #42812 (Azat Khuzhin). - 잘못된 입력이 들어왔을 때 발생하던 오동작을 수정하기 위해 LZ4 압축 해제 루틴에 추가 경계 검사를 넣었습니다. #42868 (Nikita Taranov).
- 쿼리 취소 시 드물게 발생할 수 있는 멈춤 문제를 수정했습니다. #42874 (Azat Khuzhin).
- 해시 조인에서 여러 개의 OR 조건이 있을 때 발생하던 잘못된 동작을 수정하고, #42832를 해결했습니다. #42876 (Vladimir C).
- ‘세 테이블 join’에서
select if as from을 수행하면 null 포인터가 발생합니다. 예를 들어, 다음 SQL 쿼리입니다: #42883 (zzsmdfj). - 클러스터 디스커버리의 memory sanitizer 보고서를 수정하고, #42763를 해결했습니다. #42905 (Vladimir C).
- 빈 문자열인 경우 DateTime의 스키마 추론을 개선했습니다. #42911 (Kruglov Pavel).
- 프로젝션을 사용할 수 있는 상황인데도 사용 가능한 프로젝션이 없을 때 드물게 발생하는 NOT_FOUND_COLUMN_IN_BLOCK 오류를 수정했습니다. 이 수정으로 #42771이 해결됩니다. 이 버그는 https://github.com/ClickHouse/ClickHouse/pull/25563에서 처음 발생했습니다. #42938 (Amos Bird).
- 테이블에 DATETIME 데이터 타입이 포함된 경우
PostgreSQL데이터베이스 엔진의 ATTACH TABLE 문제를 수정했습니다. #42817을 종료합니다. #42960 (Kseniia Sumarokova). - 람다 파싱을 수정했습니다. #41848를 해결했습니다. #42979 (Nikolay Degterinsky).
- 하이퍼직사각형의 중간에 널 허용 키가 있을 때 발생하는 잘못된 키 분석을 수정했습니다. 이로써 #43111이 해결되었습니다. #43133 (Amos Bird).
- 의도적으로 조작된 집계 함수 상태를 역직렬화하는 과정에서 발생할 수 있던 여러 버퍼 초과 읽기 문제를 수정했습니다. #43159 (Raúl Marín).
- NULL 및 const 널 허용 인수 처리 시 함수
if를 수정했습니다. #43069를 해결합니다. #43178 (Kruglov Pavel). - ‘best effort’ 알고리즘으로 DateTime을 파싱하는 과정에서 발생하는 십진수 연산 오버플로우를 수정합니다. #43061을 해결합니다. #43180 (Kruglov Pavel).
git-import도구가 생성한indent필드가 잘못 계산되었습니다. https://clickhouse.com/docs/getting-started/example-datasets/github/를 참조하십시오. #43191 (Alexey Milovidov).- 서브쿼리 및 형 변환 시
Interval타입에서 발생하던 예기치 않은 동작을 수정했습니다. #43193 (jh0x).
ClickHouse 릴리스 22.10, 2022-10-25. 발표 자료, 동영상
하위 호환되지 않는 변경 사항
- 캐시 명령 이름을 변경합니다:
show caches->show filesystem caches,describe cache->describe filesystem cache. #41508 (Kseniia Sumarokova). LIVE VIEW의WITH TIMEOUT섹션 지원을 제거합니다. 이로써 #40557가 해결되었습니다. #42173 (Alexey Milovidov).- 클라이언트 프롬프트에서
{database}매크로 지원을 제거합니다. 데이터베이스가 지정되지 않은 경우 잘못 표시되었고,USESQL 문 실행 시에도 갱신되지 않았습니다. 이로써 #25891가 해결되었습니다. #42508 (Alexey Milovidov).
새 기능
- 조합형 프로토콜 구성이 추가되었습니다. 이제 서로 다른 프로토콜을 각기 다른 수신 대기 호스트로 구성할 수 있습니다. PROXYv1와 같은 프로토콜 래퍼를 다른 모든 프로토콜(TCP, TCP secure, MySQL, Postgres) 위에 구성할 수 있습니다. #41198 (Yakov Olkhovskiy).
- 백업 대상의 새로운 유형으로
S3를 추가합니다. 기존 경로/데이터 구조를 그대로 유지한 채 S3로 BACKUP하는 기능을 지원합니다. #42333 (Vitaly Baranov), #42232 (Azat Khuzhin). - 지정된 분포를 따르는 무작위 값을 생성하는 함수(
randUniform,randNormal,randLogNormal,randExponential,randChiSquared,randStudentT,randFisherF,randBernoulli,randBinomial,randNegativeBinomial,randPoisson)가 추가되었습니다. 이로써 #21834가 해결되었습니다. #42411 (Nikita Mikhaylov). - ClickHouse Keeper 개선: 스냅샷을 S3에 업로드하는 기능이 추가되었습니다. S3 정보는
keeper_server.s3_snapshot내에 정의할 수 있습니다. #41342 (Antonio Andelic). - 여러 그룹의 정규 분포 관측값에 대해 통계적 검정을 수행하여 모든 그룹의 평균이 동일한지 여부를 판별하는 집계 함수
analysisOfVariance(anova)가 추가되었습니다. 원본 PR #37872. #42131 (Nikita Mikhaylov). - 설정
max_temporary_data_on_disk_size_for_user/max_temporary_data_on_disk_size_for_query를 사용해 디스크에 저장되는 임시 데이터의 크기를 제한할 수 있도록 지원합니다. #40893 (Vladimir C). - JSONObjectEachRow 포맷에서 객체 이름을 컬럼 값으로 기록하고 파싱할 수 있도록
format_json_object_each_row_column_for_object_name설정이 추가되었습니다. #41703 (Kruglov Pavel). - SQL에 BLAKE3 해시 함수를 추가했습니다. #33435 (BoloniniD).
- 함수
javaHash가 정수형에도 적용되도록 확장되었습니다. #41131 (JackyWoo). - ON CLUSTER DDL에 대한 OpenTelemetry 지원을 추가합니다(
distributed_ddl_entry_format_version을 4로 설정해야 합니다). #41484 (Frank Chen). - 시스템 테이블(system table)
asynchronous_insert_log이 추가되었습니다. 이 테이블에는 더 나은 내부 검사를 위해 비동기 삽입(asynchronous inserts)에 대한 정보(wait_for_async_insert=0인 fire-and-forget 모드의 쿼리 결과 포함)가 담겨 있습니다. #42040 (Anton Popov). - HTTP 프로토콜의 비표준 확장인 HTTP의
Accept-Encoding에서lz4,bz2,snappy메서드를 지원하도록 추가했습니다. #42071 (Nikolay Degterinsky). - Morton Coding (ZCurve) 인코딩/디코딩 함수를 추가합니다. #41753 (Constantine Peresypkin).
SET setting_name = DEFAULT를 지원하도록 추가했습니다. #42187 (Filatenkov Artur).
실험적 기능
allow_experimental_analyzer설정에 따라 쿼리 분석 및 계획 수립을 위한 새로운 인프라를 추가했습니다. #31796 (Maksim Kita).- Kusto Query Language의 초기 구현을 추가했습니다. 사용하지 마십시오. #37961 (Yong Wang).
성능 개선
- “Too many parts” 임계값을 완화했습니다. 이로써 #6551이 해결되었습니다. 이제 평균 파트 크기가 충분히 크면(최소 10 GiB) ClickHouse는 하나의 파티션에 더 많은 파트를 허용합니다. 이를 통해 디스크 셸프 또는 객체 스토리지를 사용하는 경우, 단일 서버의 단일 테이블에 있는 단일 파티션 하나에 최대 페타바이트 규모의 데이터를 저장할 수 있습니다. #42002 (Alexey Milovidov).
- 필요한 스택 크기를 줄이기 위해 연산자 우선순위 요소 파서를 구현했습니다. #34892 (Nikolay Degterinsky).
- DISTINCT의 in order 최적화가 데이터 스트림의 정렬 특성을 활용하도록 개선했습니다. 이 개선으로 조건이 맞는 경우 DISTINCT에 대해 순서대로 읽기를 사용할 수 있습니다(이전에는 DISTINCT의 컬럼에 대해 ORDER BY를 지정해야 했습니다). #41014 (Igor Nikonov).
- ColumnVector: AVX512VBMI를 사용해 UInt8 인덱스를 최적화했습니다. #41247 (Guo Wangyang).
ThreadGroupStatus::mutex의 lock 경합을 최적화했습니다. ICX 장치(Intel Xeon Platinum 8380 CPU, 80코어, 160스레드)에서 수행한 SSB(Star Schema Benchmark) 성능 실험에 따르면, 이 변경으로 모든 하위 사례 QPS의 기하평균이 2.95배 향상될 수 있습니다. #41675 (Zhiguo Zhou).- AArch64 빌드에
ldaprcapability를 추가했습니다. 이는 Graviton 2 이상, Azure 및 GCP 인스턴스에서 지원됩니다. 이 기능은 얼마 전 clang-15에 추가되었습니다. #41778 (Daniel Kutenin). - 문자열을 비교할 때 한쪽 인수가 빈 상수 문자열인 경우의 성능을 개선했습니다. #41870 (Jiebin Sun).
- 일부 경우 ColumnAggregateFunction의
insertFrom이 Aggregate State를 공유하도록 최적화했습니다. #41960 (flynn). azure_blob_storage디스크에 대한 쓰기 성능을 개선했습니다(버퍼 크기마다 블록을 하나씩 쓰는 대신max_single_part_upload_size를 따릅니다). 이 비효율성은 #41754에서 언급되었습니다. #42041 (Kseniia Sumarokova).- process list와 query_log의 스레드 ID를 고유하게 만들어 불필요한 낭비를 방지했습니다. #42180 (Alexey Milovidov).
- 요청된 읽기 범위가 캐시 설정
bypass_cache_threashold로 정의된 임계값을 초과하는 경우, 캐시를 완전히 우회할 수 있도록 지원합니다(캐시에 다운로드하는 것과 캐시된 데이터를 읽는 것 모두). 이 기능을 사용하려면enable_bypass_cache_with_threshold를 활성화해야 합니다. #42418 (Han Shukai). 이는 느린 로컬 디스크에서 도움이 됩니다.
개선 사항
- 설정
allow_implicit_no_password를 추가했습니다. 이 설정은allow_no_password와 함께 사용할 때,IDENTIFIED WITH no_password를 명시적으로 지정한 경우가 아니면 비밀번호 없는 사용자를 생성하지 못하도록 합니다. #41341 (Nikolay Degterinsky). - 내장 Keeper는 항상 백그라운드에서 시작되므로 quorum에 도달하지 않아도 ClickHouse를 시작할 수 있습니다. #40991 (Antonio Andelic).
- 이전 connection이 만료된 경우 ZooKeeper에 대한 새 connection을 더 신속하게 다시 설정하도록 개선했습니다. 이전에는 기본적으로 매분 실행되는 작업이 있었기 때문에 table이 그 정도 시간 동안 readonly 상태로 남아 있을 수 있었습니다. #41092 (Nikita Mikhaylov).
- 이제 프로젝션을 zero-copy 복제와 함께 사용할 수 있습니다(zero-copy 복제는 프로덕션 환경용이 아닌 기능입니다). #41147 (alesapin).
- 하위 쿼리에서 표현식
(EXPLAIN SELECT ...)을 지원합니다. 이제SELECT * FROM (EXPLAIN PIPELINE SELECT col FROM TABLE ORDER BY col)와 같은 쿼리도 유효합니다. #40630 (Vladimir C). - 쿼리 범위 내에서
async_insert_max_data_size또는async_insert_busy_timeout_ms를 변경할 수 있도록 했습니다. 예를 들어, 사용자가 데이터를 드물게 삽입하지만 기본 설정을 조정할 수 있도록 server 구성에 접근할 수 없는 경우에 유용합니다. #40668 (Nikita Mikhaylov). - 원격 파일 시스템에서의 읽기를 개선하고, 읽기/쓰기용 스레드 풀 크기를 설정할 수 있게 했습니다. #41070을 해결합니다. #41011 (Kseniia Sumarokova).
- WindowTransform/arratReduce*/initializeAggregation/aggregate functions의 버전 관리에서 모든 combinator 조합을 지원합니다. 이전에는
ForEach/Resample/Map같은 combinator가 이러한 위치에서 작동하지 않았고, 이를 사용하면State function ... inserts results into non-state column와 같은 예외가 발생했습니다. #41107 (Kruglov Pavel). - 복호화가 실패할 때(예: 잘못된 키로 복호화하는 경우) 예외를 발생시키는 대신 NULL을 반환하는 함수
tryDecrypt를 추가했습니다. #41206 (Duc Canh Le). - 디스크별로 예약으로 할당되지 않은 공간이 얼마나 되는지 확인할 수 있도록
system.disks테이블에unreserved_space컬럼을 추가합니다. #41254 (filimonov). - 테이블 함수 인수에서 S3 인증 헤더를 지원하도록 했습니다. #41261 (Kseniia Sumarokova).
- Keeper 및 내부 ZooKeeper 클라이언트에 MultiRead 지원을 추가했습니다(이는 ZooKeeper 프로토콜의 확장 기능으로, ClickHouse Keeper에서만 사용할 수 있습니다). #41410 (Antonio Andelic).
- IN 연산자에서 Decimal 유형을 부동소수점 리터럴과 비교할 수 있도록 지원을 추가했습니다. #41544 (liang.huang).
- cache 설정에서
1TB처럼 읽기 쉬운 크기 값을 허용합니다. #41688 (Kseniia Sumarokova). - ClickHouse는 캐시가 비동기적으로 업데이트되기 전까지 일정 시간(기본값은 15초) 오래된 DNS 항목을 캐시할 수 있었습니다. 이 기간에도 ClickHouse는 연결을 설정하려고 시도해 오류를 발생시킬 수 있었습니다. 이 동작은 수정되었습니다. #41707 (Nikita Mikhaylov).
clickhouse-client/clickhouse-local에 fzf 유사 유틸리티(fzf/sk)를 사용한 대화형 이력 검색 기능을 추가했습니다(동작을 추가로 구성하려면FZF_DEFAULT_OPTS/SKIM_DEFAULT_OPTIONS를 사용할 수 있습니다). #41730 (Azat Khuzhin).- 유효하지 않은 인증서가 있는 보안 서버에 연결하는 클라이언트는 ‘—accept-certificate’ 플래그를 지정한 경우에만 계속 진행할 수 있도록 허용합니다. #41743 (Yakov Olkhovskiy).
- 기존
tryBase64Decode함수와 유사한tryBase58Decode함수를 추가했습니다. #41824 (Robert Schulze). - 기본 키가 다른 파티션으로 교체할 때 표시되는 피드백을 개선했습니다. #34798를 수정했습니다. #41838 (Salvatore).
- 병렬 파싱 수정: 이제 segmentator가
max_block_size를 확인합니다. 이로써 병렬 파싱 시 LIMIT가 작을 때 발생하던 메모리 과할당 문제가 해결되었습니다. #41852 (Vitaly Baranov). system table에서 SELECT를 수행하는 중 “TABLE_IS_DROPPED” 예외가 발생했지만 무시된 경우에는system.errors에 추가하지 않습니다. #41908 (AlfVII).enable_extended_results_for_datetime_functions옵션이 개선되어 함수toStartOfDay,toStartOfHour,toStartOfFifteenMinutes,toStartOfTenMinutes,toStartOfFiveMinutes,toStartOfMinute,timeSlot의 결과를 DateTime64 유형으로 반환합니다. #41910 (Roman Vasin).- 텍스트 형식의
DateTime유형 추론을 개선했습니다. 이제date_time_input_format설정을 따르며, 숫자를 타임스탬프로 해석해 날짜/시간 값을 추론하려고 시도하지 않습니다. #41389 해결. #42206 해결. #41912 (Kruglov Pavel). perform_ttl_move_on_insert= false로 삽입할 때 표시되던 혼란스러운 경고를 제거했습니다. #41980 (Vitaly Baranov).- 사용자가
count(*)와 마찬가지로countState(*)를 작성할 수 있도록 지원합니다. 이로써 #9338이 해결되었습니다. #41983 (Amos Bird). rankCorr크기 오버플로우를 해결했습니다. #42020 (Duc Canh Le).- Sentry 설정에서 환경 이름으로 임의의 문자열을 지정할 수 있는 옵션이 추가되어 보고서를 더욱 편리하게 확인할 수 있습니다. #42037 (Nikita Mikhaylov).
- CSV에서 범위를 벗어난 Date를 파싱할 때 발생하던 문제를 수정했습니다. #42044 (Andrey Zvonov).
parseDataTimeBestEffort가 이제 날짜와 시간 사이에 쉼표가 있는 형식도 지원합니다. #42038을 해결했습니다. #42049 (flynn).ReplicatedMergeTree의 오래된 레플리카 복구 프로세스가 개선되었습니다. 손실된 레플리카에 정상 레플리카에는 없는 일부 파트가 있더라도, 정상 레플리카의 복제 큐에 따르면 이러한 파트가 이후에 나타나야 하는 경우에는 손실된 레플리카가 해당 파트를 분리하지 않고 유지합니다. #42134 (Alexander Tokmakov).Date32인수를 date_diff 함수에서 사용할 수 있도록 했습니다. 시작 날짜가 Unix epoch 이전이고 종료 날짜가 Unix epoch 이후인 DateTime64 인수를 사용할 때 date_diff 함수에서 발생하던 문제를 수정했습니다. #42308 (Roman Vasin).- Minio에 큰 파트를 업로드할 때 ‘Complete Multipart Upload’는 오래 걸릴 수 있습니다. Minio는 10초마다 하트비트를 전송합니다(https://github.com/minio/minio/pull/7198 참조). 하지만 기본 send/receive timeout이 5초로 설정되어 있어, ClickHouse에서는 그보다 먼저 타임아웃이 발생합니다. #42321 (filimonov).
- Decimal과 같은 복합 타입에서 집계 상태 타입을 드물게 잘못 CAST하던 문제를 수정했습니다. 이로써 #42408이 해결됩니다. #42417 (Amos Bird).
dateName함수에서Date32인수를 사용할 수 있게 되었습니다. #42554 (Roman Vasin).- 이제 NULL 리터럴이 포함된 filter가 인덱스 분석 과정에서 사용됩니다. #34063. #41842 (Amos Bird).
- 범위 내의 모든 파트가 특정 임계값보다 오래된 경우 파트를 머지합니다. 임계값은
min_age_to_force_merge_seconds를 사용하여 설정할 수 있습니다. 이로써 #35836이 해결되었습니다. #42423 (Antonio Andelic). 이는 대부분의 로직을 구현한 @fastio의 #39550i를 이어받은 작업입니다. allow_experimental_analyzer설정에서 쿼리 분석 및 계획을 위한 새로운 인프라가 추가되었습니다. #31796 (Maksim Kita).- 끊어진 Keeper 연결의 복구 시간을 개선했습니다. #42541 (Raúl Marín).
빌드/테스트/패키징 개선
- 테이블 정의용 퍼저를 추가했습니다 #40096 (Anton Popov). 이는 올해 들어 지금까지 ClickHouse 테스트에서 가장 큰 진전입니다.
- ClickHouse Cloud 서비스의 베타 버전이 출시되었습니다: https://console.clickhouse.cloud/. ClickHouse를 사용하는 가장 쉬운 방법이며(단일 명령 설치보다도 조금 더 쉽습니다).
- AST 퍼저에 WHERE 절 생성 지원을 추가하고, ORDER BY 및 WHERE 절을 추가하거나 제거할 수 있게 했습니다. #38519 (Ilya Yatsishin).
- 이제 Aarch64 바이너리에는 최소 ARMv8.2(2016년 출시)가 필요합니다. 특히 ARM LSE, 즉 네이티브 원자적 연산을 사용할 수 있게 됩니다. 또한 Raspberry Pi 4와 같은 구형 ARMv8.0 하드웨어용 바이너리를 컴파일할 수 있도록 CMake 빌드 옵션 “NO_ARMV81_OR_HIGHER”를 추가했습니다. #41610 (Robert Schulze).
- Musl로 ClickHouse를 빌드할 수 있도록 했습니다(이미 지원되었지만 동작이 깨져 있던 상태에서 소규모 변경을 적용). #41987 (Alexey Milovidov).
- 설치 시
sed명령을 실행했다가 파일을 찾을 수 없다는 오류가 발생하는 일을 방지하기 위해$CLICKHOUSE_CRONFILE파일 확인을 추가했습니다. #42081 (Chun-Sheng, Li). - 새로운 시간대 변경 사항을 지원하기 위해 cctz를
2022e로 업데이트했습니다. 이제 팔레스타인의 전환 시각은 토요일 02:00입니다. 우크라이나의 3개 시간대를 하나로 단순화했습니다. 요르단과 시리아는 DST를 사용하는 +02/+03에서 연중 +03으로 전환합니다. (https://data.iana.org/time-zones/tzdb/NEWS). 이로써 #42252가 해결됩니다. #42327 (Alexey Milovidov). #42273 (Dom Del Nano). - BLAKE3 해시 함수 라이브러리를 예시로 사용해 ClickHouse에 Rust 코드 지원을 추가했습니다. #33435 (BoloniniD).
버그 수정(공식 안정 또는 프리스테이블 릴리스에서 사용자에게 드러나는 오동작)
- 큰 정수 타입의
LowCardinality에 맞는 올바른 집계 메서드를 선택합니다. #42342 (Duc Canh Le). web디스크 관련 몇 가지 수정. #41652 (Kseniia Sumarokova).- config에
https_port가 없을 때docker run이 실패하던 문제를 수정했습니다. #41693 (Yakov Olkhovskiy). - 서버 종료 시 또는
SYSTEM STOP MERGES쿼리 실행 시 뮤테이션이 제대로 취소되지 않았고, 취소까지 오랜 시간이 걸릴 수 있었는데, 이 문제가 수정되었습니다. #41699 (Alexander Tokmakov). - 정렬 키의 앞부분에 있는 컬럼을 단조 함수로 감싼 뒤
ORDER BY또는GROUP BY에 사용하는 쿼리에서, “read in order” 최적화(설정optimize_read_in_order및optimize_aggregation_in_order)가 활성화된 경우 잘못된 결과가 반환되던 문제를 수정했습니다. #41701 (Anton Popov). optimize_monotonous_functions_in_order_by설정이 활성화된Mergetable에서SELECT수행 시 발생할 수 있는 크래시를 수정했습니다. #41269을 해결합니다. #41740 (Nikolai Kochetov).- 레플리카가 일부 part를 손상된 것으로 분리한 직후 재시작되면 매우 드물게 발생할 수 있는 “Part … intersects part …” 오류를 수정했습니다. #41741 (Alexander Tokmakov).
- 경량한 삭제용으로 예약된 컬럼 이름
_row_exists를 사용해 MergeTree 테이블을 생성하거나 변경하지 못하도록 했습니다. #41716을 수정했습니다. #41763 (Jianmei Zhang). - 일부 HTTP 응답에서 CORS 헤더가 누락되는 버그를 수정했습니다. #41792 (Frank Chen).
- 22.9에서는 20.3 이하 버전에서 생성되었고 한 번도 변경되지 않은
ReplicatedMergeTree테이블이 시작에 실패할 수 있었는데, 이 문제가 수정되었습니다. #41742를 수정했습니다. #41796 (Alexander Tokmakov). - 어떤 이유로든 배치 전송이 실패하면 자동으로 복구할 수 없고, 제때 처리하지 않으면 데이터가 누적되며 출력되는 오류 메시지도 점점 길어져 결국 http 스레드가 차단됩니다. #41813 (zhongyuankai).
- compressed marks 설정이 적용된 compact 파트를 수정했습니다. #41783 및 #41746 문제를 수정했습니다. #41823 (alesapin).
- 이전 버전의 복제된 데이터베이스에는 [Zoo]Keeper에 특별한 마커가 없습니다. 특별한 마커가 있는지 확인하는 대신, 노드에 일부 불명확한 데이터가 포함되어 있는지만 확인해야 합니다. #41875 (Nikita Mikhaylov).
- fs 캐시에서 발생할 수 있는 예외를 해결했습니다. #41884 (Kseniia Sumarokova).
- S3 테이블 함수의
use_environment_credentials문제를 수정했습니다. #41970 (Kseniia Sumarokova). - 손상된 파트를 분리할 때 발생하는 “디렉터리가 이미 존재하며 비어 있지 않습니다” 오류를 수정했습니다. 이 오류는
ReplicatedMergeTree테이블의 복제 시작을 방해할 수 있었습니다. #40957을 수정했습니다. #41981 (Alexander Tokmakov). toDateTime64는 이제 음수 정수 및 음수 부동소수점 인수에 대해 동일한 출력을 반환합니다. #42025 (Robert Schulze).azure_blob_storage에 대한 쓰기 문제를 수정했습니다. #41754을 부분적으로 해결합니다. #42034 (Kseniia Sumarokova).- 특정
bzip2파일에서 발생하는bzip2디코딩 문제를 수정했습니다. #42046 (Nikolay Degterinsky). - 확장 범위의 시작 시점(1900년 1월)에서 설정 “enable_extended_results_for_datetime_functions = 1”을 사용할 때 발생하는 SQL 함수
toLastDayOfMonth문제를 수정했습니다. - 확장 범위의 종료 시점(2299년 12월)에서 설정 “enable_extended_results_for_datetime_functions = 1”을 사용할 때 발생하는 SQL 함수 “toRelativeWeekNum()” 문제를 수정했습니다. - 불필요한 인덱스 산술 연산을 피해 SQL 함수 “toISOYear()”, “toFirstDayNumOfISOYearIndex()”, “toYearWeekOfNewyearMode()“의 성능을 개선했습니다. #42084 (Roman Vasin). - 각 테이블의 fetch 작업 최대 크기가 실수로 8로 설정되어 있었지만, pool 크기는 이보다 더 클 수 있었습니다. 이제 테이블의 fetch 작업 최대 크기는 pool 크기와 동일합니다. #42090 (Nikita Mikhaylov).
- 테이블 간 의존성을 깨뜨리지 않고 삭제할 수 있는지 확인하기 전에 테이블이 종료되거나 딕셔너리가 분리될 수 있던 문제가 수정되었습니다. #41982를 수정했습니다. #42106 (Alexander Tokmakov).
- 파일 시스템 캐시 사용 시
remote_filesystem_read_method=read에서 발생하던 심각한 비효율을 수정했습니다. #42125를 해결합니다. #42129 (Kseniia Sumarokova). - use_hedged_requests = 0일 때 분산 쿼리에서 발생할 수 있는 timeout 예외를 수정했습니다. #42130 (Azat Khuzhin).
runningDifference함수를Date32유형과 함께 사용할 때 발생하던 함수 내부의 사소한 버그를 수정했습니다. 이전에는Date를 사용했으며, 이로 인해Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<unsigned short>'와 같은 논리적 오류가 발생할 수 있었습니다. #42143 (Alfred Xu).- 기준 백업에서 4GB를 초과하는 파일 재사용 문제를 수정했습니다. #42146 (Azat Khuzhin).
- 정렬 키(sorting key)의 첫 번째 컬럼에 함수가 포함된 경우 DISTINCT in order에서 LOGICAL_ERROR가 발생합니다. #42186 (Igor Nikonov).
- 프로젝션과
aggregate_functions_null_for_empty설정 관련 버그를 수정했습니다. 이 버그는 매우 드물며, 서버 구성에서aggregate_functions_null_for_empty설정을 활성화한 경우에만 발생합니다. 이로써 #41647이 해결되었습니다. #42198 (Alexey Milovidov). Buffer테이블에서 내림차순 순서로 읽을 때 발생하던 문제를 수정했습니다. #42236 (Duc Canh Le).- 기본 profile에
background_pool_size setting은 설정되어 있지만background_merges_mutations_concurrency_ratio는 설정되어 있지 않을 때 ClickHouse가 시작되지 않는 버그를 수정했습니다. #42315 (nvartolomei). - 컬럼이 테이블 스키마와 다른 attached 상태인 파트에
ALTER UPDATE를 수행하면 디스크에 잘못된columns.txt메타데이터가 생성될 수 있었습니다. 이러한 파트를 읽을 때 오류가 발생하거나 잘못된 데이터가 반환될 수 있었습니다. #42161을 수정했습니다. #42319 (Nikolai Kochetov). additional_table_filters설정이Distributed스토리지에 적용되지 않던 문제를 수정했습니다. #41692. #42322 (Nikolai Kochetov).- 쿼리 종료/취소 과정에서 발생하는 데이터 레이스를 수정했습니다. 이로써 #42346가 해결되었습니다. #42362 (Alexey Milovidov).
- 이는 date/time 함수에 회귀 문제를 일으킨 #40217을 되돌립니다. #42367 (Alexey Milovidov).
- falsy 조건의 join에서 발생하는 assert cast를 수정하고, #42380를 해결했습니다. #42407 (Vladimir C).
- Decimal 데이터 타입 처리 중 발생하던 버퍼 오버플로우를 수정했습니다. 이로써 #42451이 해결됩니다. #42465 (Alexey Milovidov).
AggregateFunctionQuantile이 이제 UInt128 컬럼에서도 올바르게 작동합니다. 이전에는 분위수 상태가UInt128컬럼을Int128로 해석하여 잘못된 결과가 발생할 수 있었습니다. #42473 (Antonio Andelic).- Float32가 아닌 컬럼에서
Annoy인덱스에 INSERT할 때 발생하던 bad_cast assert를 수정했습니다.Annoy인덱스는 실험적 기능입니다. #42485 (Robert Schulze). - Date 또는 DateTime과 128비트 또는 256비트 정수에 대한 산술 연산이 초기화되지 않은 메모리를 참조하는 문제가 있었습니다. #42453. #42573 (Alexey Milovidov).
- 서버 업그레이드 중 파티션 키에 별칭 함수 이름이 포함된 경우 발생하는 예기치 않은 테이블 로드 오류를 수정했습니다. #36379 (Amos Bird).
ClickHouse 릴리스 22.9, 2022-09-22. 발표 자료, 영상
하위 호환되지 않는 변경 사항
ReplicatedMergeTree테이블이 하나라도 있는 경우, 20.3 이하에서 22.9 이상으로 업그레이드할 때는 중간 버전을 거쳐야 합니다. 그렇지 않으면 새 버전의 서버가 시작되지 않습니다. #40641 (Alexander Tokmakov).accurate_Cast및accurate_CastOrNull함수를 제거합니다(이 함수들은 이름에 밑줄이 들어간다는 점만accurateCast및accurateCastOrNull과 다르며,cast_keep_nullable설정 값의 영향도 받지 않습니다). 이 함수들은 문서화되지 않았고, 테스트도 없었으며, 사용되지도 않았고, 필요하지도 않았습니다. 코드 일반화의 부산물로 남아 있었던 것으로 보입니다. #40682 (Alexey Milovidov).- 새 테이블 함수는 모두 문서화되도록 보장하는 테스트를 추가합니다. #40649를 참조하십시오. 테이블 함수
MeiliSearch의 이름을meilisearch로 변경합니다. #40709 (Alexey Milovidov). - 새 함수는 모두 문서화되도록 보장하는 테스트를 추가합니다. #40649를 참조하십시오.
lemmatize,synonyms,stem함수는 실수로 대소문자를 구분하지 않게 되어 있었습니다. 이제는 대소문자를 구분합니다. #40711 (Alexey Milovidov). - 보안 및 안정성상의 이유로 catboost 모델은 더 이상 ClickHouse 서버 내부에서 평가되지 않습니다. 대신 이제 평가는 catboost 라이브러리를 로드하고 HTTP를 통해 서버 프로세스와 통신하는 별도 프로세스인 clickhouse-library-bridge에서 수행됩니다. #40897 (Robert Schulze).
- YAML 구성 해석 방식을 더 일반적인 관례에 맞게 변경합니다. #41044 (Vitaly Baranov).
새 기능
- 과반수 값을 사용하도록
insert_quorum = 'auto'를 지원합니다. #39970 (Sachin). - ClickHouse 서버에 내장 대시보드를 추가했습니다. 이는 ClickHouse 기능을 활용해 1%의 노력으로 90%의 결과를 얻는 방법을 보여주는 데모 프로젝트입니다. #40461 (Alexey Milovidov).
- 설정 제약의 새로운 쓰기 가능 유형
changeable_in_readonly를 추가했습니다. #40631 (Sergei Trifonov). INTERSECT DISTINCT및EXCEPT DISTINCT지원을 추가했습니다. #40792 (Duc Canh Le).- 새로운 입력/출력 포맷
JSONObjectEachRow를 추가했습니다.JSON/JSONCompact/JSONColumnsWithMetadata포맷의 가져오기를 지원합니다. 메타데이터의 데이터 타입이 헤더의 데이터 타입과 일치하는지 검사할지 제어하는 새로운 설정input_format_json_validate_types_from_metadata를 추가했습니다. - 새로운 설정input_format_json_validate_utf8를 추가했습니다. 이 설정이 활성화되면 모든JSON포맷에서 UTF-8 시퀀스를 검증합니다. 기본적으로는 비활성화됩니다. 이 설정은 출력 포맷JSON/JSONCompact/JSONColumnsWithMetadata에는 영향을 주지 않으며, 이 포맷들은 항상 UTF-8 시퀀스를 검증합니다(이 예외는 호환성 때문입니다). -String컬럼에서 숫자를 파싱할 수 있도록 하는 새로운 설정input_format_json_read_numbers_as_strings를 추가했습니다. 이 설정은 기본적으로 비활성화됩니다. - Decimal 값을 큰따옴표로 출력할 수 있도록 하는 새로운 설정output_format_json_quote_decimals를 추가했습니다. 기본적으로 비활성화됩니다. - 데이터 가져오기 중 큰따옴표로 묶인 Decimal 값의 파싱을 허용합니다. #40910 (Kruglov Pavel). - DESCRIBE TABLE 쿼리에서 쿼리 매개변수를 지원합니다. #40952 (Nikita Taranov).
- Parquet Time32/64를 DateTime64로 변환해 지원합니다. Parquet time32/64는 자정 이후의 경과 시간을 나타내는 반면, DateTime32/64는 실제 Unix timestamp를 나타냅니다. 변환은 단순히
0을 기준으로 오프셋을 적용합니다. #41333 (Arthur Passos). - Apache Datasketches에 대한 집합 연산을 구현했습니다. #39919 (Fangyuan Deng). 참고: Apache Datasketches를 사용할 실익은 없습니다. ClickHouse보다 성능이 떨어지며 다른 시스템과의 통합에만 의미가 있습니다.
- 텍스트 형식(
CSV,TSV)을 읽는 동안 지정한 파일에 오류를 기록할 수 있도록 했습니다. #40516 (zjial).
실험적 기능
Annoy기반 ANN(근사 최근접 이웃) 인덱스를 추가했습니다. #40818 (Filatenkov Artur). #37215 (VVMak).- ClickHouse Keeper 또는 ZooKeeper를 키-값 저장소로 사용하는 새 스토리지 엔진
KeeperMap을 추가했습니다. #39976 (Antonio Andelic). 이 스토리지 엔진은 소량의 메타데이터를 저장하기 위한 용도입니다. - 인메모리 데이터 파트 개선: 완전히 처리된 WAL 파일을 제거합니다. #40592 (Azat Khuzhin).
성능 개선
- 마크와 기본 키(primary key) 압축을 구현했습니다. #34437을 해결했습니다. #37693 (zhongyuankai).
- 스레드 풀을 사용해 마크를 사전에 로드할 수 있도록 지원합니다.
load_marks_asynchronously설정으로 제어됩니다(기본값: 0). #40821 (Kseniia Sumarokova). - AWS에서 더 나은 성능을 위해 S3 기반 가상 파일 시스템은 여러 경로 접두사에 분산된 무작위 객체 이름을 사용합니다. #40968 (Alexey Milovidov).
- 단일 수준 집계 결과를 생성할 때
max_block_size값을 고려합니다. 이를 통해 후속 쿼리 계획 단계를 더 많은 스레드로 실행할 수 있습니다. #39138 (Nikita Taranov). - 소프트웨어 프리페치는 집계 시 해시 테이블 연산 속도를 높이는 데 사용됩니다.
enable_software_prefetch_in_aggregation설정으로 제어되며, 기본적으로 활성화되어 있습니다. #39304 (Nikita Taranov). WHERE절을 적용한 뒤 일부 정렬 키 컬럼이 항상 상수가 되는 경우optimize_read_in_order지원이 개선되었습니다. 예를 들어table의 스토리지 정의가MergeTree ORDER BY (a, b)일 때SELECT ... FROM table WHERE a = 'x' ORDER BY a, b와 같은 쿼리에서 그렇습니다. #38715 (Anton Popov).- 정렬 전에
full_sorting_join의 조인 스트림을 서로 기준으로 필터링합니다. #39418 (Vladimir C). - 빈 리터럴 처리를 생략하도록 LZ4 압축 해제가 최적화되었습니다. #40142 (Nikita Taranov).
- 가능한 경우
clickhouse-server메모리를 거치지 않고 네이티브copy를 사용해 백업 프로세스 속도를 높였습니다. #40395 (alesapin). - 각 INSERT block마다 스토리지 스냅샷을 가져오지 않습니다(성능이 약간 향상됩니다). #40638 (Azat Khuzhin).
- 여러 개의 널 허용 인수를 받는 집계 함수의 배치 처리를 구현했습니다. #41058 (Raúl Marín).
- UniquesHashSet 읽기 속도를 개선했습니다(
uniqState를 디스크에서 읽는 경우 등). #41089 (Raúl Marín). - 매우 많은 컬럼이 있는 테이블에서 compact 파트의 뮤테이션을 실행하는 중 메모리 사용량이 높아지던 문제를 수정했습니다. #41122 (lthaooo).
- ARM에서 vectorscan 라이브러리를 활성화해 regexp 평가를 더 빠르게 합니다. #41033 (Robert Schulze).
- regexp 평가 속도를 높이기 위해 다양한 성능 최적화가 포함된 vectorscan을 5.4.8로 업그레이드했습니다. #41270 (Robert Schulze).
- 매우 높은 동시성 수준에서 VFS(S3 등)의 로컬 파일 시스템 캐시를 건너뛰도록 잘못 폴백되던 문제를 수정했습니다. #40420 (Kseniia Sumarokova).
- ROW POLICY 필터가 항상 false인 경우, 데이터를 전혀 읽지 않고 즉시 빈 결과를 반환합니다. 이 변경으로 #24012가 해결되었습니다. #40740 (Amos Bird).
- Float 데이터 타입에 대한 병렬 해시 JOIN은 비효율적일 수 있습니다. 이를 개선했습니다. #41183 (Alexey Milovidov).
개선 사항
- 시작 시와 ATTACH 호출 시
ReplicatedMergeTree테이블은 ZooKeeper 연결이 이루어지고 설정이 완료될 때까지 읽기 전용 상태가 됩니다. #40148 (Antonio Andelic). enable_extended_results_for_datetime_functions옵션을 추가했습니다. 인수가 Date32 또는 DateTime64이면 함수 toStartOfYear, toStartOfISOYear, toStartOfQuarter, toStartOfMonth, toStartOfWeek, toMonday 및 toLastDayOfMonth가 Date32 유형의 결과를 반환하고, 그 외의 경우에는 Date 유형의 결과를 반환합니다. 호환성 문제로 기본값은 ‘0’입니다. #41214 (Roman Vasin).- 보안 및 안정성상의 이유로 CatBoost 모델은 더 이상 ClickHouse 서버 내부에서 평가되지 않습니다. 대신 이제 평가는 catboost 라이브러리를 로드하고 HTTP를 통해 서버 프로세스와 통신하는 별도 프로세스인 clickhouse-library-bridge에서 수행됩니다. 함수
modelEvaluate()는catboostEvaluate()로 대체되었습니다. #40897 (Robert Schulze). #39629 (Robert Schulze). - 디스크 기반 임시 데이터에 대한 메트릭을 추가하고, #40206을 해결했습니다. #40239 (Vladimir C).
- 설정 옵션
warning_supress_regexp를 추가하고, #40330을 해결했습니다. #40548 (Vladimir C). - kafka_num_consumers의 제한을 없애는 설정을 추가했습니다. #40331을 해결했습니다. #40670 (Kruglov Pavel).
DELETE ...쿼리에서SETTINGS를 사용할 수 있도록 지원합니다. #41533 (Kseniia Sumarokova).- S3 ObjectStorage용 상세 S3 profile events
DiskS3*를 S3 API 호출별로 분리했습니다. #41532 (Sergei Trifonov). system.asynchronous_metrics에 새로운 메트릭 2개가 추가되었습니다.NumberOfDetachedParts와NumberOfDetachedByUserParts입니다. #40779 (Sema Checherinda).- ODBC 및 JDBC 테이블에서 CONSTRAINT를 허용합니다. #34551 (Alexey Milovidov).
- 원본 쿼리에 여러 번 나타나지 않은 경우, 쿼리 포맷팅 시
SETTINGS가 두 번 이상 출력되지 않도록 했습니다. #38900 (Raúl Marín). - 스레드 간 tracing(OpenTelemetry) 컨텍스트 전파를 개선했습니다. #39010 (Frank Chen).
- ClickHouse Keeper:
interserver_listen_host가 지정된 경우, Keeper에만 해당 리스너를 추가합니다. #39973 (Antonio Andelic). - 오류 발생 이후 Replicated 사용자 액세스 저장소의 복구를 개선했습니다. #39977 (Vitaly Baranov).
EmbeddedRocksDB에 TTL 지원이 추가되었습니다. #39986 (Lloyd-Pottiger).clickhouse-obfuscator에 스키마 추론을 추가해--structure인수가 더 이상 필요 없게 했습니다. #40120 (Nikolay Degterinsky).Arrow포맷의 딕셔너리를 개선 및 수정했습니다. #40173 (Kruglov Pavel).Date32,DateTime64,Date를 더 좁은 타입으로 보다 자연스럽게 변환하도록 개선되었습니다. 일반 범위를 벗어나는 경우 상한값 또는 하한값의 정상 범위를 기준으로 처리합니다. #40217 (Andrey Zvonov).View위의Merge테이블에서 인덱스를 사용할 수 없던 문제를 수정했습니다. #40233 (Duc Canh Le).- JSON 서버 로그의 사용자 지정 키 이름. #40251 (Mallik Hassan).
- 이제 함수
throwIf가 발생시키는 예외에 사용자 지정 오류 코드를 설정할 수 있습니다. #40319 (Robert Schulze). - 스키마를 변경할 수 있는 포맷 설정이 반영되도록 스키마 추론 캐시를 개선했습니다. #40414 (Kruglov Pavel).
Date를DateTime및DateTime64로 parsing할 수 있도록 허용합니다. 이는 #36949에서 제안된 개선 사항을 구현한 것입니다. #40474 (Alexey Milovidov).String에서2022-08-22 01:02:03.456과 같은DateTime64형식을Date및Date32로 변환할 수 있도록 허용합니다.2022-08-22 01:02:03과 같은 DateTime 형식의 String을Date32로 변환하는 것도 허용합니다. 이로써 #39598가 해결됩니다. #40475 (Alexey Milovidov).- Parquet 포맷에서 중첩 데이터 구조 지원 개선 #40485 (Arthur Passos).
- Avro에서 Array(Record)를 평탄화된 중첩 테이블로 읽어들이는 기능을 지원합니다. #40534 (Kruglov Pavel).
EmbeddedRocksDB에 읽기 전용 지원이 추가되었습니다. #40543 (Lloyd-Pottiger).- URL 테이블 엔진의 압축 방식 매개변수를 검증합니다. #40600 (Frank Chen).
- 파일 이름 뒤에 쿼리 문자열이 있는 경우
url테이블 함수/엔진의 포맷을 더 정확하게 감지하도록 개선했습니다. #40315을 해결했습니다. #40636 (Kruglov Pavel). - grouping set을 사용할 때는 projection을 비활성화합니다. 잘못된 결과를 생성하던 문제를 수정했습니다. 이 변경은 #40635를 수정합니다. #40726 (Amos Bird).
APPLY컬럼 변환기의 잘못된 포맷을 수정했습니다. 이 문제는 테이블 정의에서 사용할 경우 메타데이터를 손상시킬 수 있습니다. 이 수정으로 #37590 문제가 해결됩니다. #40727 (Amos Bird).formatDateTime에서 시간대 오프셋 형식 지정에%z디스크립터를 지원합니다. #40736 (Cory Levy).clickhouse-client의 interactive mode에서 이제.및/를 “마지막 명령 실행”으로 인식합니다. #40750 (Robert Schulze).- MySQL 데이터베이스 엔진 및 MySQL 테이블 함수에 MySQL timeout을 전달하지 못하던 문제를 수정했습니다. #34168을 해결했습니다. #40751 (Kseniia Sumarokova).
- 파일 시스템 캐시 디렉터리에 상태 파일을 생성해, 서로 다른 서버나 캐시 간에 캐시 디렉터리가 공유되지 않도록 했습니다. #40820 (Kseniia Sumarokova).
EmbeddedRocksDB스토리지에서DELETE및UPDATE를 지원하도록 추가했습니다. #40853 (Antonio Andelic).- ClickHouse Keeper: 장시간 commit 중 종료되는 문제를 수정하고 허용 요청 크기를 늘렸습니다. #40941 (Antonio Andelic).
- WriteBufferFromS3의 경쟁 상태를 수정하고 TSA 어노테이션을 추가했습니다. #40950 (Kseniia Sumarokova).
- group_by_use_nulls를 사용하는 그룹화 집합에서는 키 컬럼만 널 허용으로 변환해야 합니다. #40997 (Duc Canh Le).
- 분산 테이블 INSERT의 관측성을 개선했습니다. #41034 (Frank Chen).
- S3 상호작용에 대한 더 저수준의 메트릭. #41039 (mateng915).
- HTTP 리디렉션 후 Location 헤더에서 상대 경로를 지원하도록 했습니다. #40985를 해결했습니다. #41162 (Kruglov Pavel).
- 서버를 재시작하지 않고 HTTP handler의 변경 사항을 즉시 적용합니다. #41177 (Azat Khuzhin).
- ClickHouse Keeper: 종료 시 활성 세션을 올바르게 닫습니다. #41215 (Antonio Andelic). 이로 인해 “table is read-only” 오류가 발생하는 기간이 줄어듭니다.
- clickhouse-client/local에서 SQL 쿼리를 자동으로 주석 처리하는 기능을 추가했습니다(
Alt-#, readline과 유사). #41224 (Azat Khuzhin). - 설정
do_no_evict_index_and_mark_files를 1에서 0으로 또는 0에서 1로 변경한 후 발생하던 캐시 비호환성 문제를 수정했습니다. #41330 (Kseniia Sumarokova). - 사용자가 크기가 > 256인 FixedString 타입 컬럼을 생성할 수 없도록
allow_suspicious_fixed_string_types설정을 추가했습니다. #41495 (Duc Canh Le). - system.parts에
has_lightweight_delete컬럼을 추가했습니다. #41564 (Kseniia Sumarokova).
빌드/테스트/패키징 개선
- 모든 설정에 대해 문서가 작성되도록 강제합니다. #40644 (Alexey Milovidov).
- 현재의 모든 메트릭에 대한 문서화를 의무화했습니다. #40645 (Alexey Milovidov).
- 모든 profile event counter에 대해 문서화를 의무화했습니다. 누락된 부분의 문서도 작성했습니다. #40646 (Alexey Milovidov).
- 일부 의존성을 수정해 최소
clickhouse-local빌드를 사용할 수 있게 했습니다. #40460 (Alexey Milovidov). 크기는 50 MiB 미만입니다. - 테스트에서 SQL 함수 커버리지를 계산해 보고합니다. #40593. #40647 (Alexey Milovidov).
- 모든 MergeTree setting의 문서화를 의무화했습니다. #40648 (Alexey Milovidov).
- 고수준의 공통 서버 구성 요소를 위한 내장 참고 문서 프로토타입입니다. #40649 (Alexey Milovidov).
- 변경된 모든 쿼리가 테스트되었는지 확인하기 위해, 변경된 perf 테스트의 모든 쿼리를 점검합니다. #40322 (Nikita Taranov).
- TGZ 패키지를 수정했습니다. #40681 (Mikhail f. Shiryaev).
- 디버그 심볼을 수정했습니다. #40873 (Azat Khuzhin).
- 오래된 하드웨어나 임베디드 하드웨어에서 유용한 x86용 SSE2 전용 빌드를 생성할 수 있도록 CI 구성을 확장했습니다. #40999 (Robert Schulze).
- llvm/clang 15로 전환. #41046 (Azat Khuzhin).
- #40938의 후속 작업입니다.
Loggers클래스의 ODR 위반 문제를 수정합니다. #40398, #40937을 해결합니다. #41060 (Dmitry Novik). - GitHub 릴리스 에셋에 macOS 바이너리를 추가해 #37718을 해결했습니다. #41088 (Mikhail f. Shiryaev).
- c-ares 라이브러리가 이제 ClickHouse의 빌드 시스템에 함께 포함됩니다. #41239 (Robert Schulze).
- 메인 ClickHouse 코드에서
dlopen을 제거했습니다. library-bridge와 odbc-bridge에는 그대로 남아 있습니다. #41428 (Alexey Milovidov). - 메인 ClickHouse binary에서
dlopen은 허용하지 않습니다. 이는 유해하고 안전하지 않기 때문입니다. ClickHouse에서는 이를 사용하지 않습니다. 다만 일부 라이브러리에서는 “plugins”를 구현하기 위해 이를 사용할 수 있습니다. 타사의 통제되지 않은 위험한 라이브러리를 프로세스 주소 공간에 로드하는 이런 오래된 방식은 매우 위험하므로, ClickHouse에서는 이를 절대로 권장하지 않습니다. #41429 (Alexey Milovidov). - deb 패키지에
source필드를 추가하고nfpm을 업데이트했습니다. #41531 (Mikhail f. Shiryaev). - 자체 개발한 DWARF 파서에서 DWARF-5를 지원합니다. #40710 (Azat Khuzhin).
- 테스트용 ZooKeeper 클라이언트에 결함 주입을 추가했습니다 #30498 (Alexander Tokmakov).
- S3 스토리지를 사용하는 무상태 테스트를 debug 및 tsan과 함께 추가 #35262 (Kseniia Sumarokova).
- S3 상에서 stress 시도 #36837 (alesapin).
clang-tidy에서concurrency-mt-unsafe를 활성화 #40224 (Alexey Milovidov).
버그 수정
- AWS SDK의 버그로 인해 발생할 수 있는 잠재적인 데이터 손실을 수정했습니다. 이 버그는 ClickHouse를 S3와 함께 사용할 때만 발생할 수 있습니다. #40506 (alesapin). 이 버그는 AWS SDK에 5년 동안 보고된 상태로 남아 있었으며, 당사의 보고 후 해결되었습니다.
- Native 형식의 악의적인 데이터로 인해 크래시가 발생할 수 있습니다. #41441 (Alexey Milovidov).
- 집계 함수
categorialInformationValue의 속성이 잘못 정의되어 있어, 런타임에 널 포인터 역참조가 발생할 수 있었습니다. 이는 #41443를 해결합니다. #41449 (Alexey Milovidov). - Apache
ORC포맷으로 데이터를 기록할 때 버퍼 오버런이 발생할 수 있습니다. #41458 (Alexey Milovidov). - 인수로 널 허용(Nullable) 배열(Array)을 사용할 때 함수
encrypt및contingency의 메모리 안전성 문제를 수정했습니다. 이로써 #41004를 해결했습니다. #40195 (Alexey Milovidov). - ‘not_processed’가 NULL이 아닐 때 발생하는 MergeJoin 버그를 수정했습니다. #40335 (liql2007).
- IN 연산자에서 Decimal 정밀도 손실이 발생할 때 잘못된 결과가 나오는 문제를 수정했습니다. ref #41125. #41130 (Vladimir C).
- 여러 단계의
Nested컬럼에서 누락된 컬럼을 채우는 동작을 수정했습니다. #37152 (Anton Popov). - 사용이 권장되지 않는 Ordinary 데이터베이스의 SYSTEM UNFREEZE 쿼리를 수정했습니다. https://github.com/ClickHouse/ClickHouse/pull/36424에 대한 수정입니다. #38262 (Vadim Volodin).
- WITH 문에서 도입된, 사용되지 않는 알 수 없는 컬럼 문제를 수정했습니다. 이 변경으로 #37812 문제가 해결되었습니다. #39131 (Amos Bird).
- 윈도우 함수가 있을 때 ORDER BY에 대한 쿼리 분석 문제를 수정했습니다. #38741을 수정했습니다. #24892을 수정했습니다. #39354 (Dmitry Novik).
- 사용자가 집계 함수에 대한 WINDOW ORDER BY/PARTITION BY 표현식을 계산하려고 할 때 발생하는
Unknown identifier (aggregate-function)예외를 수정했습니다. #39762 (Vladimir Chebotaryov). - 설정
max_analyze_depth를 사용해 하나의 쿼리에서 analyze 수행 횟수를 제한합니다. 이는 서브쿼리가 비정상적으로 많은 쿼리에서 분석 시간이 기하급수적으로 증가하는 것을 방지합니다. #40334 (Vladimir C). - MergeTree 엔진 계열의 컬럼 TTL에서 드물게 발생하는 버그를 수정했습니다. 수직 병합이 반복될 경우
Cannot unlink file ColumnName.bin ... No such file or directory.오류가 발생할 수 있었습니다. #40346 (alesapin). - IPv4와 IPv6가 모두 있는 경우 둘 다 DNS 레코드를 사용합니다. #40353 (Maksim Kita).
- Hadoop에서 snappy 압축 파일을 읽을 수 있게 했습니다. #40482 (Kruglov Pavel).
- 가변 차원 배열을 포함하는
Object타입(실험적 기능) 값을 파싱하는 중 발생하던 충돌을 수정했습니다. #40483 (Duc Canh Le). - 설정
input_format_tsv_skip_first_lines관련 문제를 수정했습니다. #40491 (mini4). - MaterializedPostgreSQL 데이터베이스/테이블 엔진 시작 시 발생하는 버그(레이스 컨디션)를 수정했습니다. #40262. relcache_callback_list 슬롯 한도에 도달할 때 발생하는 오류를 수정했습니다. #40511 (Maksim Buren).
- DateTime64를 파싱하는 과정에서 발생할 수 있는 ‘Decimal math overflow’ 오류를 수정했습니다. #40546 (Kruglov Pavel).
- 경량한 삭제가 적용된 행이 포함된 파트의 수직 병합을 수정했습니다. #40559 (Alexander Gololobov).
- 압축이 활성화된 상태에서 URL 테이블 엔진에 데이터를 쓸 때 발생하던 segment fault를 수정했습니다. #40565 (Frank Chen).
- 맵과 함께 사용하는 arrayElement 함수에서 발생할 수 있는 논리적 오류
'Invalid Field get from type UInt64 to type String'를 수정했습니다. #40572 (Kruglov Pavel). - 파일 시스템 캐시에서 발생할 수 있는 경쟁 상태를 해결했습니다. #40586 (Kseniia Sumarokova).
- 이 기능은 제대로 작동한 적이 없고 완료된 뮤테이션이 되살아날 수 있으므로,
MergeTree테이블의 영향을 받지 않은 파티션에서 뮤테이션을 스키핑하는 기능을 제거했습니다. #40589 (Alexander Tokmakov). - 실행 중인 구성에 이미 사용 중인 gRPC 포트를 추가하면 ClickHouse 서버가 비정상 종료됩니다. #40597 (何李夫).
base58Encode / base58Decode에서 앞부분의 0 / ‘1’ 처리 문제를 수정했습니다. #40620 (Andrey Zvonov).- keeper-fix: 스냅샷 설치 중 로그에 접근할 때 발생하는 경쟁 상태를 수정했습니다. #40627 (Antonio Andelic).
- toFixedString 함수의 단락 평가를 수정했습니다. #40622를 부분적으로 해결합니다. #40628 (Kruglov Pavel).
- ClickHouse에서 SQLite의 int8 컬럼이 int64 컬럼으로 변환되도록 수정했습니다. #40639를 수정했습니다. #40642 (Barum Rho).
- 재귀
Buffer테이블의 스택 오버플로우를 수정했습니다. 이로써 #40637 문제가 해결됩니다. #40643 (Alexey Milovidov). - 새 쿼리를
ProcessList에 삽입하는 과정에서 메모리 할당이 발생합니다. 이 할당 중 메모리 한도에 도달하면 이미ProcessList::mutex를 획득한 상태이므로 OvercommitTracker를 사용할 수 없습니다. #40611을 수정했습니다. #40677 (Dmitry Novik). - 마크를 읽는 중 max_read_buffer_size=0일 때 발생하는 LOGICAL_ERROR를 수정했습니다. #40705 (Azat Khuzhin).
- 쿼리 Context 없이(Kafka/…에서) MVs로 푸시할 때 발생하던 메모리 누수를 수정했습니다. #40732 (Azat Khuzhin).
- CSV 스키마 추론에서 발생할 수 있는 “Attempt to read after eof” 오류를 수정했습니다. #40746 (Kruglov Pavel).
- write-through cache의 논리 오류 “파일 세그먼트 완료는 downloader만 수행할 수 있습니다”를 수정했습니다. #40748를 해결했습니다. #40759 (Kseniia Sumarokova).
- GROUPING 함수의 결과를 SQL 및 다른 DBMS와 동일하게 변경했습니다. #40762 (Dmitry Novik).
- #40595에서
/etc/hosts의 이름-주소 확인 시host_regexp기능이 제대로 작동하지 않는 문제가 보고되었습니다. 해당 문제가 수정되었습니다. #40769 (Arthur Passos). - Log 계열의 증분 백업을 수정했습니다. #40827 (Vitaly Baranov).
- zero-copy 복제에서 잠재적인 데이터 손실을 초래할 수 있는 매우 드문 버그를 수정했습니다. #40844 (alesapin).
- 서로 다른 컬럼에서 생성된 동일한 Set 표현식으로 인해 발생하던 key condition 분석 충돌을 수정했습니다. #40850 (Duc Canh Le).
- 중첩된 JSON 객체의 스키마 추론을 수정했습니다. #40851 (Kruglov Pavel).
- 비어 있어도 삭제되지 않던 파일 시스템 캐시 파일용 3자리 접두사 디렉터리를 수정했습니다. #40797를 해결합니다. #40867 (Kseniia Sumarokova).
- 레플리카 연결에 실패했을 때 발생하는 처리되지 않은 DNS_ERROR를 수정했습니다. #40881 (Robert Coelho).
- subquery에서 불필요한 컬럼을 제거할 때 발생하는 버그를 수정했습니다. #40884 (luocongkai).
- 원격 읽기 버퍼에서 추가 메모리 할당 문제를 수정했습니다. #40896 (Kseniia Sumarokova).
- 데이터베이스 삭제 권한이 명시적으로 취소된 사용자가 여전히 데이터베이스를 삭제할 수 있던 동작을 수정했습니다. #40906 (Nikita Mikhaylov).
- ClickHouse Keeper 수정: 쓰기 요청의 경로를 Keeper 내부 시스템 노드 경로와 정확하게 비교하도록 수정했습니다. #40918 (Antonio Andelic).
- WriteBufferFromS3의 교착 상태를 해결했습니다. #40943 (Kseniia Sumarokova).
DESCRIBE TABLE url()및 일부 다른DESCRIBE TABLE <table_function>()의 접근 권한 문제를 수정했습니다. #40975 (Vitaly Baranov).WITH GROUPING SETS의 잘못된 parser 로직을 제거해nullptr역참조로 이어질 수 있는 문제를 해결했습니다. #41049 (Duc Canh Le).- ClickHouse Keeper 관련 수정: Keeper 종료 중 발생할 수 있는 segfault 문제를 수정했습니다. #41075 (Antonio Andelic).
- 집계 함수 조합자에서 발생할 수 있는 segfault, use-heap-after-free, 메모리 누수 문제를 수정했습니다. #40848을 해결합니다. #41083 (Kruglov Pavel).
- Window views 관련 query_views_log를 수정했습니다. #41132 (Raúl Marín).
- 기본적으로 optimize_monotonous_functions_in_order_by를 비활성화하여 다음 이슈를 완화합니다: #40094. #41136 (Denny Crane).
- Ordinary에서 Atomic으로 데이터베이스 엔진을 자동 변환하는 과정에서 발생하던 “possible deadlock avoided” 오류를 수정했습니다. #41146 (Alexander Tokmakov).
- 빈 block일 때 SortedBlocksWriter에서 발생하는 SIGSEGV를 수정했습니다(
optimize_aggregation_in_order및join_algorithm=auto사용 시 발생 가능). #41154 (Azat Khuzhin). - array join에서 trivial count 최적화가 적용된 경우 잘못된 쿼리 결과가 반환되던 문제를 수정했습니다. 이 수정은 #39431을 해결합니다. #41158 (Denny Crane).
- GetPriorityForLoadBalancing::getPriorityFunc()의 stack-use-after-return 문제를 수정했습니다. #41159 (Azat Khuzhin).
- 위치 인수 예외 “Positional argument out of bounds”를 수정했습니다. #40634을 종료합니다. #41189 (Kseniia Sumarokova).
- 손상된 분리된 파트의 백그라운드 정리 문제를 수정했습니다. #41190 (Kseniia Sumarokova).
- WHERE 절이 있는 크로스 조인이 많은 경우 발생하는 지수적 쿼리 재작성을 수정하고, #21557를 해결했습니다. #41223 (Vladimir C).
- write-through cache에서 필요한 예외 유형이 모두 적절히 처리되지 않아 발생할 수 있었던 논리적 오류를 수정했습니다. #41208을 해결합니다. #41232 (Kseniia Sumarokova).
- system.filesystem_cache_log의 String 로그 항목을 수정했습니다. #41233 (jmimbrero).
- 서브쿼리에
OFFSET절이 있고 외부 쿼리에WHERE절이 있는 경우 잘못된 결과를 반환할 수 있던 문제를 수정했습니다. #40416을 수정합니다. #41280 (Alexander Tokmakov). query_plan_optimize_primary_key가 활성화된 상태에서 발생할 수 있는 잘못된 쿼리 결과를 수정했습니다. #40599를 해결합니다. #41281 (Nikolai Kochetov).- lowerUTF8/upperUTF8에서 잘못된 시퀀스가 다른 행에 영향을 주지 않도록 했습니다. #41286 (Azat Khuzhin).
Object유형의 컬럼이 있는ALTER <table> ADD COLUMN쿼리의 문제를 수정했습니다. #41290 (Anton Popov).- config에
distributed_ddl.path가 없을 때system.distributed_ddl_queue를 조회하면 발생하는 “No node” 오류를 수정했습니다. #41096를 해결합니다. #41296 (young scott). - 디스크의 객체 스토리지에서 발생하던 잘못된 논리 오류
Expected relative path를 수정했습니다. #41246와 관련이 있습니다. #41297 (Kseniia Sumarokova). - MsgPack 포맷에서 UUID를 삽입하기 전에 컬럼 유형 검사를 추가했습니다. #41309 (Kruglov Pavel).
- 활성화된 설정
async_insert를 사용해 잘못된 형식의 데이터를Object유형의 컬럼에 비동기적으로 삽입한 뒤 발생할 수 있는 충돌 문제를 수정했습니다. async 삽입의 모든 배치에 포함된 JSON이 유효하지 않아 파싱할 수 없는 경우 이러한 문제가 발생할 수 있었습니다. #41336 (Anton Popov). - async_socket_for_remote/use_hedged_requests 및 병렬 KILL 실행 시 발생할 수 있는 교착 상태를 수정했습니다. #41343 (Azat Khuzhin).
- 기본적으로 optimize_rewrite_sum_if_to_count_if를 비활성화해 다음 이슈를 완화합니다: #38605 #38683. #41388 (Denny Crane).
- 22.8부터 데이터베이스가
Replicated이고 클러스터 이름과 데이터베이스 이름이 같으면ON CLUSTER절이 무시되었습니다. 이 때문에Replicated에서DROP PARTITION ON CLUSTER가 예상과 다르게 동작했습니다. 이 문제를 수정하여 이제ON CLUSTER절은 데이터베이스 수준에서 복제되는 쿼리에 대해서만 무시됩니다. #41299를 수정했습니다. #41390 (Alexander Tokmakov). - 쿼리 취소(
KILL QUERY또는 서버 종료) 시 발생할 수 있는 멈춤/교착 상태 문제를 수정했습니다. #41467 (Azat Khuzhin). - JBOD 기능 사용 시 발생할 수 있는 서버 충돌 문제를 수정했습니다. 이로써 #41365가 해결됩니다. #41483 (Amos Bird).
- 널 허용 FixedString에서 String으로의 변환을 수정했습니다. #41541 (Duc Canh Le).
- 잘못된 집계 상태를 groupBitmap*에 전달했을 때 충돌이 발생하는 문제를 방지했습니다. #41563 (Raúl Marín).
ORDER BY및1500 <= LIMIT <= max_block_size가 있는 쿼리에서 상단 행이 누락된 잘못된 결과가 반환될 수 있던 문제를 수정했습니다. #41182. #41576 (Nikolai Kochetov).- materialized view 사용 시 X-ClickHouse-Summary의 읽기 바이트/행 수를 수정했습니다. #41586 (Raúl Marín).
OFFSET이 있는 쿼리에서 발생할 수 있는pipeline stuck예외를 수정했습니다. 이 오류는enable_optimize_predicate_expression = 0이고WHERE에 항상 false인 조건이 있을 때 발견되었습니다. #41383를 해결했습니다. #41588 (Nikolai Kochetov).
ClickHouse 릴리스 22.8, 2022-08-18. 발표 자료, 동영상
하위 호환되지 않는 변경 사항
Date32및DateTime64의 범위를 확장하여 1900년부터 2299년까지의 날짜를 지원합니다. 이전 버전에서는 지원 범위가 1925년부터 2283년까지로 제한되었습니다. 구현은 율리우스력에서 그레고리력으로의 역사적 전환을 반영하는 대신 프로렙틱 그레고리력(이는 ISO 8601:2004 (3.2.1절 그레고리력)을 준수함)을 사용합니다. 이 변경은 범위를 벗어난 인수에 대한 구현별 동작에 영향을 줍니다. 예를 들어 이전 버전에서1899-01-01값이1925-01-01로 잘렸다면, 새 버전에서는1900-01-01로 잘립니다. 인터벌이 구현별 기준 시점부터 계산되므로INTERVAL 3 QUARTER를 전달할 때toStartOfInterval의 반올림 동작이 최대 1분기까지 달라집니다. #28216을 해결하고, #38393을 개선합니다. #39425 (Roman Vasin).- 이제 관련된 모든 딕셔너리 소스가
remote_url_allow_hosts설정을 따릅니다. HTTP, Cassandra, Redis에는 이미 적용되어 있었으며, 여기에 ClickHouse, MongoDB, MySQL, PostgreSQL이 추가되었습니다. 호스트 검사는 DDL로 생성된 딕셔너리에 대해서만 수행됩니다. #39184 (Nikolai Kochetov). - 이제 미리 빌드된 ClickHouse x86 바이너리를 사용하려면 AVX 명령어를 지원해야 합니다. 즉, 2011년에 출시된 Intel Sandy Bridge / AMD Bulldozer 이상 세대의 CPU가 필요합니다. #39000 (Robert Schulze).
- 원격 파일 시스템 캐시를 조합 가능하게 만들고, 특정 파일(idx, mrk 등)은 제거되지 않도록 허용하며, 이전 캐시 버전을 삭제합니다. 이제 Azure blob storage 디스크, Local 디스크, StaticWeb 디스크 등 위에 캐시를 구성할 수 있습니다. 이 PR은 캐시 구성이 변경되었고 캐시가 동작하려면 구성 파일을 업데이트해야 하므로 하위 호환되지 않는 변경으로 표시되었습니다. 이전 캐시는 새 구성에서도 계속 사용됩니다. 이전 캐시 구성으로도 서버는 정상적으로 시작됩니다. https://github.com/ClickHouse/ClickHouse/issues/36140 를 해결합니다. https://github.com/ClickHouse/ClickHouse/issues/37889 를 해결합니다. (Kseniia Sumarokova). #36171)
새 기능
- MergeTree 테이블에서 SQL 표준
DELETE FROM구문과 MergeTree 계열을 위한 경량한 삭제 구현을 지원합니다. #37893 (Jianmei Zhang) (Alexander Gololobov). 참고: 이 새 기능이 ClickHouse를 HTAP DBMS로 만들어 주는 것은 아닙니다. - 대화형 모드에서
SET param_abc = 'def'와 같이 쿼리 매개변수를 설정할 수 있으며, 이를 설정으로 네이티브 프로토콜을 통해 전달할 수 있습니다. #39906 (Nikita Taranov). - 네이티브 프로토콜에서 quota key를 설정할 수 있습니다 (Yakov Olkhovsky).
exact_rows_before_limit(0/1) 설정이 추가되었습니다. 이 설정을 활성화하면 ClickHouse가rows_before_limit_at_least통계의 정확한 값을 제공하지만, 그 대가로 limit 이전의 데이터를 끝까지 모두 읽어야 합니다. 이로써 #6613이 해결됩니다. #25333 (kevin wan).s3Cluster테이블 함수를 사용해Distributed및Replicated엔진 테이블에 대해 병렬 분산 insert select를 수행하는 기능이 추가되었습니다 #34670. #39107 (Nikita Mikhaylov).- 텍스트 형식에서의 스키마 추론을 제어하기 위한 새로운 설정이 추가되었습니다: -
input_format_try_infer_dates- 문자열에서 날짜를 추론하려고 시도합니다. -input_format_try_infer_datetimes- 문자열에서 datetime을 추론하려고 시도합니다. -input_format_try_infer_integers-Float64대신Int64를 추론하려고 시도합니다. -input_format_json_try_infer_numbers_from_strings- JSON 포맷에서 JSON 문자열로부터 숫자를 추론하려고 시도합니다. #39186 (Kruglov Pavel). - JSON 포맷의 로그 출력을 제공하는 옵션이 추가되었습니다. 목적은 로그 분석 도구에서 더 쉽게 수집하고 쿼리할 수 있도록 하기 위한 것입니다. #39277 (Mallik Hassan).
- 장시간 실행되거나 연속적으로 수행되는 쿼리에서 현재 시간을 가져올 수 있는 함수
nowInBlock이 추가되었습니다. #39522를 해결합니다. 참고:now64InBlock및todayInBlock함수는 없습니다. #39533 (Alexey Milovidov). executable()테이블 함수에 설정을 지정할 수 있는 기능이 추가되었습니다. #39681 (Constantine Peresypkin).- 데이터베이스 엔진을
Ordinary에서Atomic으로 자동 변환하는 기능이 구현되었습니다.flags디렉터리에 비어 있는convert_ordinary_to_atomic파일을 생성하면, 다음 서버 시작 시 모든Ordinary데이터베이스가 자동으로 변환됩니다. #39546을 해결합니다. #39933 (Alexander Tokmakov). SELECT ... INTO OUTFILE '...' AND STDOUT를 지원합니다. #37490. #39054 (SmitaRKulkarni).PrettyMonoBlock,PrettyNoEscapesMonoBlock,PrettyCompactNoEscapes,PrettyCompactNoEscapesMonoBlock,PrettySpaceNoEscapes,PrettySpaceMonoBlock,PrettySpaceNoEscapesMonoBlock포맷이 추가되었습니다. #39646 (Kruglov Pavel).
성능 개선
- 집계 결과를 메모리 효율적으로 병합할 때 메모리 사용량을 개선했습니다. #39429 (Nikita Taranov).
- 쿼리에서 생성되는 동시 실행 스레드의 총수를 제한하는 동시성 제어 로직이 추가되었습니다. #37558 (Sergei Trifonov). 높은 QPS 환경에서 모든 쿼리의 전체 스레드 수를 제한해 성능을 높일 수 있도록
concurrent_threads_soft_limit parameter가 추가되었습니다. #37285 (Roman Vasin). - 비압축 캐시와 마크 캐시에
SLRU캐시 정책을 추가했습니다. (Kseniia Sumarokova). #34651 (alexX512). 로컬 캐시 기능과 캐시 알고리즘을 분리했습니다. #38048 (Han Shukai). - Intel® In-Memory Analytics Accelerator (Intel® IAA)는 차세대 Intel® Xeon® Scalable 프로세서(“Sapphire Rapids”)에서 사용할 수 있는 하드웨어 가속기입니다. 이 가속기의 목적은 데이터 (de)compression 및 filtering과 같은 일반적인 분석 작업의 속도를 높이는 것입니다. ClickHouse는 Intel® IAA 오프로딩 기술을 활용해 고성능 DEFLATE 구현을 제공하는 새로운 “DeflateQpl” 코덱을 추가했습니다. 이 코덱은 하드웨어 가속기에 대한 액세스를 추상화하며, 하드웨어 가속기를 사용할 수 없을 때는 소프트웨어 폴백을 제공하는 Intel® Query Processing Library (QPL)을 사용합니다. 일반적으로 DEFLATE는 ClickHouse의 기본 코덱인 LZ4보다 더 높은 압축률을 제공하므로, 디스크 I/O가 줄어들고 main memory 활용도도 낮아집니다. #36654 (jasperzhu). #39494 (Robert Schulze).
ORDER BY와 함께 순서대로 처리되는DISTINCT: 입력 stream의 정렬 설명을 기반으로 정렬 방식을 추론합니다. 입력 stream이 이미 정렬된 경우 정렬을 건너뜁니다. #38719 (Igor Nikonov). 메모리 사용량을 크게 줄이고 쿼리 실행 시간을 단축합니다 +DISTINCT컬럼이ORDER BY컬럼과 일치할 때 최종 distinct에DistinctSortedChunkTransform을 사용하며,EXPLAIN PIPELINE에서는 이를DistinctSortedStreamTransform으로 이름을 변경합니다 → 이를 통해 메모리 사용량이 크게 개선됩니다 +DistinctSortedChunkTransform의 hot loop에서 불필요한 allocations를 제거합니다. #39432 (Igor Nikonov). 정렬 설명을 DISTINCT 컬럼에 적용할 수 있는 경우에만DistinctSortedTransform을 사용하고, 그렇지 않으면 일반DISTINCT구현으로 대체합니다 + 이를 통해DistinctSortedTransform실행 중 검사 횟수를 줄일 수 있습니다. #39528 (Igor Nikonov). 수정:DistinctSortedTransform이 정렬을 활용하지 못했습니다. clearing_columns를 잘못 감지해(항상 비어 있음) HashSet을 한 번도 비우지 않았습니다. 그 결과 사실상 일반DISTINCT(DistinctTransform)처럼 동작했습니다. 이 수정으로 메모리 사용량이 크게 줄어듭니다. #39538 (Igor Nikonov).cluster및 유사한 테이블 함수를 실행할 때 원격 테이블의 구조를 가져오는 데 로컬 노드를 최우선으로 사용합니다. #39440 (Mingliang Pan).- AVX512VBMI2 compress store를 사용해 숫자 컬럼 필터링을 최적화했습니다. #39633 (Guo Wangyang). AVX512 VBMI2를 지원하는 시스템에서는 이 PR로 SSB 벤치마크 쿼리 3.1, 3.2, 3.3(SF=100)의 성능이 약 6% 향상됩니다. Intel Icelake Xeon 8380 2소켓 시스템에서 테스트했습니다. #40033 (Robert Schulze).
- 멀티스레드 환경에서 함수형 표현식을 활용한 인덱스 분석을 최적화합니다. #39812 (Guo Wangyang).
- 복잡한 쿼리 최적화: 등록된 UDF가 없으면 UDF의 AST를 순회하지 않습니다. #40069 (Raúl Marín). CurrentMemoryTracker의 alloc 및 free 작업을 최적화했습니다. #40078 (Raúl Marín).
- Base58 인코딩/디코딩 성능이 개선되었습니다. #39292 (Andrey Zvonov).
- SSE/AVX/AVX512용 바이트-비트 마스크 변환을 개선했습니다. #39586 (Guo Wangyang).
개선 사항
AggregateFunction타입과 상태 표현을 정규화했습니다. 이는 #35788와 같은 최적화가count(not null columns)를count()로 처리하여, 분산 Interpreters에서Conversion from AggregateFunction(count) to AggregateFunction(count, Int64) is not supported오류를 일으킬 수 있기 때문입니다. #39420 (Amos Bird). 상태가 동일한 함수는 materialized view에서 서로 바꾸어 사용할 수 있습니다.system.backups테이블을 개편하고 단순화했으며,internal컬럼을 제거하고 사용자가 작업 ID를 설정할 수 있도록 했습니다. 또한num_files,uncompressed_size,compressed_size,start_time,end_time컬럼을 추가했습니다. #39503 (Vitaly Baranov).Replicated데이터베이스의 DDL 쿼리 결과 테이블 구조를 개선했습니다(세그먼트와 레플리카 이름을 별도 컬럼으로 분리하고 상태를 더 명확히 표시).distributed_ddl_entry_format_version이 3(기본값)으로 설정된 경우CREATE TABLE ... ON CLUSTER쿼리는 먼저 initiator에서 정규화될 수 있습니다. 이는 initiator가 쿼리에 지정된 cluster에 속하지 않으면ON CLUSTER쿼리가 작동하지 않을 수 있음을 의미합니다. 수정: #37318, #39500 - 데이터베이스가Replicated이고 cluster 이름이 데이터베이스 이름과 같으면ON CLUSTER절을 무시합니다. 관련: #35570 -Replicated데이터베이스 엔진 관련 기타 자잘한 수정 -Replicated데이터베이스 시작 시 메타데이터 일관성을 확인하고, 로컬 메타데이터와 Keeper의 메타데이터가 일치하지 않으면 레플리카 복구를 시작합니다. #24880을 해결합니다. #37198 (Alexander Tokmakov).- 진행 상황 보고(
X-ClickHouse-Summary)에 result_rows 및 result_bytes를 추가했습니다. #39567 (Raúl Marín). - MergeTree의 프라이머리 키(primary key) 분석을 개선했습니다. #25563 (Nikolai Kochetov).
timeSlots가 이제 DateTime64를 지원합니다. DateTime64로 작업할 때 하위 초 단위의 Duration과 슬롯 크기를 사용할 수 있습니다. #37951 (Andrey Zvonov).EmbeddedRocksDB테이블에 대한LEFT SEMI및LEFT ANTIDirect JOIN 지원이 추가되었습니다. #38956 (Vladimir C).- fsync 작업용 profile events를 추가했습니다. #39179 (Azat Khuzhin).
- 일반 함수
file(path[, default])에 두 번째 인수가 추가되었습니다. 이 인수는 파일이 존재하지 않을 때 함수가 반환할 값을 지정합니다. #39218 (Nikolay Degterinsky). - http를 통한 읽기와 관련해 몇 가지 사소한 수정이 이루어졌으며, 200 OK인 경우 partial content를 재시도할 수 있도록 했습니다. #39244 (Kseniia Sumarokova).
CREATE TEMPORARY TABLE ... (<list of columns>) AS ...형식의 쿼리를 지원합니다. #39462 (Kruglov Pavel).- 사용자 정의 TLD에서
!/*(느낌표/별표)를 지원하도록 했습니다(cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom()). #39496 (Azat Khuzhin). - NATS에 대한 TLS 연결 지원이 추가되었습니다. #39525를 구현했습니다. #39527 (Constantine Peresypkin).
clickhouse-obfuscator(테스트 및 부하 생성을 위한 데이터베이스 난독화 도구)에 이제 사전 학습된 모델과 함께 사용할 수 있는 새로운--save및--load매개변수가 추가되었습니다. 이로써 #39534가 해결되었습니다. #39541 (Alexey Milovidov).- 재시작 중 로그 회전이 잘못 동작하던 문제를 수정했습니다. #39558 (Nikolay Degterinsky).
- 외부 집계(external aggregation)가 활성화된 경우 집계 프로젝션을 빌드할 때 발생하는 문제를 수정했습니다. 드문 경우에만 발생하고 설정 변경으로 쉽게 우회할 수 있으므로 개선 사항으로 분류했습니다. 이 변경으로 #39667 문제가 해결됩니다. #39671 (Amos Bird).
Map유형 인수로 해시 함수를 실행할 수 있게 했습니다. #39685 (Anton Popov).- 스택 트레이스에서 주소를 숨길 수 있는 구성 매개변수를 추가했습니다. 보안이 약간 개선될 수는 있지만, 일반적으로는 오히려 해로우므로 사용하지 않는 것이 좋습니다. #39690 (Alexey Milovidov).
- 중첩 함수 데이터의 메모리 세그먼트가 정렬되도록 AggregateFunctionDistinct의 prefix 크기를 변경했습니다. #39696 (Pxl).
clickhouse-diagnostic도구에 전달되는 자격 증명이 올바르게 이스케이프되도록 했습니다. #39707 (Dale McDiarmid).- ClickHouse Keeper 개선: 종료 시 snapshot을 생성합니다. config
keeper_server.create_snapshot_on_exit로 제어할 수 있으며, 기본값은true입니다. #39755 (Antonio Andelic). row_policy_filter및additional_filter에 대한 기본 키(primary key) 분석을 지원합니다. 또한 #37454와 같은 문제를 해결하는 데 도움이 됩니다. #39826 (Amos Bird).- 실행 UI의 사용성과 관련된 두 가지 문제를 수정했습니다. - 불필요한 border radius와 margin 때문에 iPad에서 픽셀 단위로 정확하게 표시되지 않던 문제; - 첫 번째 쿼리 이후에는 진행 표시가 나타나지 않던 문제입니다. 이로써 #39957이 해결되었습니다. 이로써 #39960이 해결되었습니다. #39961 (Alexey Milovidov).
- 실행 UI: 행 번호 추가, 클릭 시 셀 선택 기능 추가, 테이블 셀에 히스테리시스 추가. #39962 (Alexey Milovidov).
- 실행 UI: 텍스트 영역에서 tab 키를 인식하되, 동시에 tab 탐색이 흐트러지지 않도록 개선했습니다. #40053 (Alexey Milovidov).
- 클라이언트에 서버 측 경과 시간이 표시됩니다. 이는 원격 datacenter에 있는 ClickHouse 서비스의 성능을 비교할 때 중요합니다. 이 변경으로 #38070이 해결됩니다. 배경은 this도 참조하십시오. #39968 (Alexey Milovidov).
parseDateTime64BestEffortUS,parseDateTime64BestEffortUSOrNull,parseDateTime64BestEffortUSOrZero함수를 추가하고 #37492를 해결했습니다. #40015 (Tanya Bragin).system.processors_profile_log에 입력 행 등 더 많은 정보를 추가합니다. #40121 (Amos Bird).- 가능한 경우(ClickHouse 버전 22.8부터)
clickhouse-benchmark에서 기본적으로 서버 측 시간을 표시하도록 했습니다. 이는 Cloud의 성능을 정확하게 비교하는 데 필요합니다. 이 동작은 새로운--client-side-time명령줄 옵션으로 변경할 수 있습니다.--randomize명령줄 옵션을--randomize 1에서 인수 없이 사용하는 형식으로 변경했습니다. #40193 (Alexey Milovidov). - 쿼리 복잡도 제한이 설정되어 있고 해당 제한에 도달한 경우를 위한 카운터(ProfileEvents)를 추가했습니다(
overflow_mode=break와throw에 대해 각각 별도의 카운터). 예를 들어max_rows_to_read를read_overflow_mode = 'break'로 설정한 경우,OverflowBreak카운터 값을 보면 불완전한 결과를 구분할 수 있습니다. #40205 (Alexey Milovidov). - “Memory limit exceeded” 오류 발생 시 메모리 집계를 수정했습니다(이전에는 [peak] 메모리 사용량에 실패한 메모리 할당까지 포함되었습니다). #40249 (Azat Khuzhin).
- 파일 시스템 캐시용 메트릭
FilesystemCacheSize및FilesystemCacheElements를 추가했습니다. #40260 (Kseniia Sumarokova). - Hadoop의 보안 RPC 전송(hadoop.rpc.protection=privacy 및 hadoop.rpc.protection=integrity)을 지원합니다. #39411 (michael1589).
- functions multi(Fuzzy)Match(Any|AllIndices|AnyIndex)()를 사용할 때 pattern cache의 메모리 사용량이 지속적으로 증가하는 문제를 방지했습니다. #40264 (Robert Schulze).
빌드/테스트/패키징 개선
- ClickFiddle: 읽기/쓰기 모드에서 ClickHouse 버전을 테스트할 수 있는 새로운 도구 (Igor Baliuk).
- ClickHouse 실행 파일이 자체 압축 해제되도록 변경되었습니다 #35775 (Yakov Olkhovskiy, Arthur Filatenkov).
- 새로운 시간대 변경 사항을 지원하기 위해 tzdata를 2022b로 업데이트했습니다. 자세한 내용은 https://github.com/google/cctz/pull/226를 참조하십시오. 칠레의 2022년 DST 시작일은 9월 4일에서 9월 11일로 연기되었습니다. 이란은 2022-09-21에 표준시로 전환한 뒤 DST 관측을 영구적으로 중단할 계획입니다. 1977년 Asia/Tehran의 과거 시간대에 대한 수정 사항도 포함되었습니다. 이란은 1946년이 아니라 1935년에 표준시를 채택했습니다. 1977년에는 03-21 23:00부터 10-20 24:00까지 DST를 적용했습니다. 1978년 전환 시점은 03-20 및 10-20이 아니라 03-24 및 08-05였고, 1979년 봄 전환 시점은 03-21이 아니라 05-27이었습니다(https://data.iana.org/time-zones/tzdb/NEWS). (Alexey Milovidov).
- 이전 패키지는 systemd.service 파일을
/etc에 설치했습니다. 해당 위치의 파일은conf로 표시되어 삭제되지 않으며 자동으로 업데이트되지도 않습니다. 이 PR은 이를 정리합니다. #39323 (Mikhail f. Shiryaev). - LSan이 제대로 작동하도록 보장합니다. #39430 (Azat Khuzhin).
- TSAN은 clang-14에서 문제가 있어(https://github.com/google/sanitizers/issues/1552, https://github.com/google/sanitizers/issues/1540), 여기서는 TSAN 바이너리를 clang-15로 빌드합니다. #39450 (Mikhail f. Shiryaev).
- ClickHouse 도구를 별도의 실행형 프로그램으로 빌드하는 옵션을 제거했습니다. 이 변경으로 #37847이 수정되었습니다. #39520 (Alexey Milovidov).
- s390x(빅엔디안)에서의 빌드를 위한 소규모 사전 작업입니다. #39627 (Harry Lee). #39656 (Harry Lee). s390x용 BitHelpers의 엔디안 문제를 수정했습니다. #39656 (Harry Lee). s390x 아키텍처용 SipHash 관련 코드 일부를 구현했습니다(ClickHouse에서는 지원되지 않음). #39732 (Harry Lee). s390x 아키텍처용 coordination 스냅샷 코드의 엔디안 문제를 수정했습니다(ClickHouse에서는 지원되지 않음). #39931 (Harry Lee). s390x 아키텍처용 코덱 코드의 엔디안 문제를 수정했습니다(ClickHouse에서는 지원되지 않음). #40008 (Harry Lee). s390x 아키텍처용 ReadHelpers 및 WriteHelpers 코드에서 BigEndian 바이너리 데이터를 읽고 쓰는 과정의 엔디안 문제를 수정했습니다(ClickHouse에서는 지원되지 않음). #40179 (Harry Lee).
clang-16(trunk) 빌드를 지원합니다. 이로써 #39949가 종료되었습니다. #40181 (Alexey Milovidov).- CI에서 실행할 수 있도록 RISC-V 64 빌드를 준비합니다. 이는 #40141을 위한 작업입니다. #40197 (Alexey Milovidov).
- registerFunctions.cpp에서 extern 함수를 추가하고 호출해야 하는 단계를 없애기 위해 함수 등록 매크로 인터페이스(
FUNCTION_REGISTER*)를 간소화했으며, 이로써 새 함수의 증분 빌드도 더 빨라졌습니다. #38615 (Li Yin). - Docker: 이제 Docker 이미지의 entrypoint.sh가 멀티디스크 구성을 위해 config에서 찾은 모든 폴더에 대해 chown 명령을 생성하고 실행합니다 #17717. #39121 (Nikita Mikhaylov).
버그 수정
CapnProto입력 형식에서 발생할 수 있는 segfault를 수정했습니다. 이 버그는 kiojj가 ClickHouse 버그 바운티 프로그램을 통해 발견하고 제보했습니다. #40241 (Kruglov Pavel).- 배열 첨자 연산자가 잘못 동작하는 매우 드문 경우를 수정했습니다. 이로써 #28720이 해결되었습니다. #40185 (Alexey Milovidov).
- 암호화 함수의 인수 검사 미비 문제를 수정했습니다(쿼리 퍼저로 발견됨). 이로써 #39987이 해결되었습니다. #40194 (Alexey Milovidov).
- 여러 컬럼이 포함된
ENGINE = Set테이블에서IN연산자를 사용할 때 컬럼 순서가 잘못될 수 있는 문제를 수정했습니다. 이 수정으로 #13014가 해결됩니다. #40225 (Alexey Milovidov). - 암호화된 디스크에서 읽는 중 seek 동작을 수정했습니다. 이 PR은 #38381을 해결합니다. #39687 (Vitaly Baranov).
- join 계획의 중복 컬럼을 수정했습니다. 마침내 #26809를 해결했습니다. #40009 (Vladimir C).
- 서로 다른 날짜/시간 타입을 사용하는 SELECT의 ORDER BY WITH FILL에서 쿼리가 멈추는 문제를 수정했습니다. #37849 (Yakov Olkhovskiy).
- 프로젝션의 ORDER BY와 일치하도록 ORDER BY를 수정했습니다(이전에는 단순히 정렬되지 않은 결과를 반환했습니다). #38725 (Azat Khuzhin).
- GROUP BY SQL 문에서 함수 이름이 테이블 컬럼 또는 표현식 중 하나를 가리는 경우 해당 함수를 최적화하지 않습니다. #37032를 수정했습니다. #39103 (Anton Kozlov).
- RENAME TABLE 후 logs에 잘못된 테이블 이름이 표시되는 문제를 수정했습니다. 이 수정으로 #38018 문제가 해결되었습니다. #39227 (Amos Bird).
- 쿼리 최적화 중 컬럼 프루닝 시 위치 인수 처리 문제를 수정했습니다. #38433을 해결합니다. #39293 (Kseniia Sumarokova).
- Protobuf/CapnProto 포맷에서 빈 메시지가 있을 때 스키마 추론에 발생하던 버그를 수정하여, 비어 있는
Tuple타입의 컬럼이 생성될 수 있던 문제를 해결했습니다. #39051 Protobuf 및 CapnProto 포맷의 스키마 추론 과정에서 지원되지 않는 타입의 필드를 건너뛸 수 있게 해주는 새로운 설정 2개input_format_{protobuf/capnproto}_skip_fields_with_unsupported_types_in_schema_inference를 추가했습니다. #39357 (Kruglov Pavel). - (Window View는 실험적 기능입니다)
CREATE WINDOW VIEW .. ON CLUSTER ... INNER에서 발생하던 세그멘테이션 폴트를 수정했습니다. #39363을 해결했습니다. #39384 (Kseniia Sumarokova). - function으로 삽입하는 작업을 취소할 때 발생하던 WriteBuffer finalize 문제를 수정했습니다(이전 버전에서는 std::terminate로 이어질 수 있었습니다). #39458 (Kruglov Pavel).
- 희소 직렬화에서
Object유형 컬럼 저장 문제를 수정했습니다. #39464 (Anton Popov). - 프로젝션 사용 시 발생할 수 있는 “Not found column in block” 예외를 수정했습니다. 이로써 #39469이 해결되었습니다. #39470 (小路).
- 구체화된 뷰(materialized view)에서 DROP과 INSERT가 경합할 때 발생하던 예외를 수정했습니다. #39477 (Azat Khuzhin).
- Apache Avro 라이브러리의 버그: Avro 포맷의 데이터 레이스와 발생할 수 있는 힙 버퍼 오버플로우를 수정했습니다. #39094 해결. #33652 해결. #39498 (Kruglov Pavel).
- 비동기 읽기에서(
local_filesystem_read_method='pread_threadpool'설정 사용 시)O_DIRECT가 활성화된 상태(min_bytes_to_use_direct_io설정으로 활성화)에서 드물게 발생하던 버그를 수정했습니다. #39506 (Anton Popov). - (FreeBSD에서만) ClickHouse 시작 시 FreeBSD에서 발생하던 “Code: 49. DB::Exception: FunctionFactory: the function name ” is not unique. (LOGICAL_ERROR)” 문제를 수정했습니다. #39551 (Alexander Gololobov).
- 최근 도입된
splitByChar의 “maxsplit” 인수가 제대로 작동하지 않던 버그를 수정했습니다. #39552 (filimonov). enable_optimize_predicate_expression가 활성화된 ASOF JOIN의 버그를 수정하고 #37813을 해결했습니다. #39556 (Vladimir C).ON CLUSTER또는Replicated데이터베이스,ReplicatedMergeTree에서의CREATE/DROP INDEX쿼리 문제를 수정했습니다. 이전에는 이 쿼리가 모든 레플리카에서 실행되어 오류가 발생하거나 DDL 큐가 멈추곤 했습니다. #39511을 해결했습니다. #39565 (Alexander Tokmakov).- join이 포함된 push down 시 발생하는 “컬럼을 찾을 수 없음” 오류를 수정하고, #39505를 해결했습니다. #39575 (Vladimir C).
- 잘못된
REGEXP_REPLACE별칭을 수정했습니다. 이로써 https://github.com/ClickHouse/ClickBench/issues/9 문제가 해결됩니다. #39592 (Alexey Milovidov). - 지수 감쇠 윈도우 함수의 기준점을 윈도우의 마지막 값으로 수정했습니다. 이전에는 감쇠를
exp((t - curr_row_t) / decay_length)공식으로 계산했는데, 윈도우의 오른쪽 경계가CURRENT ROW가 아니면 이 방식은 올바르지 않습니다. 이를exp((t - last_row_t) / decay_length)로 변경했습니다.ROWS BETWEEN (smth) AND CURRENT ROW를 사용하는 윈도우의 결과는 변경되지 않습니다. #39593 (Vladimir Chebotaryov). - 피연산자의 scale을 바탕으로 감지할 수 있는 Decimal 나눗셈 오버플로우를 수정했습니다. #39600 (Andrey Zvonov).
- 설정
output_format_arrow_string_as_string및output_format_arrow_low_cardinality_as_dictionary가 함께 올바르게 작동하도록 수정했습니다. #39624를 해결했습니다. #39647 (Kruglov Pavel). - 분산 테이블 읽기에서 기본 데이터베이스를 결정하는 과정의 버그를 수정했습니다. #39674 (Anton Kozlov).
- (폐기된 Ordinary 데이터베이스에서만) mmap IO용 캐시를 사용하고 데이터베이스 엔진이 Ordinary이며 삭제된 테이블과 같은 이름의 새 테이블이 생성된 경우, SELECT가 삭제된 테이블의 데이터를 읽을 수 있었습니다. 이 문제를 수정했습니다. #39708 (Alexander Tokmakov).
- 발생할 수 있는 오류
Invalid column type for ColumnUnique::insertRangeFrom. Expected String, got ColumnLowCardinality를 수정했습니다. #38460를 수정했습니다. #39716 (Arthur Passos). - JSON 포맷의
meta섹션에 있는 필드 이름이 잘못 이중 이스케이프 처리되었습니다. 이로써 #39693가 해결되었습니다. #39747 (Alexey Milovidov). - 튜플과
IN연산자를 사용할 때 발생하던 잘못된 인덱스 분석을 수정하여, 잘못된 쿼리 결과가 나올 수 있던 문제를 해결했습니다. #39752 (Anton Popov). - params를 사용한 키 기준
EmbeddedRocksDB테이블 필터링 문제를 수정했습니다. #39757 (Antonio Andelic). - ARRAY JOIN 최적화로 인해 발생한 오류
Invalid number of columns in chunk pushed to OutputPort를 수정했습니다. #39164 관련 수정입니다. #39799 (Nikolai Kochetov). - Linux 커널 버그를 우회하기 위한 방법입니다.
local_filesystem_read_method=pread_threadpool를 사용해CANNOT_READ_ALL_DATA예외를 해결합니다. 이 버그는 man에 따르면 Linux 커널 버전 5.9와 5.10에만 영향을 미쳤습니다. #39800 (Anton Popov). - (NFS에서만) root-squashed 볼륨에서 발생하던 NFS mkdir 문제를 수정했습니다. #39898 (Constantine Peresypkin).
- DETACH/DROP 시 Prometheus 메트릭에서 Dictionaries를 제거합니다. #39926 (Azat Khuzhin).
- 가상 컬럼이 있는 StorageFile의 읽기 문제를 수정했습니다. #39907을 해결합니다. #39943 (flynn).
- fetches 중 발생하는 과도한 메모리 사용량을 수정했습니다. #39915를 수정했습니다. #39990 (Nikolai Kochetov).
- (실험적 기능)
hashId크래시 문제와 salt 매개변수가 사용되지 않던 문제를 수정했습니다. #40002 (Raúl Marín). EXCEPT및INTERSECT연산자에서 상수 컬럼과 비상수 컬럼의 특정 조합을 사용하면 크래시가 발생할 수 있었습니다. #40020 (Duc Canh Le).- INSERT가 지나치게 느리거나 머지/mutation이 너무 오래 걸릴 때 발생하던 “Part directory doesn’t exist” 및 “
tmp_<part_name>… No such file or directory” 오류를 수정했습니다. 또한 이전에 part를 fetch하려던 시도가 실패했는데도tmp-fetch_<part_name>디렉터리가 정리되지 않은 경우, 로그에 오류나 경고가 전혀 남지 않은 채 일부 복제 큐 항목이 멈춰 있을 수 있던 문제도 수정했습니다. #40031 (Alexander Tokmakov). Values포맷에서 튜플 배열 파싱이 드물게 잘못되던 문제를 수정했습니다. #40034 (Anton Popov).- ArrowColumn 포맷에서 Dictionary(X) 및 Dictionary(Nullable(X))가 각각 ClickHouse LowCardinality(X) 및 LowCardinality(Nullable(X))로 변환되도록 수정했습니다. #40037 (Arthur Passos).
- 작업 스케줄링이 실패하는 동안 S3에 쓰기 작업을 수행할 때 발생할 수 있는 잠재적인 교착 상태를 수정했습니다. #40070 (Maksim Kita).
- 재계산해야 하는 인덱스에 올바른 파일 확장자(.idx 또는 idx2)를 추가해 collectFilesToSkip()의 버그를 수정하고, 잘못된 하드 링크가 생성되는 문제를 방지했습니다. #39896가 수정되었습니다. #40095 (Jianmei Zhang).
- 역방향 DNS 조회 문제를 수정했습니다. #40134 (Arthur Passos).
Array(UInt32)에서arrayDifference의 예기치 않은 결과를 수정했습니다. #40211 (Duc Canh Le).
ClickHouse 릴리스 22.7, 2022-07-21. 발표 자료, 동영상
업그레이드 참고 사항
- 기본적으로
enable_positional_arguments설정이 활성화됩니다. 이 설정을 사용하면 1, 2가 select 절을 참조하는SELECT ... ORDER BY 1, 2와 같은 쿼리를 사용할 수 있습니다. 이전 동작으로 되돌리려면 이 설정을 비활성화하십시오. #38204 (Alexey Milovidov). - 기본적으로
format_csv_allow_single_quotes가 비활성화됩니다. #37096를 참조하십시오. (Kruglov Pavel). Ordinary데이터베이스 엔진과*MergeTree테이블의 이전 저장소 정의 구문은 더 이상 권장되지 않습니다. 기본적으로Ordinary엔진을 사용하는 새 데이터베이스는 생성할 수 없습니다.system데이터베이스가Ordinary엔진을 사용하면 서버 시작 시 자동으로Atomic으로 변환됩니다. 이전 동작을 유지하기 위한 설정(allow_deprecated_database_ordinary및allow_deprecated_syntax_for_merge_tree)이 제공되지만, 이러한 설정은 향후 릴리스에서 제거될 수 있습니다. #38335 (Alexander Tokmakov).- 기본적으로 쉼표 join을 inner join으로 강제 재작성합니다(기본값
cross_to_inner_join_rewrite = 2). 이전 동작을 사용하려면cross_to_inner_join_rewrite = 1로 설정하십시오. #39326 (Vladimir C). 호환성 문제가 발생할 경우 이 설정을 다시 변경할 수 있습니다.
새 기능
- 윈도우 함수가 있는 표현식을 지원합니다. #19857를 해결합니다. #37848 (Dmitry Novik).
EmbeddedRocksDB테이블용 새direct조인 알고리즘을 추가했습니다. #33582를 참조하십시오. #35363 (Vladimir C).- 완전 정렬 머지 조인 알고리즘이 추가되었습니다. #35796 (Vladimir C).
- NATS로 pub/sub할 수 있는 NATS 테이블 엔진을 구현했습니다. #32388을 해결했습니다. #37171 (tchepavel). (Kseniia Sumarokova)
- 테이블 함수
mongodb를 구현했습니다.MongoDB스토리지 / 테이블 함수에 쓰기 기능을 허용합니다. #37213 (aaapetrenko). (Kseniia Sumarokova) SQLInsert출력 형식을 추가했습니다. #38441을 해결했습니다. #38477 (Kruglov Pavel).additional_table_filters설정을 도입했습니다. 이 설정을 사용하면 테이블(table)에 대해 읽은 직후 바로 적용할 추가 필터링 조건을 지정할 수 있습니다. 예시:select number, x, y from (select number from system.numbers limit 5) f any left join (select x, y from table_1) s on f.number = s.x settings additional_table_filters={'system.numbers : 'number != 3', 'table_1' : 'x != 2'}. 쿼리 결과에 적용할 추가 필터링 조건을 지정하는additional_result_filter설정도 도입했습니다. #37918을 해결했습니다. #38475 (Nikolai Kochetov).- ClickHouse 버전 전반에 걸친 설정 변경 정보를 포함하는
compatibility설정과system.settings_changes시스템 테이블을 추가했습니다. #35972를 해결합니다. #38957 (Kruglov Pavel). - 함수
translate(string, from_string, to_string)및translateUTF8(string, from_string, to_string)를 추가했습니다. 일부 문자를 다른 문자로 치환합니다. #38935 (Nikolay Degterinsky). parseTimeDelta함수를 지원합니다.;-+,:를 구분자로 사용할 수 있습니다. 예를 들어1yr-2mo,2m:6s와 같이 사용할 수 있습니다:SELECT parseTimeDelta('1yr-2mo-4w + 12 days, 3 hours : 1 minute ; 33 seconds'). #39071 (jiahui-97).CREATE TABLE ... EMPTY AS SELECT쿼리가 추가되었습니다. SELECT 쿼리로부터 테이블 구조를 자동으로 추론하지만, 생성 후 테이블을 채우지는 않습니다. #38049를 해결했습니다. #38272 (Alexander Tokmakov).- 원격 스토리지의 IO 작업을 제한하기 위한 옵션
max_remote_read_network_bandwidth_for_server및max_remote_write_network_bandwidth_for_server가 추가되었습니다. #39095 (Sergei Trifonov). - ROLLUP, CUBE 및 GROUPING SETS에서 집계 키 컬럼이 널 허용이 되도록
group_by_use_nulls설정을 추가했습니다. #37359를 해결했습니다. #38642 (Dmitry Novik). - 데이터를 내보낼 때 압축 수준을 지정할 수 있는 기능을 추가했습니다. #38907 (Nikolay Degterinsky).
system데이터베이스에서 SELECT를 수행할 때 명시적인 권한 부여가 필요하도록 하는 옵션을 추가했습니다. 자세한 내용: #38970 (Vitaly Baranov).- 함수
multiMatchAny,multiMatchAnyIndex,multiMatchAllIndices및 해당 퍼지 변형은 이제 비상수 pattern 배열 인수를 허용합니다. #38485 (Robert Schulze). SQL 함수multiSearchAllPositions는 이제 비상수 needle 인수를 허용합니다. #39167 (Robert Schulze). - 외부 파일을 가져올 때 zstd 디코딩의 최대 메모리 사용량을 설정할 수 있도록
zstd_window_log_max설정을 추가했습니다. #35693를 해결합니다. #37015 (wuxiaobai24). send_logs_source_regexp설정을 추가했습니다. 지정한 정규식(regexp)에 일치하는 로그 소스 이름을 가진 server 텍스트 logs를 전송합니다. 비어 있으면 모든 소스를 의미합니다. #39161 (Amos Bird).Hive테이블에서ALTER를 지원합니다. #38214 (lgbo).isNullable함수를 지원합니다. 이 함수는 인수가 널 허용인지 여부를 확인해 1 또는 0을 반환합니다. #38611을 해결합니다. #38841 (lokax).- base58 인코딩/디코딩 함수가 추가되었습니다. #38159 (Andrey Zvonov).
- Play UI에 차트 시각화 기능을 추가했습니다. #38197 (Alexey Milovidov).
- 배열과 튜플 모두에 L2 제곱 거리 함수와 노름 함수를 추가했습니다. #38545 (Julian Gilyadov).
- SQL을 통해
url테이블 함수 / 스토리지로 HTTP 헤더를 전달할 수 있는 기능이 추가되었습니다. #37897를 해결합니다. #38176 (Kseniia Sumarokova). - 패키지에
clickhouse-diagnostics바이너리를 추가했습니다. #38647 (Mikhail f. Shiryaev).
실험적 기능
- 독립적으로 실행되는 쿼리를 트랜잭션 내에서 실행할 수 있도록 새로운 설정
implicit_transaction을 추가했습니다. 이 설정은 트랜잭션의 생성과 종료를 모두 자동으로 처리합니다(쿼리가 성공하면 COMMIT, 실패하면 ROLLBACK). #38344 (Raúl Marín).
성능 개선
- 정렬된 컬럼에 대한 distinct 최적화. 입력 스트림이 distinct의 컬럼을 기준으로 정렬된 경우 특수화된 distinct 변환을 사용합니다. 이 최적화는 pre-distinct, final distinct 또는 둘 다에 적용할 수 있습니다. 초기 구현: @dimarub2000. #37803 (Igor Nikonov).
- 배치 버전의
BinaryHeap을 사용해ORDER BY,MergeTree머지, 윈도우 함수 성능을 개선했습니다. #38022 (Maksim Kita). FINAL이 있는 쿼리의 병렬 실행 향상 #36396 (Nikita Taranov).- #35616에서 도입된 심각한 join 성능 회귀를 수정했습니다. 흥미로운 점은 ssb 쿼리 같은 일반적인 join 쿼리가 거의 3개월 동안 10배 느려졌는데도 아무도 문제를 제기하지 않았다는 것입니다. #38052 (Amos Bird).
- Intel hyperscan 라이브러리에서 vectorscan으로 마이그레이션하여, non-x86 플랫폼에서 많은 문자열 매칭 작업의 속도가 향상됩니다. #38171 (Robert Schulze).
- 집계 후 실행되는 쿼리 계획 단계의 병렬 처리 수준을 높였습니다. #38295 (Nikita Taranov).
JSON유형 컬럼의 삽입 성능을 개선했습니다. #38320 (Anton Popov).- HashTable에서의 삽입 및 조회 성능을 최적화했습니다. #38413 (Nikita Taranov).
- #32493로 인해 발생한 성능 저하를 수정했습니다. #38417 (Alexey Milovidov).
- SIMD 명령어를 사용해 숫자 컬럼 조인 성능을 개선했습니다. #37235 (zzachimed). #38565 (Maksim Kita).
- 배열용 Norm 및 Distance 함수가 1.2~2배 빨라졌습니다. #38740 (Alexander Gololobov).
- LZ4 압축 해제용으로 AVX-512 VBMI에 최적화된
copyOverlap32Shuffle을 추가했습니다. 즉, LZ4 압축 해제 성능이 향상되었습니다. #37891 (Guo Wangyang). ORDER BY (a, b)는ORDER BY a, b와 동일한 이점을 모두 제공합니다. #38873 (Igor Nikonov).- 벤치마크를 더 안정적으로 만들기 위해 분기를 32B 경계에 맞춰 정렬합니다. #38988 (Guo Wangyang). Intel에서는 평균적으로 성능이 1~2% 향상됩니다.
- 실행형 UDF, 실행형 Dictionaries 및 실행형 테이블은 하위 프로세스 종료를 기다리는 동안 1초를 허비하지 않습니다. #38929 (Constantine Peresypkin).
- 모든 컬럼이 선택되지 않은 경우
system.stack_trace테이블 접근을 최적화합니다. #39177 (Azat Khuzhin). - LowCardinality 인수에서 isNullable/isConstant/isNull/isNotNull의 성능을 개선했습니다. #39192 (Kruglov Pavel).
- 윈도우 함수에서 ORDER BY 처리 성능을 최적화했습니다. #34632 (Vladimir Chebotarev).
- 테이블
system.asynchronous_metric_log의 저장 공간 효율이 추가로 최적화되었습니다. 이로써 #38134가 해결되었습니다. 자세한 내용은 YouTube 동영상을 참조하십시오. #38428 (Alexey Milovidov).
개선 사항
- SQL 표준 CREATE INDEX 및 DROP INDEX 구문을 지원합니다. #35166 (Jianmei Zhang).
- 이제 INSERT 쿼리에 대해서도 프로파일 이벤트를 전송합니다(이전에는 SELECT만 지원했습니다). #37391 (Azat Khuzhin).
- 완전히 구체화된 프로젝션에 대해 in order 집계(
optimize_aggregation_in_order)를 지원합니다. #37469 (Azat Khuzhin). - Kerberos 초기화를 위한 subprocess 실행을 제거했습니다. 새로운 통합 테스트를 추가했습니다. 관련 이슈 #27651을 해결했습니다. #38105 (Roman Vasin).
-
- 여러 JOIN 재작성 시 식별자 이름이 재작성되지 않도록 하는 설정
multiple_joins_try_to_keep_original_names를 추가했습니다. #34697을 해결했습니다. #38149 (Vladimir C).
- 여러 JOIN 재작성 시 식별자 이름이 재작성되지 않도록 하는 설정
- trace-visualizer의 UX가 개선되었습니다. #38169 (Sergei Trifonov).
- AArch64에서 스택 트레이스 수집과 쿼리 프로파일러를 활성화합니다. #38181 (Maksim Kita).
- SQL 사용자 정의 함수를 불러올 때
user_defined디렉터리의 심볼릭 링크를 건너뛰지 않도록 했습니다. #38042를 해결했습니다. #38184 (Maksim Kita). store/의 하위 디렉터리에 대한 백그라운드 정리 기능을 추가했습니다. 일부 경우clickhouse-server가store/에 불필요한 하위 디렉터리를 남길 수 있었고(예: 테이블 생성에 실패한 경우), 이러한 디렉터리는 한 번도 제거되지 않았습니다. #33710을 수정했습니다. #38265 (Alexander Tokmakov).- config에서 캐시 설정을 표시하는
DESCRIBE CACHE쿼리를 추가했습니다. 사용 가능한 파일 시스템 캐시 목록을 표시하는SHOW CACHES쿼리를 추가했습니다. #38279 (Kseniia Sumarokova). system drop filesystem cache에 대한 액세스 검사를 추가했습니다. ON CLUSTER도 지원합니다. #38319 (Kseniia Sumarokova).- 21.3에서 22.3으로 업그레이드할 때 발생하던 PostgreSQL 데이터베이스 엔진 비호환성 문제를 수정했습니다. #36659를 해결합니다. #38369 (Kseniia Sumarokova).
filesystemAvailable및 이와 유사한 함수가 이제clickhouse-local에서도 작동합니다. 이로써 #38423가 해결됩니다. #38424 (Alexey Milovidov).revision함수를 추가했습니다. #38555 (Azat Khuzhin).- 프록시 터널을 통한 GCS 사용 문제를 수정했습니다. #38726 (Azat Khuzhin).
- clickhouse client / local에서
\i file을 지원합니다 (psql \i와 유사). #38813 (Kseniia Sumarokova). EXPLAIN AST에 새 옵션optimize = 1이 추가되었습니다. 활성화하면 재작성된 AST를 표시하고, 그렇지 않으면 원본 쿼리의 AST를 표시합니다. 기본적으로는 비활성화되어 있습니다. #38910 (Igor Nikonov).- 컬럼 목록에서 후행 쉼표를 허용합니다. #38425를 해결합니다. #38440 (chen).
parallel_hashJOIN 메서드의 버그 수정과 성능 개선. #37648 (Vladimir C).- Hadoop 보안 RPC 전송(hadoop.rpc.protection=privacy 및 hadoop.rpc.protection=integrity)을 지원합니다. #37852 (Peng Liu).
StorageHive에 struct 타입 지원이 추가되었습니다. #38118 (lgbo).- 이제 S3의 단일 객체는
RemoveObjectRequest를 사용해 제거됩니다.removeFileIfExists를 사용할 수 없어remove기능의 약 절반이 사실상 깨지던 GCP와의 호환성을 구현했습니다. 또한 GCS에서 지원되지 않는DeleteObjectsS3 API를 자동으로 감지합니다. 이를 통해 구성에서support_batch_delete=0를 명시적으로 설정하지 않아도 GCS를 사용할 수 있습니다. #37882 (Vladimir Chebotarev). - ClickHouse Keeper 관련 기본 모니터링 데이터(ProfileEvents 및 CurrentMetrics를 통해)를 제공합니다. #38072 (lingpeng0314).
- PostgreSQL engine 연결에서
auto_close옵션을 지원합니다. #31486를 해결합니다. #38363 (Kseniia Sumarokova). - 테이블 함수의 컬럼 선언에서
NULL수정자를 사용할 수 있도록 했습니다. #38816 (Kruglov Pavel). - 종료 시 발생할 수 있는 무해한
TABLE_IS_READ_ONLY오류를 방지하려면 종료 전에mutations_finalizing_task를 비활성화하십시오. #38851 (Raúl Marín). - 더 이상 권장되지 않는 Ordinary 데이터베이스를 사용하는 경우, INSERT 쿼리가 있을 때 ALTER 쿼리 후 SELECT 쿼리에서 발생하는 불필요한 대기를 제거했습니다. #38864 (Azat Khuzhin).
EXPLAIN AST에 새 옵션rewrite가 추가되었습니다. 이 옵션을 활성화하면 재작성된 후의 AST를 표시하고, 활성화하지 않으면 원래 쿼리의 AST를 표시합니다. 기본값은 비활성화입니다. #38910 (Igor Nikonov).- 예상된 상황에서는 system.errors에 Zookeeper “Node exists” 예외를 보고하지 않습니다. #38961 (Raúl Marín).
clickhouse-keeper: 실시간 다이제스트 계산 및 검증 지원이 추가되었습니다. 기본적으로 비활성화되어 있습니다. #37555 (Antonio Andelic).clickhouse-extract-from-config도구에서 키 내부에 글롭 패턴* or {expr1, expr2, expr3}을 지정할 수 있게 했습니다. #38966 (Nikita Mikhaylov).- clearOldLogs: 동시 삭제 시 KEEPER_EXCEPTION을 보고하지 않도록 수정했습니다. #39016 (Raúl Marín).
- clickhouse-keeper 개선: Keeper 서버에 대한 메타 정보를 디스크에 영구 저장합니다. #39069 (Antonio Andelic). 이렇게 하면 모든 Keeper 노드를 동시에 종료하거나 다시 시작하더라도 운영이 더 수월해집니다.
- 파일 시스템 캐시 사용 시 디스크 공간이 부족해져도 예외를 발생시키지 않고 계속 실행합니다. #39106 (Kseniia Sumarokova).
- k8s의 SIGTERM 신호 처리. #39130 (Timur Solodovnikov).
- system.part_log에
merge_algorithm컬럼(Undecided, Horizontal, Vertical)을 추가했습니다. #39181 (Azat Khuzhin). - 디스크가 회전식이 아니면
system.errors카운터를 증가시키지 않습니다. #39216 (Raúl Marín). system.query_log에서INSERT쿼리의 메트릭result_bytes는 삽입된 바이트 수를 나타냅니다. 이전에는 이 값이 잘못되어result_rows와 동일한 값으로 저장되었습니다. #39225 (Ilya Yatsishin).- clickhouse-client의 CPU 사용 메트릭이 더 보기 좋게 표시되도록 개선되었습니다. #38756을 수정했습니다. #39280 (Sergei Trifonov).
- 서버 시작 시 파일 시스템 캐시 초기화 과정에서 발생한 예외를 다시 throw하도록 하고, 오류 메시지도 개선했습니다. #39386 (Kseniia Sumarokova).
- 이제 OpenTelemetry는 기본적으로 Processors 스팬을 제외하고 트레이스를 수집합니다(개수가 너무 많기 때문입니다). Processors 스팬 수집을 활성화하려면
opentelemetry_trace_processors설정을 사용하십시오. #39170 (Ilya Yatsishin). - 함수
multiMatch[Fuzzy](AllIndices/Any/AnyIndex)-needle인수가 비어 있더라도 논리 오류를 발생시키지 않습니다. #39012 (Robert Schulze). - 기본 인수인
x-max-length및x-overflow없이RabbitMQ큐를 선언할 수 있게 했습니다. #39259 (rnbondarenko).
빌드/테스트/패키징 개선
- ClickHouse에 Clang Thread Safety Analysis (TSA) 어노테이션을 적용했습니다. #38068 (Robert Schulze).
- FreeBSD용 범용 설치 스크립트를 개선했습니다. #39302 (Alexey Milovidov).
s390x플랫폼 빌드를 위한 준비를 진행했습니다. #39193 (Harry Lee).jemalloc라이브러리의 버그를 수정했습니다. #38757 (Azat Khuzhin).- 이제 하드웨어 벤치마크 결과를 자동으로 업로드할 수 있습니다. #38427 (Alexey Milovidov).
- 이제 Mac(Darwin)에서 시스템 테이블(system table) “system.licenses”가 올바르게 채워집니다. #38294 (Robert Schulze).
all|noarch패키지를 아키텍처 종속 패키지로 변경 - 관련 문서를 일부 수정 - aarch64|arm64 패키지를 artifactory 및 릴리스 자산에 업로드 - #36443 수정. #38580 (Mikhail f. Shiryaev).
버그 수정(공식 안정 또는 프리스테이블 릴리스에서 사용자에게 드러나는 오동작)
- 소수 자릿수(scale)가 19자리를 초과하는
Decimal128/Decimal256의 반올림 문제를 수정했습니다. #38027 (Igor Nikonov). - 스토리지
Hive(통합 테이블 엔진)에서 data race로 인해 발생한 충돌을 수정했습니다. #38887 (lgbo). - ON CLUSTER와 함께 GRANT ALL ON *.*를 실행할 때 발생하던 충돌을 수정했습니다. 이 문제는 https://github.com/ClickHouse/ClickHouse/pull/35767에서 발생했습니다. 이로써 #38618이 해결되었습니다. #38674 (Vitaly Baranov).
{0..10}형식에서 glob 확장이 올바르게 수행되도록 수정했습니다. #38498를 해결합니다. 현재 구현은 @rschu1ze가 here에서 언급한 것처럼 셸이 동작하는 방식과 유사합니다. #38502 (Heena Bansal).- 상수 맵 인수를 사용할 때
mapUpdate,mapFilter함수가 충돌하던 문제를 수정했습니다. #38547을 해결합니다. #38553 (hexiaoting). - 잘못된 쿼리 결과(잘못된 인덱스 분석)를 초래할 수 있었던 쿼리 최적화 관련
toHour의 단조성 정보를 수정했습니다. 이 변경은 #38333을 해결합니다. #38675 (Amos Bird). - S3 스토리지가 병렬 쓰기를 지원하는지 확인하는 부분을 수정했습니다. 이 문제로 S3 병렬 쓰기가 동작하지 않았습니다. #38792 (chen).
- 병렬 읽기 버퍼에서 S3의 seekable 읽기 문제를 수정했습니다. (쿼리 중 메모리 사용량에 영향을 주던 문제입니다). #38258을 해결했습니다. #38802 (Kseniia Sumarokova).
simdjson을 업데이트했습니다. 이를 통해 AVX-512 VBMI를 지원하는 최신 Intel CPU가 탑재된 시스템에서 발생하던 버퍼 오버플로우 문제 #38621를 수정했습니다. #38838 (Alexey Milovidov).- 수직 병합에서 발생할 수 있는 논리적 오류를 수정했습니다. #38859 (Maksim Kita).
- 초 단위를 사용하는 설정 프로필 문제를 수정했습니다. #38896 (Raúl Marín).
- 널 허용 파티션 키가 있을 때 잘못된 파티션 프루닝이 수행되던 문제를 수정했습니다. 참고: 대부분의 경우 널 허용 파티션 키는 사용하지 않습니다. 이는 잘 알려지지 않은 기능이며, 사용하지 않는 것이 좋습니다. 널 허용 키는 사실상 의미가 없고, 이 기능은 일부 극히 특수한 사용 사례에서만 필요합니다. 이 변경으로 #38941을 수정했습니다. #38946 (Amos Bird).
- fetch 작업의
fsync_part_directory를 개선했습니다. #38993 (Azat Khuzhin). OvercommitTracker내부에서 발생할 수 있는 교착 상태를 수정했습니다. #37794를 해결했습니다. #39030 (Dmitry Novik).- 파일 시스템 캐시의 용량이 한계에 도달했을 때 일부 드문 경우에 발생할 수 있던 버그를 수정했습니다. #39066을 종료합니다. #39070 (Kseniia Sumarokova).
- 윈도우 표현식 인수 해석의 일부 경계 사례를 수정했습니다. #38538 윈도우 표현식에서 고차 함수를 사용할 수 있도록 했습니다. #39112 (Dmitry Novik).
tuple함수에서LowCardinality유형을 유지합니다. 이전에는LowCardinality유형이 제거되어, 생성된 tuple의 요소가LowCardinality의 기본 유형으로 처리되었습니다. #39113 (Anton Popov).- attached 상태인 MATERIALIZED VIEW가 있고 설정
extremes = 1이 활성화된 테이블에 INSERT할 때 발생할 수 있던 오류Block structure mismatch를 수정했습니다. #29759 및 #38729를 해결합니다. #39125 (Nikolai Kochetov). optimize_trivial_count_query와empty_result_for_aggregation_by_empty_set가 모두 true로 설정된 경우 발생하는 예기치 않은 쿼리 결과 문제를 수정했습니다. 이 수정으로 #39140이 해결됩니다. #39155 (Amos Bird).PREWHERE및 read-in-order 최적화가 적용된 SELECT 쿼리에서 발생하던 오류Not found column Type in block를 수정했습니다. #39157 (Yakov Olkhovskiy).- 원격 파일 시스템에서 하드링크를 처리하는 중 매우 드물게 발생하는 race condition을 수정했습니다. 이 문제는 백업을 동시에 실행할 때만 재현됩니다. #39190 (alesapin).
- (zero-copy 복제는 실험적 기능이므로 프로덕션에서는 사용해서는 안 됩니다)
allow_remote_fs_zero_copy_replication에서 인메모리 part를 fetch하는 문제를 수정했습니다. #39214 (Azat Khuzhin). - (MaterializedPostgreSQL - 실험적 기능). 복제 초기화 중 예외가 발생할 경우 일어날 수 있었던 MaterializedPostgreSQL 데이터베이스 엔진의 세그멘테이션 폴트를 수정했습니다. #36939을 해결합니다. #39272 (Kseniia Sumarokova).
- PostgreSQL 데이터베이스 엔진에서 테이블 메타데이터를 잘못 가져오던 문제를 수정했습니다. #33502을 해결합니다. #39283 (Kseniia Sumarokova).
- 집계 키가 다른 함수로 감싸져 있을 때 발생하던 프로젝션 예외를 수정했습니다. 이로써 #37151이 해결되었습니다. #37155 (Amos Bird).
- 일부 함수에서
... with argument with type Nothing and default implementation for Nothing is expected to return result with type Nothing, got ...와 관련해 발생할 수 있는 논리 오류를 수정했습니다. 해결: #37610 해결: #37741. #37759 (Kruglov Pavel). - UNION의 서브쿼리에서 잘못된 컬럼 순서를 수정했습니다(서브셀렉트에 중복된 컬럼이 있으면 잘못된 결과가 나올 수 있음). #37887 (Azat Khuzhin).
- 점이 포함된 컬럼 이름을 사용할 때 MODIFY ALTER Column이 잘못 동작하던 문제를 수정했습니다. #37907을 해결했습니다. #37971 (Kruglov Pavel).
- S3에 데이터를 저장하는
MergeTree테이블에서 희소 컬럼을 읽을 수 없던 문제를 수정했습니다. #37978 (Anton Popov). - 구성에서 레플리카를 제거할 때
Distributedasync insert에서 발생할 수 있는 크래시를 수정했습니다. #38029 (Nikolai Kochetov). - 별칭 없이 CTE와 함께 사용하는 GLOBAL JOIN에서 발생하는 “Missing columns” 문제를 수정했습니다. #38056 (Azat Khuzhin).
- 하위 호환성 모드에서 tuple 함수를 리터럴로 재작성합니다. #38096 (Anton Kozlov).
ORDER BY수행 시 출력 블록에 대한 불필요한 메모리 예약을 수정합니다. #38127 (iyupeng).- 배열 매핑 함수에서 발생할 수 있는 논리 오류
Bad cast from type DB::IColumn* to DB::ColumnNullable*를 수정했습니다. #38006를 해결합니다. #38132 (Kruglov Pavel). - 부분 병합 조인에서 임시 이름 충돌 문제를 수정하고 #37928을 해결했습니다. #38135 (Vladimir C).
- 다음과 같은 쿼리에서 발생하던 몇 가지 사소한 문제를 수정했습니다:
CREATE TABLE nested_name_tuples (aTuple(x String, y Tuple(i Int32, j String))) ENGINE = Memory;#38136 (lgbo). - 조건이 거짓이어도 인수가 실행되던, 중첩된 단락 평가 함수 관련 버그를 수정했습니다. #38040을 해결합니다. #38173 (Kruglov Pavel).
- (Window View는 실험적 기능입니다) 구조가 잘못된 WINDOW VIEW의 LOGICAL_ERROR를 수정했습니다. #38205 (Azat Khuzhin).
- OAUTHBEARER 갱신 콜백이 설정되었을 때 발생하던 충돌을 수정하기 위해 librdkafka submodule을 업데이트했습니다. #38225 (Rafael Acevedo).
- ProfileEvents로 인해 분산 테이블에 INSERT가 멈추던 문제를 수정했습니다. #38307 (Azat Khuzhin).
- PostgreSQL 엔진의 재시도 문제를 수정했습니다. #38310 (Kseniia Sumarokova).
- PartialSortingTransform의 최적화 문제를 수정했습니다(SIGSEGV 및 잘못된 결과가 발생할 수 있는 문제). #38324 (Azat Khuzhin).
- PeekableReadBuffer 기반 포맷의 RabbitMQ 관련 문제를 수정했습니다. #38061을 해결합니다. #38356 (Kseniia Sumarokova).
- MaterializedPostgreSQL - 실험적 기능입니다. MaterializedPostgreSQL에서 발생할 수 있는
Invalid number of rows in Chunk문제를 수정했습니다. #37323를 해결했습니다. #38360 (Kseniia Sumarokova). - connection string 설정이 적용되도록 RabbitMQ 구성을 수정합니다. #36531을 해결합니다. #38365 (Kseniia Sumarokova).
- 배열 차원 크기를 가져올 때 PostgreSQL 스키마를 사용하지 않던 PostgreSQL 엔진 문제를 수정했습니다. #36755를 해결했습니다. #36772를 해결했습니다. #38366 (Kseniia Sumarokova).
DISTINCT및LIMIT이 있는 분산 쿼리에서 결과가 잘못될 수 있는 문제를 수정했습니다. #38282를 수정합니다. #38371 (Anton Popov).- 0바이트가 포함된 패턴에서 countSubstrings() 및 position()이 잘못된 결과를 반환하는 문제를 수정했습니다. #38589 (Robert Schulze).
- 이제는 IPv4/IPv6 표현 값이 잘못된 테이블이라도 clickhouse-server를 시작하고 테이블을 attach/detach할 수 있습니다. 이슈 #35156를 제대로 수정했습니다. #38590 (alesapin).
rankCorr함수는 일부 인수가 NaN이어도 올바르게 작동합니다. 이로써 #38396가 해결되었습니다. #38722 (Alexey Milovidov).parallel_view_processing=1과optimize_trivial_insert_select=1을 함께 사용할 때의 문제를 수정했습니다. 뷰로 푸시하는 동안 발생하던max_insert_threads문제를 수정했습니다. #38731 (Azat Khuzhin).Mapcombinator가 적용된 집계 함수에서 잘못된 결과를 초래하던 use-after-free 문제를 수정했습니다. #38748 (Azat Khuzhin).
ClickHouse 릴리스 22.6, 2022-06-16. 발표 자료, 동영상
하위 호환되지 않는 변경 사항
- SQL에서 8진수 숫자 리터럴 지원을 제거했습니다. 이전 버전에서는 이를 Float64로 파싱했습니다. #37765 (Yakov Olkhovskiy).
- 유형으로
seconds를 사용하는 설정의 파싱 방식을 변경하여 부동소수점 값을 지원하도록 했습니다(예:max_execution_time=0.5). Infinity 또는 NaN 값은 예외를 발생시킵니다. #37187 (Raúl Marín). - 실험적 유형
Object컬럼의 바이너리 직렬화 포맷을 변경했습니다. 새 포맷은 서드파티 클라이언트에서 구현하기가 더 편리합니다. #37482 (Anton Popov). - 설정
output_format_json_named_tuples_as_objects를 기본적으로 활성화합니다. 이 설정을 사용하면 이름이 지정된 Tuple을 JSON 포맷에서 JSON 객체로 직렬화할 수 있습니다. #37756 (Anton Popov). - 끝에 이스케이프 기호(’')가 있는 LIKE 패턴은 이제 허용되지 않습니다(SQL 표준에서 요구함). #37764 (Robert Schulze).
- AArch64 CPU를 사용하는 클러스터에서 서로 다른 ClickHouse 버전을 실행하거나, 클러스터에서 AArch64와 amd64를 혼합해 사용하면서, 256비트에는 들어가지만 64비트에는 들어가지 않는 고정 크기 유형의 여러 키로 GROUP BY를 사용하는 분산 쿼리를 실행하고, 결과 크기가 매우 큰 경우 업그레이드 중에는 해당 쿼리 결과의 데이터가 완전히 집계되지 않습니다. 해결 방법: 롤링 업그레이드 대신 다운타임을 두고 업그레이드하십시오.
새 기능
GROUPING함수를 추가했습니다. 이를 통해ROLLUP,CUBE또는GROUPING SETS가 포함된 쿼리에서 레코드를 서로 구분할 수 있습니다. #19426를 해결했습니다. #37163 (Dmitry Novik).- 부동소수점 데이터 압축용 새로운 코덱 FPC 알고리즘. #37553 (Mikhail Guzov).
- 새로운 열 지향 JSON 포맷인
JSONColumns,JSONCompactColumns,JSONColumnsWithMetadata를 추가했습니다. #36338 및 #34509를 해결했습니다. #36975 (Kruglov Pavel). - d3js 기반의 OpenTelemetry 트레이스 시각화 도구를 추가했습니다. #37810 (Sergei Trifonov).
system.zookeeper테이블에 INSERT를 지원합니다. #22130을 해결합니다. #37596 (Han Fei).LIKE,ILIKE및match함수에서 상수가 아닌 패턴 인수를 지원합니다. #37251 (Robert Schulze).- 실행형 사용자 정의 함수에서 이제 매개변수를 지원합니다. 예시:
SELECT test_function(parameters)(arguments). #37578을 해결했습니다. #37720 (Maksim Kita). - system.part_log 테이블에
merge_reason컬럼이 추가되었습니다. #36912 (Sema Checherinda). - Avro 포맷에서 맵과 레코드를 지원합니다. Avro 포맷에서 null을 기본값으로 삽입할 수 있게 하는 새로운 설정
input_format_avro_null_as_default을 추가했습니다. #18925를 해결했습니다. #37378를 해결했습니다. #32899를 해결했습니다. #37525 (Kruglov Pavel). - ClickHouse용으로 구성된 가상 파일 시스템을 점검하고 관리할 수 있는
clickhouse-disks도구를 추가했습니다. #36060 (Artyom Yurkov). - H3 단방향 에지 관련 함수를 추가했습니다. #36843 (Bharat Nallan).
- 부호 없는 정수로부터 hashids를 계산할 수 있도록 지원을 추가했습니다. #37013 (Michael Nutt).
CREATE USER <user> IDENTIFIED WITH sha256_hash에서 명시적으로SALT를 지정할 수 있습니다. #37377 (Yakov Olkhovskiy).- CSV/TSV 포맷에서 파일 시작 부분의 지정된 줄 수를 건너뛸 수 있도록 새로운 설정 두 개
input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines를 추가했습니다. #37537 (Kruglov Pavel). showCertificate함수는 현재 server의 SSL 인증서를 표시합니다. #37540 (Yakov Olkhovskiy).- 명명된 컬렉션에서 Data Dictionaries의 HTTP 소스를 지원합니다. #37581 (Yakov Olkhovskiy).
- 새로운 윈도 함수
nonNegativeDerivative(metric_column, timestamp_column[, INTERVAL x SECOND])가 추가되었습니다. #37628 (Andrey Zvonov). ReplicatedMergeTree테이블의 주석(comment) 변경 기능을 구현했습니다. #37416 (Vasily Nemkov).SYSTEM UNFREEZE쿼리가 추가되어, 해당 테이블의 삭제 여부와 관계없이 전체 Backup을 삭제할 수 있습니다. #36424 (Vadim Volodin).
실험적 기능
WINDOW VIEW에서POPULATE를 사용할 수 있도록 지원합니다. #36945 (vxider).WINDOW VIEW에 대해ALTER TABLE ... MODIFY QUERY를 지원합니다. #37188 (vxider).- 이 PR에서는
WINDOW VIEW의ENGINE구문 동작을MATERIALIZED VIEW와 동일하게 변경합니다. #37214 (vxider).
성능 개선
- ARM NEON에 대한 다양한 최적화가 추가되었습니다 #38093(Daniel Kutenin), (Alexandra Pilipyuk) 참고: ARM CPU가 있는 클러스터에서 서로 다른 ClickHouse 버전을 실행하면서, 256비트에는 들어가지만 64비트에는 들어가지 않는 고정 크기 유형의 여러 키로
GROUP BY를 사용하는 분산 쿼리를 사용하면 업그레이드 중 집계 쿼리 결과가 잘못될 수 있습니다. 해결 방법: 롤링 업그레이드 대신 다운타임을 두고 업그레이드하십시오. - 포맷 Native, Protobuf, CapnProto, JSONEachRow, TSKV 및 접미사 WithNames/WithNamesAndTypes가 붙은 모든 포맷에서 컬럼 일부만 조회할 때의 성능과 메모리 사용량을 개선했습니다. 이전에는 이러한 포맷의 파일에서 컬럼 일부만 선택하더라도 모든 컬럼을 읽어 메모리에 저장했습니다. 이제는 필요한 컬럼만 읽습니다. 이 PR에서는 기본적으로
input_format_skip_unknown_fields설정을 활성화합니다. 그렇지 않으면 컬럼 일부만 조회하는 경우 예외가 발생하기 때문입니다. #37192 (Kruglov Pavel). - 이제 JOIN에서 더 많은 필터 푸시다운이 가능해졌습니다. #37472 (Amos Bird).
- wide 파트를 읽을 때는 필요한 컬럼의 마크만 로드합니다. #36879 (Anton Kozlov).
- 희소 컬럼(
MergeTree테이블에서 실험적 설정ratio_of_defaults_for_sparse_serialization으로 활성화할 수 있음)이 집계 함수의 인수로 사용될 때 집계 성능이 개선되었습니다. #37617 (Anton Popov). - 인수가 2개인
COALESCE함수를 최적화했습니다. #37666 (Anton Popov). multiIf에 조건이 하나만 있는 경우, 함수if가 더 높은 성능을 제공하므로multiIf를if로 대체합니다. #37695 (Anton Popov).dictGetDescendants,dictGetChildren함수의 성능을 개선했습니다. 쿼리 실행 중 함수 호출마다가 아니라 쿼리마다 부모-자식 계층 인덱스를 임시로 생성합니다.HIERARHICAL속성에BIDIRECTIONAL을 지정할 수 있도록 했으며, 이 경우 딕셔너리가 메모리에서 부모-자식 인덱스를 유지합니다. 따라서dictGetDescendants,dictGetChildren함수는 쿼리마다 임시 인덱스를 생성하지 않습니다. #32481을 해결했습니다. #37148 (Maksim Kita).- 이제 집계 state의 해제를 스레드 풀에서 처리할 수 있습니다. LIMIT가 있고 state가 큰 쿼리에서는 상당한 속도 향상을 제공합니다. 예를 들어
select uniq(number) from numbers_mt(1e7) group by number limit 100는 약 2.5배 빨라졌습니다. #37855 (Nikita Taranov). - 단일 컬럼 정렬 성능을 개선했습니다. #37195 (Maksim Kita).
- 정렬 큐 특수화를 통해 단일 컬럼 정렬 성능을 개선했습니다. #37990 (Maksim Kita).
- 배열 노름 및 거리 함수의 성능이 2배에서 4배까지 향상되었습니다. #37394 (Alexander Gololobov).
- 동적 디스패치를 사용해 숫자 비교 함수의 성능을 개선했습니다. #37399 (Maksim Kita).
- LIMIT이 있는 ORDER BY 쿼리의 성능을 개선했습니다. #37481 (Maksim Kita).
- 동적 디스패치 인프라를 활용해
hasAll함수의 성능을 개선했습니다. #37484 (Maksim Kita). greatCircleAngle,greatCircleDistance,geoDistance함수의 성능이 개선되었습니다. #37524 (Maksim Kita).- ORDER BY에 여러 컬럼이 있는 경우 MergeTree로 삽입하는 성능을 개선했습니다. #35762 (Maksim Kita).
- 테이블이 많을 때 백그라운드에서 CPU를 과도하게 사용하는 문제를 수정했습니다. #38028 (Maksim Kita).
- 동적 디스패치를 사용해
not함수의 성능을 개선했습니다. #38058 (Maksim Kita). - LIKE 및 MATCH 함수 등에서 사용되는 re2 패턴의 내부 캐싱을 최적화했습니다. #37544 (Robert Schulze).
- AVX-512 명령어를 사용해 통합 filter 비트마스크 생성기 함수를 개선했습니다. #37588 (yaqi-zhao).
- Hive integration 엔진에
threadpool읽기 메서드를 적용했습니다. 이를 통해 읽기 속도가 크게 향상됩니다. #36328 (李扬). - 읽어야 할 모든 컬럼이 파티션 키인 경우, Hive 파일을 실제로 읽지 않고 파일의 행 번호를 기반으로 컬럼을 구성합니다. #37103 (lgbo).
- Hive 파일 캐싱을 위해 여러 디스크를 지원합니다. #37279 (lgbo).
- 쿼리별 최대 cache 사용량을 제한하면 cache 풀 오염을 효과적으로 방지할 수 있습니다. 관련 이슈. #37859 (Han Shukai).
- 현재 ClickHouse는 모든 원격 파일을 로컬 캐시에 직접 다운로드합니다(한 번만 읽는 파일도 포함). 이로 인해 로컬 하드 디스크에서 IO가 자주 발생합니다. 일부 시나리오에서는 이러한 IO가 필요하지 않을 수 있으며, 오히려 성능 저하를 유발할 수 있습니다. 아래 그림과 같이 SSB Q1-Q4를 실행할 때는 캐시가 오히려 성능 저하를 초래했습니다. #37516 (Han Shukai).
- S3에서 읽을 때
_file및_path와 같은 가상 컬럼을 사용해 파일 목록을 가지치기할 수 있습니다. 이는 #37174, #23494 관련 사항입니다. #37356 (Amos Bird). - 함수 CompressedWriteBuffer::nextImpl()에는 데이터 삽입 중 자주 발생하는 불필요한 write-copy 단계가 있습니다. 아래는 이 패치로 변경된 내용입니다: - 이전: 1. “working_buffer”를 “compressed_buffer”로 압축 2. “out”으로 write-copy - 이후: “working_buffer”를 “out”으로 직접 압축. #37242 (jasperzhu).
개선
- ROLLUP, CUBE, GROUPING SETS에서 비표준 기본값을 갖는 타입을 지원합니다. #37360을 해결합니다. #37667 (Dmitry Novik).
- ARM에서 스택 트레이스 수집 문제를 수정했습니다. #37044를 해결했습니다. #15638를 해결했습니다. #37797 (Maksim Kita).
- 클라이언트는 연결에 성공할 때까지 DNS 조회 결과로 반환된 모든 IP 주소를 시도합니다. #37273 (Yakov Olkhovskiy).
- Arrow/Parquet/ORC 포맷에서 Binary 대신 String type을 사용할 수 있도록 지원합니다. 이를 위해 이 PR에서는
output_format_arrow_string_as_string,output_format_parquet_string_as_string,output_format_orc_string_as_string의 3가지 새로운 설정을 도입했습니다. 모든 설정의 기본값은false입니다. #37327 (Kruglov Pavel). - 글롭 패턴과 일치하는 모든 파일에서 읽은 행의 총합에 대해
input_format_max_rows_to_read_for_schema_inference설정을 적용합니다. 이전에는input_format_max_rows_to_read_for_schema_inference설정이 글롭의 각 파일에 개별적으로 적용되었기 때문에, NULL 값이 매우 많은 경우 각 파일에서 처음input_format_max_rows_to_read_for_schema_inference개 행을 읽고도 아무 결과를 얻지 못할 수 있었습니다. 또한 이 설정의 기본값을 25000으로 늘렸습니다. #37332 (Kruglov Pavel). - 별도의
CLUSTERgrant를 추가했습니다(하위 호환성을 위해access_control_improvements.on_cluster_queries_require_cluster_grant구성 지시자의 기본값은false입니다). #35767 (Azat Khuzhin). hdfsCluster의 스키마 추론 지원이 추가되었습니다. #35812 (Nikita Mikhaylov).- 볼륨 내 디스크(다중 디스크 구성)에
least_used로드 밸런싱 알고리즘을 구현했습니다. #36686 (Azat Khuzhin). send_progress_in_http_headers=0일 때(이전에는 모두 0을 반환했음) HTTP 엔드포인트가X-ClickHouse-Summaryheader에 전체 통계를 반환하도록 수정했습니다. - 진행 상황이 이미 전송된 경우(send_progress_in_http_headers=1) HTTP 엔드포인트가X-ClickHouse-Exception-Codeheader를 반환하도록 수정했습니다. -TIMEOUT_EXCEEDED오류 발생 시 HTTP 엔드포인트가HTTP_INTERNAL_SERVER_ERROR(500) 대신HTTP_REQUEST_TIMEOUT(408)을 반환하도록 수정했습니다. #36884 (Raúl Marín).- 사용자가 부여된 역할에 할당된 권한을 확인할 수 있도록 했습니다. #36941 (nvartolomei).
- 적분을 수치적으로 계산하지 말고 대신 CDF 함수를 사용하십시오. 이렇게 하면 실행 속도가 빨라지고 정밀도가 향상됩니다. 이는 #36714를 해결합니다. #36953 (Nikita Mikhaylov).
- 함수에 Nothing에 대한 기본 구현을 추가했습니다. 이제 인수 중 하나가 Nothing이면 대부분의 함수가 타입이 Nothing인 컬럼을 반환합니다. 또한 arrayMap/arrayFilter 및 유사한 함수에 빈 배열이 인수로 전달될 때 발생하던 문제도 해결했습니다. 이전에는
select arrayMap(x -> 2 * x, []);와 같은 쿼리가 람다 내부의 함수가Nothing타입에서 동작할 수 없어 실패했지만, 이제 이러한 쿼리는 타입이Array(Nothing)인 빈 배열을 반환합니다. 또한 arrayFilter/arrayFill 같은 함수에서 널 허용 타입 배열도 지원합니다. 이전에는select arrayFilter(x -> x % 2, [1, NULL])와 같은 쿼리가 실패했지만, 이제는 동작합니다(NULL이 람다의 결과이면 해당 값은 결과에 포함되지 않음). #37000을 해결했습니다. #37048 (Kruglov Pavel). - 이제 세그먼트에 로컬 레플리카가 있으면 로컬 계획과 모든 원격 레플리카에서 읽기 위한 계획을 생성합니다. 이들은 읽기를 조정하는 공통 initiator를 공유합니다. #37204 (Nikita Mikhaylov).
- 구성 옵션 “mark_cache_size”가 명시적으로 설정되지 않아도 더 이상 서버 시작이 중단되지 않습니다. #37326 (Robert Schulze).
- 컬럼 선언에서 데이터 유형 바로 뒤에
NULL/NOT NULL을 지정할 수 있습니다. #37337 (Igor Nikonov). - PARTIALLY_DOWNLOADED file segment의 읽기 버퍼 획득을 최적화했습니다. #37338 (xiedeyantu).
- 스트레스 테스트 문제를 해결하기 위해 short circuit 함수 처리를 개선했습니다. #37384 (Kruglov Pavel).
- #37395를 수정했습니다. #37415 (Memo).
- zero-copy 복제에서 part fetch 중 매우 드물게 발생하는 데드락을 수정했습니다. #37423 문제를 수정했습니다. #37424 (metahys).
- 알 수 없는 데이터 포맷으로 스토리지를 생성하지 못하도록 했습니다. #37450 (Kruglov Pavel).
global_memory_usage_overcommit_max_wait_microseconds의 기본값을 5초로 설정했습니다. OOM 예외 메시지에OvercommitTracker정보를 추가했습니다.MemoryOvercommitWaitTimeMicroseconds프로파일 이벤트를 추가했습니다. #37460 (Dmitry Novik).- clickhouse-client에서
-0.0CPU 시간이 표시되지 않도록 했습니다. 이는 반올림 오류로 인해 나타날 수 있습니다. 이로써 #38003를 해결합니다. 이로써 #38038를 해결합니다. #38064 (Alexey Milovidov). - 실행 UI: 페이지를 가로로 스크롤해도 컨트롤이 제자리에 유지됩니다. 이로 인해 테이블이 넓어 오른쪽으로 많이 스크롤한 경우에도 편집이 수월해집니다. CaspianDB의 Maksym Tereshchenko가 제안한 기능입니다. #37470 (Alexey Milovidov).
- play.html에서 쿼리 div를 수정해 높이 20%를 넘어 확장할 수 있도록 했습니다. 매우 긴 쿼리의 경우 textarea 요소를 확장할 수 있으면 유용하지만, 지금까지는 div 높이가 고정되어 있어 확장된 textarea가 아래쪽 data div를 가렸습니다. 이 수정으로 textarea 요소를 확장하면 data div가 아래/위로 함께 이동하므로, 확장된 textarea에 가려지지 않습니다. 또한 사용자가 쿼리 textarea의 크기를 조정하더라도 쿼리 상자의 너비는 100%로 유지됩니다. #37488 (guyco87).
ProfileEvents에 기록된 파트(삽입되었거나 머지된 파트)의 유형을 내부 검사할 수 있도록 항목을 추가했습니다(Inserted{Wide/Compact/InMemory}Parts,MergedInto{Wide/Compact/InMemory}Parts).system.part_log에 컬럼part_type을 추가했습니다. #37495를 해결했습니다. #37536 (Anton Popov).- clickhouse-keeper 개선: 손상된 로그를 타임스탬프가 붙은 폴더로 이동합니다. #37565 (Antonio Andelic).
- 후속 머지 후에는 TTL로 만료된 컬럼을 기록하지 않도록 변경했습니다(이전에는 해당 파트의 첫 번째 머지/optimize에서만 TTL로 만료된 컬럼을 기록하지 않았고, 그 외의 경우에는 모두 기록했습니다). #37570 (Azat Khuzhin).
- LowCardinality 또는 희소 컬럼이 있는 경우
dumpColumnStructure기타 함수의 결과가 더욱 정확해졌습니다. 이전 버전에서는 이 함수들이 결과를 반환하기 전에 인수를 full column으로 변환했습니다. 이는 #6935에 대한 답변을 제공하기 위해 필요합니다. #37633 (Alexey Milovidov). - clickhouse-keeper: watch에는 고유한 session ID만 저장합니다. #37641 (Azat Khuzhin).
- “Cannot write to finalized buffer” 문제가 발생할 수 있는 경우를 수정했습니다. #37645 (Azat Khuzhin).
- Google Cloud Storage에서 지원하지 않는 다중 객체 삭제 호출을 비활성화할 수 있도록
DiskS3에support_batch_delete설정을 추가했습니다. #37659 (Fred Wulff). - ODBC bridge에서 연결 풀링을 비활성화할 수 있는 옵션을 추가했습니다. #37705 (Anton Kozlov).
- 함수
dictGetHierarchy,dictIsIn,dictGetChildren,dictGetDescendants에 딕셔너리의 널 허용HIERARCHICAL속성 지원이 추가되었습니다. #35521을 해결했습니다. #37805 (Maksim Kita). system.build_options테이블에 BoringSSL 버전 관련 정보가 표시됩니다. #37850 (Bharat Nallan).- 이제 clickhouse-server가 서버 시작 시
delete_tmp디렉터리를 삭제합니다. #26503를 수정했습니다. #37906 (alesapin). - 타임아웃 후 손상된 분리된 파트를 정리합니다. #25195를 해결합니다. #37975 (Kseniia Sumarokova).
- 이제 MergeTree 테이블 엔진 계열에서는 이동에 실패한 파트가 즉시 제거됩니다. #37994 (alesapin).
- 이제
always_fetch_merged_part설정을 활성화하면 ReplicatedMergeTree 머지가 다른 레플리카에서 파트를 찾는 시도를 덜 자주 하게 되어 [Zoo]Keeper의 부하가 줄어듭니다. #37995 (alesapin). - GRANT OPTION이 있는 암시적 권한 부여도 추가되었습니다. 예를 들어 이제
GRANT CREATE TABLE ON test.* TO A WITH GRANT OPTION을 사용하면A가GRANT CREATE VIEW ON test.* TO B를 실행할 수 있습니다. #38017 (Vitaly Baranov).
빌드/테스트/패키징 개선
- 빌드에
clang-14와 LLVM 인프라 버전 14를 사용합니다. 이로써 #34681을 해결합니다. #34754 (Alexey Milovidov). 참고:clang-14에는 CI가 더 불안정하게 동작하게 만드는 ThreadSanitizer의 버그가 있습니다. - 시작 시 권한을 낮출 수 있도록 허용합니다. 이를 통해 Docker 이미지가 단순해집니다. #36293을 해결합니다. #36341 (Alexey Milovidov).
- 문서 맞춤법 검사를 CI에 추가합니다. #37790 (Vladimir C).
- 실행 파일의 일관성 확인에 필요한 내장된 hash까지 제거하던 과도한 스트리핑을 수정했습니다. #37993 (Robert Schulze).
버그 수정
- 상수 문자열 타입을 사용하는
SELECT ... INTERSECT및EXCEPT SELECTSQL 문의 문제를 수정했습니다. #37738 (Antonio Andelic). AggregateFunction유형의 컬럼으로GROUP BY하는 경우의GROUP BYAggregateFunction문제를 수정했습니다. #37093 (Azat Khuzhin).- (실험적 WINDOW VIEW) WindowView의
addDependency를 수정했습니다. 이 버그는 #37237처럼 재현할 수 있습니다. #37224 (vxider). - ORDER BY … WITH FILL 기능의 비일관성을 수정했습니다. ORDER BY … WITH FILL이 포함된 쿼리는 WITH FILL 컬럼이 여러 개 있을 경우 추가 행을 생성할 수 있습니다. #38074 (Yakov Olkhovskiy).
- 이 PR에서는 삭제된 테이블에 종속성이 추가되지 않도록
addDependency를 constructor에서startup()으로 이동해 #37237을 수정했습니다. #37243 (vxider). - 컬럼형 포맷에서 누락된 값에 기본값을 삽입하는 동작을 수정했습니다. 이전에는 누락된 컬럼이 컬럼별 기본값이 아니라 타입별 기본값으로 채워졌습니다. #37253 (Kruglov Pavel).
- (실험적 Object 유형) 중첩 배열을
Object유형 컬럼에 삽입할 때 발생하던 일부 사례를 수정했습니다. #37305 (Anton Popov). - 집계 함수, prewhere 및 join에서 상수 문자열 충돌로 발생하는 예기치 않은 오류를 수정했습니다. #36891을 해결합니다. #37336 (Vladimir C).
- 쿼리의 GROUP/ORDER BY와 optimize_aggregation_in_order에서 프로젝션 문제를 수정했습니다(이전에는 finish sorting만 수행되어 결과가 올바르지 않았습니다). #37342 (Azat Khuzhin).
- S3의 키 이름에 포함된 기호로 인해 발생하는 오류를 수정했습니다. #33009을 해결합니다. #37344 (Vladimir Chebotarev).
- GROUPING SETS를 ROLLUP 또는 CUBE와 함께 사용하면 예외가 발생합니다. #37367 (Dmitry Novik).
- 머지 중
config.xml(새 방식)에서background_pool_size/background_merges_mutations_concurrency_ratio에 비표준적인 큰 값이 지정되고users.xml(Deprecated 방식)에는 지정되지 않은 경우, getMaxSourcePartsSizeForMerge에서 발생하는 LOGICAL_ERROR를 수정했습니다. #37413 (Azat Khuzhin). - RowBinary format에서 UTF-8 BOM이 제거되지 않도록 수정했습니다. #37428 (Paul Loyd). #37428 (Paul Loyd).
- clickhouse-keeper 버그 수정: 단일 노드 클러스터의 강제 복구 문제를 수정했습니다. #37440 (Antonio Andelic).
- normalizeUTF8 함수의 논리적 오류를 수정했습니다. #37298를 해결했습니다. #37443 (Maksim Kita).
- JoinSwitcher에서 널 허용 타입의 lowcard CAST를 수정하고, #37385를 해결했습니다. #37453 (Vladimir C).
- ORC/Arrow/Parquet 포맷에서 이름이 지정된 Tuple 출력 문제 수정. #37458 (Kruglov Pavel).
- GROUPING SETS가 있는 경우 ORDER BY 절에서 단조 함수 최적화가 올바르게 동작하도록 수정했습니다. #37401을 수정합니다. #37493 (Dmitry Novik).
- 일부 조건에서 딕셔너리와 조인할 때 발생하던 오류를 수정했습니다. #37386를 해결했습니다. #37530 (Vladimir C).
GROUPING SETS와 함께optimize_aggregation_in_order를 사용하는 것을 금지합니다(LOGICAL_ERROR수정). #37542 (Azat Khuzhin).- ActionsDAG의 덤프 정보 오류를 수정했습니다. #37587 (zhanglistar).
- UNION 쿼리에서의 타입 변환을 수정했습니다(LOGICAL_ERROR가 발생할 수 있음). #37593 (Azat Khuzhin).
STEP절에서 음수 인터벌을 사용할 때WITH FILL수정자의 문제를 수정했습니다. #37514를 해결합니다. #37600 (Anton Popov).join_use_nulls = 1일 때 잘못된joinGet배열 사용을 수정했습니다. 이 수정으로 #37562가 해결되었습니다. #37650 (Amos Bird).- 크로스 조인에서 컬럼 수 불일치를 수정하여 #37561을 해결했습니다. #37653 (Vladimir C).
- 명명된 컬렉션을 사용하도록 구성된 mysql 데이터베이스의
show create table에서 발생하던 세그멘테이션 폴트를 수정했습니다. #37683를 해결합니다. #37690 (Kseniia Sumarokova). - SETTINGS 절 없이 스토리지를 생성한 경우 서버 재시작 시 RabbitMQ Storage가 시작되지 않던 문제를 수정했습니다. #37463를 해결합니다. #37691 (Kseniia Sumarokova).
- SQL 사용자 정의 함수의 CREATE/DROP이 readonly 모드에서 비활성화됩니다. #37280을 해결합니다. #37699 (Maksim Kita).
- 실행형 사용자 정의 함수의 널 허용 인수 포맷을 수정합니다. #35897을 해결합니다. #37711 (Maksim Kita).
- 분산 쿼리에서
optimize_monotonous_functions_in_order_by설정을 통해 활성화되는 최적화를 수정했습니다. #36037을 해결합니다. #37724 (Anton Popov). values테이블 함수에서Invalid Field get from type UInt64 to type Float64가 발생할 수 있는 논리 오류를 수정했습니다. #37602을 해결했습니다. #37754 (Kruglov Pavel).- SchemaReader 생성자에서 예외가 발생할 때 스키마 추론 중 발생할 수 있는 segfault를 해결했습니다. #37680을 해결합니다. #37760 (Kruglov Pavel).
- 내부 cast 함수의 cast_ipv4_ipv6_default_on_conversion_error 설정을 수정했습니다. #35156을 해결했습니다. #37761 (Maksim Kita).
- DatatypeDate32의 toString 오류 수정. #37775 (LiuNeng).
- clickhouse-keeper 설정
dead_session_check_period_ms가 마이크로초로 변환되면서(1000배 증가), 그 결과 dead session이 500ms가 아니라 몇 분 후에야 정리되는 문제가 있었습니다. #37824 (Michael Lex). async_socket_for_remote/use_hedged_requests가 비활성화된 경우, 분산 쿼리에서 발생할 수 있는 “No more packets are available” 문제를 수정했습니다. #37826 (Azat Khuzhin).- (실험적 WINDOW VIEW) WindowView에서
ALTER TABLE ... MODIFY QUERY를 실행할 때 내부 대상 테이블(target table)이 삭제되지 않도록 수정했습니다. #37879 (vxider). - clickhouse-keeper Docker image에서 coordination 디렉터리의 소유권 문제를 수정합니다. #37914 문제를 수정합니다. #37915 (James Maidment).
- Dictionaries에서 update 필드와
{condition}이 포함된 사용자 지정 쿼리 문제를 수정했습니다. #33746를 해결했습니다. #37947 (Maksim Kita). ORDER BY가WITH FILL결과 뒤에 적용되어야 하는 경우(예: 외부 쿼리)SELECT ... WITH FILL의 결과가 잘못될 수 있던 문제를 수정했습니다. 이 잘못된 결과는ORDER BY표현식 최적화로 인해 발생했습니다(#35623). #37904를 해결했습니다. #37959 (Yakov Olkhovskiy).- (실험적 WINDOW VIEW) WindowView에서 대상 테이블(target table)로 푸시할 때 누락된 기본 컬럼을 추가하도록 수정하고 #37815를 해결했습니다. #37965 (vxider).
- 컴파일이 실패할 수 있었던 지나치게 큰 스택 프레임 문제를 수정했습니다. #37996 (Han Shukai).
- enable_filesystem_query_cache_limit를 활성화할 때 “예약된 캐시 크기가 남은 캐시 크기를 초과합니다” 예외가 발생하던 문제를 수정했습니다. #38004 (xiedeyantu).
- UNION 쿼리에서 타입 변환 문제를 수정했습니다(LOGICAL_ERROR가 발생할 수 있음). #34775 (Azat Khuzhin).
- BackgroundExecutor가 사용 중이면 TTL 머지가 다시 예약되지 않을 수 있습니다. selectPartsToMerge()에서 —merges_with_ttl_counter가 증가합니다. BackgroundExecutor가 사용 중이면 —merge 작업이 무시되어 —merges_with_ttl_counter가 감소하지 않습니다. #36387 (lthaooo).
normalize_function_names설정의 재정의된 값을 수정했습니다. #36937 (李扬).- 지수 시간 감쇠 윈도 함수의 수정 사항입니다. 이제 윈도우 경계를 올바르게 준수합니다. #36944 (Vladimir Chebotarev).
- system.projection_parts 및 system.projection_parts_columns를 읽을 때 발생할 수 있는 heap-use-after-free 오류를 수정했습니다. 이로써 #37184가 해결됩니다. #37185 (Amos Bird).
- Unix epoch 이전
DateTime64의 소수점 이하 초 동작을 수정했습니다. #37697 (Andrey Zvonov). #37039 (李扬).
ClickHouse 릴리스 22.5, 2022-05-19. 발표 자료, 동영상
업그레이드 참고 사항
- 이제 백그라운드 머지, 뮤테이션 및
OPTIMIZE는SelectedRows와SelectedBytes메트릭을 증가시키지 않습니다. 대신 이전과 마찬가지로MergedRows와MergedUncompressedBytes는 계속 증가시킵니다. 이 변경은 메트릭 값에만 영향을 주며, 메트릭이 더 정확해지도록 합니다. 호환성 문제를 일으키지는 않지만 메트릭 변화가 눈에 띌 수 있으므로 이 범주에 포함했습니다. #37040 (Nikolai Kochetov). - BoringSSL 모듈을 공식 FIPS 준수 버전으로 업데이트했습니다. 이에 따라 ClickHouse도 FIPS를 준수하게 되었습니다. #35914 (Meena-Renganathan). 암호군
aes-192-cfb128및aes-256-cfb128은 BoringSSL의 FIPS 인증 버전에 포함되지 않으므로 제거되었습니다. users.xml의 기본 사용자 프로필에서max_memory_usage설정이 제거되었습니다. 이에 따라 기존의 고정된 10 GB 제한 대신 쿼리에 더 유연한 메모리 제한을 적용할 수 있습니다.- 이제
log_query_threads설정은 기본적으로 비활성화됩니다. 이 설정은 쿼리 실행에 참여하는 각 스레드의 통계 로깅을 제어합니다. 비동기 읽기를 지원한 이후로 고유한 스레드 ID 수가 지나치게 많아졌고,query_thread_log에 로깅하는 부담도 너무 커졌습니다. #37077 (Alexey Milovidov). - 버그가 있는
groupArraySorted함수를 제거했습니다. #36822 (Alexey Milovidov).
새 기능
- 기본적으로 메모리 오버커밋을 활성화합니다. #35921 (Dmitry Novik).
- GROUP BY 절에서 GROUPING SETS를 지원합니다. 이 구현은 grouping sets를 병렬로 처리할 수 있습니다. #33631 (Dmitry Novik).
system.certificates테이블이 추가되었습니다. #37142 (Yakov Olkhovskiy).h3Line,h3Distance,h3HexRing함수를 추가합니다. #37030 (Bharat Nallan).- 새로운 단일 바이너리 기반 진단 도구(clickhouse-diagnostics)를 추가합니다. #36705 (Dale McDiarmid).
- 출력 형식
Prometheus를 추가합니다. #36051. #36206 (Vladimir C). MySQLDump입력 형식을 추가합니다. 이 형식은 dump에서 하나의 테이블에 속하는 INSERT 쿼리의 모든 데이터를 읽습니다. 테이블이 둘 이상인 경우 기본적으로 첫 번째 테이블의 데이터를 읽습니다. #36667 (Kruglov Pavel).- 임시 테이블에 대해서도
system.tables에total_rows및total_bytes필드를 표시합니다. #36401. #36439 (xiedeyantu). - 쿼리 수준 설정으로
parts_to_delay_insert및parts_to_throw_insert를 재정의할 수 있도록 합니다. 이 값이 정의되면 테이블 수준 설정보다 우선 적용됩니다. #36371 (Memo).
실험적 기능
- 배열에 대한 L1, L2, Linf, Cosine 거리 함수와 L1, L2, Linf 노름 함수를 구현했습니다. #37033 (qieqieplus). 주의: 이 함수들의 이름은 변경될 예정입니다.
- WindowView의
WATCH쿼리를 개선했습니다. 1.fire_condition시그널을 호출해 쿼리 결과 제공 지연 시간을 줄였습니다. 2.isCancelled()를 더 자주 확인해 쿼리 취소 작업(ctrl-c)을 더 빠르게 수행할 수 있도록 했습니다. #37226 (vxider). - 파일 시스템 캐시 삭제에 대한 내부 검사를 추가했습니다. #36802 (Han Shukai).
- SQL용 새 hash 함수
wyHash64를 추가했습니다. #36467 (olevino). - 복제된 데이터베이스 개선: 현재 동기화가 비동기식이므로, Replicated 데이터베이스 내 테이블 메타데이터를 동기화할 수 있는
SYSTEM SYNC DATABASE REPLICA쿼리를 추가했습니다. #35944 (Nikita Mikhaylov). - 원격 파일 시스템 캐시 개선: 캐시에서의 읽기 성능을 향상했습니다. #37054 (Kseniia Sumarokova).
SYSTEM DROP FILESYSTEM CACHE쿼리 개선:<path>옵션과FORCE옵션을 추가했습니다. #36639 (Kseniia Sumarokova). - 반정형 데이터 개선:
Object(...)유형의 컬럼을Object(Nullable(...))로 CAST할 수 있도록 허용했습니다. #36564 (awakeljw). - 병렬 레플리카 개선: localhost 레플리카에서 쿼리를 실행할 때는 로컬 인터프리터를 생성합니다. 반면 여러 레플리카에서 쿼리를 실행할 때는 레플리카가 coordinator와 통신할 수 있도록 기존 connection이 있다고 가정했습니다. 이제 이 부분이 개선되어 localhost 레플리카도 동일한 프로세스 내에서 coordinator와 직접 통신할 수 있습니다. #36281 (Nikita Mikhaylov).
성능 개선
- GROUP BY 표현식 없이
avg,sum집계 함수를 사용할 때의 성능을 개선했습니다. #37257 (Maksim Kita). - 동적 디스패치를 사용해 단항 산술 함수(
bitCount,bitNot,abs,intExp2,intExp10,negate,roundAge,roundDuration,roundToExp2,sign)의 성능을 개선했습니다. #37289 (Maksim Kita). - 정렬 컬럼 비교자의 JIT 컴파일을 사용해 ORDER BY, MergeJoin, MergeTree로의 삽입 성능을 개선했습니다. #34469 (Maksim Kita).
system.asynchronous_metric_log의 구조를 변경했습니다. 필요한 공간이 약 10배 줄어듭니다. 이로써 #36357가 해결됩니다.event_time_microseconds필드는 불필요하여 제거했습니다. #36360 (Alexey Milovidov).- wide 파트를 읽을 때 필요한 컬럼의 마크만 로드합니다. #36879 (Anton Kozlov).
- 뮤텍스 범위를 줄여 파일 디스크립터 캐시의 성능을 개선했습니다. #36682 (Anton Kozlov).
- 경로에 글롭 패턴이 있고 일치하는 디렉터리에 파일이 매우 많은 경우, 스토리지
File및 테이블 함수file의 읽기 성능을 개선했습니다. #36647 (Anton Popov). - 입력 형식
HiveText에 병렬 파싱을 적용했습니다. 로컬 파일을 읽을 때 HiveText 파싱 속도를 2배까지 높일 수 있습니다. #36650 (李扬). - 기본
HashJoin은 오른쪽 테이블의 행을 삽입할 때 스레드 안전하지 않아 단일 스레드에서 실행됩니다. 오른쪽 테이블이 큰 경우 CPU 활용률이 낮아 조인 처리가 매우 느립니다. #36415 (lgbo). select countDistinct(a) from t를select count(1) from (select a from t groupBy a)로 재작성할 수 있도록 했습니다. #35993 (zhanglistar).- OR LIKE 체인을 multiMatchAny로 변환합니다. 안정적으로 동작한다는 확신이 더 생기면 활성화할 예정입니다. #34932 (Daniel Kutenin).
- 인라이닝을 통해 일부 함수의 성능을 개선했습니다. #34544 (Daniel Kutenin).
- readBig에서 불필요한 memcpy를 피하기 위한 분기 처리를 추가했습니다. 성능이 다소 향상됩니다. #36095 (jasperzhu).
- optimize_aggregation_in_order를 위한 부분 GROUP BY 키를 구현했습니다. #35111 (Azat Khuzhin).
개선
file,s3,url테이블 함수를 실행하는 동안 파싱 오류가 발생하면 해당 파일의 이름을 표시합니다. #36314 (Anton Popov).- 최상위 구성에 지정된 경우, 런타임에 백그라운드 작업(머지, 뮤테이션, 이동 작업 및 fetch 작업)을 실행하는 스레드 수를 늘릴 수 있게 했습니다. #36425 (Nikita Mikhaylov).
- 이제 시/분 단위의 부분 오프셋이 있는 시간대에서 1970-01-01 00:00:00 이전 시각을 생성하는 date time 변환 함수는 오버플로우 대신 0으로 포화됩니다. 이는 https://github.com/ClickHouse/ClickHouse/pull/29953 의 후속 변경으로, https://github.com/ClickHouse/ClickHouse/pull/29953#discussion_r800550280 를 해결합니다. 이는 구현에 따라 정의되는 동작이며(매우 드문 경우이기도 하므로) 이를 변경해도 허용되기 때문에 개선 사항으로 분류합니다. #36656 (Amos Bird).
- 누군가가 로그 레벨 “test”로 clickhouse-server를 실행 중인 경우 경고를 추가합니다. 로그 레벨 “test”는 최근에 추가되었으며, 불가피하고 피할 수 없으며 치명적이고 생명을 위협하는 성능 저하를 초래하므로 프로덕션 환경에서는 사용할 수 없습니다. #36824 (Alexey Milovidov).
- CREATE TABLE에서 문자열 정렬 규칙(collation)을 파싱할 때 예외를 발생시키거나 무시합니다. #35892를 해결합니다. #36271 (yuuch).
- 옵션
compatibility_ignore_auto_increment_in_create_table을 사용하면 MySQL에서 마이그레이션을 더 쉽게 할 수 있도록 컬럼 선언에서AUTO_INCREMENT키워드를 무시할 수 있습니다. #37178 (Igor Nikonov). JSONEachRow의 별칭으로JSONLines와NDJSON을 추가했습니다. #36303을 해결했습니다. #36327 (flynn).- 각 Hive 테이블별로 조회할 수 있는 최대 파티션 수를 제한합니다. 리소스 초과 사용을 방지합니다. #37281 (lgbo).
- 사용성을 개선하기 위해
h3kRing함수의 두 번째 인수에 암시적 형변환을 추가했습니다. #35432를 해결합니다. #37189 (Maksim Kita). clickhouse-local에서 모든 쿼리에 대한INSERT SELECT진행률 표시를 수정하고, 클라이언트의 파일 진행률 표시도 더 정확하게 개선했습니다. #37075 (Kseniia Sumarokova).- 파트 제거 중 파일 시스템 장애가 발생할 경우 MergeTree 테이블 엔진 계열에서 오래된 파트가 그대로 남을 수 있는 버그를 수정했습니다. 수정 전에는 첫 번째 서버 재시작 이후에만 해당 파트가 제거되었습니다. #37014 (alesapin).
- 행 정책 처리의 새로운 모드를 구현했으며, 기본 구성에서 이를 활성화하면 허용형 행 정책이 없는 사용자도 행을 읽을 수 있습니다. #36997 (Vitaly Baranov).
- 실행 UI: 널 허용 숫자형 값은 테이블 셀에서 오른쪽으로 정렬됩니다. 이로써 #36982가 해결되었습니다. #36988 (Alexey Milovidov).
- 실행 UI: 결과가 1행(row)이고 컬럼(column)이 여러 개이면 결과를 세로로 표시합니다. #36811의 후속 작업입니다. #36842 (Alexey Milovidov).
- Play UI의 CSS를 정리했습니다. 픽셀이 더 균일하게 배치됩니다. table 셀의 긴 콘텐츠에 대한 사용성이 개선되었습니다. #36569 (Alexey Milovidov).
- 예외 발생 시 소멸자에서 처리하지 않도록 쓰기 버퍼를 미리 마무리합니다. 다음 문제가 해결되기를 기대합니다: #36907. #36979 (Kruglov Pavel).
- #36425 이후
background_fetches_pool_size와 같은 설정은 폐기되어 최상위 구성에 나타날 수 있게 되었지만, ClickHouse에서Error updating configuration from '/etc/clickhouse-server/config.xml' config.: Code: 137. DB::Exception: A setting 'background_fetches_pool_size' appeared at top level in config /etc/clickhouse-server/config.xml.와 같은 예외가 발생했습니다. 이 문제가 수정되었습니다. #36917 (Nikita Mikhaylov). - 다른 서버에 예외를 보낼 때 가능한 경우 추가 진단 정보를 함께 보냅니다. #36872 (tavplubix).
Array(Tuple(..))유형의 인수로 해시 함수를 실행할 수 있도록 지원합니다. #36812 (Anton Popov).user_defined_path설정이 추가되었습니다. #36753 (Maksim Kita).s3Cluster테이블 함수에서 cluster 매크로를 사용할 수 있도록 했습니다. #36726 (Vadim Volodin).clickhouse-client/clickhouse-local에서 INSERT 쿼리를 올바르게 취소하도록 개선했습니다. #36710 (Azat Khuzhin).MySQLHandler에서 쿼리 ID를 적절히 유지하면서도 쿼리를 취소할 수 있게 했습니다. #36699 (Amos Bird).system.processes에is_all_data_sent컬럼을 추가하고, 이를 기반으로 내부 테스트의 하드닝 검사를 개선했습니다. #36649 (Azat Khuzhin).- S3에서 읽는 데 소요된 시간에 관한 메트릭이 이제 올바르게 계산됩니다. #35483를 해결했습니다. #36572 (Alexey Milovidov).
- clickhouse-local에서 실행할 경우 테이블 함수 file에서 파일 디스크립터를 허용합니다. #36562 (wuxiaobai24).
- 숫자로 시작하는 튜플 요소 이름을 허용합니다. #36544 (Anton Popov).
- 이제 clickhouse-benchmark에서 환경 변수를 통해 인증 정보를 읽을 수 있습니다. #36497 (Anton Kozlov).
clickhouse-keeper개선: 쿼럼 없이도 클러스터를 재구성할 수 있는 강제 복구 지원이 추가되었습니다. #36258 (Antonio Andelic).- JSON 객체의 스키마 추론을 개선했습니다. #36207 (Kruglov Pavel).
- 글롭 패턴을 사용하는 스키마 추론 관련 코드를 리팩터링했습니다. 타당한 경우에만 글롭 패턴의 다음 파일을 시도하도록 했습니다(이전에는 어떤 오류가 발생해도 다음 파일을 시도했습니다). 또한 #36317도 수정했습니다. #36205 (Kruglov Pavel).
- 별도의
CLUSTERgrant를 추가했습니다(하위 호환성을 위해access_control_improvements.on_cluster_queries_require_cluster_grant구성 지시문의 기본값은false입니다). #35767 (Azat Khuzhin). - 선택된 쿼리가 중지되기 전에 필요한 메모리가 확보되면, 대기 중인 모든 쿨리가 계속 실행됩니다. 이제는 선택된 쿼리가 취소 사실을 인지하기 전에 메모리가 해제되면 어떤 쿼리도 중지되지 않습니다. #35637 (Dmitry Novik).
- protobuf에서 널 허용 값(Nullable)을 감지합니다. proto3에서는 기본값이 wire로 전송되지 않습니다. 이 때문에 널 허용 컬럼의 NULL 값과 기본값을 구분하기가 쉽지 않습니다. 이 문제를 처리하는 표준적인 방법은 Google wrappers를 사용해 대상 값을 내부 메시지에 감싸 넣는 것입니다(https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wrappers.proto 참고). 이 경우 필드가 없으면 null 값으로 해석되고, 필드는 있지만 값이 없으면 기본값으로 해석되며, 일반 값이 있으면 일반 값으로 해석됩니다. 그러나 ClickHouse는 Google wrappers를 중첩 컬럼으로 해석합니다. 이에 Google wrappers를 감지해 위 설명과 같이 해석하는 특별한 동작을 도입할 것을 제안합니다. 예를 들어 널 허용 컬럼
test의 값을 직렬화하려면 .proto 스키마에서google.protobuf.StringValue test를 사용합니다. 이 타입들은 Protobuf에서 이른바 “well-known types”라고 하며, 라이브러리 자체에 구현되어 있다는 점에 유의하십시오. #35149 (Jakub Kuklis). - 사전 정의된 정적 HTTP handler 구성에서
content_type을 지정하는 기능이 추가되었습니다. #34916 (Roman Nikonov). --external없이 clickhouse-client--file을 사용하는 경우 적절한 경고를 표시하도록 합니다. Close #34747. #34765 (李扬).- MySQL 데이터베이스 엔진의 binary(0) dataType 호환성을 개선했습니다. #37232 (zzsmdfj).
- clickhouse-benchmark의 JSON 보고 기능을 개선했습니다. #36473 (Tian Xinhui).
- 외부 ClickHouse 딕셔너리의 호스트명을 해석할 수 없으면 서버가 시작을 거부할 수 있었습니다. 이 문제가 수정되었습니다. #36451을 수정했습니다. #36463 (tavplubix).
빌드/테스트/패키징 개선
- 이제
x86_64아키텍처용clickhouse-keeper는 musl에 정적으로 링크되며 시스템 라이브러리에 의존하지 않습니다. #31833 (Alexey Milovidov). - 이제
PowerPC64LE아키텍처용 ClickHouse 빌드를 범용 설치 스크립트curl https://clickhouse.com/ | sh및 직접 링크https://builds.clickhouse.com/master/powerpc64le/clickhouse를 통해 사용할 수 있습니다. #37095 (Alexey Milovidov). - 호환성을 높이기 위해 PowerPC 코드 생성을 Power8로 제한합니다. 이 변경으로 #36025가 해결됩니다. #36529 (Alexey Milovidov).
- 성능 테스트를 간소화합니다. 이를 통해 이 테스트를 활용할 수 있게 됩니다. #36769 (Alexey Milovidov).
- 보고서에 오류가 있으면 성능 비교를 실패 처리합니다. #34797 (Mikhail f. Shiryaev).
- Arrow에 ZSTD 지원을 추가합니다. 이 변경으로 #35283가 수정됩니다. #35486 (Sean Lafferty).
버그 수정
- URI에
Version ID가 있으면 이를 추출하고 요청을AWS HTTP URI에 추가합니다. #31221을 해결합니다. - [x] URI에Version ID가 있으면 이를 추출하고, 이를 제외한 URI를 다시 구성합니다. - [x] 요청으로AWS HTTP URI객체를 구성합니다. - [x] 단위 테스트:gtest_s3_uri- [x] instrumentation 커밋을 제거했습니다. #34571 (Saad Ur Rahman). - system.opentelemetry_span_log의 attribute.values 별칭이 keys 대신 values를 가리키도록 수정했습니다. #37275 (Aleksandr Razumov).
- Nullable(String)에서 Nullable(Bool/IPv4/IPv6)로의 변환 문제를 수정했습니다. #37221을 해결합니다. #37270 (Kruglov Pavel).
- Experimental 기능:
Object유형 컬럼이 있는 테이블에서 뮤테이션 실행을 수정했습니다. 이제UPDATE또는DELETE쿼리의WHERE표현식에서Object유형의 서브컬럼을 사용할 수 있으며, 개별 서브컬럼을 (DROP,MODIFY) 조작하는 것도 허용됩니다. #37205를 해결했습니다. #37266 (Anton Popov). - Kafka는 producer 단계에서
group.id를 필요로 하지 않습니다. 콘솔 로그에서 이 문제를 설명하는 경고 메시지를 확인할 수 있습니다:2022.05.15 17:59:13.270227 [ 137 ] {} <Warning> StorageKafka (topic-name): [rdk:CONFWARN] [thrd:app]: Configuration property group.id is a consumer property and will be ignored by this producer instance. #37228 (Mark Andreev). - 실험적 기능(WindowView): 아직 fired되지 않은 데이터가 삭제되는 경우에 대비해, 블록이 실제로 fired된 후
max_fired_watermark를 업데이트합니다. #37225 (vxider). - LIMIT BY가 있는 분산 쿼리에서 “Cannot create column of type Set” 오류를 수정했습니다. #37193 (Azat Khuzhin).
- 실험적 기능: 이제
WindowViewSource.h:58에서 생성된 비어 있지 않은 청크 때문에 WindowViewWATCH EVENTS쿼리가 종료되는 문제가 발생하지 않습니다. #37182 (vxider). - 서브쿼리에서
enable_global_with_statement를 활성화하고, #37141를 해결했습니다. #37166 (Vladimir C). - optimize_skip_unused_shards_rewrite_in에서의 암시적 CAST를 수정했습니다. #37153 (Azat Khuzhin).
- FixedString 컬럼에서 ILIKE 함수가 잘못된 결과를 반환할 수 있었습니다(즉, 실제로 일치해야 하는 것보다 적게 일치할 수 있었습니다). #37117 (Robert Schulze).
AggregateFunction유형의 컬럼을 기준으로GROUP BY를 수행하는 경우를 수정했습니다. #37093 (Azat Khuzhin).- 실험적 기능: prefix GROUP BY 및 *Array 집계 함수와 함께 사용할 때 optimize_aggregation_in_order 문제를 수정했습니다. #37050 (Azat Khuzhin).
- 암시적 집계가 포함된 일부 INSERT SELECT 쿼리에서 발생하던 성능 저하를 수정했습니다. #36792를 해결합니다. #37047 (tavplubix).
- 실험적 기능:
*Array(groupArrayArray/…) 집계 함수와 함께 사용할 때 순서 기반GROUP BY(optimize_aggregation_in_order=1)를 수정했습니다. #37046 (Azat Khuzhin). - 인덱스의 유형이 UInt8이 아닐 때 LowCardinality->ArrowDictionary의 출력이 잘못되는 문제를 수정했습니다. #36832를 해결했습니다. #37043 (Kruglov Pavel).
quantileTDigest의 infs 문제를 수정했습니다. #32107을 해결했습니다. #37021 (Vladimir Chebotarev).- HedgedConnections에서 max_parallel_replicas != 1일 때 외부 테이블 데이터 전송 오류를 수정했습니다. #36981 (Kruglov Pavel).
Replicated데이터베이스의TRUNCATE쿼리 관련 논리 오류를 수정했습니다. #33747을 해결합니다. #36976 (tavplubix).- 실험적 기능: WindowView에서 원본 테이블 삭제 시 멈추는 문제를 수정했습니다. #35678를 해결합니다. #36967 (vxider).
- 실험적 기능(rocksdb cache): 문제 해결: #36671. #36929 (李扬).
- 실험적 기능: 약간 다른 스키마로도
writeIntoWindowView를 호출할 수 있도록 변환 작업을 추가하여, WindowView에서 여러 컬럼을 사용할 때 발생하던 버그를 수정했습니다. #36928 (vxider). - 부하가 낮고 재시작이 발생할 때 압축된 로그 파일이 손상될 수 있던 clickhouse-keeper 버그를 수정했습니다. #36910 (alesapin).
- 상수 집계를 수행할 때 잘못된 쿼리 결과가 반환되던 문제를 수정했습니다. 이 변경으로 #36728이 해결되었습니다. #36888 (Amos Bird).
- 실험적 기능: cache의
current_size개수 계산 수정. #36887 (Kseniia Sumarokova). - 실험적 기능: hop window를 사용하는 window view에서 fire 동작 문제 수정 #34044. #36861 (vxider).
- 실험적 기능: remote fs의 캐시 버퍼에서 잘못된 CAST를 수정했습니다. #36809 (Kseniia Sumarokova).
flatten_nested = 0인 테이블 생성 문제를 수정했습니다. 이전에는 평탄화되지 않은Nested컬럼이 서버를 재시작한 후 평탄화될 수 있었습니다. #36803 (Anton Popov).- 낮은 카디널리티를 읽는 과정에서 발생하던 원격 파일 시스템 비동기 읽기 관련 몇 가지 문제를 수정했습니다. #36763 (Kseniia Sumarokova).
- 실험적 기능: 글롭 패턴을 사용하는 테이블 함수
file등을 통해 여러 파일에서Object유형의 컬럼에 삽입할 때 발생하던 문제를 수정했습니다. #36762 (Anton Popov). - Hedged requests의 타임아웃을 수정했습니다. 원격 쿼리를 전송한 직후 연결이 멈추면 무기한 대기가 발생할 수 있었습니다. #36749 (Kruglov Pavel).
- 실험적 기능: 분산 테이블에서 발생하던
groupBitmapAndState/groupBitmapOrState/groupBitmapXorState버그를 수정했습니다. #36739 (Zhang Yifan). - 실험적 기능: PR의 테스트 중에 한 cache 클래스가 두 번 초기화되면 예외가 발생하는 것을 확인했습니다. 이 문제의 원인은 명확하지 않지만, ClickHouse에는 디스크를 반복해서 로드하는 코드 로직이 있는 것으로 보여 이 경우를 별도로 처리해야 합니다. #36737 (Han Shukai).
- wide 파트의 수직 병합 문제를 수정했습니다. 이전에는 병합 중
There is no column예외가 발생할 수 있었습니다. #36707 (Anton Popov). - 포트 변경 시 서버 재로드가 현재 쿼리 Context의 연결을 기다리지 않도록 수정했습니다. #36700 (Azat Khuzhin).
- 실험적 기능: 이전 PR에서 테스트(stateless tests, flaky check (address, actions)) 중 타임아웃이 발생한다는 점을 발견했습니다. 또한 로컬에서 테스트할 때도 시스템의 불안정한 교착 상태(deadlocks)를 유발할 수 있습니다. 이 문제는 master의 최신 소스 코드를 사용할 때에도 여전히 존재합니다. #36697 (Han Shukai).
- 실험적 기능: 캐시 구성이 변경된 경우 서버 재시작 문제를 수정했습니다. #36685 (Kseniia Sumarokova).
- 스키마 추론에서 발생할 수 있는 heap-use-after-free 문제를 수정했습니다. #36661을 해결했습니다. #36679 (Kruglov Pavel).
- 엔진이 지정되지 않은 경우
CREATE쿼리에서 쿼리 설정 파싱이 올바르게 처리되도록 수정했습니다. https://github.com/ClickHouse/ClickHouse/pull/34187#issuecomment-1103812419를 수정합니다. #36642 (tavplubix). - 실험적 기능:
Object유형의 wide 파트 머지를 수정했습니다. #36637 (Anton Popov). - 리터럴이 아닌 기본 표현식이 EPHEMERAL 뒤에 올 때 발생하던 포맷 충돌을 수정했습니다. #36618을 해결했습니다. #36633 (flynn).
ENGINE = MergeTree테이블에서INTERPOLATE사용 시 발생할 수 있던Missing column예외를 수정했습니다. #36549 (Yakov Olkhovskiy).WHERE의 join 쿼리에서 리터럴로 인해 발생할 수 있는 잠재적 오류를 수정했습니다. #36279를 해결했습니다. #36542 (Vladimir C).- 정의되지 않은 동작을 일으킬 수 있던 ReadBufferFromEncryptedFile의 offset 갱신 문제를 수정했습니다. #36493 (Kseniia Sumarokova).
- Keeper 클러스터 구성의 호스트명 유효성 검사를 수정했습니다. 해당 검사를 활성화하거나 비활성화할 수 있도록
keeper_server.host_checks_enabled구성을 추가했습니다. #36492 (Antonio Andelic). - GROUP BY에서 실행형 사용자 정의 함수 사용 문제를 수정했습니다. 이전에는 실행형 사용자 정의 함수를 GROUP BY의 표현식으로 사용할 수 없었습니다. #36448을 해결합니다. #36486 (Maksim Kita).
- 클라이언트에서 server의 알 수 없는 패킷으로 인해 발생할 수 있는 예외를 수정했습니다. #36481 (Kseniia Sumarokova).
- 실험적 기능(
system.session_log은 절대 사용하지 마십시오. 곧 제거될 예정입니다): system.session_log 테이블에 누락된 enum 값을 추가합니다. #36474를 해결합니다. #36480 (Memo). - s3Cluster 스키마 추론에서 s3Cluster에 대한 select 시 모든 데이터가 읽히지 않던 버그를 수정했습니다. 이 버그는 https://github.com/ClickHouse/ClickHouse/pull/35544 에서 발생했습니다. #36434 (Kruglov Pavel).
- JOIN 및 COLUMNS matcher에서 nullptr 역참조를 수정했습니다. 이 변경으로 #36416 문제가 해결됩니다. 이는 https://github.com/ClickHouse/ClickHouse/pull/36417에 대한 수정입니다. #36430 (Amos Bird).
ClickHouseDictionarySource에 스칼라 서브쿼리가 포함된 경우 발생하던 딕셔너리 재로드 문제를 수정했습니다. #36390 (lthaooo).- JOIN의 assertion을 수정하고 #36199를 닫았습니다. #36201 (Vladimir C).
- 특수 연산자 내부에 별칭(alias)이 있는 쿼리에서 구문 분석 오류가 발생했습니다(22.1에서부터 깨진 상태였습니다). 예시:
SELECT substring('test' AS t, 1, 1). #36167 (Maksim Kita). - 실험적 기능: 중첩 배열이 포함된 복잡한 JSON을
Object유형의 컬럼에 삽입할 때 발생하던 문제를 수정했습니다. #36077 (Anton Popov). - compact 파트가 있는 중첩 컬럼에서 발생하던 ALTER DROP COLUMN 문제를 수정했습니다(즉,
n.d컬럼이 있을 때의ALTER TABLE x DROP COLUMN n). #35797 (Azat Khuzhin). offset및length가 음수 상수이고s가 상수가 아닐 때 발생하던substring함수의 범위 오류 길이 계산 문제를 수정했습니다. #33861 (RogerYK).
ClickHouse 릴리스 22.4, 2022-04-19. 발표, 동영상
하위 호환되지 않는 변경 사항
- INSERT 쿼리에서 FORMAT 뒤에 SETTINGS를 허용하지 않습니다(이러한 쿼리를 허용하는 호환성 설정
allow_settings_after_format_in_insert가 있지만, 기본적으로 OFF입니다). #35883 (Azat Khuzhin). - 함수
yandexConsistentHash(Konstantin “kostik” Oblakov의 일관 해시 알고리즘)가kostikConsistentHash로 이름이 변경되었습니다. 이전 이름은 호환성을 위해 별칭으로 유지됩니다. 이 변경 자체는 하위 호환되지만, 이후 릴리스에서 이 별칭이 제거될 수 있으므로 애플리케이션에서 이 함수를 사용하는 부분을 업데이트할 것을 권장합니다. #35553 (Alexey Milovidov).
새 기능
- ORDER BY … WITH FILL에 INTERPOLATE 확장 기능이 추가되었습니다. #34903이 종료되었습니다. #35349 (Yakov Olkhovskiy).
- 프로세서 수준 프로파일링(
log_processors_profiles설정을 사용하면 ClickHouse가 실행 중이거나 데이터를 기다리는 동안 각 프로세서가 소비한 시간을system.processors_profile_log테이블에 기록합니다). #34355 (Azat Khuzhin). - 함수 makeDate(year, month, day), makeDate32(year, month, day)가 추가되었습니다. #35628 (Alexander Gololobov). makeDateTime() 및 makeDateTIme64()가 구현되었습니다. #35934 (Alexander Gololobov).
- 삽입 쿼리 중 기록되는 바이트 수를 제한하는 새로운 할당량인
WRITTEN BYTES를 지원합니다. #35736 (Anton Popov). - 함수
flattenTuple이 추가되었습니다. 이 함수는 중첩된 이름 있는Tuple을 인수로 받아, 원래Tuple의 경로를 요소로 갖는 평탄화된Tuple을 반환합니다. 예:Tuple(a Int, Tuple(b Int, c Int)) -> Tuple(a Int, b Int, c Int).flattenTuple은Object유형의 모든 경로를 개별 컬럼으로 선택하는 데 사용할 수 있습니다. #35690 (Anton Popov). - 함수
arrayFirstOrNull,arrayLastOrNull가 추가되었습니다. #35238을 해결합니다. #35414 (Maksim Kita). - 함수
minSampleSizeContinous및minSampleSizeConversion이 추가되었습니다. 기여자: achimbab. #35360 (Maksim Kita). - 새로운 함수 minSampleSizeContinous 및 minSampleSizeConversion. #34354 (achimbab).
- 포맷
ProtobufList를 도입했습니다(출력 Protobuf에서 모든 레코드를 반복 메시지로 표현). #16436을 해결했습니다. #35152 (Nikolai Kochetov). h3PointDistM,h3PointDistKm,h3PointDistRads,h3GetRes0Indexes,h3GetPentagonIndexes함수가 추가되었습니다. #34568 (Bharat Nallan).- 날짜 또는 시간이 포함된 날짜 값을 해당 월의 마지막 날로 올리는
toLastDayOfMonth함수를 추가합니다. #33501. #34394 (Habibullah Oladepo). - [Zoo]Keeper 클라이언트에 로드 밸런싱 설정이 추가되었습니다. #29617이 해결되었습니다. #30325 (小路).
simple이라는 새로운 유형의 행 정책(row policy)을 추가했습니다. 이 PR 이전에는permissive와restrictive라는 두 가지 유형의 행 정책이 있었습니다.simple행 정책은permissive및restrictive정책과 달리 부작용 없이 테이블에 새 filter를 추가합니다. #35345 (Vitaly Baranov).- 복제된 데이터베이스에서 클러스터 시크릿을 지정하는 기능이 추가되었습니다. #35333 (Nikita Mikhaylov).
- 서버 시작 시 기본적인 점검(사용 가능한 메모리 및 디스크 공간, 최대 스레드 수 등)을 추가했습니다. #34566 (Sergei Trifonov).
- INTERVAL 개선 - 이제
[MILLI|MICRO|NANO]SECOND와 함께 사용할 수 있습니다.toStartOf[Milli|Micro|Nano]second()함수가 추가되었습니다.[add|subtract][Milli|Micro|Nano]seconds()함수가 추가되었습니다. #34353 (Andrey Zvonov).
실험적 기능
- 단순한
MergeTree테이블에 대한 트랜잭션 지원이 추가되었습니다. 이 기능은 매우 실험적인 상태이므로 프로덕션 환경에는 권장되지 않습니다. #22086의 일부입니다. #24258 (tavplubix). JSONEachRow포맷의Object유형에 대해 스키마 추론을 지원합니다.Map유형의 컬럼을Object유형의 컬럼으로 변환할 수 있습니다. #35629 (Anton Popov).- 모든 쓰기 작업에서 원격 파일 시스템 캐시에 쓸 수 있도록 했습니다.
system.remote_filesystem_cache테이블을 추가했습니다.drop remote filesystem cache쿼리를 추가했습니다.system.remote_data_paths테이블을 통해 S3 메타데이터에 대한 내부 검사를 추가했습니다. #34021을 해결했습니다.read_from_filesystem_cache_if_exists_otherwise_bypass_cache모드를 추가해 머지용 캐시 옵션을 추가했습니다(기본적으로 머지에 대해 활성화되며, 동일한 이름의 쿼리 설정으로도 활성화할 수 있습니다). 캐시 관련 설정의 이름을 변경했습니다(remote_fs_enable_cache -> enable_filesystem_cache등). #35475 (Kseniia Sumarokova). - 파트 메타데이터를 RocksDB에 저장하는 옵션을 추가했습니다. MergeTree의 파트 로딩 과정을 가속화하여 clickhouse-server 시작 시간을 단축합니다. 이 개선으로 clickhouse-server는 70만 개의 MergeTree 파트가 있을 때 시작 시간을 75분에서 20초로 줄일 수 있었습니다. #32928 (李扬).
성능 개선
- 새로운 쿼리 계획 최적화가 추가되었습니다. 가능하면
ORDER BY이후에 함수를 계산합니다. 예를 들어SELECT sipHash64(number) FROM numbers(1e8) ORDER BY number LIMIT 5쿼리에서는sipHash64함수가ORDER BY및LIMIT이후에 계산되어 약 20배의 속도 향상을 얻을 수 있습니다. #35623 (Nikita Taranov). - 집계 중 사용되는 해시 테이블의 크기를 이제 수집해 이후 쿼리에서 활용함으로써 해시 테이블 리사이즈를 방지합니다. #33439 (Nikita Taranov).
- SIMD 명령어(SSE 및 AVX2)를 사용하는 hasAll 함수의 성능을 개선했습니다. #27653 (youennL-cs). #35723 (Maksim Kita).
- ASOF JOIN 성능을 개선하기 위한 여러 변경 사항이 적용되었습니다(1.2~1.6배 향상). 또한 큰 정수도 지원합니다. #34733 (Raúl Marín).
- 키가 네이티브 정수인 경우 ASOF JOIN 성능을 개선했습니다. #35525 (Maksim Kita).
- S3 storage로의 멀티파트 업로드를 병렬화했습니다. #35343 (Sergei Trifonov).
- 이제 URL 스토리지 엔진은 endpoint가 HTTP Range를 지원하면 여러 청크를 병렬로 다운로드합니다. 추가로
max_download_threads와max_download_buffer_size설정이 도입되었으며, 각각 단일 쿼리가 파일 다운로드에 사용할 수 있는 최대 스레드 수와 각 스레드가 처리할 수 있는 최대 바이트 수를 제어합니다. #35150 (Antonio Andelic). - 여러 스레드를 사용해 S3에서 객체를 다운로드합니다. 다운로드는
max_download_threads및max_download_buffer_size설정으로 제어할 수 있습니다. #35571 (Antonio Andelic). - HDFS와 상호작용할 때 뮤텍스 범위를 줄였습니다. #35292와 관련이 있습니다. #35646 (shuchaome).
- 테이블별 TTL이 변경된 경우에만 뮤테이션이 필요하도록 했습니다. #35953 (Azat Khuzhin).
개선
- 스키마 추론이 여러 측면에서 개선되었습니다. CSV, TSV, TSVRaw 데이터 포맷에서 숫자, 문자열, 배열, 튜플, 맵을 판별하기 위해 일부 조정과 휴리스틱을 사용합니다. CSV 형식에 대해 이러한 휴리스틱 사용 여부를 활성화/비활성화하는 설정
input_format_csv_use_best_effort_in_schema_inference를 추가했습니다. 이 설정이 비활성화되면 모든 값을 문자열로 처리합니다. TSV/TSVRaw 포맷에도 유사한 설정input_format_tsv_use_best_effort_in_schema_inference를 추가했습니다. 이 설정들은 기본적으로 활성화되어 있습니다. - Values 형식의 스키마 추론에 맵 지원을 추가했습니다. - Values 형식의 스키마 추론에서 발생할 수 있는 segfault를 수정했습니다. - Arrow/ORC/Parquet 포맷에서 지원되지 않는 타입의 컬럼을 건너뛸 수 있도록 했습니다. 이에 해당하는 설정input_format_{parquet|orc|arrow}_skip_columns_with_unsupported_types_in_schema_inference도 추가했습니다. 이 설정들은 기본적으로 비활성화되어 있습니다. - Arrow/Parquet 포맷에서 타입이 Null인 컬럼을 모든 값이 NULL인 널 허용 컬럼으로 변환할 수 있도록 했습니다. - 컬럼 이름이 포함되지 않은 포맷(CSV, TSV, JSONCompactEachRow 등)에서는 설정column_names_for_schema_inference를 통해 스키마 추론에 사용할 컬럼 이름을 지정할 수 있도록 했습니다. - ORC/Arrow/Parquet 포맷의 스키마 추론에서 널 허용 컬럼 처리와 관련된 문제를 수정했습니다. 이전에는 추론된 모든 타입이 Nullable이 아니어서 데이터에서 Nullable 컬럼을 읽을 수 없었지만, 이제는 수정되어 추론된 모든 타입이 항상 Nullable입니다(스키마만 읽어서는 해당 컬럼이 Nullable인지 아닌지 판단할 수 없기 때문입니다). - CSV 이스케이프 규칙을 사용하는 Template 형식의 스키마 추론을 수정했습니다. #35582 (Kruglov Pavel). - 포맷
JSONAsObject에 대한 병렬 파싱 및 스키마 추론을 추가했습니다. #35592 (Anton Popov). s3Cluster테이블 함수에 자동 스키마 추론 지원이 추가되었습니다.s3와s3Cluster의 시그니처를 일치시켰습니다. #35544 (Nikita Mikhaylov).hdfsCluster에 대한 스키마 추론 지원이 추가되었습니다. #35602 (Nikita Mikhaylov).- JSON 입력 형식에서 bool을 숫자로 추론하고 파싱할 수 있게 하는 새로운 설정
input_format_json_read_bools_as_numbers을 추가했습니다. 이 설정은 기본적으로 활성화됩니다. @alexey-milovidov가 제안했습니다. #35735 (Kruglov Pavel). - TSKV 및 JSONEachRow 포맷의 스키마 추론에서 컬럼 순서를 개선했으며, #35640을 해결했습니다. TSKV 및 JSONEachRow 포맷의 스키마 추론에서 빈 행을 읽더라도 스키마 추론이 중단되지 않도록 개선했습니다. #35724 (Kruglov Pavel).
- 설정
input_format_orc_case_insensitive_column_matching,input_format_arrow_case_insensitive_column_matching,input_format_parquet_case_insensitive_column_matching가 추가되어 ClickHouse가 ORC, Arrow 또는 Parquet 파일에서 데이터를 읽을 때 컬럼 이름을 대소문자 구분 없이 매칭할 수 있습니다. #35459 (Antonio Andelic). - 클라이언트가 TCP 또는 HTTP를 통해 보안 연결을 사용하는지 여부를 나타내는
is_secure컬럼이system.query_log에 추가되었습니다. #35705 (Antonio Andelic). - 이제 저사양 머신(16코어 미만)에서는
kafka_num_consumers를 물리 코어 수보다 크게 설정할 수 있습니다. #35926 (alesapin). - engine=Kafka 테이블 모니터링을 위한 기본 메트릭 몇 가지가 추가되었습니다. #35916 (filimonov).
- 이제 MergeTree 엔진 계열에서는 존재하지 않는 설정에 대해
ALTER TABLE ... RESET SETTING을 수행할 수 없습니다. #35816을 수정했습니다. #35884 (alesapin). - 이제
Array및Nullable타입에 대한 일부ALTER MODIFY COLUMN쿼리는 뮤테이션 없이 메타데이터 수준에서 처리할 수 있습니다. 예를 들어Array(Enum8('Option1'=1))를Array(Enum8('Option1'=1, 'Option2'=2))로 변경할 수 있습니다. #35882 (alesapin). - 쿼리가 실행 중임을 사용자에게 알릴 수 있도록 모래시계 아이콘에 애니메이션을 추가했습니다. #35860 (peledni).
ALTER TABLE t DETACH PARTITION (ALL)을 지원합니다. #35794 (awakeljw).count()와 같은 단순한 쿼리를 최적화할 수 있도록 프로젝션 분석을 개선했습니다. #35788 (Amos Bird).input테이블 함수를 사용하는 insert select에 대한 스키마 추론을 지원합니다. 스키마 추론을 지원하는 테이블 함수에서 insert select를 수행할 때는 데이터를 기반으로 스키마를 추론하는 대신, 삽입 대상 테이블에서 스키마를 가져옵니다. #35639을 해결합니다. #35760 (Kruglov Pavel).- Hive 테이블에서도
remote_url_allow_hosts를 준수하도록 개선했습니다. #35743 (李扬). - clickhouse-local에
send_logs_level을 구현했습니다. #35653를 해결했습니다. #35716 (Kseniia Sumarokova). - #35641을 해결합니다. 명시적 기본 표현식 없이
EPHEMERAL컬럼을 허용합니다. #35706 (Yakov Olkhovskiy). - 비동기 INSERT 크기를 나타내는 프로파일 이벤트 카운터
AsyncInsertBytes를 추가했습니다. #35644 (Alexey Milovidov). - JOIN 파이프라인 설명을 개선했습니다. #35612 (何李夫).
- 절대 hdfs 설정 경로를 결정합니다. #35572 (李扬).
- clickhouse-client의 붙여넣기 성능과 호환성을 개선했습니다. 이는 #35501 해결에 도움이 됩니다. #35541 (Amos Bird).
- 설정
async_socket_for_remote와use_hedged_requests중 하나가 활성화된 상태에서 매우 깊게 중첩된 데이터 타입을 파싱할 경우(적어도 디버그 빌드에서는) 분산 쿼리에서 스택 오버플로우가 발생할 수 있었습니다. #35509를 해결합니다. #35524 (Kruglov Pavel). system.parts_columns테이블에 서브컬럼의 크기 정보를 추가했습니다. #35488 (Anton Popov).- 쿼리 계획과 파이프라인의 스캔 노드에 명시적인 테이블 정보를 추가합니다. #35460 (何李夫).
- 서버가 낮은 번호의 포트(예: 443)에 바인드할 수 있도록 허용합니다. ClickHouse 설치 스크립트는 바이너리 파일에
cap_net_bind_service를 설정합니다. #35451 (Alexey Milovidov). - INSERT INTO table FROM INFILE 수정: 진행률 표시줄이 표시되지 않던 문제를 해결했습니다. #35429 (xiedeyantu).
clickhouse-diagnostics도구에--user,--password,--host,--port인수가 추가되었습니다. #35422 (李扬).- Postgres 엔진에서 uuid를 지원합니다. #35384를 해결했습니다. #35403 (Kseniia Sumarokova).
- 테이블 함수
s3cluster,HDFSCluster,hive의 경우StorageFactory::instance().getSourceAccessType(getStorageTypeName())로는 올바른AccessType을 가져올 수 없습니다. 이 PR로 이를 수정했습니다. #35365 (李扬). - clickhouse-client의
--testmode옵션을 제거하고, 이를 항상 활성화되도록 합니다. #35354 (Kseniia Sumarokova). - clickhouse-keeper에서
wchc작업(4글자 명령)을 허용하지 않습니다. #35320 (zhangyuli1). - 함수
getTypeSerializationStreams를 추가했습니다. 지정된 타입(컬럼에서 감지됨)에 대해 모든 직렬화 하위 스트림 경로가 포함된 배열을 반환합니다. 이 함수는 주로 개발자에게 유용합니다. #35290 (李扬). - 클러스터 구성에서
port를 지정하지 않으면 기본 server 포트가 사용됩니다. 이 변경으로 #34769가 해결되었습니다. #34772 (Alexey Milovidov). - Hive Engine의 orc/parquet 파일에서
minmax인덱스를 사용할 수 있도록 지원합니다. 관련 PR: https://github.com/ClickHouse/arrow/pull/10. #34631 (李扬). - 이제 시스템 로그 테이블의 ENGINE 선언에서 COMMENT를 지정할 수 있습니다. #33768를 해결했습니다. #34536 (Maksim Kita).
- 정렬 키 순서대로 읽고 limit가 지정된 경우
max_rows_to_read설정이 올바르게 지원되도록 개선했습니다. 이전에는 실제로는 더 적은 수의 행만 읽으면 되는 쿼리에서도Limit for rows or bytes to read exceeded예외가 발생할 수 있었습니다. #33230 (Anton Popov). - cgroups에서는 할당량과 기간만 고려하고, shares는 무시합니다(shares는 실제로 사용할 수 있는 코어 수를 제한하지 않기 때문입니다). #35815 (filimonov).
빌드/테스트/패키징 개선
- 기능 테스트에 다음 무작위화 설정 묶음을 추가했습니다. #35047 (Kruglov Pavel).
- 스트레스 테스트에 하위 호환성 검사를 추가했습니다. #25088을 종료합니다. #27928 (Kruglov Pavel).
- 패키지 빌드를
nfpm으로 마이그레이션했습니다 -release스크립트는 더 이상 사용하지 않고packages/build를 대신 사용합니다 - clickhouse/binary-builder 이미지에서 모든 항목을 빌드합니다 (정리: clickhouse/deb-builder) - cmake에 심볼 스트리핑을 추가했습니다 (todo: use bin_dir/clickhouse/$binary.debug) - DWARF 심볼 관련 문제를 수정했습니다 - Alpine APK 패키지를 추가했습니다 -alien의 이름을additional_pkgs로 변경했습니다. #33664 (Mikhail f. Shiryaev). - Coverity용 야간 스캔 및 업로드를 추가했습니다. #34895 (Boris Kuschel).
clickhouse-keeper전용 소형 패키지를 추가했습니다. #35308 (Mikhail f. Shiryaev).- podman으로 실행할 때 동일한 볼륨을 두 번 지정했다는 오류로 실패하던 문제를 수정했습니다. #35978 (Roman Nikonov).
- contrib/krb5 빌드 구성에 소규모 개선을 적용했습니다. #35832 (Anton Kozlov).
- 각 이미지의 빌드 작업을 식별할 수 있도록 레이블을 추가했습니다. #35583 (Mikhail f. Shiryaev).
- Python 코드에
blackFormatter를 적용하고 커밋별 check를 추가했습니다. #35466 (Mikhail f. Shiryaev). - alpine 이미지가 깔끔한 Dockerfile을 사용하도록 다시 구성했습니다. tests/ci에 ubuntu와 alpine 이미지를 모두 빌드하는 스크립트를 만들었습니다. clickhouse-keeper 이미지를 추가했습니다 (cc @nikitamikhaylov). PullRequestCI에 빌드 check를 추가했습니다. ReleaseCI에 job을 추가했습니다. MasterCI에 job을 추가해 머지된 각 PR마다
clickhouse/clickhouse-server:head및clickhouse/clickhouse-keeper:head이미지를 빌드하고 푸시합니다. #35211 (Mikhail f. Shiryaev). - CI의 스트레스 테스트 보고서를 수정하여, 이제 시작된 스트레스 테스트 정보가 포함된 runlog를 한 번만 업로드합니다. #35093 (Mikhail f. Shiryaev).
- LLVM 14의 libcxx / libcxxabi로 전환했습니다. #34906 (Raúl Marín).
- CVE-2018-7485를 완화하기 위해 unixodbc를 업데이트했습니다. 참고: ClickHouse는 ODBC용 자체 격리 계층을 구현하므로 이 CVE는 ClickHouse와 관련이 없습니다. #35943 (Mikhail f. Shiryaev).
버그 수정
- 유효하지 않은 IP 주소 값을 테이블에 기본값으로 삽입할 수 있도록 설정
input_format_ipv4_default_on_conversion_error,input_format_ipv6_default_on_conversion_error를 추가했습니다. #35726을 해결했습니다. #35733 (Maksim Kita). - Hive에서 데이터를 읽을 때 존재하지 않는 컬럼이 block에서 삭제되지 않도록 수정했습니다. #35393 (lgbo).
- materialized view 생성 시 유형 검사를 추가했습니다. 해결: #23684. #24896 (hexiaoting).
- INSERT INFILE 쿼리의 포맷 문제를 수정했습니다(누락된 따옴표). #35886 (Azat Khuzhin).
- 퍼징 과정에서 메모리 안전성 문제가 발견되어
session_log를 비활성화합니다. #35714을 참조하십시오. #35873 (Alexey Milovidov). - 컬럼별 TTL이 여러 번 처리되지 않도록 방지했습니다. #35820 (Azat Khuzhin).
- 삽입 쿼리에 여러 파티션과 관련된 데이터가 있는 경우
Object유형 컬럼으로의 삽입 문제를 수정했습니다. #35806 (Anton Popov). - -WithNames 포맷에서 표시되지 않는 컬럼의 인덱스 관련 버그를 수정했습니다. 이 버그로 인해 컬럼 수가 256개를 초과하면
INCORRECT_NUMBER_OF_COLUMNS오류가 발생했습니다. #35793를 해결합니다. #35803 (Kruglov Pavel). - #35751을 해결했습니다. #35799 (Nikolay Degterinsky).
- Snappy 포맷의 HDFS에서 읽기 관련 문제를 수정했습니다. #35771 (shuchaome).
- 사용자 정의 타입을 문자열로 변환하는 과정에서 세그멘테이션 폴트 또는 예상치 못한 오류 메시지가 발생할 수 있던 버그를 수정했습니다. #35752를 해결합니다. #35755 (Kruglov Pavel).
any/all(서브쿼리) 구현을 수정했습니다. #35489를 해결했습니다. #35727 (Kseniia Sumarokova).- clickhouse-local에서 비어 있지 않은 데이터베이스를 삭제할 때 발생하던 문제를 수정했습니다. #35692를 해결합니다. #35711 (Kseniia Sumarokova).
- 서버 재시작 후 서브쿼리가 있는 materialized view를 생성할 때 발생하는 버그를 수정했습니다. 서버를 재시작한 뒤 기반 테이블에 데이터를 삽입해도 materialized view가 업데이트되지 않았습니다. #35511을 해결했습니다. #35691 (Kruglov Pavel).
- 실험적
Object유형의 서브컬럼을 읽는 동안 발생할 수 있는Can't adjust last granule예외를 수정했습니다. #35687 (Anton Popov). - 기본적으로 JIT compilation이 적용된 빌드를 활성화했습니다. #35683 (Maksim Kita).
- 실험적
Object유형에서 서브컬럼이 손실될 수 있는 문제를 수정했습니다. #35682 (Anton Popov). - ASOF JOIN 키의 NULL 허용 여부 확인 문제를 수정하고, #35565를 해결했습니다. #35674 (Vladimir C).
- 프로젝션이 있는 파트의 파트 검사 로직을 수정했습니다. 프로젝션과 메인 파트의 타입이 서로 다를 때 오류가 발생했습니다. 이는 https://github.com/ClickHouse/ClickHouse/pull/33774 와 유사합니다. 이 버그는 @caoyang10이 수정했습니다. #35667 (Amos Bird).
- 많은 수의 인수가
format함수에 전달될 때 발생하던 서버 충돌을 수정했습니다. 충돌 재현 방법은 테스트 파일을 참조하십시오. #35651 (Amos Bird). - asynchronous inserts 사용 시 쿼터 동작을 수정했습니다. #35645 (Anton Popov).
- 별칭이 있는 위치 인수 문제를 수정했습니다. #35600을 해결합니다. #35620 (Kseniia Sumarokova).
- URL 엔진에서 스키마 추론 전에
remote_url_allow_hosts를 확인합니다. #35064를 해결합니다. #35619 (Kruglov Pavel). LowCardinality타입의 컬럼을 사용할 때 발생하던HashJoin문제를 수정했습니다. 이로써 #35548이 해결되었습니다. #35616 (Antonio Andelic).- 메모리에 수집된 데이터가 원본 테이블로 동기화되는 과정에서 예외가 발생할 경우 MaterializedPostgreSQL에서 발생할 수 있던 segfault를 수정했습니다. #35611을 해결합니다. #35614 (Kseniia Sumarokova).
database_atomic_wait_for_drop_and_detach_synchronously설정이, 이전에 분리된 테이블이 아직 사용 중인 경우ATTACH TABLE쿼리에서 잘못 동작하던 문제가 수정되었습니다. #35594 (tavplubix).- 명명된 컬렉션에서 사용하는 HTTP 헤더를 수정하고 compression_method를 추가했습니다. #35273를 해결했습니다. #35269를 해결했습니다. #35593 (Kseniia Sumarokova).
- S3 엔진에서 가상 컬럼을 가져올 수 있도록 수정했습니다. #35411을 해결합니다. #35586 (Kseniia Sumarokova).
caseWithExpression의 고정 반환 유형 추론을 수정했습니다. 이제 ELSE 브랜치의 유형도 올바르게 반영됩니다. #35576 (Antonio Andelic).- 39자를 초과하는 IPv6 주소 파싱을 수정했습니다. #34022를 해결합니다. #35539 (Maksim Kita).
- IN 절에서 IPv4, IPv6 주소로 캐스팅하는 문제를 수정했습니다. #35528을 해결합니다. #35534 (Maksim Kita).
- 인수 중 하나가 널 허용 상수인 경우 단락 평가 함수 실행 중 발생하던 충돌을 수정했습니다. Closes #35497. Closes #35496. #35502 (Maksim Kita).
- 상수 인수를 사용하는
throwIf함수의 비정상 종료 문제를 수정했습니다. #35500 (Maksim Kita). - 클라이언트 연결이 불안정해질 수 있는 Keeper 버그를 수정했습니다. 도입: #35031. #35498 (alesapin).
- 결과 컬럼 유형이 결과 데이터 타입과 달라
Logical error: 'Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<long>'.와 같은 논리 오류를 유발하던 함수if의 버그를 수정했습니다. #35367를 해결했습니다. #35476 (Kruglov Pavel). - S3를 MergeTree의 백엔드로 사용하거나 별도의 테이블 엔진/함수로 사용할 때 발생하던 과도한 로깅을 수정했습니다. #30559를 해결했습니다. #35434 (alesapin).
- 이제 zero-copy 복제(Experimental)로 실행된 머지는
Found parts with the same min block and with the same max block as the missing part _ on replica _. Hoping that it will eventually appear as a result of a merge.메시지로 로그를 과도하게 채우지 않습니다. #35430 (alesapin). - GroupingAggregatedTransform에서 빈 청크가 나타날 때 발생할 수 있는 예외를 무시합니다. #35417 (Nikita Taranov).
- Arrow/Parquet/ORC 포맷에서 쿼리에 필요하지 않은 컬럼 처리를 수정하여, 파일에 지원되지 않는 유형의 컬럼이 포함되어 있더라도 쿼리에서 해당 컬럼을 사용하지 않는 경우
Unsupported <format> type <type> of an input column <column_name>와 같은 오류가 발생할 수 있는 문제를 방지했습니다. #35406 (Kruglov Pavel). - 특정 예외 상황의 높은 동시성 환경에서 원격 파일 시스템용 로컬 캐시(실험적 기능) 문제를 수정했습니다. #35381 (Kseniia Sumarokova). 캐시에서 발생할 수 있는 교착 상태를 수정했습니다. #35378 (Kseniia Sumarokova).
WHERE에서 상수와 비교할 때의 파티션 프루닝을 수정했습니다. 컬럼과 상수의 타입이 서로 다를 경우 오버플로우가 발생할 수 있었습니다. 이로 인해 쿼리가 잘못된 빈 결과를 반환할 수 있었습니다. 이 변경으로 #35304가 수정되었습니다. #35334 (Amos Bird).- max_read_buffer_size가 작을 때 TSKV 포맷의 스키마 추론 문제를 수정했습니다. #35332 (Kruglov Pavel).
- 희소 컬럼이 활성화된 테이블에서 발생하던 뮤테이션 문제를 수정했습니다. #35284 (Anton Popov).
- 기본적으로 최종 part 쓰기를 지연하지 않도록 변경했습니다(
INSERT중 발생할 수 있는Memory limit exceeded를 해결하기 위해 S3 쓰기에는 기본값 1000의max_insert_delayed_streams_for_parallel_write를 추가하고, 그 외에는 이전과 같이 비활성화된 상태로 둡니다). #34780 (Azat Khuzhin).
ClickHouse 릴리스 v22.3-lts, 2022-03-17. 발표 자료, 동영상
하위 호환되지 않는 변경 사항
arrayCompact함수가 다른 고차 함수와 동일하게 동작하도록 변경했습니다. 이제 람다 함수의 결과가 아니라 원본 배열에 대해 컴팩션을 수행합니다.arrayCompact에서 단순하지 않은 람다 함수를 사용 중이라면arrayCompact인수를arrayMap으로 감싸 이전 동작을 복원할 수 있습니다. #34010 #18535 #14778을 해결합니다. #34795 (Alexandre Snarskii).- 함수
toDatetime의 오버플로우 발생 시 구현별 동작을 변경했습니다. 이제 순환(wraparound)하는 대신 datetime이 지원하는 가장 가까운 최소/최대 시점으로 포화됩니다. 일부 사용자가 의도치 않게 이전 동작에 의존하고 있을 수 있으므로 이 변경 사항을 “하위 호환되지 않음”으로 표시했습니다. #32898 (HaiBo Li). - 함수
cast(value, 'IPv4'),cast(value, 'IPv6')가toIPv4,toIPv6함수와 동일하게 동작하도록 변경했습니다. 또한 함수toIPv4,toIPv6에 잘못된 IP 주소가 전달될 때의 동작도 변경했습니다. 이제 잘못된 IP 주소가 이 함수들에 전달되면 예외가 발생하며, 이전에는 기본값을 반환했습니다.IPv4StringToNumOrDefault,IPv4StringToNumOrNull,IPv6StringToNumOrDefault,IPv6StringOrNulltoIPv4OrDefault,toIPv4OrNull,toIPv6OrDefault,toIPv6OrNull함수를 추가했습니다. 이전 로직이 잘못된 주소에 대해IPv4StringToNum,toIPv4,toIPv6가 기본값을 반환하는 동작에 의존했다면IPv4StringToNumOrDefault,toIPv4OrDefault,toIPv6OrDefault함수를 사용해야 합니다.cast_ipv4_ipv6_default_on_conversion_error설정도 추가했습니다. 이 설정이 활성화되면 IP 주소 변환 함수는 이전과 같이 동작합니다. #22825를 해결합니다. #5799를 해결합니다. #35156를 해결합니다. #35240 (Maksim Kita).
새로운 기능
- 원격 파일 시스템의 데이터를 로컬에 캐싱하는 기능을 지원합니다. 이 기능은
s3디스크에서 활성화할 수 있습니다. #28961을 해결했습니다. #33717 (Kseniia Sumarokova). 그동안s3파일 시스템에서 테스트 스위트를 활성화했고 알려진 문제도 더 이상 없으므로, 이제 프로덕션 환경에서 사용할 준비가 되어 가고 있습니다. - 새로운 테이블 함수
hive를 추가했습니다. 이 함수는hive('<hive metastore url>', '<hive database>', '<hive table name>', '<columns definition>', '<partition columns>')형식으로 사용할 수 있습니다. 예를 들어SELECT * FROM hive('thrift://hivetest:9083', 'test', 'demo', 'id Nullable(String), score Nullable(Int32), day Nullable(String)', 'day')와 같습니다. #34946 (lgbo). - SSL을 통해 연결된 사용자를 X.509 인증서로 인증하는 기능을 지원합니다. #31484 (eungenue).
- 테이블 함수
file/hdfs/s3/url에 삽입할 때 스키마 추론을 지원합니다. #34732 (Kruglov Pavel). - 이제
path제한 없이, 또는like표현식을 사용하지 않고도system.zookeeper테이블을 읽을 수 있습니다. 이러한 읽기는 Zookeeper에 상당한 부하를 유발할 수 있으므로, 이 기능을 사용하려면allow_unrestricted_reads_from_keeper설정을 활성화해야 합니다. #34609 (Sergei Trifonov). - clickhouse-local에 CPU 및 메모리 메트릭을 표시합니다. #34545를 해결했습니다. #34605 (李扬).
- 배열에 대해
startsWith및endsWith함수를 구현했습니다. #33982를 해결했습니다. #34368 (usurai). - 맵 데이터 타입을 위한 세 가지 함수를 추가했습니다. 1.
mapReplace(map1, map2)- map1의 키 값을 map2의 해당 키 값으로 대체하며, map1에 없는 map2의 키는 추가합니다. 2.mapFilter3.mapMap.mapFilter와mapMap은 고차 함수이며 두 개의 인수를 받습니다. 첫 번째 인수는 k, v 쌍을 인수로 받는 람다 함수이고, 두 번째 인수는 Map 타입의 컬럼입니다. #33698 (hexiaoting). CLICKHOUSE_USER및CLICKHOUSE_PASSWORD환경 변수에서 clickhouse-client의 기본 사용자 이름과 비밀번호를 가져올 수 있도록 허용합니다. #34538를 해결했습니다. #34947 (DR).
실험적 기능
- 반정형 데이터(현재는 JSON만 지원)를 저장할 수 있는 새로운 데이터 타입
Object(<schema_format>)이 추가되었습니다. 데이터는 이 타입에 문자열로 기록됩니다. 이후 반정형 데이터의 포맷에 따라 모든 경로를 추출한 뒤, 각 경로의 모든 값을 저장할 수 있는 최적의 타입을 가진 별도 컬럼으로 기록합니다. 이 컬럼들은 원본 데이터의 경로와 일치하는 이름으로 쿼리할 수 있습니다. 예:data.key1.key2또는 CAST 연산자를 사용한data.key1.key2::Int64. database_replicated_allow_only_replicated_engine설정이 추가되었습니다. 이 설정을 활성화하면Replicated데이터베이스에서는Replicated테이블 또는 상태 비저장 엔진을 사용하는 테이블만 생성할 수 있습니다. #35214 (Nikolai Kochetov).Replicated데이터베이스는 여전히 실험적 기능이라는 점에 유의하십시오.
성능 개선
- 정렬 최적화를 통해
MergeTree테이블에 대한 삽입 성능을 개선했습니다. 실제 벤치마크에서 최대 2배 향상이 관찰되었습니다. #34750 (Maksim Kita). - URL 및 S3에서 Parquet, ORC, Arrow 파일을 읽을 때 컬럼 프루닝을 지원합니다. #34163을 해결했습니다. #34849 (Kseniia Sumarokova).
- Hive에서 Parquet, ORC, Arrow 파일을 읽을 때 컬럼 프루닝을 지원합니다. #34954 (lgbo).
- 한 성능 최적화 전문가가 여러 최적화를 추가했습니다. 큰
IN절이 포함된 쿼리의 처리 성능을 개선했습니다. 소스가ClickHouse인direct딕셔너리의 성능을 개선했습니다.detectCharset,detectLanguageUnknown함수의 성능을 개선했습니다. #34888 (Maksim Kita). - 더 많은 배칭을 사용해
any집계 함수의 성능을 개선했습니다. #34760 (Raúl Marín). clickhouse-keeper의 성능을 위한 여러 개선 사항: 잠금을 줄였습니다 #35010 (zhanglistar), 전체 복사 대신 snapshot을 스트리밍 방식으로 읽고 쓰도록 해 메모리 사용량을 줄였습니다 #34584 (zhanglistar), RAFT 구현에서 로그 저장소의 compaction을 최적화했습니다 #34534 (zhanglistar), 내부 데이터 구조에 버전 관리를 도입했습니다 #34486 (zhanglistar).
개선 사항
- 테이블 함수에 비동기 삽입을 허용합니다. #34864를 수정했습니다. #34866 (Anton Popov).
- 함수
dictGetHierarchy,dictIsIn,dictGetChildren,dictGetDescendants의 key 인수에 암시적 형 변환을 적용했습니다. #34970을 해결했습니다. #35027 (Maksim Kita). EXPLAIN AST쿼리는 AST를 Graphviz 포맷의 그래프 형태로 출력할 수 있습니다:EXPLAIN AST graph = 1 SELECT * FROM system.parts. #35173 (李扬).- 대용량 파일을
s3테이블 함수 또는 테이블 엔진으로 쓸 때 AWS SDK의 버그로 인해 파일의 콘텐츠 유형이 실수로application/xml로 설정되었습니다. 이로써 #33964가 해결되었습니다. #34433 (Alexey Milovidov). - 제한적 행 정책(ROW POLICY)을 약간 변경해, 단순한 경우에는 허용적 정책보다 더 쉽게 사용할 수 있는 대안이 되도록 했습니다. 특정 테이블에 제한적 정책만 있고 허용적 정책이 없는 경우에도 일부 행을 볼 수 있습니다. 또한
SHOW CREATE ROW POLICY는 ROW POLICY 정의에AS permissive또는AS restrictive를 항상 표시합니다. #34596 (Vitaly Baranov). - File/S3/HDFS/URL 엔진에서 글롭 패턴의 스키마 추론을 개선했습니다. 오류가 발생하면 스키마 추론에 다음 경로를 사용해 보도록 했습니다. #34465 (Kruglov Pavel).
- Play UI가 이제 OS에서 선호하는 라이트/다크 테마를 올바르게 감지합니다. #35068 (peledni).
date_time_input_format = 'best_effort_us'가 추가되었습니다. #34799를 해결했습니다. #34982 (WenYao).- 서버 구성에
allow_plaintext_password및allow_no_password라는 새로운 설정이 추가되었습니다. 이 설정은 일부 환경에서 잠재적으로 안전하지 않을 수 있는 인증 유형을 활성화하거나 비활성화합니다. 기본적으로는 허용됩니다. #34738 (Heena Bansal). Arrow포맷에서DateTime64데이터 타입을 지원하며, #8280 및 #28574를 해결했습니다. #34561 (李扬).- 설정 업데이트 시
remote_url_allow_hosts(외부로 나가는 연결 필터링)를 다시 로드합니다. #35294 (Nikolai Kochetov). clickhouse-local에서--testmode매개변수를 지원합니다. 이 매개변수를 사용하면 기능 테스트에서 사용하는 테스트 힌트를 해석할 수 있습니다. #35264 (Kseniia Sumarokova).- 쿼리 로그에
distributed_depth를 추가했습니다. 이는is_initial_query를 더 세분화한 버전입니다 #35207 (李扬). MySQL및PostgreSQL테이블 함수에서remote_url_allow_hosts를 준수하도록 했습니다. #35191 (Heena Bansal).system.part_log에disk_name필드가 추가되었습니다. #35178 (Artyom Yurkov).- 원격 URL에 쿼리할 때 재시도할 수 없는 오류는 재시도하지 않습니다. #35161을 해결합니다. #35172 (Kseniia Sumarokova).
- 분산 INSERT SELECT 쿼리(설정
parallel_distributed_insert_select) 및 테이블 함수view()를 지원합니다. #35132 (Azat Khuzhin). AggregateFunction이 포함된Buffer에INSERT할 때 메모리 추적의 정확도가 향상되었습니다. #35072 (Azat Khuzhin).- Linux 커널에 버그가 있는 경우 쿼리 프로파일러에서 0으로 나누기가 발생하지 않도록 합니다. #34787을 해결합니다. #35032 (Alexey Milovidov).
- Keeper 구성에 대한 기본 유효성 검사를 더 추가했습니다. 이제 localhost와 로컬이 아닌 서버를 혼용할 수 없으며, internal raft port와 keeper client port의 값이 같은 경우도 검사합니다. #35004 (alesapin).
- 현재 사용자가 시스템 테이블(system tables)의 설정을 변경하면 로그가 대량으로 생성되고, ClickHouse가 매분 테이블 이름을 바꾸는 문제가 있었습니다. 이 변경으로 #34929가 수정되었습니다. #34949 (Nikita Mikhaylov).
- Hive 메타스토어 클라이언트에 연결 풀을 적용했습니다. #34940 (lgbo).
- 새 테이블의 테이블 엔진이 이를 지원하지 않는 경우(즉, 엔진이
MergeTree계열이 아닌 경우)CREATE TABLE AS에서 컬럼별TTL을 무시합니다. #34938 (Azat Khuzhin). ngrambf_v1/tokenbf_v1인덱스에서LowCardinality문자열 타입을 사용할 수 있도록 허용합니다. #21865를 해결합니다. #34911 (Lars Hiller Eidnes).- 파일이 없으면 빈 sqlite DB를 열 수 있도록 허용합니다. #33367을 해결합니다. #34907 (Kseniia Sumarokova).
- FreeBSD용 메모리 통계를 구현했습니다. 이는
max_server_memory_usage가 올바르게 작동하는 데 필요합니다. #34902 (Alexandre Snarskii). - 이전 버전에서는 clickhouse-client의 진행률 표시줄이 이유 없이 50% 부근에서 갑자기 앞으로 뛰는 문제가 있었습니다. 이로써 #34324가 해결되었습니다. #34801 (Alexey Milovidov).
- 이제
columnX가ALIAS컬럼인 경우MergeTree테이블 엔진에서ALTER TABLE DROP COLUMN columnX쿼리가 즉시 수행됩니다. #34660을 수정했습니다. #34786 (alesapin). - 사용자가 데이터 스키핑 인덱스 이름을 잘못 입력한 경우 힌트를 표시합니다. #29698을 해결합니다. #34764 (flynn).
parallel_distributed_insert_select에서remote()/cluster()테이블 함수를 지원합니다. #34728 (Azat Khuzhin).- 구성 파일의 설정이 비어 있는 경우
--log-file/--errorlog-file명령줄 옵션으로 설정된 로깅이 재설정되지 않도록 했습니다. #34718 (Amos Bird). - 테이블 생성 시에만 스키마를 한 번 추출하고, 각 server 시작 시 스키마 추출을 위해 로컬 파일이나 외부 source를 읽지 않도록 했습니다. #34684 (Kruglov Pavel).
- 실행형 UDF에서 인수 이름을 지정할 수 있도록 했습니다. 이는
Native,JSONEachRow처럼 인수 이름이 직렬화의 일부인 포맷에 필요합니다. #34604를 해결합니다. #34653 (Maksim Kita). MaterializedMySQL(실험적 기능)이 이제materialized_mysql_tables_list(MaterializedMySQL 데이터베이스 엔진이 복제할 MySQL 데이터베이스 테이블의 쉼표로 구분된 목록, 기본값은 빈 목록이며 이 경우 모든 테이블이 복제됨)을 지원합니다. #32977에서 언급되었습니다. #34487 (zzsmdfj).- 분산 테이블에서 INSERT 작업에 대한 OpenTelemetry 스팬 로그를 개선했습니다. #34480 (Frank Chen).
- ClickHouse Keeper에서 서버 간 znode
ctime및mtime가 일관되도록 했습니다. #33441 (小路).
빌드/테스트/패키징 개선
- 패키지 리포지토리를 JFrog Artifactory로 마이그레이션했습니다(Mikhail f. Shiryaev).
- 기능 테스트에서 일부 설정을 무작위화해 더 다양한 설정 조합을 테스트할 수 있도록 했습니다. 이는 테스트 커버리지를 높이기 위한 또 하나의 퍼징 기법입니다. 이로써 #32268이 해결되었습니다. #34092 (Kruglov Pavel).
- CI에서 PVS-Studio를 제거했습니다. #34680 (Mikhail f. Shiryaev).
- CMake로 스트립된 바이너리를 빌드할 수 있는 기능을 추가했습니다. 이전 버전에서는 dh-tools가 이 작업을 수행했습니다. #35196 (alesapin).
- 더 작은 “fat-free”
clickhouse-keeper빌드입니다. #35031 (alesapin). - https://github.com/ClickHouse/ClickHouse/pull/34685 와 같은 PR에서는 @robot-clickhouse를 author 및 committer로 사용합니다. #34793 (Mikhail f. Shiryaev).
- 내부 스택 심볼라이저가 DWARF 버전 5를 해석할 수 없기 때문에 디버그 정보의 DWARF 버전을 최대 4로 제한했습니다. 이는 clang-15로 ClickHouse를 컴파일할 때 유용합니다. #34777 (Alexey Milovidov).
- 불필요하게 복잡해지는 것을 막기 위해
clickhouse-testdebian 패키지를 제거했습니다. CI는 리포지토리의 테스트를 사용하며, deb 패키지를 통한 독립 실행형 테스트는 더 이상 지원되지 않습니다. #34606 (Ilya Yatsishin).
버그 수정(공식 안정 또는 프리스테이블 릴리스에서 사용자에게 드러나는 오작동)
- HDFS 통합 수정: 내부 버퍼 크기가 너무 작으면
HadoopSnappyDecoder의 NEED_MORE_INPUT이 하나의 압축 블록에 대해 여러 번(>=3) 실행됩니다. 이로 인해 입력 데이터가HadoopSnappyDecoder::buffer의 잘못된 위치에 복사됩니다. #35116 (lgbo). - ATTACH GRANT SQL 문에서 폐기된 권한 부여를 무시하도록 수정했습니다. 이 PR은 #34815를 수정합니다. #34855 (Vitaly Baranov).
- 이름이 지정된 컬렉션을 사용해 데이터베이스를 생성한 경우,
create table쿼리를 가져오는 과정에서 Postgres 데이터베이스에서 발생하던 세그폴트를 수정했습니다. #35312을 해결합니다. #35313 (Kseniia Sumarokova). - 부분 병합 조인에서 중복 행이 발생하는 버그를 수정하고 #31009를 해결했습니다. #35311 (Vladimir C).
- 작은
max_read_buffer_size설정값으로 bzip2 압축을 사용할 때 발생할 수 있는Assertion 'position() != working_buffer.end()' failed문제를 수정했습니다. 이 버그는 https://github.com/ClickHouse/ClickHouse/pull/35047 에서 발견되었습니다. #35300 (Kruglov Pavel). 작은 max_read_buffer_size 설정값으로 lz4 압축을 사용할 때 발생할 수 있는 문제를 수정했습니다. #35296 (Kruglov Pavel). 작은max_read_buffer_size설정값으로 lzma 압축을 사용할 때 발생할 수 있는 문제를 수정했습니다. #35295 (Kruglov Pavel). 작은max_read_buffer_size설정값으로brotli압축을 사용할 때 발생할 수 있는 문제를 수정했습니다. 이 버그는 https://github.com/ClickHouse/ClickHouse/pull/35047 에서 발견되었습니다. #35281 (Kruglov Pavel). JSONEachRow스키마 추론에서 발생할 수 있는 segfault 문제를 수정했습니다. #35291 (Kruglov Pavel).- 테이블에서 희소 컬럼이 활성화된 경우의
CHECK TABLE쿼리를 수정했습니다. #35274 (Anton Popov). - 원격 VFS 읽기 중 예외가 발생해도
std::terminate가 호출되지 않도록 합니다. #35257 (Azat Khuzhin). - config에서 읽기 포트를 가져오는 문제를 수정하고, #34776을 해결했습니다. #35193 (Vladimir C).
HAVING이 빈 결과를 반환할 때WITH TOTALS가 포함된 쿼리에서 발생하던 오류를 수정했습니다. 이 수정으로 #33711이 해결됩니다. #35186 (Amos Bird).replaceRegexpAll의 예외적인 케이스를 수정하고, #35117을 해결했습니다. #35182 (Vladimir C).- 스키마 추론은
INSERT INTO FUNCTION s3(...) FROM ...에서 제대로 작동하지 않아, select 쿼리에서가 아니라 s3 파일에서 스키마를 읽으려고 했습니다. #35176 (Kruglov Pavel). - MaterializedPostgreSQL(실험적 기능)의 partition by 등에 대한
table overrides를 수정했습니다. #35048을 종료합니다. #35162 (Kseniia Sumarokova). - 수동으로 제거(DETACH TABLE)한 후 복제에 새 테이블을 추가할 때 발생하던 MaterializedPostgreSQL(실험적 기능) 문제를 수정했습니다. #33800을 종료합니다. #34922를 종료합니다. #34315를 종료합니다. #35158 (Kseniia Sumarokova).
- 비단조 함수가 IN 연산자와 함께 사용될 때 발생하던 파티션 프루닝 오류를 수정했습니다. 이 변경으로 #35136이 해결됩니다. #35146 (Amos Bird).
- YAML 구성을 XML로 변환할 때 약간 부정확하던 번역을 수정했습니다. #35135 (Miel Donkers).
- 부호 있는 컬럼과 음수 값에 대한
optimize_skip_unused_shards_rewrite_in문제를 수정했습니다. #35134 (Azat Khuzhin). update_lag외부 딕셔너리 구성 옵션은Unexpected key `update_lag` in dictionary source configuration오류 메시지가 표시되며 사용할 수 없었습니다. #35089 (Jason Chu).- server 종료 중 발생할 수 있는 데드락을 방지합니다. #35081 (Azat Khuzhin).
optimize_functions_to_subcolumns설정이 활성화된 경우, 함수가 서브컬럼으로 최적화된 뒤 누락되던 alias를 수정했습니다. #33798를 해결했습니다. #35079 (qieqieplus).- 테이블 함수에 대한 비동기 삽입이 있는 경우
system.asynchronous_inserts테이블에서 읽기 동작을 수정했습니다. #35050 (Anton Popov). - 발생할 수 있는 예외
Reading for MergeTree family tables must be done with last position boundary를 수정했습니다(원격 VFS 작업과 관련). #34979를 해결합니다. #35001 (Kseniia Sumarokova). - 윈도우 프레임에서 -State 유형의 집계 함수를 사용할 때 발생하는 예상치 못한 결과를 수정했습니다. #34999 (metahys).
- FileLog(실험적 기능)에서 발생할 수 있는 segfault를 수정했습니다. #30749를 해결합니다. #34996 (Kseniia Sumarokova).
- 드물게 발생할 수 있는
Cannot push block to port which already has data오류를 수정했습니다. #34993 (Nikolai Kochetov). - CSV에서 따옴표로 감싸지 않은 날짜에 대한 잘못된 스키마 추론을 수정했습니다. #34768을 해결합니다. #34961 (Kruglov Pavel).
- Hive와의 통합: Hive 쿼리의
where절에서in을 사용할 때 발생하는 예기치 않은 결과를 수정했습니다. #34945 (lgbo). - 삭제할 changelog 파일을 찾는 동안 ClickHouse Keeper에서 불필요한 폴링이 발생하지 않도록 했습니다. #34931 (Azat Khuzhin).
- PostgreSQL의 DateTime64 변환 문제를 수정했습니다. #33364를 해결합니다. #34910 (Kseniia Sumarokova).
- s3 기반 VFS를 사용하는 MergeTree 테이블에
INSERT하는 중 발생할 수 있는 “Part directory doesn’t exist” 문제를 수정했습니다. #34876 (Azat Khuzhin). - CREATE USER와 같은 DDL을 교차 복제된 클러스터에서 실행할 수 있도록 지원합니다. #34860 (Jianmei Zhang).
WindowView에서 여러 컬럼 group by 시 발생하던 버그를 수정했습니다(실험적 기능). #34859 (vxider).- 쿼리에 const 컬럼이 포함된 경우 S2 함수에서 발생할 수 있는 오류를 수정했습니다. #34745 (Bharat Nallan).
- 쿼리 실패를 일으키는 const 컬럼이 포함된 H3 함수 관련 버그를 수정했습니다. #34743 (Bharat Nallan).
fsync_part_directory가 활성화된 상태에서 수직 병합 중 발생하던No such file or directory문제를 수정했습니다. #34739 (Azat Khuzhin).ON CLUSTER와 함께 사용할 때 시스템 쿼리RELOAD MODEL,RELOAD FUNCTION,RESTART DISK의 직렬화(serialization)/출력 처리를 수정했습니다. #34514을 해결했습니다. #34696 (Maksim Kita).enable_global_with_statement와 함께allow_experimental_projection_optimization의 문제를 수정했습니다(이전에는WITH절에 여러 표현식이 있으면Stack size too large오류가 발생할 수 있었고, 스칼라 서브쿼리도 반복해서 재실행했지만 이제는 더 효율적으로 최적화됩니다). #34650 (Azat Khuzhin).- 다른 레플리카가 이미
ReplatedMergeTree엔진의 트랜잭션 로그를 업데이트한 경우, mutate할 part를 선택하는 작업을 중지합니다. #34633 (Jianmei Zhang). - part 이동 기능 사용 시 단순 count 쿼리 결과가 잘못되는 문제를 수정했습니다 #34089. #34385 (nvartolomei).
- 분산 서브쿼리에서
max_query_size제한의 비일관성을 수정했습니다. #34078 (Chao Ma).
ClickHouse 릴리스 v22.2, 2022-02-17. 발표 자료, 동영상
업그레이드 참고 사항
- FINAL이 포함된 쿼리에 데이터 스키핑 인덱스를 적용하면 잘못된 결과가 나올 수 있습니다. 이번 릴리스에서는 FINAL이 포함된 쿼리에 대해 기본적으로 데이터 스키핑 인덱스를 사용하지 않도록 변경했습니다(새로운 설정
use_skip_indexes_if_final이 도입되었으며, 기본값은 비활성화입니다). #34243 (Azat Khuzhin).
새로운 기능
- 프로젝션은 프로덕션 환경에서 사용할 수 있습니다.
allow_experimental_projection_optimization은 기본값으로 설정되며, 이 설정은 폐기 예정입니다. #34456 (Nikolai Kochetov). File/S3/HDFS엔진에서 삽입 시 새 파일을 생성하는 옵션입니다.HDFS에서는 파일 덮어쓰기를 허용합니다. 기본적으로S3에서 파일을 덮어쓰려고 시도하면 예외를 발생시킵니다. 접미사가 있는 포맷(즉,Parquet,ORC처럼 추가를 지원하지 않는 포맷)에서는 파일에 데이터를 추가하려고 시도하면 예외를 발생시킵니다. Closes #31640 Closes #31622 Closes #23862 Closes #15022 Closes #16674. #33302 (Kruglov Pavel).- 사용자가
MergeTree/ReplicatedMergeTree에서 자체 중복 제거 기준을 지정할 수 있는 설정을 추가했습니다. 이 값이 제공되면 block ID를 생성할 때 데이터 다이제스트 대신 이 값을 사용합니다. 따라서 예를 들어 각 INSERT 문에서 이 설정에 고유한 값을 지정하면, 동일하게 삽입된 데이터가 중복 제거되는 것을 방지할 수 있습니다. 이로써 #7461이 해결되었습니다. #32304 (Igor Nikonov). INSERTSQL 문에DEFAULT키워드 지원이 추가되었습니다. #6331이 해결되었습니다. #33141 (Andrii Buriachevskyi).CREATE TABLE쿼리에EPHEMERAL컬럼 지정자가 추가되었습니다. 이 변경으로 #9436이 해결되었습니다. #34424 (yakov-olkhovskiy).TTL expr TO [DISK|VOLUME] [IF EXISTS] 'xxx'기능에IF EXISTS절 지원이 추가되었습니다. 파트는 레플리카에 해당 디스크 또는 볼륨이 존재할 때만 이동되므로,MOVE TTL규칙은 기존 스토리지 정책에 따라 레플리카별로 다르게 동작할 수 있습니다. #34455를 해결했습니다. #34504 (Anton Popov).- 기본 테이블 엔진을 설정하고 ENGINE을 지정하지 않아도 테이블을 생성할 수 있게 했습니다. #34187 (Ilya Yatsishin).
- 테이블 함수
format(format_name, data)가 추가되었습니다. #34125 (Kruglov Pavel). - 파일 이름을 기준으로
clickhouse-local의 포맷을 감지하며,stdin으로 전달된 경우에도 이를 지원합니다. #33829 (Kruglov Pavel). values테이블 함수에 스키마 추론을 추가했습니다. #33811을 해결합니다. #34017 (Kruglov Pavel).- 구성 다시 로드 시 server TLS 인증서를 동적으로 다시 로드합니다. #15764를 해결합니다. #15765 (johnskopis). #31257 (Filatenkov Artur).
- 이제 ReplicatedMergeTree는 일부 디스크가 손상되어도 데이터를 복구할 수 있습니다. #13544 (Amos Bird).
- clickhouse-client의 내결함성 연결:
clickhouse-client ... --host host1 --host host2 --port port2 --host host3 --port port --host host4. #34490 (Kruglov Pavel). #33824 (Filippov Denis). - MySQL와의 호환성을 위해
DEGREES및RADIANS함수를 추가했습니다. #33769 (Bharat Nallan). h3ToCenterChild함수가 추가되었습니다. #33313 (Bharat Nallan). 새로운 h3 기타 함수가 추가되었습니다:edgeLengthKm,exactEdgeLengthKm,exactEdgeLengthM,exactEdgeLengthRads,numHexagons. #33621 (Bharat Nallan).- String/FixedString에서 비트 부분 수열을 추출하는
bitSlice함수를 추가했습니다. #33360 (RogerYK). meanZTest집계 함수가 구현되었습니다. #33354 (achimbab).- T-tests 집계 함수에 신뢰 구간 지원을 추가합니다. #33260 (achimbab).
- 함수
addressToLineWithInlines를 추가했습니다. #26211을 해결했습니다. #33467 (SuperDJY). #!및#가 한 줄 주석의 시작으로 인식되도록 추가했습니다. #34138을 해결합니다. #34230 (Aaron Katz).
실험적 기능
- 텍스트 분류 함수: 언어 및 문자 집합 감지를 지원합니다. #23271을 참조하십시오. #33314 (Nikolay Degterinsky).
MemoryTracker에 메모리 오버커밋을 추가했습니다. 소프트 메모리 제한을 나타내는 메모리 제한용guaranteed설정도 추가했습니다. 하드 메모리 제한에 도달하면MemoryTracker는 가장 많이 오버커밋된 쿼리를 취소하려고 시도합니다. 새로운 설정memory_usage_overcommit_max_wait_microseconds는 다른 쿼리가 중지될 때까지 쿼리가 얼마나 오래 기다릴 수 있는지를 지정합니다. #28375를 해결합니다. #31182 (Dmitry Novik).- WindowView에서 스트림과 테이블 간 join을 활성화합니다. #33729 (vxider).
MaterializedMySQL에서SET,YEAR,TIME,GEOMETRY데이터 타입을 지원합니다(실험적 기능). #18091, #21536, #26361을 수정했습니다. #33429 (zzsmdfj).- projection이 기본적으로 활성화되어 있을 때 발생하는 다양한 문제를 수정했습니다. 각 문제는 별도의 커밋에 설명되어 있습니다. 이는 #33678 관련입니다. 이 변경으로 #34273도 수정됩니다. #34305 (Amos Bird).
성능 개선
- 정렬 키(sorting key)의 접두사가 이미 정렬된 경우
optimize_read_in_order를 지원합니다. 예를 들어 테이블의 정렬 키가ORDER BY (a, b)이고 쿼리에WHERE a = const ORDER BY b절이 있으면, 이제 전체 정렬을 수행하는 대신 정렬 키 순서대로 읽기가 적용됩니다. #32748 (Anton Popov). - 테이블 함수
URL,S3,File,HDFS로의 파티션별 삽입 성능을 개선했습니다. #34348을 해결했습니다. #34510 (Maksim Kita). - clickhouse-keeper의 성능이 전반적으로 개선되었습니다. #34484 #34587 (zhanglistar).
FlatDictionary가 딕셔너리 데이터 로드 성능을 향상시킵니다. #33871 (Maksim Kita).mapPopulateSeries함수 성능을 개선했습니다. #33944를 해결했습니다. #34318 (Maksim Kita).- 파일 계열 테이블 엔진의
_file및_path가상 컬럼(virtual columns)이LowCardinality가 되어 여러 파일에 대한 쿼리가 더 빨라집니다. #34300을 해결했습니다. #34317 (flynn). - 데이터 파트 로딩 속도를 향상했습니다. 이전에는 병렬 처리되지 않아 설정
part_loading_threads가 효과를 내지 못했습니다. #4699를 참조하십시오. #34310 (alexey-milovidov). LineAsString포맷의 성능이 개선되었습니다. 이 변경으로 #34303가 해결되었습니다. #34306 (alexey-milovidov).quantilesExact{Low,High}가sort대신nth_element를 사용하도록 최적화했습니다. #34287 (Danila Kutenin).Regexp포맷의 성능이 소폭 향상되었습니다. #34202 (alexey-milovidov).- 스칼라 서브쿼리 분석이 약간 개선되었습니다. #34128 (Federico Rodriguez).
- ORDER BY tuple도 ORDER BY 컬럼과 거의 같은 속도로 처리되도록 개선했습니다. 다중 컬럼 ORDER BY를 위한 특별한 최적화가 있습니다: https://github.com/ClickHouse/ClickHouse/pull/10831 . 이 최적화를 tuple 컬럼에도 적용하면 유리합니다. #34060 (Amos Bird).
- Materialized View 실행에 스칼라 서브쿼리 캐시를 재정비하여 다시 도입했습니다. #33958 (Raúl Marín).
- 메모리 비교를 가속하기 위해
memcmpSmall함수에 x86-64 AVX-512 지원을 추가하여ORDER BY성능을 소폭 개선했습니다. 직접 ClickHouse를 컴파일한 경우에만 사용할 수 있습니다. #33706 (hanqf-git). - 키에 인터벌이 많은 경우
range_hashed딕셔너리의 성능을 개선했습니다. #23821을 수정했습니다. #33516 (Maksim Kita). - S3에 삽입 및 머지를 수행할 때는, 가능하면 파일을 병렬로 씁니다 (TODO: 병합되었는지 확인). #33291 (Nikolai Kochetov).
- NuRaft 라이브러리에서
clickhouse-keeper성능을 개선하고 여러 메모리 누수를 해결했습니다. #33329 (alesapin).
개선 사항
- 인라인 데이터가 포함된 쿼리에서
clickhouse-client의 비동기 삽입(asynchronous inserts)을 지원합니다. #34267 (Anton Popov). dictGet,dictHas함수는 키 인수가 딕셔너리 키 구조와 다른 경우, 해당 인수를 딕셔너리 키 구조로 암묵적으로 형변환합니다. #33672 (Maksim Kita).range_hashed딕셔너리 개선 사항입니다. 여러 속성이 있는 경우 로드 시간 성능을 개선했습니다. 속성 없이도 딕셔너리를 생성할 수 있도록 했습니다. 인터벌start및end가Nullable타입인 경우 전략을 지정할 수 있는 옵션을 추가했으며,convert_null_range_bound_to_open의 기본값은true입니다. #29791을 해결했습니다.Float,Decimal,DateTime64,Int128,Int256,UInt128,UInt256를 범위 타입으로 지정할 수 있도록 했습니다.RangeHashedDictionary에Int64타입 범위를 초과하는 범위 값 지원을 추가했습니다. #28322를 해결했습니다. 범위 조회 유형min,max를 지정할 수 있는 옵션range_lookup_strategy를 추가했으며, 기본값은min입니다. #21647를 해결했습니다. 할당된 바이트 계산을 수정했습니다.ComplexKeyHashedDictionary의 경우system.dictionaries의 타입 이름을 수정했습니다. #33927 (Maksim Kita).- 이제
flat,hashed,hashed_array사전은 빈 속성으로도 생성할 수 있으며, 키를 읽고dictHas를 사용하는 기능도 지원합니다. #33820을 수정했습니다. #33918 (Maksim Kita). - Dictionaries에
DateTime64데이터 타입 지원이 추가되었습니다. #33914 (Maksim Kita). s3(url, access_key_id, secret_access_key)를 사용할 수 있습니다(데이터 포맷과 테이블 구조는 자동 감지되며, 자격 증명은 명시적으로 지정). #34503 (Kruglov Pavel).- #34362에서 제안된 대로, HTTP protocol에서와 같이 출력 형식을 클라이언트에 다시 전송하는 기능이 추가되었습니다. #34362가 해결되었습니다. #34499 (Vitaly Baranov).
- INSERT SELECT 쿼리의 경우 ProfileEvents 통계를 전송하여,
clickhouse-client에서 이 유형의 쿼리에 대한 쿼리 메트릭을 표시할 수 있도록 했습니다. #34498 (Dmitry Novik). - JSONEachRow 포맷에서
.jsonl확장자를 인식하도록 개선했습니다. #34496 (Kruglov Pavel). - clickhouse-local의 스키마 추론을 개선했습니다. 이제
clickhouse-local -q "select * from table" < data.format처럼 간단히 작성할 수 있습니다. #34495 (Kruglov Pavel). - 이제 CREATE/ALTER/DROP ROW POLICY 권한을 테이블이나
database.*, 또는 전역*.*에 대해서도 부여할 수 있습니다. #34489 (Vitaly Baranov). - 임의 크기의 대용량 파일을
s3로 내보낼 수 있도록 했습니다. 두 개의 새로운 설정s3_upload_part_size_multiply_factor및s3_upload_part_size_multiply_parts_count_threshold를 추가했습니다. 이제 단일 쿼리에서 S3로 업로드되는 파트 수가s3_upload_part_size_multiply_parts_count_threshold에 도달할 때마다s3_min_upload_part_size에s3_upload_part_size_multiply_factor를 곱합니다. #34244를 수정했습니다. #34422 (alesapin). - URL 스토리지 / 테이블 함수를 사용할 때 글롭 패턴의 찾을 수 없는(404) URL을 건너뛸 수 있도록 합니다. 또한 #34359를 해결합니다. #34392 (Kseniia Sumarokova).
clickhouse-local의 기본 입력 및 출력 형식이며, —input-format 및 —output-format으로 재정의할 수 있습니다. #30631을 종료했습니다. #34352 (李扬).clickhouse-format에max_query_size,max_parser_depth옵션을 추가했습니다. 이 변경으로 #30528이 해결됩니다. #34349 (李扬).- 클라이언트 시작 전 사전 입력을 더 잘 처리하도록 개선했습니다. 이는 #34308를 위한 변경입니다. #34336 (Amos Bird).
- PostgreSQL과의 호환성을 위해
REGEXP_MATCHES및REGEXP_REPLACE함수 별칭을 추가했습니다. #30885를 해결했습니다. #34334 (李扬). - 일부 서버는 HTTP 요청에 User-Agent header가 포함되기를 요구합니다.
User-Agentheader 항목이User-Agent: ClickHouse/VERSION_STRING형식으로 HTTP 요청에 추가되었습니다. #34330 (Saad Ur Rahman). - 일부 경우
DEADLOCK_AVOIDED오류를 방지하기 위해TRUNCATE쿼리에서 테이블 잠금을 획득하기 전에 머지를 취소하도록 했습니다. #34302를 수정했습니다. #34304 (tavplubix). - 로그에서 “Cancelled merging parts” 메시지의 심각도를 변경합니다. 이는 오류가 아니기 때문입니다. 이로써 #34148가 해결됩니다. #34232 (alexey-milovidov).
[]및.연산자(배열 및 튜플 인덱싱)를 사용하는 표현식에 PostgreSQL 스타일 캐스트 연산자::를 조합할 수 있는 기능을 추가했습니다. #34229 (Nikolay Degterinsky).parseDateTimeBestEffort함수가YYYYMMDD-hhmmss포맷을 인식하도록 개선했습니다. 이로써 #34206이 해결됩니다. #34208 (alexey-milovidov).Regexp포맷으로 파싱할 때 줄 중간의 캐리지 리턴을 허용합니다. 이로써 #34200이 해결됩니다. #34205 (alexey-milovidov).- 딕셔너리의
PRIMARY KEY를PRIMARY KEY (id, value)형식으로도 파싱할 수 있도록 했습니다. 이전에는PRIMARY KEY id, value만 지원했습니다. #34135를 해결했습니다. #34141 (Maksim Kita). splitByChar에서 결과 요소 수를 제한하는 선택적 인수입니다. 해결됨 #34081. #34140 (李扬).- clickhouse-client에서 여러 줄 편집 경험을 개선했습니다. 이는 #31123의 후속 작업입니다. #34114 (Amos Bird).
MsgPack입력/출력 포맷에UUID지원이 추가되었습니다. #34065 (Kruglov Pavel).- OpenTelemetry용 트레이싱 컨텍스트가 이제 GRPC 클라이언트 메타데이터에서 전파됩니다(이 변경은 GRPC 클라이언트-서버 프로토콜에 해당합니다). #34064 (andremarianiello).
ON CLUSTER절을 사용하는 모든SYSTEM쿼리를 지원합니다. #34005 (小路).max_untracker_memory미만을 사용하는 쿼리에 대한 메모리 계산을 개선했습니다. #34001 (Azat Khuzhin).- 소문자와 대문자가 서로 다른 바이트 수로 표현될 때
UTF-8 string의 대소문자 구분 없는 검색에서 발생하던 문제를 수정했습니다. 예시는ẞ및ß입니다. 이로써 #7334가 해결되었습니다. #33992 (Harry Lee). clickhouse-local에서 stdin의 포맷과 스키마를 감지합니다. #33960 (Kruglov Pavel).- 여러 디스크가 파일 시스템에서 동일한 경로를 사용할 때 발생하는 잘못된 구성 사례를 올바르게 처리합니다. #29072. #33905 (zhongyuankai).
- S3 프록시에 연결할 때 확인된 모든 IP 주소를 시도합니다. S3 프록시는 거의 사용되지 않으며, 주로 Yandex Cloud에서 사용됩니다. #33862 (Nikolai Kochetov).
- EXPLAIN AST CREATE FUNCTION 쿼리를 지원합니다.
EXPLAIN AST CREATE FUNCTION mycast AS (n) -> cast(n as String)를 실행하면EXPLAIN AST CREATE FUNCTION mycast AS n -> CAST(n, 'String')가 반환됩니다. #33819 (李扬). Map(Key, Value)를Array(Tuple(Key, Value))로 형 변환하는 기능을 추가했습니다. #33794 (Maksim Kita).Bool데이터 타입을 몇 가지 개선하고 수정했습니다. #33244를 수정했습니다. #33737 (Kruglov Pavel).- OpenTelemetry trace-id를 빅 엔디언 순서로 파싱해 저장합니다. #33723 (Frank Chen).
fromUnixTimestamp64함수군이 개선되었습니다. 이제Int64로 변환할 수 있는 모든 정수 값을 허용합니다. 이로써 다음 이슈가 해결되었습니다: #14648. #33505 (Andrey Zvonov).- 가능한 문제(#16947에서 발견된 문제와 같은 경우)를 방지하기 위해, 상수
_shard_num을shardNum()함수로 재구현했습니다(#7624 참조, #27020 참조). #33392 (Azat Khuzhin). - Decimal과 Float 간의 이항 산술 연산(plus, minus, multiply, division, least, greatest)을 지원합니다. #33355 (flynn).
- max_threads 자동 감지 시 cgroups 제한을 반영합니다. #33342 (JaySon).
- clickhouse-keeper 설정
min_session_timeout_ms를 새로 추가했습니다. 이제 clickhouse-keeper는min_session_timeout_ms및session_timeout_ms설정에 따라 클라이언트 세션 timeout을 결정합니다. #33288 (JackyWoo). hex및bin함수에UUID데이터 타입 지원이 추가되었습니다. #32170 (Frank Chen).- 이름에 점이 포함된 서브컬럼을 읽는 문제를 수정했습니다. 특히 요소 이름에 점이 포함된 경우
Nested컬럼을 읽는 문제를 수정했습니다(예:Nested(`keys.name` String, `keys.id` UInt64, values UInt64)). #34228 (Anton Popov). VALUES를 사용해 테이블에 삽입할 때parallel_view_processing = 0이 작동하지 않던 문제를 수정했습니다. -query_views_log에서 구체화된 뷰(Materialized View)의view_duration_ms가 올바르게 설정되지 않던 문제를 수정했습니다. #34067 (Raúl Marín).- ZooKeeper의 테이블 구조 파싱을 수정했습니다. 이제 ZooKeeper의 메타데이터를 정규화된 형식으로 로컬 메타데이터와 비교합니다. 이로써 ClickHouse 버전 간에 정규화된 함수 이름이 변경되는 경우에도 도움이 됩니다. #33933 (sunny).
- LDAP와 상호작용할 때 일부 문자를 올바르게 이스케이프 처리했습니다. #33401 (IlyaTsoi).
빌드/테스트/패키징 개선
- 번들에 포함되지 않은 빌드 지원을 제거합니다. #33690 (Azat Khuzhin).
- 테스트가 동일한 요소에 대한 비안정 정렬 결과에 의존하지 않도록 합니다. 동일한 항목의 정렬 순서에 의존할 때 발생할 수 있는 문제를 방지하기 위해, 디버그 빌드에서 정렬 후 동일 항목 구간을 무작위화하도록 추가했습니다. #34393 (Maksim Kita).
- 스타일 check에 상세 출력 옵션을 추가합니다. #34289 (Mikhail f. Shiryaev).
clickhouse-testdebian 패키지는 더 이상 사용되지 않으므로 제거합니다. #33948 (Ilya Yatsishin).- OS 패키지가 간헐적으로 사용될 가능성을 없애고 hermetic build를 강제할 수 있도록 빌드 시스템을 여러 면에서 개선했습니다. #33695 (Amos Bird).
버그 수정(공식 안정 또는 프리스테이블 릴리스에서 사용자에게 드러나는 오작동)
allow_experimental_parallel_reading_from_replicas를max_parallel_replicas가 1인 상태에서 사용할 때 발생하던 assertion을 수정했습니다. 이로써 #34525가 해결됩니다. #34613 (Nikita Mikhaylov).- 빈 배열을 읽는 과정에서 드물게 발생하던 버그를 수정했습니다. 이 버그로 인해
Data compressed with different methods오류가 발생할 수 있습니다. 배열이 대부분 비어 있을 때 재현될 수 있지만, 항상 그런 것은 아닙니다. 또한 ORDER BY … DESC로 역방향 읽기를 수행할 때 발생할 수 있습니다. 이 오류가 발생할 가능성은 극히 낮습니다. #34327 (Anton Popov). - 작은 타입의 정수 값을 반올림할 때
round/roundBankers가 잘못된 결과를 반환하던 문제를 수정했습니다. #33267을(를) 해결합니다. #34562 (李扬). - 때때로 S3 또는 HDFS에서 여러 파일을 읽을 때 쿼리 취소가 즉시 되지 않았습니다. #34301을 수정했습니다. #34397와 관련이 있습니다. #34539 (Dmitry Novik).
Chunk should have AggregatedChunkInfo in MergingAggregatedTransform예외를 수정했습니다(optimize_aggregation_in_order = 1이고distributed_aggregation_memory_efficient = 0인 경우). #34526를 해결했습니다. #34532 (Anton Popov).- 인덱스 분석에서 정수와 부동소수점 수의 비교 문제를 수정했습니다. 이전에는 이로 인해 읽을 때 일부 그래뉼이 잘못 스키핑될 수 있었습니다. #34493를 수정했습니다. #34528 (Anton Popov).
- URL 엔진의 압축 지원을 수정했습니다. #34524 (Frank Chen).
- 파일 스키마(schema) 자동 감지에서 발생할 수 있는 오류 ‘file_size: Operation not supported’를 수정했습니다. #34479 (Kruglov Pavel).
- 테이블(table) 삭제 시 발생할 수 있는 race condition을 수정했습니다. #34416 (Kseniia Sumarokova).
- 쇼트서킷 함수 평가에서 발생할 수 있는 오류
Cannot convert column Function to mask를 수정했습니다. 이 수정으로 #34171 문제가 해결되었습니다. #34415 (Kruglov Pavel). - URL 소스에서 스키마 추론을 수행할 때 발생할 수 있는 잠재적 크래시를 수정했습니다. #34147를 해결합니다. #34405 (Kruglov Pavel).
- UDFs의 접근 권한이 원래 확인되어야 하는 전역 수준이 아니라 데이터베이스 수준에서 확인되었습니다. #34281을 해결합니다. #34404 (Maksim Kita).
- 엔진이
Memory인 데이터베이스에서SHOW CREATE DATABASE쿼리 결과에 잘못된 엔진 구문이 표시되던 문제를 수정했습니다. 이로써 #34335가 해결되었습니다. #34345 (alexey-milovidov). - 복제 큐 상태가 손상되거나 “intersecting parts” 오류로 이어질 수 있는 극히 드문 race condition 두 건을 수정했습니다. #34297 (tavplubix).
- 진행률 표시줄 너비를 수정했습니다. 이전에는 문자 수가 정수로 잘못 반올림되었습니다. #34275 (alexey-milovidov).
- 서버 간 통신용 current_user/current_address 클라이언트 정보 필드를 수정했습니다(이 패치 이전에는 current_user/current_address에 이전 쿼리의 값이 유지되었습니다). #34263 (Azat Khuzhin).
optimize_aggregation_in_order=1사용 시 쿼리 처리 중 특정 Exception이 발생할 경우 생기던 메모리 누수를 수정했습니다. #34234 (Azat Khuzhin).- 실행 중인 쿼리 수를 표시하는 메트릭
Query를 수정했습니다. 지난 몇 차례의 릴리스에서 이 값이 항상 0으로 표시되던 문제를 해결했습니다. #34224 (Anton Popov). - 테이블 함수
s3의 스키마 추론을 수정했습니다. #34186 (Kruglov Pavel). HDFS,S3,URL스토리지 엔진에서 추가 연결을 유발할 수 있는 드물고 경미한 경쟁 상태를 수정했습니다. #34172 (alesapin).- S3와 같은 원격 파일 시스템에 데이터를 저장하는 MergeTree 테이블 엔진 계열에서 LowCardinality 컬럼을 읽는 중 드물게 “Cannot read all data” 오류가 발생할 수 있던 버그를 수정했습니다 (S3 상의 가상 파일 시스템은 아직 프로덕션 환경에 사용할 준비가 되지 않은 실험적 기능입니다). #34139 (alesapin).
- 네이티브 프로토콜 변경 시 분산 테이블에 대한 삽입이 올바르게 처리되도록 수정했습니다. 마지막 변경은 버전 22.1에서 이루어졌으므로, 해당 버전으로 업그레이드한 후 분산 테이블에 대한 삽입이 일부 실패할 수 있습니다. #34132 (Anton Popov).
- #33960에서 도입된
File테이블 엔진의 잠재적인 데이터 레이스 문제를 수정했습니다. #34111을 해결합니다. #34113 (Kruglov Pavel). - ZooKeeper 연결이 끊어진 뒤 극히 드문 경우에 “intersecting parts” 오류를 일으킬 수 있는 사소한 레이스 컨디션을 수정했습니다. #34096 (tavplubix).
Native포맷 사용 시 비동기 삽입 문제를 수정했습니다. #34068 (Anton Popov).- 복제된 액세스 스토리지와 Keeper(
clickhouse-server에 내장됨)를 함께 사용할 때 서버가 시작되지 않는 버그를 수정했습니다. 기본 사용자 설정 대신 Keeper socket timeout용 설정 2개를 도입했습니다:keeper_server.socket_receive_timeout_sec및keeper_server.socket_send_timeout_sec. #33973를 수정했습니다. #33988 (alesapin). - footer가 손상된 ORC 파일을 파싱하는 동안 발생하던 segfault를 수정했습니다. #33797를 해결했습니다. #33984 (Kruglov Pavel).
- 쿼리 매개변수(prepared statements)에서 IPv6를 파싱하는 문제와 IPv6를 문자열로 변환하는 문제를 수정했습니다. #33928을 해결했습니다. #33971 (Kruglov Pavel).
- 중첩된 튜플을 읽는 중 발생하던 충돌을 수정했습니다. #33838을 해결합니다. #33956 (Anton Popov).
- 분산 쿼리에서 리터럴 인수를 사용하는
array및tuple함수 관련 문제를 수정했습니다. 이전에는 이로 인해Not found columns예외가 발생할 수 있었습니다. #33938 (Anton Popov). - 집계 함수 조합자
-If가Nullable필터 인수를 제대로 처리하지 못하던 문제가 수정되었습니다. 이로써 #27073가 해결되었습니다. #33920 (alexey-milovidov). - 원격 디스크 읽기 수행 시 발생할 수 있는 잠재적인 경쟁 상태(race condition)를 수정했습니다(S3 기반 가상 파일 시스템은 프로덕션 환경에서 사용할 준비가 되지 않은 Experimental 기능입니다). #33912 (Amos Bird).
- 식별자가 아닌 인수를 사용하는 람다가 포함된 SQL UDF를 생성할 때 발생하던 충돌을 수정했습니다. #33866를 해결했습니다. #33868 (Maksim Kita).
- 희소 컬럼 사용 관련 문제를 수정했습니다(실험적 설정
ratio_of_defaults_for_sparse_serialization으로 활성화할 수 있음). #33849 (Anton Popov). - 레플리카가 실제로 readonly 상태인데도
SYSTEM RESTORE REPLICA쿼리에서replica is not readonly논리 오류가 발생하던 문제를 수정했습니다. #33806을 수정합니다. #33847 (tavplubix). - 기본값인 압축을 사용할 때 발생하던
clickhouse-keeper의 메모리 누수를 수정했습니다. #33840 (Azat Khuzhin). - 사용 가능한 공통 타입이 없을 때의 인덱스 분석 문제를 수정했습니다. #33833 (Amos Bird).
JSONEachRow및JSONCompactEachRow의 스키마 추론을 수정했습니다. #33830 (Kruglov Pavel).redis소스에서 많은 수의 키를 사용할 때 발생하는 외부 딕셔너리 사용 문제를 수정했습니다. #33804 (Anton Popov).- 클라이언트의 버그를 수정하여 서버에서 ‘Connection reset by peer’ 오류가 발생하던 문제를 해결했습니다. #33309를 해결합니다. #33790 (Kruglov Pavel).
- INSERT INTO … VALUES SETTINGS … (…), … 쿼리의 파싱 문제 수정 #33776 (Kruglov Pavel).
- wide format 및 프로젝션이 있는 데이터 파트를 생성할 때 발생하는 테이블 검사 버그를 수정했습니다. #33774 (李扬).
- MergeTree에서 count()와 INSERT/머지/… 사이의 미세한 경쟁 상태(race condition)를 수정했습니다(
optimize_trivial_count_query가 적용된 SELECT에서 잘못된 행 수가 반환될 수 있음). #33753 (Azat Khuzhin). - storage HDFS에서 디렉터리 목록 요청이 실패한 경우 예외를 발생시킵니다. #33724 (LiuNeng).
- 테이블에 프로젝션이 포함된 경우 발생하는 mutation 문제를 수정했습니다. 이로써 #33010이 해결되었습니다. 이로써 #33275가 해결되었습니다. #33679 (Amos Bird).
- 이름이 지정된 HTTP 세션 내에서
CREATE TEMPORARY TABLE AS SELECT를 실행할 때 현재 데이터베이스를 올바르게 판단하도록 수정했습니다. 이는 매우 드문 사용 사례입니다. 이로써 #8340이 해결되었습니다. #33676 (alexey-milovidov). - 정렬, LIMIT BY, ARRAY JOIN 및 람다 함수를 포함한 일부 쿼리를 허용합니다. 이로써 #7462가 해결됩니다. #33675 (alexey-milovidov).
- “zero-copy 복제”(개발 중인 기능으로, 운영 환경에서는 사용하지 않아야 함)의 버그를 수정했으며, TTL 이동 시 데이터가 중복되던 문제를 해결했습니다. #33643를 수정했습니다. #33642 (alesapin).
optimize_aggregation_in_order = 1인 경우 발생하던GroupingAggregatedTransform의Chunk should have AggregatedChunkInfo문제를 수정했습니다. #33637 (Azat Khuzhin).Nested컬럼 이름에 점이 포함되어 있고 해당 컬럼의 기본값이 생성될 때(예: 삽입 시 컬럼이 명시되지 않은 경우) 발생할 수 있는Bad cast from type ... to DB::DataTypeArray오류를 수정했습니다. #28762의 후속 수정입니다. #33588 (Alexey Pavlenko).lz4파일로의 내보내기가 수정되었습니다. #31421을 해결합니다. #31862 (Kruglov Pavel).group_by_overflow_mode가any(근사 GROUP BY)로 설정되어 있고LowCardinality유형의 단일 컬럼으로 집계를 수행할 때 발생할 수 있는 잠재적 충돌을 수정했습니다. #34506 (DR).- gRPC 클라이언트-서버 프로토콜을 통해 임시 테이블에 삽입할 때 발생하던 문제를 수정했습니다. #34347, 이슈
#2를 해결합니다. #34364 (Vitaly Baranov). - 이슈 #19429를 해결했습니다. #34225 (Vitaly Baranov).
- 이슈 #18206를 해결했습니다. #33977 (Vitaly Baranov).
- 이 PR을 통해 동일한 사용자 디렉터리 목록에서 여러 LDAP 스토리지를 사용할 수 있게 되었습니다. 이전에는 작동했지만 LDAP 테스트가 비활성화되어 있어(이는 testflows 테스트의 일부입니다) 더 이상 동작하지 않게 되었습니다. #33574 (Vitaly Baranov).
ClickHouse 릴리스 v22.1, 2022-01-18. 발표 자료, 동영상
업그레이드 참고 사항
- 함수
left와right는 이전에는 parser에서 구현되었지만, 이제는 완전한 기능을 지원합니다. 별칭 없이left또는right함수를 사용하는 분산 쿼리는 cluster에 서로 다른 버전의 clickhouse-server가 포함되어 있으면 예외를 발생시킬 수 있습니다. cluster를 업그레이드하는 중에 이 오류가 발생하면, 모든 노드가 동일한 버전을 사용하도록 cluster 업그레이드를 완료해야 합니다. 또한 이 문제를 피하려면 쿼리의 컬럼에 별칭(AS something)을 추가할 수도 있습니다. #33407 (alexey-milovidov). - 이 버전부터 스칼라 서브쿼리의 리소스 사용량이 완전히 집계됩니다. 이 변경으로 인해 이제 스칼라 서브쿼리에서 읽은 행 수가 query_log에 보고됩니다. 스칼라 서브쿼리가 cached 상태인 경우(반복되거나 여러 행에 대해 호출되는 경우) 읽은 행 수는 한 번만 집계됩니다. 이 변경으로 스칼라 서브쿼리를 실행하는 동안에도 쿼리를 KILL하고 진행 상황을 보고할 수 있습니다. #32271 (Raúl Marín).
새로운 기능
- 입력 형식에 대한 데이터 스키마 추론을 구현했습니다. 테이블 함수
file,url,s3,hdfs와clickhouse-local의 매개변수에서 구조를 생략하거나auto만 지정할 수 있습니다. 또한 테이블 엔진File,HDFS,S3,URL,Merge,Buffer,Distributed,ReplicatedMergeTree의 CREATE 쿼리에서도 구조를 생략할 수 있습니다(새 레플리카를 추가하는 경우). #32455 (Kruglov Pavel). file/hdfs/s3/url테이블 함수와HDFS/S3/URL테이블 엔진에서, 그리고SELECT INTO OUTFILE및INSERT FROM INFILE에 대해서도 파일 확장자를 기반으로 포맷을 감지합니다 #33565 (Kruglov Pavel). #30918을 해결했습니다. #33443 (OnePiece).- 지원이 필요할 때 진단 데이터를 수집하는 도구입니다. #33175 (Alexander Burmak).
- Zoo/Keeper를 통한 자동 클러스터 디스커버리. 이를 통해 각 서버의 구성을 변경하지 않고도 클러스터에 레플리카를 추가할 수 있습니다. #31442 (vdimir).
- ClickHouse에서 Apache Hive에 액세스할 수 있는 Hive 테이블 엔진을 구현했습니다. 다음을 구현했습니다: #29245. #31104 (taiyang-li).
- 집계 함수
cramersV,cramersVBiasCorrected,theilsU,contingency를 추가했습니다. 이 함수들은 범주형 값 사이의 종속성(연관성의 척도)을 계산합니다. 이들 함수는 모두 교차표(값 쌍에 대한 히스토그램)를 사용해 구현됩니다. 상관계수와 비슷하다고 볼 수 있지만, 숫자에 한정되지 않는 모든 이산 값에 사용할 수 있습니다. #33366 (alexey-milovidov). 초기 구현은 Vanyok-All-is-OK와 antikvist가 맡았습니다. - 지정된 클러스터의 여러 노드에서 HDFS 파일을
s3Cluster와 유사한 방식으로 병렬 처리할 수 있는 테이블 함수hdfsCluster가 추가되었습니다. #32400 (Zhichang Yu). - AWS S3를 백엔드로 사용하는 디스크와 유사한 방식으로, Azure Blob Storage 기반 디스크 지원을 추가했습니다. #31505 (Jakub Kuklis).
- 모든 VIEW 유형에서
CREATE VIEW에COMMENT를 허용합니다. #31062 (Vasily Nemkov). - 구성이 변경되면 수신 포트와 프로토콜을 동적으로 재초기화합니다. #30549 (Kevin Michel).
left,right,leftUTF8,rightUTF8함수를 추가했습니다. 음수 offset(문자열 끝에서부터 계산한 offset)에서substringUTF8함수 구현의 오류를 수정했습니다. #33407 (alexey-milovidov).H3좌표계용 새 함수h3HexAreaKm2,h3CellAreaM2,h3CellAreaRads2를 추가했습니다. #33479 (Bharat Nallan).MONTHNAME함수를 추가했습니다. #33436 (usurai).- 함수
arrayLast가 추가되었습니다. #33390이 해결되었습니다. #33415 함수arrayLastIndex가 추가되었습니다. #33465 (Maksim Kita). decodeURLComponent와 약간 다르게 동작하는 함수decodeURLFormComponent를 추가했습니다. #10298을 해결했습니다. #33451 (SuperDJY).- 일반/태그형 메트릭용
GraphiteMergeTree롤업 규칙을 분리할 수 있도록 지원합니다(선택적rule_type필드). #33494 (Michail Safronov).
성능 개선
- 모든 기반 테이블이
PREWHERE를 지원하면Mergeengine 테이블에서도 조건을PREWHERE로 이동하는 기능(설정optimize_move_to_prewhere)을 지원합니다. #33300 (Anton Popov). - URL 스토리지의 글롭 패턴 처리가 더 효율적으로 개선되었습니다. 이제 재시도와 함께 100만 개의 URL도 병렬로 쉽게 쿼리할 수 있습니다. #32866를 해결했습니다. #32907 (Kseniia Sumarokova).
- 파서에서 지수적 백트래킹이 발생하지 않도록 개선했습니다. 이 변경으로 #20158를 해결했습니다. #33481 (alexey-milovidov).
untuple함수의 오용으로 인해 쿼리 분석의 복잡도가 지수적으로 증가하던 문제를 수정했습니다(퍼저가 발견). 이 변경으로 #33297를 해결했습니다. #33445 (alexey-milovidov).- 문자열 속성이 있는 Dictionaries의 메모리 할당량을 줄였습니다. #33466 (Maksim Kita).
reinterpret함수의 성능을 소폭 개선했습니다. #32587 (alexey-milovidov).- 큰 의미가 있는 변경은 아닙니다. 매우 드물게 모든 레플리카에서 데이터 파트가 손실된 경우, 일부 데이터 파트의 머지 이후 후속 쿼리가 파티션 프루닝 중 건너뛰는 파티션 수가 줄어들 수 있습니다. 실제 영향은 거의 없습니다. #32220 (Azat Khuzhin).
- 크기 계산 로직을 최적화하여
clickhouse-keeper의 쓰기 성능을 개선했습니다. #32366 (zhanglistar). - 단일 파트 PROJECTION 머티리얼라이즈를 최적화했습니다. 이 변경으로 #31669를 해결했습니다. #31885 (Amos Bird).
- 시스템 테이블의 쿼리 성능을 개선했습니다. #33312 (OnePiece).
- 볼륨 간에 이동할 수 있는 MergeTree 파트 선택을 최적화했습니다. #33225 (OnePiece).
- 순차 키에서
sparse_hasheddict의 성능 문제를 수정했습니다(잘못된 해시 함수). #32536 (Azat Khuzhin).
실험적 기능
- sample key를 사용하지 않는 분산 쿼리에서 세그먼트 내 여러 레플리카로부터 병렬 읽기를 지원합니다. 이를 활성화하려면
allow_experimental_parallel_reading_from_replicas = 1로 설정하고max_parallel_replicas를 임의의 값으로 지정하십시오. 이 변경으로 #26748이 해결되었습니다. #29279 (Nikita Mikhaylov). - 희소 serialization을 구현했습니다. 이 기능은 기본값(0)이 많은 컬럼의 디스크 공간 사용량을 줄이고 일부 쿼리의 성능을 개선할 수 있습니다.
ratio_for_sparse_serialization을 설정하여 활성화할 수 있습니다. 기본값 수와 전체 값 수의 비율이 해당 임계값을 초과하면 해당 컬럼에 대해 희소 serialization이 동적으로 선택됩니다. Serialization(기본 또는 희소)은 파트 내 각 컬럼별로 고정되지만, 파트마다 달라질 수 있습니다. #22535 (Anton Popov). - MaterializedMySQL 테이블 스키마를 사용자 지정하기 위한 “TABLE OVERRIDE” 기능을 추가했습니다. #32325 (Stig Bakken).
EXPLAIN TABLE OVERRIDE쿼리를 추가했습니다. #32836 (Stig Bakken).- MaterializedPostgreSQL에 TABLE OVERRIDE 절 지원을 추가했습니다. RFC: #31480. #32749 (Kseniia Sumarokova).
- shared data용 zero-copy 마크의 ZooKeeper 경로를 변경했습니다. “zero-copy replication”은 아직 개발 초기 단계에 있는 비프로덕션 기능이므로 사용하지 않는 것이 좋습니다. 다만 이미 사용하고 있다면 이 변경 사항에 유의하십시오. #32061 (ianton-ru).
- WINDOW VIEW watch 쿼리에 Events 절 지원을 추가했습니다. #32607 (vxider).
clickhouse-keeper에서 명시적인 숫자 hash가 포함된 ACL 관련 문제를 수정했습니다. 이제 동작이 ZooKeeper와 일치하며, 생성된 digest는 항상 허용됩니다. #33249 (小路). #33246.- 파트를 detach할 때 projection이 예기치 않게 제거되는 문제를 수정했습니다. #32067 (Amos Bird).
개선 사항
- 이제
1970-01-01 00:00:00이전 시간을 생성하는 date time 변환 함수는 오버플로우되는 대신 0으로 고정됩니다. #29953 (Amos Bird). 또한 날짜 절단 함수가 Unix epoch 이전 결과를 반환할 때 발생하던 인덱스 분석 버그도 수정되었습니다. - 클라이언트에서 리소스 사용량(총 CPU 사용량, 총 RAM 사용량, 호스트별 최대 RAM 사용량)을 항상 표시합니다. #33271 (alexey-milovidov).
Bool유형의 직렬화 및 역직렬화를 개선하고 값 범위를 검사합니다. #32984 (Kruglov Pavel).SET쿼리 또는 HTTP 요청의 쿼리 매개변수로 잘못된 설정을 지정하면, 오류 메시지에 잘못된 설정 문자열과 비슷한 제안이 포함됩니다(있는 경우). #32946 (Antonio Andelic).- clickhouse-client 및 clickhouse-local에서 설정 이름을 잘못 입력했을 때 힌트를 제공합니다. #32237를 해결합니다. #32841 (凌涛).
- Materialized View에서 가상 컬럼을 사용할 수 있게 했습니다. #11210을 해결했습니다. #33482 (OnePiece).
- 필요한 경우 clickhouse-keeper에서 IPv6를 비활성화하는 설정을 추가했습니다. 이 변경으로 #33381가 해결되었습니다. #33450 (Wu Xueyang).
- 현재 git 리비전에 관한 정보를
system.build_options에 추가했습니다. #33431 (taiyang-li). clickhouse-local:--max_memory_usage_in_client옵션으로 메모리를 추적합니다. #33341 (Azat Khuzhin).- 함수
intervalLengthSum에서 음수 인터벌도 허용합니다. 그 길이 역시 합산됩니다. 이로써 #33323가 해결되었습니다. #33335 (alexey-milovidov). LineAsString을 출력 형식으로 사용할 수 있게 되었습니다. 이로써 #30919이 해결되었습니다. #33331 (Sergei Trifonov).- 클러스터 구성에서
<secure/>를<secure>1</secure>의 대체 형식으로 지원합니다. #33270을 종료했습니다. #33330 (SuperDJY). - Ctrl+C를 두 번 누르면 진행 중인 쿼리가 끝나기를 기다리지 않고
clickhouse-benchmark가 즉시 종료됩니다. 이로써 #32586가 해결되었습니다. #33303 (alexey-milovidov). parseDateTimeBestEffort함수에서 밀리초 단위 Unix timestamp를 지원합니다. #33276 (Ben).- 외부 테이블(external table)에서
Arrow/Parquet/ORC포맷으로 데이터를 읽는 동안 쿼리를 취소할 수 있게 했습니다. 이전에는 큰 파일을 읽을 때input_format_allow_seeks가 false로 설정되어 있으면 취소되지 않았습니다. #29678 해결. #33238 (Kseniia Sumarokova). - 테이블 엔진이
SETTINGS절을 지원하는 경우 설정을 키-값 형식 또는 config를 통해 전달할 수 있도록 했습니다. 이 지원이 MySQL에도 추가되었습니다. #33231 (Kseniia Sumarokova). - 필요한 경우 널 허용 primary key가 사용되지 않도록 올바르게 막습니다. 이는 #32780에 대한 내용입니다. #33218 (Amos Bird).
- 아직 아무것도 fetch되지 않은 경우에 대비해
PostgreSQL연결에 대한 재시도 기능을 추가했습니다. #33199를 해결합니다. #33209 (Kseniia Sumarokova). - 외부 딕셔너리의 설정 키를 검증합니다. #33095. #33130 (Kseniia Sumarokova).
clickhouse-local내에서 프로필 정보를 전송하도록 했습니다. #33093를 종료합니다. #33097 (Kseniia Sumarokova).- 단락 평가:
throwIf함수 지원. #32969을 해결했습니다. #32973 (Maksim Kita). - (이는 비공식 빌드에서만 발생합니다). 압축된 Decimal, String, FixedString 및 배열 컬럼에 데이터를 삽입할 때 발생하던 segfault를 수정했습니다. 이로써 #32939가 해결되었습니다. #32940 (N. Kolotov).
- 서브쿼리를 SQL 사용자 정의 함수로 지정할 수 있도록 지원이 추가되었습니다. 예시:
CREATE FUNCTION test AS () -> (SELECT 1). #30755를 해결합니다. #32758 (Maksim Kita). - gRPC 압축 지원을 개선했습니다 #28671. #32747 (Vitaly Baranov).
- 서버 종료 또는 테이블 분리 시 WAL이 활성화되지 않은 경우 모든 In-Memory 데이터 파트를 플러시합니다. #32742 (nauta).
- MySQL의 연결 타임아웃을 제어할 수 있게 했습니다(이전에는 딕셔너리 소스에만 지원되었습니다). #16669을 해결합니다. 이전에는 기본 connect_timeout이 다소 짧았지만, 이제는 설정할 수 있습니다. #32734 (Kseniia Sumarokova).
- 스토리지
MongoDB에authSource옵션 지원을 추가했습니다. #32594를 해결했습니다. #32702 (Kseniia Sumarokova). genarateRandom테이블 함수에서Date32타입을 지원합니다. #32643 (nauta).- 쿼리 유형별 동시 실행 쿼리를 제어하기 위해
max_concurrent_select_queries및max_concurrent_insert_queries설정을 추가했습니다. #3575를 해결했습니다. #32609 (SuperDJY). Protobuf포맷으로 데이터를 읽을 때 누락된 컬럼이 있는 중첩 구조의 처리 방식을 개선했습니다. https://github.com/ClickHouse/ClickHouse/pull/31988의 후속 작업입니다. #32531 (Vitaly Baranov).MongoDB엔진에서 빈 자격 증명을 허용합니다. #26267을 해결했습니다. #32460 (Kseniia Sumarokova).- 예외를 일으킬 수 있는 윈도우 함수 관련 일부 최적화를 비활성화합니다. #31535를 해결합니다. #31620를 해결합니다. #32453 (Kseniia Sumarokova).
- MongoDB 5.0에 연결할 수 있습니다. #31483를 해결합니다. #32416 (Kseniia Sumarokova).
Decimal과Float간 비교를 지원합니다. #22626를 해결했습니다. #31966 (flynn).StorageExecutable,StorageExecutablePool,ExecutableDictionary,ExecutablePoolDictionary,ExecutableUserDefinedFunctions에command_read_timeout,command_write_timeout설정이 추가되었습니다.command_read_timeout설정은 명령의 stdout에서 데이터를 읽을 때의 시간 제한을 밀리초 단위로 제어합니다.command_write_timeout설정은 명령의 stdin에 데이터를 쓸 때의 시간 제한을 밀리초 단위로 제어합니다.ExecutableUserDefinedFunction,ExecutableDictionary,StorageExecutable에command_termination_timeout설정이 추가되었습니다.ExecutableUserDefinedFunction에execute_direct설정이 추가되었으며, 기본값은 true입니다.ExecutableDictionary,ExecutablePoolDictionary에execute_direct설정이 추가되었으며, 기본값은 false입니다. #30957 (Maksim Kita).- 비트맵 집계 함수는 범위를 벗어난 인수에 대해서도 wraparound되지 않고 올바른 결과를 반환합니다. #33127 (DR).
FROM INFILEstatement에서 잘못된 쿼리가 파싱되던 문제를 수정했습니다. #33521 (Kruglov Pavel).- 경로에 글롭 패턴이 포함된 경우
S3에 쓸 수 없도록 합니다. #33142 (Kruglov Pavel). clickhouse-client를 단일 쿼리 배치 모드로 사용할 때--echo옵션이 적용되지 않던 문제를 수정했습니다. #32843 (N. Kolotov).- clickhouse-local에서
--database옵션을 사용할 수 있습니다. #32797 (Kseniia Sumarokova). - SQL 일반 함수
file의 예상외로 문제가 많았던 코드를 수정했습니다. 이제 심볼릭 링크를 지원합니다. #32640 (alexey-milovidov). - 파트 이동 후
system.parts의 데이터 파트에 있는modification_time을 업데이트합니다 #32964. #32965 (save-my-heart). - 잠재적인 문제로, 악용되지는 않습니다. 배열 크기 조정 중 정수 오버플로우가 발생할 수 있습니다. #33024 (varadarajkumar).
빌드/테스트/패키징 개선
- ClickHouse의 AArch64(ARM) 버전을 위한 패키지, 기능 테스트, Docker 빌드를 추가했습니다. #32911 (Mikhail f. Shiryaev). #32415
- ClickHouse를 musl-libc로 빌드할 수 있도록 준비했습니다. 기본적으로는 활성화되어 있지 않습니다. #33134 (alexey-milovidov).
- 설치 스크립트가 FreeBSD에서 작동하도록 수정했습니다. 이로써 #33384가 해결됩니다. #33418 (alexey-milovidov).
- GitHub Actions 워크플로를 위해
actionlint를 추가하고, 워크플로 구문이 올바른지act --list로 워크플로 파일을 검증합니다. #33612 (Mikhail f. Shiryaev). - 널 허용 기본 키 기능에 대한 테스트를 추가했습니다. 서로 다른 타입과 MergeTree 종류, 그리고 무작위로 생성한 데이터를 사용하는 테스트도 추가했습니다. #33228 (Amos Bird).
- 웹 브라우저에서 flaky 테스트를 시각화하는 간단한 도구를 추가했습니다. #33185 (alexey-milovidov).
- 공유 빌드에 hermetic build를 활성화했습니다. 주로 개발자를 위한 변경입니다. #32968 (Amos Bird).
libc++와libc++abi를 최신 버전으로 업데이트했습니다. #32484 (Raúl Marín).- 외부 .NET 클라이언트(ClickHouse.Client)에 대한 통합 테스트를 추가했습니다. #23230 (Oleg V. Kozlyuk).
clickhouse바이너리에 git 정보를 삽입했습니다. 이를 통해clickhouse바이너리에서 소스 코드 리비전을 쉽게 확인할 수 있습니다. #33124 (taiyang-li).- ConfigProcessor에서 더 이상 사용되지 않는 코드를 제거했습니다. Yandex 전용 코드는 이제 사용되지 않습니다. 이 코드에는 사소한 결함 하나가 있었습니다. 이 결함은 Mallik Hassan이 #33032에서 보고했습니다. 이로써 #33032가 해결됩니다. #33026 (alexey-milovidov).
버그 수정(공식 안정 또는 프리스테이블 릴리스에서 사용자에게 영향을 주는 오동작)
- 포맷 파싱과 관련된 몇 가지 문제가 수정되었습니다. 이는
clickhouse-server에 공격자가 쓰기 권한으로 접근할 수 있는 경우에 해당합니다. 특히 조작된Native포맷 입력 데이터로 인해 초기화되지 않은 메모리를 읽거나 크래시가 발생할 수 있습니다. 이는clickhouse-server에 공격자가 쓰기 권한으로 접근할 수 있는 경우에 해당합니다. #33050 (Heena Bansal). Apache Avro 바이너리 형식에서 Apache Avro Union 유형 인덱스가 범위를 벗어나는 문제를 수정했습니다. #33022 (Harry Lee). Native 형식에서LowCardinality데이터를 역직렬화할 때 발생하는 null 포인터 역참조 문제를 수정했습니다. #33021 (Harry Lee). - ClickHouse Keeper handler가 응답 전송 후 작업을 올바르게 제거합니다. #32988 (JackyWoo).
- 쿼터의 잠재적인 오프바이원 계산 오류: 쿼터 한도에 도달하지 않았는데도 한도를 초과한 것으로 처리되었습니다. 이 수정은 #31174를 해결합니다. #31656 (sunny).
- String을 IPv4 또는 IPv6로 CAST한 뒤 다시 되돌리는 동작이 수정되었습니다. 변환 실패 시 표시되는 오류 메시지도 수정되었습니다. #29224 (Dmitry Novik) #27914 (Vasily Nemkov).
- 원격 서버에서 실행 중
Unknown aggregate function nothing과 같은 예외가 발생하던 문제를 수정했습니다. 이로써 #16689가 해결됩니다. #26074 (hexiaoting). - 분산 쿼리에서 데이터베이스를 명시하지 않은 JOIN에 대해 잘못된 데이터베이스가 선택되던 문제를 수정했습니다 (수정: #10471). #33611 (Azat Khuzhin).
- 파일에 두 번째로 삽입한 후 발생하는 Apache
Avro포맷의 세그폴트를 수정했습니다. #33566 (Kruglov Pavel). - 스키마에
딕셔너리유형이 포함된 경우 ApacheArrow포맷에서 발생하는 세그멘테이션 오류를 수정했습니다. #33507를 종료합니다. #33529 (Kruglov Pavel). - 별도로 지정된
offset및limit설정이 뷰에 잘못 적용될 수 있습니다. Close #33289 #33518 (hexiaoting). - 기본 중첩
LowCardinality컬럼이 있는 테이블에 삽입할 때 발생할 수 있는Block structure mismatch예외를 수정했습니다. #33028을 해결합니다. #33504 (Nikolai Kochetov). - DDL로 생성된
range_hashed의 range min 및 range max 속성에 대한 딕셔너리 표현식을 수정했습니다. #30809을 해결합니다. #33478 (Maksim Kita). - materialized view에 INSERT하는 동안 동시에 DROP이 수행될 때 발생할 수 있는 use-after-free를 수정했습니다 (Azat Khuzhin).
- EOF 이후까지 읽으려고 시도하지 마십시오(Linux 커널 버그를 우회하기 위한 것으로, 이 버그는 커널 버전 (3.14..5.9)에서 재현될 수 있으며
index_granularity_bytes=0이 필요합니다(즉, adaptive index granularity를 비활성화해야 합니다)). #33372 (Azat Khuzhin). SYSTEM SUSPEND및SYSTEM ... THREAD FUZZER명령에는 접근 제어가 적용되지 않았습니다. 이를 수정했습니다. 작성자: Kevin Michel. #33333 (alexey-milovidov).- 딕셔너리의
COMMENT가system.tables,system.dictionaries에 표시되지 않던 문제를 수정했습니다.Dictionaryengine의 comment를 수정할 수 있도록 했습니다. #33251을 해결했습니다. #33261 (Maksim Kita). - 쿼리 로그에 비동기 삽입(
async_insert설정이 활성화된 경우)을 추가했습니다. 이전에는 이러한 쿼리가 쿼리 로그에 기록되지 않았습니다. #33239 (Anton Popov). - 외부 데이터베이스 쿼리에
WHERE 1 = 0표현식을 전송하는 문제를 수정했습니다. #33152를 해결합니다. #33214 (Kseniia Sumarokova). - MaterializedPostgreSQL의 DDL 유효성 검사 문제를 수정했습니다.
materialized_postgresql_allow_automatic_update설정을 수정했습니다. #29535를 해결했습니다. #33200 (Kseniia Sumarokova). 사용되지 않는 replication slot이 항상 제거되도록 수정했습니다. 이 문제는 #26952에서 발견되었습니다. #33187 (Kseniia Sumarokova). 기본 스키마가 아닌 테이블의 MaterializedPostreSQL detach/attach(복제에서 제거/추가) 문제를 수정했습니다. 이 문제는 #29535에서 발견되었습니다. #33179 (Kseniia Sumarokova). MaterializedPostgreSQL 데이터베이스 DROP 문제를 수정했습니다. #33468 (Kseniia Sumarokova). - 메트릭
StorageBufferBytes가 간헐적으로 잘못 계산되는 문제가 있었습니다. #33159 (xuyatian). local_filesystem_read_prefetch또는remote_filesystem_read_prefetch가 활성화된 상태에서LowCardinality컬럼을 읽을 때 발생하던 오류Invalid version for SerializationLowCardinality key column를 수정했습니다. #33046 (Nikolai Kochetov).- 빈 파일을 읽을 때 발생하는
s3테이블 함수 문제를 수정했습니다. #33008을 해결했습니다. #33037 (Kseniia Sumarokova). - cancel_http_readonly_queries_on_client_close에서 발생하던 Context 누수(즉, server에 업로드된 외부 테이블과 기타 리소스가 누수되던 문제)를 수정했습니다. #32982 (Azat Khuzhin).
- 사용자 지정 CSV 구분자를 사용할 때
CSV포맷에서 튜플 출력이 잘못되던 문제가 수정되었습니다. #32981 (Kruglov Pavel). - HA namenode 주소를 사용할 수 없게 하던 HDFS URL 검사 문제를 수정했습니다. 이 버그는 https://github.com/ClickHouse/ClickHouse/pull/31042에서 도입되었습니다. #32976 (Kruglov Pavel).
- 비위치 인수에서 “위치 인수가 범위를 벗어났습니다”와 같은 예외가 발생하던 문제를 수정했습니다. #31173#event-5789668239를 해결했습니다. #32961 (Kseniia Sumarokova).
- HTTP 쿼리에서 Set을 채우는 도중 예기치 않은 EOF가 발생할 때의 UB를 수정했습니다(즉, 클라이언트가 중간에 연결을 끊은 경우. 예:
timeout 0.15s curl -Ss -F 's=@t.csv;' 'http://127.0.0.1:8123/?s_structure=key+Int&query=SELECT+dummy+IN+s'실행 시,t.csv가 충분히 큰 경우). #32955 (Azat Khuzhin). replaceRegexpAll함수의 회귀 문제를 수정했습니다. 일치한 부분 문자열이 비어 있을 때 함수가 올바르게 동작하지 않았습니다. 이로써 #32777가 해결되었습니다. 이로써 #30245가 해결되었습니다. #32945 (alexey-milovidov).ORC포맷의 stripe 읽기 문제를 수정했습니다. #32929 (kreuzerkrieg).topKWeightedState가 일부 입력 타입에서 제대로 동작하지 않았습니다. #32487. #32914 (vdimir).- materialized view에서 발생하던 예외
Single chunk is expected from view inner query (LOGICAL_ERROR)를 수정했습니다. #31419를 해결했습니다. #32862 (Nikolai Kochetov). - 원격 파일 시스템의 비동기 읽기에서 lazy seek 최적화 문제를 수정했습니다. #32803을 해결합니다. #32835 (Kseniia Sumarokova).
MergeTree테이블 엔진은 실행 중인 뮤테이션이 너무 많거나 메모리 사용량이 높은 경우 일부 뮤테이션을 감지 없이 건너뛸 수 있었는데, 이 문제가 수정되었습니다. #17882를 수정했습니다. #32814 (tavplubix).- MV 블록을 처리할 때 스칼라 서브쿼리 캐시를 재사용하지 않도록 변경했습니다. 이로써 스칼라 쿼리가 원본 테이블을 참조할 때 발생하던 버그를 수정했지만, 그에 따라 MV 정의의 모든 하위 스칼라 쿼리가 각 블록마다 계산됩니다. #32811 (Raúl Marín).
- MySQL 서버에 연결할 수 없는
MySQL엔진의 데이터베이스가 있을 때 서버 시작에 실패할 수 있던 문제가 수정되었습니다. #14441. #32802 (tavplubix). fuzzBits함수를 사용할 때 발생하던 충돌을 수정해 #32737을 해결했습니다. #32755 (SuperDJY).Kafka/RabbitMQ상의GROUP BY (list of columns)(GROUP BY tuple(...)로 파싱됨)을 사용하는 MV에서 발생하던Column is not under aggregate function오류를 수정했습니다. #32668 및 #32744 관련 수정입니다. #32751 (Nikolai Kochetov).TTL ... DELETE WHERE ...및TTL ... GROUP BY ...모드에서ALTER TABLE ... MATERIALIZE TTL쿼리가 올바르게 동작하도록 수정했습니다. #32695 (Anton Popov).- 테이블 엔진이
Distributed또는Merge이고, 기반MergeTree테이블의 정렬 키 접두사에 단조 함수가 있는 경우optimize_read_in_order최적화가 올바르게 동작하도록 수정했습니다. #32670 (Anton Popov). - materialized view의 대상이 JOIN 또는 SET 테이블인 경우 발생하던 LOGICAL_ERROR 예외를 수정했습니다. #32669 (Raúl Marín).
- Google Cloud Storage에 멀티파트 업로드를 사용해 S3에 삽입할 때 작업이 중단될 수 있습니다. #32504. #32649 (vdimir).
- 채널 생성을 지연시켜
RabbitMQ스토리지 시작 시 발생할 수 있는 예외를 해결했습니다. #32584 (Kseniia Sumarokova). - 병렬 DROP TABLE 및 INSERT가 발생하는 경우 테이블 수명 문제(즉, 발생할 수 있는 use-after-free)를 수정했습니다. #32572 (Azat Khuzhin).
- 포맷
CustomSeparated,Template,Regexp,MsgPack,JSONAsString에서 async inserts 관련 문제를 수정했습니다. 이전에는 이러한 포맷을 사용할 때 async inserts가 데이터를 전혀 읽지 못했습니다. #32530 (Kruglov Pavel). - 분산 테이블의
groupBitmapAnd함수 문제를 수정했습니다. #32529 (minhthucdao). - 퍼저가 발견한 JOIN 크래시를 수정하고 #32458을 해결했습니다. #32508 (vdimir).
- Apache Arrow 컬럼 중복이 발생하는 경우를 올바르게 처리합니다. #32507 (Dmitriy Mokhnatkin).
- 분산 쿼리에서 일부 테이블 컬럼 이름이
ALL또는DISTINCT일 때 오류가 발생하던 모호한 쿼리 포맷팅 문제를 수정했습니다. 이로써 #32391이 해결되었습니다. #32490 (alexey-milovidov). - 아직 구체화되지 않은 스킵 인덱스를 사용하려는 쿼리에서 발생하는 실패를 수정했습니다. #32292 및 #30343를 해결합니다. #32359 (Anton Popov).
- 동일한 세션에서 두 번째 쿼리부터 동일한 컬럼에 2개를 초과하는 행 정책이 있을 때 발생하던
select쿼리 문제를 수정했습니다. #31606. #32291 (SuperDJY). - 소수 초를 포함한 Unix 타임스탬프를
DateTime64로 변환할 때, 음수 Unix 타임스탬프(1970-01-01 이전)에서 소수 부분이 반대로 처리되던 문제를 수정했습니다. #32240 (Ben). - 복제 큐의 일부 항목이
Directory tmp_merge_<part_name>,Part ... (state Deleting) already exists, but it will be deleted soon또는 이와 유사한 오류로 인해temporary_directories_lifetime(기본값 1일) 동안 멈춰 있을 수 있었습니다. 이 문제는 수정되었습니다. #29616을 수정했습니다. #32201 (tavplubix). APPLY lambda컬럼 변환기의 파싱을 수정하여 클라이언트/서버 충돌로 이어질 수 있는 문제를 해결했습니다. #32138 (Kruglov Pavel).- 작은 문자열에서
base64Encode에 후행 바이트가 추가되는 문제를 수정했습니다. #31797 (Kevin Michel). - 윈도 함수의
LowCardinality인수로 인해 발생할 수 있는 충돌(또는 잘못된 결과)을 수정했습니다. #31114을 해결합니다. #31888 (Nikolai Kochetov). - 명령
DROP TABLE system.query_log sync실행 시 발생하던 멈춤 문제를 수정했습니다. #33293 (zhanghuajie).