2022 변경 로그
ClickHouse 릴리스 22.12, 2022-12-15. 프레젠테이션, 동영상
참고
이 릴리스에는 일부 Linux 배포판에서 업그레이드 시 ClickHouse 설치를 망가뜨릴 수 있는 잘못된 systemd 서비스 주석이 포함되어 있습니다. 해당 systemd 서비스는 /run/systemd 디렉터리의 소유자 권한을 변경하여, 이후 실행되는 모든 systemd 작업이 실패하게 만듭니다. 이 버전으로 업그레이드하는 것은 피하고, 대신 더 최신 버전의 ClickHouse로 업그레이드할 것을 권장합니다.
자세한 내용은 GitHub의 다음 이슈를 참조하십시오: https://github.com/ClickHouse/ClickHouse/issues/48285
업그레이드 참고 사항
String인자를 사용하는min,max,any*,argMin,argMax집계 함수 상태의 (디)직렬화 시 발생하던 하위 호환성 문제를 수정했습니다. 이 비호환성은 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'없이 집계 함수 상태를 기록합니다. 수정이 포함된 최신 버전은, 한 가지 코너 케이스를 제외하고, 비호환 버전을 포함한 모든 버전이 기록한 데이터를 올바르게 읽을 수 있습니다. 비호환 버전이 실제로 널 문자로 끝나는 문자열이 포함된 상태를 저장한 경우, 최신 버전은 영향을 받는 집계 함수의 상태를 읽을 때 문자열 끝의'\0'을 잘라냅니다. 예를 들어, 비호환 버전이anyState('abrac\0dabra\0')의 상태를state_column에 저장했다면, 최신 버전은anyMerge(state_column)실행 시'abrac\0dabra'를 출력합니다. 이 문제는 비호환 버전이 더 오래되었거나 최신 버전과 함께 클러스터에서 동작하는 경우 분산 쿼리에도 영향을 줍니다. #43038 (Alexander Tokmakov, Raúl Marín). 참고: 모든 공식 ClickHouse 빌드는 이미 해당 패치를 포함하고 있습니다. 비공식 서드파티 빌드에는 패치가 포함되지 않았을 수 있으므로 사용을 피하는 것이 좋습니다.
새 기능
BSONEachRow입력/출력 형식을 추가합니다. 이 형식에서 ClickHouse는 각 행을 개별 BSON 문서로 포맷/파싱하며, 각 컬럼은 컬럼 이름을 키로 사용하는 단일 BSON 필드로 포맷/파싱합니다. #42033 (mark-polokhov).grace_hashJOIN 알고리즘을 추가했습니다.SET join_algorithm = 'grace_hash'설정으로 활성화할 수 있습니다. #38191 (BigRedEye, Vladimir C).- USER를 생성하거나 변경할 때 비밀번호 복잡성 규칙과 검사를 구성할 수 있습니다. #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). cutURLParameterFUNCTION의 두 번째 파라미터로 배열을 사용할 수 있게 되었습니다. 이를 통해 여러 파라미터를 한 번에 제거할 수 있습니다. #6827 이슈를 종료합니다. #43788 (Roman Vasin).system.data_skipping_indices테이블에 인덱스 표현식을 담는 컬럼을 추가합니다. #43308 (Guillaume Tassery).- 시스템 테이블
databases에engine_full컬럼을 추가하여 시스템 테이블을 통해 데이터베이스의 전체 엔진 정의를 조회할 수 있도록 합니다. #43468 (凌涛). - 새 해시 함수 xxh3가 추가되었습니다. 또한 라이브러리 업데이트로 ARM에서
xxHash32와xxHash64의 성능이 향상되었습니다. #43411 (Nikita Taranov). - MergeTree 설정에 대한 제약 조건을 정의할 수 있는 기능이 추가되었습니다. 예를 들어 사용자가
storage_policy설정을 재정의하지 못하도록 할 수 있습니다. #43903 (Sergei Trifonov). - 모든 JSON 입력 포맷에서 중첩 JSON 객체를 String으로 파싱할 수 있도록 하는 새로운 설정
input_format_json_read_objects_as_strings를 추가했습니다. 이 설정은 기본적으로 비활성화되어 있습니다. #44052 (Kruglov Pavel).
Experimental Feature
- 비동기 insert에 대해 중복 제거를 지원합니다. 이 변경 이전에는 여러 개의 작은 insert가 하나의 insert 배치에 함께 포함되었기 때문에 비동기 insert에서는 중복 제거가 지원되지 않았습니다. #38075를 종료합니다. #43304 (Han Fei).
- 실험적 Annoy (벡터 유사성 검색) 인덱스에 대해 코사인 거리(cosine distance)를 지원합니다. #42778 (Filatenkov Artur).
CREATE / ALTER / DROP NAMED COLLECTION쿼리를 추가합니다. #43252 (Kseniia Sumarokova). 이 기능은 개발 중이며, 버전 22.12 기준으로는 쿼리를 실행해도 아무 효력이 없습니다. 혼동을 피하기 위해 이 변경 로그 항목이 추가되었습니다. 기본적으로 named collection에 대한 접근을 구성 파일에 정의된 사용자로 제한합니다. 이를 보려면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로 전송되는 list 요청 수를 최적화했습니다. 이전에는 일부 경우 수천 개의 요청이 발생할 수 있었습니다. 이 문제를 수정합니다: #43647. #43675 (Alexander Tokmakov).
max_size_to_preallocate_for_aggregation값이 너무 작은 경우 해당 최적화를 건너뛰도록 변경했습니다. 이 설정의 기본값을10^8로 증가시켰습니다. #43945 (Nikita Taranov).- 오래된 데이터 파트를 정리하지 않도록 하여 서버 종료 속도를 높였습니다. 이는 불필요하기 때문입니다: 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 개선: 요청을 더 자주 배치(batch)합니다. 이 배치 동작은 새 설정
max_requests_quick_batch_size로 제어할 수 있습니다. #43686 (Antonio Andelic).
개선 사항
- 백업을 복원하는 동안 참조 종속성을 구현하고 이를 사용해 테이블을 올바른 순서대로 생성합니다. #43834 (Vitaly Baranov).
- 시작 시 로딩 실패를 방지하기 위해
CREATE쿼리에서 UDF를 치환하도록 했습니다. 또한 이제 UDF를 컬럼의DEFAULT식으로 사용할 수 있습니다. #43539 (Antonio Andelic). - 다음 쿼리가 파트를 삭제하는 방식이 변경되었습니다:
TRUNCATE TABLE,ALTER TABLE DROP PART,ALTER TABLE DROP PARTITION. 이제 이러한 쿼리는 기존 파트를 덮는 빈 파트를 생성합니다. 이를 통해TRUNCATE TABLE쿼리가 후속 exclusive lock 없이 동작하므로, 동시에 실행되는 읽기가 차단되지 않습니다. 또한 이 모든 쿼리에서 내구성(durability)을 보장합니다. 요청이 성공하면 이후에 resurrected parts가 나타나는 일은 없습니다. 원자성(atomicity)은 트랜잭션 범위에서만 보장된다는 점에 유의하십시오. #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 table function / 엔진에서 데이터를 읽는 동안 진행률 표시줄을 표시합니다. #43454 (Kseniia Sumarokova).
- Progress bar에서 읽은 행 수와 기록된 행 수를 모두 표시합니다. #43496 (Ilya Yatsishin).
filesystemAvailable및 관련 FUNCTION은 디스크 이름을 지정하는 하나의 선택적 인수를 지원하며,filesystemFree는filesystemUnreserved로 변경됩니다. #35076 이슈를 해결합니다. #42064 (flynn).- LDAP 통합: 기본
search_limit값을 256으로 상향하고, 이를 임의의 값으로 변경할 수 있도록 LDAP 서버 설정 옵션을 추가했습니다. Closes: #42276. #42461 (Vasily Nemkov). - 예외 메시지에서도 민감한 정보를 제거할 수 있도록 했습니다(구성 파일의
query_masking_rules참조). #41418을(를) 해결했습니다. #42940 (filimonov). - MySQL 호환성을 위해
SHOW FULL TABLES ...와 같은 쿼리를 지원합니다. #43910 (Filatenkov Artur). - Keeper 개선: 노드를 리더로 수동 지정할 수 있는 4lw 명령어
rqld를 추가했습니다. #43026 (JackyWoo). - 쿼리에 지정된 연결 타임아웃 설정을 Distributed 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'인 프로파일 이벤트를 현재 스택, 프로파일 이벤트 이름 및 증분 값과 함께 각 증분 시점마다system.trace_log에 수집할 수 있습니다. 이 기능은trace_profile_events설정으로 활성화할 수 있으며, 쿼리 성능을 분석하는 데 사용할 수 있습니다. #43639 (Anton Popov). - RowBinary 포맷의 문자열 크기를 제한하기 위한 새로운 설정
input_format_max_binary_string_size를 추가했습니다. #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의 QPL 빌드 문제를 해결하기 위해 CMake 파일 개선 3. QPL v0.2.0에서 런타임 로딩(dlopen)을 사용하던 것과 달리, 빌드 시점에 libaccel-config와 QPL 라이브러리 링크 4. CompressionCodecDeflateQpl.cpp에서 로그 출력 문제 수정. #44024 (jasperzhu).
버그 수정 (공식 stable 또는 prestable 릴리스에서 사용자가 인지할 수 있는 오동작)
- 비동기 insert를 사용할 때 교착 상태가 발생할 수 있던 버그를 수정했습니다. #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의 동작을 수정했습니다. #43274 (Duc Canh Le). - Kafka 테이블과 관련된
UserTimeMicroseconds및SystemTimeMicroseconds의 잘못된 집계를 수정합니다. #42791 (Azat Khuzhin). web디스크에서 예외를 숨기지 않도록 했습니다.web디스크에 대한 재시도 동작을 수정했습니다. #42800 (Azat Khuzhin).- INSERT와 materialized view 삭제 사이의 (논리적) 레이스 컨디션을 수정합니다. 이 레이스 컨디션은 materialized view가 INSERT와 동시에 DROP될 때 발생하였습니다. 실행 시작 시점에는 materialized view가 INSERT의 의존성으로 존재하지만, INSERT 체인이 해당 테이블에 접근하려 할 때쯤에는 테이블이 이미 DROP되어
UNKNOWN_TABLE또는TABLE_IS_DROPPED예외가 발생하고, 그로 인해 삽입이 중단되었습니다. 이 변경으로, 의존성이 사라진 경우에는 이러한 예외를 발생시키지 않고 삽입을 계속 진행하도록 합니다. #43161 (AlfVII). quantiles함수의 정의되지 않은 동작을 수정하여 초기화되지 않은 메모리가 사용될 수 있는 문제를 해결합니다. fuzzer에 의해 발견되었습니다. #44066을(를) 해결합니다. #44067 (Alexey Milovidov).- 비압축 크기가 0인 경우에 대한 추가 검사가
CompressionCodecDelta에 추가되었습니다. #43255 (Nikita Taranov). - 배열 내 불일치한 데이터로 인한 문제를 피하기 위해 Parquet 파일의 배열을 평탄화합니다. 이러한 잘못된 파일은 Apache Iceberg에서 생성될 수 있습니다. #43297 (Arthur Passos).
- 단락(short-circuit) 함수 실행을 사용할 때
LowCardinality컬럼에서 잘못된 캐스트가 발생하던 문제를 수정합니다. #43311 (Kruglov Pavel). Merge엔진을 사용하는 테이블에서 prewhere 최적화가 적용된SAMPLE BY쿼리의 동작을 수정했습니다. #43315 (Antonio Andelic).- 저장소 정책이 변경되었더라도 테이블을 로드할 수 있도록
MergeTreeData의format_version파일 내용을 확인하고 비교합니다. #43328 (Antonio Andelic). Buffer테이블에 대한 INSERT 중, 발생 가능성은 매우 낮지만 발생할 수 있는 「No column to rollback」 논리 오류를 수정했습니다. #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에서 시간/분 단위 계산 시
date_diff동작을 수정합니다. #42742 이슈를 해결합니다. #43466 (zzsmdfj). - 머지 및 뮤테이션 작업으로 인해 잘못 집계되던 메모리 사용량을 수정합니다. #43516 (Azat Khuzhin).
toString(enum)이 포함된 조건에서 기본 키(primary key) 분석 문제를 수정했습니다. #43596 (Nikita Taranov). 이 오류는 @tisonkun이 발견했습니다.- 파티션 attach 작업이 완료된 후 Keeper에서
clickhouse-copier가 상태와attach_is_done를 업데이트할 때 일관성이 유지되도록 했습니다. #43602 (lzydmxy). - 손실된
Replicated데이터베이스(실험적 기능)의 레플리카를 복구하는 과정에서, 두 테이블 이름을 원자적으로 교환해야 하는 상황이 발생할 수 있으며(EXCHANGE사용), 이전에는 두 개의RENAME쿼리를 사용하려 했기 때문에 이는 당연히 실패했고, 나아가 데이터베이스 레플리카의 전체 복구 과정도 실패하게 했습니다. #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 replication)를 활성화하여 사용할 때 프로젝션이 손상될 수 있던 버그를 수정했습니다. #43764 (alesapin).
- AWS S3에서 매우 큰 객체를 multipart upload로 업로드할 때의 동작을 수정합니다. #43824 (ianton-ru).
ON CLUSTER와 함께 사용하는ALTER ... RESET SETTING동작에서 설정이 단일 레플리카에만 적용될 수 있던 문제를 수정했습니다. #43843를 해결했습니다. #43848 (Elena Torró).USING절을 사용할 때 오른쪽에Join테이블 엔진이 있는 JOIN에서 발생하던 논리적 오류를 수정합니다. #43963 (Vladimir C).Join테이블 엔진에서 키의 순서가 잘못 처리되던 버그를 수정합니다. #44012 (Vladimir C).- Keeper 수정: Raft용 interserver 포트가 이미 사용 중인 경우 예외를 던지도록 합니다. #43984 (Antonio Andelic).
- 서브쿼리에서 불필요한 컬럼이 제거(pruning)되는 경우에도
ORDER BY 1, 2와 같은 ORDER BY 위치 인자가 올바르게 동작하도록 수정합니다. #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가 재시작되는 경우(예: 업그레이드로 인한 재시작) INSERT 중 사용자에게 오류를 반환하지 않도록 하여 더 나은 사용자 경험을 제공하는 것을 목표로 합니다. #42607 (Igor Nikonov).
Hudi및DeltaLake테이블 엔진을 추가했습니다. 이 엔진은 읽기 전용이며 S3에 저장된 테이블에만 사용할 수 있습니다. #41054 (Daniil Rubin, Kseniia Sumarokova).- 테이블 FUNCTION인
hudi및deltaLake를 추가합니다. #43080 (flynn). - 복합 시간 간격을 지원합니다. 1. 이제 Intervals에서 더하기, 빼기, 부정 연산을 사용할 수 있습니다. Intervals의 타입이 서로 다른 경우, 해당 타입들의 Tuple로 변환됩니다. 2. Intervals의 Tuple을 Date/DateTime 필드에 더하거나 뺄 수 있습니다. 3. 서로 다른 타입을 가진 Intervals의 파싱을 지원합니다. 예:
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에서 스냅샷을 수동으로 생성하기 위한 네 글자로 된 명령어
csnp가 추가되었습니다. 또한 특정 노드에 대한 Raft 정보를 가져오기 위한lgif가 추가되었으며(예: 마지막으로 생성된 스냅샷의 인덱스, 마지막으로 커밋된 로그 인덱스), 자세한 내용은 #41766(JackyWoo)에서 확인할 수 있습니다. - Apache Spark와 동일한
ascii함수를 추가했습니다: https://spark.apache.org/docs/latest/api/sql/#ascii. #42670 (李扬). - 나머지 연산(modulo)에 기반해 음수가 아닌 결과를 반환하는 함수
pmod를 추가합니다. #42755 (李扬). formatReadableDecimalSize함수를 추가했습니다. #42774 (Alejandro).- Apache Spark 또는 Impala의
rand함수와 유사한randCanonical함수를 추가했습니다. 이 함수는 [0, 1) 구간에서 서로 독립적이고 동일한 분포를 따르는 균등분포 의사 난수 값을 생성합니다. #43124 (李扬). displayNameFUNCTION을 추가했습니다. #36770 이슈를 종료했습니다. #37681 (hongbin).- 오래된 파트를 전체 파티션 단위로만 최적화할 수 있도록
min_age_to_force_merge_on_partition_only설정을 추가했습니다. #42659 (Antonio Andelic). - 임의의 구조화된 이름이 있는 컬렉션, 액세스 타입 및
system.named_collections에 대한 일반 구현을 추가합니다. #43147 (Kseniia Sumarokova).
성능 향상
match함수가 문자열 접두사를 조건으로 사용할 경우 인덱스를 사용할 수 있게 되었습니다. 이로써 #37333 이슈가 해결되었습니다. #42458 (clarkcaoliu).- AND 및 OR 연산자가 연속해서 사용될 때 속도가 향상되었습니다. #42214 (Zhiguo Zhou).
LineAsString입력 포맷에 대해 병렬 파싱을 지원합니다. 성능이 소폭 향상됩니다. 이로써 #42502 이슈가 해결되었습니다. #42780 (Kruglov Pavel).- ClickHouse Keeper 성능 향상: 커밋되지 않은 상태를 가진 서로 다른 노드가 많을 때 커밋 성능을 개선했습니다. 팔로워 노드가 충분히 빠르게 동기화하지 못하는 경우에 도움이 됩니다. #42926 (Antonio Andelic).
NOT LIKE 'prefix%'와 같은 조건에서 기본 인덱스를 사용할 수 있습니다. #42209 (Duc Canh Le).
실험적 기능
- 다른 타입 내부에
Object타입을 지원합니다(예:Array(JSON)). #36969 (Anton Popov). - MaterializedMySQL에서 MySQL binlog의 SAVEPOINT 이벤트를 무시합니다. #42931 (zzsmdfj). MaterializedMySQL에서 SAVEPOINT 쿼리를 처리(무시)합니다. #43086 (Stig Bakken).
개선 사항
- LIMIT 값이 작은 단순 쿼리는 읽을 것으로 추정되는 행 수를 올바르게 계산하여 임계값이 올바르게 검사되도록 합니다. #7071을(를) 해결합니다. #42580 (Han Fei).
- INSERT VALUES 쿼리에서 대화형 매개변수를 지원하는 기능을 추가했습니다. #43077 (Nikolay Degterinsky).
system.table_functions에 새로운 필드allow_readonly가 추가되어 읽기 전용(readonly) 모드에서 table function을 사용할 수 있게 되었습니다. #42414 해결. 구현: * system.table_functions 테이블에 새로운 필드 allow_readonly를 추가했습니다. * 새로운 필드 allow_readonly를 사용하도록 업데이트하여 읽기 전용(readonly) 모드에서 table function을 사용할 수 있게 했습니다. 테스트: * filesystem용 테스트 tests/queries/0_stateless/02473_functions_in_readonly_mode.sh를 추가했습니다. 문서화: * "Table Functions"에 대한 영문 문서를 업데이트했습니다. #42708 (SmitaRKulkarni).system.asynchronous_metrics에 내장된 문서가 추가되었습니다. 이 문서는 Prometheus로도 내보내집니다.cache디스크 관련 메트릭에서 오류를 수정했습니다. 모든 캐시 디스크가 아니라 임의로 선택된 하나의 캐시 디스크에 대해서만 계산되던 문제였습니다. 이로써 #7644가 해결되었습니다. #43194 (Alexey Milovidov).- 스로틀링 알고리즘이 토큰 버킷(token bucket) 방식으로 변경되었습니다. #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_functionsSETTING에 새로운 값2가 추가되었으며, 이 값은 ClickHouse가 삽입 테이블의 구조를 사용할 수 있는지 여부를 자동으로 판별하려고 시도함을 의미합니다. #40028를 해결합니다. #42320 (Kruglov Pavel). INSERT FROM INFILE에서 진행 상태가 표시되지 않던 문제를 수정했습니다. #42548를 종료했습니다. #42634 (chen).- 함수
tokens를 리팩터링하여 관련 함수들에 대해 반환되는 토큰의 최대 개수를 지정할 수 있도록 했습니다(기본적으로 비활성화되어 있음). #42673 (李扬). formatDateTime및FROM_UNIXTIMEFUNCTION에서Date32인수를 사용할 수 있도록 지원합니다. #42737 (Roman Vasin).- tzdata를 2022f로 업데이트합니다. 멕시코는 미국 국경 인근 일부 지역을 제외하고 더 이상 일광 절약 시간제(DST)를 시행하지 않습니다: https://www.timeanddate.com/news/time/mexico-abolishes-dst-2022.html. 치와와는 2022-10-30부터 연중 내내 UTC-6를 사용합니다. 피지는 더 이상 일광 절약 시간제를 시행하지 않습니다. https://github.com/google/cctz/pull/235 및 https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1995209를 참고하십시오. #42796 (Alexey Milovidov).
- 비동기 insert용
FailedAsyncInsertQuery이벤트 메트릭을 추가합니다. #42814 (Krzysztof Góralski). - 쿼리 플랜 기반으로
read-in-order최적화를 구현했습니다. 기본적으로 활성화됩니다. 이전 AST 기반 버전을 사용하려면query_plan_read_in_order = 0으로 설정하십시오. #42829 (Nikolai Kochetov). - S3로 백업할 때 multipart 업로드의 파트 수가 최대 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와의 호환성을 위해 몇 가지 FUNCTION을 추가했습니다 #42612 (Filatenkov Artur).
- 변경 대시보드의 사용성 개선 #42872 (Vladimir C).
빌드/테스트/패키징 개선
- 각 pull request 및 master 브랜치 커밋마다 SQLancer를 실행합니다. SQLancer는 논리적 버그를 자동으로 탐지하는 데 중점을 둔 오픈소스 퍼저입니다. #42397 (Ilya Yatsishin).
- zlib-ng를 최신 버전으로 업데이트합니다. #42463 (Boris Kuschel).
- Jepsen으로 ClickHouse 서버를 테스트하는 기능을 추가합니다. 참고로, 이미 Jepsen으로 ClickHouse Keeper를 테스트하는 기능은 있습니다. 이 pull request는 이를 복제된 테이블(Replicated Table)까지 확장합니다. #42619 (Antonio Andelic).
- clang-tidy 결과 캐싱을 위해 https://github.com/matus-chochlik/ctcache 를 사용합니다. #42913 (Mikhail f. Shiryaev).
- 수정 이전에는 사용자 정의 설정 파일이 RPM에 의해
$file.rpmsave로 보존되었습니다. 이 PR은 이를 수정하여 패키지가 사용자 파일을 더 이상 덮어쓰지 않도록 합니다. #42936 (Mikhail f. Shiryaev). - Ubuntu Docker 이미지에서 일부 라이브러리를 제거합니다. #42622 (Alexey Milovidov).
버그 수정 (공식 stable 또는 prestable 릴리스에서 사용자에게 노출되는 오동작)
- 별칭 AST를 복제하도록 normaliser를 업데이트했습니다. #42452를 해결합니다. 구현: * QueryNormalizer를 업데이트하여 교체될 때 Alias AST를 복제하도록 했습니다. 이전에는 동일한 객체를 단순히 할당하면서 LogicalExpressinsOptimizer에서 예외가 발생했는데, 동일한 부모가 다시 삽입되기 때문이었습니다. * 이 버그는 새 분석기(allow_experimental_analyzer)에서는 발생하지 않으므로, 이에 대한 변경 사항은 없습니다. 동일한 문제에 대한 테스트를 추가했습니다. #42827 (SmitaRKulkarni).
Lazy데이터베이스 테이블 백업 시 발생할 수 있던 경쟁 조건을 수정했습니다. #43104 (Vitaly Baranov).skip_unavailable_shards가s3Cluster테이블 함수와 함께 동작하지 않던 문제를 수정했습니다. #43131 (chen).s3Cluster의 스키마 추론을 수정하고hdfsCluster를 개선했습니다. #41979 (Kruglov Pavel).- URL 테이블 엔진 / 테이블 함수에서 읽기 시 재시도 로직을 수정했습니다. (재시도 가능한 오류는 필요 이상으로 여러 번 재시도될 수 있었고, 재시도 불가능한 오류는 코드에서 assert 실패를 발생시켰습니다). #42224 (Kseniia Sumarokova).
- DNS 및 c-ares 관련 세그멘테이션 폴트가 보고되었으며 수정되었습니다. #42234 (Arthur Passos).
- PK 분석(단조성 검사) 중에 발생할 수 있는
LOGICAL_ERRORArguments of 'plus' have incorrect data types를 수정합니다. 첫 번째 인자가 상수인 단조 이진 FUNCTION에 대한 잘못된 PK 분석을 수정합니다. #42410 (Nikolai Kochetov). - 키 타입을 널 허용(Nullable)로 사용할 수 없는 경우의 잘못된 키 분석을 수정합니다. 이를 통해 #42456를 해결합니다. #42469 (Amos Bird).
input_format_csv_use_best_effort_in_schema_inference설정을 사용하는 동안 스키마 추론(schema inference) 캐시가 잘못 사용되던 원인이었던 설정 이름의 오타를 수정합니다. #41735 이슈를 닫습니다. #42536 (Kruglov Pavel).- 데이터 형식이 LowCardinality일 때 잘못된 헤더가 설정된 Set이 생성되던 문제를 수정합니다. #42460를 종료합니다. #42579 (flynn).
PREWHERE에서(U)Int128및(U)Int256값이 올바르게 검사되지 않던 문제를 수정했습니다. #42605 (Antonio Andelic).- 세그멘테이션 폴트로 이어질 수 있었던 함수 파서의 버그를 수정했습니다. #42724 (Nikolay Degterinsky).
truncate table의 잠금 처리를 수정합니다. #42728 (flynn).- 파일이 존재하지 않을 때(또는 동일한 오류가 발생할 수 있는
OPTIMIZE TABLE FINAL실행 시)web디스크에서 발생할 수 있던 크래시를 수정했습니다. #42767 (Azat Khuzhin). system.session_log의auth_type매핑을 수정하여 열거형 값에SSL_CERTIFICATE를 포함합니다. #42782 (Miel Donkers).- ASAN 빌드에서
CREATE USER쿼리 파서에서 발생하는 stack-use-after-return 문제를 수정했습니다. #42804 (Nikolay Degterinsky). lowerUTF8/upperUTF8함수에서 문자가 16바이트 경계에 걸쳐 있는 경우(길이가 16바이트를 초과하는 문자열에서 매우 자주 발생하는 경우)를 수정합니다. #42812 (Azat Khuzhin).- LZ4 압축 해제 루틴에 추가 경계 검사를 도입하여 잘못된 입력이 들어왔을 때 발생하던 오동작을 수정했습니다. #42868 (Nikita Taranov).
- 쿼리 취소 시 드물게 발생할 수 있는 멈춤(hang) 현상을 수정합니다. #42874 (Azat Khuzhin).
- hash join에서 여러 개의 분리 조건(disjuncts)이 사용될 때 발생하던 잘못된 동작을 수정하고, #42832를 해결합니다. #42876 (Vladimir C).
- "three table join"에서 SELECT를 수행할 때 널 포인터가 생성되는 문제가 있었습니다. 예를 들어, 다음 SQL 쿼리에서 재현됩니다: #42883 (zzsmdfj).
- Cluster Discovery에서 MemorySanitizer가 보고한 문제를 수정하여 #42763 이슈를 종료했습니다. #42905 (Vladimir C).
- 빈 문자열인 경우의 DateTime 스키마 추론을 개선했습니다. #42911 (Kruglov Pavel).
- projection을 사용할 수 있는 경우지만 실제 projection이 존재하지 않을 때 발생하는 드문 NOT_FOUND_COLUMN_IN_BLOCK 오류를 수정합니다. 이를 통해 #42771을(를) 수정합니다. 이 버그는 https://github.com/ClickHouse/ClickHouse/pull/25563에서 도입되었습니다. #42938 (Amos Bird).
- 테이블에 DATETIME 데이터 타입이 포함된 경우
PostgreSQL데이터베이스 엔진에서 ATTACH TABLE 동작을 수정했습니다. #42817를 해결합니다. #42960 (Kseniia Sumarokova). - lambda 파싱을 수정했습니다. #41848를 해결했습니다. #42979 (Nikolay Degterinsky).
- 하이퍼직사각형의 중간에 널 허용 키가 나타나는 경우 키 분석이 잘못되던 문제를 수정합니다. 이로써 #43111 문제가 해결됩니다. #43133 (Amos Bird).
- 정교하게 구성된 집계 함수 상태의 역직렬화 과정에서 발생할 수 있는 여러 버퍼 과도 읽기(over-read) 문제를 수정합니다. #43159 (Raúl Marín).
- NULL 및 const 널 허용(Nullable) 인자를 사용하는 경우
if함수를 수정합니다. #43069를 해결합니다. #43178 (Kruglov Pavel). - 'best effort' 알고리즘으로 DateTime을 파싱할 때 발생하는 decimal 산술 오버플로를 수정합니다. 이로써 #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). - 정규분포를 따르는 여러 그룹의 관측값에 대해 통계적 검정을 수행하여 모든 그룹의 평균이 동일한지 여부를 판단하는 집계 FUNCTION
analysisOfVariance(anova)가 추가되었습니다. 원본 PR: #37872. #42131 (Nikita Mikhaylov). max_temporary_data_on_disk_size_for_user/max_temporary_data_on_disk_size_for_querysettings를 사용하여 디스크에 저장되는 임시 데이터의 양을 제한할 수 있습니다. #40893 (Vladimir C).- JSONObjectEachRow 포맷에서 객체 이름을 컬럼 값으로 기록/파싱할 수 있도록 설정
format_json_object_each_row_column_for_object_name이 추가되었습니다. #41703 (Kruglov Pavel). - SQL에 BLAKE3 해시 함수가 추가되었습니다. #33435 (BoloniniD).
javaHashFUNCTION이 정수 타입에도 적용되도록 확장되었습니다. #41131 (JackyWoo).- ON CLUSTER DDL에 OpenTelemetry 지원을 추가했습니다 (
distributed_ddl_entry_format_version을 4로 설정해야 합니다). #41484 (Frank Chen). - 시스템 테이블
asynchronous_insert_log가 추가되었습니다. 이 테이블에는 비동기 삽입 작업(내부 상태 분석을 위해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를 해결합니다. 이제 ClickHouse는 평균 파트 크기가 충분히 큰 경우(최소 10 GiB)에는 하나의 파티션 안에 더 많은 파트를 허용합니다. 이를 통해 디스크 셸프나 객체 스토리지를 사용하면 단일 서버의 단일 테이블 내 단일 파티션에 최대 페타바이트 단위의 데이터를 저장할 수 있습니다. #42002 (Alexey Milovidov).
- 필요한 스택 크기를 줄이기 위해 연산자 우선순위 요소 파서를 구현합니다. #34892 (Nikolay Degterinsky).
- DISTINCT in order 최적화에서 데이터 스트림의 정렬 특성을 활용합니다. 이 개선으로, 적용 가능한 경우 DISTINCT에 대해 ORDER BY를 명시하지 않아도 정렬된 순서로 읽기를 수행할 수 있습니다(기존에는 DISTINCT에 포함된 컬럼에 대해 ORDER BY를 제공해야 했습니다). #41014 (Igor Nikonov).
- ColumnVector: AVX512VBMI를 사용하여
UInt8인덱스를 최적화합니다. #41247 (Guo Wangyang). ThreadGroupStatus::mutex에 대한 락 경합을 최적화합니다. ICX 장치(Intel Xeon Platinum 8380 CPU, 80코어, 160스레드)에서 SSB(Star Schema Benchmark)를 사용한 성능 실험 결과, 이 변경으로 모든 서브 케이스에 대한 QPS의 기하평균이 2.95배 향상될 수 있음을 보여줍니다. #41675 (Zhiguo Zhou).- AArch64 빌드에
ldapr기능을 추가합니다. 이는 Graviton 2+, Azure 및 GCP 인스턴스에서 지원됩니다. 비교적 최근에 나온 clang-15에 추가되었습니다. #41778 (Daniel Kutenin). - 문자열 비교에서 한쪽 인자가 빈 상수 문자열인 경우의 성능을 개선합니다. #41870 (Jiebin Sun).
- 일부 경우에 Aggregate State를 공유할 수 있도록 ColumnAggregateFunction의
insertFrom을 최적화합니다. #41960 (flynn). azure_blob_storage디스크에 대한 쓰기를 더 빠르게 합니다(max_single_part_upload_size를 준수하여 각 버퍼 크기마다 블록을 쓰는 대신 이를 사용). 이 비효율성은 #41754에서 언급되었습니다. #42041 (Kseniia Sumarokova).- 낭비를 피하기 위해 프로세스 목록과
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). - Embedded Keeper가 이제 항상 백그라운드에서 시작되므로, 쿼럼을 달성하지 못하더라도 ClickHouse를 시작할 수 있습니다. #40991 (Antonio Andelic).
- 이전 연결이 만료된 경우 ZooKeeper에 대한 새 연결이 더 빠르게 재수립되도록 개선했습니다. 이전에는 기본적으로 1분마다 실행되는 작업이 있었기 때문에, 테이블이 이 기간 동안 읽기 전용(readonly) 상태로 유지될 수 있었습니다. #41092 (Nikita Mikhaylov).
- 이제 프로젝션을 zero-copy 복제(zero-copy replication은 프로덕션 환경용 기능이 아닙니다)와 함께 사용할 수 있습니다. #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를 변경할 수 있도록 허용합니다. 예를 들어, 사용자가 드물게만 데이터를 삽입하고 기본 설정을 조정하기 위해 서버 설정에 접근할 수 없는 경우에 유용합니다. #40668 (Nikita Mikhaylov). - 원격 파일 시스템에서의 읽기 성능을 개선하고, 읽기/쓰기 작업용 스레드 풀 크기를 구성 가능하도록 했습니다. #41070을(를) 해결합니다. #41011 (Kseniia Sumarokova).
- WindowTransform/arratReduce*/initializeAggregation/aggregate 함수 버전 관리에서 모든 콤비네이터 조합을 지원합니다. 이전에는
ForEach/Resample/Map과 같은 콤비네이터가 이들 컨텍스트에서 동작하지 않았으며, 이를 사용하면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).
- 캐시 설정에서
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). - 시스템 테이블에 대한 SELECT 수행 중에 발생했고 무시된 경우에는
system.errors에 "TABLE_IS_DROPPED" 예외를 추가하지 않습니다. #41908 (AlfVII). - 옵션
enable_extended_results_for_datetime_functions를 개선하여toStartOfDay,toStartOfHour,toStartOfFifteenMinutes,toStartOfTenMinutes,toStartOfFiveMinutes,toStartOfMinute,timeSlot함수의 결과를DateTime64타입으로 반환하도록 했습니다. #41910 (Roman Vasin). - 텍스트 형식에서
DateTime타입 추론을 개선했습니다. 이제date_time_input_format설정을 준수하며, 숫자를 타임스탬프로 간주해 DateTime을 추론하지 않습니다. #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의 stale 레플리카 복구 절차가 개선되었습니다. 손실된 레플리카에 정상 레플리카에는 없는 일부 파트가 있지만, 정상 레플리카의 복제 큐에 따르면 이러한 파트가 이후에 생성될 예정인 경우, 손실된 레플리카는 해당 파트를 분리(detach)하지 않고 그대로 유지합니다. #42134 (Alexander Tokmakov).date_diff함수에서Date32인수를 사용할 수 있도록 했습니다. 시작 날짜가 Unix epoch 이전이고 종료 날짜가 Unix epoch 이후인DateTime64인수를 사용할 때date_diff함수에서 발생하던 문제를 수정했습니다. #42308 (Roman Vasin).- 대용량 파트를 Minio에 업로드할 때 'Complete Multipart Upload' 작업이 오래 걸릴 수 있습니다. Minio는 10초마다 하트비트 신호를 전송합니다(https://github.com/minio/minio/pull/7198 참조). 그러나 ClickHouse의 기본 송신/수신 타임아웃이 5초로 설정되어 있기 때문에 ClickHouse에서 더 먼저 타임아웃이 발생합니다. #42321 (filimonov).
- Decimal과 같은 복합 타입을 사용하는 집계 상태 타입에서 드물게 발생하던 잘못된 형변환 문제를 수정합니다. 이로써 #42408 이슈가 해결됩니다. #42417 (Amos Bird).
dateNameFUNCTION에서Date32인수를 사용할 수 있게 했습니다. #42554 (Roman Vasin).- 이제 NULL 리터럴을 포함하는 필터가 인덱스 분석 시 사용됩니다. #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).
빌드/테스트/패키징 개선
- 테이블 정의용 퍼저(fuzzer)를 추가했습니다. #40096 (Anton Popov). 이는 올해 현재까지 ClickHouse 테스트에서 가장 큰 발전입니다.
- ClickHouse Cloud 서비스의 베타 버전이 릴리스되었습니다: https://console.clickhouse.cloud/. ClickHouse를 사용하는 가장 쉬운 방법을 제공합니다(단일 명령 설치보다도 약간 더 간편합니다).
- AST Fuzzer에 WHERE 절 생성 지원을 추가하고, ORDER BY 및 WHERE 절을 추가하거나 제거할 수 있는 기능을 추가했습니다. #38519 (Ilya Yatsishin).
- Aarch64 바이너리는 이제 최소 ARMv8.2(2016년에 릴리스됨)를 필요로 합니다. 특히 ARM LSE, 즉 네이티브 원자적 연산을 사용할 수 있게 됩니다. 또한 더 오래된 ARMv8.0 하드웨어(예: Raspberry Pi 4)용 바이너리를 컴파일할 수 있도록 CMake 빌드 옵션 "NO_ARMV81_OR_HIGHER"가 추가되었습니다. #41610 (Robert Schulze).
- Musl로 ClickHouse를 빌드할 수 있도록 했습니다(이미 지원되었으나 중간에 깨져 있었던 부분을 소규모로 수정). #41987 (Alexey Milovidov).
- 설치 시 파일을 찾을 수 없음 오류만 발생시키기 위해
sed명령을 실행하는 일을 피하고자$CLICKHOUSE_CRONFILE파일 존재 여부 확인을 추가했습니다. #42081 (Chun-Sheng, Li). - 새로운 타임존 변경을 지원하기 위해 cctz를
2022e로 업데이트했습니다. 팔레스타인 전환 시각은 이제 토요일 02:00입니다. 세 개의 우크라이나 타임존을 하나로 단순화했습니다. 요르단과 시리아는 DST가 적용되는 +02/+03에서 연중 +03으로 전환합니다. (https://data.iana.org/time-zones/tzdb/NEWS). 이로써 #42252를 해결했습니다. #42327 (Alexey Milovidov). #42273 (Dom Del Nano). - 예시로 BLAKE3 해시 함수 라이브러리를 사용하여 Rust 코드 지원을 ClickHouse에 추가했습니다. #33435 (BoloniniD).
버그 수정(공식 stable 또는 prestable 릴리스에서 사용자가 볼 수 있는 오동작)
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설정이 활성화된Merge테이블에 대한SELECT실행 시 발생할 수 있는 크래시를 수정합니다. #41269를 수정합니다. #41740 (Nikolai Kochetov).- 일부 파트를 손상된 것으로 표시하여 분리(detach)한 직후 레플리카를 재시작하면 극히 드물게 발생할 수 있었던 "Part ... intersects part ..." 오류를 수정했습니다. #41741 (Alexander Tokmakov).
- 경량한 삭제 기능에 예약된
_row_exists컬럼 이름을 사용하는 MergeTree 테이블에 대해CREATE또는ALTER를 허용하지 않도록 했습니다. #41716 수정. #41763 (Jianmei Zhang). - 일부 HTTP 응답에서 CORS 헤더가 누락되던 문제를 수정합니다. #41792 (Frank Chen).
- 20.3 또는 그 이전 버전에서 생성되었고 한 번도
ALTER된 적이 없는ReplicatedMergeTree테이블은 22.9에서 시작 시 실패할 수 있는 문제가 있었으며, 이 릴리스에서 수정되었습니다. #41742를 수정합니다. #41796 (Alexander Tokmakov). - 일괄 전송이 어떤 이유로든 실패하면 자동으로 복구되지 않으며, 제때 처리되지 않으면 데이터가 누적되고 출력되는 오류 메시지가 점점 길어져
http스레드가 블로킹되는 문제가 발생합니다. #41813 (zhongyuankai). - 압축된 마크(compressed marks) 설정이 활성화된 compact 파트를 수정합니다. #41783 및 #41746를 해결합니다. #41823 (alesapin).
- 이전 버전의 복제 데이터베이스(Replicated database)에는 [Zoo]Keeper에 특수 마커가 존재하지 않습니다. 특수 마커 대신 노드에 알 수 없는 일부 데이터가 포함되어 있는지만 확인해야 합니다. #41875 (Nikita Mikhaylov).
- fs 캐시에서 발생할 수 있던 예외를 수정했습니다. #41884 (Kseniia Sumarokova).
- s3 테이블 함수의
use_environment_credentials설정을 수정합니다. #41970 (Kseniia Sumarokova). - 손상된 파트를 detach할 때 발생하여
ReplicatedMergeTree테이블이 복제를 시작하지 못하게 만들 수 있던 「Directory already exists and is not empty」 오류를 수정했습니다. #40957을(를) 수정합니다. #41981 (Alexander Tokmakov). toDateTime64함수가 이제 음의 정수 및 부동소수점 인수를 사용할 때도 동일한 출력을 반환합니다. #42025 (Robert Schulze).azure_blob_storage로의 쓰기 기능을 수정하여 #41754 이슈를 부분적으로 해결했습니다. #42034 (Kseniia Sumarokova).- 일부
bzip2파일에서 발생하는bzip2디코딩 문제를 수정합니다. #42046 (Nikolay Degterinsky). - 설정 "enable_extended_results_for_datetime_functions = 1"이 활성화된 경우 확장 범위의 시작 지점(1900년 1월)에서 SQL 함수
toLastDayOfMonth동작을 수정합니다. - 설정 "enable_extended_results_for_datetime_functions = 1"이 활성화된 경우 확장 범위의 끝 지점(2299년 12월)에서 SQL 함수 "toRelativeWeekNum()" 동작을 수정합니다. - 불필요한 인덱스 산술 연산을 피하여 SQL 함수 "toISOYear()", "toFirstDayNumOfISOYearIndex()", "toYearWeekOfNewyearMode()"의 성능을 개선합니다. #42084 (Roman Vasin). - 각 테이블에 대한 fetch 최대 크기가 실수로 8로 설정되어, 풀 크기는 그보다 더 클 수 있었습니다. 이제 테이블에 대한 fetch 최대 크기는 풀 크기와 동일합니다. #42090 (Nikita Mikhaylov).
- 테이블 간 종속성을 깨뜨리지 않고 드롭할 수 있는지 확인하는 과정에서 테이블이 중지되거나 딕셔너리가 detach될 수 있었던 문제가 수정되었습니다. #41982를 수정합니다. #42106 (Alexander Tokmakov).
- filesystem cache 사용 시
remote_filesystem_read_method=read의 심각한 비효율성을 수정합니다. #42125를 해결합니다. #42129 (Kseniia Sumarokova). - use_hedged_requests = 0인 경우 분산 쿼리에서 발생할 수 있던 timeout 예외를 수정합니다. #42130 (Azat Khuzhin).
Date32타입과 함께 사용될 때runningDifference함수 내부에서 발생하던 경미한 버그를 수정했습니다. 이전에는Date가 사용되어Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<unsigned short>'와 같은 논리 오류가 발생할 수 있었습니다. #42143 (Alfred Xu).- 베이스 백업에서 4GB를 초과하는 파일을 재사용할 때 발생하던 문제를 수정했습니다. #42146 (Azat Khuzhin).
- 정렬 키의 첫 번째 컬럼에 함수가 포함되어 있으면 ORDER BY에서 DISTINCT를 사용할 때 LOGICAL_ERROR가 발생합니다. #42186 (Igor Nikonov).
- 프로젝션과
aggregate_functions_null_for_empty설정에 관련된 버그를 수정합니다. 이 버그는 발생 빈도가 매우 낮으며, 서버 구성에서aggregate_functions_null_for_empty설정을 활성화한 경우에만 나타납니다. #41647을(를) 해결합니다. #42198 (Alexey Milovidov). Buffer테이블에서 내림차순(ORDER BY ... DESC)으로 읽을 때의 동작을 수정했습니다. #42236 (Duc Canh Le).background_pool_size setting이 기본 프로파일에 설정되어 있지만background_merges_mutations_concurrency_ratio는 설정되어 있지 않을 때 ClickHouse가 시작되지 않는 버그를 수정합니다. #42315 (nvartolomei).- 테이블 스키마와 컬럼 구성이 다른 attached part에 대해
ALTER UPDATE를 수행하면 디스크에 잘못된columns.txt메타데이터가 생성될 수 있습니다. 이러한 part를 읽으면 오류가 발생하거나 잘못된 데이터를 반환할 수 있습니다. #42161 문제를 수정합니다. #42319 (Nikolai Kochetov). additional_table_filtersSETTING이Distributed스토리지에 적용되지 않는 문제가 있었습니다. #41692를 수정했습니다. #42322 (Nikolai Kochetov).- 쿼리 종료/취소 시 발생할 수 있는 데이터 레이스를 수정합니다. 이를 통해 #42346를 해결합니다. #42362 (Alexey Milovidov).
- 날짜/시간 함수에서 회귀(regression) 문제를 일으킨 #40217 변경을 되돌립니다. #42367 (Alexey Milovidov).
- 거짓 조건이 있는 JOIN에서 발생하는 assert cast 문제를 수정하고, #42380 이슈를 종료했습니다. #42407 (Vladimir C).
- Decimal 데이터 타입 처리 시 발생하던 버퍼 오버플로우를 수정합니다. 이로써 #42451을(를) 해결합니다. #42465 (Alexey Milovidov).
AggregateFunctionQuantile이 이제UInt128컬럼에서도 올바르게 동작합니다. 이전에는 quantile 상태가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_nullableSETTING 값의 영향을 받지 않습니다). 이 함수들은 문서화되지 않았고, 테스트되지 않았으며, 사용되지 않았고, 필요하지도 않았습니다. 코드 일반화 과정에서 우연히 남아 있었습니다. #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 server에 내장 대시보드를 추가했습니다. 이는 ClickHouse 기능을 활용해 1%의 노력으로 90%의 결과를 얻는 방법을 보여주는 데모 프로젝트입니다. #40461 (Alexey Milovidov).
- 새로운 settings 제약 조건 쓰기 가능 유형
changeable_in_readonly를 추가했습니다. #40631 (Sergei Trifonov). INTERSECT DISTINCT및EXCEPT DISTINCT를 지원합니다. #40792 (Duc Canh Le).- 새로운 입력/출력 포맷
JSONObjectEachRow를 추가했습니다. 포맷JSON/JSONCompact/JSONColumnsWithMetadata의 가져오기를 지원합니다. 메타데이터의 데이터 타입이 헤더의 데이터 타입과 일치하는지 확인할지 여부를 제어하는 새로운 settinginput_format_json_validate_types_from_metadata를 추가했습니다. 또한 새로운 settinginput_format_json_validate_utf8를 추가했으며, 이 setting이 활성화되면 모든JSON포맷이 UTF-8 시퀀스를 검증합니다. 기본값은 비활성화입니다. 이 setting은 출력 포맷JSON/JSONCompact/JSONColumnsWithMetadata에는 영향을 주지 않으며, 이 포맷들은 항상 UTF-8 시퀀스를 검증합니다(호환성 때문에 예외적으로 항상 검증함). 또 String 컬럼에서 숫자를 파싱할 수 있도록 하는 새로운 settinginput_format_json_read_numbers_as_strings를 추가했으며, 기본값은 비활성화입니다. 소수(Decimal)를 큰따옴표로 감싸서 출력할 수 있도록 하는 새로운 settingoutput_format_json_quote_decimals를 추가했으며, 기본값은 비활성화입니다. 데이터 가져오기 시 큰따옴표로 감싸진 소수를 파싱하는 것도 허용합니다. #40910 (Kruglov Pavel). - DESCRIBE TABLE 쿼리에서 쿼리 파라미터를 지원합니다. #40952 (Nikita Taranov).
- Parquet Time32/64를 DateTime64로 변환하여 지원합니다. Parquet time32/64는 자정 이후 경과한 시간을 나타내고, DateTime32/64는 실제 유닉스 타임스탬프를 나타냅니다. 변환은 단순히
0으로부터의 오프셋을 더하는 방식으로 수행됩니다. #41333 (Arthur Passos). - Apache Datasketches에 대한 Set 연산을 구현했습니다. #39919 (Fangyuan Deng). 참고: Apache Datasketches는 ClickHouse보다 성능이 떨어지므로, 다른 시스템과의 통합 목적이 아닌 경우 사용할 이유가 거의 없습니다.
- 텍스트 포맷(
CSV,TSV)을 읽는 동안 지정된 파일에 오류를 기록하도록 지원합니다. #40516 (zjial).
실험적 기능
Annoy기반 ANN (approximate nearest neighbor) 인덱스를 추가합니다. #40818 (Filatenkov Artur). #37215 (VVMak).- ClickHouse Keeper 또는 ZooKeeper를 키-값 저장소로 사용하는 새로운 스토리지 엔진
KeeperMap을 추가합니다. #39976 (Antonio Andelic). 이 스토리지 엔진은 소량의 메타데이터를 저장하기 위한 것입니다. - 메모리 내 데이터 파트에 대한 개선: 완전히 처리된 WAL 파일을 제거합니다. #40592 (Azat Khuzhin).
성능 향상
- 마크와 기본 키에 대한 압축을 구현했습니다. #34437 이슈를 종료했습니다. #37693 (zhongyuankai).
- thread pool을 사용해 마크를 미리 로드할 수 있도록 했습니다. 설정
load_marks_asynchronously(기본값: 0)으로 제어합니다. #40821 (Kseniia Sumarokova). - S3 기반 가상 파일 시스템은 AWS에서의 성능을 향상하기 위해 여러 경로 접두사로 분산된 무작위 객체 이름을 사용하도록 변경되었습니다. #40968 (Alexey Milovidov).
- 단일 단계 집계 결과를 생성할 때
max_block_size값을 고려하도록 했습니다. 이를 통해 이후 쿼리 플랜 단계를 더 많은 스레드를 사용해 실행할 수 있습니다. #39138 (Nikita Taranov). - 집계에서 소프트웨어 프리페치(prefetching)를 사용하여 해시 테이블 연산 속도를 높입니다. 설정
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 블록마다 스토리지 스냅샷을 얻지 않도록 하여 성능을 약간 향상시켰습니다. #40638 (Azat Khuzhin).
- 여러 널 허용 인수를 받는 집계 함수에 대한 배치 처리를 구현했습니다. #41058 (Raúl Marín).
- UniquesHashSet 읽기 성능을 향상했습니다(예: 디스크에서
uniqState를 읽을 때). #41089 (Raúl Marín). - 컬럼 수가 매우 많은 테이블에서 compact 파트에 대한 뮤테이션을 실행할 때 발생하던 높은 메모리 사용량 문제를 수정했습니다. #41122 (lthaooo).
- ARM 아키텍처에서 vectorscan 라이브러리를 활성화하여 정규식(regexp) 평가를 더 빠르게 수행할 수 있습니다. #41033 (Robert Schulze).
- vectorscan을 5.4.8 버전으로 업그레이드하여 정규식(regexp) 평가를 더 빠르게 하기 위한 다양한 성능 최적화를 포함했습니다. #41270 (Robert Schulze).
- 매우 높은 동시성 수준에서 VFS(S3 등)에 대해 로컬 파일 시스템 캐시를 건너뛰는 잘못된 폴백이 발생하던 문제를 수정합니다. #40420 (Kseniia Sumarokova).
- ROW POLICY 필터가 항상 false인 경우, 어떠한 데이터도 읽지 않고 즉시 빈 결과를 반환합니다. 이 변경으로 #24012가 해결되었습니다. #40740 (Amos Bird).
- Float 데이터 타입에 대한 병렬 해시 JOIN의 성능이 최적이 아닐 수 있어 이를 개선했습니다. #41183 (Alexey Milovidov).
개선 사항
- 시작 시와 ATTACH 호출 시에는 ZooKeeper 연결이 이루어지고 초기 설정이 완료될 때까지
ReplicatedMergeTree테이블이 읽기 전용 상태로 유지됩니다. #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에서 수행됩니다. FUNCTIONmodelEvaluate()는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 API 호출별로 분리된 상세 S3 프로파일링 이벤트
DiskS3*. #41532 (Sergei Trifonov). system.asynchronous_metrics에NumberOfDetachedParts,NumberOfDetachedByUserParts두 개의 새로운 메트릭이 추가되었습니다. #40779 (Sema Checherinda).- ODBC 및 JDBC 테이블에서 CONSTRAINT를 사용할 수 있도록 지원합니다. #34551 (Alexey Milovidov).
- 원본 쿼리에
SETTINGS가 여러 번 나타나지 않은 경우, 쿼리 포매팅 시SETTINGS를 한 번만 출력하도록 했습니다. #38900 (Raúl Marín). - 스레드 간 OpenTelemetry 트레이싱 컨텍스트 전파를 개선합니다. #39010 (Frank Chen).
- ClickHouse Keeper:
interserver_listen_host가 지정된 경우에만 Keeper에서 해당 리스너를 추가합니다. #39973 (Antonio Andelic). - 오류 발생 후 복제된 사용자 액세스 스토리지의 복구 동작을 개선했습니다. #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로 파싱할 수 있도록 허용합니다. 이는 #36949에서 제안된 개선 사항을 구현한 것입니다. #40474 (Alexey Milovidov).2022-08-22 01:02:03.456와 같은DateTime64형식의String값을Date및Date32로 변환하는 것을 허용합니다.2022-08-22 01:02:03와 같은 DateTime 형식의 String 값을Date32로 변환하는 것도 허용합니다. 이로써 #39598 이슈를 해결합니다. #40475 (Alexey Milovidov).- Parquet 포맷에서 중첩 데이터 구조 지원이 개선되었습니다 #40485 (Arthur Passos).
- Avro에서 Array(Record)를 평탄화된 Nested 테이블로 읽는 기능을 지원합니다. #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의 대화형 모드에서.및/를 입력하면 「마지막 명령을 실행」하는 것으로 해석됩니다. #40750 (Robert Schulze). - MySQL 데이터베이스 엔진과 MySQL 테이블 함수에서 MySQL 타임아웃을 전달하지 못하던 문제를 수정했습니다. #34168를 해결했습니다. #40751 (Kseniia Sumarokova).
- 파일 시스템 캐시 디렉터리에 상태 파일을 생성하여 서로 다른 서버나 캐시 간에 캐시 디렉터리가 공유되지 않도록 합니다. #40820 (Kseniia Sumarokova).
EmbeddedRocksDB스토리지에서DELETE및UPDATE를 지원하도록 했습니다. #40853 (Antonio Andelic).- ClickHouse Keeper: 긴 커밋 동안 비정상 종료되던 문제를 수정하고 허용되는 요청 크기를 늘렸습니다. #40941 (Antonio Andelic).
- WriteBufferFromS3의 레이스 컨디션을 수정하고 TSA 어노테이션을 추가합니다. #40950 (Kseniia Sumarokova).
- group_by_use_nulls를 사용하는 grouping sets에서는 키 컬럼만 널 허용 컬럼으로 변환되도록 해야 합니다. #40997 (Duc Canh Le).
- 분산 테이블에서 INSERT 작업의 관측성을 개선합니다. #41034 (Frank Chen).
- S3 상호 작용을 위한 저수준 메트릭을 추가로 제공합니다. #41039 (mateng915).
- HTTP 리디렉트 후
Location헤더에서 상대 경로를 지원합니다. #40985를 해결했습니다. #41162 (Kruglov Pavel). - 서버를 재시작하지 않고 HTTP 핸들러 변경 사항을 실시간으로 적용할 수 있습니다. #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).
- 각 프로파일 이벤트 카운터에 대해 문서가 반드시 존재하도록 했습니다. 누락된 항목에는 문서를 추가했습니다. #40646 (Alexey Milovidov).
- 일부 종속성을 정리하여 최소한의
clickhouse-local빌드를 가능하게 했습니다. #40460 (Alexey Milovidov). 크기는 50 MiB 미만입니다. - 테스트에서 SQL 함수 커버리지를 측정하고 보고합니다. #40593. #40647 (Alexey Milovidov).
- 모든 MergeTree 설정에 대한 문서 작성을 의무화했습니다. #40648 (Alexey Milovidov).
- 고수준 통합 서버 컴포넌트에 대한 내장형 레퍼런스 문서 프로토타입입니다. #40649 (Alexey Milovidov).
- 변경된 성능 테스트의 모든 쿼리를 확인하여, 변경된 모든 쿼리가 실제로 테스트되었는지 확인합니다. #40322 (Nikita Taranov).
- TGZ 패키지를 수정했습니다. #40681 (Mikhail f. Shiryaev).
- 디버그 심볼을 수정했습니다. #40873 (Azat Khuzhin).
- CI 구성을 확장하여 x86 SSE2 전용 빌드를 생성하도록 했습니다. 구형 또는 임베디드 하드웨어에 유용합니다. #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 바이너리에서는
dlopen을 허용하지 않습니다. 이는 해롭고 보안에 취약하기 때문입니다. ClickHouse에서는dlopen을 사용하지 않습니다. 다만 일부 라이브러리는 「플러그인(plugins)」 구현을 위해 이를 사용할 수 있습니다. 프로세스 주소 공간에 제3자가 제공하는 통제되지 않은 위험한 라이브러리를 로드하는 이와 같은 오래된 기법은 매우 위험한 방식이므로, 이러한 사용을 강력히 지양합니다. #41429 (Alexey Milovidov). - deb 패키지에
source필드를 추가하고nfpm을 업데이트했습니다. #41531 (Mikhail f. Shiryaev). - 내부 DWARF 파서에 DWARF-5 지원을 추가했습니다. #40710 (Azat Khuzhin).
- 테스트를 위해 ZooKeeper 클라이언트에 결함 주입(fault injection)을 추가했습니다 #30498 (Alexander Tokmakov).
- 디버그 및 tsan 모드에서 S3 스토리지를 사용하는 stateless 테스트를 추가했습니다 #35262 (Kseniia Sumarokova).
- S3를 대상으로 한 스트레스 테스트 시도 #36837 (alesapin).
clang-tidy에서concurrency-mt-unsafe를 활성화했습니다 #40224 (Alexey Milovidov).
버그 수정
- AWS SDK의 버그로 인해 발생할 수 있는 잠재적인 데이터 손실을 수정했습니다. 이 버그는 S3를 통해 ClickHouse를 사용할 때에만 발생할 수 있습니다. #40506 (alesapin). 이 버그는 AWS SDK에서 5년 동안 미해결 상태였으며, 이 문제를 보고한 이후에야 종료되었습니다.
- Native 포맷의 악의적인 데이터가 프로세스를 비정상 종료시킬 수 있습니다. #41441 (Alexey Milovidov).
- 집계 함수
categorialInformationValue의 속성이 잘못 정의되어 있어 런타임에 null 포인터 역참조가 발생할 수 있었습니다. 이로써 #41443이(가) 해결되었습니다. #41449 (Alexey Milovidov). - Apache
ORC포맷으로 데이터를 쓸 때 버퍼 오버런이 발생할 수 있는 문제가 있었습니다. #41458 (Alexey Milovidov). Array of Nullable가 인수로 사용되는 경우encrypt및contingencyFUNCTION에서 발생하는 메모리 안전 문제를 수정했습니다. 이로써 #41004가 해결되었습니다. #40195 (Alexey Milovidov).- 'not_processed'가 null이 아닌 경우 MergeJoin에서 발생하는 버그를 수정합니다. #40335 (liql2007).
- IN 연산자에서 소수 정밀도 손실로 인해 잘못된 결과가 발생하던 문제를 수정했습니다. 관련 이슈: #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_depthsetting으로 하나의 쿼리에 대한 분석 횟수를 제한합니다. 이를 통해 매우 많은 수의 서브쿼리를 포함한 쿼리에서 분석 시간이 지수적으로 폭증하는 것을 방지합니다. #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 테이블 엔진에서 압축을 활성화했을 때 데이터 쓰기 시 발생하던 세그멘테이션 폴트(segmentation 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: 스냅샷이 설치되는 동안 로그에 접근할 때 발생할 수 있는 레이스 컨디션(race condition)을 수정했습니다. #40627 (Antonio Andelic).
toFixedStringFUNCTION의 short-circuit 실행 방식을 수정합니다. #40622 이슈를 부분적으로 해결합니다. #40628 (Kruglov Pavel).- SQLite의 int8 컬럼이 ClickHouse의 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).
- 쿼리 컨텍스트 없이 Kafka 등에서 MV(구체화된 뷰)로 데이터를 푸시할 때 발생하던 메모리 누수 문제를 수정합니다. #40732 (Azat Khuzhin).
- CSV에서 스키마 추론 수행 시 발생할 수 있는 「Attempt to read after eof」 오류를 수정합니다. #40746 (Kruglov Pavel).
- 라이트스루(write-through) 캐시의 논리 오류 "File segment completion can be done only by 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 replication)에서 데이터 손실이 발생할 수 있는 극히 드문 버그를 수정합니다. #40844 (alesapin).
- 서로 다른 컬럼에서 생성된 동일한 Set 표현식을 처리할 때 키 조건 분석 과정에서 크래시가 발생하던 문제를 수정합니다. #40850 (Duc Canh Le).
- 중첩 JSON 객체에 대한 스키마 추론을 수정했습니다. #40851 (Kruglov Pavel).
- 비어 있을 경우 삭제되지 않던 파일시스템 캐시 파일용 3자리 접두사 디렉터리 처리를 수정합니다. #40797를 해결합니다. #40867 (Kseniia Sumarokova).
- 레플리카 연결 실패 시 처리되지 않은 DNS_ERROR를 수정합니다. #40881 (Robert Coelho).
- 서브쿼리에서 불필요한 컬럼을 제거할 때 발생하던 버그를 수정했습니다. #40884 (luocongkai).
- 원격 읽기 버퍼에서 불필요하게 발생하던 메모리 할당을 수정합니다. #40896 (Kseniia Sumarokova).
- 데이터베이스 삭제 권한이 명시적으로 회수(revoke)된 사용자도 여전히 데이터베이스를 삭제할 수 있었던 문제를 수정했습니다. #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에 대한 잘못된 파서 로직을 제거하여 nullptr 역참조가 발생할 수 있는 문제를 방지합니다. #41049 (Duc Canh Le).- ClickHouse Keeper 수정: Keeper 종료 시 발생할 수 있는 세그폴트(segfault)를 수정했습니다. #41075 (Antonio Andelic).
- 집계 함수 조합자에서 발생할 수 있는 세그멘테이션 폴트, heap-use-after-free, 메모리 누수를 수정합니다. #40848 이슈를 해결합니다. #41083 (Kruglov Pavel).
- Window 뷰와 함께 사용할 때 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).
- 빈 블록인 경우(
optimize_aggregation_in_order및join_algorithm=auto사용 시 발생할 수 있음) SortedBlocksWriter에서 발생하는 SIGSEGV를 수정합니다. #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).
- 손상된 detached 파트를 백그라운드에서 정리하는 기능을 수정했습니다. #41190 (Kseniia Sumarokova).
WHERE절이 있는 다수의 CROSS 조인이 포함된 경우 지수적 시간 복잡도로 수행되던 쿼리 재작성 문제를 수정합니다. #21557. #41223 (Vladimir C).- 모든 유형의 예외를 적절하게 처리하지 못해 발생할 수 있었던 write-through 캐시의 논리 오류를 수정합니다. #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).- 구성 파일에
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타입 컬럼에 잘못된 데이터를 넣으면 발생할 수 있던 크래시를 수정했습니다. 이는 비동기 삽입의 모든 배치에 포함된 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절이 무시되었습니다. 이로 인해DROP PARTITION ON CLUSTER가Replicated에서 예상치 못한 방식으로 동작했습니다. 이 문제가 수정되어 이제는 데이터베이스 수준에서 복제되는 쿼리에 대해서만ON CLUSTER절이 무시됩니다. #41299 문제를 수정했습니다. #41390 (Alexander Tokmakov). - 쿼리 취소(
KILL QUERY또는 서버 종료) 시 발생할 수 있는 멈춤/교착 상태 문제를 수정합니다. #41467 (Azat Khuzhin). - JBOD 기능 사용 시 서버가 크래시될 수 있는 문제를 수정합니다. #41365를 해결합니다. #41483 (Amos Bird).
- 널 허용 고정 길이 문자열에서 문자열로의 변환을 수정했습니다. #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에 항상 거짓인 조건이 있을 때 발견되었습니다. #41383을(를) 수정합니다. #41588 (Nikolai Kochetov).
ClickHouse 22.8 릴리스, 2022-08-18. 발표 자료, 동영상
하위 호환성이 없는 변경 사항
Date32와DateTime64의 범위를 확장하여 1900년부터 2299년까지의 날짜를 지원합니다. 이전 버전에서는 1925년부터 2283년까지만 지원되었습니다. 구현에서는 율리우스력에서 그레고리력으로의 역사적 전환을 반영하지 않고, ISO 8601:2004 (절 3.2.1 The Gregorian calendar)에 부합하는 프로렙틱 그레고리력(proleptic Gregorian calendar)을 사용합니다. 이 변경으로 범위를 벗어난 인수에 대한 구현 의존적인 동작이 달라집니다. 예를 들어 이전 버전에서는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'와 같이 쿼리 매개변수를 설정할 수 있으며, 네이티브 프로토콜을 통해 settings로 전달할 수 있습니다. #39906 (Nikita Taranov). - 네이티브 프로토콜에서 QUOTA 키를 설정할 수 있습니다. (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()테이블 함수에 대해 settings를 지정할 수 있는 기능을 추가했습니다. #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」)에서 제공되는 하드웨어 가속기입니다. 이 가속기의 목적은 데이터 압축/압축 해제 및 필터링과 같은 분석의 공통 연산을 가속하는 것입니다. ClickHouse에는 Intel® IAA 오프로딩(offloading) 기술을 활용하여 고성능 DEFLATE 구현을 제공하는 새로운 "DeflateQpl" 압축 코덱이 추가되었습니다. 이 코덱은 하드웨어 가속기에 대한 액세스를 추상화하고, 하드웨어 가속기를 사용할 수 없는 경우 소프트웨어 폴백(fallback)을 제공하는 Intel® Query Processing Library (QPL)을 사용합니다. DEFLATE는 일반적으로 ClickHouse의 기본 LZ4 코덱보다 더 높은 압축률을 제공하므로, 그 결과 디스크 I/O가 감소하고 주 메모리 사용량이 줄어듭니다. #36654 (jasperzhu). #39494 (Robert Schulze).
ORDER BY가 있는DISTINCT: 입력 스트림의 정렬 설명을 기반으로 정렬 방식을 유추하고, 입력 스트림이 이미 정렬되어 있는 경우 정렬을 건너뜁니다. #38719 (Igor Nikonov). 메모리 사용량과 쿼리 실행 시간을 크게 개선하고,DISTINCT컬럼이ORDER BY컬럼과 일치하는 경우 최종 DISTINCT에DistinctSortedChunkTransform을 사용하되,EXPLAIN PIPELINE에서는 이름을DistinctSortedStreamTransform으로 변경합니다 → 이로 인해 메모리 사용량이 크게 개선되며,DistinctSortedChunkTransform의 핫 루프에서 불필요한 할당을 제거합니다. #39432 (Igor Nikonov). 정렬 설명이 DISTINCT 컬럼에 적용 가능한 경우에만DistinctSortedTransform을 사용하고, 그렇지 않으면 일반 DISTINCT 구현을 사용하도록 합니다. 이렇게 하면DistinctSortedTransform실행 중 수행해야 하는 검사 수를 줄일 수 있습니다. #39528 (Igor Nikonov). 수정:DistinctSortedTransform이 정렬의 이점을 활용하지 못하고 있었습니다.clearing_columns가 잘못 감지되어(항상 비어 있음) HashSet을 전혀 비우지 않았습니다. 따라서 사실상 일반DISTINCT(DistinctTransform)처럼 동작했습니다. 이 수정으로 메모리 사용량이 크게 줄어듭니다. #39538 (Igor Nikonov).cluster및 유사한 테이블 FUNCTION을 실행할 때 원격 테이블의 구조를 가져오기 위해 로컬 노드를 우선적으로 사용합니다. #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가 없으면 AST를 탐색하지 않습니다. #40069 (Raúl Marín). CurrentMemoryTracker의 메모리 할당 및 해제를 최적화합니다. #40078 (Raúl Marín).
- Base58 인코딩/디코딩 기능이 개선되었습니다. #39292 (Andrey Zvonov).
- SSE/AVX/AVX512에서 사용하는 bytes-to-bits 마스크 변환을 개선합니다. #39586 (Guo Wangyang).
개선 사항
AggregateFunction타입과 상태 표현을 정규화합니다. #35788과 같은 최적화로 인해count(not null columns)가count()로 처리되며, 이 때문에 다음과 같은 오류와 함께 distributed interpreter에서 혼동이 발생할 수 있습니다: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쿼리는 먼저 이니시에이터에서 정규화될 수 있습니다. 이는 쿼리에 지정된 클러스터에 이니시에이터가 속해 있지 않으면ON CLUSTER쿼리가 동작하지 않을 수 있음을 의미합니다. #37318, #39500 문제를 수정합니다. 데이터베이스가Replicated이고 클러스터 이름이 데이터베이스 이름과 동일하면ON CLUSTER절을 무시합니다. #35570와 관련이 있습니다.Replicated데이터베이스 엔진에 대한 기타 사소한 수정 사항이 포함됩니다.Replicated데이터베이스 시작 시 메타데이터 일관성을 검사하고, 로컬 메타데이터와 Keeper 내 메타데이터가 불일치하면 레플리카 복구를 시작합니다. #24880 문제를 해결합니다. #37198 (Alexander Tokmakov).- progress 보고용 헤더인
X-ClickHouse-Summary에 result_rows와 result_bytes를 추가합니다. #39567 (Raúl Marín). - MergeTree 기본 키 분석을 개선합니다. #25563 (Nikolai Kochetov).
timeSlots가 이제 DateTime64를 지원합니다. DateTime64를 사용할 때 초 이하 단위의 duration과 slot size를 사용할 수 있습니다. #37951 (Andrey Zvonov).EmbeddedRocksDB테이블에 대한LEFT SEMI및LEFT ANTI직접 조인 지원을 추가했습니다. #38956 (Vladimir C).- fsync 연산에 대한 프로파일 이벤트를 추가합니다. #39179 (Azat Khuzhin).
- 일반 FUNCTION
file(path[, default])에 두 번째 인수를 추가해, 파일이 존재하지 않을 때 함수가 반환할 값을 지정할 수 있게 했습니다. #39218 (Nikolay Degterinsky). - HTTP를 통한 읽기 기능에 몇 가지 작은 수정이 이루어져, 응답이 200 OK인 경우에도 부분 콘텐츠를 재시도할 수 있게 되었습니다. #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).
- 외부 집계가 활성화되어 있을 때 집계 프로젝션을 생성하지 못하던 문제를 수정합니다. 이 문제는 드물게 발생하고 설정을 변경하는 간단한 우회 방법으로도 해결할 수 있으므로 개선 사항으로 분류합니다. 이 수정은 #39667을 해결합니다. #39671 (Amos Bird).
Map(맵) 타입 인자를 사용하는 해시 함수 실행을 허용합니다. #39685 (Anton Popov).- 스택 트레이스에서 주소를 숨기는 설정 파라미터를 추가합니다. 보안을 약간 향상시킬 수 있지만, 일반적으로는 오히려 해가 될 수 있으므로 사용을 권장하지 않습니다. #39690 (Alexey Milovidov).
- 중첩 함수의 데이터 메모리 세그먼트가 정렬되도록
AggregateFunctionDistinct의 prefix 크기를 변경했습니다. #39696 (Pxl). clickhouse-diagnostic도구에 전달되는 자격 증명이 적절히 이스케이프되도록 했습니다. #39707 (Dale McDiarmid).- ClickHouse Keeper 개선 사항: 종료 시 스냅샷을 생성합니다. 설정 옵션
keeper_server.create_snapshot_on_exit으로 제어할 수 있으며, 기본값은true입니다. #39755 (Antonio Andelic). row_policy_filter및additional_filter에 대한 기본 키 기반 분석을 지원합니다. 또한 #37454와 같은 문제를 해결하는 데도 도움이 됩니다. #39826 (Amos Bird).- Play UI의 사용성 문제 두 가지를 수정합니다. - 불필요한 border radius 및 margin 때문에 iPad에서 픽셀 단위로 정확하지 않았던 문제; - 첫 번째 쿼리 이후에는 진행 상태 표시가 나타나지 않던 문제. #39957를 해결합니다. #39960를 해결합니다. #39961 (Alexey Milovidov).
- Play UI: 행 번호를 추가하고, 클릭 시 셀 선택을 지원하며, 테이블 셀에 히스테리시스를 적용합니다. #39962 (Alexey Milovidov).
- Play UI: textarea에서 Tab 키 입력을 처리하되, 동시에 탭 이동 기능은 방해하지 않도록 합니다. #40053 (Alexey Milovidov).
- 클라이언트에서 서버 측 경과 시간을 표시하도록 했습니다. 이는 원격 데이터센터에서 ClickHouse 서비스의 성능을 비교하는 데 중요합니다. 이로써 #38070 이슈가 종료되었습니다. 도입 배경은 이 스크립트를 참고하십시오. #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각각에 대해 별도 카운터). 예를 들어read_overflow_mode = 'break'와 함께max_rows_to_read를 설정한 경우,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).
- 함수 multi(Fuzzy)Match(Any|AllIndices|AnyIndex)()를 사용할 때 패턴 캐시의 메모리 사용량이 지속적으로 증가하는 현상을 방지했습니다. #40264 (Robert Schulze).
빌드/테스트/패키징 개선 사항
- ClickFiddle: 읽기/쓰기 모드에서 ClickHouse 버전들을 테스트할 수 있는 새로운 도구입니다 (Igor Baliuk).
- ClickHouse 바이너리가 self-extracting 형식으로 제공되도록 변경되었습니다 #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의 엔디언(Endian) 문제를 수정했습니다. #39656 (Harry Lee). 현재 ClickHouse에서 지원하지 않는 s390x 아키텍처와 관련된 SipHash 코드 일부를 구현했습니다. #39732 (Harry Lee). 현재 ClickHouse에서 지원하지 않는 s390x 아키텍처용 Coordination 스냅샷 코드의 엔디언(Endian) 문제를 수정했습니다. #39931 (Harry Lee). 현재 ClickHouse에서 지원하지 않는 s390x 아키텍처용 Codec 코드의 엔디언(Endian) 문제를 수정했습니다. #40008 (Harry Lee). 현재 ClickHouse에서 지원하지 않는 s390x 아키텍처에서 ReadHelpers 및 WriteHelpers 코드가 BigEndian 바이너리 데이터를 읽기/쓰기를 수행할 때 발생하는 엔디언(Endian) 문제를 수정했습니다. #40179 (Harry Lee).
clang-16(trunk)로 빌드를 지원합니다. 이로써 #39949가 해결됩니다. #40181 (Alexey Milovidov).- CI에서 실행할 수 있도록 RISC-V 64 빌드를 준비했습니다. 이는 #40141 이슈를 위한 변경입니다. #40197 (Alexey Milovidov).
- 함수 등록 매크로 인터페이스(
FUNCTION_REGISTER*)를 간소화하여 registerFunctions.cpp에서 extern 함수를 추가하고 호출하는 단계를 없앴으며, 이로써 새로운 함수의 증분 빌드 속도도 빨라졌습니다. #38615 (Li Yin). - Docker: 이제 Docker 이미지의 entrypoint.sh가 multidisk 설정용 config에서 찾은 모든 폴더에 대해
chown명령을 생성해 실행합니다 #17717. #39121 (Nikita Mikhaylov).
버그 수정
CapnProto입력 포맷에서 발생할 수 있는 세그멘테이션 폴트(segfault)를 수정했습니다. 이 버그는 kiojj가 ClickHouse 버그 바운티 프로그램을 통해 발견하여 제보했습니다. #40241 (Kruglov Pavel).- 매우 드물게 발생하는 배열 인덱스 연산자의 잘못된 동작을 수정합니다. 이를 통해 #28720이(가) 해결됩니다. #40185 (Alexey Milovidov).
- 암호화 함수의 인수 개수 검사가 불충분하던 문제를 수정했습니다(query fuzzer에서 발견됨). 이로써 #39987 이슈가 해결됩니다. #40194 (Alexey Milovidov).
ENGINE = Set을 사용하고 여러 컬럼을 포함하는 테이블에서IN연산자를 사용할 때 컬럼 순서가 잘못될 수 있는 문제를 수정합니다. 이를 통해 #13014 이슈가 해결됩니다. #40225 (Alexey Milovidov).- 암호화된 디스크에서 데이터를 읽을 때 위치 이동(seek) 동작을 수정합니다. 이 PR은 #38381 이슈를 수정합니다. #39687 (Vitaly Baranov).
- 조인 플랜의 중복 컬럼 문제를 수정했습니다. 드디어 #26809을(를) 해결했습니다. #40009 (Vladimir C).
- 서로 다른 날짜/시간 타입이 함께 사용된 ORDER BY WITH FILL이 포함된 SELECT 쿼리가 멈추던 문제를 수정했습니다. #37849 (Yakov Olkhovskiy).
- 프로젝션의 ORDER BY와 일치하는 ORDER BY를 수정합니다(이전에는 정렬되지 않은 결과를 그대로 반환했습니다). #38725 (Azat Khuzhin).
GROUP BY절에서 함수가 테이블 컬럼이나 표현식을 가리는 경우 해당 함수는 최적화되지 않습니다. #37032를 수정합니다. #39103 (Anton Kozlov).- RENAME TABLE 이후 로그에 잘못된 테이블 이름이 기록되던 문제를 수정합니다. 이 수정으로 #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에 대한 INSERT를 취소할 때
WriteBuffer의 finalize 처리를 수정합니다(이전 버전에서는std::terminate가 호출될 수 있습니다). #39458 (Kruglov Pavel). - 희소 직렬화에서
Object타입 컬럼 저장 방식을 수정합니다. #39464 (Anton Popov). - 프로젝션을 사용할 때 발생할 수 있는 "Not found column in block" 예외를 수정했습니다. 이를 통해 #39469를 해결했습니다. #39470 (小路).
- DROP과 INSERT 간 경합(race) 상황에서 materialized view와 관련해 발생하던 예외를 수정합니다. #39477 (Azat Khuzhin).
- Apache Avro 라이브러리의 버그: Avro 포맷에서 발생할 수 있는 데이터 레이스와 heap-buffer-overflow를 수정합니다. Closes #39094 Closes #33652. #39498 (Kruglov Pavel).
- 비동기 읽기(설정
local_filesystem_read_method='pread_threadpool'사용)에서O_DIRECT가 활성화된 경우(설정min_bytes_to_use_direct_io로 활성화) 드물게 발생하던 버그를 수정했습니다. #39506 (Anton Popov). - (FreeBSD에서만) FreeBSD에서 ClickHouse를 시작할 때 발생하던 "Code: 49. DB::Exception: FunctionFactory: the function name '' is not unique. (LOGICAL_ERROR)" 오류를 수정합니다. #39551 (Alexander Gololobov).
- 최근 추가된
splitByChar의 「maxsplit」 인수가 올바르게 동작하지 않던 버그를 수정했습니다. #39552 (filimonov). - ASOF JOIN에서
enable_optimize_predicate_expression사용 시 발생하던 버그를 수정하고, #37813 이슈를 종료합니다. #39556 (Vladimir C). ON CLUSTER또는Replicated데이터베이스와ReplicatedMergeTree를 사용하는CREATE/DROP INDEX쿼리의 동작을 수정했습니다. 이전에는 모든 레플리카에서 실행되면서 오류가 발생하거나 DDL 큐가 멈출 수 있었습니다. #39511을(를) 수정했습니다. #39565 (Alexander Tokmakov).- 조인과 함께 사용하는 푸시다운에서 발생하는 "column not found" 오류를 수정하여 #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). - 피연산자의 스케일로 감지할 수 있는 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 데이터베이스에서만 해당) 데이터베이스 엔진이 Ordinary이고 mmap IO용 캐시가 사용되는 경우, 삭제된 테이블과 동일한 이름으로 새 테이블을 생성하면 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). 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-squash가 적용된 볼륨에서 실패하던 NFS
mkdir동작을 수정합니다. #39898 (Constantine Peresypkin). - DETACH/DROP 시에 Prometheus 메트릭에서 딕셔너리를 제거합니다. #39926 (Azat Khuzhin).
- 가상 컬럼이 있는 StorageFile의 읽기를 수정합니다. #39907을(를) 해결합니다. #39943 (flynn).
- 데이터 페치(fetch) 시 과도한 메모리 사용을 수정합니다. 관련 이슈 #39915를 해결합니다. #39990 (Nikolai Kochetov).
- (실험적 기능)
hashId크래시와 salt 파라미터가 사용되지 않았던 문제를 수정했습니다. #40002 (Raúl Marín). EXCEPT및INTERSECT연산자는 특정 상수 컬럼과 비상수 컬럼의 조합을 사용할 경우 크래시가 발생할 수 있습니다. #40020 (Duc Canh Le).- 매우 느린 INSERT 또는 시간이 오래 걸리는 merge/mutation 작업 중에 발생하던 「Part directory doesn't exist」 및 「
tmp_<part_name>... No such file or directory」 오류를 수정했습니다. 또한 이전에 part(파트) 가져오기를 시도했다가 실패했지만tmp-fetch_<part_name>디렉터리가 정리되지 않은 경우, 로그에 아무 오류나 경고도 남지 않은 채 일부 복제 큐(replication queue) 항목이 멈춰 있을 수 있던 문제도 수정했습니다. #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).
- collectFilesToSkip()에서 재계산 대상 인덱스에 대해 올바른 파일 확장자(.idx 또는 idx2)를 추가하여 잘못된 하드 링크가 생성되는 버그를 수정했습니다. 해당 변경으로 #39896이(가) 해결되었습니다. #40095 (Jianmei Zhang).
- 역방향 DNS 조회 문제 수정. #40134 (Arthur Passos).
Array(UInt32)타입에서arrayDifference가 예기치 않은 결과를 반환하던 문제를 수정했습니다. #40211 (Duc Canh Le).
ClickHouse 릴리스 22.7, 2022년 07월 21일. 발표 자료(Presentation), 동영상(Video)
업그레이드 참고 사항
- 기본적으로
enable_positional_arguments설정을 활성화합니다. 이 설정으로SELECT ... ORDER BY 1, 2와 같이 1, 2가 SELECT 절을 참조하는 쿼리를 사용할 수 있습니다. 이전 동작으로 되돌려야 하는 경우 이 설정을 비활성화하십시오. #38204 (Alexey Milovidov). - 기본적으로
format_csv_allow_single_quotes를 비활성화합니다. #37096 를 참조하십시오. (Kruglov Pavel). Ordinary데이터베이스 엔진과*MergeTree테이블에 대한 이전 스토리지 정의 문법은 사용 중단(deprecated)되었습니다. 기본 설정에서는Ordinary엔진으로 새 데이터베이스를 생성할 수 없습니다.system데이터베이스가Ordinary엔진을 사용하는 경우 서버 시작 시 자동으로Atomic으로 변환됩니다. 이전 동작을 유지하기 위한 설정(allow_deprecated_database_ordinary및allow_deprecated_syntax_for_merge_tree)이 있지만, 이 설정들은 향후 릴리스에서 제거될 수 있습니다. #38335 (Alexander Tokmakov).- 기본 동작으로 콤마 조인(comma join)을 INNER 조인으로 강제 재작성합니다(기본값을
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설정이 도입되었습니다. 이 설정을 사용하면 테이블에 대해 추가 필터링 조건을 지정할 수 있으며, 이는 데이터 읽기 직후에 바로 적용됩니다. 예: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).- 원격 스토리지의 I/O 작업을 제한하기 위한 옵션인
max_remote_read_network_bandwidth_for_server및max_remote_write_network_bandwidth_for_server가 추가되었습니다. #39095 (Sergei Trifonov). group_by_use_nullsSETTING을 추가하여 ROLLUP, CUBE 및 GROUPING SETS 사용 시 집계 키 컬럼을 널 허용으로 만들 수 있도록 했습니다. #37359 이슈를 종료합니다. #38642 (Dmitry Novik).- 데이터를 내보낼 때 사용할 압축 레벨을 지정할 수 있는 기능을 추가합니다. #38907 (Nikolay Degterinsky).
system데이터베이스에서 SELECT하려면 명시적으로 권한을 부여해야만 하도록 하는 옵션을 추가했습니다. 자세한 내용: #38970 (Vitaly Baranov).- 함수
multiMatchAny,multiMatchAnyIndex,multiMatchAllIndices및 해당 fuzzy(퍼지) 버전이 이제 non-const(상수가 아닌) 패턴 배열 인자를 허용합니다. #38485 (Robert Schulze). SQL 함수multiSearchAllPositions도 이제 non-const needle(검색어) 인자를 허용합니다. #39167 (Robert Schulze). - 외부 파일을 가져올 때 zstd 디코딩 시 최대 메모리 사용량을 구성할 수 있도록
zstd_window_log_max설정을 추가했습니다. #35693 이슈를 해결했습니다. #37015 (wuxiaobai24). send_logs_source_regexp설정이 추가되었습니다. 지정한 정규식을 사용하여 로그 소스 이름과 일치하는 서버 텍스트 로그만 전송합니다. 값이 비어 있으면 모든 소스를 대상으로 합니다. #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을 통해 HTTP 헤더를
url테이블 FUNCTION/스토리지로 전달할 수 있는 기능을 추가합니다. #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으로 전환하여 비 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 FUNCTION의 속도가 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).- 벤치마크를 보다 안정적으로 만들기 위해 분기(branch)를 32바이트(32B) 경계에 맞춰 정렬합니다. #38988 (Guo Wangyang). Intel 환경에서 평균적으로 약 1~2%의 성능 향상이 있습니다.
- Executable UDF, executable dictionaries, 그리고 Executable tables가 서브프로세스가 종료될 때까지 기다리는 동안 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 aggregation(
optimize_aggregation_in_order)을 구현했습니다. #37469 (Azat Khuzhin). - Kerberos 초기화를 위한 subprocess 실행을 제거했습니다. 새로운 통합 테스트를 추가했습니다. #27651를 종료했습니다. #38105 (Roman Vasin).
-
- 여러 조인을 다시 작성할 때 식별자 이름을 변경하지 않도록 하는 설정
multiple_joins_try_to_keep_original_names를 추가합니다. #34697을(를) 해결합니다. #38149 (Vladimir C).
- 여러 조인을 다시 작성할 때 식별자 이름을 변경하지 않도록 하는 설정
- 트레이스 시각화 도구의 UX를 개선했습니다. #38169 (Sergei Trifonov).
- AArch64에서 스택 트레이스 수집과 쿼리 프로파일러를 활성화했습니다. #38181 (Maksim Kita).
- SQL 사용자 정의 함수 로딩 시
user_defined디렉터리의 심볼릭 링크를 건너뛰지 않도록 했습니다. #38042 이슈를 해결합니다. #38184 (Maksim Kita). store/의 하위 디렉터리에 대한 백그라운드 정리 기능을 추가했습니다. 특정 상황에서 clickhouse-server가store/에 불필요한 하위 디렉터리를 남겨두는 경우가 있었으며(예: 테이블 생성이 실패한 경우), 이 디렉터리들은 지금까지 제거되지 않고 남아 있었습니다. #33710을(를) 수정합니다. #38265 (Alexander Tokmakov).- 설정 파일에서 캐시 설정을 표시하는
DESCRIBE CACHE쿼리를 추가합니다. 사용 가능한 파일 시스템 캐시 목록을 표시하는SHOW CACHES쿼리를 추가합니다. #38279 (Kseniia Sumarokova). system drop filesystem cache에 대한 접근 권한 검사를 추가합니다. ON CLUSTER를 지원합니다. #38319 (Kseniia Sumarokova).- PostgreSQL 데이터베이스 엔진의 21.3에서 22.3으로 업그레이드 시 발생하는 비호환성 문제를 수정합니다. #36659를 해결합니다. #38369 (Kseniia Sumarokova).
filesystemAvailable및 유사한 함수가 이제clickhouse-local에서 동작합니다. 이로써 #38423이 해결되었습니다. #38424 (Alexey Milovidov).revisionFUNCTION을 추가했습니다. #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 secure RPC 전송을 지원합니다(즉,
hadoop.rpc.protection=privacy및hadoop.rpc.protection=integrity). #37852 (Peng Liu). StorageHive에 struct 타입 지원을 추가했습니다. #38118 (lgbo).- 이제 S3 단일 오브젝트는
RemoveObjectRequest로 제거됩니다. GCP에서는removeFileIfExists를 사용할 수 없어remove기능의 약 절반이 사실상 동작하지 않았는데, 이에 대한 호환성을 구현했습니다. GCS에서 지원하지 않는DeleteObjectsS3 API를 자동으로 감지하도록 했습니다. 이를 통해 설정에서support_batch_delete=0를 명시적으로 지정하지 않고도 GCS를 사용할 수 있습니다. #37882 (Vladimir Chebotarev). - 기본 ClickHouse Keeper 관련 모니터링 데이터를 ProfileEvents 및 CurrentMetrics를 통해 노출합니다. #38072 (lingpeng0314).
- PostgreSQL 엔진 연결에서
auto_close옵션을 지원합니다. #31486 이슈를 해결합니다. #38363 (Kseniia Sumarokova). - 테이블 함수용 컬럼 선언에서
NULL수정자를 허용합니다. #38816 (Kruglov Pavel). - 종료 시
TABLE_IS_READ_ONLY라는 무해한 오류가 발생하지 않도록 종료 전에mutations_finalizing_task를 비활성화합니다. #38851 (Raúl Marín). - 사용 중단(deprecated)된 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도구에서 키에*또는{expr1, expr2, expr3}형태의 glob 패턴을 지정할 수 있습니다. #38966 (Nikita Mikhaylov).- clearOldLogs: 동시 삭제 시
KEEPER_EXCEPTION을 보고하지 않도록 했습니다. #39016 (Raúl Marín). - clickhouse-keeper 개선: keeper 서버의 메타 정보를 디스크에 영구적으로 저장합니다. #39069 (Antonio Andelic). 이렇게 하면 모든 keeper 노드를 동시에 종료하거나 다시 시작해야 할 때 운영을 더 쉽게 할 수 있습니다.
- filesystem cache를 사용할 때 디스크 공간이 부족하더라도 예외를 발생시키지 않고 계속 동작하도록 했습니다. #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).
- 서버 시작 시 파일 시스템 캐시 초기화 과정에서 예외를 재발생시키고, 오류 메시지를 개선했습니다. #39386 (Kseniia Sumarokova).
- 이제 OpenTelemetry는 기본적으로 Processor span을 포함하지 않고 trace를 수집합니다(수집되는 span이 너무 많기 때문입니다). Processor span 수집을 활성화하려면
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).
- 시스템 테이블 「system.licenses」가 이제 Mac (Darwin)에서 올바르게 채워집니다. #38294 (Robert Schulze).
all|noarch패키지를 아키텍처 의존적으로 변경하고, 이에 대한 일부 문서를 수정하며, aarch64|arm64 패키지를 Artifactory와 릴리스 자산에 업로드합니다. #36443을(를) 수정합니다. #38580 (Mikhail f. Shiryaev).
버그 수정(공식 stable 또는 prestable 릴리스에서 사용자에게 노출되는 오동작)
- 스케일이 19자리를 초과하는
Decimal128/Decimal256에 대한 반올림 동작을 수정했습니다. #38027 (Igor Nikonov). Hive스토리지(integration 테이블 엔진)에서 데이터 레이스로 인해 발생하던 충돌을 수정했습니다. #38887 (lgbo).ON CLUSTER와 함께GRANT ALL ON *.*문을 실행할 때 발생하던 크래시를 수정합니다. 이 문제는 https://github.com/ClickHouse/ClickHouse/pull/35767에서 발생하기 시작했습니다. 이 수정은 #38618을 해결합니다. #38674 (Vitaly Baranov).{0..10}형식의 glob 확장이 올바르게 동작하도록 수정했습니다. #38498을(를) 해결합니다. 현재 구현은 셸이 수행하는 방식과 유사하며, @rschu1ze가 여기에서 언급한 내용과 같습니다. #38502 (Heena Bansal).- 상수 맵 인자와 함께 사용할 때
mapUpdate,mapFilter함수에서 발생하던 충돌을 수정했습니다. #38547 이슈를 해결했습니다. #38553 (hexiaoting). - 쿼리 최적화를 위해 사용되는
toHour단조성 정보를 수정하여, 잘못된 인덱스 분석으로 인한 잘못된 쿼리 결과가 발생할 수 있는 문제를 해결합니다. 이로써 #38333를 수정합니다. #38675 (Amos Bird). - S3 스토리지가 병렬 쓰기를 지원하는지 확인하는 로직을 수정했습니다. 이 버그로 인해 S3 병렬 쓰기가 동작하지 않았습니다. #38792 (chen).
- 병렬 읽기 버퍼에서 S3 seekable 읽기를 수정합니다. (쿼리 실행 중 메모리 사용량에 영향을 주던 문제입니다.) Closes #38258. #38802 (Kseniia Sumarokova).
simdjson을 업데이트합니다. 이로써 AVX-512 VBMI를 지원하는 최신 Intel CPU가 탑재된 머신에서 발생하던 버퍼 오버플로우 문제 #38621이 수정됩니다. #38838 (Alexey Milovidov).- 수직 병합에서 발생할 수 있었던 논리적 오류를 수정했습니다. #38859 (Maksim Kita).
- 초 단위를 사용하는 SETTINGS PROFILE을 수정했습니다. #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).
- 윈도우 표현식 인수 해석과 관련된 몇 가지 경계 사례를 수정합니다. 윈도우 표현식에서 고차 함수(higher-order function)를 사용할 수 있도록 허용합니다. #38538 #39112 (Dmitry Novik).
tuple함수에서LowCardinality타입을 유지합니다. 이전에는LowCardinality타입이 제거되어, 생성된 tuple의 요소들이LowCardinality의 기본 타입으로 처리되었습니다. #39113 (Anton Popov).extremes = 1설정이 활성화된 상태에서 MATERIALIZED VIEW가 연결된 테이블에 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).- 원격 파일 시스템에서 하드링크를 생성하는 동안 발생할 수 있는 극히 드문 레이스 컨디션을 수정합니다. 이 문제를 재현할 수 있는 경우는 백업을 동시에 실행할 때뿐입니다. #39190 (alesapin).
- (제로 카피 복제(zero-copy replication)는 프로덕션 환경에서 사용해서는 안 되는 실험적인 기능입니다)
allow_remote_fs_zero_copy_replication설정이 활성화된 상태에서 메모리 내 파트(in-memory part)를 가져오는 동작을 수정합니다. #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의 서브쿼리에서 컬럼 순서가 잘못 설정되는 문제를 수정합니다(서브쿼리의 SELECT 절에 중복된 컬럼이 있는 경우 잘못된 결과가 나올 수 있습니다). #37887 (Azat Khuzhin).
- 점(.)이 포함된 컬럼 이름에서
MODIFY ALTER Column이 올바르게 동작하지 않던 문제를 수정합니다. #37907를 종료합니다. #37971 (Kruglov Pavel). - S3에 데이터를 저장하는
MergeTree테이블에서 희소 컬럼을 읽는 방식을 수정합니다. #37978 (Anton Popov). - 설정에서 레플리카를 제거했을 때
Distributed비동기 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).- 조건이 거짓인 경우에도 인자가 평가되던 중첩 단락 평가(short-circuit) 함수 관련 버그를 수정했습니다. #38040 이슈를 해결했습니다. #38173 (Kruglov Pavel).
- (Window View는 실험적인 기능입니다) 잘못된 구조를 가진 WINDOW VIEW에서 발생하는 LOGICAL_ERROR를 수정합니다. #38205 (Azat Khuzhin).
- OAUTHBEARER 갱신 콜백이 설정되어 있을 때 발생하는 크래시를 수정하기 위해
librdkafka서브모듈을 업데이트합니다. #38225 (Rafael Acevedo). - ProfileEvents 때문에 Distributed 테이블에 대한 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). - 연결 문자열 설정과 관련된 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).
- 일부 인수가 NaN 값이어도
rankCorr함수가 올바르게 작동합니다. 이로써 #38396이(가) 해결되었습니다. #38722 (Alexey Milovidov). parallel_view_processing=1및optimize_trivial_insert_select=1조합 사용 시의 동작을 수정합니다. VIEW로 데이터를 삽입할 때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를 기본적으로 켰습니다. 이를 통해 JSON 포맷에서 이름이 있는 튜플(named tuple)을 JSON 객체로 직렬화할 수 있습니다. #37756 (Anton Popov). - 마지막에 이스케이프 기호('\')가 오는 LIKE 패턴은 이제 허용되지 않습니다(SQL 표준에 따라). #37764 (Robert Schulze).
- AArch64 CPU를 사용하는 클러스터에서 서로 다른 버전의 ClickHouse를 실행하거나, 클러스터에서 AArch64와 amd64를 혼용하고, 고정 크기 타입(fixed-size type)의 여러 키에 대해 GROUP BY와 함께 분산 쿼리를 사용하며, 이 키들이 256비트에는 들어가지만 64비트에는 들어가지 않고, 결과 크기가 매우 큰 경우, 업그레이드 과정에서 해당 쿼리의 결과 데이터가 완전히 집계되지 않을 수 있습니다. 워크어라운드: 롤링 업그레이드 대신 다운타임을 가지고 업그레이드하십시오.
새 기능
GROUPINGFUNCTION을 추가합니다. 이 FUNCTION은ROLLUP,CUBE,GROUPING SETS가 포함된 쿼리에서 레코드를 구분해 의미를 명확히 할 수 있도록 합니다. #19426 이슈를 해결합니다. #37163 (Dmitry Novik).- 새로운 부동소수점 데이터 압축 코덱 FPC 알고리즘입니다. #37553 (Mikhail Guzov).
- 새로운 열 지향 JSON 포맷인
JSONColumns,JSONCompactColumns,JSONColumnsWithMetadata를 추가합니다. #36338, #34509 이슈를 종료합니다. #36975 (Kruglov Pavel). - d3js 기반 OpenTelemetry trace 시각화 도구를 추가했습니다. #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 포맷에서 맵(Map)과 레코드(Record)를 지원하도록 기능을 추가했습니다. Avro 포맷에서 null을 기본값으로 삽입할 수 있도록 하는 새로운 설정
input_format_avro_null_as_default를 추가했습니다. #18925, #37378, #32899 이슈를 해결했습니다. #37525 (Kruglov Pavel). - ClickHouse용으로 구성된 가상 파일 시스템을 점검하고 조작하기 위한
clickhouse-disks도구를 추가합니다. #36060 (Artyom Yurkov). - H3 단방향 엣지(edge) 함수를 추가합니다. #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함수는 현재 서버의 SSL 인증서를 표시합니다. #37540 (Yakov Olkhovskiy).- Named Collections 내 데이터 사전(Data Dictionary)을 위한 HTTP 소스가 지원됩니다. #37581 (Yakov Olkhovskiy).
- 새로운 윈도우 함수
nonNegativeDerivative(metric_column, timestamp_column[, INTERVAL x SECOND])가 추가되었습니다. #37628 (Andrey Zvonov). ReplicatedMergeTree테이블의 주석을 변경할 수 있도록 기능을 구현했습니다. #37416 (Vasily Nemkov).- 관련 테이블이 삭제되었는지와 관계없이 전체 백업을 삭제하는
SYSTEM UNFREEZE쿼리가 추가되었습니다. #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 하는 분산 쿼리를 사용하는 경우, 업그레이드 중에는 집계 쿼리 결과가 잘못될 수 있습니다. 해결 방법: 롤링 업그레이드 대신 서비스 중단(downtime)을 수반하는 방식으로 업그레이드하십시오.
- Native, Protobuf, CapnProto, JSONEachRow, TSKV 형식 및 WithNames/WithNamesAndTypes 접미사가 있는 모든 형식에서 일부 컬럼만 조회(select)할 때의 성능과 메모리 사용량을 개선합니다. 이전에는 이러한 형식의 파일에서 일부 컬럼만 조회하더라도 모든 컬럼을 읽어 메모리에 저장했습니다. 이제는 필요한 컬럼만 읽습니다. 이 PR은 기본적으로
input_format_skip_unknown_fields를 사용하도록 설정합니다. 그렇지 않으면 일부 컬럼만 조회(select)하는 경우 예외가 발생할 수 있습니다. #37192 (Kruglov Pavel). - 이제 JOIN에서 더 많은 필터를 푸시다운할 수 있습니다. #37472 (Amos Bird).
- 와이드 파트에서 데이터를 읽을 때 필요한 컬럼의 마크만 로드합니다. #36879 (Anton Kozlov).
- 집계 함수의 인수로 희소 컬럼(
MergeTree테이블에서 실험적 설정ratio_of_defaults_for_sparse_serialization을 활성화하여 사용할 수 있음)을 사용하는 경우, 집계 성능이 향상되었습니다. #37617 (Anton Popov). - 두 개의 인자를 받는
COALESCEFUNCTION을 최적화합니다. #37666 (Anton Popov). multiIf에 조건이 하나만 있는 경우에는 성능이 더 좋은 함수if로multiIf를 대체합니다. #37695 (Anton Popov).dictGetDescendants,dictGetChildren함수의 성능을 향상하여, 쿼리 실행 중 함수 호출마다가 아니라 쿼리별로 부모-자식 계층형 인덱스를 임시로 생성하도록 했습니다.HIERARHICAL속성에 대해BIDIRECTIONAL을 지정할 수 있도록 하여 딕셔너리가 메모리 내에서 부모-자식 인덱스를 유지하게 했고, 이를 통해dictGetDescendants,dictGetChildren함수가 쿼리마다 임시 인덱스를 생성하지 않도록 했습니다. #32481를 해결합니다. #37148 (Maksim Kita).- 이제 집계 상태 소멸(aggregates state destruction)을 스레드 풀에 위임할 수 있습니다.
LIMIT이 있고 집계 상태가 큰 쿼리에서 상당한 속도 향상이 있으며, 예를 들어select uniq(number) from numbers_mt(1e7) group by number limit 100쿼리는 약 2.5배 더 빨라졌습니다. #37855 (Nikita Taranov). - 단일 컬럼 기준으로 정렬 성능을 개선합니다. #37195 (Maksim Kita).
- 정렬 큐 특수화를 통해 단일 컬럼 정렬 성능을 개선합니다. #37990 (Maksim Kita).
- 배열 노름 및 거리 FUNCTION의 성능을 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 테이블에 대한 INSERT 성능을 향상했습니다. #35762 (Maksim Kita).
- 테이블 수가 많을 때 백그라운드에서 과도한 CPU 사용이 발생하던 문제를 수정했습니다. #38028 (Maksim Kita).
- 동적 디스패치를 사용해
not함수의 성능을 개선합니다. #38058 (Maksim Kita). - LIKE 및 MATCH 함수에서 사용되는 re2 패턴의 내부 캐싱을 최적화했습니다. #37544 (Robert Schulze).
- AVX-512 명령어를 사용해 필터 비트마스크 생성 FUNCTION을 통합적으로 개선했습니다. #37588 (yaqi-zhao).
- Hive 통합 엔진에 읽기 메서드
threadpool을 적용하여 읽기 속도를 크게 높입니다. #36328 (李扬). - 읽을 컬럼이 모두 파티션 키인 경우, Hive 파일을 실제로 읽지 않고 파일의 행 번호만으로 컬럼을 구성합니다. #37103 (lgbo).
- Hive 파일 캐싱을 위해 여러 디스크를 지원합니다. #37279 (lgbo).
- 쿼리 단위로 사용할 수 있는 최대 캐시 용량을 제한하면 캐시 풀의 오염을 효과적으로 방지할 수 있습니다. 관련 이슈. #37859 (Han Shukai).
- 현재 ClickHouse는 원격 파일을 한 번만 읽더라도 모두 로컬 캐시에 직접 다운로드하며, 이로 인해 로컬 하드 디스크의 입출력(IO)이 빈번하게 발생합니다. 일부 시나리오에서는 이러한 IO가 불필요할 수 있으며, 오히려 성능이 저하되는 역최적화를 초래할 수 있습니다. 아래 그림과 같이 SSB Q1-Q4를 실행할 때, 캐시 사용으로 인해 성능이 저하되는 역효과가 발생했습니다. #37516 (Han Shukai).
- S3에서 읽을 때
_file및_path와 같은 가상 컬럼을 사용해 파일 목록을 프루닝(pruning)할 수 있도록 했습니다. 이는 #37174, #23494를 위한 변경입니다. #37356 (Amos Bird). - 함수 CompressedWriteBuffer::nextImpl()에서 데이터 삽입 시 자주 발생하던 불필요한 write-copy 단계가 제거되었습니다. 아래는 이 패치 적용 전후의 차이입니다. - 변경 전: 1. "working_buffer"를 "compressed_buffer"로 압축 2. "compressed_buffer"를 "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 타입을 사용할 수 있도록 합니다. 이 PR에서는 이를 위해 3개의 새로운 설정을 도입합니다:
output_format_arrow_string_as_string,output_format_parquet_string_as_string,output_format_orc_string_as_string. 모든 설정의 기본값은false입니다. #37327 (Kruglov Pavel). input_format_max_rows_to_read_for_schema_inference설정을 glob 패턴에 포함된 모든 파일에서 읽은 전체 행 수에 대해 적용합니다. 이전에는input_format_max_rows_to_read_for_schema_inference설정이 glob에 포함된 각 파일에 개별적으로 적용되어, null 값이 매우 많은 경우 각 파일에서 처음input_format_max_rows_to_read_for_schema_inference행을 읽고도 아무것도 얻지 못할 수 있었습니다. 또한 이 설정의 기본값을 25000으로 늘렸습니다. #37332 (Kruglov Pavel).- 별도의
CLUSTER권한을 추가하고, 이전 버전과의 호환성을 위해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일 때X-ClickHouse-Summary헤더에서 전체 통계 정보를 반환하도록 HTTP 엔드포인트를 수정했습니다(이전에는 모두 0을 반환했습니다). - 진행 상태가 이미 전송된 경우(send_progress_in_http_headers=1)X-ClickHouse-Exception-Code헤더를 반환하도록 HTTP 엔드포인트를 수정했습니다. -TIMEOUT_EXCEEDED오류 시HTTP_INTERNAL_SERVER_ERROR(500) 대신HTTP_REQUEST_TIMEOUT(408)을 반환하도록 HTTP 엔드포인트를 수정했습니다. #36884 (Raúl Marín).- 부여된 역할을 통해 얻은 권한(grants)을 사용자가 조회할 수 있도록 했습니다. #36941 (nvartolomei).
- 적분을 수치적으로 계산하지 말고 대신 CDF 함수를 사용하십시오. 이를 통해 실행 속도가 빨라지고 정확도가 향상됩니다. 이는 #36714 문제를 수정합니다. #36953 (Nikita Mikhaylov).
- 함수에서
Nothing에 대한 기본 구현을 추가했습니다. 이제 대부분의 함수는 인수 중 하나가Nothing인 경우Nothing타입의 컬럼을 반환합니다. 이는 인수로 빈 배열을 받는 arrayMap/arrayFilter와 같은 함수에서 발생하던 문제도 해결합니다. 이전에는select arrayMap(x -> 2 * x, []);와 같은 쿼리가 람다 내부의 함수가Nothing타입으로는 동작할 수 없어 실패했지만, 이제 이러한 쿼리는Array(Nothing)타입의 빈 배열을 반환합니다. 또한 arrayFilter/arrayFill과 같은 함수에서 널 허용(Nullable) 타입의 배열에 대한 지원을 추가했습니다. 이전에는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가 read buffer를 얻을 수 있도록 최적화했습니다. #37338 (xiedeyantu).
- 스트레스 테스트에서 발생한 문제를 해결하기 위해 short circuit 함수 처리 방식을 개선했습니다. #37384 (Kruglov Pavel).
- #37395 이슈를 해결합니다. #37415 (Memo).
- 제로-카피 복제 환경에서 part 가져오기 시 발생할 수 있는 극히 드문 데드락을 수정합니다. #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). - Play UI: 페이지를 수평으로 스크롤해도 컨트롤이 제자리에 유지되도록 했습니다. 이 기능으로 테이블이 넓어 오른쪽으로 많이 스크롤된 경우에도 편리하게 편집할 수 있습니다. CaspianDB의 Maksym Tereshchenko가 제안한 기능입니다. #37470 (Alexey Milovidov).
- play.html에서 query div가 높이 20%를 넘어 확장 가능하도록 수정합니다. 매우 긴 쿼리의 경우 textarea 요소를 확장할 수 있으면 도움이 되지만, 현재는 div 높이가 고정되어 있어 textarea를 확장하면 아래에 있는 data div가 가려집니다. 이 수정으로 textarea 요소를 확장하면, 확장된 textarea가 data div를 가리지 않도록 data div가 위나 아래로 밀리게 됩니다. 또한, 사용자가 query textarea 크기를 조정하더라도 query 상자의 너비가 항상 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).
- 이후의 merge에서는 TTL에 의해 만료된 컬럼을 기록하지 않습니다(이전에는 파트에 대한 첫 번째 merge/optimize에서만 TTL에 의해 만료된 컬럼을 기록하지 않았고, 이후 merge에서는 모두 기록했습니다). #37570 (Azat Khuzhin).
- LowCardinality 또는 희소 컬럼이 있는 경우
dumpColumnStructure기타 함수가 더 정밀한 결과를 반환하도록 개선했습니다. 이전 버전에서는 결과를 반환하기 전에 이 함수들이 인자를 전체 컬럼으로 변환했습니다. 이는 #6935에 대한 답변을 제공하기 위해 필요합니다. #37633 (Alexey Milovidov). - clickhouse-keeper: watch용으로 고유한 세션 ID만 저장하도록 함. #37641 (Azat Khuzhin).
- 발생할 수 있는 "Cannot write to finalized buffer" 오류를 수정합니다. #37645 (Azat Khuzhin).
- Google Cloud Storage에서 지원하지 않는 다중 객체 삭제(multi-object delete) 호출을 비활성화할 수 있도록
DiskS3에support_batch_delete설정을 추가합니다. #37659 (Fred Wulff). - ODBC 브리지에서 커넥션 풀을 비활성화할 수 있는 옵션을 추가합니다. #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). - 타임아웃 경과 후 손상된 detached 파트를 정리합니다. #25195를 해결합니다. #37975 (Kseniia Sumarokova).
- 이제 MergeTree 테이블 엔진 계열에서 이동이 실패한 파트는 즉시 제거됩니다. #37994 (alesapin).
- 이제 ReplicatedMergeTree에 대해
always_fetch_merged_part설정이 활성화되면, 머지 시에는 [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에는 ThreadSanitizer에 버그가 있어 CI 동작이 악화됩니다. - 시작 시 권한을 낮출 수 있도록 합니다. 이를 통해 Docker 이미지 구성이 더 간단해집니다. #36293을 해결합니다. #36341 (Alexey Milovidov).
- CI에 문서 맞춤법 검사(docs spellcheck)를 추가합니다. #37790 (Vladimir C).
- 실행 파일의 일관성을 확인하는 데 필요한 내장 해시를 제거해 버리던 과도한 stripping을 수정합니다. #37993 (Robert Schulze).
버그 수정 사항
- 상수 문자열 타입을 사용하는
SELECT ... INTERSECT및EXCEPT SELECTSQL 문을 수정했습니다. #37738 (Antonio Andelic). AggregateFunction타입의 컬럼으로GROUP BY할 때의 동작을 수정합니다. #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를 생성자에서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동작을 수정했습니다(이전에는 최종 정렬만 수행되어 결과가 잘못되었습니다). #37342 (Azat Khuzhin). - S3 키 이름에 특수 문자가 포함된 경우 발생하던 오류를 수정했습니다. 관련 이슈 #33009를 해결했습니다. #37344 (Vladimir Chebotarev).
- GROUPING SETS를 ROLLUP 또는 CUBE와 함께 사용할 경우 예외를 던지도록 변경했습니다. #37367 (Dmitry Novik).
- 머지 수행 중
getMaxSourcePartsSizeForMerge에서 발생하던 LOGICAL_ERROR를 수정합니다 (background_pool_size/background_merges_mutations_concurrency_ratio에 비표준적인 더 큰 값이users.xml(사용 중단된 방식)이 아니라config.xml(새로운 방식)에 지정된 경우). #37413 (Azat Khuzhin). - RowBinary 포맷에서 UTF-8 BOM을 제거하지 않도록 수정했습니다. #37428 (Paul Loyd). #37428 (Paul Loyd).
- ClickHouse Keeper 버그 수정: 단일 노드 클러스터에서 강제 복구가 동작하지 않던 문제를 수정했습니다. #37440 (Antonio Andelic).
- normalizeUTF8 함수의 논리 오류를 수정합니다. #37298를 종료합니다. #37443 (Maksim Kita).
- JoinSwitcher에서 널 허용 lowcard 캐스팅을 수정하여 #37385 이슈를 해결했습니다. #37453 (Vladimir C).
- ORC/Arrow/Parquet 포맷에서 named 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).- cross join에서 컬럼 수 불일치 문제를 수정하여 #37561 이슈를 종료했습니다. #37653 (Vladimir C).
- named collections로 구성된 MySQL 데이터베이스에서
show create table실행 시 발생하는 segmentation fault를 수정합니다. #37683 이슈를 종료합니다. #37690 (Kseniia Sumarokova). SETTINGS절 없이 스토리지가 생성된 경우 서버를 재시작할 때 RabbitMQ Storage가 시작되지 않던 문제를 수정합니다. #37463 이슈를 종료합니다. #37691 (Kseniia Sumarokova).- SQL 사용자 정의 함수는 읽기 전용 모드에서 CREATE/DROP 문 실행을 비활성화합니다. #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배)로 변환되는 바람에, 세션이 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를 실행할 때 내부 대상 테이블이 삭제되지 않도록 했습니다. #37879 (vxider). - clickhouse-keeper Docker 이미지에서 coordination 디렉터리의 소유권을 올바르게 설정했습니다. 이를 통해 #37914 이슈가 해결되었습니다. #37915 (James Maidment).
- Dictionaries에서 업데이트 필드와
{condition}을 사용하는 커스텀 쿼리의 문제를 수정했습니다. #33746를 해결합니다. #37947 (Maksim Kita). ORDER BY가WITH FILL결과 이후에 적용되어야 하는 경우(예: 외부 쿼리)에SELECT ... WITH FILL이 잘못된 결과를 반환할 수 있던 문제를 수정했습니다. 잘못된 결과는ORDER BY표현식에 대한 최적화 때문에 발생했습니다(#35623). #37904 이슈를 해결합니다. #37959 (Yakov Olkhovskiy).- (experimental WINDOW VIEW) WindowView에서 대상 테이블로 푸시할 때 누락된 기본 컬럼을 추가하여 #37815를 수정했습니다. #37965 (vxider).
- 컴파일이 실패하던 지나치게 큰 스택 프레임 문제를 수정했습니다. #37996 (Han Shukai).
- enable_filesystem_query_cache_limit가 활성화된 경우 「Reserved cache size exceeds the remaining cache size.」 예외를 발생시키도록 했습니다. #38004 (xiedeyantu).
- UNION 쿼리에서 타입 변환을 수정했습니다(LOGICAL_ERROR가 발생할 수 있었습니다). #34775 (Azat Khuzhin).
- BackgroundExecutor가 바쁠 경우 TTL merge가 다시 예약되지 않을 수 있습니다. --merges_with_ttl_counter는 selectPartsToMerge()에서 증가하고, BackgroundExecutor가 바쁘면 merge 작업은 무시되며, --merges_with_ttl_counter는 감소하지 않습니다. #36387 (lthaooo).
normalize_function_names에 대해 재정의된 settings 값이 올바르게 적용되지 않던 문제를 수정합니다. #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암호는 FIPS 인증 BoringSSL 버전에 포함되지 않기 때문에 제거했습니다. users.xml의 기본 사용자 프로필에서max_memory_usage설정을 제거했습니다. 이를 통해 쿼리에 대해 기존의 10GB 고정 한도 대신 유연한 메모리 한도를 사용할 수 있습니다.- 기본적으로
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입력 형식을 추가했습니다. 덤프에서 하나의 테이블에 속한 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 노름(norm) 함수를 구현했습니다. #37033 (qieqieplus). 주의사항: 이 함수들은 이름이 변경될 예정입니다.
- WindowView에서
WATCH쿼리를 개선했습니다. 1.fire_condition시그널을 호출하여 쿼리 결과 제공 지연 시간을 줄였습니다. 2.isCancelled()를 더 자주 확인하여 쿼리 취소(ctrl-c) 동작을 더 빠르게 만들었습니다. #37226 (vxider). - 파일 시스템 캐시 제거를 위한 인트로스펙션 기능을 추가했습니다. #36802 (Han Shukai).
- SQL용 새로운 해시 함수
wyHash64를 추가했습니다. #36467 (olevino). - 복제 데이터베이스(Replicated database) 개선: 현재 동기화가 비동기 방식으로 동작하므로, Replicated 데이터베이스 내부의 테이블 메타데이터를 동기화할 수 있도록
SYSTEM SYNC DATABASE REPLICA쿼리를 추가했습니다. #35944 (Nikita Mikhaylov). - 원격 파일 시스템 캐시 개선: 캐시에서의 읽기 성능을 향상했습니다. #37054 (Kseniia Sumarokova).
SYSTEM DROP FILESYSTEM CACHE쿼리를 개선했습니다.<path>옵션과FORCE옵션을 추가했습니다. #36639 (Kseniia Sumarokova). - 반정형(semistructured) 데이터 개선:
Object(...)타입 컬럼을Object(Nullable(...))로 캐스팅할 수 있도록 허용했습니다. #36564 (awakeljw). - 병렬 레플리카(parallel replicas) 개선: localhost 레플리카에서 쿼리를 실행하려는 경우 로컬 인터프리터를 생성합니다. 그러나 여러 레플리카에서 쿼리를 실행할 때는 레플리카가 코디네이터와 통신할 수 있도록 연결이 존재한다는 점에 의존합니다. 이제 이를 개선하여 localhost 레플리카가 동일한 프로세스 내에서 코디네이터와 직접 통신할 수 있게 되었습니다. #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).
- mutex 범위를 좁혀 파일 디스크립터 캐시의 성능을 개선합니다. #36682 (Anton Kozlov).
- 경로에 glob 패턴이 있고, 매칭되는 디렉터리에 매우 많은 파일이 있는 경우 스토리지
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를 피하기 위한 분기(branch)를 추가합니다. 이를 통해 어느 정도 성능이 향상됩니다. #36095 (jasperzhu).
optimize_aggregation_in_order를 위해 부분 GROUP BY 키를 구현합니다. #35111 (Azat Khuzhin).
개선 사항
- 테이블 함수
file,s3,url를 실행 중 파싱 오류가 발생하면, 오류가 발생한 파일 이름을 표시합니다. #36314 (Anton Popov). - 최상위 수준 구성(top-level config)에 지정된 경우, 런타임 중에 백그라운드 작업(merge, 뮤테이션, move, fetch)을 실행하는 스레드 수를 늘릴 수 있도록 했습니다. #36425 (Nikita Mikhaylov).
- 이제 1970-01-01 00:00:00 이전의 시각을 생성하는, 부분 시/분 오프셋을 가진 시간대(timezone)를 사용하는 날짜·시간 변환 함수들은 오버플로우 대신 0으로 포화(saturation) 처리됩니다. 이는 https://github.com/ClickHouse/ClickHouse/pull/29953 의 후속 작업으로, https://github.com/ClickHouse/ClickHouse/pull/29953#discussion_r800550280 에서 제기된 사항을 다룹니다. 구현 정의 동작(또한 매우 드문 사례)이므로, 이를 변경해도 허용된다는 점에서 개선 사항으로 표시합니다. #36656 (Amos Bird).
- log 레벨 "test"로 clickhouse-server를 실행하는 경우 경고가 표시되도록 했습니다. log 레벨 "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).
- 메인 설정에서 활성화할 수 있는 새로운 행 정책(row policy) 처리 모드를 구현하여, 허용적 행 정책이 없는 사용자도 행을 읽을 수 있도록 했습니다. #36997 (Vitaly Baranov).
- Play UI: 널 허용 숫자는 테이블 셀에서 오른쪽으로 정렬됩니다. 이로써 #36982가 해결되었습니다. #36988 (Alexey Milovidov).
- Play UI: 결과에 행이 하나뿐이고 컬럼이 여러 개이면 결과를 세로로 표시합니다. #36811의 후속 작업입니다. #36842 (Alexey Milovidov).
- Play UI의 CSS를 정리했습니다. 픽셀 배치가 더 균일해졌습니다. 테이블 셀에 긴 콘텐츠가 있을 때의 사용성이 개선되었습니다. #36569 (Alexey Milovidov).
- 예외 발생 시 소멸자에서 처리하지 않도록 쓰기 버퍼를 미리 최종화합니다. 다음 이슈가 해결되었기를 바랍니다: #36907. #36979 (Kruglov Pavel).
- #36425 이후
background_fetches_pool_size와 같은 설정은 더 이상 사용되지 않는 설정이 되었으며 최상위 설정(config)에서 나타날 수 있게 되었지만, 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).- 숫자로 시작하는 tuple 요소의 이름을 허용합니다. #36544 (Anton Popov).
- 이제 clickhouse-benchmark가 환경 변수에 설정된 인증 정보를 읽을 수 있습니다. #36497 (Anton Kozlov).
clickhouse-keeper개선: 쿼럼 없이 클러스터를 재구성할 수 있도록 하는 강제 복구(force recovery) 지원을 추가했습니다. #36258 (Antonio Andelic).- JSON 객체의 스키마 추론을 개선합니다. #36207 (Kruglov Pavel).
- glob 패턴을 사용하는 스키마 추론 관련 코드를 리팩터링했습니다. 이제 필요한 경우에만 glob으로 매칭된 목록에서 다음 파일을 시도합니다(이전에는 어떤 오류가 발생하더라도 다음 파일을 시도했습니다). 또한 #36317을 수정합니다. #36205 (Kruglov Pavel).
- 별도의
CLUSTER권한(및 하위 호환성을 위한access_control_improvements.on_cluster_queries_require_cluster_grant설정 지시문, 기본값은false)을 추가합니다. #35767 (Azat Khuzhin). - 선택된 쿼리가 중단되기 전에 필요한 양의 메모리가 사용 가능해지면, 대기 중이던 모든 쿼리가 계속 실행됩니다. 이제는 선택된 쿼리가 취소 사실을 인지하기 전에 메모리가 해제된 경우, 어떠한 쿼리도 중단하지 않습니다. #35637 (Dmitry Novik).
- protobuf에서 널 허용(Nullable) 감지. proto3에서는 기본값이 전송되지 않습니다. 따라서 널 허용 컬럼의 null 값과 기본값을 구분하는 것이 쉽지 않습니다. 이 문제를 처리하는 표준적인 방법은 Google wrapper를 사용하여 대상 값을 내부 메시지에 중첩시키는 것입니다(https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wrappers.proto 참고). 이 경우, 필드 자체가 없으면 null 값으로 해석되고, 필드는 존재하지만 값이 설정되지 않은 경우에는 기본값으로 해석되며, 일반 값이 있는 필드는 일반 값으로 해석됩니다. 그러나 ClickHouse는 Google wrapper를 중첩 컬럼으로 해석합니다. Google wrapper를 감지하고 위에서 설명한 방식으로 해석하는 특수 동작을 도입할 것을 제안합니다. 예를 들어 널 허용 컬럼
test의 값을 직렬화하기 위해.proto스키마에서google.protobuf.StringValue test를 사용합니다. 이러한 타입은 Protobuf에서 라이브러리 자체에 구현된 이른바 「well-known types」임을 유의하십시오. #35149 (Jakub Kuklis). - 사전 정의된 및 정적 HTTP 핸들러 구성에서
content_type을 지정할 수 있게 되었습니다. #34916 (Roman Nikonov). - 앞에
--external없이clickhouse-client --file을 사용할 경우 올바르게 경고하도록 했습니다. #34747를 해결했습니다. #34765 (李扬). - MySQL database engine을 binary(0) 데이터 타입과 호환되도록 개선했습니다. #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가 있으면 이를 추출하고, 해당 값을 제외하고 다시 조립합니다. - [x] 요청을 포함하도록AWS HTTP URI객체를 구성합니다. - [x] 단위 테스트:gtest_s3_uri- [x] 계측용 커밋을 제거합니다. #34571 (Saad Ur Rahman). - system.opentelemetry_span_log에서 attribute.values 별칭을 keys에서 values로 수정합니다. #37275 (Aleksandr Razumov).
- 널 허용(String)에서 널 허용(Bool/IPv4/IPv6)로의 변환 로직을 수정했습니다. #37221 이슈를 해결했습니다. #37270 (Kruglov Pavel).
- 실험적 기능:
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): 아직 트리거되지 않은 데이터가 삭제되는 경우를 방지하기 위해, 블록이 실제로 트리거된 후에
max_fired_watermark를 업데이트합니다. #37225 (vxider). - LIMIT BY가 있는 분산 쿼리에서 발생하던 「Cannot create column of type Set」 오류를 수정합니다. #37193 (Azat Khuzhin).
- 실험적 기능: 이제 WindowView
WATCH EVENTS쿼리는WindowViewSource.h:58에서 생성된 비어 있지 않은 청크 때문에 더 이상 종료되지 않습니다. #37182 (vxider). - 서브쿼리에 대해
enable_global_with_statement를 활성화하고 #37141 이슈를 해결했습니다. #37166 (Vladimir C). - optimize_skip_unused_shards_rewrite_in의 암시적 캐스트를 수정했습니다. #37153 (Azat Khuzhin).
- FixedString 컬럼에서 ILIKE 함수가 잘못된 결과를 반환할 수 있었습니다(예: 실제보다 더 적은 항목만 일치시키는 경우). #37117 (Robert Schulze).
AggregateFunction을 사용하는GROUP BY를 수정합니다(즉,AggregateFunction타입의 컬럼을 기준으로GROUP BY하는 경우). #37093 (Azat Khuzhin).- 실험적 기능: 접두사가 있는 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). indexes의 타입이UInt8가 아닐 때 발생하는 LowCardinality->ArrowDictionary 변환의 잘못된 출력 문제를 수정합니다. #36832 이슈를 해결합니다. #37043 (Kruglov Pavel).quantileTDigest에서 무한대(inf) 값 처리 문제를 수정했습니다. #32107 이슈를 해결합니다. #37021 (Vladimir Chebotarev).- HedgedConnections에서
max_parallel_replicas가 1이 아닐 때 외부 테이블 데이터 전송이 제대로 동작하지 않던 문제를 수정합니다. #36981 (Kruglov Pavel). Replicated데이터베이스에서TRUNCATE쿼리의 논리적 오류를 수정했습니다. 이는 #33747 이슈를 해결합니다. #36976 (tavplubix).- 실험적 기능: WindowView에서 소스 테이블을 DROP 할 때 멈추던 문제를 수정합니다. 관련 이슈 #35678을(를) 해결합니다. #36967 (vxider).
- 실험적 기능(RocksDB 캐시): 다음 문제를 수정했습니다: #36671. #36929 (李扬).
- 실험적 기능: WindowView에서 여러 컬럼을 사용할 때 발생하는 버그를, 다소 다른 스키마로
writeIntoWindowView를 호출할 수 있도록 변환 작업을 추가하여 수정했습니다. #36928 (vxider). - 부하가 적은 상태에서 재시작될 경우 압축 로그 파일이 손상될 수 있던
clickhouse-keeper의 버그를 수정했습니다. #36910 (alesapin). - 상수 집계를 수행할 때 잘못된 쿼리 결과가 반환되던 문제를 수정합니다. 이로써 #36728이(가) 해결됩니다. #36888 (Amos Bird).
- 실험적 기능: 캐시에서
current_size카운트가 올바르게 계산되도록 수정했습니다. #36887 (Kseniia Sumarokova). - 실험적 기능: hop window를 사용하는 window view에서 트리거 실행 동작을 수정했습니다. #34044. #36861 (vxider).
- 실험적 기능: remote fs의 캐시된 버퍼에서 잘못된 형 변환을 수정합니다. #36809 (Kseniia Sumarokova).
flatten_nested = 0설정으로 테이블을 생성할 때 발생하던 문제를 수정했습니다. 이전에는 평탄화되지 않은Nested컬럼이 서버를 재시작한 후 평탄화될 수 있었습니다. #36803 (Anton Popov).- 원격 파일 시스템에서 낮은 카디널리티 컬럼을 비동기 읽기로 읽을 때 발생하던 일부 문제를 수정했습니다. #36763 (Kseniia Sumarokova).
- 실험적 기능: 여러 파일(예: glob 패턴을 사용하는 테이블 함수
file)에서Object타입 컬럼으로 데이터를 삽입할 때 발생하던 문제를 수정했습니다. #36762 (Anton Popov). - Hedged 요청의 타임아웃 처리를 수정합니다. 원격 쿼리를 전송한 직후 연결이 멈출 경우, 무기한 대기 상태에 빠질 수 있었습니다. #36749 (Kruglov Pavel).
- 실험적 기능: 분산 테이블에서
groupBitmapAndState/groupBitmapOrState/groupBitmapXorState의 버그를 수정했습니다. #36739 (Zhang Yifan). - 실험적 기능: PR에서 수행한 테스트 중, 하나의 캐시 클래스가 두 번 초기화되면서 예외가 발생하는 것을 발견했습니다. 이 문제의 원인은 아직 명확하지 않지만, ClickHouse에서 디스크를 반복해서 로딩하는 코드 로직이 존재하는 것으로 보이며, 따라서 이 상황에 대해 별도의 처리 로직이 필요합니다. #36737 (Han Shukai).
- wide 파트에서 수직 병합을 수정했습니다. 이전에는 병합 과정에서
There is no column예외가 발생할 수 있었습니다. #36707 (Anton Popov). - 포트 변경 시 서버 재로드 동작을 수정했습니다(쿼리 컨텍스트의 기존 연결을 기다리지 않습니다). #36700 (Azat Khuzhin).
- 실험적 기능: 이전 PR에서 테스트(stateless tests, flaky check(address, actions))에서 타임아웃이 발생하는 문제를 발견했습니다. 또한 로컬에서 테스트할 때도 불안정한 시스템 데드락이 발생할 수 있습니다. 이 문제는 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 뒤에 올 때 발생하던 format 시 크래시를 수정했습니다. #36618 이슈를 해결했습니다. #36633 (flynn).
ENGINE = MergeTree테이블에서INTERPOLATE를 사용할 때 발생할 수 있던Missing column예외를 수정했습니다. #36549 (Yakov Olkhovskiy).- 조인 쿼리의
WHERE절에서 리터럴 사용 시 발생할 수 있는 오류를 수정합니다. #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).- 클라이언트에서 서버가 보낸 알 수 없는 패킷으로 인해 발생할 수 있는 예외를 수정합니다. #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 매처에서 발생하는 nullptr 역참조를 수정합니다. 이 변경으로 #36416 이(가) 해결됩니다. 이 수정은 https://github.com/ClickHouse/ClickHouse/pull/36417 을(를) 위한 것입니다. #36430 (Amos Bird).
- 스칼라 서브쿼리를 포함하는 경우
ClickHouseDictionarySource의 딕셔너리 리로드가 제대로 동작하지 않던 문제를 수정합니다. #36390 (lthaooo). - JOIN에서의 어설션 오류를 수정하여 #36199를 해결합니다. #36201 (Vladimir C).
- 특수 연산자 내부에서 별칭을 사용하는 쿼리는 파싱 오류를 반환했습니다(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. 발표 자료, 동영상
Backward Incompatible Change
- INSERT 쿼리에서 FORMAT 뒤에 SETTINGS를 사용할 수 없습니다(이러한 쿼리를 허용하는 호환성 설정인
allow_settings_after_format_in_insert가 있지만, 기본값으로 비활성화되어 있습니다). #35883 (Azat Khuzhin). - 함수
yandexConsistentHash(Konstantin "kostik" Oblakov이 만든 일관적 해싱(consistent hashing) 알고리즘)의 이름이kostikConsistentHash로 변경됩니다. 이전 이름은 호환성을 위해 별칭(alias)으로 유지됩니다. 이 변경은 하위 호환성을 유지하지만, 향후 릴리스에서 이 별칭이 제거될 수 있으므로 애플리케이션에서 이 함수 사용 부분을 업데이트할 것을 권장합니다. #35553 (Alexey Milovidov).
새로운 기능
- ORDER BY ... WITH FILL에 INTERPOLATE 확장 기능을 추가했습니다. #34903을(를) 해결했습니다. #35349 (Yakov Olkhovskiy).
- 프로세서 수준 프로파일링(
log_processors_profilesSETTING을 활성화하면, ClickHouse는 실행 중이거나 데이터 대기 중일 때 프로세서에 걸린 시간을system.processors_profile_log테이블에 기록합니다). #34355 (Azat Khuzhin). makeDate(year, month, day),makeDate32(year, month, day)함수를 추가했습니다. #35628 (Alexander Gololobov).makeDateTime()및makeDateTIme64()를 구현했습니다. #35934 (Alexander Gololobov).- INSERT 쿼리 실행 중 기록되는 바이트 양을 제한하기 위한 새로운 QUOTA 유형
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).- 새로운 FUNCTION 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두 종류의 ROW POLICY만 있었습니다.simpleROW POLICY는 permissive 및 restrictive 정책에서 나타나던 부작용 없이 테이블에 새로운 필터를 추가합니다. #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모드를 추가하여 캐시 옵션을 제공합니다(머지에 대해 기본적으로 활성화되어 있으며, 동일한 이름의 쿼리 SETTING으로도 활성화할 수 있습니다). 캐시 관련 설정의 이름을 변경합니다(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배 향상), 큰 정수(big integer) 사용도 지원합니다. #34733 (Raúl Marín).
- 키가 네이티브 정수형인 경우 ASOF JOIN 성능을 개선했습니다. #35525 (Maksim Kita).
- S3 스토리지로의 멀티파트 업로드를 병렬화했습니다. #35343 (Sergei Trifonov).
- URL 스토리지 엔진은 엔드포인트가 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).
개선 사항
- 스키마 추론(schema inference)에 여러 가지 개선을 적용했습니다. 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 포맷의 스키마 추론에 맵(Map) 타입 지원을 추가했습니다. - Values 포맷의 스키마 추론에서 발생할 수 있는 segfault를 수정했습니다. - Arrow/ORC/Parquet 포맷에서 지원되지 않는 타입을 가진 컬럼을 건너뛸 수 있도록 했습니다. 이를 위한 설정input_format_{parquet|orc|arrow}_skip_columns_with_unsupported_types_in_schema_inference를 추가했습니다. 이 설정들은 기본적으로 비활성화되어 있습니다. - Arrow/Parquet 포맷에서 타입이 Null인 컬럼을 모든 값이 NULL인 널 허용(Nullable) 컬럼으로 변환할 수 있도록 했습니다. - 컬럼 이름을 포함하지 않는 포맷(CSV, TSV, JSONCompactEachRow 등)에 대해, 설정column_names_for_schema_inference를 통해 스키마 추론 시 컬럼 이름을 지정할 수 있도록 했습니다. - ORC/Arrow/Parquet 포맷에서 널 허용(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). - 이제
Arrays및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()와 같은 단순한 쿼리를 최적화하기 위해 프로젝션(projection) 분석을 개선합니다. #35788 (Amos Bird).inputtable function을 사용하는 insert select에 대해 스키마 추론을 지원합니다. 스키마 추론을 지원하는 table function으로부터 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가 지정되지 않은 경우 기본 서버 포트를 사용합니다. 이 변경으로 #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). - cgroup에서 QUOTA와 period만 고려하고, shares 값은 무시합니다(shares 값은 실제로 사용할 수 있는 코어 수를 제한하지 않기 때문입니다). #35815 (filimonov).
빌드/테스트/패키징 개선
- 기능 테스트에 다음 배치의 랜덤화 설정을 추가했습니다. #35047 (Kruglov Pavel).
- 스트레스 테스트에 하위 호환성 검사를 추가했습니다. #25088 이슈를 종료합니다. #27928 (Kruglov Pavel).
- 패키지 빌드를
nfpm으로 마이그레이션했습니다 -packages/build를 사용하도록release스크립트 사용을 중단했습니다(deprecate) - 모든 항목을 clickhouse/binary-builder 이미지에서 빌드합니다(정리: clickhouse/deb-builder) - cmake에 심볼 스트리핑을 추가했습니다(todo: 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).
- 모든 이미지에 대해 빌드 작업을 식별할 수 있도록 label을 추가했습니다. #35583 (Mikhail f. Shiryaev).
- Python 코드에
black포매터를 적용하고 커밋 단위 검사를 추가했습니다. #35466 (Mikhail f. Shiryaev). - 정리된 Dockerfile을 사용하도록 alpine 이미지를 다시 작성했습니다. ubuntu와 alpine 이미지를 모두 빌드하기 위한 스크립트를 tests/ci에 추가했습니다. clickhouse-keeper 이미지를 추가했습니다(cc @nikitamikhaylov). PullRequestCI에 빌드 검사를 추가했습니다. ReleaseCI에 잡(job)을 추가했습니다. 각 병합된 PR마다
clickhouse/clickhouse-server:head및clickhouse/clickhouse-keeper:head이미지를 빌드하고 푸시하기 위해 MasterCI에 잡을 추가했습니다. #35211 (Mikhail f. Shiryaev). - CI에서 스트레스 테스트 보고서를 수정하여, 시작된 스트레스 테스트에 대한 정보가 포함된 runlog를 한 번만 업로드하도록 했습니다. #35093 (Mikhail f. Shiryaev).
- LLVM 14의 libcxx / libcxxabi로 전환했습니다. #34906 (Raúl Marín).
- CVE-2018-7485를 완화하기 위해 unixodbc를 업데이트했습니다. 참고: 이 CVE는 ODBC에 대해 자체 격리 레이어를 구현하는 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에서 데이터를 읽을 때 존재하지 않는 컬럼을 블록에서 삭제하지 않도록 했습니다. #35393 (lgbo).
- materialized view 생성 시 타입 검사를 추가합니다. Close: #23684. #24896 (hexiaoting).
- INSERT INFILE 쿼리에서 누락된 따옴표로 인한 형식 문제를 수정했습니다. #35886 (Azat Khuzhin).
- 퍼징(fuzzing)으로 메모리 안전성 문제가 발견되어
session_log을 비활성화했습니다. #35714를 참고하십시오. #35873 (Alexey Milovidov). - 컬럼별 TTL이 중복 처리되지 않도록 했습니다. #35820 (Azat Khuzhin).
- 하나의 insert 쿼리에 여러 파티션에 걸친 데이터가 포함되어 있는 경우,
Object타입 컬럼으로의 데이터 삽입을 수정합니다. #35806 (Anton Popov). - -WithNames 형식에서 존재하지 않는 컬럼의 인덱스 처리와 관련된 버그를 수정하여, 컬럼 수가 256개를 초과할 때 발생하던
INCORRECT_NUMBER_OF_COLUMNS오류를 해결했습니다. #35793을(를) 종료합니다. #35803 (Kruglov Pavel). - #35751을 수정했습니다. #35799 (Nikolay Degterinsky).
- Snappy 형식으로 인코딩된 HDFS 데이터 읽기 문제를 수정했습니다. #35771 (shuchaome).
- 사용자 정의 타입에서 문자열로 변환하는 과정에서 세그폴트(segfault) 또는 예기치 않은 오류 메시지가 발생할 수 있는 버그를 수정했습니다. #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 컴파일을 사용하는 빌드를 기본값으로 활성화합니다. #35683 (Maksim Kita).
- 실험적 타입인
Object에서 서브컬럼이 손실될 수 있는 버그를 수정합니다. #35682 (Anton Popov). - ASOF JOIN 키의 null 가능성(nullability) 검사 문제를 수정하고, #35565 이슈를 종료합니다. #35674 (Vladimir C).
- 프로젝션이 있는 파트에 대한 파트 검사 로직을 수정했습니다. 프로젝션과 메인 파트의 타입이 서로 다를 때 오류가 발생하던 문제가 있었습니다. 이는 https://github.com/ClickHouse/ClickHouse/pull/33774와 유사합니다. 이 버그는 @caoyang10이 해결했습니다. #35667 (Amos Bird).
formatFUNCTION에 매우 많은 수의 인자가 전달될 때 서버가 크래시되는 문제를 수정합니다. 크래시를 재현하는 방법은 테스트 파일을 참고하여 확인하십시오. #35651 (Amos Bird).- 비동기 INSERT에서 QUOTA 적용 방식을 수정합니다. #35645 (Anton Popov).
- 별칭이 있는 위치 기반 인자(positional argument)를 수정합니다. #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설정이, 이전에 DETACH되었으나 여전히 사용 중인 테이블에 대해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).
- 인수 중 하나가 널 허용 상수일 때 단락(short-circuit) 함수 평가 중 발생하던 충돌을 수정했습니다. #35497을(를) 해결했습니다. #35496을(를) 해결했습니다. #35502 (Maksim Kita).
- 상수 인수를 사용하는 함수
throwIf에서 발생하던 크래시를 수정합니다. #35500 (Maksim Kita). - 클라이언트 연결이 불안정해질 수 있는 Keeper 버그를 수정했습니다. 이 버그는 #35031에서 도입되었습니다. #35498 (alesapin).
if함수에서 결과 컬럼 타입이 결과 데이터 타입과 달라Logical error: 'Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<long>'.와 같은 논리 오류가 발생하던 버그를 수정했습니다. #35367 이슈를 해결했습니다. #35476 (Kruglov Pavel).- MergeTree의 백엔드 또는 별도의 테이블 엔진/함수로 S3를 사용할 때 발생하는 과도한 로깅 현상을 수정합니다. #30559 문제를 해결합니다. #35434 (alesapin).
- 이제 제로 카피 복제(실험적)로 머지가 실행될 때, 로그에
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).
- 기본 설정으로 final part 쓰기를 지연하지 않도록 했습니다(S3에 대한 쓰기의 경우
max_insert_delayed_streams_for_parallel_write설정을 추가하고 기본값을 1000으로 설정하여INSERT중 발생할 수 있던Memory limit exceeded오류를 수정했으며, 그 외의 경우에는 이전과 같이 비활성화된 상태로 둡니다). #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함수와 동일하게 동작하도록 변경했습니다. 잘못된 IP 주소가toIPv4,toIPv6함수에 전달될 때의 동작이 변경되었습니다. 이제 잘못된 IP 주소가 이들 함수에 전달되면 예외가 발생하며, 이전에는 기본값을 반환했습니다.IPv4StringToNumOrDefault,IPv4StringToNumOrNull,IPv6StringToNumOrDefault,IPv6StringOrNull,toIPv4OrDefault,toIPv4OrNull,toIPv6OrDefault,toIPv6OrNull함수를 추가했습니다.IPv4StringToNumOrDefault,toIPv4OrDefault,toIPv6OrDefault함수는 이전에IPv4StringToNum,toIPv4,toIPv6가 잘못된 주소에 대해 기본값을 반환하는 동작에 의존하던 경우에 사용해야 합니다.cast_ipv4_ipv6_default_on_conversion_error설정을 추가했으며, 이 설정이 활성화되면 IP 주소 변환 함수는 이전과 동일하게 동작합니다. #22825 이슈를 해결합니다. #5799 이슈를 해결합니다. #35156 이슈를 해결합니다. #35240 (Maksim Kita).
새로운 기능
- 원격 파일 시스템에 대해 데이터를 로컬에 캐시하는 기능을 지원합니다.
s3디스크에서 활성화할 수 있습니다. #28961를 종료합니다. #33717 (Kseniia Sumarokova). 한편, s3 파일 시스템에서 테스트 스위트를 활성화했으며, 더 이상 알려진 이슈가 없으므로 프로덕션 환경에서 사용할 준비가 되었습니다. - 새로운 테이블 FUNCTION
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).
- 테이블 FUNCTION
file/hdfs/s3/url로 INSERT 시 스키마 추론(schema inference)을 지원합니다. #34732 (Kruglov Pavel). - 이제 경로 또는
like표현식에 대한 제약 없이system.zookeeper테이블을 읽을 수 있습니다. 이러한 읽기 작업은 zookeeper에 상당한 부하를 발생시킬 수 있으므로, 이 기능을 사용하려면allow_unrestricted_reads_from_keeperSETTING을 활성화해야 합니다. #34609 (Sergei Trifonov). - clickhouse-local에서 CPU 및 메모리 메트릭을 표시합니다. #34545를 종료합니다. #34605 (李扬).
- 배열에 대해
startsWith및endsWithFUNCTION을 구현했습니다. #33982를 종료합니다. #34368 (usurai). - 맵(Map) 데이터 타입을 위한 세 가지 FUNCTION을 추가합니다. 1.
mapReplace(map1, map2)- map1의 키에 대해 map2에 있는 해당 키의 값으로 교체하며, map1에 없는 키는 map2에서 추가합니다. 2.mapFilter3.mapMap.mapFilter와mapMap은 고차 함수로, 두 개의 인수를 받습니다. 첫 번째 인수는 k, v 쌍을 인수로 받는 람다 FUNCTION이고, 두 번째 인수는 Map 타입의 컬럼입니다. #33698 (hexiaoting). CLICKHOUSE_USER및CLICKHOUSE_PASSWORD환경 변수를 통해 clickhouse-client의 기본 사용자와 비밀번호를 가져올 수 있도록 허용합니다. #34538를 종료합니다. #34947 (DR).
실험적 기능
- 반정형 데이터(현재는 JSON만 지원)를 저장할 수 있는 새로운 데이터 타입
Object(<schema_format>)이 추가되었습니다. 데이터는 먼저 해당 타입에 문자열로 기록됩니다. 이후 반정형 데이터 포맷에 따라 모든 경로를 추출하고, 해당 경로들을 모든 값을 저장할 수 있는 가장 최적의 타입의 개별 컬럼으로 기록합니다. 이렇게 생성된 컬럼은 원본 데이터의 경로와 일치하는 이름으로 조회할 수 있습니다. 예:data.key1.key2또는 캐스트 연산자를 사용한data.key1.key2::Int64. database_replicated_allow_only_replicated_engineSETTING이 추가되었습니다. 이 SETTING을 활성화하면Replicated데이터베이스에서Replicated테이블 또는 상태를 저장하지 않는(stateless) 엔진을 사용하는 테이블만 CREATE로 생성할 수 있습니다. #35214 (Nikolai Kochetov).Replicated데이터베이스 자체는 여전히 실험적 기능임을 유의하십시오.
성능 개선
- 정렬을 최적화하여
MergeTree테이블로의 삽입 성능을 향상했습니다. 실제 벤치마크에서 최대 2배의 성능 향상이 관찰되었습니다. #34750 (Maksim Kita). - URL 및 S3에서 Parquet, ORC, Arrow 파일을 읽을 때 컬럼 프루닝(column pruning)을 수행합니다. #34163을(를) 해결합니다. #34849 (Kseniia Sumarokova).
- Hive에서 Parquet, ORC, Arrow 파일을 읽을 때 컬럼 프루닝(column pruning)을 수행합니다. #34954 (lgbo).
- 성능 슈퍼히어로가 기여한 여러 가지 성능 최적화입니다.
IN절이 큰 쿼리 처리 성능을 향상했습니다. 소스가ClickHouse인direct딕셔너리의 성능을 개선했습니다.detectCharset,detectLanguageUnknown함수의 성능을 향상했습니다. #34888 (Maksim Kita). - 더 많은 배칭을 사용하여
any집계 함수의 성능을 개선했습니다. #34760 (Raúl Marín). clickhouse-keeper성능에 대한 여러 개선 사항입니다. 락을 줄였으며 #35010 (zhanglistar), 스냅샷 전체 복사 대신 스트리밍 방식으로 읽고 쓰도록 하여 메모리 사용량을 줄였고 #34584 (zhanglistar), RAFT 구현에서 로그 저장소 압축을 최적화했으며 #34534 (zhanglistar), 내부 데이터 구조에 버전 관리를 도입했습니다 #34486 (zhanglistar).
개선사항
- 비동기 insert를 테이블 FUNCTION에 허용합니다. #34864을(를) 수정합니다. #34866 (Anton Popov).
dictGetHierarchy,dictIsIn,dictGetChildren,dictGetDescendants함수의 키 인수에 대한 암시적 형 변환이 지원됩니다. #34970를 해결합니다. #35027 (Maksim Kita).EXPLAIN AST쿼리는 Graphviz 형식의 그래프로 AST를 출력할 수 있습니다:EXPLAIN AST graph = 1 SELECT * FROM system.parts. #35173 (李扬).s3테이블 함수나 테이블 엔진으로 대용량 파일을 기록할 때 AWS SDK의 버그로 인해 파일의 콘텐츠 타입이 잘못application/xml로 설정되었습니다. 이 변경으로 #33964가 해결되었습니다. #34433 (Alexey Milovidov).- 제한적 ROW POLICY의 동작을 약간 변경하여, 간단한 경우에는 허용(permissive) 정책에 비해 더 사용하기 쉬운 대안이 되도록 했습니다. 특정 테이블에 대해 허용(permissive) 정책 없이 제한적 정책만 존재하는 경우에도 사용자는 일부 행을 볼 수 있습니다. 또한
SHOW CREATE ROW POLICY는 ROW POLICY의 정의에서 항상AS permissive또는AS restrictive를 표시합니다. #34596 (Vitaly Baranov). - File/S3/HDFS/URL 엔진에서 glob 패턴을 사용한 스키마 추론을 개선합니다. 오류가 발생하면 스키마 추론에 다음 경로를 사용하도록 합니다. #34465 (Kruglov Pavel).
- Play UI가 이제 운영 체제 설정에 따른 라이트/다크 테마 선호도를 올바르게 감지합니다. #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 커널에 버그가 있는 경우에도 Query Profiler에서 0으로 나누기 오류가 발생하지 않도록 했습니다. #34787 이슈를 해결했습니다. #35032 (Alexey Milovidov).
- Keeper 설정에 대한 추가 유효성 검사를 도입했습니다. 이제
localhost와 로컬이 아닌 서버를 혼용할 수 없으며, 내부 raft 포트와 Keeper 클라이언트 포트가 동일한 값으로 설정된 경우를 확인하는 검사도 추가했습니다. #35004 (alesapin). - 현재 system 테이블의 설정을 변경하면 로그가 대량으로 생성되고 ClickHouse가 1분마다 테이블 이름을 변경합니다. 이로써 #34929 이슈가 해결됩니다. #34949 (Nikita Mikhaylov).
- Hive metastore 클라이언트에 연결 풀을 도입했습니다. #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).
- 이제
MergeTree테이블 엔진에서columnX가ALIAS컬럼인 경우ALTER TABLE DROP COLUMN columnX쿼리가 즉시 수행됩니다. #34660 문제가 수정되었습니다. #34786 (alesapin). - 사용자가 데이터 스키핑 인덱스(data skipping index) 이름을 오타로 잘못 입력했을 때 힌트를 제공합니다. #29698 이슈를 해결합니다. #34764 (flynn).
parallel_distributed_insert_select에서remote()/cluster()테이블 함수를 지원합니다. #34728 (Azat Khuzhin).- 설정 파일에서 로깅 관련 설정이 비어 있는 경우에도
--log-file/--errorlog-file명령줄 옵션으로 구성된 로깅이 재설정되지 않도록 했습니다. #34718 (Amos Bird). - 테이블을 생성할 때 스키마를 한 번만 추출하고, 각 서버 시작 시 스키마를 추출하기 위해 로컬 파일이나 외부 소스에서 읽는 동작을 방지합니다. #34684 (Kruglov Pavel).
- 실행 가능한 UDF에서 인자 이름을 지정할 수 있게 했습니다. 이는 인자 이름이
Native,JSONEachRow와 같이 직렬화의 일부가 되는 형식에서 필요합니다. #34604 이슈를 해결합니다. #34653 (Maksim Kita). MaterializedMySQL(실험적 기능)에서 이제materialized_mysql_tables_list를 지원합니다(이는MaterializedMySQL데이터베이스 엔진에 의해 복제될 MySQL 데이터베이스 테이블들의 이름을 쉼표로 구분한 목록입니다. 기본값: 빈 목록 — 모든 테이블이 복제됨을 의미합니다). #32977에서 언급되었습니다. #34487 (zzsmdfj).- 분산 테이블에서 INSERT 작업 시 OpenTelemetry span 로그를 개선했습니다. #34480 (Frank Chen).
- ClickHouse Keeper의 서버 간에 znode의
ctime및mtime값이 일관되도록 했습니다. #33441 (小路).
빌드/테스트/패키징 개선
- 패키지 리포지토리를 JFrog Artifactory로 마이그레이션했습니다 (Mikhail f. Shiryaev).
- 기능 테스트에서 일부 설정을 무작위화하여 더 많은 설정 조합이 테스트되도록 했습니다. 이는 테스트 커버리지를 더 잘 보장하기 위한 또 다른 퍼징(fuzzing) 방법입니다. #32268을(를) 해결합니다. #34092 (Kruglov Pavel).
- CI에서 PVS-Studio를 제거했습니다. #34680 (Mikhail f. Shiryaev).
- CMake로 심볼이 제거된(stripped) 바이너리를 빌드할 수 있는 기능을 추가했습니다. 이전 버전에서는 dh-tools가 이를 수행했습니다. #35196 (alesapin).
- 더 작고 "fat-free"한
clickhouse-keeper빌드를 추가했습니다. #35031 (alesapin). - https://github.com/ClickHouse/ClickHouse/pull/34685와 같은 PR에 대해 작성자 및 커미터로 @robot-clickhouse를 사용합니다. #34793 (Mikhail f. Shiryaev).
- 디버그 정보의 DWARF 버전을 최대 4로 제한했습니다. 내부 스택 심볼라이저가 DWARF 버전 5를 파싱할 수 없기 때문입니다. 이는 ClickHouse를 clang-15로 컴파일하는 경우에 의미가 있습니다. #34777 (Alexey Milovidov).
- 불필요한 복잡성을 줄이기 위해
clickhouse-testdebian 패키지를 제거했습니다. CI에서는 리포지토리에 있는 테스트를 사용하며, deb 패키지를 통한 독립 실행형 테스트는 더 이상 지원되지 않습니다. #34606 (Ilya Yatsishin).
버그 수정 (공식 stable 또는 prestable 릴리스에서 발생하는 사용자 체감 오동작)
- HDFS 통합 관련 버그 수정입니다. 내부 버퍼 크기가 너무 작은 경우
HadoopSnappyDecoder에서 하나의 압축 블록에 대해 NEED_MORE_INPUT이 여러 번(3회 이상) 호출됩니다. 이로 인해 입력 데이터가HadoopSnappyDecoder::buffer의 잘못된 위치에 복사됩니다. #35116 (lgbo). - ATTACH GRANT SQL 문에서 더 이상 유효하지 않은 권한(grant)을 무시합니다. 이 PR은 #34815를 수정합니다. #34855 (Vitaly Baranov).
- named collections을 사용해 데이터베이스를 생성한 경우, CREATE TABLE 쿼리를 가져올 때 Postgres 데이터베이스에서 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. #35312 이슈를 해결합니다. #35313 (Kseniia Sumarokova).
- 부분 merge join에서 행이 중복되는 버그를 수정하고, #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). - 설정에서 포트 값을 읽는 동작을 수정하고 #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(실험적 기능)의
table overrides가 PARTITION BY 설정 등에서 올바르게 동작하도록 수정했습니다. #35048를 해결했습니다. #35162 (Kseniia Sumarokova). - MaterializedPostgreSQL(실험적 기능)에서 수동으로
DETACH TABLE을 실행한 후ATTACH TABLE을 통해 복제에 새 테이블을 추가하는 기능을 수정합니다. #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).- 서버 종료 시 발생할 수 있는 데드락을 방지하도록 했습니다. #35081 (Azat Khuzhin).
optimize_functions_to_subcolumns설정이 활성화된 경우, 함수가 서브컬럼으로 최적화될 때 누락되던 별칭 문제를 수정합니다. #33798를 종료합니다. #35079 (qieqieplus).- 테이블 함수(table function)로의 비동기 INSERT가 존재하는 경우
system.asynchronous_inserts테이블에서 읽을 수 없던 문제를 수정합니다. #35050 (Anton Popov). - 원격 VFS에서의 작업과 관련하여 발생할 수 있던
Reading for MergeTree family tables must be done with last position boundary예외를 수정합니다. #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에서 busy polling이 발생하는 것을 방지합니다. #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와 같은 system 쿼리의 직렬화/출력을 수정했습니다. #34514을(를) 해결했습니다. #34696 (Maksim Kita).enable_global_with_statement와 함께allow_experimental_projection_optimization을 수정합니다(이전에는WITH절에 여러 표현식이 있는 경우Stack size too large오류가 발생할 수 있었고, 스칼라 서브쿼리를 매번 다시 실행했기 때문에, 이제는 더 최적화됩니다). #34650 (Azat Khuzhin).ReplatedMergeTree엔진에서 다른 레플리카가 이미 트랜잭션 로그를 업데이트한 경우 mutate 작업을 위한 파트 선택을 중지합니다. #34633 (Jianmei Zhang).- 파트 이동 기능을 사용할 때 단순한 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을 기본적으로 활성화하고, 이 설정은 사용 중단(deprecated)됩니다. #34456 (Nikolai Kochetov). File/S3/HDFS엔진에서 INSERT 시 새 파일을 생성하는 옵션입니다.HDFS의 파일은 덮어쓰기를 허용합니다. 기본적으로S3파일을 덮어쓰려고 시도하면 예외를 발생시킵니다. 접미사를 가지므로Parquet,ORC처럼 append를 지원하지 않는 포맷의 파일에 데이터를 추가(append)하려고 시도하면 예외를 발생시킵니다. #31640 해결 #31622 해결 #23862 해결 #15022 해결 #16674 해결. #33302 (Kruglov Pavel).MergeTree/ReplicatedMergeTree에서 사용자가 자체 중복 제거(deduplication) 의미론을 지정할 수 있는 설정을 추가합니다. 이 설정이 지정되면 블록 ID를 생성할 때 데이터 다이제스트 대신 해당 값이 사용됩니다. 예를 들어 각 INSERT 문마다 이 설정에 고유한 값을 지정하면, 동일한 데이터가 삽입되더라도 중복 제거되는 것을 피할 수 있습니다. 다음 이슈를 해결합니다: #7461. #32304 (Igor Nikonov).INSERTSQL 문에서DEFAULT키워드에 대한 지원을 추가했습니다. #6331을(를) 해결했습니다. #33141 (Andrii Buriachevskyi).EPHEMERAL컬럼 지정자가CREATE TABLE쿼리에 추가되었습니다. #9436 이슈를 해결했습니다. #34424 (yakov-olkhovskiy).TTL expr TO [DISK|VOLUME] [IF EXISTS] 'xxx'기능에IF EXISTS절을 지원합니다. 파트는 해당 디스크 또는 볼륨이 레플리카에 존재하는 경우에만 그 디스크 또는 볼륨으로 이동하므로,MOVE TTL규칙이 설정된 스토리지 정책에 따라 레플리카마다 다르게 동작할 수 있습니다. #34455를 해결합니다. #34504 (Anton Popov).- 기본 테이블 엔진을 설정할 수 있으며 ENGINE을 지정하지 않고도 테이블을 CREATE할 수 있습니다. #34187 (Ilya Yatsishin).
- 테이블 함수
format(format_name, data)를 추가합니다. #34125 (Kruglov Pavel). stdin으로 전달된 경우에도clickhouse-local에서 파일 이름을 기준으로 포맷을 감지합니다. #33829 (Kruglov Pavel).values테이블 FUNCTION에 스키마 추론(schema inference)을 추가했습니다. #33811 이슈를 해결했습니다. #34017 (Kruglov Pavel).- 구성 재로드 시 서버 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). - 집계 FUNCTION인
meanZTest를 구현했습니다. #33354 (achimbab). - T-검정 집계 함수에 신뢰 구간을 추가합니다. #33260 (achimbab).
addressToLineWithInlinesFUNCTION을 추가합니다. 이슈 #26211를 종료합니다. #33467 (SuperDJY).#!및#를 한 줄 주석의 시작으로 인식하도록 추가했습니다. #34138를 해결했습니다. #34230 (Aaron Katz).
실험적 기능
- 텍스트 분류용 함수: 언어 및 문자 집합(charset) 감지 기능. #23271, #33314 참고. (Nikolay Degterinsky).
MemoryTracker에 메모리 오버커밋(overcommit)을 추가합니다. 소프트 메모리 한도를 나타내는 메모리 한도용guaranteed설정을 추가했습니다. 하드 메모리 한도에 도달하는 경우MemoryTracker는 가장 과도하게 메모리를 사용한 쿼리를 취소하려고 시도합니다. 새로운 설정memory_usage_overcommit_max_wait_microseconds는 다른 쿼리가 중지될 때까지 쿼리가 얼마나 오래 대기할 수 있는지를 지정합니다. #28375를 해결합니다. #31182 (Dmitry Novik).- WindowView에서 스트림-테이블 조인을 활성화합니다. #33729 (vxider).
MaterializedMySQL(실험적 기능)에서SET,YEAR,TIME,GEOMETRY데이터 타입을 지원합니다. #18091, #21536, #26361를 수정합니다. #33429 (zzsmdfj).- projection 기능이 기본적으로 활성화되어 있을 때 발생하는 다양한 문제를 수정합니다. 각 문제는 개별 커밋에서 설명됩니다. #33678에 대한 작업입니다. #34273를 수정합니다. #34305 (Amos Bird).
성능 향상
- 정렬 키의 접두부(prefix)가 이미 정렬되어 있는 경우
optimize_read_in_order를 지원합니다. 예를 들어 테이블에 정렬 키가ORDER BY (a, b)로 정의되어 있고 쿼리에WHERE a = const ORDER BY b절이 있는 경우, 이제 전체 정렬을 수행하는 대신 정렬 키 순서대로 읽기가 적용됩니다. #32748 (Anton Popov). URL,S3,File,HDFS테이블 함수에 대한 파티션 단위 INSERT 성능을 개선합니다. #34348를 종료합니다. #34510 (Maksim Kita).- clickhouse-keeper에 여러 가지 성능 개선이 이루어졌습니다. #34484 #34587 (zhanglistar).
FlatDictionary로 딕셔너리 데이터 로드 성능이 향상됩니다. #33871 (Maksim Kita).mapPopulateSeries함수의 성능을 향상합니다. #33944 이슈를 해결합니다. #34318 (Maksim Kita)._file및_path가상 컬럼(파일 계열 테이블 엔진에서 사용)이LowCardinality타입으로 변경되었습니다. 이를 통해 여러 파일에 대한 쿼리가 더 빨라집니다. #34300 이슈를 해결합니다. #34317 (flynn).- 데이터 파트 로딩을 가속했습니다. 이전에는 이 작업이 병렬화되지 않아
part_loading_threads설정이 효과가 없었습니다. #4699을 참고하십시오. #34310 (alexey-milovidov). LineAsString포맷의 성능을 개선했습니다. 이로써 #34303 이슈를 종료합니다. #34306 (alexey-milovidov).sort대신nth_element를 사용하도록quantilesExact{Low,High}를 최적화했습니다. #34287 (Danila Kutenin).Regexp포맷의 성능을 약간 개선했습니다. #34202 (alexey-milovidov).- 스칼라 서브쿼리 분석을 소폭 개선. #34128 (Federico Rodriguez).
- ORDER BY 튜플을 ORDER BY 컬럼과 거의 동일한 속도로 실행되도록 개선했습니다. 여러 컬럼에 대한 ORDER BY에는 특수 최적화가 있습니다: https://github.com/ClickHouse/ClickHouse/pull/10831 . 이 최적화를 튜플 컬럼에도 적용하면 이점이 있습니다. #34060 (Amos Bird).
- scalar 서브쿼리 캐시를 재설계하여 Materialized Views 실행에 다시 도입했습니다. #33958 (Raúl Marín).
memcmpSmallFUNCTION에 x86-64 AVX-512 지원을 추가하여 메모리 비교를 가속함으로써ORDER BY성능을 약간 향상합니다. 직접 ClickHouse를 컴파일하는 경우에만 동작합니다. #33706 (hanqf-git).- 키별 구간 수가 많은 경우
range_hashed딕셔너리의 성능을 개선했습니다. #23821를 수정했습니다. #33516 (Maksim Kita). - S3로의 insert 및 merge 시, 가능한 한 파일을 병렬로 기록하도록 했습니다(TODO: 병합되었는지 확인 필요). #33291 (Nikolai Kochetov).
clickhouse-keeper의 성능을 향상시키고 NuRaft 라이브러리에서 여러 메모리 누수를 수정합니다. #33329 (alesapin).
개선 사항
clickhouse-client에서 인라인 데이터가 포함된 쿼리에 대해 비동기 INSERT를 지원합니다. #34267 (Anton Popov).dictGet,dictHasFUNCTION은 키 인자가 딕셔너리 키 구조와 다를 경우 암시적으로 딕셔너리 키 구조로 캐스팅합니다. #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).- 딕셔너리에서
DateTime64데이터 타입을 지원하도록 했습니다. #33914 (Maksim Kita). s3(url, access_key_id, secret_access_key)를 사용할 수 있습니다(데이터 포맷과 테이블 구조는 자동으로 감지하지만 자격 증명은 명시적으로 지정합니다). #34503 (Kruglov Pavel).- #34362에서 제안된 대로 HTTP 프로토콜에서 하는 것처럼 출력 형식을 클라이언트에 다시 전송하는 기능을 추가했습니다. 이 변경으로 #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 storage / table function을 사용할 때 glob 패턴에 대해 404(Not Found)인 URL을 건너뛸 수 있도록 했습니다. 또한 #34359 이슈를 해결합니다. #34392 (Kseniia Sumarokova).
clickhouse-local에 기본 입력 및 출력 포맷을 추가했으며, 이는 --input-format 및 --output-format 옵션으로 재정의할 수 있습니다. #30631을(를) 해결했습니다. #34352 (李扬).clickhouse-format에 대한 옵션을 추가했습니다.max_query_size,max_parser_depth를 추가하여 #30528 이슈를 해결했습니다. #34349 (李扬).- 클라이언트 시작 전에 수행되는 사전 입력(pre-input) 처리를 개선했습니다. #34308을 위한 변경입니다. #34336 (Amos Bird).
- PostgreSQL과의 호환성을 위해
REGEXP_MATCHES및REGEXP_REPLACE함수 별칭을 추가합니다. #30885 이슈를 종료합니다. #34334 (李扬). - 일부 서버는 HTTP 요청에 User-Agent 헤더가 포함되기를 기대합니다.
User-Agent헤더 항목이 다음 형식의 HTTP 요청에 추가되었습니다: User-Agent: ClickHouse/VERSION_STRING. #34330 (Saad Ur Rahman). - 일부 상황에서
DEADLOCK_AVOIDED오류를 방지하기 위해TRUNCATE쿼리에 대해 테이블 잠금을 획득하기 전에 머지 작업을 취소하도록 했습니다. #34302를 수정합니다. #34304 (tavplubix). - 로그에서 "Cancelled merging parts" 메시지의 심각도 수준을 변경합니다. 이 메시지는 오류가 아니기 때문입니다. 이를 통해 #34148를 해결합니다. #34232 (alexey-milovidov).
- PostgreSQL 스타일의 캐스트 연산자
::를[]및.연산자(배열 및 튜플 인덱싱)를 사용하는 표현식과 함께 사용할 수 있도록 기능을 추가했습니다. #34229 (Nikolay Degterinsky). parseDateTimeBestEffortFUNCTION이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 문자열 검색에서의 문제를 수정했습니다. 예를 들면
ẞ와ß입니다. 이로써 #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 mycast AS (n) -> cast(n as String)과 같은 EXPLAIN AST CREATE FUNCTION 쿼리가 지원되며, 이 쿼리는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를 big-endian 방식으로 파싱하고 저장합니다. #33723 (Frank Chen).
fromUnixTimestamp64함수 패밀리가 개선되었습니다. 이제Int64로 변환 가능한 모든 정수값을 허용합니다. 이 변경으로 다음 이슈가 해결되었습니다: #14648. #33505 (Andrey Zvonov).- 상수 기반
_shard_num구현( #7624 참고)을shardNum()함수( #27020 참고)를 사용한 구현으로 재구현하여, #16947에서 발견된 것과 같은 잠재적인 문제를 방지하도록 했습니다. #33392 (Azat Khuzhin). - Decimal과 Float 간 이항 산술 연산(더하기, 빼기, 곱하기, 나누기, 최소값, 최대값)을 지원합니다. #33355 (flynn).
- cgroups 제한을 반영하여
max_threads를 자동으로 감지합니다. #33342 (JaySon). - 새로운 clickhouse-keeper 설정
min_session_timeout_ms를 추가했습니다. 이제 clickhouse-keeper는 클라이언트 세션 타임아웃을min_session_timeout_ms및session_timeout_ms설정에 따라 결정합니다. #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이 작동하지 않던 문제를 수정합니다. - materialized view에서query_views_log의view_duration_ms가 올바르게 설정되지 않던 문제를 수정합니다. #34067 (Raúl Marín).- ZooKeeper에서 테이블 구조를 파싱하는 기능을 수정했습니다. 이제 ZooKeeper의 메타데이터를 로컬 메타데이터와 정규(canonical) 형식으로 비교합니다. 이는 ClickHouse 버전 간에 canonical 함수 이름이 변경될 수 있는 경우에 도움이 됩니다. #33933 (sunny).
- LDAP와의 연동 시 일부 문자를 적절히 이스케이프하도록 했습니다. #33401 (IlyaTsoi).
빌드/테스트/패키징 개선
- unbundled(번들되지 않은) 빌드 지원을 제거했습니다. #33690 (Azat Khuzhin).
- 테스트가 동일한 요소에 대한 비안정 정렬(non-stable sorting) 결과에 의존하지 않도록 했습니다. 동일한 요소의 정렬 순서에 의존할 때 발생할 수 있는 문제를 방지하기 위해, 디버그 모드에서 정렬 후 동일한 요소 구간을 무작위화하는 기능을 추가했습니다. #34393 (Maksim Kita).
- 스타일 검사에 상세 출력(verbosity)을 추가했습니다. #34289 (Mikhail f. Shiryaev).
- 더 이상 사용되지 않으므로
clickhouse-testDebian 패키지를 제거했습니다. #33948 (Ilya Yatsishin). - 빌드 시스템에서 운영 체제 패키지가 실수로 사용될 가능성을 제거하고, hermetic 빌드를 강제하기 위한 여러 개선을 수행했습니다. #33695 (Amos Bird).
버그 수정(공식 stable 또는 prestable 릴리스에서 사용자에게 노출되는 오동작)
max_parallel_replicas를 1로 설정한 상태에서allow_experimental_parallel_reading_from_replicas를 사용할 때 발생하던 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).
optimize_aggregation_in_order = 1및distributed_aggregation_memory_efficient = 0설정인 경우 발생하던Chunk should have AggregatedChunkInfo in MergingAggregatedTransform예외를 수정합니다. #34526를 해결합니다. #34532 (Anton Popov).- 인덱스 분석에서 정수와 부동소수점 숫자 간 비교를 수정했습니다. 이전에는 이로 인해 일부 그래뉼이 잘못 건너뛰어져 읽히지 않는 문제가 발생할 수 있었습니다. #34493 문제를 수정합니다. #34528 (Anton Popov).
- URL 엔진에서 압축 지원을 수정했습니다. #34524 (Frank Chen).
- 파일의 스키마 자동 감지에서 발생할 수 있는 'file_size: Operation not supported' 오류를 수정했습니다. #34479 (Kruglov Pavel).
- 테이블 삭제와 관련해 발생할 수 있는 레이스 컨디션을 수정합니다. #34416 (Kseniia Sumarokova).
- 쇼트서킷 함수 평가 과정에서 발생할 수 있는
Cannot convert column Function to mask오류를 수정했습니다. #34171 이슈를 종료합니다. #34415 (Kruglov Pavel). - URL 소스에서 스키마 추론을 수행할 때 발생할 수 있던 잠재적인 크래시를 수정했습니다. #34147을(를) 종료했습니다. #34405 (Kruglov Pavel).
- UDF에 대한 접근 권한이 원래는 전역 레벨에서 확인되어야 했으나, 데이터베이스 레벨에서만 확인되고 있었습니다. #34281를 해결합니다. #34404 (Maksim Kita).
- 엔진이
Memory인 데이터베이스에 대해 실행한SHOW CREATE DATABASE쿼리 결과에 잘못된 엔진 구문이 포함되던 문제를 수정합니다. 이로써 #34335가 해결됩니다. #34345 (alexey-milovidov). - replication 큐의 잘못된 상태와 "intersecting parts" 오류를 유발할 수 있는 극히 드문 레이스 컨디션 몇 가지를 수정했습니다. #34297 (tavplubix).
- 진행률 표시줄 너비를 수정합니다. 문자 수를 정수로 반올림하는 방식으로 잘못 계산되고 있었습니다. #34275 (alexey-milovidov).
- 서버 간 통신을 위한 클라이언트 정보(client information) 필드 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스토리지 엔진에서 드물게 발생하지만 치명적이지 않고, 추가 연결이 생성될 수 있던 경쟁 상태(race condition)를 수정했습니다. #34172 (alesapin).- S3와 같은 원격 파일 시스템(예: S3 위에 구현된 가상 파일 시스템은 아직 프로덕션에 적합하지 않은 실험적 기능임)에 데이터를 저장하는 MergeTree 테이블 엔진 계열에서 LowCardinality 컬럼을 읽는 동안 드물게 「Cannot read all data」 오류가 발생할 수 있는 버그를 수정했습니다. #34139 (alesapin).
- 네이티브 프로토콜이 변경된 경우 분산 테이블에 대한 INSERT를 수정합니다. 마지막 변경은 버전 22.1에서 이루어졌으므로, 해당 버전으로 업그레이드한 이후 분산 테이블에 대한 INSERT 작업이 일부 실패했을 수 있습니다. #34132 (Anton Popov).
- #33960에서 도입된
File테이블 엔진의 잠재적인 데이터 레이스를 수정합니다. #34111을(를) 해결합니다. #34113 (Kruglov Pavel). - ZooKeeper 연결이 끊어진 후 극히 드문 경우에 "intersecting parts" 오류가 발생할 수 있던 경미한 경쟁 상태를 수정했습니다. #34096 (tavplubix).
Native포맷을 사용하는 비동기 INSERT에서 발생하던 문제를 수정합니다. #34068 (Anton Popov).- replicated access storage와 Keeper(clickhouse-server에 내장됨)을 함께 사용할 때 서버가 시작되지 않던 버그를 수정했습니다. 기본 USER의 설정을 사용하는 대신 Keeper 소켓 타임아웃을 위한 두 개의 전용 설정을 도입했습니다:
keeper_server.socket_receive_timeout_sec및keeper_server.socket_send_timeout_sec. #33973를 수정합니다. #33988 (alesapin). - 손상된 푸터가 있는 ORC 파일을 파싱하는 동안 발생하던 세그멘테이션 폴트(segfault)를 수정합니다. #33797 이슈를 해결합니다. #33984 (Kruglov Pavel).
- 쿼리 매개변수(준비된 SQL 문)에서 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 기반 가상 파일 시스템은 아직 프로덕션 환경에 사용할 준비가 되지 않은 실험적 기능입니다). #33912 (Amos Bird).
- 식별자가 아닌 인자를 사용하는 람다(lambda)로 SQL UDF를 생성할 때 발생하던 크래시를 수정합니다. #33866 이슈를 해결합니다. #33868 (Maksim Kita).
- 희소 컬럼 사용 방식을 수정했습니다(실험적 설정
ratio_of_defaults_for_sparse_serialization으로 활성화할 수 있음). #33849 (Anton Popov). - 레플리카가 실제로 읽기 전용일 때
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).- 와이드 포맷과 프로젝션을 사용할 때 데이터 파트를 생성하는 과정에서
CHECK TABLE을 실행할 때 발생하던 버그를 수정했습니다. #33774 (李扬). - MergeTree에서 count()와 INSERT/merges/... 사이의 사소한 경쟁 상태를 수정했습니다(SELECT에서 optimize_trivial_count_query가 설정된 경우 잘못된 행 수를 반환할 수 있었습니다). #33753 (Azat Khuzhin).
- 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 replication"(현재 개발 중인 기능으로, 프로덕션 환경에서는 사용하면 안 되는 기능)에서 TTL move 시 데이터가 중복되는 버그를 수정합니다. #33643을(를) 수정합니다. #33642 (alesapin).
optimize_aggregation_in_order = 1인 경우 발생하던Chunk should have AggregatedChunkInfo in GroupingAggregatedTransform오류를 수정했습니다. #33637 (Azat Khuzhin).Nested컬럼 이름에 마침표(.)가 포함되어 있고, 해당 컬럼에 대해 기본값이 생성되는 경우(예: 컬럼이 명시되지 않은 상태에서 insert가 수행될 때) 발생할 수 있는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함수는 이전에는 파서 수준에서만 구현되어 있었으나 이제 완전한 기능을 제공합니다.left또는right함수를 별칭 없이 사용하는 분산 쿼리는 클러스터에 서로 다른 버전의 clickhouse-server가 포함되어 있는 경우 예외가 발생할 수 있습니다. 클러스터를 업그레이드하는 도중 이 오류가 발생하면, 모든 노드가 동일한 버전을 사용하도록 클러스터 업그레이드를 완료해야 합니다. 또한 이 문제를 피하기 위해 쿼리에서 컬럼에 별칭(AS something)을 추가할 수도 있습니다. #33407 (alexey-milovidov).- 이 버전부터 스칼라 서브쿼리에 의한 리소스 사용량이 완전히 집계됩니다. 이 변경으로 스칼라 서브쿼리에서 읽은 행은 이제 query_log에 보고됩니다. 스칼라 서브쿼리가 캐시된 경우(반복되거나 여러 행에 대해 호출되는 경우) 읽은 행 수는 한 번만 집계됩니다. 이 변경으로 스칼라 서브쿼리를 실행하는 동안 쿼리를 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에 있는 파일을 병렬로 처리할 수 있게 해 주는 테이블 함수
hdfsCluster가 추가되었으며,s3Cluster와 유사하게 동작합니다. #32400 (Zhichang Yu). - AWS S3 기반 디스크에 대해 구현된 방식과 유사하게, Azure Blob Storage 기반 디스크를 지원하도록 기능을 추가했습니다. #31505 (Jakub Kuklis).
CREATE VIEW에서COMMENT사용을 허용합니다(모든 종류의 VIEW에 대해). #31062 (Vasily Nemkov).- 구성이 변경되면 리스닝 포트와 프로토콜을 동적으로 다시 초기화합니다. #30549 (Kevin Michel).
left,right,leftUTF8,rightUTF8함수를 추가했습니다. 음수 오프셋(문자열 끝에서부터의 오프셋)을 사용할 때의substringUTF8함수 구현 오류를 수정했습니다. #33407 (alexey-milovidov).H3좌표계용 새로운 함수인h3HexAreaKm2,h3CellAreaM2,h3CellAreaRads2를 추가합니다. #33479 (Bharat Nallan).MONTHNAMEFUNCTION을 추가했습니다. #33436 (usurai).- 함수
arrayLast가 추가되었습니다. #33390 이슈를 해결합니다. #33415에서 함수arrayLastIndex가 추가되었습니다. #33465 (Maksim Kita). decodeURLComponent와 약간 다른decodeURLFormComponent함수를 추가합니다. #10298 이슈를 닫습니다. #33451 (SuperDJY).- 일반 메트릭과 태그 메트릭에 대해
GraphiteMergeTree롤업 규칙을 분리할 수 있도록 했습니다 (rule_type필드는 선택 사항입니다). #33494 (Michail Safronov).
성능 개선
- 모든 하위 테이블이
PREWHERE를 지원하는 경우Merge엔진 테이블에 대해 조건을PREWHERE로 이동하는 기능(optimize_move_to_prewhere설정)을 지원합니다. #33300 (Anton Popov). - URL 스토리지에 대한 glob 패턴 처리 효율을 개선했습니다. 이제 재시도를 포함하여 수백만 개의 URL에 대해 손쉽게 병렬로 쿼리할 수 있습니다. #32866 이슈를 해결합니다. #32907 (Kseniia Sumarokova).
- 파서에서 지수적인 백트래킹이 발생하지 않도록 했습니다. #20158 이슈를 해결합니다. #33481 (alexey-milovidov).
untuple함수 남용으로 인해 쿼리 분석 복잡도가 지수적으로 증가하던 문제(퍼저로 발견)를 수정했습니다. #33297 이슈를 해결합니다. #33445 (alexey-milovidov).- 문자열 속성을 가진 딕셔너리에 대해 할당되는 메모리 사용량을 줄였습니다. #33466 (Maksim Kita).
reinterpret함수의 성능을 소폭 개선했습니다. #32587 (alexey-milovidov).- 유의미하지 않은 변경입니다. 극히 드문 경우이지만, 모든 레플리카에서 데이터 파트가 손실된 뒤 일부 데이터 파트를 머지한 후에는, 후속 쿼리에서 파티션 프루닝 동안 건너뛰는 파티션 수가 더 적어질 수 있습니다. 실제 영향은 거의 없습니다. #32220 (Azat Khuzhin).
- 크기 계산 로직을 최적화하여
clickhouse-keeper의 쓰기 성능을 개선했습니다. #32366 (zhanglistar). - 단일 파트 프로젝션 구체화를 최적화했습니다. #31669 이슈를 해결합니다. #31885 (Amos Bird).
- system 테이블의 쿼리 성능을 개선했습니다. #33312 (OnePiece).
- 볼륨 간에 이동할 수 있는 MergeTree 파트의 선택 로직을 최적화했습니다. #33225 (OnePiece).
- 순차 키에 대해 잘못된 해시 함수를 사용하여
sparse_hashed딕셔너리의 성능이 저하되던 문제를 수정했습니다. #32536 (Azat Khuzhin).
Experimental Feature
- 샘플 키를 사용하지 않는 분산 쿼리에서 하나의 세그먼트 내 여러 레플리카로부터 병렬로 읽기를 지원합니다. 이를 활성화하려면
allow_experimental_parallel_reading_from_replicas = 1로 설정하고max_parallel_replicas를 임의의 값으로 설정하십시오. 이 변경으로 #26748가 해결되었습니다. #29279 (Nikita Mikhaylov). - 희소 직렬화를 구현했습니다. 이를 통해 기본값(0) 값이 많이 포함된 컬럼에 대해 디스크 공간 사용량을 줄이고 일부 쿼리의 성능을 향상할 수 있습니다.
ratio_for_sparse_serialization을 설정하여 활성화할 수 있습니다. 희소 직렬화는 컬럼에서 기본값 개수와 전체 값 개수의 비율이 해당 임계값을 초과하는 경우 해당 컬럼에 대해 동적으로 선택됩니다. 직렬화 방식(기본 또는 희소)은 파트 내의 각 컬럼마다 고정되지만, 파트 간에는 달라질 수 있습니다. #22535 (Anton Popov). - MaterializedMySQL 테이블 스키마를 사용자 지정하기 위한 "TABLE OVERRIDE" 기능을 추가했습니다. #32325 (Stig Bakken).
EXPLAIN TABLE OVERRIDE쿼리를 추가했습니다. #32836 (Stig Bakken).- MaterializedPostgreSQL에 대한 TABLE OVERRIDE 절을 지원하도록 했습니다. RFC: #31480. #32749 (Kseniia Sumarokova).
- 공유 데이터에 대한 zero-copy 마크용 ZooKeeper 경로를 변경했습니다. 「zero-copy replication」은 아직 개발 초기 단계의 프로덕션 비권장 기능이므로 사용하지 않는 것이 좋습니다. 그러나 이미 사용한 적이 있다면 이 변경 사항을 반드시 염두에 두어야 합니다. #32061 (ianton-ru).
- WINDOW VIEW watch 쿼리에 대한 Events 절을 지원합니다. #32607 (vxider).
clickhouse-keeper에서 숫자 해시를 명시적으로 사용하는 ACL을 수정했습니다. 이제 동작이 ZooKeeper와 일치하며, 생성된 digest가 항상 허용됩니다. #33249 (小路). #33246.- 파트를 분리(detach)할 때 발생하던 예기치 않은 PROJECTION 제거 문제를 수정했습니다. #32067 (Amos Bird).
개선 사항
- 이제
1970-01-01 00:00:00이전 시각을 생성하는 날짜/시간 변환 함수는 오버플로 대신 0으로 포화 처리됩니다. #29953 (Amos Bird). 또한 날짜 절단 함수가 Unix epoch 이전의 결과를 반환하는 경우 인덱스 분석 과정에서 발생하던 버그도 수정합니다. - 클라이언트에서 리소스 사용량(총 CPU 사용량, 총 RAM 사용량, 호스트별 최대 RAM 사용량)을 항상 표시하도록 했습니다. #33271 (alexey-milovidov).
Bool타입의 직렬화와 역직렬화를 개선하고 값의 유효 범위를 확인했습니다. #32984 (Kruglov Pavel).SET쿼리 또는 HTTP 요청의 쿼리 매개변수를 사용해 잘못된 setting이 정의된 경우, 오류 메시지에 잘못된 setting 문자열과 유사한 setting 제안(존재하는 경우)이 함께 표시됩니다. #32946 (Antonio Andelic).- clickhouse-client 및 clickhouse-local에서 잘못 입력된 설정 이름에 대한 힌트 제공을 지원합니다. #32237를 해결합니다. #32841 (凌涛).
- 구체화된 뷰(Materialized View)에서 virtual 컬럼을 사용할 수 있도록 했습니다. #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>1</secure>의 대체 표기인<secure/>를 지원하도록 했습니다. 이를 통해 #33270 이슈를 해결했습니다. #33330 (SuperDJY). - Ctrl+C를 두 번 연속으로 누르면 진행 중인 쿼리가 완료되기를 기다리지 않고
clickhouse-benchmark가 즉시 종료됩니다. 이로써 #32586 이슈가 해결되었습니다. #33303 (alexey-milovidov). parseDateTimeBestEffortFUNCTION에서 밀리초 정밀도의 Unix 타임스탬프를 지원합니다. #33276 (Ben).- 외부 테이블에서
Arrow/Parquet/ORC포맷으로 데이터를 읽는 동안 쿼리를 취소할 수 있도록 했습니다. 대용량 파일에서input_format_allow_seeks설정을 false로 지정한 경우 쿼리 취소가 실패하던 문제를 수정했습니다. Closes #29678. #33238 (Kseniia Sumarokova). - 테이블 엔진이
SETTINGS절을 지원하는 경우 설정을 키-값 쌍 또는 config를 통해 전달할 수 있도록 했습니다. MySQL에 이 기능을 추가했습니다. #33231 (Kseniia Sumarokova). - 필요한 경우 널 허용(Nullable) 기본 키를 사용하지 못하도록 정확하게 차단합니다. 이는 #32780을 위한 변경입니다. #33218 (Amos Bird).
- 아직 아무 데이터도 가져오지 못한 경우
PostgreSQL연결에 대한 재시도 기능을 추가합니다. #33199를 해결합니다. #33209 (Kseniia Sumarokova). - 외부 딕셔너리용 구성 키를 검증합니다. #33095. #33130 (Kseniia Sumarokova).
clickhouse-local내부에서 프로파일 정보를 전송하도록 했습니다. #33093 이슈를 해결했습니다. #33097 (Kseniia Sumarokova).- 단락 평가:
throwIf함수에 대한 지원을 추가했습니다. #32969를 해결했습니다. #32973 (Maksim Kita). - (비공식 빌드에서만 발생하는 문제입니다). 압축된 Decimal, String, FixedString 및 Array 컬럼에 데이터를 삽입 시 발생하던 세그멘테이션 폴트를 수정했습니다. 이로써 #32939가 해결되었습니다. #32940 (N. Kolotov).
- SQL 사용자 정의 함수에서 서브쿼리를 지정할 수 있는 기능을 추가했습니다. 예:
CREATE FUNCTION test AS () -> (SELECT 1). #30755를 해결했습니다. #32758 (Maksim Kita). - #28671에 대한 gRPC 압축 지원을 개선했습니다. #32747 (Vitaly Baranov).
- 서버를 종료하거나 테이블을 분리할 때 WAL이 활성화되어 있지 않으면, 모든 In-Memory 데이터 파트를 플러시하도록 했습니다. #32742 (nauta).
- MySQL의 연결 타임아웃을 제어할 수 있습니다(이전에는 딕셔너리(dictionary) 소스에만 지원되었습니다). #16669를 해결합니다. 이전에는 기본
connect_timeout값이 다소 작았으나, 이제는 설정할 수 있습니다. #32734 (Kseniia Sumarokova). MongoDB스토리지에서authSource옵션을 지원합니다. #32594 이슈를 해결합니다. #32702 (Kseniia Sumarokova).genarateRandom테이블 FUNCTION에서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에 기본값이 true인execute_direct설정을 추가했습니다.ExecutableDictionary,ExecutablePoolDictionary에 기본값이 false인execute_direct설정을 추가했습니다. #30957 (Maksim Kita).- 비트맵 집계 함수는 범위를 벗어난 인수에 대해 래핑(wraparound) 대신 올바른 결과를 제공합니다. #33127 (DR).
FROM INFILE구문이 포함된 잘못된 쿼리의 파싱을 수정합니다. #33521 (Kruglov Pavel).- 경로에 glob 패턴이 포함된 경우
S3에 쓰지 못하도록 했습니다. #33142 (Kruglov Pavel). - 배치 모드에서 단일 쿼리를 실행할 때
clickhouse-client는--echo옵션을 사용하지 않았습니다. #32843 (N. Kolotov). - clickhouse-local에서
--database옵션을 사용할 수 있습니다. #32797 (Kseniia Sumarokova). - SQL 일반 FUNCTION
file에서 의외로 좋지 않았던 코드를 수정했습니다. 이제 심볼릭 링크(symlink)를 지원합니다. #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). - 널 허용 기본 키(nullable primary key) 기능에 대한 테스트를 추가했습니다. 다양한 타입과 MergeTree 종류, 그리고 랜덤으로 생성된 데이터를 사용하는 더 많은 테스트를 추가했습니다. #33228 (Amos Bird).
- 웹 브라우저에서 플래이키(flaky) 테스트를 시각화하기 위한 간단한 도구를 추가했습니다. #33185 (alexey-milovidov).
- 공유 빌드에 대해 hermetic 빌드를 활성화했습니다. 주로 개발자를 위한 기능입니다. #32968 (Amos Bird).
libc++및libc++abi를 최신 버전으로 업데이트했습니다. #32484 (Raúl Marín).- 외부 .NET 클라이언트(ClickHouse.Client)에 대한 통합 테스트를 추가했습니다. #23230 (Oleg V. Kozlyuk).
- Git 정보를 ClickHouse 바이너리 파일에 주입했습니다. 이를 통해 ClickHouse 바이너리 파일에서 소스 코드 리비전을 쉽게 확인할 수 있습니다. #33124 (taiyang-li).
- ConfigProcessor에서 사용되지 않는 코드를 제거했습니다. Yandex 전용 코드는 더 이상 사용되지 않습니다. 이 코드는 하나의 사소한 결함을 포함하고 있었으며, 이 결함은 #33032에서 Mallik Hassan에 의해 보고되었습니다. 이 변경으로 #33032가 해결되었습니다. #33026 (alexey-milovidov).
버그 수정 (공식 stable 또는 prestable 릴리스에서 사용자에게 눈에 띄는 잘못된 동작)
- 포맷 파싱과 관련된 여러 수정 사항입니다. 이는
clickhouse-server가 공격자에게 쓰기 권한으로 개방되어 있는 경우에 해당합니다. 특수하게 조작된Native포맷 입력 데이터가 초기화되지 않은 메모리를 읽거나 충돌을 유발할 수 있습니다. 이는clickhouse-server가 공격자에게 쓰기 권한으로 개방되어 있는 경우에 해당합니다. #33050 (Heena Bansal). Apache Avro 바이너리 포맷에서 Apache Avro Union 타입 인덱스가 범위를 벗어날 수 있는 문제를 수정했습니다. #33022 (Harry Lee). Native 포맷에서LowCardinality데이터를 역직렬화할 때LowCardinality데이터에서 널 포인터 역참조가 발생할 수 있는 문제를 수정했습니다. #33021 (Harry Lee). - 응답이 전송되면 ClickHouse Keeper 핸들러가 작업을 올바르게 제거합니다. #32988 (JackyWoo).
- 잠재적인 off-by-one QUOTA 계산 오류: QUOTA 한도에 도달하지 않은 것으로 잘못 판단되지만 실제로는 한도를 초과하는 문제가 있었습니다. 이 수정은 #31174를 해결합니다. #31656 (sunny).
- String에서 IPv4 또는 IPv6로, 그리고 다시 그 반대로
CAST할 때의 동작을 수정했습니다. 변환이 실패했을 때 표시되는 오류 메시지도 수정했습니다. #29224 (Dmitry Novik) #27914 (Vasily Nemkov). - 원격 서버에서 실행하는 동안 발생하던
Unknown aggregate function nothing예외를 수정했습니다. 이를 통해 #16689 문제가 해결되었습니다. #26074 (hexiaoting). - 분산 쿼리에서 데이터베이스가 명시되지 않은 JOIN에서 잘못된 데이터베이스가 사용되던 문제를 수정했습니다(Fixes: #10471). #33611 (Azat Khuzhin).
- 파일에 두 번째로 데이터를 insert한 후 Apache
Avro포맷에서 발생하는 segfault를 수정합니다. #33566 (Kruglov Pavel). - 스키마에
Dictionary타입이 포함된 경우 ApacheArrow포맷에서 발생하는 세그멘테이션 폴트(segfault)를 수정합니다. #33507 이슈를 종료합니다. #33529 (Kruglov Pavel). - 쿼리 외부에서 설정한
offset및limitSETTINGS가 VIEW에 잘못 적용될 수 있습니다. #33289 #33518를 수정했습니다(hexiaoting). - 기본값이 있는 중첩된
LowCardinality컬럼이 있는 테이블에 삽입 시 발생할 수 있는Block structure mismatch예외가 발생하는 문제를 수정합니다. #33028를 수정합니다. #33504 (Nikolai Kochetov). - DDL을 사용해 생성된
range_hashed딕셔너리의 범위 최소 및 범위 최대 속성에 대한 표현식을 수정합니다. #30809를 해결합니다. #33478 (Maksim Kita). - 동시에 DROP이 수행되는 상황에서 materialized view에 대한 INSERT 시 발생할 수 있는 잠재적인 use-after-free 문제를 수정합니다 (Azat Khuzhin).
- Linux 커널의 버그를 우회하기 위해 EOF를 넘어서 읽지 않도록 합니다. 이 버그는 커널 버전 3.14..5.9에서 재현되며,
index_granularity_bytes=0(즉, adaptive index granularity를 끄는 설정)이 필요합니다. #33372 (Azat Khuzhin). SYSTEM SUSPEND및SYSTEM ... THREAD FUZZER명령에 대한 접근 제어가 누락되어 있었으며, 수정되었습니다. 작성자: Kevin Michel. #33333 (alexey-milovidov).system.tables,system.dictionaries에서 딕셔너리에 대한COMMENT가 표시되지 않던 문제를 수정합니다.Dictionary엔진에 대한COMMENT를 수정할 수 있도록 허용합니다. #33251를 해결합니다. #33261 (Maksim Kita).async_insert설정이 활성화된 비동기 INSERT를 쿼리 로그에 추가했습니다. 이전에는 이러한 쿼리가 쿼리 로그에 기록되지 않았습니다. #33239 (Anton Popov).- 외부 데이터베이스에 대한 쿼리에서
WHERE 1 = 0표현식을 전송하던 문제를 수정합니다. #33152 이슈를 해결합니다. #33214 (Kseniia Sumarokova). - MaterializedPostgreSQL에 대한 DDL 검증을 수정합니다.
materialized_postgresql_allow_automatic_update설정을 수정합니다. #29535를 해결합니다. #33200 (Kseniia Sumarokova). 사용되지 않는 replication 슬롯이 항상 제거되도록 합니다. #26952에서 발견되었습니다. #33187 (Kseniia Sumarokova). 기본이 아닌 스키마를 사용하는 테이블에 대한 MaterializedPostreSQL detach/attach(복제에서 제거/추가)를 수정합니다. #29535에서 발견되었습니다. #33179 (Kseniia Sumarokova). DROP MaterializedPostgreSQL 데이터베이스를 수정합니다. #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 누수 문제(즉, 서버로 업로드된 external tables 및 기타 리소스가 해제되지 않는 문제)를 수정했습니다. #32982 (Azat Khuzhin).
- 사용자 지정 CSV 구분자 사용 시
CSV포맷에서 튜플이 잘못 출력되던 문제를 수정합니다. #32981 (Kruglov Pavel). - HA namenode 주소를 사용할 수 없던 HDFS URL 검사를 수정했습니다. 이 버그는 https://github.com/ClickHouse/ClickHouse/pull/31042 에서 도입되었습니다. #32976 (Kruglov Pavel).
- 위치 인수가 아닌 인수에 대해 「positional argument out of bounds」와 같은 예외가 발생하던 문제를 수정했습니다. #31173#event-5789668239을 종료합니다. #32961 (Kseniia Sumarokova).
- HTTP 쿼리를 통해 Set을 채우는 동안 예기치 않은 EOF가 발생하는 경우(즉, 클라이언트가 중간에 전송을 중단한 경우, 예:
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가 충분히 큰 경우)의 UB(정의되지 않은 동작)를 수정합니다. #32955 (Azat Khuzhin). replaceRegexpAll함수의 회귀(regression) 버그를 수정합니다. 일치한 부분 문자열이 비어 있을 때 이 함수가 올바르게 동작하지 않았습니다. #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 tuple(...)로 파싱되는GROUP BY (list of columns)를 사용하는 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에 대한 multipart 업로드를 사용해 S3로 데이터를 INSERT할 때 업로드가 중단(abort)될 수 있습니다. #32504. #32649 (vdimir).
RabbitMQ스토리지 시작 시 채널 생성 시점을 지연하여 발생할 수 있는 예외를 수정합니다. #32584 (Kseniia Sumarokova).- DROP TABLE과 INSERT가 병렬로 실행되는 경우 테이블의 수명 관리 문제(예: use-after-free 발생 가능성)를 수정합니다. #32572 (Azat Khuzhin).
CustomSeparated,Template,Regexp,MsgPack,JSONAsString포맷에서 비동기 INSERT가 동작하도록 수정합니다. 그 이전에는 해당 포맷에서 수행된 비동기 INSERT가 데이터를 전혀 읽지 못했습니다. #32530 (Kruglov Pavel).- 분산 테이블에서의
groupBitmapAnd함수 동작을 수정했습니다. #32529 (minhthucdao). - 퍼저(fuzzer)로 발견된
JOIN연산의 크래시를 수정하고 #32458 이슈를 닫습니다. #32508 (vdimir). - Apache Arrow 컬럼 중복 상황을 올바르게 처리하도록 수정했습니다. #32507 (Dmitriy Mokhnatkin).
- 일부 테이블 컬럼 이름이
ALL또는DISTINCT인 경우 오류가 발생하던 분산 쿼리의 모호한 쿼리 포맷팅 문제를 수정합니다. 이 변경으로 #32391이 해결됩니다. #32490 (alexey-milovidov). - 아직 구체화되지 않은 skipping 인덱스를 사용하려는 쿼리가 실패하는 문제를 수정합니다. #32292 및 #30343를 수정합니다. #32359 (Anton Popov).
- 동일한 컬럼에 2개를 초과하는 행 정책(row policy)이 존재할 때, 동일한 세션에서 두 번째 쿼리부터
SELECT쿼리가 올바르게 동작하지 않던 문제를 수정합니다. #31606. #32291 (SuperDJY). - 소수부를 포함한 Unix 타임스탬프를
DateTime64로 변환하는 동작을 수정했습니다. 음수 Unix 타임스탬프(1970-01-01 이전)에 대해 소수 부분이 반대로 계산되는 문제가 있었습니다. #32240 (Ben). - 일부 복제 큐 항목이 기본값 1일인
temporary_directories_lifetime동안Directory tmp_merge_<part_name>또는Part ... (state Deleting) already exists, but it will be deleted soon등의 오류와 함께 대기 상태로 남아 있을 수 있었습니다. 이 문제가 수정되었습니다. #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).