이전에 원치 않는 동작을 하던 기능에 대한 수정입니다. Kafka/RabbitMQ/FileLog에 대해 direct select를 허용하지 않습니다. stream_like_engine_allow_direct_select 설정을 통해 활성화할 수 있습니다. materialized view가 연결되어 있는 경우에는, 설정으로 활성화하더라도 direct select가 허용되지 않습니다. Kafka 및 RabbitMQ에서 direct select가 허용된 경우에도 기본적으로 메시지를 커밋하지 않습니다. direct select 시 커밋을 활성화하려면, 사용자는 스토리지 수준 설정 kafka{rabbitmq}_commit_on_select=1(기본값 0)을 사용해야 합니다. #31053 (Kseniia Sumarokova).
SETTING 이름 변경. TSV/CSV 입력 포맷에 대해 사용자 정의 null 표현을 지원합니다. TSV/CSV/JSONCompactStringsEachRow/JSONStringsEachRow 입력 포맷에서 Nullable(String)을 역직렬화하는 문제를 수정했습니다. output_format_csv_null_representation 및 output_format_tsv_null_representation을 각각 format_csv_null_representation 및 format_tsv_null_representation으로 이름을 변경했습니다. #30497 (Kruglov Pavel).
이미 사용되지 않는 코드의 추가적인 폐기. 이는 20.6보다 이전 버전의 ClickHouse를 사용하는 경우에만 관련이 있습니다. 20.6부터는 여러 리더를 지원하므로 ReplicatedMergeTree에서 "leader election" 메커니즘이 제거되었습니다. 이전 버전에서 업그레이드하는 경우, 이전 버전의 레플리카가 리더라면 업그레이드 후 서버가 시작되지 않습니다. 새 버전을 시작하려면 이전 버전의 레플리카를 중지해야 합니다. 이후에는 20.6보다 이전 버전으로 다운그레이드할 수 없습니다. #32140 (tavplubix).
INSERT 중 검사 없이 CONSTRAINT ... ASSUME ...를 추가했습니다. 보다 편리한 최적화를 위해 쿼리를 CNF 형태로 변환하는 기능을 추가했습니다(https://github.com/ClickHouse/ClickHouse/issues/11749). 제약 조건을 사용한 간단한 쿼리 재작성 기능을 추가했습니다(현재는 단순 매칭만 지원하며, 이후 <,=,>...를 지원하도록 개선될 예정입니다). 가능한 경우 무거운 컬럼을 가벼운 컬럼으로 대체할 수 있는 기능을 추가했습니다. #18787 (Nikita Vasilev).
요약: 텍스트 포맷의 완전성과 일관성이 크게 향상되었습니다.TSV, TSVRaw, CSV, JSONCompactEachRow, JSONCompactStringsEachRow 포맷을 리팩터링하고, 코드 중복을 제거하며, -WithNames 및 -WithNamesAndTypes 접미사를 가진 포맷을 위한 공통 인터페이스를 추가합니다. CSVWithNamesAndTypes, TSVRawWithNames, TSVRawWithNamesAndTypes, JSONCompactEachRowWIthNames, JSONCompactStringsEachRowWIthNames, RowBinaryWithNames 포맷을 추가합니다. TSVWithNamesAndTypes, TSVRaw(WithNames/WIthNamesAndTypes), CSVWithNamesAndTypes, JSONCompactEachRow(WithNames/WIthNamesAndTypes), JSONCompactStringsEachRow(WithNames/WIthNamesAndTypes) 포맷에 대해 병렬 파싱을 지원합니다. RowBinaryWithNamesAndTypes 포맷에 대해 컬럼 매핑 및 타입 검사를 지원합니다. <format_name>WIthNamesAndTypes 포맷에 기록된 타입이 테이블 구조와 일치하는지 확인해야 하는지를 지정하는 input_format_with_types_use_header SETTING을 추가합니다. input_format_csv_empty_as_default SETTING을 추가하고, CSV 포맷에서 input_format_defaults_for_omitted_fields 대신 이를 사용합니다(이 SETTING은 csv_empty_as_default를 제어하면 안 되기 때문입니다). input_format_defaults_for_omitted_fields SETTING의 사용 방식을 수정합니다(이전에는 csv_empty_as_default로만 사용되었으나, 누락된 필드에 대한 기본 표현식 계산을 제어해야 합니다). TSVRaw 포맷에서 널 허용(Nullable) 입력/출력을 수정하여, TSV로 삽입할 때 이 포맷이 완전히 호환되도록 합니다. input_format_null_as_default가 활성화된 경우 LowCardinality(Nullable)에 NULL을 삽입하는 동작을 수정합니다(이전에는 실제 NULL 대신 기본값이 삽입되었습니다). JSONStringsEachRow/JSONCompactStringsEachRow 포맷에서 문자열 역직렬화를 수정합니다(문자열이 첫 번째 '\n' 또는 '\t'까지로만 파싱되었습니다). Template 입력 포맷에서 Raw 이스케이프 규칙을 사용할 수 있는 기능을 추가합니다. JSONCompactEachRow(WithNames/WIthNamesAndTypes) 입력 포맷에 대한 진단 정보를 추가합니다. min_chunk_bytes_for_parallel_parsing SETTING이 단일 행의 바이트 수보다 작은 경우 -WithNames 포맷의 병렬 파싱 시 발생하는 버그를 수정합니다. #30178 (Kruglov Pavel). CustomSeparated 입력/출력 포맷에서 컬럼의 이름과 타입을 출력/파싱할 수 있도록 지원합니다. TSVWithNames/WithNamesAndTypes와 유사한 CustomSeparatedWithNames/WithNamesAndTypes 포맷을 추가합니다. #31434 (Kruglov Pavel).
더 큰 윈도우에서 exponentialMovingAverage보다 더 효율적인 윈도우 함수 exponentialTimeDecayedSum, exponentialTimeDecayedMax, exponentialTimeDecayedCount, exponentialTimeDecayedAvg를 도입했습니다. 또한 더 많은 사용 사례를 지원하도록 했습니다. #29799 (Vladimir Chebotarev).
s3 / url / hdfs 포맷 Parquet, ORC, Arrow로 읽을 때 메모리 사용량을 줄입니다 (input_format_allow_seeks 설정으로 제어되며, 기본적으로 활성화되어 있습니다). 또한 탐색(seek)을 제어하기 위한 remote_read_min_bytes_for_seek 설정을 추가합니다. #10461 및 #16857 이슈를 종료합니다. #30936 (Kseniia Sumarokova).
일반 메트릭과 태그 메트릭에 대해 GraphiteMergeTree 롤업 규칙을 분리할 수 있도록 허용합니다(선택적 rule_type 필드). #25122 (Michail Safronov).
remote()에 대한 불필요한 DESC TABLE 요청을 제거합니다 (remote('127.1', system.one)과 같이 문자열이 아닌 식별자를 db.table로 사용하는 경우, 불필요한 DESC TABLE 요청이 있었습니다). #32019 (Azat Khuzhin).
설정 optimize_functions_to_subcolumns가 활성화된 경우, tupleElement 함수를 서브컬럼을 읽도록 최적화합니다. #31261 (Anton Popov).
설정 optimize_functions_to_subcolumns가 활성화된 경우, mapContains 함수를 서브컬럼 key를 읽도록 최적화합니다. #31218 (Anton Popov).
merge_tree_min_rows_for_concurrent_read_for_remote_filesystem 및 merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem 설정을 추가합니다. #30970 (Kseniia Sumarokova).
Template/CustomSeparated 포맷에서 따옴표 이스케이프 규칙을 사용해 알 수 없는 필드를 건너뛰는 동작을 개선했습니다. 이전에는 따옴표로 둘러싸인 문자열만 건너뛸 수 있었지만, 이제는 모든 타입의 값을 건너뛸 수 있습니다. #32204 (Kruglov Pavel).
이제 clickhouse-keeper는 구성에 중복된 ID나 엔드포인트가 포함되어 있을 경우 시작하거나 구성 변경 사항을 적용하지 않습니다. #31339을(를) 수정했습니다. #32121 (alesapin).
URL 엔진에서 발행하는 HTTP 요청에 Content-Type 헤더를 설정합니다. #32113 (Frank Chen).
output_format_json_array_of_rows가 활성화되어 있으면 JSONEachRow 포맷에 대해 Content-Type 헤더를 'application/json'으로 반환합니다. #32112 (Frank Chen).
설정에서 해당 매크로가 정의되어 있지 않은 경우, ReplicatedMergeTree 인수에서 매크로를 확장할 때 Replicated 데이터베이스 인수에 있는 세그먼트(shard) 및 레플리카(replica) 이름을 사용합니다. #31471 이슈를 해결합니다. #31488 (tavplubix).
min/max/count PROJECTION에 대한 분석이 더 잘 수행되도록 개선되었습니다. 이제 allow_experimental_projection_optimization을 활성화하면, 가상 min/max/count PROJECTION을 파티션 키에 포함된 컬럼과 함께 사용할 수 있습니다. #31474 (Amos Bird).
대화형 쿼리 편집 중 에디터가 대기 상태에 머무르는 문제를 수정했습니다 (SIGWINCH 수신 시 waitpid()가 -1을 반환하고 EDITOR와 clickhouse-local/clickhouse-client가 동시에 실행되는 경우). #31456 (Azat Khuzhin).
JSONCompactStrings(EachRow) 포맷에서 필드 뒤에 불필요한 데이터가 있을 경우 예외를 던지도록 했습니다. #31455 (Kruglov Pavel).
http_send_timeout 및 http_receive_timeout 설정의 기본값이 1800(30분)에서 180(3분)으로 변경되었습니다. #31450 (tavplubix).
MaterializedMySQL이 이제 CREATE TABLE ... LIKE ... DDL 쿼리를 지원합니다. #31410 (Stig Bakken).
시스템 테이블에서 show create table을 실행할 때 가상 CREATE 쿼리를 반환합니다. #31391 (SuperDJY).
이전에는 진행 상황이 numbers 테이블 함수에 대해서만 표시되었습니다. 이제는 numbers_mt 테이블 함수에 대해서도 표시됩니다. #31318 (Kseniia Sumarokova).
일부 더 이상 사용되지 않는 설정이 변경되면 system.warnings에 경고가 표시됩니다. #31252 (tavplubix).
MergeTree의 백그라운드 정리 작업을 위한 백오프(backoff)가 개선되었습니다. merge_tree_clear_old_temporary_directories_interval_seconds 및 merge_tree_clear_old_parts_interval_seconds 설정이 사용자 설정에서 MergeTree 설정으로 이동되었습니다. #31180 (tavplubix).
이제 모든 레플리카가 프로파일 이벤트 카운터에 대한 증분 정보만 클라이언트로 전송합니다. #31155 (Dmitry Novik). 이를 통해 clickhouse-client의 --hardware_utilization 옵션을 실제로 활용할 수 있게 되었습니다.
RENAME DATABASE/TABLE/DICTIONARY 쿼리에서 IF EXISTS 수정자를 지원합니다. 이 지시어를 사용하면 이름을 변경하려는 DATABASE/TABLE/DICTIONARY가 존재하지 않더라도 오류가 발생하지 않게 됩니다. #31081 (victorgao).
ClickHouse 딕셔너리 소스 내부의 로컬 세션은 더 이상 해당 세션의 이벤트를 세션 로그로 기록하지 않습니다. 이를 통해 종료 시 발생할 수 있는 교착 상태(tsan 경고)가 해결됩니다. 또한 이 PR에서는 불안정하게 동작하던 test_dictionaries_dependency_xml/를 수정합니다. #31013 (Vitaly Baranov).
MySQL 및 PostgreSQL과 마찬가지로 clickhouse-client에 \l, \d, \c 명령을 추가했습니다. #30876 (Pavel Medvedev).
clickhouse-local 또는 clickhouse-client의 경우: --interactive 옵션이 --query 또는 --queries-file과 함께 지정되면, 먼저 비대화형 모드에서와 같이 해당 쿼리를 실행한 다음 대화형 모드를 시작합니다. #30851 (Kseniia Sumarokova).
ZooKeeper에서 znode를 제거하는 동안 DROP이 실패하는 경우 발생할 수 있는 "The local set of parts of X doesn't look like the set of parts in ZooKeeper" 오류를 수정합니다. #30826 (Azat Khuzhin).
Avro 포맷을 Kafka와 함께 사용할 수 있습니다. output_format_avro_rows_in_file 설정이 추가되었습니다. #30351 (Ilya Golshtein).
하나의 MaterializedPostgreSQL 데이터베이스에 대해 하나 또는 여러 개의 PostgreSQL 스키마를 지정할 수 있게 했습니다. #28901 이슈를 해결했습니다. #29324 이슈를 해결했습니다. #28933 (Kseniia Sumarokova).
ClickHouse Keeper 내부 통신을 위한 기본 포트를 44444에서 9234로 변경했습니다. #30879를 수정했습니다. #31799 (alesapin).
Decimal 인수를 사용하는 transform 함수를 구현했습니다. #31839 (李帅).
잘못된 hdfs URL일 때 hdfs URL 구조를 추가로 검사하도록 하여 디버그 서버의 비정상 종료와 릴리스 서버의 DB::Exception: std::out_of_range: basic_string 오류를 수정합니다. #31042 (Kruglov Pavel).
hdfs 테이블 함수/엔진에서 발생할 수 있는 assert 실패를 수정하고 테스트를 추가합니다. #31036 (Kruglov Pavel).
cgroup 제한이 설정된 컨테이너에서 ClickHouse를 실행할 때 메모리 용량이 잘못 계산되었습니다. #31157 (Pavel Medvedev).
기본 표현식의 데이터 타입이 컬럼의 데이터 타입과 일치하지 않는 경우에도 올바르게 동작하도록 ALTER ... MATERIALIZE COLUMN ... 쿼리를 수정했습니다. #32348 (Anton Popov).
Decimal 인자를 사용하는 집계 함수 avgWeighted에서 SIGFPE로 인해 발생하던 크래시를 수정했습니다. #32053 이슈를 해결했습니다. #32303 (tavplubix).
Dictionary 테이블이 동일한 이름의 XML 딕셔너리를 참조하는 경우 Cannot attach 1 tables due to cyclic dependencies 오류와 함께 서버가 시작되지 않을 수 있었으나, 이 문제가 수정되었습니다. #31315 이슈를 수정합니다. #32288 (tavplubix).
Quoted 이스케이프 규칙에서 널 허용(Float) 타입에 대한 NaN 역직렬화 시 발생하던 파싱 오류를 수정합니다. #32190 (Kruglov Pavel).
XML 사전: 테이블 CREATE 쿼리에서 사용된 식별자는 새 버전으로 업그레이드하는 동안 default_database로 한정(qualified)되도록 변경되었습니다. #31963 종료. #32187 (Maksim Kita).
일부 레플리카에서 replicated_can_become_leader 설정이 비활성화되어 있는 경우, quorum을 사용해 데이터를 삽입할 때 활성 레플리카 수가 잘못 계산될 수 있었습니다. 이 문제가 수정되었습니다. #32157 (tavplubix).
Dictionaries: 커스텀 데이터베이스 쿼리에서 {condition} 이(가) 작동하지 않던 문제를 수정했습니다. #32117 (Maksim Kita).
Nullable(널 허용) 데이터 타입에서 cast_keep_nullable을 사용할 때의 CAST 동작을 수정했습니다(예: toUInt32OrDefault(toNullable(toUInt32(1)))에서 이전에는 PARAMETER_OUT_OF_BOUND 오류가 발생했습니다). #32080 (Azat Khuzhin).
일부 특수한 경우에 Join Storage의 CREATE TABLE 동작을 수정했습니다. #31680 이슈를 종료했습니다. #32066 (SuperDJY).
파트를 분리(detach)할 때 발생했던 Directory ... already exists and is not empty 오류를 수정했습니다. #32063 (tavplubix).
MaterializedMySQL (실험적 기능): MySQL의 DECIMAL 데이터를 잘못 해석하던 문제를 수정합니다. #31990 (Håvard Kvålen).
FileLog (실험적 기능) 엔진이 CREATE TABLE이 실패했을 때 불필요하게 메타데이터 디렉터리를 생성하는 문제를 수정했습니다. #31962 수정. #31967 (flynn).
일부 GET_PART 항목은 모든 레플리카에서 파트가 손실되고 동일한 파티션에 다른 파트가 없는 경우 복제 큐에서 계속 대기 상태로 남아 있을 수 있습니다. 파티션 키에 정수형 타입 컬럼이나 Date[Time] 컬럼만 포함되는 경우에 대해 이 문제가 수정되었습니다. #31485를 수정합니다. #31887 (tavplubix).
KeeperTCPHandler를 생성할 때 구성 경로를 keeper_server.session_timeout_ms에서 keeper_server.coordination_settings.session_timeout_ms로 변경합니다. operation_timeout에도 동일하게 적용합니다. #31859 (JackyWoo).
널 허용(Nullable) 타입이 널 허용 기본 키를 사용할 때 잘못 캐스트되는 문제를 수정합니다. (널 허용 기본 키는 사용을 권장하지 않는 기능이므로 사용하지 마십시오.) 이 수정은 #31075를 해결합니다. #31823 (Amos Bird).
쿼리 프로파일러 비활성화 문제를 수정합니다 (query_profiler_real_time_period_ns>0/query_profiler_cpu_time_period_ns>0인 경우, 쿼리 실행이 끝난 후에도 쿼리 프로파일러가 계속 활성화된 상태로 남아 있을 수 있었습니다). #31740 (Azat Khuzhin).
동시 ATTACH PARTITION 쿼리에서 드물게 발생하던 segfault 문제를 수정했습니다. #31738 (tavplubix).
출력에서 데이터 행과 진행률 행이 섞여 나오는 경우 JSONEachRowWithProgress 출력 형식에서 발생하는 레이스 조건을 수정합니다. #31736 (Kruglov Pavel).
클러스터 이름이 Replicated 데이터베이스 이름과 동일한 경우 ON CLUSTER 쿼리를 실행할 때 발생하던 there are no such cluster here 오류를 수정했습니다. #31723 (tavplubix).
문자열에 UTF-8 문자가 포함된 경우 ngrams FUNCTION이 올바르게 동작하도록 수정했습니다. #31706 (yandd).
IPv4와 같은 도메인 타입을 파싱할 때 설정값 input_format_allow_errors_num 및 input_format_allow_errors_ratio가 동작하지 않는 문제가 있었으며, 이를 수정했습니다. #31686을 수정합니다. #31697 (tavplubix).
zlib-ng, cassandra, mariadb-connector-c 및 xz, re2, sentry, gsasl, arrow, protobuf에 대해 자체 CMakeLists를 사용합니다. 이는 #20151을(를) 위해 필요합니다. #9226의 일부입니다. 빌드 시스템에서 성가신 불필요한 요소를 제거하기 위한 작은 단계입니다. #30599 (alexey-milovidov).
이는 실험적인 clickhouse-keeper 지원을 이미 사용 중인 경우에만 해당합니다. 이제 ClickHouse Keeper 스냅샷은 기본적으로 사용자 정의 ClickHouse LZ4 블록 압축 대신 ZSTD 코덱으로 압축됩니다. 이 동작은 compress_snapshots_with_zstd_format 조정 설정으로 비활성화할 수 있으며, 이 설정은 모든 쿼럼 레플리카에서 동일해야 합니다. 이전 버전과의 비호환성은 상당히 드물며, 복구 과정에서 새 노드가 스냅샷을 이전 노드로 전송하는 경우, 그리고 해당 이전 노드가 ZSTD 포맷의 스냅샷을 읽을 수 없는 경우에만 발생할 수 있습니다. #29417 (alesapin).
새 비동기 INSERT 모드는 삽입된 데이터를 누적했다가 백그라운드에서 하나의 배치로 저장하도록 합니다. 클라이언트에서는 async_insert를 설정하여, 데이터가 쿼리에 인라인되어 있거나 별도 버퍼에 있는(예: HTTP 프로토콜을 통한 INSERT 쿼리) INSERT 쿼리에 대해 이 모드를 활성화할 수 있습니다. wait_for_async_insert의 기본값이 true인 경우 클라이언트는 데이터가 테이블에 플러시될 때까지 대기합니다. 서버 측에서는 async_insert_threads, async_insert_max_data_size, async_insert_busy_timeout_ms 설정으로 제어합니다. #18282를 구현했습니다. #27537 (Anton Popov). #20557 (Ivan). 성능 관련 참고 사항: 비동기 INSERT를 사용하면 초당 약 10,000개의 개별 INSERT 쿼리를 실행할 수 있으므로, 초당 수백만 행 삽입 성능을 달성하려면 여전히 배치 단위로 INSERT하는 것이 권장됩니다.
clickhouse-local에 대화형 모드를 추가합니다. 이제 서버에 연결하지 않고도 명령줄 기반 ClickHouse 인터페이스를 사용하기 위해 clickhouse-local만 실행하여 파일 및 외부 데이터 소스의 데이터를 처리할 수 있습니다. 또한 clickhouse-client와 clickhouse-local의 코드를 통합합니다. #7203을 해결합니다. #25516을 해결합니다. #22401을 해결합니다. #26231 (Kseniia Sumarokova).
실행 가능(스크립트형) UDF(사용자 정의 함수) 지원이 추가되었습니다. 이러한 UDF는 어떤 프로그래밍 언어로든 작성할 수 있습니다. #28803 (Maksim Kita).
미리 정의된 외부 데이터 소스 연결을 허용합니다. 이를 통해 외부 데이터 소스를 사용할 때마다 자격 증명이나 주소를 지정하지 않아도 되며, 대신 이름으로 참조할 수 있습니다. #28367를 종료합니다. #28577 (Kseniia Sumarokova).
system 데이터베이스의 해당 테이블을 대상으로 하는 SCHEMATA, TABLES, VIEWS, COLUMNS 뷰를 포함한 INFORMATION_SCHEMA 데이터베이스를 추가했습니다. #9770을(를) 해결했습니다. #28691 (tavplubix).
다차원 cosine distance 및 euclidean distance 함수를 지원합니다. L1, L2, Lp, Linf 거리와 노름(norm)도 지원합니다. 튜플에 대한 scalar product 및 다양한 산술 연산자를 제공합니다. 이를 통해 #4509가 완전히 해결되었으며, 그 이상의 개선이 이루어졌습니다. #27933 (Alexey Boykov).
INTO OUTFILE 및 FROM INFILE에 대해 압축 및 압축 해제 기능이 추가되었습니다(자동 감지 또는 선택적 추가 매개변수로 지정). #27135 (Filatenkov Artur).
HTTP OPTIONS 요청을 통한 CORS(Cross-Origin Resource Sharing) 지원을 추가합니다. 이제 Grafana는 별도의 편법 없이 serverless 요청에서도 동작합니다. #18693를 해결합니다. #29155 (Filatenkov Artur).
tokens FUNCTION을 추가했습니다. 이 FUNCTION은 비영숫자(non-alphanumeric) ASCII 문자를 구분자로 사용하여 문자열을 토큰으로 분할할 수 있습니다. #29981 (Maksim Kita). 텍스트에서 n그램을 추출하는 ngrams FUNCTION을 추가했습니다. #29699을 해결합니다. #29738 (Maksim Kita).
Unicode 정규화를 위한 함수 normalizeUTF8NFC, normalizeUTF8NFD, normalizeUTF8NFKC, normalizeUTF8NFKD를 추가했습니다. #28633 (darkkeks).
FileLog 테이블 엔진을 사용하여 애플리케이션 로그 파일을 ClickHouse에서 스트리밍 방식으로 처리할 수 있습니다. 로컬 파일시스템에서 append-only이며 로테이션되는 로그를 위한 Kafka 또는 RabbitMQ 엔진과 비슷합니다. #6953를 해결합니다. #25969 (flynn) (Kseniia Sumarokova).
OS 커널 버전을 나타내는 문자열을 반환하는 getOSKernelVersion FUNCTION을 추가합니다. #29755 (Memo).
MD4 및 SHA384 FUNCTION을 추가했습니다. MD4는 구식이고 보안에 취약한 해시 함수로, 기존 레거시 시스템에서 이미 MD4를 사용하고 있으며 정확히 동일한 결과를 재현해야 하는 드문 경우에만 사용할 수 있습니다. #29602 (Nikita Tikhomirov).
설정 파일에서 hsts_max_age를 양의 값으로 지정하면 ClickHouse HTTP 서버에 대해 HSTS를 활성화할 수 있습니다. #29516 (凌涛).
테이블 컬럼의 서브컬럼을 DESCRIBE 쿼리 결과에 포함할 수 있습니다(설정 describe_include_subcolumns를 활성화하면 사용할 수 있습니다). #28905 (Anton Popov).
Executable, ExecutablePool에 옵션 send_chunk_header가 추가되었습니다. 이 옵션이 true이면 청크가 전송되기 전에 행 수를 나타내는 rows_count와 줄 바꿈이 클라이언트로 전송됩니다. #28833 (Maksim Kita).
tokenbf_v1와 ngram은 String 또는 FixedString 타입의 key를 갖는 Map(맵)을 지원합니다. 이를 통해 맵 key(키) 필터가 있는 쿼리에서 데이터 스키핑이 향상됩니다. sql CREATE TABLE map_tokenbf ( row_id UInt32, map Map(String, String), INDEX map_tokenbf map TYPE ngrambf_v1(4,256,2,0) GRANULARITY 1 ) Engine=MergeTree() ORDER BY id 위와 같은 테이블이 있을 때, select * from map_tokebf where map['K']='V' 쿼리는 key A 를 포함하지 않는 그래뉼(granule)을 건너뜁니다. 물론, 몇 개의 행이 스킵되는지는 설정한 granularity와 index_granularity에 따라 달라집니다. #28511 (凌涛).
FixedString 및 String 데이터 타입에 대한 비트 시프트 연산을 추가했습니다. 이 변경으로 #27763을 해결합니다. #28325 (小路).
데이터베이스 엔진 MaterializedPostgreSQL에서 PostgreSQL로부터 복제할 테이블을 동적으로 추가·삭제하는 기능을 지원합니다. 데이터베이스 설정에 대한 ALTER를 지원합니다. #27573를 종료합니다. #28301 (Kseniia Sumarokova).
문자열 파싱이 실패하는 경우 널이 아닌 기본값을 사용자가 지정할 수 있도록 toUUIDOrDefault, toUInt8/16/32/64/256OrDefault, toInt8/16/32/64/128/256OrDefault FUNCTION을 추가합니다. #21330 (taiyang-li).
백그라운드 머지는 서로 선점(preempt)할 수 있으며, 적절한 우선순위로 스케줄링됩니다. 이제 장시간 실행되는 머지가 짧은 머지의 진행을 방해하지 않습니다. 이는 머지 실행을 보다 효율적으로 스케줄링하고 제어하기 위함입니다. 이를 통해 「too many 파트」 오류가 발생할 가능성이 줄어듭니다. #22381. #25165 (Nikita Mikhaylov). 백그라운드 풀의 스레드 개수보다 더 많은 머지와 뮤테이션을 실행할 수 있는 기능이 추가되었습니다. 머지와 뮤테이션은 크기(작을수록 우선순위가 높음)에 따라 단계별로 실행됩니다. 실행할 작업 수와 스레드 수의 비율은 기본값이 2인 background_merges_mutations_concurrency_ratio 설정으로 제어됩니다. #29140 (Nikita Mikhaylov).
원격 파일 시스템에 대한 비동기 읽기를 허용합니다. 원격 파일 시스템에서 데이터를 읽을 때 seek 횟수를 줄입니다. 이를 통해 성능이 크게 향상되며, 특정 조건에서는 실험적 web 및 s3 디스크가 EBS보다 더 빠르게 동작합니다. #29205 (Kseniia Sumarokova). 이와 동시에, web 디스크 유형(웹 서버에 호스팅된 정적 데이터셋)은 실험 단계에서 벗어나 프로덕션 환경에서 사용할 수 있는 수준으로 격상되었습니다.
clickhouse-client에서 INTO OUTFILE을 사용하는 쿼리는 이제 여러 스레드를 사용합니다. INTO OUTFILE을 사용할 때 진행률 표시줄이 깜빡이는 문제를 수정했습니다. 이 변경으로 #30873이(가) 해결됩니다. 또한 #30872도 해결됩니다. #30886 (alexey-milovidov).
일부 SELECT 쿼리 유형에 대해 디스크에서 읽는 중복 압축 데이터 양을 줄였습니다 (MergeTree 엔진 계열에만 해당). #30111 (alesapin).
MergeTree 테이블 엔진 계열에서 압축된 블록을 읽을 때 중복된 seek 호출을 일부 제거합니다. #29766 (alesapin).
기본 키 순서대로 수행되는 집계의 성능을 개선합니다(optimize_aggregation_in_order 설정 활성화 시). #30266 (Anton Popov).
이제 ClickHouse는 외부 S3와 통신할 때 DNS 캐시를 사용합니다. #29999 (alesapin).
외부 데이터베이스(예: MySQL)에 대한 IS NULL/IS NOT NULL 푸시다운 지원을 추가했습니다. #29463 (Azat Khuzhin). isNull/isNotNull을 IS NULL/IS NOT NULL로 변환하도록 했습니다(MySQL과 같은 외부 DB에 대해). #29446 (Azat Khuzhin).
딕셔너리 테이블(Dictionary table)에 대한 SELECT 쿼리는 여러 스레드를 사용합니다. #30500 (Maksim Kita).
Decimal 컬럼의 WHERE 절 필터링 성능을 개선합니다. #30431 (Jun Jin).
필터 연산에서 분기가 많이 발생하는 코드를 제거하고, 성능이 더 우수한 popcnt/ctz 기반의 개선된 구현으로 대체했습니다. #29881 (Jun Jin).
WHERE 연산자에 사용되는 필터 bytemask 생성 함수를 SSE/AVX2/AVX512 명령어를 모두 사용하는 올인원 방식으로 개선합니다. 기본적으로 ClickHouse는 SSE만 사용하므로, 이 변경 사항은 커스텀 빌드에서만 의미가 있습니다. #30014 (jasperzhu). #30670 (jasperzhu).
널 허용 부동소수점 숫자에 대한 SUM 집계 FUNCTION의 성능을 개선했습니다. #28906 (Raúl Marín).
프라이머리 키 인덱스와 파티션 필터를 튜플에도 사용할 수 있습니다. #29281 (凌涛).
쿼리에 동일한 인수를 가지지만 서로 다른 level 파라미터를 사용하는 여러 quantile 집계 함수가 있는 경우, 설정 optimize_syntax_fuse_functions가 활성화되어 있으면 이 함수들이 하나로 합쳐져 한 번의 패스로 실행됩니다. #26657 (hexiaoting).
이제 기본 키 첫 번째 표현식에 대한 min-max 집계가 projection으로 최적화되었습니다. 이는 #329 이슈를 해결합니다. #29918 (Amos Bird).
SQL UDF에 여러 가지 개선이 이루어졌습니다. 이제 SQL 사용자 정의 함수 조작을 위한 쿼리에서 ON CLUSTER 절을 지원합니다. 예시: CREATE FUNCTION test_function ON CLUSTER 'cluster' AS x -> x + 1;. 이슈 #30666을(를) 종료합니다. #30734 (Maksim Kita). CREATE OR REPLACE, CREATE IF NOT EXISTS 구문을 지원합니다. #30454 (Maksim Kita). DROP IF EXISTS 지원이 추가되었습니다. 예시: DROP FUNCTION IF EXISTS test_function. #30437 (Maksim Kita). 람다 식을 지원합니다. 예시: CREATE FUNCTION lambda_function AS x -> arrayMap(element -> element * 2, x);. #30435 (Maksim Kita). clickhouse-local에 대해 SQL 사용자 정의 함수를 지원합니다. #30179 (Maksim Kita).
전역적으로 쿼리 단위 메모리 프로파일러를 활성화했습니다 (memory_profiler_step을 4MiB로 설정). #29455 (Azat Khuzhin).
이제 사용자는 다음과 같이 주석을 포함한 딕셔너리를 생성할 수 있습니다: CREATE DICTIONARY ... COMMENT 'vaue' ... #29899 (Vasily Nemkov). 이제 CREATE DATABASE 문에서 데이터베이스에 주석을 설정할 수도 있습니다 ... #29429 (Vasily Nemkov).
compiled_expression_cache_elements_size 설정을 도입합니다. 이 설정을 사용하게 될 때쯤이면 이미 무엇을 하는지 알고 있을 것입니다. #30667 (Maksim Kita).
이제 clickhouse-format에서 --query 옵션을 지원합니다. 이전 버전에서는 쿼리를 stdin을 통해 전달해야 했습니다. #29325 (凌涛).
Memory 데이터베이스의 테이블에 대해 ALTER TABLE을 지원합니다. Memory 데이터베이스는 clickhouse-local에서 사용됩니다. #30866 (tavplubix).
Arrow, ArrowStream, Parquet, ORC와 같은 Arrow 지원 포맷에서 컬럼을 읽을 때 예외 메시지를 더 명확하게 개선했습니다. #29926를 해결합니다. #29927 (alexey-milovidov).
Buffer 테이블에서 flush 작업과 startup 과정 사이에 발생하는 데이터 레이스를 수정했습니다. 이는 테스트에서 나타날 수 있습니다. #29930 (Azat Khuzhin).
DatabaseMemory에 대한 DROP TABLE과 LiveView 사이의 lock-order-inversion 문제를 수정합니다. 라이브 view는 실험적인 기능입니다. 메모리 데이터베이스는 clickhouse-local에서 사용됩니다. #29929 (Azat Khuzhin).
기본 listen_backlog 값을 증가시켜 더 새로운 Linux 커널의 기본값과 일치하도록 했습니다. #29643 (Azat Khuzhin).
서버 설정 dictionaries_config, models_config, user_defined_executable_functions_config이 변경될 경우 사전, 모델, 사용자 정의 실행 가능 함수를 다시 로드합니다. #28142를 해결합니다. #29529 (Maksim Kita).
프로젝션 이름에 적용되던 불필요한 제한을 제거했습니다. 이제 프로젝션 이름은 tmp_로 시작할 수 있습니다. #29520 (Amos Bird).
뮤테이션에서 중첩 서브쿼리를 사용할 때 발생하던 There is no query or query context has expired 오류를 수정했습니다. 테이블이 레플리카 테이블이고 allow_nondeterministic_mutations 설정이 비활성화되어 있는 경우, 뮤테이션에서 서브쿼리를 허용하지 않습니다. #29495 (tavplubix).
런타임 중에 max_concurrent_queries 설정 변경을 적용할 수 있습니다(재시작할 필요 없음). #29414 (Raúl Marín).
메모리 내 파트를 백업을 위해 FREEZE할 수 있는 기능을 추가했습니다. #29376 (Mo Xuan).
clickhouse-benchmark에서 initial query_id가 전달되도록 했습니다(이전에는 clickhouse-benchmark를 통해 원격 쿼리를 실행하는 경우, 세그먼트에서 실행되는 쿼리가 initial_query_id를 통해 초기 쿼리와 연결되지 않았습니다). #29364 (Azat Khuzhin).
Skip 인덱스 tokenbf_v1 및 ngrambf_v1: String 또는 FixedString 타입의 키를 사용하는 Array 데이터 타입 지원이 추가되었습니다. #29280 (Maksim Kita). Skip 인덱스 tokenbf_v1 및 ngrambf_v1에서 String 또는 FixedString 타입의 키를 사용하는 Map 데이터 타입(맵) 지원이 추가되었습니다. Author @lingtaolf. #29220 (Maksim Kita).
clickhouse-keeper용 compress_logs 설정을 추가하여 복제 상태 머신(replicated state machine)의 clickhouse-keeper 로그를 ZSTD로 압축할 수 있도록 했습니다. 구현: #26977. #29223 (alesapin).
external_table_strict_query SETTING을 추가했습니다. 이 SETTING은 호환되지 않더라도 외부 데이터베이스로의 쿼리에서 전체 WHERE 절을 전달하도록 강제합니다. #29206 (Azat Khuzhin).
ARRAY JOIN을 사용할 때는 프로젝션을 비활성화합니다. 이전 버전에서는 프로젝션 분석으로 인해 ARRAY JOIN에서 별칭이 올바르게 동작하지 않을 수 있었습니다. #29139 (Amos Bird).
clickhouse-keeper: ZooKeeper 로그(스냅샷이 아님)에서 복원하는 동안 일부 데이터 손실이 발생할 수 있었던 clickhouse-keeper-converter의 버그를 수정했습니다. #29030 (小路). 잘못된 ZooKeeper 로그 역직렬화를 유발할 수 있었던 clickhouse-keeper-converter의 버그를 수정했습니다. #29071 (小路).
positionCaseInsensitiveUTF8 및 countSubstringsCaseInsensitiveUTF8와 같은 UTF-8 문자열에서 대소문자를 구분하지 않고 검색하는 FUNCTION에서 극히 드문 경우 실제로는 일치하지 않는 부분 문자열을 찾는 문제가 있었으며, 이를 수정했습니다. #30663 (tavplubix).
ReplicatedMergeTree에서 ZooKeeper 경로로부터 보조 ZooKeeper 이름을 추출할 때 발생하던 모호함을 해결했습니다. 이전에는 ZooKeeper 경로에 콜론이 포함된 경우 서버가 Unknown auxiliary ZooKeeper name 오류와 함께 시작에 실패할 수 있었습니다. #29052를 수정합니다. 또한 이전에는 슬래시로 시작하지 않는 ZooKeeper 경로를 지정하는 것이 허용되었으나, 이제는 사용 중단(deprecated)되었으며 이러한 경로를 사용하는 새 테이블의 생성은 허용되지 않습니다. 보조 ZooKeeper 이름에 슬래시와 콜론을 사용하는 것 역시 허용되지 않습니다. #30822 (tavplubix).
어떤 이유로든 localBackup이 실패한 경우 임시 디렉터리를 정리합니다. #30797 (ianton-ru).
비복제(non-replicated) MergeTree에서 REPLACE/MOVE PARTITION과 백그라운드 병합(background merge) 사이에서 발생하던 경쟁 상태(race condition)를 수정하여, 이동되거나 교체된 데이터의 일부가 파티션에 남게 될 수 있던 문제를 해결했습니다. #29327을(를) 수정했습니다. #30717 (tavplubix).
항상 참이 되는 PREWHERE 조건이 있는 경우 PREWHERE 대신 WHERE를 사용하도록 수정합니다. #30668 (Azat Khuzhin).
max_read_buffer_size = 0(사용자가 스스로 치명적인 설정을 한 경우)로 설정된 MergeTree에서의 읽기 동작을 수정하여, 예외(Can't adjust last granule, LOGICAL_ERROR) 발생 또는 심지어 데이터 손실로 이어질 수 있는 문제를 해결합니다. #30192 (Azat Khuzhin).
min_bytes_to_use_direct_io 사용 시 pread_fake_async/pread_threadpool 동작을 수정했습니다. #30191 (Azat Khuzhin).
INSERT SELECT가 널 허용 컬럼을 기반으로 하는 MATERIALIZED 컬럼을 잘못 채우던 문제를 수정했습니다. #30189 (Azat Khuzhin).
함수 initializeAggregation에서 널 허용 인수를 지원하도록 했습니다. #30177 (Anton Popov).
GLOBAL IN 및 WITH TOTALS가 포함된 쿼리에서 발생하던 Port is already connected 오류를 수정했습니다. 21.9 및 21.10 버전에만 해당됩니다. #30086 (Nikolai Kochetov).
MergeTree에서 MOVE PARTITION과 머지 및 뮤테이션 간의 경쟁 상태(race condition)를 수정합니다. #30074 (Azat Khuzhin).
삭제된 Memory 데이터베이스가 서버 재시작 후 다시 나타날 수 있던 문제가 수정되었습니다 (#29795). 또한 클라우드 환경에서는 데이터 잔여물을 수동으로 제거할 수 없기 때문에, Ordinary 데이터베이스를 삭제할 때 발생하는 Directory not empty 오류에 대한 워크어라운드로 force_remove_data_recursively_on_drop 설정이 추가되었습니다. #30054 (tavplubix).
system 테이블 재생성 검사를 수정하여 Enum 값 변경을 감지하지 못하던 문제를 해결합니다. #29857 (Azat Khuzhin).
MaterializedMySQL: MySQL 연결이 끊어진 경우 트랜잭션이 일부만 처리될 수 있던 문제를 수정합니다. #29837 (Håvard Kvålen).
커널의 버그로 추정되는 문제로 인해 극히 드문 경우에 발생할 수 있는 Timeout exceeded: elapsed 18446744073.709553 seconds 오류가 발생하지 않도록 합니다. #29154를 수정합니다. #29811 (tavplubix).
경로 대신 비문자열 리터럴이 사용될 때 ATTACH TABLE ... FROM 'path' 쿼리에서 잘못된 형 변환을 수정합니다. 이로 인해 초기화되지 않은 메모리를 읽을 수 있습니다. #29790 (alexey-milovidov).
GROUP BY 중 LowCardinality에 대한 동시 액세스를 수정했습니다 (Buffer 테이블과 함께 사용되는 경우 문제를 일으킬 수 있었습니다). #29782 (Azat Khuzhin).
분산 쿼리에서 세그먼트에 <= 21.3 및 >= 21.4 버전이 혼재하고, GROUP BY 키가 모두 고정 크기인 여러 컬럼으로 구성되어 있으며, 이중 레벨 집계(two-level aggregation)가 활성화되어 있을 때(group_by_two_level_threshold 및 group_by_two_level_threshold_bytes 참조), 결과에 동일한 키를 가진 여러 행이 포함될 수 있던 잘못된 GROUP BY 동작을 수정했습니다. #29580을(를) 수정합니다. #29735 (Nikolai Kochetov).
서버 재시작 시 materialized_postgresql_tables_list 설정이 잘못 동작하던 문제를 수정했습니다. 해당 문제는 #28529에서 보고되었습니다. #29686 (Kseniia Sumarokova).
별칭 및 단락 평가(short-circuit) 표현식을 사용하는 경우의 JIT 표현식 컴파일을 수정합니다. #29403 이슈를 해결합니다. #29574 (Maksim Kita).
DEFAULT 표현식에서 x.y.z...와 같이 잘못된 테이블 식별자를 사용할 때 ALTER MODIFY 쿼리에서 드물게 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. 관련 이슈: #29184. #29573 (alesapin).
HAVING에 사용된 컬럼이 SELECT 절에 포함되지 않았을 때 GROUP BY WITH TOTALS HAVING에서 발생하던 nullptr 역참조를 수정했습니다. #29553 (Azat Khuzhin).
동시에 Join table engine 테이블에서 읽기와 쓰기를 수행해도 교착 상태가 발생하지 않도록 개선했습니다. #29544 (Raúl Marín).
std::mismatch 사용 방식에 버그가 있어 pathStartsWith 검사에서 발생하던 문제를 수정합니다: The behavior is undefined if the second range is shorter than the first range.. #29531 (Kseniia Sumarokova).
ODBC bridge에서 "Invalid cursor state" 오류에 대한 재시도 로직을 추가했습니다. 이 오류는 재시도 가능한 오류입니다. #29473를 해결합니다. #29518 (Kseniia Sumarokova).
Lazy 데이터베이스를 로드할 때 테이블 이름을 잘못 파싱하던 문제를 수정했습니다. 이에 따라 #29456 이슈가 해결되었습니다. #29476 (tavplubix).
푸시다운된 HAVING 프리디케이트가 있는 서브쿼리에서 발생할 수 있는 Block structure mismatch 문제를 수정했습니다. 이로써 #29010 이슈를 해결합니다. #29475 (Nikolai Kochetov).
greatest/least 함수에서 발생하는 논리적 오류 Cannot capture columns를 수정합니다. #29334 이슈를 종료합니다. #29454 (Kruglov Pavel).
RocksDB 테이블 엔진: 여러 DB를 여는 과정에서 발생하는 경쟁 조건(race condition)을 수정하고, CI에서 이 문제를 재현하는 일부 테스트를 다시 활성화했습니다. #29393 (Azat Khuzhin).
구성이 잘못된 경우 복제된 access storage가 정상적으로 종료되지 않던 문제를 수정합니다. #29388 (Kevin Michel).
새 레플리카를 추가하는 동안 Replicated 데이터베이스에서 대기 상태에 빠지던 DDL 쿼리 문제를 수정했습니다. #29328 (Kevin Michel).
연결 타임아웃(send_timeout/receive_timeout) 문제를 수정했습니다. #29282 (Azat Khuzhin).
ReplicatedMergeTree의 레플리카를 새로 생성하거나 다시 생성할 때, 테이블 컬럼 중 하나에 대소문자를 구분하지 않는 함수가 포함된 기본값 표현식이 있는 경우 발생할 수 있는 Table columns structure in ZooKeeper is different from local table structure 예외가 발생하지 않도록 수정합니다. #29266 (Anton Popov).
TCP를 통해 클라이언트에 전송할 때 ATTEMPT_TO_READ_AFTER_EOF 대신 일반적인 Database doesn't exist error (UNKNOWN_DATABASE)를 보내도록 했습니다. #29229 (Azat Khuzhin).
Avro 입력 포맷에서 LowCardinality(Nullable) 타입 컬럼에 데이터 삽입 시 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. #29132 (Kruglov Pavel).
서버 간 시크릿(inter-server secret)이 사용되는 경우 이전 자격 증명이 재사용되지 않도록 했습니다(해당 클러스터에 interserver secret이 설정된 상태에서 Buffer/Kafka를 통해 분산 테이블(Distributed table)에 INSERT하기 전에, 해당 연결에 대해 이전에 설정된 USER가 재사용될 수 있었습니다). #29060 (Azat Khuzhin).
드문 경우 레플리카 간 상태 불일치가 발생할 수 있었던 DROP PART와 REPLACE/MOVE PARTITION 사이의 경쟁 상태를 수정했습니다. #28864 (tavplubix).
단락 평가(short-circuit evaluation)가 적용된 표현식의 컴파일 문제를 수정했습니다. #28821 (Azat Khuzhin).
모든 레플리카를 하드 리부트한 이후 ReplicatedMergeTree 레플리카 간 데이터가 달라질 수 있는 극히 드문 경우를 수정합니다. 오류 메시지는 Part ... intersects (previous|next) part ... 형태로 표시됩니다. #28817 (alesapin).
연결의 유효성을 보다 엄격히 검사하고, 혹시 모를 상황에 대비해 RabbitMQ 종료 시 발생하는 모든 예외도 포착하도록 했습니다. #28797 (Kseniia Sumarokova).
ReplicatedMergeTreeQueue의 무해한 경쟁 조건을 수정했습니다. 사용자에게는 보이지 않지만, 미묘한 버그를 유발할 수 있습니다. #28734 (alesapin).
예외 발생 시 부분적으로 생성된 집계 PROJECTION이 있는 SELECT 쿼리에서 발생할 수 있는 크래시를 수정했습니다. #28700 (Amos Bird).
이제 다음 MergeTree 테이블 수준 설정 replicated_max_parallel_sends, replicated_max_parallel_sends_for_table, replicated_max_parallel_fetches, replicated_max_parallel_fetches_for_table 는 더 이상 아무 효과도 없습니다. 이 설정들은 제대로 동작하지 않았으며 max_replicated_fetches_network_bandwidth, max_replicated_sends_network_bandwidth, background_fetches_pool_size 로 대체되었습니다. #28404 (alesapin).
람다 표현식으로 사용자 정의 함수(UDF)를 생성하는 기능을 추가했습니다. 문법은 CREATE FUNCTION {function_name} as ({parameters}) -> {function core}입니다. 예시: CREATE FUNCTION plus_one as (a) -> a + 1. 작성자 @Realist007. #27796 (Maksim Kita) #23978 (Realist007).
Executable 스토리지 엔진과 executable 테이블 함수를 추가했습니다. 이를 사용하면 스트리밍 방식으로 외부 스크립트를 이용해 데이터를 처리할 수 있습니다. #28102 (Maksim Kita) (ruct).
ExecutablePool 스토리지 엔진을 추가했습니다. Executable과 유사하지만, 장시간 실행되는 프로세스 풀을 사용합니다. #28518 (Maksim Kita).
정적 파일 형태로 웹 서버에 있는 읽기 전용 테이블을 저장하기 위한 web 타입의 디스크를 추가했습니다. #23982, #25251 (Kseniia Sumarokova). 주로 공유 스토리지에서의 동작을 테스트하고 데이터셋을 손쉽게 가져오기 위해 필요합니다. 21.11 릴리스 이전에는 사용을 권장하지 않습니다.
새로운 명령어 BACKUP 및 RESTORE를 추가했습니다. #21945 (Vitaly Baranov). 현재 개발 중이며, 이 버전에서의 사용을 전제로 하지 않습니다.
minmax 인덱스를 위한 가상 PROJECTION을 생성했습니다. 이제 allow_experimental_projection_optimization이 활성화되어 있을 때, 가능한 경우 쿼리가 데이터를 직접 읽는 대신 minmax 인덱스를 사용합니다. #26286 (Amos Bird).
이벤트 목록에서 시퀀스 패턴의 일부 결정적 부분이 누락된 경우 조기 종료할 수 있도록, sequenceMatch 및 sequenceCount에 두 개의 검사를 도입했습니다. 이 변경으로 이전에 연산 상한에 도달해 실패하던 많은 쿼리를 실행할 수 있게 되었고, 전반적으로 파이프라인 속도가 향상되었습니다. #27729 (Jakub Kuklis).
이진 함수(특히 0이 아닌 상수로 나누기)에 대해 항상 단조(monotonic)임을 보장하는 정보를 활용하여 기본 키 분석을 강화했습니다. #28302 (Amos Bird).
clickhouse-client에 비밀번호를 재설정하는 방법에 대한 대화형 안내를 추가했습니다. 이는 사용자가 ClickHouse를 설치하고 비밀번호를 설정하자마자 곧바로 잊어버리는 경우에 유용합니다. #27750를 참조하십시오. #27903 (alexey-milovidov).
수직 병합에서 미리 정의된 "rows_sources" 대신 실제 tmp 파일을 사용합니다. 이렇게 하면 tmp 디스크에 불필요한 디렉터리가 생성되지 않도록 합니다. #28299 (Amos Bird).
clickhouse-server.service에서 환경 변수 LIBHDFS3_CONF를 export하는 대신 서버 설정에 libhdfs3_conf를 추가했습니다. 이는 HDFS와의 연동을 구성하기 위한 것입니다. #28268 (Zhichang Yu).
Temporary 상태에 있는 파트를 제거할 때 발생할 수 있는 예기치 않은 예외(Part %name% doesn't exist)를 수정합니다. 이를 통해 #23661 이슈를 해결합니다. #28221#28221) (Azat Khuzhin).
zookeeper_log.address를 수정합니다(이 PR의 첫 번째 패치 이전에는 주소가 항상 ::였습니다) 그리고 이 컬럼에 대해 수행되는 getpeername(2) 호출 횟수를 줄입니다(zookeeper_log에 항목이 추가될 때마다 getpeername()이 호출되므로, 이를 방지하기 위해 이 주소를 zookeeper 클라이언트에 캐시합니다). #28212 (Azat Khuzhin).
[] 연산자의 인덱스와 Map 타입 키 간의 암시적 형 변환을 지원합니다(예: 서로 다른 Int 타입, String 및 FixedString). #28096 (Anton Popov).
PostgreSQL table engine 또는 table function에 데이터를 삽입할 때 ON CONFLICT 절을 지원합니다. #27727 GitHub 이슈를 해결합니다. #28081 (Kseniia Sumarokova).
empty_result_for_aggregation_by_constant_keys_on_empty_set 설정을 추가하여 비어 있는 Set에서 상수 키로 그룹화할 때의 동작을 제어합니다. 이는 #6842의 이전 동작을 복원하기 위한 것입니다. #27932 (Amos Bird).
replication_wait_for_inactive_replica_timeout 설정이 추가되었습니다. 이 설정을 사용하면 비활성 레플리카가 ALTER/OPTIMZE/TRUNCATE 쿼리를 실행할 때까지 얼마나 오래 대기할지 지정할 수 있습니다(기본값은 120초입니다). replication_alter_partitions_sync가 2이고 일부 레플리카가 replication_wait_for_inactive_replica_timeout초를 초과해 비활성 상태인 경우 UNFINISHED 예외가 발생합니다. #27931 (tavplubix).
두 개 이상의 인수를 받는 함수를 적용할 수 있도록 APPLY 컬럼 변환기에서 람다 인자를 지원합니다. 이는 #27877를 위한 변경입니다. #27901 (Amos Bird).
MaterializedMySQL의 내부 DDL에서 DROP TABLE 실행 시 UUID가 중복되는 문제를 수정합니다. MaterializedMySQL은 실험적인 기능입니다. #28533 (Azat Khuzhin).
Nested 컬럼과 이름에 점이 있고 Nested와 같은 접두사를 가진 스칼라 컬럼이 함께 존재하는 테이블(예: n.id UInt32, n.arr1 Array(UInt64), n.arr2 Array(UInt64))에서 SELECT 쿼리를 실행할 때 발생하던 There is no subcolumn 오류를 수정합니다. #28531 (Anton Popov).
ReplicatedVersionedCollapsingMergeTree에 대해 ALTER를 수행한 후 Existing table metadata in ZooKeeper differs in sorting key expression. 오류가 발생할 수 있었던 버그를 수정합니다. #28515를 수정합니다. #28528 (alesapin).
백그라운드에서 수행되는 분산 DDL 큐의 처리 중 발생할 수 있는 ZooKeeper watch 누수(경미한 문제)를 수정했습니다. #26036을 해결합니다. #28446 (tavplubix).
새로운 clickhouse-keeper 도구에 여러 수정 사항이 포함됩니다. 클라이언트가 요청-응답 처리 전에 watch 응답을 받을 수 있던 드문 clickhouse-keeper 버그를 수정했습니다. #28197 (alesapin). 자식 노드에 대한 set 요청으로 인해 리스트 watch(getChildren)가 트리거될 때 clickhouse-keeper에서 잘못된 동작이 발생하던 문제를 수정했습니다. #28190 (alesapin). clickhouse-keeper 설정 변경으로 인해 로그가 손실되거나 서버가 멈출 수 있었던 드문 경우를 수정했습니다. #28360 (alesapin). rotate_logs_interval 값이 감소했을 때 로그가 끝없이 출력될 수 있던 clickhouse-keeper의 버그를 수정했습니다. #28152 (alesapin).
스트레스 테스트에서 Thread Fuzzer를 활성화합니다. Thread Fuzzer는 더 다양한 스레드 스케줄링 조합을 테스트하고 더 많은 잠재적 문제를 발견할 수 있게 해 주는 ClickHouse 기능입니다. 이로써 #9813, #9814, #9515, #9516 이슈가 해결됩니다. #27538 (alexey-milovidov).
테스트 환경을 위한 새로운 로그 레벨 test를 추가합니다. 기본값인 trace보다 더 상세한 로그를 출력합니다. #28559 (alesapin).
Decimal 타입의 텍스트 표현에서 끝자리 0을 출력하지 않습니다. 예: 스케일이 6인 decimal의 경우 1.230000 대신 1.23이 출력됩니다. 이 변경으로 #15794가 해결됩니다. 애플리케이션이 끝자리 0에 의존하는 경우 약간의 비호환성이 발생할 수 있습니다. 출력 포맷에서의 직렬화는 설정 output_format_decimal_trailing_zeros로 제어할 수 있습니다. toString 구현과 String으로의 캐스팅은 항상 변경됩니다. #27680 (alexey-milovidov).
파라미터가 있는 집계 함수에 -Merge 조합자를 사용하여, 다른 파라미터로 생성된 집계 함수 상태에 적용하는 것을 허용하지 않습니다. 예를 들어, fooState(42)(x)로 생성된 상태는 fooMerge(s) 또는 fooMerge(123)(s)로 최종화할 수 없으며, fooMerge(42)(s)처럼 파라미터를 명시적으로 지정해야 하고 동일해야 합니다. 이 변경은 최종화에만 파라미터를 사용하는 quantile 및 sequence*와 같은 일부 특수 집계 함수에는 영향을 주지 않습니다. #26847 (tavplubix).
clickhouse-local에서는 포트가 있는 로컬 주소를 항상 원격으로 취급합니다. #26736 (Raúl Marín).
일부 복잡한 쿼리에서 컬럼 별칭이 표현식 이름과 동일한 경우, 잘못된 캐스팅이 발생할 수 있는 문제를 수정합니다. 이 수정으로 #25447가 해결되며, #26914도 해결됩니다. 이 수정으로 하위 호환성 문제가 생길 수 있습니다. 동일한 이름을 가진 서로 다른 표현식이 있는 경우 예외가 발생합니다. enable_optimize_predicate_expression이 설정된 드문 경우 일부 동작이 깨질 수 있습니다. #26639 (alexey-milovidov).
이제 스칼라 서브쿼리는 그 타입이 Nullable이 될 수 있는 경우 항상 Nullable 결과를 반환합니다. 서브쿼리가 비어 있는 경우 결과가 Null이어야 하기 때문입니다. 이전에는 타입이 호환되지 않는다는 오류가 발생할 수 있었습니다(타입 추론 시 스칼라 서브쿼리는 실행되지 않으며, 널 허용이 아닌 타입을 사용할 수 있었습니다). Array나 Tuple처럼 Nullable로 변환할 수 없는 타입의 빈 결과를 가지는 스칼라 서브쿼리는 이제 오류를 발생시킵니다. #25411을 수정합니다. #26423 (Nikolai Kochetov).
here document를 위한 문법을 도입했습니다. 예: SELECT $doc$ VALUE $doc$. #26671 (Maksim Kita). 쿼리에 $를 포함하는 식별자가 있는 경우 이 변경은 하위 호환되지 않습니다. #28768.
이제 인덱스는 isNull 및 isNotNull을 포함하여 널 허용(Nullable) 타입을 처리할 수 있습니다. #12433 및 #12455 (Amos Bird)와 #27250 (Azat Khuzhin). 그러나 이는 디스크 상의 포맷 변경을 동반하며, 새 서버는 이전 데이터를 읽을 수 있지만 이전 서버는 그렇지 못합니다. 또한 MINMAX 데이터 스키핑 인덱스가 있는 경우, 새로운 인덱스의 확장자가 예전에는 .idx였던 것이 .idx2가 되므로 Data after mutation/merge is not byte-identical 오류가 발생할 수 있습니다. 따라서 이 경우에는 모든 기존 레플리카를 지체하지 말고 업데이트해야 합니다. 그렇지 않으면, 예전 레플리카(<21.9)가 21.9+ 버전의 새 레플리카에서 데이터를 다운로드할 때 다운로드된 파트에 대해 인덱스를 적용할 수 없습니다.
단락 회로 함수 평가(short circuit function evaluation)를 구현하였습니다. #12587 이슈를 해결합니다. 단락 회로 함수 평가를 구성할 수 있도록 설정 항목 short_circuit_function_evaluation을(를) 추가하였습니다. #23367 (Kruglov Pavel).
동의어 확장(synonyms extensions)에서 토큰화(tokenization), 어간 추출(stemming), 표제어 추출(lemmatizing) 및 검색을 위한 자연어 처리(NLP) FUNCTION 여러 개를 추가했습니다. #24997 (Nikolay Degterinsky).
클라이언트가 서버에 연결되면 서버에서 이미 수집한 모든 경고 정보가 클라이언트로 전송됩니다. (옵션 --no-warnings를 사용하여 이 동작을 비활성화할 수 있습니다.) 서버 설정에 대한 경고를 수집하기 위해 system.warnings 테이블을 추가합니다. #26246 (Filatenkov Artur). #26282 (Filatenkov Artur).
집계 FUNCTION 매개변수에서 WITH 및 SELECT의 상수 표현식을 사용할 수 있도록 허용합니다. #10945 이슈를 종료했습니다. #27531 (abel-cheng).
bitmapSubsetOffsetLimit(bitmap, offset, cardinality_limit) 함수가 추가되었습니다. 이 함수는 비트맵에서 offset 위치부터 시작하여 결과를 최대 cardinality_limit개로 제한하는 부분 집합을 생성합니다. #27234 (DHBin).
EXPLAIN 쿼리에 이제 EXPLAIN ESTIMATE ... 모드가 추가되어 MergeTree 테이블에서 읽는 행, 마크, 파트에 대한 정보를 표시합니다. #23941 이슈를 해결합니다. #26131 (fastio).
system.zookeeper_log 테이블이 추가되었습니다. ZooKeeper 클라이언트의 모든 작업이 이 테이블에 기록됩니다. #25449를 구현했습니다. #26129 (tavplubix).
HDFS 스토리지를 사용하는 ReplicatedMergeTree에 대해 제로 카피 복제를 지원합니다. #25918 (Zhichang Yu).
Arrow, ORC, Parquet 입력 포맷에서 Nested 타입을 struct 배열 형태로 삽입할 수 있게 되었습니다. #25902 (Kruglov Pavel).
새로운 데이터 타입 Date32(데이터를 Int32로 저장)를 추가하고, DateTime64와 동일한 날짜 범위를 지원하며, Parquet의 date32를 ClickHouse Date32로 로드하는 기능을 지원합니다. 또한 toDate와 유사한 새로운 함수 toDate32를 추가합니다. #25774 (LiuNeng).
동일한 파일에 대한 동시 읽기에서 파일 디스크립터를 공유합니다. Linux에서는 눈에 띄는 성능 차이는 없습니다. 그러나 일반적인 서버에서 열린 파일 수가 상당히(10~100배) 줄어들며, 운영을 더 쉽게 해 줍니다. #26214를 참조하십시오. #26768 (alexey-milovidov).
File 테이블의 파일 디스크립터가 일반 파일인 경우, 해당 파일에서 여러 번 읽을 수 있도록 허용합니다. 이를 통해 stdin이 clickhouse-local --query "SELECT * FROM table UNION ALL SELECT * FROM table" ... < file과 같은 일반 파일일 때 clickhouse-local이 stdin에서 여러 번(여러 개의 SELECT 쿼리 또는 서브쿼리로) 읽을 수 있습니다. 이 변경으로 #11124 이슈가 해결됩니다. (alexey-milovidov)와 공동 작성되었습니다. #25960 (BoloniniD).
중복 인덱스 분석을 제거하고, PROJECTION 분석에서 발생할 수 있는 잘못된 limit 검사를 방지합니다. #27742 (Amos Bird).
내부용으로 사용할 _CAST FUNCTION을 추가합니다. 이 FUNCTION은 타입의 널 허용 여부를 보존하지 않지만, 내부용이 아닌 캐스트는 cast_keep_nullable SETTING에 따라 널 허용 여부를 보존합니다. #12636을(를) 해결합니다. #27382 (Kseniia Sumarokova).
system.query_log에 포맷된 쿼리를 추가로 기록하기 위한 log_formatted_queries SETTING을 추가합니다. 이는 normalizeQuery, normalizeQueryKeepNames 같은 FUNCTION이 성능 향상을 위해 쿼리를 파싱/포맷하지 않으므로, 정규화된 쿼리 분석에 유용합니다. #27380 (Amos Bird).
Hyperscan 관련 함수인 multiMatchAny 등에서 과도하게 큰 정규식을 사용하지 못하도록 max_hyperscan_regexp_length 및 max_hyperscan_regexp_total_length 설정 두 개를 추가했습니다. #27378 (Amos Bird).
이제 함수를 세그먼트 수준의 상수로 사용할 수 있습니다. 이는 특정 분산 테이블의 컨텍스트에서 실행될 경우 일반 컬럼을 생성하고, 그렇지 않으면 상수 값을 반환함을 의미합니다. 대표적인 함수로는 hostName(), tcpPort(), version(), buildId(), uptime() 등이 있습니다. #27020 (Amos Bird).
extractAllGroupsHorizontal가 업데이트되어 각 행에서 일치 항목 개수의 상한을 선택적인 세 번째 인자를 통해 설정할 수 있습니다. #26961 (Vasily Nemkov).
system.rocksdb 테이블을 통해 RocksDB 통계를 제공합니다. ClickHouse 설정에서 rocksdb... 키로 지정된 RocksDB 옵션을 읽습니다. 참고: ClickHouse는 RocksDB에 의존하지 않으며, RocksDB는 추가 통합용 스토리지 엔진 중 하나일 뿐입니다. #26821 (Azat Khuzhin).
내부 RocksDB 로그가 더 간결해졌습니다. 참고로, ClickHouse는 RocksDB에 의존하지 않으며, RocksDB는 추가 통합 스토리지 엔진 중 하나일 뿐입니다. 이 변경으로 #26252가 해결되었습니다. #26789 (alexey-milovidov).
clickhouse-benchmark에 라운드 로빈(round-robin) 지원을 추가합니다(통계 보고를 제외하면 일반적인 다중 호스트/포트 실행과 동일합니다). #26607 (Azat Khuzhin).
실행형 사전(executable, executable_pool)을 clickhouse-local에서 DDL 쿼리로 생성할 수 있습니다. 이 변경으로 #22355 이슈가 해결되었습니다. #26510 (Maksim Kita).
mysql 및 postgresql 호환성 프로토콜 핸들러에 대해 클라이언트 쿼리 유형을 설정하도록 했습니다. #26498 (anneji-dev).
distributed_push_down_limit=1일 때 SELECT * FROM dist ORDER BY key LIMIT 10과 같은 쿼리에 대해 세그먼트에 LIMIT을 적용합니다. SELECT DISTINCT shading_key FROM dist ORDER BY key와 같은 쿼리에 대해서는 Distinct/LIMIT BY 단계를 실행하지 않습니다. 이제 distributed_push_down_limit 설정이 optimize_distributed_group_by_sharding_key 최적화에서 올바르게 적용됩니다. #26466 (Azat Khuzhin).
여러 클러스터에서 세그먼트 연결을 재사용할 수 있도록 합니다. 또한 cluster table function을 사용할 때 새로운 연결을 생성하지 않도록 합니다. #26318 (Amos Bird).
기본값이 설정된 파라미터로 오래된 임시 디렉터리를 정리하는 실행 주기를 제어하도록 했습니다. #26212. #26313 (fastio).
range 함수가 생성하는 데이터 양에 대한 안전 임계값을 조정할 수 있도록 설정 function_range_max_elements_in_block을 추가했습니다. 이로써 #26303이 해결되었습니다. #26305 (alexey-milovidov).
샘플링 시점이 아니라 테이블 생성 시점에 해시 함수를 검사합니다. MergeTree용 설정을 추가하여, 잘못된 샘플링 컬럼으로 테이블을 생성했더라도 샘플링이 전혀 사용되지 않는 경우 이 설정을 비활성화해 예외 없이 서버를 시작할 수 있도록 합니다. #26256 (zhaoyu).
지정된 String 컬럼을 Avro로 내보낼 때 기본 bytes 대신 string으로 기록하도록 하는 output_format_avro_string_column_pattern 설정을 추가했습니다. #22414을 구현했습니다. #26245 (Ilya Golshtein).
clickhouse-local의 --progress 옵션에서 잘못된 출력을 수정합니다. 진행률 표시줄은 100%에 도달하면 지워지며, clickhouse-client와 동일하게 동작합니다. #17484 이슈를 해결합니다. #26128 (Kseniia Sumarokova).
merge_selecting_sleep_ms 설정을 추가했습니다. #26120 (lthaooo).
단일 블록 readahead를 사용하는 복잡한 Linux AIO 구현을 제거하고, O_DIRECT를 사용하는 단순한 동기식 IO로 교체합니다. 이전 버전에서는 max_threads가 1보다 큰 경우 min_bytes_to_use_direct_io 설정이 올바르게 동작하지 않을 수 있습니다. direct IO(쿼리에는 기본적으로 비활성화되어 있고, 대규모 머지에는 기본적으로 활성화됨)를 사용한 읽기 작업이 비효율적인 방식으로 수행되었습니다. 이 변경으로 #25997이 해결됩니다. #26003 (alexey-milovidov).
REPLACE TABLE 쿼리에서 Distributed 테이블을 플러시합니다. #24566을(를) 해결합니다 - 새 테이블에 대한 삽입이 실패한 경우 [CREATE OR] REPLACE TABLE ... AS SELECT 쿼리에서 테이블을 교체(또는 생성)하지 않습니다. #23175을(를) 해결합니다. #25895 (tavplubix).
views 컬럼을 system.query_log에 추가하여 쿼리에 의해 실행된 (구체화 또는 라이브) 뷰의 이름을 포함하도록 했습니다. 각 쿼리에서 실행된 뷰별 정보를 포함하는 새로운 로그 테이블(system.query_views_log)을 추가했습니다. 뷰 실행 방식을 수정했습니다. 뷰를 실행하는 동안 예외가 발생하면, 이미 실행이 시작된 모든 뷰는 완료될 때까지 계속 실행됩니다. 이는 이전에는 parallel_view_processing=true일 때만의 동작이었으나, 이제 항상 동일하게 동작합니다. - 종속 뷰는 이제 컨텍스트에 읽기 진행 상황을 보고합니다. #25714 (Raúl Marín).
분산 쿼리 실행을 마친 후 연결 드레이닝(connection draining)을 비동기적으로 수행합니다. 백그라운드에서 연결을 재활용하는 워커 수를 지정하는 새로운 서버 설정 max_threads_for_connection_collector가 추가되었습니다. 풀(pool)이 가득 찬 경우에는 이전과는 조금 다르게 동기적으로 연결을 드레이닝합니다. 클라이언트에 EOS(End Of Stream)를 전송한 뒤 드레이닝이 수행되며, 쿼리는 충분한 데이터를 수신하는 즉시 성공으로 처리되고, 발생하는 모든 예외는 클라이언트로 전달되지 않고 로그에만 기록됩니다. 기본값이 3초인 drain_timeout 설정이 추가되었습니다. 연결 드레이닝은 이 타임아웃이 지나면 연결을 끊습니다. #25674 (Amos Bird).
설정에서 여러 include를 지원합니다. 이제 users 설정과 remote servers 설정을 여러 소스에서 포함할 수 있습니다. from_zk, from_env 또는 incl 속성을 가진 <include /> 요소를 두면 해당 위치가 치환된 내용으로 대체됩니다. #24404 (nvartolomei).
insert_distributed_one_random_shard = 1 설정이 활성화된 상태에서 분산 테이블로 여러 블록을 삽입할 때 발생하던 문제를 수정했습니다. 이는 비핵심 기능입니다. 개선 사항으로 분류됩니다. #23140 (Amos Bird).
Map 타입에서 LowCardinality 및 FixedString 키/값을 지원하도록 개선했습니다. #21543 (hexiaoting).
arrayHas와 같은 함수가 DateTime, DateTime64 등의 서로 다른 비수치 타입에 대한 Nullable LowCardinality 배열에 적용될 때 잘못된 타입 캐스트가 발생하는 문제를 수정합니다. 이전 버전에서는 잘못된 캐스트가 발생했습니다. 새 버전에서는 예외를 발생시키도록 변경됩니다. 이 수정으로 #26330이(가) 종료됩니다. #27682 (alexey-milovidov).
PREWHERE 내에 LowCardinality가 포함된 일부 쿼리에서 발생하는 Expected ColumnLowCardinality, gotUInt8 또는 Bad cast from type DB::ColumnVector<char8_t> to DB::ColumnLowCardinality와 같은 오류를 수정하고, 더 중요하게는 오류 메시지에서 공백이 누락된 문제를 해결합니다. #23515를 수정합니다. #27298 (Nikolai Kochetov).
LIMIT BY 및 LIMIT OFFSET와 함께 사용되는 distributed_group_by_no_merge = 2와 distributed_push_down_limit = 1 또는 optimize_distributed_group_by_sharding_key = 1 조합을 수정합니다. #27249 (Azat Khuzhin). 이는 사실상 아무도 사용하지 않는 드문 설정 조합입니다.
복제되지 않은 MergeTree에서 잘못된 파티션 때문에 멈춰 있던 mutation이 진행되지 않던 문제를 수정합니다. #27248 (Azat Khuzhin).
모호한 경우 lambda 함수는 인수를 해석할 때 다른 별칭이나 식별자보다 자신의 인수를 우선적으로 사용합니다. #27235 (Raúl Marín).
cache, complex_key_cache, ssd_cache, complex_key_ssd_cache 설정 파싱 문제를 수정했습니다. cache 유형이 아닌 딕셔너리에서 allow_read_expired_keys, max_update_queue_size, update_queue_push_timeout_milliseconds, query_wait_timeout_milliseconds 옵션이 파싱되지 않는 문제가 있었습니다. #27032 (Maksim Kita).
DROP_RANGE와의 경쟁 상태로 인해 발생할 수 있는 mutation 스택 문제를 수정했습니다. #27002 (Azat Khuzhin).
이제 ALTER TABLE ... PARTITION ID xxx와 같은 쿼리에서 PARTITION ID가 올바른지 검증합니다. #25718을(를) 수정했습니다. #26963 (alesapin).
여러 조인(JOIN)을 사용하는 일부 경우에 발생하는 「Unknown column name」 오류를 수정하고, #26899 이슈를 종료했습니다. #26957 (Vladimir C).
사용자 정의 TLD 읽기 동작을 수정했습니다(버퍼가 더 작거나 파일이 더 큰 경우 처리가 중단되던 문제). #26948 (Azat Khuzhin).
DEFAULT 컬럼이 materialized 컬럼이 아니면서 DEFAULT 표현식이 없는 다른 컬럼을 참조할 때 발생하는 Missing columns: 'xxx' 오류를 수정합니다. #26591을(를) 해결합니다. #26900 (alesapin).
일부 콤비네이터를 적용할 때 AggregateFunction의 파라미터가 손실되어 Conversion from AggregateFunction(topKArray, Array(String)) to AggregateFunction(topKArray(10), Array(String)) is not supported와 같은 예외가 발생할 수 있었습니다. 이 문제가 수정되었습니다. #26196 및 #26433 이슈를 해결합니다. #26814 (tavplubix).
system.part_log에서 REMOVE_PART에 대해 event_time_microseconds 값을 추가했습니다. 이전 버전에서는 이 값이 설정되지 않았습니다. #26720 (Azat Khuzhin).
데이터와 메타데이터 간의 불일치가 발생하지 않도록 ReplicatedMergeTree 테이블 종료 시 데이터를 제거하지 않도록 했습니다. #26716 (nvartolomei).
여러 컬럼을 사용하는 경우 optimize_distributed_group_by_sharding_key를 수정합니다(샤딩 키 표현식에 여러 컬럼이 포함되어 있고 optimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1 설정 시 잘못된 결과가 발생하던 문제). #26353 (Azat Khuzhin).
드물게 발생하던, 유실된 레플리카 복구 과정에서 레플리카 간 상태가 서로 달라질 수 있던 버그를 수정했습니다. #26321 (tavplubix).
내부 버퍼 끝에 이스케이프 시퀀스가 있는 경우, 테이블 데이터와는 관련 없는 zstd 프레이밍 형식에서의 import/export에 사용되는 zstd 압축 해제를 수정합니다. 이슈 #26013을(를) 해결합니다. #26314 (Kseniia Sumarokova).
Enum에 0 값이 정의되어 있지 않은 경우 Nullable Enum에 대해 toString에서 예외를 던지지 않도록 했습니다. #25806을(를) 해결했습니다. #26123 (Vladimir C).
쿼리 실행 중 예외가 발생했을 때 ClickHouse가 보내는 MySQL 프로토콜 패킷에서 sequence_id가 잘못 설정되던 문제를 수정했습니다. 이로 인해 MySQL 클라이언트가 ClickHouse 서버와의 연결을 재설정하는 문제가 발생할 수 있었습니다. 관련 이슈 #21184를 수정했습니다. #26051 (tavplubix).
cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom()이 const 값에 대해 잘못된 타입을 반환하여 optimize_skip_unused_shards가 동작하지 않던 문제를 수정합니다. #26041 (Azat Khuzhin).
PREWHERE와 함께 일반 프로젝션(normal projection)을 사용할 때 발생할 수 있는 헤더 불일치 문제를 수정합니다. 이로써 #26020가 해결됩니다. #26038 (Amos Bird).
remote()에 대해 함수 없이 컬럼만 사용하는 sharding_key 처리를 수정했습니다(이전에는 select * from remote('127.1', system.one, dummy) 실행 시 Unknown column: dummy, there are only columns . 오류가 발생했습니다). #25824 (Azat Khuzhin).
MaterializeMySQL에서 SELECT를 수행할 때 발생하던 Not found column ... 및 Missing column ... 오류를 수정했습니다. 관련 이슈: #23708, #24830, #25794. #25822 (tavplubix).
UInt64 이외의 타입에서 optimize_skip_unused_shards_rewrite_in을 수정하여 잘못된 세그먼트를 선택하거나 Cannot infer type of an empty tuple 또는 Function tuple requires at least one argument 예외가 발생할 수 있는 문제를 해결합니다. #25798 (Azat Khuzhin).
이제 stateful 및 stateless 테스트를 무작위 시간대에서 실행합니다. #12439 문제를 수정했습니다. Protobuf 포맷에서 String을 DateTime으로 읽거나 DateTime을 String으로 쓸 때 이제 시간대를 반영합니다. Arrow 및 Parquet 포맷에서 UInt16을 DateTime으로 읽을 때는 이제 먼저 Date로 처리한 후, Arrow 및 Parquet에서 Date가 UInt16으로 직렬화되기 때문에 DateTime의 시간대를 고려하여 DateTime으로 변환합니다. GraphiteMergeTree는 이제 시간 반올림 시 시간대를 고려합니다. #5098 문제를 수정했습니다. 작성자: @alexey-milovidov. #15408 (alesapin).
새 버전에서는 시스템 로그 테이블(system.query_log, system.query_thread_log, system.processes, system.opentelemetry_span_log)에 Map 데이터 타입을 사용합니다. 해당 테이블은 새로운 데이터 타입으로 자동 생성됩니다. 기존 쿼리를 지원하기 위해 가상 컬럼이 생성됩니다. #18698를 해결합니다. #23934, #25773 (hexiaoting, sundy-li, Maksim Kita). 버전 21.8에서 이전 버전으로 다운그레이드하려면 로그를 저장하는 시스템 테이블을 수동으로 정리해야 합니다. /var/lib/clickhouse/data/system/*_log 경로를 확인하십시오.
CPU 사용량, 디스크 사용량, 메모리 사용량, IO, 네트워크, 파일, 로드 평균(load average), CPU 주파수, 온도 센서, EDAC 카운터, 시스템 가동 시간에 대한 공통 시스템 메트릭을 system.asynchronous_metrics 및 system.asynchronous_metric_log에서 수집하도록 했습니다. 또한 스케줄링 지터와 메트릭 수집에 소요된 시간에 대한 메트릭도 추가했습니다. 이는 ClickHouse에서 atop과 유사하게 동작하며, 추가 도구를 설치하지 않았더라도 모니터링 데이터에 접근할 수 있도록 합니다. #9430을(를) 해결했습니다. #24416 (alexey-milovidov, Yegor Levankov).
MaterializedPostgreSQL 테이블 엔진과 데이터베이스 엔진을 추가했습니다. 이 데이터베이스 엔진은 전체 데이터베이스 또는 데이터베이스 테이블의 임의의 부분 집합을 복제할 수 있습니다. #20470 (Kseniia Sumarokova).
새로운 함수 leftPad(), rightPad(), leftPadUTF8(), rightPadUTF8()를 추가했습니다. #26075 (Vitaly Baranov).
인덱스 목록의 시작 위치에 인덱스를 추가할 수 있도록 ADD INDEX 명령에 FIRST 키워드를 추가했습니다. #25904 (xjewer).
기존 데이터 스키핑 인덱스에 대한 정보를 포함하는 system.data_skipping_indices 테이블을 도입했습니다. #7659을(를) 해결했습니다. #25693 (Dmitry Novik).
시스템 로그 테이블(system.query_log, system.query_thread_log, system.processes, system.opentelemetry_span_log)에 Map 데이터 타입을 사용합니다. 해당 테이블들은 새로운 데이터 타입을 사용하여 자동으로 생성됩니다. 기존 쿼리를 지원하기 위해 가상 컬럼이 생성됩니다. #18698를 해결합니다. #23934, #25773 (hexiaoting, sundy-li, Maksim Kita).
하나의 속성만 포함하는 복합 키를 사용하는 딕셔너리에 대해, dictGet, dictHas 함수에서 키 표현식을 tuple로 감싸지 않아도 되도록 허용합니다. #26130 (Maksim Kita).
AggregateFunction 상태에 대해 bin/hex FUNCTION을 구현했습니다. #26094 (zhaoyu).
empty 및 notEmpty FUNCTION에서 UUID 유형의 인수를 지원합니다. UUID가 모두 0인 경우(nil UUID) 비어 있는 것으로 간주됩니다. #3446를 해결합니다. #25974 (zhaoyu).
매개변수 집계 함수의 매개변수로 리터럴뿐만 아니라 임의의 상수 식(예: 1 + 2)도 사용할 수 있도록 허용합니다. 또한 매개변수화된 쿼리(예: {param:UInt8})에서 사용하는 쿼리 매개변수를 매개변수 집계 함수 내부에서 사용할 수 있도록 허용합니다. #11607을(를) 해결합니다. #25910 (alexey-milovidov).
구성 파일에서 다중 include를 지원합니다. 이제 사용자 구성과 원격 서버 구성을 여러 소스에서 포함할 수 있습니다. from_zk, from_env 또는 incl 속성을 가진 <include /> 요소만 배치하면, 해당 위치가 치환 결과로 대체됩니다. #24404 (nvartolomei).
여러 컬럼을 사용하는 경우 optimize_distributed_group_by_sharding_key를 수정했습니다(샤딩 키 표현식에 여러 컬럼이 있고 optimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1인 경우 잘못된 결과가 발생하던 문제). #26353 (Azat Khuzhin).
Date에서 DateTime(또는 DateTime64)으로의 CAST가 DateTime 타입의 시간대를 사용하지 않았습니다. 이는 Date와 DateTime 간의 비교에도 영향을 줄 수 있습니다. Date와 DateTime의 공통 타입을 추론할 때에도 각각에 대응하는 시간대를 사용하지 않았습니다. 이로 인해 함수 if의 결과와 배열 생성 결과에 영향을 주었습니다. #24128를 해결합니다. #24129 (Maksim Kita).
누락된 레플리카 복구 과정에서 레플리카 간의 상태가 달라질 수 있었던 드문 버그를 수정했습니다. #26321 (tavplubix).
validate_polygons 설정이 꺼져 있을 때 pointInPolygon에서 충돌이 발생할 수 있는 문제를 수정했습니다. #26113 (alexey-milovidov).
존재하지 않는 원격 디렉터리를 순회할 때 예외가 발생하던 문제를 수정합니다. #26087 (ianton-ru).
ZooKeeper 클라이언트에서 abort로 인해 드물게 발생하던 서버 비정상 종료 문제를 수정합니다. #25813을(를) 해결합니다. #26079 (alesapin).
일부 경우 right subquery join에서 스레드 수를 잘못 추정하던 문제를 수정합니다. #24075를 종료합니다. #26052 (Vladimir C).
쿼리 실행 중 예외가 발생했을 때 ClickHouse가 전송하는 MySQL 프로토콜 패킷의 잘못된 sequence_id를 수정했습니다. 이로 인해 MySQL 클라이언트가 ClickHouse 서버와의 연결을 재설정하도록 만들 수 있었습니다. #21184를 해결했습니다. #26051 (tavplubix).
PREWHERE와 일반 프로젝션을 함께 사용할 때 발생할 수 있는 헤더 불일치 문제를 수정했습니다. #26020을(를) 해결했습니다. #26038 (Amos Bird).
remote()에서 함수 없이 컬럼에 직접 지정된 sharding_key 처리를 수정합니다(이전에는 select * from remote('127.1', system.one, dummy)를 실행하면 Unknown column: dummy, there are only columns . 오류가 발생했습니다). #25824 (Azat Khuzhin).
MaterializeMySQL에서 SELECT할 때 발생하던 Not found column ... 및 Missing column ... 오류를 수정했습니다. #23708, #24830, #25794 이슈를 해결했습니다. #25822 (tavplubix).
UInt64가 아닌 타입에서 optimize_skip_unused_shards_rewrite_in을 수정하여 잘못된 세그먼트가 선택되거나 Cannot infer type of an empty tuple 또는 Function tuple requires at least one argument 예외가 발생할 수 있는 문제를 해결합니다. #25798 (Azat Khuzhin).
ReplicatedMergeTree 테이블에서 DROP PART 쿼리 실행 시 드물게 Unexpected merged part intersecting drop range 오류 메시지가 발생할 수 있던 버그를 수정했습니다. #25783 (alesapin).
GROUP BY 표현식을 사용하는 TTL에서, 파트에서 한 번 실행된 이후에는 다시 TTL이 실행되지 않던 버그를 수정합니다. #25743 (alesapin).
clickhouse-server Docker entrypoint에서 chown 명령어 체크를 업데이트했습니다. Kubernetes에서 "cluster pod restart failed (or timeout)" 오류로 인해 파드가 재시작되지 않거나 시간 초과되는 문제를 수정했습니다. #26545 (Ky Li).
명시적으로 정의된 큰 Set를 사용하는 쿼리의 성능을 개선했습니다. 호환성 설정인 legacy_column_name_of_tuple_literal을(를) 추가했습니다. 21.7 미만 버전에서 상위 버전으로 클러스터를 롤링 업데이트하는 동안에는 이 값을 true로 설정하는 것이 좋습니다. 그렇지 않으면 IN 절에서 명시적으로 정의된 Set를 사용하는 분산 쿼리가 업데이트 중에 실패할 수 있습니다. #25371 (Anton Popov).
clickhouse-keeper(ZooKeeper의 실험적인 대체제)에서 최대 버퍼 크기의 전방/후방 호환성이 없는 변경을 수행했습니다. 나중보다 지금(프로덕션 적용 이전)에 변경하는 편이 더 좋습니다. #25421 (alesapin).
데이터는 존재하지만 ZooKeeper 메타데이터가 손실된 경우에도 복제된 테이블(Replicated Table)을 복원할 수 있는 방법을 제공합니다. #13458을(를) 해결합니다. #13652 (Mike Kot).
Arrow/Parquet/ORC에서 struct와 맵(map), 그리고 Arrow 입력/출력 형식의 딕셔너리(Dictionary)를 지원합니다. 새로운 설정 output_format_arrow_low_cardinality_as_dictionary를 도입합니다. #24341 (Kruglov Pavel).
기본적으로 모든 IN/JOIN을 GLOBAL IN/JOIN으로 동작하게 하는 새로운 불리언 설정 prefer_global_in_and_join을 추가했습니다. #23434 (Amos Bird).
Join 테이블 엔진에 대해 ALTER DELETE 쿼리를 지원합니다. #23260 (foolchi).
집계 함수 quantileBFloat16과 이에 대응하는 quantilesBFloat16, medianBFloat16을 추가했습니다. 이는 상대 오차가 0.390625%를 넘지 않는 매우 단순하고 빠른 분위수(quantile) 추정기입니다. #16641을(를) 해결합니다. #23204 (Ivan Novitskiy).
흐름 분석(flow analysis)에 유용한 sequenceNextNode() 함수를 구현했습니다. #19766 (achimbab).
일부 함수들을 서브컬럼(subcolumn) 읽기로 변환하여 읽는 데이터 양을 줄이는 최적화를 추가했습니다. 예를 들어, 조건식 col IS NULL은 서브컬럼 col.null을 읽도록 변환됩니다. 이 최적화는 현재 기본값으로 비활성화되어 있으며, optimize_functions_to_subcolumns 설정으로 활성화할 수 있습니다. #24406 (Anton Popov).
가능한 경우 더 많은 컬럼을 별칭(alias) 표현식으로 다시 작성하도록 했습니다. 이를 통해 프로젝션(projections)과 같은 더 나은 최적화가 가능해질 수 있습니다. #24405 (Amos Bird).
bloom_filter 타입 인덱스를 상수 배열이 있는 hasAny 함수 표현식에 사용할 수 있습니다. 다음 이슈를 해결합니다: #24291. #24900 (Vasily Nemkov).
RabbitMQ 큐가 비어 있는 경우 읽기 시도를 다시 예약하기 위해 지수 백오프(exponential backoff)를 추가했습니다. (ClickHouse는 RabbitMQ에서 데이터를 가져오는 기능을 지원합니다.) #24340 이슈를 종료합니다. #24415 (Kseniia Sumarokova).
복제를 위한 대역폭을 제한할 수 있도록 했습니다. 두 개의 Replicated*MergeTree SETTING인 max_replicated_fetches_network_bandwidth 및 max_replicated_sends_network_bandwidth를 추가하여, 테이블 단위로 복제 fetch/send의 최대 속도를 제한할 수 있습니다. 서버 전체에 적용되는 SETTING 두 개(default USER 프로필에 있음)인 max_replicated_fetches_network_bandwidth_for_server 및 max_replicated_sends_network_bandwidth_for_server를 추가하여 모든 테이블에 대한 복제의 최대 속도를 제한합니다. 이 SETTING들은 엄밀하게 강제되지는 않습니다. 기본적으로 비활성화되어 있습니다. #1821를 수정합니다. #24573 (alesapin).
ODBC 및 Library bridge에 대한 리소스 제약과 격리를 추가했습니다. bridge 프로세스에는 별도의 clickhouse-bridge 그룹과 USER를 사용합니다. bridge가 OOM killer의 첫 번째 대상이 되도록 oom_score_adj를 설정합니다. 최대 RSS를 1 GiB로 설정합니다. #23861을(를) 해결합니다. #25280 (Kseniia Sumarokova).
기본 clickhouse 바이너리에 독립 실행형 clickhouse-keeper 심볼릭 링크를 추가했습니다. 이제 메인 ClickHouse 서버 없이도 조정 기능을 실행할 수 있습니다. #24059 (alesapin).
VIEW에 대한 쿼리에 전역 설정을 사용하도록 했습니다. VIEW에 대한 쿼리가 로컬 설정을 사용하여 CREATE VIEW와 SELECT의 설정이 서로 다를 때 오류가 발생하던 동작을 수정했습니다. 이제 VIEW는 이러한 변경된 로컬 설정을 사용하지 않지만, 여전히 CREATE VIEW 쿼리의 SETTINGS 절에서 추가 설정을 전달할 수 있습니다. #20551 이슈를 닫습니다. #24095 (Vladimir).
분산 테이블에 대한 개선입니다. internal_replication=true인 경우 dirname에서 레플리카를 제거했습니다(이에 따라 이제 레플리카 수와 관계없이 클러스터를 사용하는 Distributed 테이블로 INSERT가 가능하며, 이전에는 레플리카를 최대 15개까지만 지원했고, 그 이상에서는 비동기 블록용 디렉터리를 생성할 때 ENAMETOOLONG 오류로 실패했습니다). #25513 (Azat Khuzhin).
LowCardinality에 Interval 타입 지원을 추가했습니다. 이는 일부 표현식의 중간 결과 값을 처리하는 데 필요합니다. 이를 통해 #21730 이슈가 해결되었습니다. #25410 (Vladimir).
sequenceMatch 및 sequenceCount FUNCTION의 시간 조건에 대해 == 연산자를 사용할 수 있도록 했습니다. 예를 들어: sequenceMatch('(?1)(?t==1)(?2)')(time, data = 1, data = 2). #25299 (Christophe Kalenzaga).
http_max_fields, http_max_field_name_size, http_max_field_value_size 설정을 추가했습니다. #25296 (Ivan).
이전에 IDN 호스트(예: example.рф)에 대해 topLevelDomain이 빈 문자열을 반환하던 문제를 수정합니다. #25103 (Azat Khuzhin).
실행 시점에 Linux 커널 버전을 감지합니다(정상적으로 동작하는 중첩된 epoll을 위해서이며, 이는 async_socket_for_remote/use_hedged_requests에 필요하고, 그렇지 않으면 원격 쿼리가 멈출 수 있습니다). #25067 (Azat Khuzhin).
분산 쿼리에서 optimize_skip_unused_shards=1인 경우, (sharding key) IN (one-element-tuple)과 같은 조건으로 세그먼트를 건너뛸 수 있도록 지원합니다. (여러 요소를 가진 튜플은 이미 지원되었으나, 단일 요소 튜플은 리터럴로 파싱되기 때문에 동작하지 않았습니다). #24930 (Amos Bird).
일부 쿼리는 여러 차례의 시맨틱 분석이 필요합니다. 이 경우 IN에 대해 이미 생성된 Set을 재사용해 보십시오. #24874 (Amos Bird).
insert_distributed_sync에서 max_distributed_connections 설정을 준수하도록 했습니다(그렇지 않으면 대규모 클러스터에서 동기 insert 작업 시 max_thread_pool_size를 초과할 수 있습니다). #24754 (Azat Khuzhin).
스칼라 서브쿼리에서 Limit for rows or bytes to read exceeded와 같은 오류가 숨겨지지 않도록 했습니다. #24545 (nvartolomei).
String-to-Int 파서를 더 엄격하게 하여 toInt64('+')가 예외를 던지도록 했습니다. #24475 (Amos Bird).
SSD_CACHE를 DDL 쿼리로 CREATE하는 경우, user_files 디렉터리 하위에만 생성할 수 있습니다. #24466 (Maksim Kita).
IPv6 주소가 해석되지 않던 문제를 수정했습니다(예: select * from remote('[::1]', system.one) 쿼리). #24319 (Azat Khuzhin).
여러 줄 모드에서 FROM 절에 서브쿼리를 사용할 때 끝에 붙은 공백 문자를 수정하고, 쿼리 출력도 사람이 읽기에 더 편한 방식으로 약간 변경합니다. #24151 (Azat Khuzhin).
분산 테이블 개선. 장애(예: 메모리 한계, 데이터 손상) 발생 시 분산 배치를 분할할 수 있는 기능을 distributed_directory_monitor_split_batch_on_failure 설정(기본값 OFF)으로 추가했습니다. #23864 (Azat Khuzhin).
표준 입력(stdin)으로 데이터를 전달할 때 clickhouse-local의 File 테이블 엔진과 clickhouse-client의 INSERT 쿼리에 대해 진행률을 표시합니다. #18209를 해결합니다. #23656 (Kseniia Sumarokova).
clickhouse-copier의 버그를 수정하고 기능을 개선했습니다. 서로 다른(하지만 호환 가능한 스키마를 가진) 테이블도 복사할 수 있습니다. #9159 해결. ReplacingMergeTree 복사를 위한 테스트를 추가했습니다. #22711 해결. 컬럼 및 Data Skipping 인덱스에 대한 TTL을 지원합니다. 내부 Distributed 테이블(분산 테이블)을 생성할 때는 이를 단순히 제거하고, 기본 테이블은 TTL과 스키핑 인덱스를 유지합니다. #19384 해결. MATERIALIZED 및 ALIAS 컬럼 복사를 허용합니다. 이 컬럼이 PRIMARY KEY에 포함된 경우처럼 도움이 될 수 있는 몇 가지 사례가 있습니다. 이제 태스크 설정에서 allow_to_copy_alias_and_materialized_columns 속성을 true로 설정하여 허용할 수 있습니다. #9177 해결. #11007 해결. #9514 해결. 헬퍼 테이블을 이동하기 전에 원본 테이블에서 파티션을 드롭할 수 있도록, 태스크 설정에 allow_to_drop_target_partitions 속성을 추가했습니다. #20957 해결. OPTIMIZE DEDUPLICATE 쿼리를 제거했습니다. ALTER TABLE MOVE PARTITION이 여러 번 재시도되고, 일반 MergeTree 테이블에는 중복 제거 기능이 없기 때문에 필요한 우회 방법이었습니다. #17966 해결. JSON 형식으로 task_path + /status 경로의 ZooKeeper 노드에 진행 상황을 기록합니다. #20955 해결. 인수를 사용하지 않는 ReplicatedTables를 지원합니다. #24834 해결. #23518 (Nikita Mikhaylov).
메모리가 적은 서버에서 매우 드물게 발생하지만 재시작 없이는 머지 작업을 수행할 수 없게 만드는 버그를 수정합니다. #24603 문제를 해결했을 가능성이 있습니다. #24872 (alesapin).
동시 alter move/replace partition 실행 시 복제 큐에서 극히 드물게 발생하는 Tagging already tagged part 오류를 수정합니다. #22142 관련 문제를 해결했을 가능성이 있습니다. #24961 (alesapin).
다른 집계 함수의 집계 함수 상태를 다시 집계하여 집계 함수 상태를 계산할 때(실용적인 사용 사례는 아님) 발생할 수 있던 잠재적인 충돌 문제를 수정했습니다. #24523를 참조하십시오. #25015 (alexey-milovidov).
SYSTEM RESTART REPLICA 또는 SYSTEM SYNC REPLICA 쿼리가 완료되지 않는 문제를 수정했습니다. 이는 RAM 용량이 극도로 작은 서버에서 발생했습니다. #24457 (Nikita Mikhaylov).
clickhouse-server 내부에서 ZooKeeper 클라이언트가 멈춰 버릴 수 있던 버그를 수정했습니다. #24721 (alesapin).
ZooKeeper 연결이 끊겼다가 복원된 이후에 레플리카를 클론한 경우, 해당 레플리카의 복제 큐에 오래된 항목이 포함될 수 있었습니다. 복제 큐에 서로 겹치는 virtual 파트가 포함된 경우 발생하던 assertion 실패를 수정했습니다. 이는 일부 데이터 파트가 손실된 경우 드물게 발생할 수 있습니다. 프로세스를 종료하지 않고 로그에 오류를 출력하도록 변경했습니다. #24777 (tavplubix).
쿼리 플랜의 expression-push-down 최적화 시 누락되던 WHERE 조건을 수정합니다(기본값을 query_plan_filter_push_down = 1로 설정). #25368 문제를 수정합니다. #25370 (Nikolai Kochetov).
TTL이 설정된 머지 후 파트가 서로 겹치는 상황이 발생할 수 있는 버그를 수정합니다: Part all_40_40_0 is covered by all_40_40_1 but should be merged into all_40_41_1. This shouldn't happen often.. #25549 (alesapin).
ZooKeeper 연결이 끊어졌을 때 ReplicatedMergeTree 테이블이 재연결을 시도하기 전에 백그라운드 작업이 완료될 때까지 대기하는 문제가 있었습니다. 이 문제가 수정되어 이제는 백그라운드 작업이 강제로 중지됩니다. #25306 (tavplubix).
배열이 기본 키에 사용된 경우 ARRAY JOIN이 포함된 쿼리에서 발생하던 Key expression contains comparison between inconvertible types 오류를 수정합니다. 이 변경으로 #8247 이슈가 해결됩니다. #25546 (Anton Popov).
예외 메시지 "Cannot sum Array/Tuple in min/maxMap"에 대한 논리 오류를 수정합니다. #25298 (Kruglov Pavel).
LowCardinality 인자가 IN 연산자에서 사용된 쿼리에서 발생하던 Bad cast from type DB::ColumnLowCardinality to DB::ColumnVector<char8_t> 오류를 수정했습니다(이 버그는 21.6에서 도입되었습니다). #25187를 수정했습니다. #25290 (Nikolai Kochetov).
널을 허용하지 않는 컬럼에서 joinGetOrNull 의 잘못된 동작을 수정합니다. 이 수정으로 #24261가 해결됩니다. #25288 (Amos Bird).
대형 정수형에서의 잘못된 동작과 UBSan 리포트를 수정합니다. 이전 버전에서는 CAST(1e19 AS UInt128)가 0을 반환했습니다. #25279 (alexey-milovidov).
DiskS3에서 파일을 읽을 때 발생할 수 있었던 오류 「Cannot read from istream at offset 0」를 수정했습니다(S3 가상 파일 시스템은 아직 개발 중인 실험적 기능이므로 프로덕션 환경에서 사용하면 안 됩니다). #24885 (Pavel Kovalenko).
분산 materialized view 조인 시 발생하는 "Missing columns" 예외를 수정합니다. #24870 (Azat Khuzhin).
Buffer 테이블에서 총 바이트 수 계산을 수정합니다. 현재 ClickHouse 버전에서는 버퍼 플러시 중 total_writes.bytes 카운터가 과도하게 감소합니다. 이로 인해 카운터가 오버플로우되고, 플러시 이후 어느 시점부터 totalBytes가 약 17.44 EB 정도의 값을 반환하게 됩니다. #24450 (DimasKovas).
LDAP로 사용자 인증을 관리하는 경우, LDAP 그룹이 존재하지 않는 로컬 역할에 매핑되었을 때 LDAP 역할을 (재)매핑하는 과정에서 발생할 수 있는 잠재적인 교착 상태를 수정했습니다. #24431 (Denis Glazachev).
"multipart/form-data" 메시지에서 경계(boundary) 앞에 오는 CRLF를 경계의 일부로 간주하도록 했습니다. #23905를 수정했습니다. #24399 (Ivan).
교차하는 가짜 파트가 있을 때 DROP PARTITION 동작을 수정합니다. 드문 경우이지만, 현재 블록 번호보다 mutation 버전이 더 큰 파트가 존재할 수 있습니다. #24321 (Amos Bird).
RENAME TABLE 쿼리를 사용하여 materialized view를 Ordinary 데이터베이스에서 Atomic 데이터베이스로 이동할 때 발생하던 버그를 수정했습니다. 이제 materialized view의 내부 테이블도 함께 새 데이터베이스로 이동됩니다. #23926 이슈를 해결합니다. #24309 (tavplubix).
Kafka 테이블에 대한 수정입니다. Engine = Kafka인 경우 동일한 consumer가 이전에 비어 있는 assignment를 가졌던 경우에는 소비를 시작할 수 없었던 장애 조치(failover) 동작의 버그를 수정했습니다. #21118 이슈를 해결했습니다. #21267 (filimonov).
통합 테스트 설정에서 dictionary를 별도로 처리하도록 했으며, 남아 있던 dictionary 수동 설정을 제거했습니다. #24728 (Ilya Yatsishin).
YAMLParser 클래스에 대한 libfuzzer 테스트를 추가했습니다. #24480 (BoloniniD).
이제 통합 테스트 실행에 Ubuntu 20.04를 사용하며, 통합 테스트 실행에 사용되는 docker-compose 버전을 1.28.2로 업데이트했습니다. 환경 변수가 이제 docker-compose에 반영됩니다. 병렬 실행을 허용하도록 test_dictionaries_all_layouts_separate_sources를 다시 구성했습니다. #20393 (Ilya Yatsishin).
zstd 압축 라이브러리가 v1.5.0으로 업데이트되었습니다. 복제 과정에서 "checksum does not match"라는 메시지가 표시될 수 있습니다. 이 메시지는 압축 알고리즘 업데이트로 인해 발생하는 정상적인 현상이므로 무시해도 됩니다. 이 메시지는 정보 제공용일 뿐이며 어떠한 종류의 비정상적인 동작도 의미하지 않습니다.
설정 compile_expressions가 기본적으로 활성화되었습니다. 다양한 시나리오에서 광범위하게 테스트되었지만, 서버에서 원치 않는 동작이 발생하는 경우 이 설정을 비활성화해 볼 수 있습니다.
UUID 타입 값은 정수와 비교할 수 없습니다. 예를 들어 uuid != 0 대신 uuid != '00000000-0000-0000-0000-000000000000'와 같이 작성하십시오.
Postgres와 유사한 형 변환 연산자(::)가 추가되었습니다. 예: [1, 2]::Array(UInt8), 0.1::Decimal(4, 4), number::UInt16. #23871 (Anton Popov).
큰 정수를 프로덕션 환경에서 사용할 수 있도록 개선했습니다. UInt128 데이터 타입을 지원합니다. Decimal256 데이터 타입과 관련된 알려진 문제를 수정합니다. 딕셔너리에서 큰 정수를 지원합니다. 큰 정수에 대해 gcd/lcm 함수를 지원합니다. 배열 검색 및 조건부 함수에서 큰 정수를 지원합니다. LowCardinality(UUID)를 지원합니다. generateRandom 테이블 함수 및 clickhouse-obfuscator에서 큰 정수를 지원합니다. 스칼라 서브쿼리에서 UUID를 반환할 때 발생하는 오류를 수정합니다. 이로써 #7834가 수정되었습니다. 이로써 #23936가 수정되었습니다. 이로써 #4176가 수정되었습니다. 이로써 #24018가 수정되었습니다. 하위 호환성이 없는 변경 사항: UUID 타입의 값은 정수와 비교할 수 없습니다. 예를 들어 uuid != 0 대신 uuid != '00000000-0000-0000-0000-000000000000'처럼 작성해야 합니다. #23631 (alexey-milovidov).
Arrow, Parquet, ORC 형식에서 데이터를 삽입 및 조회할 때 Array 데이터 타입을 사용할 수 있습니다. #21770 (taylor12805).
clickhouse-local에서 DDL 쿼리를 사용해 딕셔너리를 생성하는 기능이 추가되었습니다. #22354 이슈를 해결했습니다. DETACH DICTIONARY PERMANENTLY를 지원합니다. Atomic 데이터베이스 엔진에 대해 EXCHANGE DICTIONARIES를 지원합니다. RENAME DICTIONARY를 사용해 데이터베이스 간에 딕셔너리를 이동하는 기능을 지원합니다. #23436 (Maksim Kita).
insert_null_as_default = 1인 경우 INSERT ... SELECT 및 INSERT ... SELECT ... UNION ALL ... 쿼리에서 NULL 대신 기본값을 삽입합니다. #22832를 해결합니다. #23524 (Kseniia Sumarokova).
clickhouse-local에서 진행 상황 표시를 위해 --progress 옵션 지원을 추가했습니다. #23196 (Egor Savin).
http 딕셔너리 소스에서 Content-Encoding HTTP 헤더를 기준으로 하는 HTTP 압축 지원을 추가했습니다. 이로써 #8912가 수정되었습니다. #23946 (FArthur-cmd).
SYSTEM QUERY RELOAD MODEL, SYSTEM QUERY RELOAD MODELS를 추가했습니다. #18722 이슈를 해결했습니다. #23182 (Maksim Kita).
EXPLAIN PLAN 쿼리에 대해 json 설정(불리언(boolean), 기본값 0)을 추가합니다. 이 설정을 활성화하면 쿼리 출력은 단일 JSON 행이 됩니다. 불필요한 이스케이프를 피하기 위해 TSVRaw 형식을 사용하는 것이 좋습니다. #23082 (Nikolai Kochetov).
EXPLAIN PIPELINE 쿼리에 indexes 설정(boolean, 기본값은 비활성화)을 추가합니다. 이 설정을 활성화하면 사용된 인덱스와 각 인덱스에 대해 필터링된 파트 수 및 그래뉼 수를 표시합니다. MergeTree* 테이블에서 지원됩니다. #22352 (Nikolai Kochetov).
LDAP: Active Directory 그룹을 ClickHouse 역할에 매핑할 때 사용할 수 있는 사용자 DN 감지 기능을 구현했습니다. #22228 (Denis Glazachev).
연속된 행 사이의 차이를 합산하면서 타임스탬프를 저장하여 머지 시 순서를 유지하는 새로운 집계 함수 deltaSumTimestamp. #21888 (Russ Frank).
기본값으로 compile_expressions 설정을 활성화합니다. 이 설정이 활성화되면 단순 함수와 연산자의 조합이 런타임에 LLVM을 사용해 네이티브 코드로 컴파일됩니다. #8482 (Maksim Kita, alexey-milovidov). 참고: 문제가 발생한다고 판단되면 이 옵션을 끄십시오.
re2 라이브러리를 업데이트합니다. 정규 표현식 매칭 성능이 개선되었습니다. 또한 이 PR은 gcc-11과의 호환성을 추가합니다. #24196 (Raúl Marín).
ORC 입력 포맷이, 파일 크기가 매우 클 때 메모리 사용량이 많이 드는 전체 테이블 일괄 로딩 방식 대신 스트라이프(stripe) 단위로 읽도록 변경되었습니다. #23102 (Chao Ma).
쿼리에서 집계 함수 sum, count, avg를 하나의 집계 함수로 결합(fusion)합니다. 이 최적화는 optimize_fuse_sum_count_avg 설정으로 제어됩니다. 이 기능은 새로운 집계 함수 sumCount로 구현되었습니다. 이 함수는 두 필드 sum과 count를 가지는 튜플을 반환합니다. #21337 (hexiaoting).
zstd를 v1.5.0으로 업데이트합니다. 압축 성능이 한 자릿수 퍼센트 수준으로 개선되었습니다. #24135 (Raúl Marín). 참고: 복제(replication) 중에 "checksum does not match"라는 메시지가 표시될 수 있습니다. 이러한 메시지는 압축 알고리즘 업데이트로 인해 예상되는 것이며 무시해도 됩니다.
Buffer 테이블의 성능을 개선했습니다. Buffer 엔진에 대해 total_bytes/total_rows에 대한 잠금(lock)을 획득하지 않습니다. #24066 (Azat Khuzhin).
hashed/sparse_hashed 딕셔너리에 대한 사전 할당(preallocate) 지원이 다시 추가되었습니다. #23979 (Azat Khuzhin).
기본값으로 async_socket_for_remote를 활성화합니다(팬아웃이 큰 분산 테이블(Distributed table)에 대해 쿼리할 때 스레드 수를 줄입니다). #23683 (Nikolai Kochetov).
MergeTree 테이블 계열에 _partition_value 가상 컬럼을 추가합니다. 이는 파티션을 결정론적으로 프루닝(pruning)하는 데 사용할 수 있습니다. 뮤테이션을 위한 파티션 매처(matcher)를 구현하는 데 필요합니다. #23673 (Amos Bird).
DateTime 연산에서 시간대를 명시적으로 지정하지 않으면 기본 시간대 설정을 그대로 유지합니다. 예를 들어, 시간대가 없는 DateTime 타입 값에 1초를 더해도 여전히 시간대가 없는 DateTime 타입으로 남습니다. 이전 버전에서는 기본 시간대 값이 반환 데이터 타입에 명시적으로 추가되어 DateTime('something')이 되었습니다. 이 변경으로 #4854가 해결되었습니다. #23392 (alexey-milovidov).
MySQL 스토리지에서 데이터베이스 이름 대신 빈 문자열을 지정할 수 있도록 허용합니다. 쿼리에는 기본 데이터베이스가 사용됩니다. 이전 버전에서는 SELECT 쿼리에 대해서만 동작했으며, INSERT에 대한 지원도 추가되었습니다. 이 변경으로 #19281가 해결됩니다. 이는 Sphinx 또는 다른 MySQL 호환 외부 데이터베이스와 작업할 때 유용합니다. #23319 (alexey-milovidov).
quantile(s)TDigest를 수정했습니다. tdunning/t-digest 3.2+를 기준으로 단일 센트로이드(singleton centroid)에 대한 특별 처리를 추가했습니다. 또한 알고리즘의 이전 버전 구현에서 센트로이드가 과도하게 압축되던 버그를 수정했습니다. #23314 (Vladimir Chebotarev).
스토리지 종료 시점까지 딕셔너리를 유지하여 Buffer 엔진의 최종 플러시 동안 서버 종료 시 발생할 수 있는 external dictionary 'DICT' not found 오류를 방지합니다. #24068 (Azat Khuzhin).
하나의 데이터베이스 내에서 테이블을 셧다운하기 전에 Buffer 테이블을 플러시하여, 기반 테이블이 이미 DETACH되어 블록이 버려지는 것(로그에 Destination table default.a_data_01870 doesn't exist. Block of data is discarded 오류가 기록됨)을 방지합니다. #24067 (Azat Khuzhin).
이제 prefer_column_name_to_alias = 1 설정이 group by, having, order by에서도 컬럼 이름을 우선적으로 사용합니다. 이 변경으로 #23882가 수정되었습니다. #24022 (Amos Bird).
DateTime64에 대해 ORDER BY WITH FILL 지원을 추가했습니다. #24016 (kevin wan).
ReplacingMergeTree에서 버전 컬럼으로 DateTime64를 사용할 수 있도록 허용합니다. #23992 (kevin wan).
Enum 요소 이름에 대한 힌트를 추가하여 오타가 있을 경우 이름을 제안하도록 했습니다. #17112를 해결했습니다. #23919 (flynn).
사전에 대해 값이 발견된 비율(값을 찾은 항목의 백분율)을 측정합니다(system.dictionaries의 found_rate 참조). #23916 (Azat Khuzhin).
테이블 설정 rabbitmq_queue_settings_list를 통해 특정 큐 설정을 추가할 수 있게 했습니다. (#23737 및 #23918 해결). 사용자가 모든 RabbitMQ 설정을 제어할 수 있도록 했습니다. 테이블 설정 rabbitmq_queue_consume가 1로 설정된 경우, RabbitMQ 테이블 엔진은 지정된 큐에만 연결하고 exchange, 큐, 바인딩 선언과 같은 RabbitMQ consumer 측 설정은 수행하지 않습니다. (#21757 해결). RabbitMQ 테이블이 DROP될 때 적절한 정리 작업을 수행하도록 했습니다. 테이블이 선언한 큐와, 테이블이 생성한 경우 해당 큐에 바인딩된 모든 exchange를 삭제합니다. #23887 (Kseniia Sumarokova).
system.distribution_queue에 broken_data_files/broken_data_compressed_bytes를 추가합니다. 분산 테이블(Distributed tables)에 대한 비동기 삽입에서 손상된 것으로 표시된 파일 개수에 대한 메트릭(BrokenDistributedFilesToInsert)을 추가합니다. #23885 (Azat Khuzhin).
system.tables를 쿼리해도 더 이상 ZooKeeper에 접근하지 않습니다. #23793 (Fuwang Hu).
OPTIMIZE 쿼리가 lock_acquire_timeout_for_background_operations 설정을 준수하도록 했습니다. #23623 (Azat Khuzhin).
새로운 SYSTEM RESTART DISK SQL 명령을 통해 런타임에 S3 디스크 설정을 변경할 수 있게 되었습니다. #23429 (Pavel Kovalenko).
사용자가 실수로 max_distributed_connections 값을 0으로 설정하는 잘못된 설정을 적용한 경우, Distributed 테이블에 대한 모든 쿼리는 「logical error」를 포함한 메시지와 함께 예외를 발생시킵니다. 그러나 이는 실제로는 논리적 오류가 아니라 예상된 동작이므로 예외 메시지가 다소 부정확했습니다. 이로 인해 논리적 오류가 절대 발생하지 않음을 보장하는 CI 환경의 검증도 트리거되었습니다. 대신 이제 max_distributed_connections가 0으로 잘못 설정된 경우 이를 가능한 최소 값(1)으로 처리합니다. #23348 (Azat Khuzhin).
MySQL 테이블 엔진, 딕셔너리 소스 및 MaterializeMySQL의 소규모 데이터 가져오기를 위해 external_storage_max_read_rows 및 external_storage_max_read_rows 설정을 추가했습니다. #22697 (TCeason).
MaterializeMySQL (실험적 기능): 이전에는 SQL 호환성 문제로 인해 MySQL 5.7.9가 지원되지 않았습니다. 이제 MySQL 파라미터 검증을 MaterializeMySQL에 위임합니다. #23413 (TCeason).
파티션 키와 기본 키에서 사용되는 경우 이전 modulo 함수 버전을 사용하도록 했습니다. #23508 이슈를 해결합니다. #24157 (Kseniia Sumarokova). 이는 이전 릴리스에서 하위 호환성 문제의 원인이었습니다.
SYSTEM RESTART REPLICA 또는 SYSTEM SYNC REPLICA 쿼리가 무한히 처리되는 문제를 수정했습니다. 이는 RAM 용량이 극도로 작은 서버에서 감지되었습니다. #24457 (Nikita Mikhaylov).
toWeek 함수의 잘못된 단조성을 수정합니다. 이로써 #24422가 해결됩니다. 이 버그는 #5212에서 도입되었으며, 이후 더 지능적인 partition pruner(파티션 프루너)에 의해 드러났습니다. #24446 (Amos Bird).
교차하는 가짜 파트가 있는 경우 DROP PARTITION 동작을 수정했습니다. 드물지만 현재 블록 번호보다 더 큰 변경(mutation) 버전을 가진 파트가 존재할 수 있습니다. #24321 (Amos Bird).
Ordinary 데이터베이스에서 Atomic 데이터베이스로 RENAME TABLE 쿼리를 사용해 materialized view를 이동하는 과정에서 발생하던 버그를 수정했습니다. 이제 내부 테이블이 materialized view와 함께 새 데이터베이스로 이동합니다. #23926를 수정합니다. #24309 (tavplubix).
일부 ALTER PARTITION 쿼리로 인해 복제 큐에서 Part A intersects previous part B 및 Unexpected merged part C intersecting drop range D 오류가 발생할 수 있었습니다. 이 문제가 수정되었습니다. #23296을(를) 해결했습니다. #23997 (tavplubix).
external GROUP BY 및 overflow 행 처리 시 발생하던 SIGSEGV를 수정합니다(예: SELECT FROM GROUP BY WITH TOTALS SETTINGS max_bytes_before_external_group_by>0, max_rows_to_group_by>0, group_by_overflow_mode='any', totals_mode='before_having' 같은 쿼리). #23962 (Azat Khuzhin).
소스에 중복 항목이 있는 CACHE 딕셔너리에 대한 키 메트릭 집계를 수정했습니다(DictCacheKeysRequestedMiss 오버플로가 발생하던 문제). #23929 (Azat Khuzhin).
GROUP BY 및 집계 함수를 일반 함수로 감싼 경우 distributed_group_by_no_merge = 2의 동작을 수정했습니다 (#23546에서 발생한 문제). distributed_group_by_no_merge = 2를 윈도우 함수와 함께 사용하려 할 경우 예외를 발생시키도록 했습니다. 윈도우 함수가 포함된 쿼리에 대해서는 optimize_distributed_group_by_sharding_key를 비활성화했습니다. #23906 (Azat Khuzhin).
s3 테이블 함수에 대한 수정: HTTP 오류를 더 잘 처리하도록 개선했습니다. 이전에는 HTTP 오류의 응답 본문이 무시되었습니다. #23844 (Vladimir Chebotarev).
s3 테이블 FUNCTION에 대한 수정: URI 처리 방식이 개선되었습니다. + 기호를 포함한 URL에서 해당 키를 가진 데이터를 읽을 수 없던 비호환성 문제를 수정했습니다. #23822 (Vladimir Chebotarev).
GLOBAL IN/JOIN 및 use_hedged_requests를 사용하는 쿼리에서 발생하는 Can't initialize pipeline with empty pipe 오류를 수정했습니다. #23431을(를) 해결합니다. #23805 (Nikolai Kochetov).
materialized view에서 참조되는 경우 CLEAR COLUMN이 동작하지 않던 문제를 수정합니다. #23764를 종료합니다. #23781 (flynn).
Values 포맷을 사용할 때 HDFS에서 읽는 경우 발생하는 힙 메모리 해제 후 사용(use-after-free) 문제를 수정합니다. #23761 (Kseniia Sumarokova).
Distributed 테이블에 INSERT할 때 어떤 예외가 발생했을 경우 발생할 수 있는 「Cannot schedule a task」 오류를 방지합니다. #23744 (Azat Khuzhin).
동기화가 뒤처진 ReplicatedMergeTree 레플리카 복구 시 발생하던 버그를 수정했습니다. 레플리카의 중단 기간 동안 ALTER 쿼리가 실행된 경우, 뒤처진 레플리카에서 일부 메타데이터 업데이트가 무시될 수 있었습니다. #23742 (tavplubix).
정수가 부동 소수점 데이터 타입으로 정확히 표현될 수 없는 경우, 정수와 부동 소수점 수의 비교 방식을 변경합니다. 새 버전에서는 반올림 오차가 발생하므로 비교 결과가 false를 반환합니다. 예: 9223372036854775808.0 != 9223372036854775808, 이는 9223372036854775808이라는 수를 부동 소수점 수로는 정확히 표현할 수 없기 때문입니다(그리고 9223372036854775808.0은 9223372036854776000.0으로 반올림됩니다). 하지만 이전 버전에서는 부동 소수점 수 9223372036854776000.0을 다시 UInt64로 변환하면 9223372036854775808이 되므로, 두 수가 동일하다고 판단하여 비교 결과로 true를 반환했습니다. 참고로 Python 프로그래밍 언어 역시 이 수들을 동일한 값으로 취급합니다. 그러나 이 동작은 CPU 모델에 따라 달라졌습니다(일부 범위를 벗어나는 수에 대해서 AMD64와 AArch64에서 서로 다른 결과를 반환). 따라서 비교를 더 정밀하게 만들었습니다. 이제는 정수가 부동 소수점 타입으로 정확히 표현되는 경우에만 정수와 부동 소수점 수를 동일하다고 판단합니다. #22595 (alexey-milovidov).
단일 Tuple 인자를 사용하는 argMin 및 argMax에 대한 지원을 제거합니다. 해당 코드는 메모리 안전하지 않았습니다. 이 기능은 실수로 추가되었으며, 사용자에게 혼란을 주었습니다. 이러한 함수는 나중에 다른 이름으로 다시 도입될 수 있습니다. 이 변경은 #22384를 수정하고 #17359를 되돌립니다. #23393 (alexey-milovidov).
함수 dictGetChildren(dictionary, key), dictGetDescendants(dictionary, key, level)가 추가되었습니다. 함수 dictGetChildren는 모든 자식을 인덱스들의 배열로 반환합니다. 이는 dictGetHierarchy에 대한 역변환입니다. 함수 dictGetDescendants는 dictGetChildren를 재귀적으로 level회 적용했을 때와 같이 모든 하위 항목을 반환합니다. level 값이 0이면 무한대를 의미합니다. dictGetHierarchy, dictIsIn 함수의 성능이 개선되었습니다. #14656 해결. #22096 (Maksim Kita).
함수 dictGetOrNull이 추가되었습니다. 이 함수는 dictGet과 동일하게 동작하지만, 딕셔너리에서 키를 찾지 못한 경우 Null을 반환합니다. #22375 해결. #22413 (Maksim Kita).
테이블 함수 s3Cluster가 추가되어, 지정된 클러스터의 각 노드에서 s3의 파일을 병렬로 처리할 수 있습니다. #22012 (Nikita Mikhaylov).
MySQL/PostgreSQL 테이블 엔진/테이블 함수에서 레플리카와 세그먼트 지원이 추가되었습니다. 예를 들어 SELECT * FROM mysql('host{1,2}-{1|2}', ...)와 같이 작성할 수 있습니다. #20969 해결. #22217 (Kseniia Sumarokova).
ALTER TABLE ... FETCH PART ... 쿼리가 추가되었습니다. 이는 FETCH PARTITION과 유사하지만, 하나의 파트(part)만 가져옵니다. #22706 (turbo jason).
Distributed 테이블에 대한 재귀 쿼리의 깊이를 제한하는 설정 max_distributed_depth가 추가되었습니다. #20229 해결. #21942 (flynn).
로컬 파일이 아닌 소스(예: URL)에 대해 ArrowStream 입력 포맷에서 읽기 성능을 개선했습니다. #22673 (nvartolomei).
네이티브 프로토콜을 통해 localhost와 상호 작용할 때(분산 쿼리를 사용하는 clickhouse-client 또는 서버 간 통신) 기본적으로 압축을 비활성화했습니다. 일부 가져오기/내보내기 작업의 성능이 향상될 수 있습니다. #22234를 해결합니다. #22237 (alexey-milovidov).
분산 쿼리에서(optimize_skip_unused_shards_rewrite_in 옵션이 활성화된 상태에서, 기본적으로 활성화되어 있으며, 여전히 optimize_skip_unused_shards가 필요함) IN 절의 오른쪽 부분에서 세그먼트에 속하지 않는 값을 제외합니다. #21511 (Azat Khuzhin).
File 계열 테이블 엔진과 Parquet, Arrow, ORC 같은 컬럼 지향 포맷을 사용할 때 일부 컬럼만 읽을 때의 성능을 개선했습니다. #issue:20129를 해결합니다. #21302 (keenwolf).
버전 21.1 이전과 같이 더 많은 조건을 PREWHERE로 이동할 수 있도록 허용했습니다(내부 휴리스틱 조정). 이동되는 조건의 수가 충분하지 않으면 성능이 저하될 수 있습니다. #23397 (Anton Popov).
ODBC 연결 성능을 향상하고, 백로그에 있던 모든 미해결 이슈를 수정했습니다. Poco::ODBC 대신 nanodbc 라이브러리를 사용합니다. #9678를 해결합니다. ODBC 테이블 엔진에 DateTime64 및 Decimal* 지원을 추가했습니다. #21961를 해결합니다. 키릴 문자 텍스트가 잘리는 문제를 수정했습니다. #16246를 해결합니다. odbc bridge용 커넥션 풀을 추가했습니다. #21972 (Kseniia Sumarokova).
기본적으로 async_socket_for_remote를 활성화했습니다(분산 쿼리에서 사용하는 OS 스레드 수를 줄이기 위해). #23683 (Nikolai Kochetov).
quantile(s)TDigest를 수정했습니다. tdunning/t-digest 3.2+에 따라 단일 센트로이드(singleton centroid)에 대한 특수 처리를 추가했습니다. 또한 이전 버전 알고리즘 구현에서 센트로이드가 과도하게 압축되던 버그를 수정했습니다. #23314 (Vladimir Chebotarev).
배열 요소의 타입이 서로 다른 일반적인 경우에 대해 함수 arrayHasAny, arrayHasAll, has, indexOf, countEqual를 구현했습니다. 이전 버전에서는 함수 arrayHasAny, arrayHasAll가 false를 반환했으며, has, indexOf, countEqual는 예외를 발생시켰습니다. 또한 함수 has 및 유사한 함수에서 Decimal과 big integer 타입에 대한 지원을 추가했습니다. 이로써 #20272가 해결됩니다. #23044 (alexey-milovidov).
함수 extractAllGroupsHorizontal 결과에서 허용되는 일치 항목의 최대 개수 상한을 높였습니다. #23036 (Vasily Nemkov).
SSL을 사용하여 clickhouse-keeper(ZooKeeper를 대체하는 실험적인 drop-in replacement)를 실행할 수 있는 기능이 추가되었습니다. 구성 설정 keeper_server.tcp_port_secure는 클라이언트와 keeper-server 간의 보안 통신에 사용할 수 있습니다. keeper_server.raft_configuration.secure는 노드 간 내부 보안 통신을 활성화하는 데 사용할 수 있습니다. #22992 (alesapin).
Buffer 테이블에 대해 버퍼를 오직 백그라운드에서만 플러시할 수 있는 기능을 추가했습니다. #22986 (Azat Khuzhin).
WHERE 절에 NULL 조건이 있는 MergeTree 테이블을 조회할 때, 드물게 예외가 발생하는 문제가 있었습니다. 이 변경으로 #20019를 해결합니다. #22978 (alexey-milovidov).
hedged 요청에 대한 여러 가지 수정이 이루어졌습니다. 설정 use_hedged_requests 가 활성화된 상태에서 GLOBAL IN/JOIN 이 포함된 쿼리에 대해 Can't initialize pipeline with empty pipe 오류가 발생하던 문제를 수정했습니다. 이 수정으로 #23431이(가) 해결되었습니다. #23805 (Nikolai Kochetov). 크래시를 유발하던 hedged 연결의 경쟁 상태(race condition)를 수정했습니다. 이 수정으로 #22161이(가) 해결되었습니다. #22443 (Kruglov Pavel). 원격 쿼리(async_socket_for_remote 가 활성화된 경우)로부터 unknown packet 을 수신했을 때 발생할 수 있던 크래시를 수정했습니다. 이 수정으로 #21167이(가) 해결되었습니다. #23309 (Nikolai Kochetov).
input_format_with_names_use_header SETTING을 비활성화했을 때 CSVWithNames 포맷의 모든 입력이 버려지던 문제를 수정했습니다. 이로써 #22406이(가) 해결되었습니다. #23202 (Nikita Mikhaylov).
여러 JOIN이 있는 select 쿼리에서 COLUMNS 매처가 올바르게 동작하도록 수정했습니다. #22736을(를) 해결합니다. #23501 (Maksim Kita).
컬럼 자체가 ReplacingMergeTree의 파라미터로 사용되는 경우, 해당 컬럼의 기본값을 수정하면 발생하던 크래시를 수정했습니다. #23483 (hexiaoting).
ReplacingMergeTree에서 수직 병합의 코너 케이스를 수정했습니다. 드문 경우 이로 인해 Incomplete granules are not allowed while blocks are granules size와 같은 예외와 함께 병합이 실패할 수 있었습니다. #23459 (Anton Popov).
빈 배열 리터럴을 차원이 1보다 큰 배열로 캐스팅할 수 없던 버그를 수정했습니다(예: CAST([] AS Array(Array(String)))). #14476을(를) 종료합니다. #23456 (Maksim Kita).
deltaSum 집계 함수에서 카운터를 재설정한 후 잘못된 결과를 반환하던 버그를 수정했습니다. #23437 (Russ Frank).
멀티디스크 구성에서 ReplicatedMergeTree 테이블 생성이 실패할 때 발생하던 Cannot unlink file 오류를 수정했습니다. 이로써 #21755가 해결되었습니다. #23433 (tavplubix).
오래된 블록을 백그라운드에서 정리(cleanup)하는 과정에서 매우 드물게 발생하던 경쟁 조건(race condition)을 수정했습니다. 이 문제로 인해 블록이 중복 제거(deduplication) 윈도우의 끝에 너무 가까이 있는 경우 해당 블록이 중복 제거되지 않을 수 있었습니다. #23301 (tavplubix).
ReplicatedMergeTree 테이블의 생성과 제거 사이에서 분산 환경에서 매우 드물게 발생하던 레이스 컨디션을 수정했습니다. 이로 인해 복제된 테이블을 생성하려 할 때 node doesn't exist와 같은 예외가 발생할 수 있었습니다. #21419를 수정했습니다. #23294 (tavplubix).
기본 키가 첫 번째 속성이 아닐 때 DDL에서 simple key 딕셔너리가 올바르게 생성되도록 수정했습니다. #23236을(를) 해결합니다. #23262 (Maksim Kita).
DateTime64에서 formatDateTime()과 "%C" 형식 지정자를 수정하고, 큰 값 및 스케일이 0이 아닌 경우에 대해 toDateTime64()를 수정했습니다. #22937 (Vasily Nemkov).
윈도 함수와 함께 mannWhitneyUTest 및 rankCorr를 사용할 때 발생하던 크래시를 수정했습니다. 이로써 #22728 이슈가 해결되었습니다. #22876 (Nikita Mikhaylov).
LIVE VIEW (실험적 기능): TemporaryLiveViewCleaner에서 TEMPORARY LIVE VIEW를 동시에 DROP/CREATE할 때 발생할 수 있는 hang 현상을 수정했습니다. 자세한 내용은 참고를 확인하십시오. #22858 (Vitaly Baranov).
Map 데이터 타입(실험적 기능): 분산 쿼리에서 map 함수의 잘못된 서식 문제를 수정했습니다. #22588 (foolchi).
TSV 형식 끝에 개행이 없는 빈 문자열의 역직렬화 문제를 수정했습니다. 다음 이슈를 해결합니다: #20244. 버전 업데이트 없이 사용할 수 있는 우회 방법: input_format_null_as_default을 0으로 설정합니다. 이전 버전에서는 기본값이 0이었습니다. #22527 (alexey-milovidov).
tokenbf_v1 전문 인덱스에서 (읽기 시) 버퍼 오버플로가 발생할 수 있었습니다. 초과 바이트는 사용되지 않지만, 읽기 작업이 드물게 비정상 종료로 이어질 수 있습니다. 이 변경으로 #19233이(가) 해결되었습니다. #22421 (alexey-milovidov).
optimize_aggregation_in_order가 활성화되어 있고 테이블에 파트가 많이 존재할 때 데이터가 과소 집계되는 버그를 수정했습니다. optimize_aggregation_in_order가 활성화된 상태에서 집계 연산 성능을 소폭 향상했습니다. #21889 (Anton Popov).
table function view가 컬럼으로 사용되는 경우를 검사합니다. 이는 #20350을 보완합니다. #21465 (Amos Bird).
Merge 엔진을 사용하는 테이블에서 JOIN 및 집계를 포함한 쿼리 실행 시 발생하던 "unknown column" 오류를 수정합니다. #18368, #22226를 해결합니다. #21370 (Vladimir).
푸시다운 최적화에서 발생하던 이름 충돌 문제를 수정했습니다. 이로 인해 FULL JOIN 이후 WHERE 절 필터링이 잘못 동작하는 문제가 있었습니다. #20497 이슈를 해결했습니다. #20622 (Vladimir).
quorum_parallel=1인 quorum insert에서 중복 제거 때문에 실제로는 "quorum"이 되지 않는 매우 드물게 발생하던 버그를 수정했습니다. #18215 (filimonov - 제보, alesapin - 수정).
toStartOfIntervalFunction 함수는 시간 단위 간격을 자정에 맞추도록 정렬합니다(이전 버전에서는 Unix epoch 시작 시점에 정렬되었습니다). 예를 들어, toStartOfInterval(x, INTERVAL 11 HOUR)는 하루를 다음 세 구간으로 나눕니다: 00:00:00..10:59:59, 11:00:00..21:59:59, 22:00:00..23:59:59. 이 동작은 실제 사용 요구에 더 적합합니다. 이 변경으로 #9510 이슈가 해결되었습니다. #22060 (alexey-milovidov).
Graphite 롤업 설정에서 Age와 Precision 값은 보존 기간(retention)이 길어질수록 함께 증가해야 합니다. 이제 이를 검사하며, 잘못된 설정은 예외를 발생시킵니다. #21496 (Mikhail f. Shiryaev).
사용자 정의 최상위 도메인 목록에 존재하는 3개 이상의 레벨을 가진 도메인에 대해 cutToFirstSignificantSubdomainCustom()/firstSignificantSubdomainCustom()가 잘못된 결과를 반환하던 문제를 수정했습니다. 이러한 사용자 정의 최상위 도메인과 일치하는 입력 도메인의 경우, 3레벨 도메인이 첫 번째 중요한 도메인으로 간주되었습니다. 이제 이 동작이 수정되었습니다. 이 변경은 예를 들어 샤딩 키에서 이 함수를 사용하는 경우 비호환성을 유발할 수 있습니다. #21946 (Azat Khuzhin).
system.dictionaries 테이블의 keys 컬럼은 key.names 및 key.types 컬럼으로 대체되었습니다. system.dictionaries 테이블의 key.names, key.types, attribute.names, attribute.types 컬럼은 딕셔너리가 로드되어 있지 않아도 사용 가능합니다. #21884 (Maksim Kita).
이제 ALTER TABLE ATTACH PART[ITION] 명령을 처리하는 레플리카는 다른 레플리카에서 데이터를 가져오기 전에 먼저 자신의 detached/ 폴더에서 검색합니다. 구현 세부 사항으로, 복제 로그(replicated log)에 새로운 명령 ATTACH_PART가 도입되었습니다. 파트는 체크섬을 기준으로 검색되고 비교됩니다. #18978 (Mike Kot). 참고:
클러스터 업그레이드 중에는 ATTACH PART[ITION] 쿼리가 동작하지 않을 수 있습니다.
새 버전에서 ALTER ... ATTACH 쿼리를 실행한 후에는 이전 ClickHouse 버전으로 롤백할 수 없습니다. 이전 서버는 복제 로그의 ATTACH_PART 항목을 처리하지 못하기 때문입니다.
이 버전에서는 빈 <remote_url_allow_hosts></remote_url_allow_hosts> 설정이 모든 원격 호스트에 대한 접근을 차단합니다. 이전 버전에서는 아무런 동작도 하지 않았습니다. 이전 동작을 유지하려면 설정 파일에 비어 있는 remote_url_allow_hosts 요소가 있는 경우 이를 제거하십시오. #20058 (Vladimir Chebotarev).
DateTime64의 범위를 확장하여 1925년부터 2283년까지의 날짜를 지원합니다. 기준 날짜인 1970-01-01 부근에서의 DateTime 처리도 개선되었습니다. #9404 (alexey-milovidov, Vasily Nemkov). 모든 시간 및 날짜 관련 FUNCTION이 확장된 날짜 범위에서도 동작하는 것은 아닙니다.
사전 구성된 사용자와 HTTP 요청(GSS-SPNEGO)에 대한 Kerberos 인증 지원이 추가되었습니다. #14995 (Denis Glazachev).
별칭 대신 원래 컬럼 이름을 사용하도록 prefer_column_name_to_alias 설정을 추가했습니다. 일반적인 데이터베이스의 별칭 규칙과 더 잘 호환되도록 하기 위해서입니다. #9715 및 #9887을 위한 변경입니다. #22044 (Amos Bird).
함수 dictGetChildren(dictionary, key), dictGetDescendants(dictionary, key, level)가 추가되었습니다. 함수 dictGetChildren은 모든 자식을 인덱스 배열로 반환합니다. 이는 dictGetHierarchy의 역변환입니다. 함수 dictGetDescendants는 dictGetChildren을 level 횟수만큼 재귀적으로 적용한 것과 같이 모든 하위 노드를 반환합니다. level 값이 0이면 무한대를 의미합니다. #14656를 해결합니다. #22096 (Maksim Kita).
DateTime 또는 DateTime64 데이터 타입의 타임존 이름을 반환하는 함수 timezoneOf를 추가합니다. 이 변경은 #9959를 해결하지는 않습니다. 함수 이름 간의 불일치를 수정하기 위해 timezone 및 timeZone, toTimezone 및 toTimeZone, 그리고 timezoneOf 및 timeZoneOf 별칭을 추가합니다. #22001 (alexey-milovidov).
CREATE/ALTER USER 명령에 새로운 선택적 절 GRANTEES를 추가합니다. 이 절은 해당 사용자가 필요한 모든 권한을 grant option과 함께 부여받았다는 조건에서, 이 사용자로부터 권한 부여(grant)를 받을 수 있는 사용자 또는 역할을 지정합니다. 기본값은 GRANTEES ANY이며, 이는 grant option을 가진 사용자가 누구에게나 권한을 부여할 수 있음을 의미합니다. 구문: CREATE USER ... GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]. #21641 (Vitaly Baranov).
system.clusters에 새 컬럼 slowdowns_count를 추가했습니다. hedged request를 사용할 때, 특정 레플리카의 응답이 느려 다른 레플리카로 전환된 횟수를 나타냅니다. 또한 system.clusters에서 errors_count의 실제 값도 표시합니다. #21480 (Kruglov Pavel).
MergeTree* 엔진에 _partition_id 가상 컬럼을 추가했습니다. _partition_id를 사용해 파티션 프루닝을 할 수 있게 되었습니다. 파티션 ID 문자열을 계산하는 partitionID() 함수를 추가했습니다. #21401 (Amos Bird).
IPv4 또는 IPv6 주소가 지정된 CIDR 네트워크 프리픽스에 포함되어 있는지 검사하는 isIPAddressInRange 함수를 추가했습니다. #21329 (PHO).
새 SQL 명령 ALTER TABLE 'table_name' UNFREEZE [PARTITION 'part_expr'] WITH NAME 'backup_name'가 추가되었습니다. 이 명령은 모든 디스크에서 '동결된' 파티션을 올바르게 제거하는 데 필요합니다. #21142 (Pavel Kovalenko).
부동소수점 타입에 대해 윈도우 함수용 RANGE OFFSET 프레임을 지원합니다. 윈도우 프레임을 고려하는 lagInFrame/leadInFrame 윈도우 함수를 구현했습니다. 이 함수들은 lag/lead와 유사하지만, 윈도우 프레임을 따릅니다. 프레임이 between unbounded preceding and unbounded following인 경우 두 함수와 동일합니다. 이 변경으로 #5485가 해결되었습니다. #21895 (Alexander Kuzmenkov).
S3 스토리지의 ReplicatedMergeTree에 대해 zero-copy 복제를 지원합니다. #16240 (ianton-ru).
64 MiB 이상의 파일 범위에 대해 mmap IO를 사용한 읽기를 활성화했습니다(설정 min_bytes_to_use_mmap_io). 이를 통해 중간 수준의 성능 향상을 기대할 수 있습니다. #22326 (alexey-milovidov).
min_bytes_to_use_mmap_io 설정으로 읽는 파일에 대한 캐시를 추가했습니다. 이로 인해 설정 값이 작을 경우, 빈번한 mmap/munmap 호출과 그에 따른 페이지 폴트를 피함으로써 상당한(2배 이상) 성능 향상이 발생합니다. mmap IO는 장애 디스크에서의 hang 또는 SIGBUS, 메모리 사용량 제어의 어려움 등으로 프로덕션 환경에서 신뢰성이 떨어지는 중요한 단점이 있다는 점에 유의해야 합니다. 그럼에도 벤치마크에서는 좋은 결과를 보입니다. #22206 (alexey-milovidov).
코덱 NONE 사용 시 불필요한 데이터 복사를 피합니다. 코덱 NONE은 대부분의 경우 거의 쓸모가 없으며, 항상 압축을 사용하는 것이 좋습니다(기본값은 LZ4). 일반적인 인식과 달리 압축을 비활성화해도 성능이 향상되지 않을 수 있으며(반대 효과도 가능함), NONE 코덱은 다음과 같은 일부 상황에서만 유용합니다: - 데이터가 압축 불가능한 경우; - 합성 벤치마크용인 경우. #22145 (alexey-milovidov).
작은 max_rows_to_group_by 및 group_by_overflow_mode='any' 설정을 사용하는 경우 GROUP BY가 더 빨라졌습니다. #21856 (Nikolai Kochetov).
SELECT ... FINAL ... WHERE와 같은 쿼리의 성능을 최적화했습니다. 이제 FINAL이 있는 쿼리에서 정렬 키에 포함된 컬럼을 PREWHERE로 이동하는 것이 허용됩니다. #21830 (foolchi).
JBOD 볼륨의 서로 다른 디스크에 새로운 파트를 균등하게 할당할 수 있도록 하는 새로운 MergeTree 설정인 min_bytes_to_rebalance_partition_over_jbod를 도입했습니다. #16481 (Amos Bird).
system.query_log의 해당 쿼리에 대해 query_kind 컬럼에 Grant, Revoke, System 값을 추가했습니다. #21102 (Vasily Nemkov).
복제에 사용되는 HTTP 연결용 타임아웃을 다른 HTTP 타임아웃과는 별도로 사용자 지정할 수 있게 했습니다. #20088 (nvartolomei).
서버가 블록을 쓰는 동안 예외가 발생하는 경우 클라이언트에 표시되는 예외 메시지를 개선했습니다. 이전 버전에서는 클라이언트가 Data compressed with different methods와 같은 혼동을 줄 수 있는 메시지를 받을 수 있었습니다. #22427 (alexey-milovidov).
실패한 fetch part 이후에 발생할 수 있는 Directory tmp_fetch_XXX already exists 오류를 수정합니다. 임시 fetch 디렉터리가 이미 존재하면 삭제합니다. #14197를 수정합니다. #22411 (nvartolomei).
UInt256 인자를 사용하는 range FUNCTION에서 발생한 MSan 보고된 문제를 수정했습니다(큰 정수 지원은 실험적 기능입니다). 이를 통해 #22157를 종료했습니다. #22387 (alexey-milovidov).
system.processes 테이블에 current_database 컬럼을 추가합니다. 이 컬럼에는 쿼리가 현재 사용 중인 데이터베이스가 포함됩니다. #22365 (Alexander Kuzmenkov).
clickhouse-client에 대소문자를 구분하지 않는 이력 검색/이동 및 단어 부분 단위 이동 기능을 추가했습니다. #22105 (Amos Bird).
NULL만으로 이루어진 튜플(예: (NULL, NULL))이 IN 연산자의 왼쪽에 있고, NULL이 아닌 값들로 이루어진 튜플들이 오른쪽에 있는 경우(예: SELECT (NULL, NULL) IN ((0, 0), (3, 1))), 타입이 호환되지 않는다는 예외를 발생시키는 대신 0을 반환합니다. 이러한 표현식은 SELECT (NULL, NULL) = (8, 0) OR (NULL, NULL) = (3, 2) OR (NULL, NULL) = (0, 0) OR (NULL, NULL) = (3, 1)와 같은 쿼리의 최적화 과정에서 생성될 수도 있습니다. 이 변경으로 #22017을 해결합니다. #22063 (alexey-milovidov).
CONNECTION_ID() 및 VERSION() 함수에 대해 대소문자를 구분하지 않는 별칭을 추가했습니다. 이로써 #22028 문제가 수정되었습니다. #22042 (Eugene Klimov).
windowFunnel FUNCTION에 각 이벤트를 한 번만 집계하도록 하는 strict_increase 옵션을 추가했습니다(#21835 해결). #22025 (Vladimir).
MergeTree 테이블의 파티션 키에 Date 또는 DateTime 컬럼은 포함되지 않고 정확히 하나의 DateTime64 컬럼만 포함된 경우, 해당 값을 system.parts 및 system.parts_columns 테이블의 min_time 및 max_time 컬럼에 노출합니다. system.parts_columns 테이블에 min_time 및 max_time 컬럼을 추가합니다(기존에는 system.parts 테이블과 불일치가 있었습니다). 이 변경으로 #18244가 해결됩니다. #22011 (alexey-milovidov).
clickhouse-copier에서 헬퍼 테이블에서 대상 테이블로 파티션을 이동할 수 있도록 replication_alter_partitions_sync=1 SETTING을 지원하도록 했습니다. 기본 타임아웃을 단축했습니다. #21911을 수정했습니다. #21912 (turbo jason).
시스템 테이블에서 EmbeddedRocksDB 테이블의 데이터 디렉터리의 경로를 표시합니다. #21903 (tavplubix).
프로파일 이벤트 HedgedRequestsChangeReplica를 추가하고, 데이터 읽기 타임아웃 단위를 초(sec)에서 밀리초(ms)로 변경했습니다. #21886 (Kruglov Pavel).
DiskS3(현재 개발 중인 실험적 기능). 대상 디렉터리가 비어 있지 않고 캐시 디스크를 사용하는 경우 디렉터리를 이동할 수 없던 버그를 수정했습니다. #21837 (Pavel Kovalenko).
분산 DDL 쿼리에 대해 쿼리 및 세션 설정이 전파되도록 했습니다. 이를 활성화하려면 distributed_ddl_entry_format_version을 2로 설정하십시오. distributed_ddl_output_mode 설정을 추가했습니다. 지원되는 모드는 none, throw(기본값), null_status_on_timeout, never_throw입니다. Replicated 데이터베이스 엔진과 관련된 다양한 수정 및 개선 사항을 포함합니다. #21535 (tavplubix).
PODArray가 요소 크기가 16의 배수도 16의 분수배도 아닌 값으로 인스턴스화된 경우 버퍼 오버플로가 발생할 수 있었습니다. 현재 릴리스에는 해당 버그가 존재하지 않습니다. #21533 (alexey-milovidov).
병렬 파싱 루틴에서 누락되어 있던 메모리 사용량 계측을 추가했습니다. 이전 버전에서는 결과 집합(result set)에 매우 큰 데이터 블록이 포함된 경우 OOM이 발생할 수 있었습니다. #22008을(를) 해결했습니다. #22425 (alexey-milovidov).
SELECT에 상수 WHERE 조건이 있고 소스 테이블에 이름이 숫자로만 이루어진 컬럼이 있을 때 발생할 수 있는 예외를 수정했습니다. #22270 (LiuNeng).
use_hedged_requests=0 및 async_socket_for_remote=1 사용 시 발생하던 쿼리 취소 문제를 수정했습니다. #22183 (Azat Khuzhin).
InterserverIOHTTPHandler에서 발생한 처리되지 않은 예외를 수정했습니다. #22146 (Azat Khuzhin).
http_port가 구성 파일에 지정되지 않은 경우를 처리하도록 Docker 엔트리포인트를 수정했습니다. #22132 (Ewout).
TOTALS 및 arrayJoin과 함께 사용하는 JOIN에서 발생하는 Invalid number of rows in Chunk 오류를 해결했습니다. #19303 이슈를 종료합니다. #22129 (Vladimir).
Kafka에서 메시지를 폴링하던 백그라운드 스레드 풀 이름을 수정합니다. 잘못된 스레드 풀을 사용하는 Kafka 엔진은 메시지 큐에서 메시지를 소비하지 못합니다. #22122 (fastio).
ReplicatedMergeTree 테이블 엔진에서 OPTIMIZE 및 ALTER 쿼리의 대기 동작을 수정했습니다. 이제 테이블이 분리(detach)되었거나 재시작된 경우에도 쿼리가 멈추지 않습니다. #22118 (alesapin).
버그가 있는 Linux 커널에서 async_socket_for_remote/use_hedged_requests를 비활성화합니다. #22109 (Azat Khuzhin).
Docker entrypoint: LOG_PATH가 비어 있는 경우 현재 디렉터리(.)에 대해 chown을 수행하지 않도록 했습니다. #22100 이슈를 닫았습니다. #22102 (filimonov).
AEAD 모드에서 암호화된 데이터의 최소 크기를 확인하는 검사가 decrypt FUNCTION에 누락되어 있었습니다. 이 변경으로 #21897 문제가 수정됩니다. #22064 (alexey-milovidov).
드물게 CollapsingMergeTree의 머지 과정에서 index_granularity + 1개의 행을 가진 그래뉼이 생성될 수 있습니다. 이로 인해 #18928에서 추가된 내부 검사(21.2 및 21.3에 영향을 미침)가 Incomplete granules are not allowed while blocks are granules size 오류와 함께 실패할 수 있습니다. 이 오류로 인해 파트가 머지되지 못했습니다. #21976 (Nikolai Kochetov).
해시 유형의 외부 딕셔너리를 로드하는 동안 메모리 사용량이 크게 증가할 수 있는 문제를 일으키던 #15454 변경을 롤백했습니다. 이 변경으로 #21935가 해결되었습니다. #21948 (Maksim Kita).
헤지드(hedged) 연결이 겹쳐 발생하는 문제를 방지합니다 (Unknown packet 9 from server 오류). #21941 (Azat Khuzhin).
일부 상황에서 "multipart/form-data" 콘텐츠 유형의 HTTP POST 요청을 읽는 기능을 수정했습니다. #21936 (Ivan).
쿼리에 윈도 함수(window function)가 포함되어 있고 기본 키 순서(primary key order)로 읽는 최적화가 적용된 경우 잘못된 ORDER BY 결과가 반환되던 문제를 수정합니다. #21828을(를) 수정합니다. #21915 (Alexander Kuzmenkov).
Join 타입 테이블 키에 대한 타입 변환을 추가했습니다(이전에는 SIGSEGV가 발생했습니다). #21646 (Azat Khuzhin).
async_socket_for_remote=1 설정에서 분산 요청이 취소되지 않던 문제를 수정했습니다(예: 여러 세그먼트에 대한 단순 SELECT에 LIMIT을 사용하는 경우, 즉 select * from remote('127.{2,3}', system.numbers) limit 100). #21643 (Azat Khuzhin).
외부 데이터베이스 엔진(MySQL, PostgreSQL)을 사용하는 쿼리에서 WHERE 절의 조인된 테이블에 존재하지 않는 컬럼을 제거합니다. close #14614, close #19288 (dup), close #19645 (dup). #21640 (Vladimir).
S3에 데이터를 쓰는 동안 오류가 발생하면 std::terminate가 호출되던 문제를 수정했습니다. #21624 (Vladimir).
optimize_skip_unused_shards가 활성화되어 있고 세그먼트를 전혀 사용하지 않는 경우 발생할 수 있는 Cannot find column 오류를 수정합니다. #21579 (Azat Khuzhin).
쿼리에 상수 WHERE 조건이 있고 optimize_skip_unused_shards 설정이 활성화된 경우, 모든 세그먼트를 건너뛰어 잘못된 빈 결과를 반환할 수 있습니다. #21550 (Amos Bird).
테이블 함수 clusterAllReplicas가 잘못된 _shard_num을 반환하던 문제를 수정했습니다. #21481 종료. #21498 (flynn).
PowerPC 빌드를 위한 여러 준비 작업: ppc64le에서 번들된 openldap을 사용할 수 있도록 했습니다. #22487 (Kfir Itzhak). Clang으로 ppc64le에서 컴파일할 수 있도록 했습니다. #22476 (Kfir Itzhak). ppc64le에서 boost 컴파일 문제를 수정했습니다. #22474 (Kfir Itzhak). ppc64le에서 내부 CMake 변수 CMAKE_ASM_COMPILE_OBJECT가 설정되지 않은 것과 관련된 CMake 오류를 수정했습니다. #22469 (Kfir Itzhak). Fedora/RHEL/CentOS에서 ppc64le 환경에서 libclang_rt.builtins를 찾지 못하는 문제를 수정했습니다. #22458 (Kfir Itzhak). ppc64le에서 jemalloc으로 빌드할 수 있도록 했습니다. #22447 (Kfir Itzhak). ppc64le에서 ClickHouse 설정의 내장 처리와 cctz의 타임존 내장 처리 문제를 수정했습니다. #22445 (Kfir Itzhak). ppc64le에서의 컴파일 문제를 수정하고, ppc64le에서 올바른 명령 포인터 레지스터를 사용하도록 했습니다. #22430 (Kfir Itzhak).
clickhouse-server 이미지 Dockerfile에 deb_location 및 single_binary_location 두 개의 인자를 추가합니다. #21977 (filimonov).
clang-tidy를 사용하는 경우 어서션을 활성화하여 release 빌드에서도 clang-tidy를 사용할 수 있도록 했습니다. #21914 (alexey-milovidov).
cmake 스크립트에서 검색할 llvm-12 바이너리 이름을 추가했습니다. clang 경고를 없애기 위해 암시적 상수 변환을 적용했습니다. CMake 3.19로 빌드할 수 있도록 서브모듈을 업데이트했습니다. readpassphrase 라이브러리에서 매크로 확장 시 재귀를 비활성화했습니다. clang에서 사용이 중단된 -fuse-ld를 --ld-path로 변경했습니다. #21597 (Ilya Yatsishin).
Docker Hub에서 매우 엄격한 요청 속도 제한을 적용했기 때문에 docker/test/testflows/runner/dockerd-entrypoint.sh를 Yandex dockerhub-proxy를 사용하도록 업데이트합니다 #21551 (vzakaznikov).
이제 이전 문법을 사용하여 테이블 TTL이 있는 MergeTree 테이블을 생성하는 것은 허용되지 않습니다. 해당 TTL이 단순히 무시되기 때문입니다. 기존 테이블에 대한 ATTACH는 여전히 가능합니다. #20282 (alesapin).
이제 대소문자를 구분하지 않는 모든 함수 이름은 정규(표준) 표현으로 자동 변경됩니다. 이는 projection 쿼리 라우팅(향후 제공 예정 기능)에 필요합니다. #20174 (Amos Bird).
TTL 표현식이 함수이고 ORDER BY 키와 동일한 경우의 TTL 생성 문제를 수정했습니다. 이제 GROUP BY가 있는 TTL에서 기본 키 컬럼에 사용자 지정 집계를 설정할 수 있습니다. 이전 버전과의 비호환 사항: GROUP BY에 포함되지 않고 명시적으로 설정되지 않은 기본 키 컬럼에 대해서는 TTL이 만료될 때 이제 max 대신 함수 any가 적용됩니다. 또한 WHERE 또는 GROUP BY가 있는 TTL을 사용하는 경우 롤링 업데이트를 수행하면서 머지 중에 예외가 발생할 수 있습니다. #15450 (Anton Popov).
S3 클라이언트에 Server Side Encryption Customer Keys(헤더 x-amz-server-side-encryption-customer-(key/md5)) 지원을 추가했습니다. 자세한 내용은 해당 링크를 참조하십시오. 이로써 #19428 이슈를 종료합니다. #19748 (Vladimir Chebotarev).
executable 딕셔너리 소스에 implicit_key 옵션을 추가했습니다. 이 옵션을 사용하면 레코드가 입력 키와 동일한 순서로 들어오는 경우, 각 레코드마다 키를 출력하지 않아도 됩니다. #14527을 구현합니다. #19677 (Maksim Kita).
QUOTA 유형 query_selects 및 query_inserts를 추가했습니다. #19603 (JackyWoo).
MergeTree* 엔진을 사용하는 테이블에 쿼리 동시성 제어를 위한 두 개의 새로운 테이블 수준 설정이 추가되었습니다. 설정 max_concurrent_queries는 이 테이블과 관련된 동시에 실행될 수 있는 쿼리 수를 제한합니다. 설정 min_marks_to_honor_max_concurrent_queries는 쿼리가 최소 이 수만큼의 마크를 읽는 경우에만 이전 설정을 적용하도록 지정합니다. #19544 (Amos Bird).
user_files 디렉터리에서 파일을 String으로 읽어들이는 file 함수를 추가했습니다. 이는 file 테이블 함수와는 다릅니다. #issue:18851을 구현합니다. #19204 (keenwolf).
실험적 Replicated 데이터베이스 엔진을 추가합니다. 이 엔진은 여러 호스트 간에 DDL 쿼리를 복제합니다. #16193 (tavplubix).
allow_experimental_window_functions = 1로 활성화할 수 있는 윈도우 함수에 대한 실험적 지원을 도입합니다. 이는 알파 단계 수준의 초기 구현으로, 프로덕션 환경에 적합하지 않으며 향후 릴리스에서 하위 호환되지 않는 방식으로 변경될 수 있습니다. 지원되는 기능 목록은 문서를 참조하십시오. #20337 (Alexander Kuzmenkov).
원격 쿼리에 대해 헤지드 요청(hedged requests)을 사용할 수 있습니다. use_hedged_requests 설정을 활성화했을 때(기본값은 비활성화되어 있습니다), 하나의 쿼리에 대해 서로 다른 레플리카와 여러 개의 연결을 설정할 수 있습니다. 기존 레플리카와의 연결이 hedged_connection_timeout 내에 설정되지 않았거나 receive_data_timeout 내에 어떤 데이터도 수신되지 않은 경우 새 연결이 생성됩니다. 쿼리는 가장 먼저 비어 있지 않은 Progress 패킷(또는 allow_changing_replica_until_first_data_packet가 설정된 경우 Data 패킷)을 전송한 연결을 사용하며, 나머지 연결은 취소됩니다. max_parallel_replicas > 1인 쿼리도 지원합니다. #19291 (Kruglov Pavel). 이를 통해 매우 큰 클러스터에서 테일 지연 시간(tail latency)을 크게 줄일 수 있습니다.
행 수준 보안 표현식이 지정된 테이블에서도 PREWHERE를 사용할 수 있도록 지원을 추가하고, 해당 최적화를 활성화했습니다. #19576 (Denis Glazachev).
distributed_aggregation_memory_efficient 설정은 기본적으로 활성화되어 있습니다. 이 설정은 메모리 사용량을 줄이고 분산 쿼리의 성능을 향상시킵니다. #20599 (alexey-milovidov).
파이프라인을 단순화하여, 그 결과 파이프라인 스케줄링 시 락 경합을 줄임으로써, 극단적인 경우(읽기 속도가 초당 50 GB 수준인 경우) Memory 테이블에서의 읽기 속도를 향상했습니다. #20468 (alexey-milovidov).
HTTP 서버를 부분적으로 재구현하여 수신 및 송신 데이터의 복사 횟수를 줄였습니다. 이를 통해 HTTP를 통한 길이가 긴 레코드 삽입 시 성능이 최대 1.5배까지 향상되었습니다. #19516 (Ivan).
Memory 테이블에 compress 설정이 추가되었습니다. 이 설정을 활성화하면 테이블이 더 적은 RAM을 사용합니다. 일부 머신과 데이터셋에서는 SELECT 시 더 빠르게 동작할 수도 있지만, 항상 그런 것은 아닙니다. 이는 #20093를 해결합니다. 참고: Memory 테이블이 MergeTree보다 느리게 동작할 수 있는 이유는 다음과 같습니다. (1) 압축이 없음 (2) 블록 크기가 고정됨 (3) 인덱스와 prewhere가 없음... #20168 (alexey-milovidov).
Memory 테이블에 데이터를 삽입할 때 INSERT SELECT 수행 시 블록을 과도하게 병합(squash)하지 않도록 했습니다. 이전 버전에서는 INSERT SELECT 이후 Memory 테이블에 데이터가 비효율적인 형태로 저장되는 문제가 있었습니다. 이 변경으로 #13052가 해결되었습니다. #20169 (alexey-milovidov).
fuzzer로 발견된, DataType parser에서 지수 시간 복잡도가 발생할 수 있는 경우 중 적어도 하나를 수정했습니다. 이로써 #20096을(를) 해결했습니다. #20132 (alexey-milovidov).
do_not_merge_across_partitions_select_final 설정이 1일 때, 레벨 > 0인 단일 파트에 대해 FINAL이 포함된 SELECT를 병렬로 실행합니다. #19375 (Kruglov Pavel).
system.parts 및 system.parts_columns를 쿼리할 때 요청된 컬럼만 채우도록 했습니다. #19570에 보고된 문제를 해결했습니다. #21035 (Anmol Arora).
avg 집계 FUNCTION 내 산술식에 대한 대수적 최적화를 수행했습니다. #20092를 해결했습니다. #20183 (flynn).
테이블 함수에서 압축 방식 이름의 대소문자를 구분하지 않도록 했습니다. 또한 압축 방식 이름을 대문자로만 인식하던 LZMA 압축 방식을 수정했습니다. #21416 (Vladimir Chebotarev).
비활성 파트가 너무 많을 때 삽입을 지연시키거나 오류를 발생시키도록 하는 두 가지 설정을 추가합니다. 이는 서버가 파트를 충분히 빠르게 정리하지 못하는 경우에 유용합니다. #20178 (Amos Bird).
mysql 클라이언트와의 호환성을 개선합니다. 1. mysql jdbc 2. mycli. #21367 (Amos Bird).
materialized view에서 참조하는 컬럼은 DROP할 수 없도록 했습니다. #21164를 해결했습니다. #21303 (flynn).
MySQL 딕셔너리 소스는 이제 예기치 않은 연결 실패(쿼리 중 MySQL 서버와의 연결이 끊어짐)가 발생할 경우 연결을 재시도합니다. 이는 SSL/TLS 연결에서 때때로 발생하는 문제입니다. #21237 (Alexander Kazakov).
사용성 개선: DateTime64 파싱이 더 일관되도록 개선했습니다. 소수점 이하(서브초) 정밀도를 가진 유닉스 타임스탬프가 스케일된 정수(예: 1111111111.222 대신 1111111111222)로 지정된 경우를 인식합니다. 이 변경으로 #13194가 해결되었습니다. #21053 (alexey-milovidov).
distributed_group_by_no_merge 사용 시 이니시에이터에서만 정렬된 블록의 병합을 수행하도록 했습니다. #20882 (Azat Khuzhin).
mysql 소스용 설정을 로드할 때 ClickHouse가 동일한 우선순위를 가진 레플리카 목록을 무작위로 섞어 mysql 엔드포인트를 선택하는 라운드로빈 로직이 보장되도록 합니다. 이는 #20629를 해결합니다. #20632 (Alexander Kazakov).
함수 'reinterpretAs(x, Type)'의 이름이 'reinterpret(x, Type)'로 변경되었습니다. #20611 (Maksim Kita).
Array와 Tuple이 조합된 데이터 타입에 대한 직렬화를 개선했습니다. enum 데이터 타입을 protobuf enum 타입과 매칭하는 방식을 개선했습니다. Map 데이터 타입의 직렬화 방식을 수정했습니다. 누락된 값은 이제 기본값으로 설정되도록 했습니다. #20506 (Vitaly Baranov).
분산 DDL 작업 실행과 DDL 큐 정리 사이의 레이스 컨디션을 수정했습니다. 이제 활성 워커가 있는 경우 ZooKeeper에서 DDL 작업이 제거될 수 없습니다. #20016 문제를 수정했습니다. #20448 (tavplubix).
Alpine 이미지에서 FQDN 및 기타 DNS 관련 함수가 올바르게 동작하도록 수정합니다. #20336 (filimonov).
access_management 설정은 이제 시작 시 CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT를 제공하여 구성할 수 있으며, 기본값은 비활성화(0)로 이전 값과 동일합니다. #20139 (Marquitos).
DateTime64에 대해 toDateTime64(toDate()/toDateTime()) 처리를 수정하고, DateTime 동작과 일치하도록 DateTime64 클램핑을 구현했습니다. #20131 (Azat Khuzhin).
QUOTA 관련 개선 사항: SHOW TABLES가 이제 QUOTA 계산에서 두 개의 쿼리가 아니라 하나의 쿼리로 간주됩니다. SYSTEM 쿼리도 이제 QUOTA를 소모합니다. QUOTA 소모 시 구간 종료 시점 계산을 수정했습니다. #20106 (Vitaly Baranov).
system.zookeeper 테이블에서 path IN (set) 식을 지원합니다. #20105 (小路).
system.tables에서 MaterializeMySQL 테이블의 모든 세부 정보를 표시합니다. #20051 (Stig Bakken).
스크립트가 입력을 무시하고 데이터를 반환하는 경우와 같은 오용 상황에서만 발생할 수 있었던 executable 딕셔너리의 데이터 레이스를 수정했습니다. #20045 (alexey-milovidov).
MYSQL_OPT_RECONNECT 옵션의 값을 이제 mysql 레플리카의 config 섹션에 있는 "opt_reconnect" 파라미터를 통해 제어할 수 있습니다. #19998 (Alexander Kazakov).
사용자가 Float32 타입을 요청하여 JSONExtract FUNCTION을 호출하는 경우, 결과 타입으로의 부정확한 변환을 허용합니다. 예를 들어 JSON의 숫자 0.1은 배정밀도(double precision)이며 Float32로는 정확히 표현할 수 없지만, 사용자는 여전히 해당 값을 얻기를 원합니다. 이전 버전에서는 변환이 부정확하다는 것을 나타내기 위해 널 허용이 아닌(non-Nullable) 타입에는 0을, 널 허용(Nullable) 타입에는 NULL을 반환했습니다. 이 로직은 100% 정확했지만 사용자에게는 예상 밖의 동작이었고 여러 질문을 야기했습니다. 이 변경으로 #13962가 해결됩니다. #19960 (alexey-milovidov).
일치하지 않는 경우 Distributed 분산 테이블에 대한 INSERT 시 블록 구조를 변환하도록 추가했습니다. #19947 (Azat Khuzhin).
system.distributed_ddl_queue 테이블 동작을 개선했습니다. 재시작 후 MaxDDLEntryID를 마지막 값으로 초기화합니다. 이 PR 이전에는 새 DDLTask가 처리될 때까지 MaxDDLEntryID가 0으로 유지되었습니다. #19924 (Amos Bird).
비동기 전송을 위한 대기 중인 바이트 양에 따라 Distributed로의 INSERT를 조절(throttle)할 수 있는 기능이 추가되었습니다 (Distributed 엔진에 bytes_to_delay_insert/max_delay_to_insert 및 bytes_to_throw_insert SETTINGS가 추가됨). #19673 (Azat Khuzhin).
ZooKeeper에 대한 불필요한 재연결과 단일 ClickHouse 서버에 두 개의 활성 세션이 동시에 존재할 수 있는 문제를 수정합니다. 두 문제 모두 #14678에서 도입되었습니다. #21264 (alesapin).
Values 포맷을 사용해 LowCardinality 컬럼이 있는 테이블에 데이터를 삽입할 때 발생하는 Bad cast from type ... to DB::ColumnLowCardinality 오류를 수정합니다. #21140을 수정합니다 #21357 (Nikolai Kochetov).
조건에 동일 테이블이 포함된 경우, 비복제 MergeTree 테이블 엔진에서 ALTER DELETE 뮤테이션 수행 시 발생하던 교착 상태를 수정합니다. #20558를 해결합니다. #21477 (alesapin).
사용자 지정(기본값이 아닌) ZooKeeper 클러스터를 사용하는 Replicated*MergeTree가 삭제될 때 발생하던 메타데이터 누수 문제를 수정했습니다. #21119 (fastio).
LowCardinality 키를 사용하는 joinGet에서 발생하던 타입 불일치 문제를 수정합니다. 이로써 #21114 이슈가 해결됩니다. #21117 (Amos Bird).
엔진에 다른 매개변수를 지정해야 하는 경우 Replicated(*)MergeTree 엔진에서 default_replica_path 및 default_replica_name 값이 효력이 없던 문제를 수정했습니다. #21060 (mxzlxy).
DateTime64 타입의 특수하게 구성된 범위 초과 값을 포맷팅할 때, 범위를 벗어난 메모리 접근이 발생할 수 있었습니다. 이로써 #20494를 수정했습니다. 이로써 #20543를 수정했습니다. #21023 (alexey-milovidov).
storage join 엔진에 대한 병렬 삽입을 차단합니다. #21009 (vdimir).
ALTER MODIFY COLUMN이 실패할 것이 분명한 뮤테이션(mutation)을 생성하던 동작을 수정했습니다. #21007 (Anton Popov).
#9969를 닫습니다. 대용량 데이터, 다소 복잡한 구조, 그리고 JSON 출력 포맷에서 재현되던 Brotli HTTP 압축 오류를 수정했습니다. 「fix rare access to uninitialized data in ring-buffer」를 포함하기 위해 Brotli를 최신 버전으로 업데이트했습니다. #20991 (Kseniia Sumarokova).
쿼리 취소 시 비동기 작업 큐에서 'Empty task was returned from async task queue'가 반환되던 문제를 수정했습니다. #20881 (Azat Khuzhin).
ClickHouse 서버에 연결하기 위해 MySQL 5.7 클라이언트를 사용할 때 USE database; 쿼리가 동작하지 않던 문제가 수정되었습니다. #18926 이슈를 수정했습니다. #20878 (tavplubix).
집계 함수에서 -State 결합자와 함께 -Distinct 결합자를 사용하는 방식을 수정합니다. #20866 (Anton Popov).
UNION DISTINCT와 LIMIT 절이 포함된 서브쿼리를 수정합니다. #20597를 해결합니다. #20610 (flynn).
PostgreSQL 테이블 엔진을 추가했습니다(select/insert 모두에 대해 다차원 배열을 지원하며, 테이블 FUNCTION으로도 제공됩니다). PostgreSQL 딕셔너리 소스를 추가했습니다. PostgreSQL 데이터베이스 엔진을 추가했습니다. #18554 (Kseniia Sumarokova).
데이터 타입 Nested가 이제 임의 깊이의 중첩을 지원합니다. Array의 size0, Nullable의 null, Tuple 요소의 이름과 같은 복합 타입의 하위 컬럼이 도입되어, 전체 컬럼을 읽지 않고도 해당 값을 읽을 수 있습니다. #17310 (Anton Popov).
FlatDictionary, HashedDictionary, ComplexKeyHashedDictionary, DirectDictionary, ComplexKeyDirectDictionary, RangeHashedDictionary에 Nullable(널 허용) 타입 지원을 추가했습니다. #18236 (Maksim Kita).
DDL worker 대기열에 있는 쿼리를 표시하는 system.distributed_ddl_queue라는 새 테이블을 추가합니다. #17656 (Bharat Nallan).
LDAP 사용자 디렉터리의 사용자에 대해 LDAP 그룹 이름과 일반 속성 값을 로컬 역할에 매핑하는 기능이 추가되었습니다. #17211 (Denis Glazachev).
테이블 함수 cluster에 대한 INSERT를 지원하며, 테이블 함수 remote 및 cluster 모두에서 세그먼트 키(sharding key)를 지정해 노드 간에 데이터를 분산하도록 지원합니다. #16752를 해결했습니다. #18264 (flynn).
XML 문자 디코딩을 위한 함수 decodeXMLComponent를 추가합니다. 예: SELECT decodeXMLComponent('Hello,"world"!')#17659. #18542 (nauta).
parseDateTimeBestEffortUSOrZero, parseDateTimeBestEffortUSOrNull 함수를 추가했습니다. #19712 (Maksim Kita).
함수 formatDateTime은 날짜를 분기 단위로 포맷하기 위한 %Q 수정자를 지원합니다. #19224 (Jianmei Zhang).
Play UI에서 MetaKey+Enter 단축키를 지원합니다. #19012 (sundyli).
맵 데이터 타입을 위한 세 가지 함수를 추가했습니다: 1. mapContains(map, key) 는 map.keys 에 두 번째 인자인 key 가 포함되어 있는지 확인합니다. 2. mapKeys(map) 는 모든 키를 Array 형식으로 반환합니다. 3. mapValues(map) 는 모든 값을 Array 형식으로 반환합니다. #18788 (hexiaoting).
stat 시스템 호출 횟수를 줄여 파트 제거 속도를 향상했습니다. 예전에 존재하던 최적화를 다시 도입한 것입니다. IDisk 인터페이스를 더 안전하게 만들었습니다. #19065를 해결합니다. #19086 (alexey-milovidov).
WITH 구문에서 선언된 별칭이 인덱스 분석에서 올바르게 사용되도록 개선했습니다. 이제 WITH column AS alias SELECT ... WHERE alias = ...와 같은 쿼리는 인덱스를 사용할 수 있습니다. #18896 (Amos Bird).
optimize_alias_column_prediction(기본값: on)을 추가했습니다. 이 설정은 다음을 수행합니다. - 파티션 프루닝 및 보조 인덱스를 통한 데이터 스킵 시 WHERE 절의 별칭 컬럼을 반영합니다. - optimize_trivial_count를 사용하는 단순 count 쿼리에서 WHERE 절의 별칭 컬럼을 반영합니다. - optimize_aggregation_in_order/optimize_read_in_order를 위한 GROUP BY/ORDER BY의 별칭 컬럼을 반영합니다. #16995 (sundyli).
쿼리 플랜의 Filter 단계 를 Expression + Filter 쌍으로 분리하는 기능을 지원합니다. Expression + Expression 병합 최적화(#17458)와 함께 사용하면, Filter 단계 이후 일부 표현식의 실행을 지연시킬 수 있습니다. #19253 (Nikolai Kochetov).
분산 쿼리에서 async_socket_for_remote 설정이 활성화된 경우, 테이블에 매우 깊게 중첩된 데이터 타입(예: Array(Array(Array(...more...))))이 사용되면, 최소한 디버그 빌드 구성에서는 스택 오버플로우가 발생할 수 있었습니다. 이 변경으로 #19108이 수정되었습니다. 또한 이 변경으로 인해 경미한 하위 호환성 문제가 발생합니다. 타입 정의에서 불필요한 괄호는 더 이상 지원되지 않습니다(예: Array((UInt8))). #19736 (alexey-milovidov).
읽을 때 체크섬 검증을 비활성화하는 옵션을 추가합니다. 프로덕션 환경에서는 절대 사용하면 안 됩니다. 이를 비활성화해도 어떠한 이점도 기대하지 마십시오. 실험 및 벤치마크 목적으로만 사용할 수 있습니다. 이 설정은 MergeTree 계열 테이블에만 적용됩니다. 다른 테이블 엔진 및 네트워크를 통해 데이터를 수신할 때는 항상 체크섬을 검증합니다. 관찰 결과, 성능 차이는 없거나 0.5% 미만이었습니다. #19588 (alexey-milovidov).
ClickHouse 사용자 및 그룹의 UID/GID를 clickhouse-server 이미지에서 고정된 값(101)으로 명시적으로 설정합니다. #19096 (filimonov).
매우 긴 문자열을 포함한 데이터를 삽입할 때 발생하던 PeekableReadBuffer: Memory limit exceed 오류를 수정했습니다. #18690 이슈를 해결했습니다. #18979 (tavplubix).
Docker 이미지: clickhouse-server entrypoint가 여러 가지로 개선되었습니다. #18954 (filimonov).
normalizeQueryKeepNames와 normalizedQueryHashKeepNames를 추가하여 긴 이름을 ?로 마스킹하지 않고 쿼리를 정규화할 수 있습니다. 이를 통해 복잡한 쿼리 로그를 더 잘 분석할 수 있습니다. #18910 (Amos Bird).
전송하기 전에 송신 측에서 분산 배치의 블록 단위 체크섬을 확인하도록 변경했습니다(파일을 두 번 읽지 않고, 읽는 동안 체크섬을 검증합니다). 이를 통해 송신 측의 잘린(truncated) .bin 파일로 인해 수신 측에서 INSERT가 걸리는 문제를 방지합니다. 배치 INSERT 시 .bin 파일을 두 번 읽지 않도록 했습니다(이전에는 행/바이트 수를 계산하여 squashing 을 고려해야 했으나, 이제 이 정보가 헤더에 포함되며, 이전 버전과의 호환성은 유지됩니다). #18853 (Azat Khuzhin).
집계 함수 상태(aggregate function state)를 포함한 테이블에서 RIGHT 및 FULL JOIN을 수행할 때 발생하던 문제를 수정했습니다. 이전 버전에서는 cloneResized 메서드와 관련된 예외가 발생했습니다. #18818 (templarzq).
LowCardinality 인수와 함께 ignore 함수를 사용할 때 Expected single dictionary argument for function 오류가 발생할 수 있던 문제를 수정했습니다. 관련 이슈 #14275를 해결했습니다. #19016 (Nikolai Kochetov).
bitmapOrCardinality에서 nullptr를 역참조하여 문제(오류)가 발생할 수 있는 버그를 수정합니다. 이 변경으로 #18911이 해결되었습니다. #18912 (sundyli).
Nullable(String)에서 Nullable(Decimal(P, S))로 NULL을 CAST하려고 할 때 발생하던 Attempt to read after eof 오류를 수정했습니다. 이제 CAST 함수는 널 허용 문자열에서 Decimal 값을 파싱할 수 없을 경우 NULL을 반환합니다. #7690 문제를 수정합니다. #18718 (Winter Zhang).
merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read 값을 0 또는 UINT64_MAX로 설정했을 때 발생하던 SIGSEGV를 수정합니다. #19528 (Azat Khuzhin).
특정한 방식으로 조작된 인수와 함께 addMonth 함수가 호출될 경우 메모리 읽기 시 버퍼 오버플로가 발생할 수 있었습니다. 이번 수정으로 #19441이 수정되었습니다. 또한 #19413이 수정되었습니다. #19472 (alexey-milovidov).
빈 문자열이 IV로 전달된 경우 encrypt/decrypt 함수에서 초기화되지 않은 메모리가 읽힐 수 있는 취약점이 있었습니다. 이 변경으로 #19391이 수정되었습니다. #19397 (alexey-milovidov).
system.parts의 _state 컬럼을 수정합니다(잘못된 순서로 인해 이 컬럼을 쿼리하면 LOGICAL_ERROR가 발생하던 문제). #19346 (Azat Khuzhin).
materialized view와 대상 테이블의 구조가 서로 다를 때 집계 수행 시 잘못된 결과가 나오거나 세그멘테이션 폴트가 발생할 수 있던 문제를 수정했습니다. #18063 이슈를 수정했습니다. #19322 (tavplubix).
Cannot convert column now64() because it is constant but values of constants are different in source and result 오류를 수정합니다. #7156의 후속 작업입니다. #19316 (Nikolai Kochetov).
동시에 실행되는 ALTER 및 DROP 쿼리가 ReplicatedMergeTree 테이블을 처리하는 동안 응답 없이 멈출 수 있는 버그를 수정했습니다. #19237 (alesapin).
Template 또는 CustomSeparated 포맷을 사용하여 HTTP 인터페이스를 통해 데이터를 삽입할 때 발생하던 There is no checkpoint 오류를 수정했습니다. #19021를 수정했습니다. #19072 (tavplubix).
MOVE 또는 REPLACE PARTITION 후, 혹은 드물게는 DETACH 또는 DROP PARTITION 후에 존재하지 않는 part를 기다리느라 Mutation이 멈춰 버리는 현상이 발생할 수 있었습니다. 해당 문제가 수정되었습니다. #15537 (tavplubix).
설정 프로파일에 대해 config에 지정된 설정 제약 조건을 확인합니다. users.xml에 해당 제약 조건을 만족하지 않는 설정이 포함되어 있으면 서버가 시작되지 않습니다. #18486 (tavplubix).
데이터 파트(write_final_mark 및 enable_mixed_granularity_parts)에 영향을 주는 스토리지 설정을 변경하는 ALTER MODIFY SETTING을 제한합니다. #18306 (Amos Bird).
기본적으로 insert_quorum_parallel 값을 1로 설정합니다. 이는 「순차(sequential)」 quorum insert보다 훨씬 사용하기 편리합니다. 그러나 순차적 일관성에 의존하는 경우, 이 설정을 0으로 다시 설정해야 합니다. #17567 (alexey-milovidov).
집계 함수 timeSeriesGroupSum, timeSeriesGroupRateSum를 제거했습니다. 한 지인이 이 함수들이 전혀 동작하지 않았다고 알려주었기 때문입니다. 이는 #16869를 수정합니다. 이러한 함수들을 실제로 사용하고 있었다면, feedback@clickhouse.com 으로 이메일을 보내주시기 바랍니다. #17423 (alexey-milovidov).
toUnixTimestamp(Date())를 사용할 수 없도록 했습니다(이전에는 Date의 UInt16 표현을 반환했습니다). #17376 (Azat Khuzhin).
avg 및 avgWeighted 함수에서 확장 정수 타입(Int128, Int256, UInt256) 사용을 허용합니다. 또한 avgWeighted 함수에서 값과 가중치에 서로 다른 타입(정수, Decimal, 부동소수점)을 사용하는 것도 허용합니다. 이는 하위 호환성이 없는 변경입니다. 이제 avg 및 avgWeighted 함수는 항상 Float64를 반환합니다(문서에 명시된 대로). 이 변경 이전에는 Decimal 인자를 사용하는 경우 반환 타입도 Decimal이었습니다. #15419 (Mike).
표현식 toUUID(N)은 더 이상 동작하지 않습니다. toUUID('00000000-0000-0000-0000-000000000000')로 대체하십시오. 이 변경은 N이 0이 아닌 경우 toUUID(N)의 결과가 직관적이지 않다는 점을 고려하여 이루어졌습니다.
잘못된 "key usage"를 가진 SSL 인증서는 거부됩니다. 이전 버전에서는 이러한 인증서도 허용되었습니다. #19262를 참고하십시오.
substitutions 파일(/etc/metrika.xml)에 대한 incl 참조가 기본 config(<remote_servers>, <zookeeper>, <macros>, <compression>, <networks>)에서 제거되었습니다. substitutions 파일을 사용하고 이러한 암묵적 참조에 의존하고 있었다면, 업데이트 전에 incl="..." 속성이 있는 해당 섹션을 추가하여 수동으로, 명시적으로 다시 설정해야 합니다. #18740 (alexey-milovidov).
여러 개의 ZooKeeper 클러스터를 사용할 수 있게 했습니다. #17070 (fastio).
REPLACE TABLE 및 CREATE OR REPLACE TABLE 쿼리를 추가했습니다. #18521 (tavplubix).
UNION DISTINCT를 구현하고, 기본적으로 별도 수식어가 없는 UNION 절을 UNION DISTINCT로 처리합니다. 이를 UNION ALL로 처리하거나 모드의 명시적 지정을 요구하도록 할 수 있는 설정 union_default_mode를 추가합니다. #16338 (flynn).
accurateCastOrNull FUNCTION을 추가하여 #10290를 해결했습니다. x IN (subquery) 표현식에 형 변환을 추가하여 #10266를 해결했습니다. #16724 (Maksim Kita).
IP 딕셔너리에서 IPv4 / IPv6 타입을 직접 지원합니다. #17571 (vdimir).
데이터 가져오기 및 내보내기에서 *.zst 압축/압축 해제 지원을 추가했습니다. 이제 file() 함수에서 *.zst를 사용할 수 있으며, HTTP 클라이언트에서 Content-encoding: zstd를 사용할 수 있습니다. #16791 를 해결합니다. #17144 (Abi Palagashvili).
집계 함수 mannWitneyUTest, studentTTest, welchTTest를 추가했습니다. rankCorr를 약간 리팩터링했습니다. #16883 (Nikita Mikhaylov).
countMatches/countMatchesCaseInsensitive 함수를 추가했습니다. #17459 (Azat Khuzhin).
countSubstrings()/countSubstringsCaseInsensitive()/countSubstringsCaseInsensitiveUTF8()을 구현합니다(부분 문자열이 등장하는 횟수를 세는 함수들). #17347 (Azat Khuzhin).
system.query_log에 사용된 데이터베이스, 테이블 및 컬럼에 대한 정보를 추가합니다. 또한 query_kind 및 normalized_query_hash 필드를 추가합니다. #17726 (Amos Bird).
optimize_on_insert 설정을 추가합니다. 이 설정을 활성화하면 INSERT된 데이터 블록에 대해, 해당 블록에 병합이 수행된 것과 동일한 변환을 수행합니다(예: Replacing, Collapsing, Aggregating...). 이 설정은 기본적으로 활성화되어 있습니다. 이는 materialized view 및 MaterializeMySQL의 동작에 영향을 줄 수 있습니다(자세한 설명 참조). #10683을(를) 해결합니다. #16954 (Kruglov Pavel).
system.settings의 파라미터를 표시하는 SHOW SETTINGS 문을 지원합니다. SHOW CHANGED SETTINGS와 LIKE/ILIKE 절도 지원합니다. #18056 (Jianmei Zhang).
함수 position은 이제 SQL 호환성을 위해 POSITION(needle IN haystack) 구문을 지원합니다. 이 변경으로 #18701가 해결되었습니다. ... #18779 (Jianmei Zhang).
이제 MergeTree 계열의 테이블에 max_partitions_to_read라는 새로운 저장소 설정이 추가되었습니다. 이 설정은 하나의 쿼리에서 접근할 수 있는 최대 파티션 개수를 제한합니다. 이 제약을 강제하기 위한 사용자 설정 force_max_partition_limit도 추가되었습니다. #18712 (Amos Bird).
ATTACH TABLE name FROM 'path/to/data/' (col1 Type1, ... 쿼리를 구현했습니다. 이 쿼리는 지정된 구조로 새 테이블을 생성하고, user_files 내에 지정된 디렉터리에서 테이블 데이터를 첨부합니다. #17903 (tavplubix).
StorageMemory에 mutation 지원을 추가했습니다. 이로써 #9117 이슈가 해결되었습니다. #15127 (flynn).
내장 FUNCTION isIPv4String 및 isIPv6String을 MySQL과 유사하게 지원하도록 했습니다. #18349 (Du Chuan).
분산 키 없이도 여러 세그먼트로 분할된 분산 테이블에 데이터를 삽입할 수 있도록 새로운 설정 insert_distributed_one_random_shard = 1를 추가했습니다. #18294 (Amos Bird).
min_compress_block_size 및 max_compress_block_size 설정을 MergeTreeSettings에 추가했습니다. 이 설정들은 전역 설정보다 우선순위가 높으며, 값이 지정되면 해당 설정들이 적용됩니다. 13890 이슈를 종료했습니다. #17867 (flynn).
중복을 검사할 컬럼 목록을 명시적으로 지정하거나(또는 별표/컬럼 변환기를 사용해 암시적으로 지정할 수 있도록) OPTIMIZE ... DEDUPLICATE 구문을 확장했습니다. ... #17846 (Vasily Nemkov).
toModifiedJulianDay, fromModifiedJulianDay, toModifiedJulianDayOrNull, fromModifiedJulianDayOrNull FUNCTION을 추가했습니다. 이 FUNCTION들은 프로렙틱 그레고리력(Proleptic Gregorian calendar) 날짜와 Modified Julian Day 번호 간의 변환을 수행합니다. #17750 (PHO).
사용자 정의 TLD 목록을 사용할 수 있도록 firstSignificantSubdomainCustom, cutToFirstSignificantSubdomainCustom 함수를 추가했습니다. #17748 (Azat Khuzhin).
네이티브 TCP 인터페이스를 래핑하기 위한 PROXYv1 프로토콜 지원을 추가했습니다. 프록시에서 전달된 IP 주소(PROXYv1 주소와 HTTP 인터페이스의 X-Forwarded-For 모두에 적용)를 기준으로 QUOTA를 구분해 적용할 수 있습니다. 이는 신뢰할 수 있는 프록시(예: CloudFlare)를 통해서만 ClickHouse에 접근하도록 허용하면서도, 사용자별 리소스 사용량을 원래 IP 주소 기준으로 집계하고자 할 때 유용합니다. #17268를 수정했습니다. #17707 (alexey-milovidov).
이제 clickhouse-client에서 명령을 편집하기 위해 EDITOR를 열 수 있습니다. Alt-Shift-E. #17665 (Amos Bird).
XML 텍스트 노드나 속성에 문자열을 넣을 때 문자를 이스케이프하기 위한 encodeXMLComponent FUNCTION을 추가했습니다. #17659 (nauta).
DETACH TABLE/VIEW ... PERMANENTLY 구문을 도입하여, 재시작 후에는 명시적으로 다시 요청하지 않는 한 테이블이 자동으로 다시 나타나지 않도록 합니다. 테이블은 여전히 간단한 구문인 ATTACH TABLE을 사용하여 다시 붙일 수 있습니다. #5555를 구현합니다. #13850를 수정합니다. #17642 (filimonov).
MergeTree 테이블에서 총 행 수, 바이트 수 및 파트 수에 대한 비동기 메트릭을 추가합니다. 이 수정으로 #11714가 해결됩니다. #17639 (flynn).
SQL 외부 페이지네이션을 위해 limit 및 offset 설정을 추가합니다: #16176 API를 구현할 때 유용합니다. 이 두 설정은 select * from (your_original_select_query) t limit xxx offset xxx;가 추가된 것처럼 SELECT 쿼리에 적용됩니다. #17633 (hexiaoting).
쿼리를 통해 SimpleAggregateFunction 타입을 생성할 수 있도록 새로운 aggregator combinator인 -SimpleState를 추가합니다. 이는 AggregatingMergeTree 엔진의 구체화된 뷰(Materialized View)를 정의하는 데 유용하며, 프로젝션에도 유익합니다. #16853 (Amos Bird).
텍스트 n-그램과 shingles의 minHash 및 simHash를 계산하는 함수가 추가되었습니다. 준중복(semi-duplicate) 검색에 사용됩니다. 또한 bitHammingDistance 및 tupleHammingDistance 함수가 추가되었습니다. #7649 (flynn).
새로운 데이터 타입 Map(맵)이 추가되었습니다. #1841를 참고하십시오. Map의 첫 번째 버전은 키와 값에 대해 String 타입만 지원합니다. #15806 (hexiaoting).
ANTLR4 런타임을 기반으로 하고 EBNF 문법에서 생성된 대안 SQL 파서를 구현했습니다. #11298 (Ivan).
LDAP 통합: LDAP 서버 연결 구성에 verification_cooldown 매개변수를 추가하여 설정 가능한 기간 동안 성공한 "bind" 시도를 캐시할 수 있도록 했습니다. #15988 (Denis Glazachev).
clickhouse-local이 시스템 테이블 없이 실행되도록 --no-system-table 옵션을 추가했습니다. 이를 통해 시작 시 수십 밀리초 정도의 시간이 추가로 소요될 수 있는 DateLUT 초기화를 피할 수 있습니다. #18899 (alexey-milovidov).
AggregateFunctionWindowFunnelData에서 PODArray를 PODArrayWithStackMemory로 교체하여 windowFunnel FUNCTION의 성능을 향상했습니다. #18817 (flynn).
동기식 INSERT를 수행할 때 분산 테이블(Distributed table)의 세그먼트로 빈 블록이 전송되지 않도록 했습니다. 이로써 #14571 이슈를 해결했습니다. #18775 (alexey-milovidov).
TinyLog 또는 Log 테이블 엔진을 사용하는 테이블에서 자기 자신으로 INSERT SELECT를 실행할 때 교착 상태가 발생하지 않도록 개선했습니다. #6802 이슈를 해결합니다. #18691 이슈를 해결합니다. #16812 이슈를 해결합니다. #14570 이슈를 해결합니다. #15260 (alexey-milovidov).
Decimal * Float 형태의 모든 쿼리와 그 반대(Float * Decimal) 형태의 쿼리가 집계 쿼리(예: SELECT sum(decimal_field * 1.1) 또는 SELECT dec_col * float_col)를 포함하여 모두 허용되며, 결과 타입은 Float32 또는 Float64입니다. #18145 (Mike).
간단한 Web UI를 개선했습니다: 요청 히스토리를 추가하고, 공유 기능을 추가하고, 서로 다른 요청 간의 경쟁 상태(race condition)를 방지하고, 요청 진행 중 및 완료 상태 인디케이터를 추가하고, 파비콘을 추가하고, textarea에 포커스가 없을 때도 Ctrl+Enter를 감지합니다. #17293#17770 (alexey-milovidov).
clickhouse-server가 ZooKeeper 서버로 close 요청을 전송하지 않았습니다. #16837 (alesapin).
메모리 제한(max_memory_usage = 1 / max_untracked_memory = 1)이 지나치게 낮게 설정된 경우 서버가 비정상적으로 종료되지 않도록 했습니다. #17453 (Azat Khuzhin).
동일한 타임스탬프를 가진 서로 다른 이벤트가 있을 때 windowFunnel FUNCTION이 비결정적인 결과를 반환하는 문제를 수정합니다. #18884 (Fuwang Hu).
Docker: clickhouse 사용자 및 그룹의 uid/gid를 clickhouse-server Docker 이미지에서 고정값(101)으로 명시적으로 설정하도록 했습니다. #19096 (filimonov).
Distributed 테이블에 대한 비동기 INSERT: MergeTree 계열과 유사한 두 가지 새로운 설정이 추가되었습니다. fsync_after_insert - 각 INSERT마다 fsync를 수행합니다. INSERT 성능이 저하됩니다. fsync_directories - 모든 작업(쓰기, 이름 변경 등) 이후에 임시 디렉터리(비동기 INSERT에만 사용됨)에 대해 fsync를 수행합니다. #18864 (Azat Khuzhin).
FETCH PARTITION 실행 시 zk 경로의 매크로를 확장합니다. #18839 (fastio).
ALTER TABLE <replicated_table> ON CLUSTER MODIFY SETTING ...을 모든 레플리카에 적용하십시오. 이러한 종류의 ALTER 명령은 복제되지 않기 때문입니다. #18789 (Amos Bird).
컬럼 변환기 EXCEPT가 정규 표현식 매처로 문자열을 사용할 수 있도록 했습니다. 이로써 #18685 문제가 해결되었습니다. #18699 (Amos Bird).
SummingMergeTree에서 SimpleAggregateFunction의 동작을 수정했습니다. 이제 AggregateFunction과 동일하게 동작합니다. 이전 버전에서는 집계 함수와 관계없이 값이 모두 합산되었습니다. 이 변경으로 다음 이슈가 해결되었습니다: #18564, #8052, #18637 (Amos Bird). SummingMergeTree에서 SimpleAggregateFunction을 사용하는 또 다른 문제도 수정했습니다. 이 변경으로 다음 이슈가 해결되었습니다: #18676, #18677 (Amos Bird).
bar 함수의 마지막 인자가 NaN인 경우 allocator 내부에서 발생하던 assertion 오류를 수정했습니다. 이제는 일반적인 ClickHouse 예외가 발생합니다. 이로써 #17876이(가) 수정되었습니다. #18520 (Nikita Mikhaylov).
기본 키와 파티션 키 컬럼의 타입을 LowCardinality(Type)에서 Type으로, 또는 그 반대로 변경할 수 있는 기능을 추가했습니다. 또한 기본 키 컬럼 타입을 EnumX 타입에서 IntX 타입으로 변경할 수 있는 기능을 추가했습니다. #5604 문제를 해결했습니다. #18362 (alesapin).
중첩된 CSV로 직렬화된 배열을 포함하는 문자열로 표현된 경우에도 CSV에서 Array 필드를 파싱할 수 있도록 허용합니다. 예: "[""Hello"", ""world"", ""42"""" TV""]" 는 ['Hello', 'world', '42" TV'] 로 파싱됩니다. 또한 괄호로 둘러싸지 않은 문자열 형태의 배열도 CSV에서 파싱할 수 있도록 허용합니다. 예: "'Hello', 'world', '42"" TV'" 는 ['Hello', 'world', '42" TV'] 로 파싱됩니다. #18271 (alexey-milovidov).
MergeTree wide 파트에 대한 adaptive granularity 계산 방식을 개선했습니다. #18223 (alesapin).
이제 Mac에서도 clickhouse install이 작동합니다. 이 플랫폼에는 procfs가 없기 때문이었습니다. #18201 (Nikita Mikhaylov).
액세스 제어: 이제 테이블 함수 merge()를 사용하려면 데이터 원본이 되는 각 테이블에 대해 현재 사용자에게 SELECT 권한이 있어야 합니다. 이 PR은 #16964를 해결합니다. #18104#17983 (Vitaly Baranov).
임시 테이블은 이제 생성된 세션에서만 시스템 테이블 system.tables 및 system.columns에 표시됩니다. 내부 데이터베이스 _temporary_and_external_tables는 이제 해당 시스템 테이블에서 숨겨지며, 임시 테이블은 is_temporary 플래그가 설정된, 데이터베이스 이름이 비어 있는 테이블로 표시됩니다. #18014 (Vitaly Baranov).
터미널 창 크기가 변경될 때 발생하던 clickhouse-client 렌더링 문제를 수정했습니다. #18009 (Amos Bird).
클라이언트가 연결을 끊을 때 발생하는 이벤트 로그의 상세 수준을 Warning에서 Information으로 낮췄습니다. #18005 (filimonov).
DiskS3 디스크의 파일 시스템에서 비어 있거나 잘못된 메타데이터 파일을 강제로 제거합니다. S3는 아직 실험적 기능입니다. #17935 (Pavel Kovalenko).
액세스 제어: allow_introspection_functions=0은 introspection 함수 사용을 허용하지 않지만, 더 이상 해당 함수들에 대한 grant 부여 자체를 막지는 않습니다(권한을 부여받은 사용자가 해당 grant를 사용하려면 allow_introspection_functions=1을 직접 설정해야 합니다). 마찬가지로 allow_ddl=0은 DDL 명령 사용을 허용하지 않지만, 더 이상 해당 명령들에 대한 grant 부여 자체를 막지는 않습니다. #17908 (Vitaly Baranov).
서버 메트릭을 통해 DDLWorker가 실행한 DDL 엔트리의 현재 최대값을 내보냅니다. 이는 DDLWorker가 어딘가에서 멈춰 있는지 확인하는 데 유용합니다. #17464 (Amos Bird).
모든 서버에서 실행 중인 현재 스레드의 비동기 메트릭을 내보냅니다. 이와 같은 문제를 추적하는 데 유용합니다. #17463 (Amos Bird).
와일드카드 쿼리에서 asterisk_include_materialized_columns 및 asterisk_include_alias_columns 설정이 활성화되어 있을 때 MATERIALIZED / ALIAS와 같은 동적 컬럼도 포함되도록 했습니다. #17462 (Ken Chen).
이제 MySQL 및 PostgreSQL 프로토콜을 통해 서버로 들어오는 쿼리는 구분되는 인터페이스 유형을 갖습니다 (system.query_log 테이블의 interface 컬럼에서 확인할 수 있음). MySQL은 4, PostgreSQL은 5를 사용하며, 이전에 사용되던 1은 이제 네이티브 프로토콜에만 사용됩니다. #17437 (Vitaly Baranov).
상수 인자를 가진 이항 함수의 인덱스 분석 로직을 수정하여 잘못된 쿼리 결과가 반환되던 문제를 해결했습니다. 이 수정은 #18364를 해결합니다. #18373 (Amos Bird).
인덱스 비교에 사용되는 타입이 서로 다를 때 인덱스 분석이 잘못될 수 있는 문제를 수정합니다. 이 변경은 #17122를 수정합니다. #17145 (Amos Bird).
머지 시 AIO를 사용한 쓰기를 비활성화했습니다. 이는 머지 과정에서 기본 키 컬럼 데이터가 극히 드물게 손상될 수 있기 때문입니다. #18481 (alesapin).
wide 파트에서 compact 파트로의 병합을 제한합니다. 수직 병합의 경우 결과 파트가 손상되는 문제가 발생했습니다. #18381 (Anton Popov).
MergeTree*에서 읽기 백오프(read backoff)가 발생했을 때(로그의 메시지 <Debug> MergeTreeReadPool: Will lower number of threads 참조) 쿼리 결과가 불완전해질 수 있는 문제를 수정합니다. 이 문제는 #16423에서 도입되었습니다. #18137를 수정합니다. #18216 (Nikolai Kochetov).
Join이 const 컬럼을 구체화(materialize)하려 하지만, 현재 코드는 해당 컬럼이 다른 위치에 있기를 기대합니다. #18982 (Nikita Mikhaylov).
optimize_move_functions_out_of_any 최적화를 비활성화했습니다. 이 최적화가 항상 올바르게 동작하는 것은 아니기 때문입니다. 이 변경으로 #18051를 해결했습니다. 또한 #18973를 해결했습니다. #18981 (alexey-milovidov).
쿼리 플랜의 Expression 단계 병합 과정에서 발생할 수 있는 QueryPipeline stream: different number of columns 예외를 수정합니다. 관련 이슈: #18190. #18980 (Nikolai Kochetov).
외부 데이터베이스(MySQL, ODBC, JDBC)에 대한 쿼리에서 x IN table 형태의 표현이 있을 경우, 쿼리가 잘못 재작성되었습니다. 이번 수정으로 #9756이 해결되었습니다. #18876 (alexey-milovidov).
단항 함수와 널 허용(Nullable) 타입에서 *If 조합자가 제대로 동작하지 않던 문제를 수정했습니다. #18806 (Azat Khuzhin).
전역 설정 network_compression_method가 기본값이 아닌 값으로 전역적으로 설정된 경우 비동기 분산 INSERT가 서버에 의해 거부될 수 있는 문제를 수정합니다. 이 수정으로 #18741가 해결되었습니다. #18776 (alexey-milovidov).
Nullable(String)에서 Nullable(Decimal(P, S))로 CAST하려고 할 때 발생하던 Attempt to read after eof 오류를 수정했습니다. 이제 함수 CAST는 널 허용 문자열 값에서 10진수(Decimal)를 파싱할 수 없을 때 NULL을 반환합니다. #7690을(를) 수정했습니다. #18718 (Winter Zhang).
Nullable(String) 타입의 인자를 사용해 toType(...) 함수들(toDate, toUInt32 등)을 실행할 때 발생하던 value is too short 오류를 수정했습니다. 이제 이러한 함수들은 파싱 오류가 발생하면 예외를 던지는 대신 NULL을 반환합니다. #7673 문제를 해결했습니다. #18445 (tavplubix).
2단계 집계를 사용할 때 Distinct 조합자가 있는 집계 함수에서 발생할 수 있는 충돌을 수정합니다. #17682 문제를 해결합니다. #18365 (Anton Popov).
듀얼 IPv4/IPv6 스택을 사용하는 머신에서 서버가 clickhouse-odbc-bridge 프로세스에 연결할 수 없던 문제를 수정했습니다. 잘못된 쿼리로 ODBC 딕셔너리 업데이트를 수행하거나, 그 과정에서 odbc-bridge 프로세스가 크래시 나던 문제도 수정했습니다. #14489를 해결했을 가능성이 있습니다. #18278 (Denis Glazachev).
액세스 제어: 이제 SELECT count() FROM table는 사용자에게 테이블의 컬럼 하나 이상에 대한 액세스 권한만 있어도 실행할 수 있습니다. 이 PR은 #10639를 수정합니다. #18233 (Vitaly Baranov).
액세스 제어: 이제 SELECT JOIN을 사용할 때 조인된 각 테이블에 대해 SELECT 권한이 필요합니다. 이 PR은 #17654를 해결합니다. #18232 (Vitaly Baranov).
Windows: Windows Subsystem for Linux에서 ClickHouse가 실행되는 환경에서 Atomic 데이터베이스에서 RENAME 쿼리를 실행할 때 발생하던 Function not implemented 오류를 수정했습니다. #17661을(를) 해결합니다. #17664 (tavplubix).
pool_size > 1인 경우 경쟁 조건(race condition) 때문에 ON CLUSTER 쿼리를 실행할 때 클러스터가 순환(크로스) 레플리카 구성인지 아닌지가 잘못 판단될 수 있었습니다. 이 문제가 수정되었습니다. #17640 (tavplubix).
서버가 데몬 모드로 실행 중일 때 system.stack_trace 테이블이 비어 있는 문제를 수정합니다. #17630 (Amos Bird).
fmt::v7::format_error 예외가 MergeTree 테이블에 대해 백그라운드에서 로그에 기록될 수 있습니다. 이 수정으로 #17613 이슈가 해결됩니다. #17615 (alexey-milovidov).
clickhouse-client를 대화형 모드에서 여러 줄 쿼리와 함께 사용할 때, 한 줄 주석이 잘못 처리되어 쿼리의 끝까지 확장되는 문제가 있었습니다. 이 변경으로 #13654가 수정되었습니다. #17565 (alexey-milovidov).
서로 다른 레플리카에서 해당 mutation이 강제 종료되었을 때 ALTER 쿼리가 멈추는 문제를 수정했습니다. #16953를 수정합니다. #17499 (alesapin).
ClickHouse가 마크 캐시 크기를 과소 추정하여 메모리 사용량 계산이 잘못되던 문제를 수정했습니다. 이는 마크가 포함된 매우 작은 파일이 많을 때 발생할 수 있습니다. #17496 (alesapin).
optimize_redundant_functions_in_order_by 설정이 활성화된 상태에서 ORDER BY가 잘못 동작하던 문제를 수정했습니다. #17471 (Anton Popov).
optimize_trivial_count_query 설정이 활성화된 상태에서 파티션 조건을 사용할 때의 동작을 수정합니다. #16767 (Azat Khuzhin).
MySQL wire protocol을 통해 실행된 INSERT 쿼리에 대해 영향을 받은 행 수를 반환하도록 했습니다. 이전에는 ClickHouse가 항상 0을 반환했으나, 이제 이 문제가 수정되었습니다. #16605에서 보고된 문제를 해결합니다. #16715 (Winter Zhang).
select_sequential_consistency로 인해 최적화된 단순 count 쿼리와 system 테이블에서 발생하던 일관성 없는 동작을 수정합니다. #16309 (Hao Chen).
존재하지 않는 컬럼에 REPLACE 컬럼 변환기를 적용할 경우 오류가 발생하도록 변경했습니다. #16183 (hexiaoting).
RIGHT/FULL JOIN에서 동등 조인이 아닌 ON 표현식이 사용되면 예외를 던집니다. #15162 (Artem Zuikov).
이제 ClickHouse는 가짜 ZooKeeper 역할을 할 수 있습니다. 현재 저장소 구현은 단순히 메모리 내 해시 테이블이며, 서버는 ZooKeeper 프로토콜을 부분적으로만 지원합니다. #16877 (alesapin).
TestKeeperStorage(ZooKeeper용 mock)에서 사용되지 않는 watch 목록 삭제 문제를 수정했습니다. #18065 (alesapin).
장애 주입을 위해 SYSTEM SUSPEND 명령을 추가했습니다. 장애 조치(failover) 테스트를 쉽게 수행하는 데 사용할 수 있습니다. #15979를 해결합니다. #18850 (alexey-milovidov).
ClickHouse를 lld로 링크할 때 빌드 ID를 생성하도록 했습니다. 일부 환경에서 lld가 기본적으로 빌드 ID를 생성하지 않는 것으로 나타났습니다. 빌드 ID는 크래시 리포트와 내부 분석(introspection)에 사용됩니다. #18808 (alexey-milovidov).
Sentry가 활성화된 경우 공식 빌드, 메모리, CPU 및 여유 디스크 공간 정보를 Sentry로 전송합니다. Sentry는 ClickHouse 개발자를 돕기 위한 옵트인(opt-in) 기능입니다. #17279를 해결합니다. #17543 (alexey-milovidov).