하위 호환되지 않는 변경 사항
- 기존에 원치 않는 동작이 있던 기능에 대한 수정입니다. Kafka/RabbitMQ/FileLog에 대한 direct select는 기본적으로 허용되지 않습니다.
stream_like_engine_allow_direct_select를 설정하면 활성화할 수 있습니다. attached 상태인 materialized view가 있는 경우에는 이 설정을 활성화해도 direct select가 허용되지 않습니다. Kafka와 RabbitMQ에서는 direct select가 허용되더라도 기본적으로 메시지를 커밋하지 않습니다. direct select에서 커밋을 활성화하려면 스토리지 수준 설정kafka{rabbitmq}_commit_on_select=1(기본값0)을 사용해야 합니다. #31053 (Kseniia Sumarokova). - 새 함수의 동작이 약간 변경되었습니다. JSON_VALUE가 따옴표 없는 문자열을 반환하도록 변경되었습니다. #27965를 해결합니다. #31008 (Kseniia Sumarokova).
- 설정 이름 변경입니다. 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에서 “리더 선출” 메커니즘이 제거되었습니다. 이전 버전에서 업그레이드하는 중이며 구버전 레플리카 중 하나가 리더인 경우, 업그레이드 후 서버가 시작되지 않습니다. 새 버전이 시작될 수 있도록 구버전 레플리카를 중지하십시오. 이후에는 20.6보다 오래된 버전으로 다운그레이드할 수 없습니다. #32140 (tavplubix).
새로운 기능
- clickhouse-keeper에 ZooKeeper Four Letter Words 명령을 추가로 구현했습니다: https://zookeeper.apache.org/doc/r3.4.8/zookeeperAdmin.html#sc_zkCommands. #28981 (JackyWoo). 이제
clickhouse-keeper는 필요한 기능이 모두 갖춰졌습니다. Bool데이터 타입을 지원합니다. #31072 (kevin wan).- File, URL, HDFS 스토리지 및
INSERT INTO테이블 함수에서PARTITION BY를 지원합니다. #30273를 해결했습니다. #30690 (Kseniia Sumarokova). CONSTRAINT ... ASSUME ...가 추가되었습니다(INSERT중에는 검사를 수행하지 않음). 최적화를 더 쉽게 할 수 있도록 쿼리를 CNF로 변환하는 기능이 추가되었습니다(https://github.com/ClickHouse/ClickHouse/issues/11749). 제약 조건을 활용한 간단한 쿼리 재작성 기능이 추가되었습니다(현재는 단순 매칭만 지원하며, 추후 <,=,>… 도 지원하도록 개선될 예정입니다). 가능한 경우 무거운 컬럼을 가벼운 컬럼으로 대체하는 기능이 추가되었습니다. #18787 (Nikita Vasilev).- http/url 함수에 대한 Basic 인증. #31648 (michael1589).
WITH FILL수정자의STEP절에서INTERVAL타입을 지원합니다. #30927 (Anton Popov).- 여러 파일에서의 병렬 읽기와
FROM INFILE절의 글롭 패턴을 지원합니다. #30135 (Filatenkov Artur). Identifier테이블(table) 및 데이터베이스(database) 쿼리 매개변수 지원이 추가되었습니다. #27226을 해결했습니다. #28668 (Nikolay Degterinsky).- TLDR: 텍스트 형식의 완전성과 일관성이 크게 개선되었습니다.
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설정을 추가했습니다.input_format_csv_empty_as_default설정을 추가하고, CSV 형식에서는input_format_defaults_for_omitted_fields대신 이 설정을 사용하도록 했습니다(csv_empty_as_default는 이 설정으로 제어하면 안 되기 때문입니다).input_format_defaults_for_omitted_fields설정의 사용 방식도 수정했습니다(이전에는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설정이 단일 행의 바이트 수보다 작은 경우-WithNames포맷의 병렬 파싱에서 발생하던 버그를 수정했습니다. #30178 (Kruglov Pavel).CustomSeparated입력/출력 형식에서 컬럼 이름과 타입을 출력하고 파싱할 수 있도록 했습니다.TSVWithNames/WithNamesAndTypes와 유사한CustomSeparatedWithNames/WithNamesAndTypes포맷을 추가했습니다. #31434 (Kruglov Pavel). - Aliyun OSS Storage를 지원합니다. #31286 (cfcz48).
- 설정 파일에서 Global Thread 풀의 모든 설정을 사용할 수 있도록 했습니다. #31285 (Tomáš Hromada).
- 더 큰 윈도우에서
exponentialMovingAverage보다 더 효과적인 윈도우 함수exponentialTimeDecayedSum,exponentialTimeDecayedMax,exponentialTimeDecayedCount,exponentialTimeDecayedAvg가 도입되었습니다. 또한 더 다양한 사용 사례를 지원하게 되었습니다. #29799 (Vladimir Chebotarev). - LZ4를 사용해 파일에 기록하기 전에 로그를 압축하는 옵션을 추가했습니다. #23860을 해결했습니다. #29219 (Nikolay Degterinsky).
- CROSS JOIN 의미를 갖는
JOIN ON 1 = 1을 지원합니다. 이로써 #25578가 해결되었습니다. #25894 (Vladimir C). Map타입에 Map combinator를 추가했습니다. - 매핑된 배열용 기존sum-, min-, max- Map의 이름을sum-, min-, max- MappedArrays로 변경했습니다. #24539 (Ildus Kurbangaliev).- HTTP에서 읽기를 재시도할 수 있게 합니다. #29696을 해결합니다. #29894 (Kseniia Sumarokova).
실험적 기능
- ClickHouse에서 스트림 처리를 지원하는
WINDOW VIEW. #8331 (vxider). MaterializedMySQL와 함께 Ordinary 데이터베이스를 사용하는 지원을 제거했습니다. #31292 (Stig Bakken).- Log 계열에 BACKUP 및 RESTORE 명령을 구현했습니다. 이 기능은 개발 중입니다. #30688 (Vitaly Baranov).
성능 개선
s3/url/hdfs포맷Parquet,ORC,Arrow를 읽을 때 메모리 사용량을 줄였습니다(설정input_format_allow_seeks로 제어되며 기본적으로 활성화되어 있음). 또한 seek를 제어하는 설정remote_read_min_bytes_for_seek를 추가했습니다. #10461 해결. #16857 해결. #30936 (Kseniia Sumarokova).- JOIN ON의 상수 조건에 대한 최적화를 추가했습니다. 관련 이슈: #26928. #27021 (Vladimir C).
JSONEachRowWithProgress및PrettyCompactMonoBlock을 제외한 모든 텍스트 형식에 대해 병렬 formatting을 지원합니다. #31489 (Kruglov Pavel).- 널 허용 컬럼에 대한 count 성능을 개선했습니다. #31806 (Raúl Marín).
avg및sumCount집계 함수의 성능을 개선했습니다. #31694 (Raúl Marín).- JSON 및 XML 출력 형식의 성능을 개선했습니다. #31673 (alexey-milovidov).
- 데이터를 블록 디바이스에 동기화하는 성능을 개선했습니다. 이 변경으로 #31181가 해결되었습니다. #31229 (zhanglistar).
LiveView테이블의 쿼리 성능 문제를 수정했습니다. #30831 해결. #31006 (vzakaznikov).- 쿼리 parsing 성능을 개선했습니다. #31949 (Raúl Marín).
- 일반 메트릭/태그된 메트릭에 대해
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). StorageMergeTree에서 서로 다른 파티션의 뮤테이션을 스키핑합니다. #21326 (Vladimir Chebotarev).
개선 사항
- 이를 참조하는 테이블 또는 딕셔너리가 있으면 해당 테이블 또는 딕셔너리를 삭제할 수 없도록 합니다. #30977 (tavplubix).
- 집계 함수 상태의 버전 관리를 허용합니다. 이제 집계 함수 상태의 직렬화 포맷에 하위 호환되는 변경 사항을 도입할 수 있습니다. #12552를 해결했습니다. #24820 (Kseniia Sumarokova).
- PostgreSQL 스타일의
ALTER MODIFY COLUMN구문을 지원합니다. #32003 (SuperDJY). RangeHashedDictionary,ComplexKeyRangeHashedDictionary에update_field지원이 추가되었습니다. #32185 (Maksim Kita).- 이제
murmurHash3_128및sipHash128함수는 인수를 임의 개수만큼 받을 수 있습니다. 이로써 #28774가 해결되었습니다. #28965 (小路). HDFS스토리지에 대한 기본 표현식 지원을 추가하고, 소스가 컬럼 지향형일 때 가져오기 작업을 최적화했습니다. #32256 (李扬).- OpenTelemetry 스팬의 작업 이름을 개선했습니다. #32234 (Frank Chen).
- 출력 형식
JSONEachRow에는Content-Type: application/x-ndjson(http://ndjson.org/)을 사용하도록 했습니다. #32223 (Dmitriy Dorofeev). - Template/CustomSeparated 포맷에서 따옴표 이스케이프 규칙이 적용된 알 수 없는 field의 스키핑이 개선되었습니다. 이전에는 따옴표로 묶인 문자열만 건너뛸 수 있었지만, 이제는 모든 유형의 값을 건너뛸 수 있습니다. #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).Float32/Float64값 앞에 오는+를 파싱할 수 있도록 했습니다. #32079 (Kruglov Pavel).DiskHDFS및StorageHDFS에서 사용자 지정hdfs_replication매개변수를 허용합니다. #32039를 해결합니다. #32049 (leosunli).- OpenTelemetry 스팬 로그에 ClickHouse
exception및exception_code필드를 추가했습니다. #32040 (Frank Chen). - OpenTelemetry 스팬 로그 지속 시간 개선 - 쿼리 예외가 발생할 경우 쿼리 수준에서 값이 0으로 기록되던 문제를 개선했습니다. #32038 (Frank Chen).
Int256에 대해LowCardinality를 생성할 수 없던 문제를 수정했습니다. #31832 (alexey-milovidov).- 엔진/partition_by가 다를 경우
system.*_log테이블을 다시 생성합니다. #31824 (Azat Khuzhin). MaterializedMySQL: 이름이 ‘table’인 테이블에서 발생하던 문제를 수정했습니다. #31781 (Håvard Kvålen).- ClickHouse 딕셔너리 소스: 사전 정의된 연결을 지원합니다. #31705를 해결합니다. #31749 (Kseniia Sumarokova).
- Kafka 및 RabbitMQ 엔진에서 미리 정의된 연결 구성을 사용할 수 있도록 했습니다(다른 통합 테이블 엔진과 동일한 방식). #31691 (Kseniia Sumarokova).
- clickhouse-client에서 이력을 탐색하는 동안 프롬프트를 항상 다시 표시합니다. 이렇게 하면 화면에 다 표시되지 않는 매우 긴 쿼리를 다룰 때의 사용성이 개선됩니다. #31675 (alexey-milovidov) (작성자: Amos Bird).
- 이력 탐색을 위한 키 바인딩을 추가했습니다(줄/이력 대신). #31641 (Azat Khuzhin).
max_execution_time검사를 개선했습니다. timeout 검사가 누락되어 쿼리가 지나치게 오래 실행될 수 있던 일부 경우를 수정했습니다. #31636 (Raúl Marín).- 잘못된 비밀번호 hash 때문에
users.xml을 로드할 수 없을 때 표시되는 예외 메시지가 개선되었습니다. 이 변경으로 #24126이 해결되었습니다. #31557 (Vitaly Baranov). - config에 이러한 매크로가 정의되어 있지 않으면,
ReplicatedMergeTree인수에서 매크로를 확장할 때Replicated데이터베이스 인수의 세그먼트 및 레플리카 이름을 사용합니다. #31471을 닫습니다. #31488 (tavplubix). min/max/count프로젝션 분석이 개선되었습니다. 이제allow_experimental_projection_optimization이 활성화되면 가상min/max/count프로젝션을 파티션 키 컬럼과 함께 사용할 수 있습니다. #31474 (Amos Bird).clickhouse-local에서--pager를 지원하도록 했습니다. #31457 (Azat Khuzhin).- 대화형 쿼리 편집 중 에디터를 기다리는 동작을 수정했습니다(
waitpid()는SIGWINCH에서 -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을 system 테이블에서 실행할 때 가상의 CREATE 쿼리를 반환합니다. #31391 (SuperDJY).- 이전에는
numbers테이블 함수에서만 진행률이 표시되었지만, 이제는numbers_mt에서도 표시됩니다. #31318 (Kseniia Sumarokova). - 이제 초기 사용자의 역할을 기준으로 행 정책을 찾습니다. #31080을 참조하십시오. #31262 (Vitaly Baranov).
- 더 이상 사용되지 않는 설정이 변경되면
system.warnings에 경고가 표시됩니다. #31252 (tavplubix). MergeTree의 백그라운드 정리 작업에 대한 백오프가 개선되었습니다.merge_tree_clear_old_temporary_directories_interval_seconds및merge_tree_clear_old_parts_interval_seconds설정이 사용자 설정에서 MergeTree 설정으로 옮겨졌습니다. #31180 (tavplubix).- 이제 모든 레플리카는 profile events 카운터에 대한 증분 정보만 클라이언트에 전송합니다. #31155 (Dmitry Novik). 그 결과
clickhouse-client의--hardware_utilization옵션을 사용할 수 있게 되었습니다. - 기본적으로 clickhouse-client에서 여러 줄 편집을 사용할 수 있도록 했습니다. 이는 #31121를 해결합니다. #31123 (Amos Bird).
ALTER쿼리의 함수 이름을 정규화했습니다. 이를 통해 인덱스/프로젝션이 있는 테이블을 생성할 때와 ALTER 명령으로 인덱스/프로젝션을 추가할 때 발생할 수 있는 메타데이터 불일치를 방지하는 데 도움이 됩니다. 이는 https://github.com/ClickHouse/ClickHouse/pull/20174의 후속 PR입니다. 버그 보고가 없고 이런 시나리오는 비교적 드물기 때문에 개선 사항으로 분류했습니다. #31095 (Amos Bird).RENAME DATABASE/TABLE/DICTIONARY쿼리에서IF EXISTS수정자를 지원합니다. 이 수정자를 사용하면 이름을 변경할 DATABASE/TABLE/DICTIONARY가 존재하지 않아도 오류가 발생하지 않습니다. #31081 (victorgao).- 파티션이 삭제되면 수직 병합을 취소합니다. 이는 https://github.com/ClickHouse/ClickHouse/pull/25684 및 https://github.com/ClickHouse/ClickHouse/pull/30996의 후속 작업입니다. #31057 (Amos Bird).
- ClickHouse 딕셔너리 소스 내부의 로컬 세션은 더 이상 세션 로그로 이벤트를 전송하지 않습니다. 이로써 종료 시 발생할 수 있는 교착 상태(tsan 알림)를 해결했습니다. 또한 이 PR에서는 간헐적으로 실패하던
test_dictionaries_dependency_xml/도 수정했습니다. #31013 (Vitaly Baranov). - ALTER 명령에서 잠금이 줄었습니다. #31010 (Amos Bird).
- clickhouse-local 대화형 모드에서
--verbose옵션을 수정하고 파일에 로깅할 수 있도록 했습니다. #30881 (Kseniia Sumarokova). - MySQL 및 PostgreSQL처럼
clickhouse-client에\l,\d,\c명령을 추가했습니다. #30876 (Pavel Medvedev). - clickhouse-local 또는 clickhouse-client의 경우:
--query또는--queries-file과 함께--interactive옵션이 지정되면, 먼저 비대화형 모드와 같이 이를 실행한 다음 대화형 모드를 시작합니다. #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로 인해 debug 서버에서 발생하는 abort와 release 서버에서 발생하는
DB::Exception: std::out_of_range: basic_string오류를 수정했습니다. #31042 (Kruglov Pavel). hdfs테이블 함수/엔진에서 발생할 수 있는 assert 문제를 수정하고 테스트를 추가했습니다. #31036 (Kruglov Pavel).
버그 수정
- 위치 인수가 활성화된 상태에서 GROUP BY / ORDER BY / LIMIT BY 별칭 관련 문제를 수정했습니다. #31173을 해결했습니다. #31741 (Kseniia Sumarokova).
Map유형에서Buffer테이블 엔진 사용 문제를 수정했습니다. #30546을 해결했습니다. #31742 (Anton Popov).use_uncompressed_cache가 활성화된MergeTree테이블에서 읽는 문제를 수정했습니다. #31826 (Anton Popov).- 아무 작업도 할 것이 없는 뮤테이션이 멈추는 경우의 동작을 수정했습니다(
empty_result_for_aggregation_by_empty_set설정이 활성화된 경우). #32358 (Nikita Mikhaylov). - protobuf 작성 시 스키핑 컬럼 처리 문제를 수정했습니다. 이 PR에서는 #31160을 수정했으며, #31160#issuecomment-980595318의 댓글을 참조하십시오. #31988 (Vitaly Baranov).
- 서브쿼리에서 불필요한 컬럼을 제거할 때 발생하던 버그를 수정했습니다. GROUP BY가 없는 쿼리에 집계 함수가 있는 경우, 해당 함수가 불필요하더라도 제거하지 않도록 했습니다. #32289 (dongyifeng).
- Quota 한도에 도달하지 않았지만, 한도를 초과한 것으로 처리되었습니다. 이 PR은 #31174를 수정합니다. #31337 (sunny).
- 부분 REVOKE 사용 시 SHOW GRANTS가 올바르게 동작하도록 수정했습니다. 이 PR은 #31138을 수정합니다. #31249 (Vitaly Baranov).
- ClickHouse가 cgroup 제한이 있는 컨테이너에서 실행될 때 메모리 사용량이 잘못 추정되던 문제가 있었습니다. #31157 (Pavel Medvedev).
- default 표현식의 데이터 타입이 컬럼의 데이터 타입과 일치하지 않을 때
ALTER ... MATERIALIZE COLUMN ...쿼리를 수정했습니다. #32348 (Anton Popov). Decimal인수가 있는 집계 함수avgWeighted에서 발생하던 SIGFPE 충돌을 수정했습니다. #32053를 해결합니다. #32303 (tavplubix).Dictionary테이블이 같은 이름의 XML-dictionary를 참조하는 경우Cannot attach 1 tables due to cyclic dependencies오류로 서버가 시작되지 않을 수 있던 문제가 수정되었습니다. #31315를 수정했습니다. #32288 (tavplubix).Quoted이스케이프 규칙에서Nullable(Float)의 NaN을 역직렬화할 때 발생하던 파싱 오류를 수정했습니다. #32190 (Kruglov Pavel).- XML 딕셔너리: 테이블 CREATE 쿼리에서 사용되는 식별자는 새 버전으로 업그레이드하는 과정에서
default_database로 수식될 수 있습니다. #31963을 해결했습니다. #32187 (Maksim Kita). - 일부 레플리카에서 설정
replicated_can_become_leader가 비활성화된 경우, 쿼럼(quorum)과 함께 삽입할 때 활성 레플리카 수가 잘못 계산될 수 있었습니다. 이 문제가 수정되었습니다. #32157 (tavplubix). - Dictionaries: 사용자 지정 데이터베이스 쿼리에서
{condition}이 작동하지 않던 문제를 수정했습니다. #32117 (Maksim Kita). cast_keep_nullable를 사용해Nullable에서의CAST를 수정했습니다 (toUInt32OrDefault(toNullable(toUInt32(1)))와 같은 경우 이전에는PARAMETER_OUT_OF_BOUND오류가 발생했습니다). #32080 (Azat Khuzhin).- 일부 드문 경우에 Join Storage의 CREATE TABLE 문제를 수정했습니다. #31680을 해결했습니다. #32066 (SuperDJY).
- part를 분리하는 과정에서 발생하던
Directory ... already exists and is not empty오류를 수정했습니다. #32063 (tavplubix). MaterializedMySQL(실험적 기능): MySQL의DECIMAL데이터가 잘못 해석되던 문제를 수정했습니다. #31990 (Håvard Kvålen).FileLog(실험적 기능) 엔진에서 테이블 생성이 실패했을 때 메타데이터 디렉터리가 불필요하게 생성되던 문제가 수정되었습니다. 수정 #31962. #31967 (flynn).- 일부
GET_PART항목은 파트가 모든 레플리카에서 손실되고 같은 파티션에 다른 파트가 없는 경우 복제 큐에서 멈춰 있을 수 있습니다. 이 문제는 파티션 키가 정수 타입의 컬럼 또는Date[Time]만 포함하는 경우 수정되었습니다. #31485를 수정했습니다. #31887 (tavplubix). UUID유형 인수를 받는empty및notEmpty함수의 문제를 수정했습니다. #31819을 수정했습니다. #31883 (Anton Popov).KeeperTCPHandler를 생성할 때 구성 경로를keeper_server.session_timeout_ms에서keeper_server.coordination_settings.session_timeout_ms로 변경했습니다.operation_timeout도 마찬가지입니다. #31859 (JackyWoo).- 널 허용 기본 키(primary key)를 사용할 때 발생하는 널 허용 유형(Nullable type)의 잘못된 CAST 문제를 수정했습니다. (널 허용 기본 키는 권장되지 않는 기능이므로 사용하지 마십시오). 이 변경으로 #31075가 수정됩니다. #31823 (Amos Bird).
- SQL의 재귀 UDF에서 발생하던 충돌을 수정했습니다. #30856를 해결했습니다. #31820 (Maksim Kita).
- type이
Nullable인 경우, 타입이 지정된dictGet함수를 딕셔너리 속성에 사용할 때 발생하던 충돌을 수정했습니다. #30980을 수정합니다. #31800 (Maksim Kita). - ODBC 쿼리 결과가 비어 있을 때(일부 ODBC 드라이버에서) 발생하는 충돌을 수정했습니다. #31465를 해결합니다. #31766 (Kseniia Sumarokova).
- 쿼리 프로파일러 비활성화 문제 수정(
query_profiler_real_time_period_ns>0/query_profiler_cpu_time_period_ns>0인 경우 쿼리 종료 후에도 쿼리 프로파일러가 계속 활성화된 상태로 남아 있을 수 있었습니다). #31740 (Azat Khuzhin). - 동시에 실행된
ATTACH PARTITION쿼리에서 드물게 발생하던 segfault를 수정했습니다. #31738 (tavplubix). - 출력에서 데이터와 진행 상황이 포함된 줄이 함께 섞일 때 발생하던 JSONEachRowWithProgress 출력 형식의 경쟁 상태(race condition)를 수정했습니다. #31736 (Kruglov Pavel).
ON CLUSTER쿼리 실행 시, 지정한 클러스터 이름이Replicated데이터베이스 이름과 같은 경우 발생하던there are no such cluster here오류를 수정했습니다. #31723 (tavplubix).decrypt함수를 널 허용 컬럼에 적용할 때 일부 경우에 발생하던 예외를 수정했습니다. 이로써 #31662가 해결되었습니다. 이로써 #31426가 해결되었습니다. #31707 (alexey-milovidov).- 문자열에 UTF-8 문자가 포함된 경우 ngrams 함수가 올바르게 동작하지 않던 문제를 수정했습니다. #31706 (yandd).
- 설정
input_format_allow_errors_num및input_format_allow_errors_ratio는IPv4와 같은 도메인 타입을 파싱할 때 작동하지 않았으나, 수정되었습니다. #31686을 수정했습니다. #31697 (tavplubix). MATERIALIZE COLUMN에서 발생하던 null 포인터 예외를 수정했습니다. #31679 (Nikolai Kochetov).RENAME TABLE쿼리가Ordinary데이터베이스에서 DDL 딕셔너리의 이름을 변경하려고 할 때 잘못 동작하던 문제가 수정되었습니다. #31638 (tavplubix).- 의도한 방식대로
sparkbar집계 함수를 구현했습니다. 참고: #26175#issuecomment-960353867, comment. #31624 (小路). - 유효하지 않은 UTF-8 시퀀스가 컬럼 이름에만 포함된 경우 생성되는 잘못된 JSON을 수정했습니다. #31534 (Kevin Michel).
- 이 최적화의 버그가 수정되기 전까지
partial_merge_join_left_table_buffer_bytes를 비활성화합니다. #31009)를 참조하십시오. 중복된 옵션partial_merge_join_optimizations를 제거합니다. #31528 (Vladimir C). - 짧은
INSERT SELECT쿼리의 Progress를 수정했습니다. #31510 (Azat Khuzhin). - GROUP BY 및 위치 인수 관련 잘못된 동작을 수정했습니다. #31280#issuecomment-968696186을 해결합니다. #31420 (Kseniia Sumarokova).
- S3용 STS 자격 증명 제공자의
nullptr문제를 해결했습니다. #31409 (Vladimir Chebotarev). - 잘못된 내용이어서 인덱스 분석에서
notLike함수를 제거했습니다. #31169 (sundyli). - 일부 coordination 로그가 손실되고 최신 로그보다 더 새로운 스냅샷이 있는 경우 시작하지 못할 수 있는 Keeper의 버그를 수정했습니다. #31150 (alesapin).
- 로컬 join에서 오른쪽의 분산 테이블을 재작성합니다. #25809를 해결합니다. #31105 (abel-cheng).
- aliases와 where를 사용하는
Merge테이블을 수정했습니다(이전에는 전혀 작동하지 않았습니다). #28802를 해결합니다. #31044 (Kseniia Sumarokova). - 따옴표로 묶인 식별자를 사용할 때 JSON_VALUE/JSON_QUERY 관련 문제를 수정했습니다. 이제 JSON 경로에 공백을 포함할 수 있습니다. #30971을 해결했습니다. #31003 (Kseniia Sumarokova).
- 행 지향이 아닌 포맷에서
formatRow함수를 사용하면 segfault가 발생했습니다. 이러한 포맷에서는 이 함수를 사용할 수 없도록 했습니다(의미가 없기 때문입니다). #31001 (Kruglov Pavel). - materialized view를 삭제한 후 실행되는 SELECT 쿼리가 정상 동작하지 않던 버그를 수정했습니다. #30691에서 발견되었습니다. #30997 (Kseniia Sumarokova).
- ATTACH PARTITION … FROM 및 MOVE PARTITION …에서는
max_partition_size_to_drop검사를 건너뜁니다 #30995 (Amr Alaa). INTERSECT및EXCEPT연산자의 일부 특수한 경우를 수정했습니다. #30803을 해결했습니다. #30965 (Kseniia Sumarokova).
빌드/테스트/패키징 개선
- non-x86 빌드에서 잘못된 필터링 결과를 수정했습니다. #31417을 해결합니다. #31524를 해결합니다. #31574 (alexey-milovidov).
- ClickHouse 빌드를 완전히 재현 가능하도록 만들었습니다(서로 다른 머신에서도 바이트 단위로 동일). #22113을 해결합니다. #31899 (alexey-milovidov). 재현 가능한 빌드를 위해 바이너리에서 빌드 디렉터리의 파일 시스템 경로를 제거했습니다. 이는 #22113에 필요했습니다. #31838 (alexey-milovidov).
zlib-ng,cassandra,mariadb-connector-c,xz,re2,sentry,gsasl,arrow,protobuf에 자체 CMakeLists를 사용합니다. 이는 #20151에 필요합니다. #9226의 일부입니다. 빌드 시스템에서 성가신 군더더기를 제거하기 위한 작은 진전입니다. #30599 (alexey-milovidov).- Hermetic builds: libc의 고정 버전을 사용하고, 빌드 중 호스트 OS의 소스 파일이나 binary 파일이 사용되지 않도록 했습니다. #27133을 해결합니다. #21435를 해결합니다. #30462를 해결합니다. #30011 (alexey-milovidov).
- 특정 함수를 쉽게 퍼징할 수 있도록
getFuzzerData()함수를 추가했습니다. #23227을 해결합니다. #27526 (Alexey Boykov). - Docker 내부에서 capability를 보다 올바르게 설정하도록 개선했습니다. #31802 (Constantine Peresypkin).
- clang 컴파일 옵션
-fstrict-vtable-pointers,-fwhole-program-vtables를 활성화했습니다. #20151 (Maksim Kita). - FreeBSD용 크로스 컴파일을 위해 toolchain tarball을 다운로드하지 않도록 했습니다. #31672 (alexey-milovidov).
- risc-v에 대한 초기 지원을 추가했습니다. 확인된 주의사항과 테스트된 빌드 명령은 development/build-cross-riscv를 참조하십시오. #31309 (Vladimir Smirnov).
- arm 머신에서 “-DENABLE_TESTS=OFF” 매개변수로 컴파일할 수 있도록 지원합니다. #31007 (zhanghuajie).
하위 호환되지 않는 변경 사항
- SQL/JSON 함수에서 json_path와 json 인수의 순서가 변경되었습니다(표준과 일치시키기 위함). #30449를 해결합니다. #30474 (Kseniia Sumarokova).
MergeTree테이블 설정write_final_mark가 제거되었습니다. 이제 항상true입니다. #30455 (Kseniia Sumarokova). 별도의 조치는 필요하지 않으며, 모든 테이블은 새 버전과 호환됩니다.- 함수
bayesAB가 제거되었습니다. 이 함수를 개선하여 다시 추가할 수 있도록 도와주십시오. 이로써 #26233가 해결됩니다. #29934 (alexey-milovidov). - 이는 실험적
clickhouse-keeper지원을 이미 사용 중인 경우에만 해당합니다. 이제 ClickHouse Keeper 스냅샷은 기본적으로 ClickHouse의 사용자 지정 LZ4 블록 압축 대신ZSTD코덱으로 압축됩니다. 이 동작은compress_snapshots_with_zstd_formatcoordination 설정으로 비활성화할 수 있습니다(모든 quorum 레플리카에서 동일해야 함). 하위 호환성 문제는 매우 드물며, 새 노드가 이전 노드로 스냅샷을 전송할 때만 발생할 수 있습니다(복구 시 발생). 이전 노드는 ZSTD 포맷의 스냅샷을 읽을 수 없습니다. #29417 (alesapin).
새로운 기능
- 새로운 비동기
INSERT모드에서는 삽입된 데이터를 누적했다가 백그라운드에서 단일 배치로 저장할 수 있습니다. 클라이언트에서는 쿼리에 데이터가 인라인으로 포함된INSERT쿼리나 별도 버퍼의 데이터(예: HTTP protocol을 통한INSERT쿼리)에 대해async_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). 성능 관련 참고: 비동기 삽입을 사용하면 초당 약 10,000개의 개별INSERT쿼리를 처리할 수 있으므로, 초당 수백만 행 수준의 성능을 달성하려면 여전히 배치 단위로 삽입하는 것이 좋습니다. clickhouse-local에 대화형 모드를 추가했습니다. 이제 서버에 연결하지 않고도clickhouse-local만 실행하면 명령줄용 ClickHouse 인터페이스를 사용할 수 있으며, 파일과 외부 데이터 소스의 데이터를 처리할 수 있습니다. 또한clickhouse-client와clickhouse-local의 코드를 통합했습니다. #7203를 해결했습니다. #25516를 해결했습니다. #22401를 해결했습니다. #26231 (Kseniia Sumarokova).- 실행형(스크립트 작성 가능) 사용자 정의 함수 지원이 추가되었습니다. 이러한 UDF는 어떤 프로그래밍 언어로든 작성할 수 있습니다. #28803 (Maksim Kita).
- 외부 데이터 원본에 대해 사전 정의된 연결을 허용합니다. 이를 통해 외부 데이터 원본을 사용할 때 자격 증명이나 주소를 지정하지 않아도 되며, 대신 이름으로 참조할 수 있습니다. #28367을 해결합니다. #28577 (Kseniia Sumarokova).
system데이터베이스의 해당 테이블에 대응하는SCHEMATA,TABLES,VIEWS,COLUMNS뷰를 포함한INFORMATION_SCHEMA데이터베이스를 추가했습니다. #9770를 해결합니다. #28691 (tavplubix).EXISTS (subquery)를 지원합니다. #6852를 해결합니다. #29731 (Kseniia Sumarokova).- 감사를 위한 세션 로깅. 모든 로그인 및 로그아웃의 성공 및 실패 이벤트를 새로운
system.session_log테이블(table)에 기록합니다. #22415 (Vasily Nemkov) (Vitaly Baranov). - 다차원 코사인 거리 및 유클리드 거리 함수와 L1, L2, Lp, Linf 거리 및 노름을 지원합니다. 튜플의 스칼라 곱과 튜플에 대한 다양한 산술 연산자도 지원합니다. 이로써 #4509가 완전히 해결되었으며, 그 이상도 포함됩니다. #27933 (Alexey Boykov).
INTO OUTFILE및FROM INFILE에 압축 및 압축 해제 지원을 추가했습니다(자동 감지 또는 추가적인 선택적 매개변수 사용). #27135 (Filatenkov Artur).- HTTP
OPTIONS요청에 CORS(Cross Origin Resource Sharing) 지원을 추가했습니다. 이제 Grafana가 별도 임시방편 없이 서버리스 요청과 함께 작동합니다. #18693를 해결합니다. #29155 (Filatenkov Artur). - 이제 JOIN ON이 있는 쿼리에서 논리합(OR)을 지원합니다. #21320 (Ilya Golshtein).
- 함수
tokens가 추가되었습니다. 이 함수는 영숫자가 아닌 ASCII 문자를 구분자로 사용해 문자열을 토큰으로 분할할 수 있습니다. #29981 (Maksim Kita). 텍스트에서 ngram을 추출하는 함수ngrams가 추가되었습니다. #29699를 해결합니다. #29738 (Maksim Kita). - 유니코드 정규화 함수
normalizeUTF8NFC,normalizeUTF8NFD,normalizeUTF8NFKC,normalizeUTF8NFKD를 추가했습니다. #28633 (darkkeks). FileLog테이블 엔진을 사용해 ClickHouse에서 애플리케이션 로그 파일을 스트리밍 방식으로 활용할 수 있습니다. 로컬 파일 시스템의 추가 전용 로그와 로테이션된 로그를 위한 엔진으로,Kafka또는RabbitMQ엔진과 유사합니다. #6953을 해결했습니다. #25969 (flynn) (Kseniia Sumarokova).CapnProto출력 형식을 추가하고CapnProto입력 형식을 리팩터링했습니다. #29291 (Kruglov Pavel).- 쿼리에서 숫자를 이진 리터럴로 작성할 수 있게 되었습니다. 예시
SELECT 0b001;. #29304 (Maksim Kita). hashed_array딕셔너리 유형이 추가되었습니다. 여러 속성을 가진 딕셔너리를 사용할 때 메모리를 절약할 수 있습니다. #30236를 해결합니다. #30242 (Maksim Kita).JSONExtractKeys함수가 추가되었습니다. #30056 (Vitaly).- 함수
getOSKernelVersion이 추가되었습니다. 이 함수는 OS 커널 버전을 나타내는 문자열을 반환합니다. #29755 (Memo). MD4및SHA384함수가 추가되었습니다. MD4는 더 이상 권장되지 않는 오래된 해시 함수이며 보안상 안전하지 않습니다. 따라서 일부 레거시 시스템에서 이미 MD4를 사용 중이고 정확히 동일한 결과를 얻어야 하는 드문 경우에만 사용할 수 있습니다. #29602 (Nikita Tikhomirov).hsts_max_age를 설정 파일에서 양수로 지정하면 ClickHouse HTTP 서버에서 HSTS를 활성화할 수 있습니다. #29516 (凌涛).- Huawei OBS Storage 지원. #24294를 해결합니다. #29511 (kevin wan).
- 키가 단순한 정규식과 일치하는 맵을 반환하는 새 함수
mapContainsKeyLike가 추가되었습니다. #29471 (凌涛). 지정된 패턴과 일치하는 요소만 포함하는 맵을 반환하는 새 함수mapExtractKeyLike가 추가되었습니다. #30793 (凌涛). ALTER TABLE x MODIFY COMMENT를 지원하도록 구현했습니다. #29264 (Vasily Nemkov).- H3 API에서 제공되지만 ClickHouse에는 없는 H3 inspection 함수를 추가했습니다: https://h3geo.org/docs/api/inspection. #29209 (Bharat Nallan).
- 복제된 데이터베이스에서 복제되지 않은
ALTER TABLE FETCH및ATTACH작업을 허용합니다. #29202 (Kevin Michel). - 설정
output_format_csv_null_representation이 추가되었습니다. CSV 출력용이라는 점을 제외하면output_format_tsv_null_representation와 동일합니다. #29123 (PHO). - 현재 ZooKeeper 세션의 업타임을 초 단위로 반환하는 함수
zookeeperSessionUptime()이 추가되었습니다. #28983 (tavplubix). h3ToGeoBoundary함수가 구현되었습니다. #28952 (Ivan Veselov).- 윈도 함수로 사용할 수 있는 집계 함수
exponentialMovingAverage가 추가되었습니다. 이로써 #27511이 해결되었습니다. #28914 (alexey-milovidov). - 테이블 컬럼의 서브컬럼도
DESCRIBE쿼리 결과에 포함할 수 있게 했습니다(describe_include_subcolumns설정으로 활성화할 수 있습니다). #28905 (Anton Popov). Executable,ExecutablePool에send_chunk_header옵션이 추가되었습니다. 이 옵션이 true이면 청크 전에 줄바꿈이 포함된 청크 행 수rows_count가 클라이언트로 전송됩니다. #28833 (Maksim Kita).tokenbf_v1및ngram은 키가 String 또는 FixedSring 타입인 맵을 지원합니다. 이는 맵 키 필터를 사용하는 쿼리에서 데이터 스키핑을 개선합니다.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'실행 시 키A를 포함하지 않는 그레뉼을 스킵합니다. 물론 스킵되는 행 수는 설정한granularity및index_granularity에 따라 달라집니다. #28511 (凌涛).- server에서 클라이언트로 profile events를 전송합니다. 새로운 패킷 유형
ProfileEvents가 도입되었습니다. #26177을 해결합니다. #28364 (Dmitry Novik). FixedString및String데이터 타입에 비트 시프트 연산이 추가되었습니다. 이로써 #27763가 해결되었습니다. #28325 (小路).- 데이터베이스 엔진 MaterializedPostgreSQL에서 PostgreSQL 테이블을 복제에 동적으로 추가 및 삭제하는 기능을 지원합니다. 데이터베이스 설정에 대한 ALTER를 지원합니다. #27573을 해결했습니다. #28301 (Kseniia Sumarokova).
- 함수 accurateCastOrDefault(x, T)를 추가했습니다. #21330을 종료합니다. 작성자: @taiyang-li. #23028 (Maksim Kita).
- 문자열 파싱에 실패할 경우 사용자가 기본값(NULL이 아님)을 지정할 수 있는 함수
toUUIDOrDefault,toUInt8/16/32/64/256OrDefault,toInt8/16/32/64/128/256OrDefault를 추가했습니다. #21330 (taiyang-li).
성능 개선
- 백그라운드 머지는 서로 선점할 수 있으며, 적절한 우선순위에 따라 스케줄됩니다. 이제 오래 실행되는 머지가 짧은 머지의 진행을 가로막지 않습니다. 이는 머지 실행을 더 효율적으로 스케줄링하고 제어하기 위해 필요합니다. 이를 통해 “Too many parts” 오류가 발생할 가능성이 줄어듭니다. #22381. #25165 (Nikita Mikhaylov). background pool의 스레드 수보다 많은 머지와 뮤테이션을 실행할 수 있는 기능이 추가되었습니다. 머지와 뮤테이션은 크기에 따라(작을수록 우선순위가 높음) 단계적으로 실행됩니다. 실행할 작업 수와 스레드 수의 비율은 설정
background_merges_mutations_concurrency_ratio로 제어되며, 기본값은 2입니다. #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). url테이블 함수가 여러 URL을 병렬로 처리하도록 개선했습니다. 이 변경으로 #29670 및 #29671이 해결되었습니다. #29673 (alexey-milovidov).- 기본 키(primary key) 순서에 따른 집계 성능을 개선했습니다(설정
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로 변환하도록 개선했습니다(외부 DB, 예: MySQL). #29446 (Azat Khuzhin). - 딕셔너리 테이블에 대한 SELECT 쿼리는 여러 스레드를 사용합니다. #30500 (Maksim Kita).
Decimal컬럼의 필터링(WHERE 연산) 성능을 개선했습니다. #30431 (Jun Jin).- 더 높은 성능의 popcnt/ctz 구현을 사용해 필터 연산의 분기 코드를 제거했습니다. #29881 (Jun Jin).
- SSE/AVX2/AVX512 명령어를 사용해 all in one 함수의 filter 바이트마스크 생성기(WHERE 연산자에 사용)를 개선했습니다. 기본적으로 ClickHouse는 SSE만 사용하므로 커스텀 빌드에만 해당합니다. #30014 (jasperzhu). #30670 (jasperzhu).
- 널 허용 부동소수점 숫자에 대한 SUM 집계 함수의 성능을 개선했습니다. #28906 (Raúl Marín).
- 여러 디스크를 사용하는 경우 part loading 프로세스의 속도를 높였습니다. 기본 아이디어는 https://github.com/ClickHouse/ClickHouse/pull/16423 와 유사합니다. 운영 환경에서 성능 개선이 확인되었습니다: 24분 -> 16분. #28363 (Amos Bird).
- 메모리 사용량을 줄이기 위해 S3 멀티파트 업로드 파트 크기의 기본 설정을 낮췄습니다. #28679 (ianton-ru).
bitmapAnd함수 성능 개선. #28332 (dddounaiking).StorageMergeTree에서 머지가 계속 진행 중일 때 표시되던 불필요한 mutation 알림을 제거했습니다. #27552 (Vladimir Chebotarev).- 문자열 비교 성능을 개선했습니다. #28767 (alexey-milovidov).
- 기본 키 인덱스와 파티션 필터를 Tuple에서도 사용할 수 있습니다. #29281 (凌涛).
- 쿼리에 동일한 인수를 사용하지만 level 매개변수만 다른 여러 분위수 집계 함수가 있는 경우,
optimize_syntax_fuse_functions설정이 활성화되어 있으면 이 함수들은 하나로 결합되어 한 번에 실행됩니다. #26657 (hexiaoting). - 이제 기본 키(primary key)의 첫 번째 표현식에 대한 min-max 집계가 프로젝션을 통해 최적화됩니다. 이는 #329 관련 변경입니다. #29918 (Amos Bird).
실험적 기능
- ClickHouse Keeper의 노드 구성(
.xml파일)을 변경할 수 있는 기능을 추가했습니다. #30372 (alesapin). sparkbar집계 함수를 추가했습니다. 이로써 #26175가 해결되었습니다. #27481 (小路). 참고: 이 함수에는 한 가지 문제가 있으며, 동작은 향후 릴리스에서 변경될 예정입니다.
개선 사항
- 재시작 없이 로그 수준을 변경할 수 있도록 개선했습니다. #29586 (Nikolay Degterinsky).
- 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). system.data_skipping_indices에data_compressed_bytes,data_uncompressed_bytes,marks_bytes컬럼을 추가했습니다.system.parts에secondary_indices_compressed_bytes,secondary_indices_uncompressed_bytes,secondary_indices_marks_bytes컬럼을 추가했습니다. #29697을 해결했습니다. #29896 (Maksim Kita).- system.tables에
table별칭을, system.databases에database별칭을 추가했습니다 #29677. #29882 (kevin wan). - server 시작 시 테이블 간 상호 의존 관계를 올바르게 해결합니다. #8004, #15170를 해결합니다. #28373 (tavplubix).
- 함수
divide,intDiv,modulo에서 분모가 널 허용일 때 발생하는 “Division by zero” 오류를 방지합니다. #22621을 해결합니다. #28352 (Kruglov Pavel). - 텍스트 형식에서
Date데이터 타입 값을YYYY-MM-DD뿐만 아니라YYYYMMDD형식으로도 파싱할 수 있게 했습니다. 이로써 #30870이 해결되었습니다. #30871 (alexey-milovidov). - Web UI: 테이블 셀에 막대를 표시합니다. #29792 (alexey-milovidov).
- 이제 주석이 있는 딕셔너리를 생성할 수 있습니다:
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).- 이제
arrayStringConcat는 직렬화 가능한 모든 타입의 배열을 지원합니다. #30840 (Nickita Taranov). - 이제 ClickHouse는 시스템 메모리 용량을 파악할 때 docker/cgroups 제한을 반영합니다. #25662를 참조하십시오. #30574 (Pavel Medvedev).
- 이제 PostgreSQL 데이터베이스에서 가져오는 테이블 구조를 더 안정적으로 확인할 수 있습니다. #30477 (Kseniia Sumarokova).
- GROUP BY 및 ORDER BY에서 위치 인수를 전면 지원합니다. #30433 (Kseniia Sumarokova).
- JSONExtractString을 사용해 문자열이 아닌 요소도 문자열로 추출할 수 있도록 합니다. 이는 pull/25452#issuecomment-927123287 관련 변경입니다. #30426 (Amos Bird).
GraphiteMergeTree의 SELECT 쿼리에서 FINAL 절을 사용할 수 있게 되었습니다. #30360 (Nikita Mikhaylov).- 레플리카 복제와 손상된 파트에 대한 fetch 작업을 큐에 넣는 과정이 소폭 개선되어, 매우 드물게 발생하던 복제 큐의
GET_PART항목 멈춤 현상을 방지할 수 있습니다. #30346 (tavplubix). user_files디렉터리에서 file 테이블 함수가 파일을 가리키는 심볼릭 링크를 허용합니다. #30309 (Kseniia Sumarokova).Date32를Date,DateTime,DateTime64및String과 비교할 때의 문제를 수정했습니다. #30219 (liang.huang).MergeTree테이블에서SAMPLE BY표현식을 제거할 수 있도록 했습니다 (ALTER TABLE <table> REMOVE SAMPLE BY). #30180 (Anton Popov).- 이제
Keeper는 (clickhouse-server의 일부로) 다른 노드에 연결할 수 있으면 비동기적으로 시작됩니다. #30170 (alesapin). - 이제
clickhouse-client에서 네이티브 여러 줄 편집을 지원합니다. #30143 (Amos Bird). polygon딕셔너리(역방향 지오코딩): settingstore_polygon_key_column= true인 경우 SELECT 쿼리 메서드를 사용해 딕셔너리 내용을 읽을 수 있도록 지원을 추가했습니다. #30090을 해결했습니다. #30142 (Maksim Kita).- Play UI에 ClickHouse 로고를 추가했습니다. #29674 (alexey-milovidov).
Arrow,ArrowStream,Parquet,ORC와 같은 Arrow 지원 포맷에서 컬럼을 읽을 때 표시되는 예외 메시지가 개선되었습니다. 이 변경으로 #29926가 해결되었습니다. #29927 (alexey-milovidov).Buffer테이블에서 플러시와 시작 시점 사이에 발생하는 데이터 경합을 수정했습니다. 이는 테스트에서 나타날 수 있습니다. #29930 (Azat Khuzhin).DatabaseMemory와LiveView의DROP TABLE간lock-order-inversion을 수정했습니다. Live View는 실험적 기능입니다. Memory 데이터베이스는 clickhouse-local에서 사용됩니다. #29929 (Azat Khuzhin).- 주기적인 딕셔너리 재로드와 설정 재로드 사이의 잠금 순서 역전 문제를 수정했습니다. #29928 (Azat Khuzhin).
- zoneinfo 파일을 2021c로 갱신했습니다. #29925 (alexey-milovidov).
clickhouse-copier에서 재시도(retries) 및 재시도 사이의 지연을 설정할 수 있는 기능이 추가되었습니다. #29921 (Azat Khuzhin).shutdown_wait_unfinished시간까지 실행 중인 쿼리를 기다릴 수 있도록shutdown_wait_unfinished_queries서버 설정을 추가했습니다. 이는 #24451을 위한 변경입니다. #29914 (Amos Bird).- 최대 메모리 사용량을 추적할 수 있는 기능이 추가되었습니다(
system.trace_log에 새로운 trace_typeMemoryPeak추가). #29858 (Azat Khuzhin). - PostgreSQL 외부 테이블: 레플리카 아이덴티티 인덱스를 가져오는 쿼리에 파티션된 테이블 접두사 ‘p’를 추가했습니다. #29828 (Shoh Jahon).
- 머지 중 메모리 사용량을 프로파일링할 수 있도록 mutate/merge 작업 중
max_untracked_memory/memory_profiler_step/memory_profiler_sample_probability를 적용합니다. #29681 (Azat Khuzhin). - 쿼리 난독화 도구:
clickhouse-format --obfuscate가 이제 더 다양한 유형의 쿼리를 처리할 수 있습니다. #29672 (alexey-milovidov). - 다음 문제를 해결했습니다:
clickhouse-format --obfuscate가 내장 딕셔너리(함수regionTo...)가 포함된 쿼리를 처리하지 못하던 문제입니다. #29667 (alexey-milovidov). - JSON 함수의 잘못된 널 허용 처리를 수정했습니다. 이 수정으로 #29615 문제가 해결됩니다. https://github.com/ClickHouse/ClickHouse/pull/28012 가 아직 릴리스되지 않았으므로 개선 사항으로 분류했습니다. #29659 (Amos Bird).
- 기본
listen_backlog값을 늘렸습니다(최신 Linux 커널의 기본값에 맞추기 위해). #29643 (Azat Khuzhin). - server 설정
dictionaries_config,models_config,user_defined_executable_functions_config가 변경되면 Dictionaries, 모델, 사용자 정의 실행형 함수를 다시 로드합니다. #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). use_skip_indexes설정이 추가되었습니다. #29405 (Maksim Kita).- 인메모리 파트를
FREEZE할 수 있도록 지원을 추가했습니다(백업용). #29376 (Mo Xuan). clickhouse-benchmark에 초기 query_id를 전달하도록 했습니다(이전에는clickhouse-benchmark를 통해 원격 쿼리를 실행하면 세그먼트의 쿼리가initial_query_id를 통해 초기 쿼리와 연결되지 않았습니다). #29364 (Azat Khuzhin).- 스킵 인덱스
tokenbf_v1및ngrambf_v1에String또는FixedString타입의 키를 사용하는Array데이터 타입 지원이 추가되었습니다. #29280 (Maksim Kita). 스킵 인덱스tokenbf_v1및ngrambf_v1에String또는FixedString타입의 키를 사용하는Map데이터 타입 지원이 추가되었습니다. 작성자 @lingtaolf. #29220 (Maksim Kita). - 함수
has:Map데이터 타입에 대한 지원이 추가되었습니다. #29267 (Maksim Kita). clickhouse-keeper로그(복제된 상태 머신용)를ZSTD로 압축할 수 있는compress_logs설정을clickhouse-keeper에 추가했습니다. 구현: #26977. #29223 (alesapin).external_table_strict_query설정이 추가되었습니다. 호환되지 않더라도 외부 데이터베이스로 전송되는 쿼리에 전체 WHERE 표현식을 전달하도록 강제합니다. #29206 (Azat Khuzhin).ARRAY JOIN을 사용할 때 프로젝션을 비활성화합니다. 이전 버전에서는 프로젝션 분석으로 인해 ARRAY JOIN의 alias가 깨질 수 있었습니다. #29139 (Amos Bird).MsgPack입력/출력 포맷에서 더 많은 타입을 지원하도록 개선했습니다. #29077 (Kruglov Pavel).ORC입력/출력 포맷에서LowCardinality컬럼을 입력하고 출력할 수 있도록 지원합니다. #29062 (Kruglov Pavel).system.distributed_ddl_queue를 SELECT할 때 잘못된 값이 표시될 수 있던 문제가 수정되었습니다. #29061 (tavplubix).- HTTP 연결에서 알 수 없는 메서드에 대한 동작을 올바르게 처리합니다. #29050을 해결합니다. #29057 (Filatenkov Artur).
clickhouse-keeper: ZooKeeper 로그(스냅샷 제외)로 복원할 때 일부 데이터 손실을 일으킬 수 있는clickhouse-keeper-converter의 버그를 수정했습니다. #29030 (小路). ZooKeeper 로그가 잘못 역직렬화될 수 있는clickhouse-keeper-converter의 버그를 수정했습니다. #29071 (小路).CREATE ... AS SELECT쿼리의 설정이 적용되도록 했습니다(수정: #28810). #28962 (Azat Khuzhin).- ALTER TABLE … ON CLUSTER … REPLACE/MOVE PARTITION FROM/TO …에서 기본 데이터베이스 설정을 따르도록 개선했습니다. #28955 (anneji-dev).
- gRPC 프로토콜: 클라이언트에서 서버 측 Compression을 변경할 수 있도록 지원합니다. #28953 (Vitaly Baranov).
- 비동기 메트릭을 위해 온도 센서를 읽을 때 발생하는 “no data” 예외를 건너뜁니다. 이로써 #28852가 해결되었습니다. #28882 (alexey-milovidov).
- 드문 경우 기존 딕셔너리에서
Dictionary not found오류가 발생할 수 있던 논리적 race condition을 수정했습니다. #28853 (tavplubix). - If-combinator 검사에서 중첩 함수 제한을 완화합니다(단, 동일한 combinator의 중첩 사용은 금지합니다). #28828 (Azat Khuzhin).
- server 종료 시 발생할 수 있는 처리되지 않은 예외를 수정했습니다. #28761 (Azat Khuzhin).
- mutation/머지가 비정상적으로 오래 걸릴 경우, 활성 mutation/머지에서 사용할 수 있는 tmp 디렉터리 정리를 금지합니다. #28760 (Azat Khuzhin).
- 별칭 사용 시
optimize_arithmetic_operations_in_aggregate_functions = 1최적화를 허용합니다. #28746 (Amos Bird). ReplicatedMergeTree에detach_not_byte_identical_parts설정을 구현하여, 바이트 단위로 동일하지 않은 파트를 제거하는 대신 분리하도록 했습니다(머지/뮤테이션 후). #28708 (Azat Khuzhin).MergeTree에max_suspicious_broken_parts_bytes설정을 추가했습니다(손상된 모든 파트의 총 크기를 제한하며, 기본값은1GiB입니다). #28707 (Azat Khuzhin).RabbitMQ테이블 설정에서 매크로를 확장할 수 있도록 했습니다. #28683 (Vitaly Baranov).Log엔진을 사용하는 테이블에서 여러 스레드로 데이터를 읽을 수 있는 기능을 복원했습니다. #28125 (Vitaly Baranov).- JSON 함수에서 NULL 컬럼 처리의 비정상 동작을 수정했습니다. 이 변경으로 #27930이 해결됩니다. #28012 (Amos Bird).
- 컬럼과 별도로 스킵 인덱스의 Mark/Uncompressed cache 크기를 설정할 수 있게 했습니다. #27961 (Amos Bird).
- 다른 JOIN 타입과 함께
USING을 사용하는 JOIN을 혼합할 수 있도록 했습니다. #23881 (darkkeks). - Yandex Cloud S3의 스로틀링 대응을 위해 aws-sdk 서브모듈을 업데이트했습니다. #30646 (ianton-ru).
- gRPC 호출을 처리하는 동안 쿼리 처리가 끝날 때 쿼리 ID와 세션 ID를 해제하던 문제를 수정했습니다. #29954 (Vitaly Baranov).
- 간헐적으로 실패하는 테스트를 해결하기 위해
AccessControlManager종료 로직을 수정했습니다. #29951 (Vitaly Baranov). HDFS에서 읽는 과정에서 발생하던 assertion 실패를 수정했습니다. 디버그 환경의 테스트에서 실행할 수 있도록 libhdfs3 라이브러리를 업데이트했습니다. #29251을 해결했습니다. #27814을 해결했습니다. #29276 (Kseniia Sumarokova).
빌드/테스트/패키징 개선
- Aarch64 머신용 FreeBSD 빌드 지원을 추가했습니다. #29952 (MikaelUrankar).
- 이제 ClickHouse에는 재귀적 서브모듈이 더 이상 필요하지 않습니다. #30315 (alexey-milovidov).
- ClickHouse를 Musl로 정적 빌드할 수 있습니다. 이 기능은 Experimental로 추가되었으며,
odbc-bridge,library-bridge, CatBoost 통합, 일부 라이브러리의 빌드는 지원하지 않습니다. #30248 (alexey-milovidov). AArch64및Darwin(macOS) 빌드에서Protobuf,Arrow,ORC,Parquet를 활성화했습니다. 이로써 #29248이 해결됩니다. 이로써 #28018이 해결됩니다. #30015 (alexey-milovidov).- PowerPC(powerpc64le)용 크로스 빌드를 추가했습니다. 이로써 #9589가 해결됩니다. AArch64 및 PowerPC에서 MySQL과 상호 운용할 수 있도록 지원을 활성화했습니다. 이로써 #26301이 해결됩니다. #30010 (alexey-milovidov).
- 크로스 컴파일 툴체인에는 필요한 파일만 남기고, 이를 서브모듈로 포함했습니다(이전에는 tarball로 다운로드했습니다). #29974 (alexey-milovidov).
- ClickHouse의 select statement parser에 구조 인식 퍼징 기법을 구현했습니다. #30012 (Paul).
- 템플릿 코드의 컴파일 속도를 높이기 위해 clang에서 Experimental constexpr 표현식 평가기를 활성화했습니다. #29668 (myrrc).
- 새 심볼을 사용하지 않고도 더 최신 버전의 glibc로 컴파일할 수 있는 기능을 추가했습니다. #29594 (Azat Khuzhin).
- clang 최적화 옵션으로 Debug 빌드 바이너리 크기를 줄였습니다. #28736 (flynn).
- 이제 CI용 모든 이미지는 별도의 dockerhub 저장소에 배치됩니다. #28656 (alesapin).
- clang-13 빌드 지원을 개선했습니다. #28046 (Sergei Semin).
clickhouse-client에 raw profile events를 출력하는 기능을 추가했습니다(디버깅 및 테스트에 유용할 수 있습니다). #30064 (Azat Khuzhin).- clickhouse-server 유닛(systemd 및 sysvinit init)에 시간 의존성을 추가했습니다. #28891 (Azat Khuzhin).
- 심볼이 다시 로드되면 stacktrace cache도 다시 로드합니다. #28137 (Amos Bird).
버그 수정
positionCaseInsensitiveUTF8및countSubstringsCaseInsensitiveUTF8와 같은 UTF-8 string에서 대소문자를 구분하지 않고 검색하는 함수는 매우 드물게 실제로는 일치하지 않는 substring을 찾는 경우가 있었는데, 이 문제가 수정되었습니다. #30663 (tavplubix).- 암호화된 디스크에서 빈 파일을 읽을 때 발생하던 문제를 수정했습니다. #30494 (Vitaly Baranov).
- 분산 쿼리에서
legacy_column_name_of_tuple_literal = 0설정 시, 논리합 체인을IN으로 변환하는 동작(설정optimize_min_equality_disjunction_chain_length로 제어됨)을 수정했습니다. #28658 (Anton Popov). insert_allow_materialized_columns=0이어도 구체화된 컬럼을 분산 테이블의 세그먼트 분할 키로 사용할 수 있게 했습니다. #28637 (Vitaly Baranov).TO와FROM이 설정되어 있고 결과 집합에 행이 없는 경우의ORDER BY ... WITH FILL문제를 수정했습니다. #30888 (Anton Popov).- 피연산자가 2개를 초과하는 AND/OR 표현식에서 Set 인덱스가 사용되지 않던 문제를 수정했습니다. 이로써 #30416이 해결됩니다. #30887 (Amos Bird).
- 해시 함수를 사용하는 프로젝션이 구체화될 때 발생하는 크래시를 수정했습니다. 이로써 #30861이 해결되었습니다. 이 문제는 https://github.com/ClickHouse/ClickHouse/pull/28560 와 유사하며, 헤더(header)가 비어 있어야 한다는 불변 조건을 제대로 이해하지 못해 발생했습니다. #30877 (Amos Bird).
ReplicatedMergeTree에서 ZooKeeper 경로로부터 보조 ZooKeeper 이름을 추출할 때의 모호성을 해결했습니다. 이전에는 ZooKeeper 경로에 콜론이 포함되어 있으면Unknown auxiliary ZooKeeper name오류로 인해 서버가 시작되지 않을 수 있었습니다. #29052를 수정했습니다. 또한 이전에는 슬래시로 시작하지 않는 ZooKeeper 경로를 지정할 수 있었지만, 이제 이는 Deprecated 상태이며 이러한 경로로는 새 테이블을 생성할 수 없습니다. 또한 보조 ZooKeeper 이름에는 슬래시와 콜론을 사용할 수 없습니다. #30822 (tavplubix).- 어떤 이유로든 localBackup이 실패한 경우 임시 디렉터리를 정리합니다. #30797 (ianton-ru).
- 비복제
MergeTree에서REPLACE/MOVE PARTITION과 백그라운드 머지 사이의 레이스 컨디션을 수정했습니다. 이 문제로 인해 이동되거나 대체된 데이터의 일부가 파티션에 남을 수 있었습니다. #29327을 수정했습니다. #30717 (tavplubix). - 항상 참인 PREWHERE의 경우 PREWHERE를 WHERE로 수정했습니다. #30668 (Azat Khuzhin).
- Limit push down 최적화 과정에서
Cannot find column오류가 발생할 수 있었습니다. #30438를 수정했습니다. #30562 (Nikolai Kochetov). IS [NOT] NULL로 재작성할 때isNotNull/isNull에 빠진 괄호를 추가했습니다(isNotNull(1)+isNotNull(2)와 같은 식이 있는 쿼리를 수정). #30520 (Azat Khuzhin).- 동일한 테이블을 참조하는 스칼라 서브쿼리가 포함된 ALTER에서 발생하던 교착 상태를 수정하고, #30461을 해결했습니다. #30492 (Vladimir C).
- REPLACE PARTITION 실행 중 세션이 만료될 경우 발생할 수 있는 세그폴트를 수정했습니다. #30432 (tavplubix).
IN (subquery)같은 조건이 있는 쿼리는 집계 프로젝션이 적용된 경우 잘못된 결과를 반환할 수 있었습니다. 프로젝션용 Set 생성 문제를 수정했습니다. #30310 (Amos Bird).- 프로젝션이 활성화되었을 때 JOIN 쿼리의 컬럼 별칭 해석 문제를 수정했습니다. 이로써 #30146 문제가 해결되었습니다. #30293 (Amos Bird).
replaceRegexpAll함수의 일부 문제를 수정했습니다. #30292 (Memo).- 레이아웃 설정에서
preallocate옵션을 파싱하는 ComplexKeyHashedDictionary, ComplexKeySparseHashedDictionary의 문제를 수정했습니다. #30246 (Maksim Kita). [I]LIKE함수 수정. #28661 문제를 해결합니다. #30244 (Nikolay Degterinsky).- multiIf에서 shortcircuit와 lowcardinality를 사용할 때 발생하던 크래시를 수정했습니다. #30243 (Raúl Marín).
- FlatDictionary, HashedDictionary에서 널 허용 속성의 bytes_allocated 계산을 수정했습니다. #30238 (Maksim Kita).
- 여러 조인에서 숫자로 시작하는 식별자의 사용을 허용합니다. #30230 (Vladimir C).
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).- MOVE PARTITION과 MergeTree의 머지/뮤테이션 간 경쟁 상태를 수정했습니다. #30074 (Azat Khuzhin).
- 삭제한
Memory데이터베이스가 서버 재시작 후 다시 나타나는 문제가 수정되었습니다(#29795). 또한Ordinary데이터베이스를 삭제할 때Directory not empty오류가 발생하는 경우의 우회책으로force_remove_data_recursively_on_drop설정이 추가되었습니다(클라우드 환경에서는 남아 있는 데이터를 수동으로 제거할 수 없기 때문입니다). #30054 (tavplubix). tuple()로 인해 sample이 크래시되는 문제를 수정하고, #30004를 해결했습니다. #30016 (flynn).- 이슈 종료 시도: #29965. #29976 (hexiaoting).
FileChecker와StorageLog/StorageStripeLog사이에서 발생할 수 있는 데이터 레이스를 수정했습니다. #29959 (Azat Khuzhin).StorageLog에서LogSink::writeMarks()와LogSource간 데이터 레이스를 수정했습니다. #29946 (Azat Khuzhin).- https://github.com/ClickHouse/ClickHouse/pull/19544에서 도입된 MergeTree 테이블의 동시 쿼리 제한과 관련된 잠재적 리소스 누수를 수정했습니다. #29879 (Amos Bird).
- 시스템 테이블 재생성 검사 수정(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키가 모두 고정 크기인 여러 컬럼으로 이루어져 있으며, 2단계 집계가 활성화된 경우(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). - 필터 프레디케이트의 조건이 push-down 최적화 후 유실될 수 있었습니다. #29625 (Nikolai Kochetov).
- 별칭 및 단락 평가식 처리 시 발생하던 JIT 표현식 컴파일 문제를 수정했습니다. #29403를 해결했습니다. #29574 (Maksim Kita).
DEFAULT표현식에서x.y.z...와 같은 잘못된 테이블 식별자를 사용할 때ALTER MODIFY쿼리에서 드물게 발생하던 segfault를 수정했습니다. #29184를 해결했습니다. #29573 (alesapin).GROUP BY WITH TOTALS HAVING에서 nullptr 역참조 문제를 수정했습니다(HAVING의 컬럼이 선택되지 않은 경우). #29553 (Azat Khuzhin).- Join 테이블 엔진의 테이블에서 읽기와 쓰기를 동시에 수행할 때 발생하는 교착 상태를 방지합니다. #29544 (Raúl Marín).
pathStartsWith검사에서std::mismatch사용과 관련된 문제를 수정했습니다. 이는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).
- 메모리 안전성을 보장할 수 없으므로 윈도 함수
nth_value를 제거했습니다. 이로써 #29347이 해결되었습니다. #29348 (alexey-milovidov). - 프로젝션 파트의 수직 병합을 수정했습니다. 이로써 #29253 문제가 해결됩니다. 또한 이 PR에서는 https://github.com/ClickHouse/ClickHouse/pull/25165 에서 도입된 여러 프로젝션 머지/mutation 문제도 해결했습니다. #29337 (Amos Bird).
- 새 레플리카를 추가하는 동안 복제된 데이터베이스에서 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). Database doesn't exist error(UNKNOWN_DATABASE)를Attempt to read after eof(ATTEMPT_TO_READ_AFTER_EOF) 대신 일반적인 오류로 클라이언트에(TCP를 통해) 전송합니다. #29229 (Azat Khuzhin).- Avro 입력 형식에서 LowCardinality(Nullable) 타입의 컬럼에 삽입할 때 발생하던 segfault를 수정했습니다. #29132 (Kruglov Pavel).
- 서버 간 시크릿을 사용하는 경우 이전 자격 증명이 재사용되지 않도록 했습니다(이전에는 해당 cluster에 서버 간 시크릿이 구성된 분산 테이블로 Buffer/Kafka를 통해 INSERT하기 전에 해당 connection에 대해 이전에 설정된 사용자가 재사용될 수 있었습니다). #29060 (Azat Khuzhin).
- 딕셔너리와 조인할 때
any_join_distinct_right_table_keys를 처리하고 #29007을 해결합니다. #29014 (Vladimir C). - alias 컬럼으로 join할 때 발생하던 “Not found column … in block” 오류를 수정하고 #26980을 해결했습니다. #29008 (Vladimir C).
GLOBAL IN서브쿼리에서 사용되는 스레드 수를 수정했습니다(#19414 버그 수정 이후 단일 스레드로 실행되어 왔습니다). #28997 (Nikolai Kochetov).- ORDER BY에 WITH FILL이 포함된 경우의 잘못된 최적화를 수정했습니다. 이로써 #28908이 해결되었습니다. 이로써 #26049가 해결되었습니다. #28910 (alexey-milovidov).
- 상수(const) 사용 시 발생하던 고차 배열 함수 문제(
arrayCompact의SIGSEGV,arrayDifference/arrayCumSumNonNegative의ILLEGAL_COLUMN)를 수정했습니다. #28904 (Azat Khuzhin). mutations_sync=2에서 뮤테이션 대기 문제가 수정되었습니다. #28889 (Azat Khuzhin).- 여러 컬럼이 포함된 IN 조건(예:
(k,v) IN ((1, 2)))이 있는 외부 데이터베이스(예: MySQL) 쿼리 문제를 수정했습니다. #28888 (Azat Khuzhin). LowCardinality의 단락 평가 함수 실행 관련 버그를 수정했습니다. #28884를 해결합니다. #28887 (Kruglov Pavel).- compact 파트의 서브컬럼 읽기 문제를 수정했습니다. #28873 (Anton Popov).
DROP PART와REPLACE/MOVE PARTITION사이의 경쟁 상태를 수정하여, 드문 경우 레플리카 간 불일치가 발생할 수 있던 문제를 해결했습니다. #28864 (tavplubix).- 단락 평가가 적용된 표현식의 컴파일을 수정했습니다. #28821 (Azat Khuzhin).
- 모든 레플리카를 강제 재부팅한 후 ReplicatedMergeTree 레플리카 간 데이터가 서로 불일치할 수 있는 매우 드문 경우를 수정했습니다. 오류는
Part ... intersects (previous|next) part ...와 같이 표시됩니다. #28817 (alesapin). - connection 사용 가능 여부를 더 잘 확인하고, 만일에 대비해
RabbitMQ종료 시 발생하는 예외도 포착하도록 개선했습니다. #28797 (Kseniia Sumarokova). - ReplicatedMergeTreeQueue의 경미한 경쟁 상태를 수정했습니다. 사용자에게는 보이지 않지만, 미묘한 버그로 이어질 수 있습니다. #28734 (alesapin).
- 예외 발생 시 부분적으로 생성된 집계 프로젝션이 있는
SELECT에서 발생할 수 있는 충돌을 수정했습니다. #28700 (Amos Bird). - 전달된 매개변수가 잘못되었을 때 분산 테이블 생성 중 발생하던 코어 덤프 문제를 수정했습니다. #28686 (Zhiyong Wang).
- system.processes 테이블에 Settings.Names 및 Settings.Values 별칭을 추가했습니다. #28685 (Vitaly).
- S2 Geometry 라이브러리 지원:
s2RectAdd및s2RectContains함수에 필요한 인수 개수를 바로잡았습니다. #28663 (Bharat Nallan). - Nullable 또는 LowCardinality 기본 키를 사용할 때 잘못된 상수 타입 변환이 발생하는 문제를 수정했습니다. #28636 (Amos Bird).
- PREWHERE에서 “컬럼이 집계 함수에 포함되지 않고 GROUP BY에도 없는” 문제를 수정했습니다(Fixes: #28461). #28502 (Azat Khuzhin).
하위 호환되지 않는 변경 사항
- 이제 다음 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).ALTER TABLE ... MATERIALIZE COLUMN쿼리가 추가되었습니다. #27038 (Vladimir Chebotarev).s3테이블 함수에 대한 파티션별 쓰기를 지원합니다. #23051 (Vladimir Chebotarev).- 데이터 가져오기/내보내기용
lz4압축 포맷을 지원합니다(gz,bz2,xz,zstd외 추가 지원). #25310 (Bharat Nallan). enable_positional_arguments설정에서 위치 인수를 허용합니다. #2592를 해결합니다. #27530 (Kseniia Sumarokova).- s3 테이블에 대한
CREATE쿼리의SETTINGS절에서 파일 포맷 관련 사용자 설정을 허용합니다. 이 변경으로 #27580가 해결됩니다. #28037 (Nikita Mikhaylov). RabbitMQ엔진에 SSL 연결을 허용합니다. #28365 (Kseniia Sumarokova).- 서버 포트를 가져올 수 있도록
getServerPort함수가 추가되었습니다. 해당 포트를 서버가 사용하지 않는 경우 예외를 발생시킵니다. #27900 (Amos Bird). - “snowflake id”와
DateTime,DateTime64간의 변환 함수를 추가했습니다. #27058을 참조하십시오. #27704 (jasine). SHA512함수가 추가되었습니다. #27830 (zhanglistar).log_queries_probability설정을 통해 query_log에 쿼리의 sample만 기록할 수 있습니다. #16609를 해결합니다. #27527 (Nikolay Degterinsky).
실험적 기능
- 정적 파일 형태로 웹 서버에 읽기 전용 테이블을 저장할 수 있는
web디스크 유형입니다. #23982를 참조하십시오. #25251 (Kseniia Sumarokova). 이 기능은 주로 공유 스토리지 작업 테스트를 쉽게 하고 데이터셋을 손쉽게 가져오기 위해 필요합니다. 21.11 릴리스 전에는 사용을 권장하지 않습니다. - 새로운 명령
BACKUP및RESTORE가 추가되었습니다. #21945 (Vitaly Baranov). 이 기능은 아직 개발 중이며 현재 버전에서 사용하도록 설계되지 않았습니다.
성능 개선
sumIf및countIf집계 함수의 성능을 향상했습니다. #28272 (Raúl Marín).minmax인덱스를 위한 가상 프로젝션을 생성합니다. 이제allow_experimental_projection_optimization이 활성화되면, 가능한 경우 쿼리가 데이터를 읽는 대신 minmax 인덱스를 사용합니다. #26286 (Amos Bird).sequenceMatch및sequenceCount에 두 가지 검사를 도입해, 시퀀스 패턴의 결정적 부분 일부가 이벤트 목록에 없을 때 조기에 종료할 수 있도록 했습니다. 이 변경으로 이전에는 연산 한도에 도달해 실패하던 많은 쿼리를 처리할 수 있게 되었고, 전반적으로 파이프라인 속도도 향상되었습니다. #27729 (Jakub Kuklis).- 이항 함수, 특히 0이 아닌 상수에 대한 나눗셈의 항상 단조(monotonic) 정보를 활용해 프라이머리 키 분석을 강화했습니다. #28302 (Amos Bird).
hasAll필터 조건이 블룸 필터 데이터 스키핑 인덱스를 활용하도록 개선했습니다. #27984 (Braulio Valdivielso Martínez).- 테이블 시작 프로세스를 지연시켜 데이터 파트 로딩 속도를 높였습니다. #28313 (Amos Bird).
WHERE에서PREWHERE로 이동되는 조건 수가 과도하게 많아질 수 있던 문제를 수정했습니다(optimize_move_to_prewhere설정으로 제어되는 최적화). #28139 (lthaooo).optimize_distributed_group_by_sharding_key를 기본적으로 활성화했습니다. #28105 (Azat Khuzhin).
개선 사항
Distributed테이블을 생성하기 전에 cluster 이름을 확인하여, 잘못된 cluster 이름으로는 테이블을 생성할 수 없도록 했습니다. #27832을 수정했습니다. #27927 (tavplubix).- 다른 quantile…Weighted 함수와 마찬가지로 집계 함수
quantileBFloat16Weighted가 추가되었습니다. 이로써 #27745가 해결되었습니다. #27758 (Ivan Novitskiy). - 빈 속성 목록으로 Dictionaries를 생성할 수 있게 했습니다. #27905 (Maksim Kita).
- 비밀번호를 재설정하는 방법에 대한 대화형 문서를
clickhouse-client에 추가했습니다. 사용자가 ClickHouse를 설치하고 비밀번호를 설정한 직후 바로 잊어버리는 경우에 유용합니다. #27750를 참조하십시오. #27903 (alexey-milovidov). JSONAsString입력 형식에서 데이터가 배열로 감싸진 경우를 지원합니다. #25517을 해결합니다. #25633 (Kruglov Pavel).system.replicas테이블에 새 컬럼last_queue_update_exception을 추가했습니다. #26843 (nvartolomei).- 장애 조치 시
MaterializedPostgreSQL테이블이 다시 연결되도록 지원합니다. #28529를 해결합니다. #28614 (Kseniia Sumarokova). - server를 처음 시작할 때 고유한 서버 UUID를 생성합니다. #20089 (Bharat Nallan).
MySQLengine에connection_wait_timeout설정을 도입했습니다(기본값 5초, 0이면 대기하지 않음). #28474 (Azat Khuzhin).- 잘못된 인수로
MaterializedPostgreSQL을 생성하지 못하도록 했습니다. #28423을 해결합니다. #28430 (Kseniia Sumarokova). - 수직 병합 시 미리 정의된 “rows_sources” 대신 실제 tmp 파일을 사용합니다. 이렇게 하면 tmp 디스크에 불필요한 디렉터리가 생성되는 일을 방지할 수 있습니다. #28299 (Amos Bird).
- clickhouse-server.service에서 export env
LIBHDFS3_CONF를 사용하는 대신 서버 구성에libhdfs3_conf를 추가했습니다. 이는 HDFS와의 상호작용을 구성하기 위한 것입니다. #28268 (Zhichang Yu). - 예기치 않은 예외(
Part %name% doesn't exist)를 유발할 수 있는 Temporary 상태 파트의 제거 문제를 수정했습니다. #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 테이블 엔진 또는 테이블 함수에 삽입할 때
ON CONFLICT절을 지원합니다. #27727을 해결합니다. #28081 (Kseniia Sumarokova). - 호환되는 데이터를 ATTACH할 수 있도록
Enum데이터 타입에 대한 제한을 완화했습니다. #26672를 해결합니다. #28028 (Dmitry Novik). - 빈 집합(empty set)에서 상수 키로 그룹화할 때의 동작을 제어하는 설정
empty_result_for_aggregation_by_constant_keys_on_empty_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컬럼 변환기에서 2개 이상의 인수를 받는 함수를 적용할 수 있도록 람다 인수를 지원합니다. 이는 #27877를 위한 변경입니다. #27901 (Amos Bird).- 기본값으로
tcp_keep_alive_timeout이 활성화됩니다. #27882 (Azat Khuzhin). - 원격 서버가 비정상 종료된 경우 원격 쿼리 취소 기능을 개선했습니다. #27881 (Azat Khuzhin).
- 큰 S3 객체에는 Multipart copy upload를 사용합니다. #27858 (ianton-ru).
- 라이브러리 사전 경로에서 심볼릭 링크 순회를 허용합니다. #27815 (Kseniia Sumarokova).
- 이제
ALTER MODIFY COLUMT를Nullable(T)로 변경해도 mutation이 필요하지 않습니다. #27787 (victorgao). - 오류를 조용히 무시하지 않도록 하고
ReadBufferFromS3의 지연은 집계하지 않도록 했습니다. #27484 (Vladimir Chebotarev). ALTER ... MATERIALIZE TTL이 실제 TTL 동작 없이 메타데이터만 다시 계산하도록 개선했습니다. #27019 (lthaooo).- EOF에 줄바꿈이 없어도 사용자 지정 최상위 도메인 목록을 읽을 수 있도록 했습니다. #28213 (Azat Khuzhin).
버그 수정
carbon-clickhouse에서 압축된 데이터를 읽을 때 ‘파일 끝 이후를 읽으려고 시도함(attempt to read after end of file)’ 오류로 실패하던 문제를 수정했습니다. #26149를 해결했습니다. #28150 (FArthur-cmd).ON CLUSTER절이 포함된GRANT WITH REPLACE문을 실행할 때 액세스 권한 부여를 확인하는 문제를 수정했습니다. 이 PR은 #27001의 수정 사항을 개선합니다. #27983 (Vitaly Baranov).LowCardinality(UUID)유형의 컬럼에서extremes = 1을 사용해 SELECT할 수 있도록 했습니다. #27918 (Vitaly Baranov).- 음수에 대한 PostgreSQL 스타일 캐스트(
::연산자) 문제를 수정했습니다. #27876 (Anton Popov). - #26864 이후
NamedSessionStorage종료 처리를 수정했습니다. 이제NamedSessionStorage에 저장된 session Context는 전역 Context를 파기하기 전에 먼저 파기됩니다. #27875 (Vitaly Baranov). windowFunnel“strict” 모드 버그를 수정했습니다. 이로써 #27469 문제가 해결됩니다. #27563 (achimbab).bzip2아카이브가 잘린 상태일 때 읽기 중 발생하던 무한 루프를 수정했습니다. #28543 (Azat Khuzhin).MaterializedMySQL의 내부 DDL에 대한DROP TABLE에서 발생하는 UUID 중복 문제를 수정했습니다. MaterializedMySQL은 실험적 기능입니다. #28533 (Azat Khuzhin).Nested컬럼과, 이름에 점이 있고Nested와 동일한 접두사를 갖는 스칼라 컬럼이 함께 있는 테이블에서 select할 때 발생하던There is no subcolumn오류를 수정했습니다(예:n.id UInt32, n.arr1 Array(UInt64), n.arr2 Array(UInt64)). #28531 (Anton Popov).ReplicatedVersionedCollapsingMergeTree의 ALTER 후Existing table metadata in ZooKeeper differs in sorting key expression.오류가 발생할 수 있던 버그를 수정했습니다. #28515를 해결했습니다. #28528 (alesapin).- 분산 DDL 큐를 백그라운드에서 처리할 때 발생할 수 있던 ZooKeeper watch 누수 가능성(경미한 문제)을 수정했습니다. #26036을 해결합니다. #28446 (tavplubix).
MaterializedPostgreSQLengine에서 테이블(table) 이름을 따옴표로 감싸지 않은 문제를 수정했습니다. #28316을 해결합니다. #28433 (Kseniia Sumarokova).- 널 허용 컬럼에서 JOIN되지 않은 행의 잘못된 동작을 수정했습니다. #27691을 해결했습니다. #28349 (vdimir).
- 모든 키 컬럼을 사용하지 않는 경우의 NOT-IN 인덱스 최적화를 수정했습니다. 이로써 #28120이 해결됩니다. #28315 (Amos Bird).
- 새 파트가 빈 파트로 대체되면서 발생한 겹치는 파트를 수정했습니다. #28310 (Azat Khuzhin).
ORDER BY및Merge테이블에서 설정optimize_read_in_order가 활성화된 상태일 때 쿼리 결과가 일관되지 않게 나오던 문제를 수정했습니다. #28266 (Anton Popov).Nullable(LowCardinality)유형의 쿼리에서extremes설정이 1로 지정된 경우, 초기화되지 않은 메모리를 읽을 수 있던 문제를 수정했습니다. #28165를 수정합니다. #28205 (Nikolai Kochetov).- 프로젝션 관련 소규모 수정이 여러 건 적용되었습니다. 자세한 내용은 PR을 참조하십시오. #28178 (Amos Bird).
- Context/구성 리로더의 종료 순서가 잘못되어 종료 시 매우 드물게 발생하던 세그멘테이션 오류를 수정했습니다. #28088 (nvartolomei).
- 함수
JSONExtract에서Nullable(String)형식의 NULL 값 처리 방식을 수정했습니다. 이 수정으로 #27929 및 #27930 문제가 해결됩니다. 이 문제는 https://github.com/ClickHouse/ClickHouse/pull/25452 에서 도입되었습니다. #27939 (Amos Bird). - 새로운
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).
빌드/테스트/패키징 개선
- Stress Test에서 Thread Fuzzer를 활성화했습니다. Thread Fuzzer는 thread 스케줄링의 더 다양한 순서를 테스트해 더 많은 잠재적 문제를 발견할 수 있게 해주는 ClickHouse 기능입니다. 이 변경으로 #9813이 해결되었습니다. 이 변경으로 #9814가 해결되었습니다. 이 변경으로 #9515가 해결되었습니다. 이 변경으로 #9516가 해결되었습니다. #27538 (alexey-milovidov).
- 테스트 환경용 새 로그 레벨
test를 추가했습니다. 기본trace보다도 더 자세한 정보를 출력합니다. #28559 (alesapin). - CMake 구성 단계에서 git status 정보를 출력합니다. #28047 (Braulio Valdivielso Martínez).
- ubuntu apt 리포지토리를 일시적으로 ru.archive.ubuntu.com 미러로 전환했습니다. 기본 리포지토리인 archive.ubuntu.com이 CI 환경에서 응답하지 않기 때문입니다. #28016 (Ilya Yatsishin).
ClickHouse 릴리스 v21.9, 2021-09-09
하위 호환되지 않는 변경 사항
Decimal타입의 텍스트 표현에서 후행 0을 출력하지 않습니다. 예시: scale이 6인 decimal은1.230000대신1.23으로 출력됩니다. 이 변경으로 #15794가 해결됩니다. 애플리케이션이 어떤 방식으로든 후행 0에 의존하고 있었다면 약간의 비호환성이 발생할 수 있습니다. 출력 형식의 serialization은output_format_decimal_trailing_zeros설정으로 제어할 수 있습니다.toString구현과String으로 캐스팅하는 동작은 조건 없이 변경됩니다. #27680 (alexey-milovidov).- 상태가 다른 매개변수를 사용하는 집계 함수로 생성된 경우, 해당 집계 함수 상태에
-Mergecombinator가 적용된 매개변수형 집계 함수를 적용할 수 없도록 변경했습니다. 예를 들어fooState(42)(x)의 상태는fooMerge(s)또는fooMerge(123)(s)로 finalize할 수 없으며,fooMerge(42)(s)처럼 매개변수를 명시적으로 지정해야 하고 그 값도 같아야 합니다. 이는 finalize에만 매개변수를 사용하는quantile,sequence*등의 일부 특수 집계 함수에는 영향을 주지 않습니다. #26847 (tavplubix). - clickhouse-local에서는 포트가 있는 로컬 주소를 항상 원격 주소로 처리합니다. #26736 (Raúl Marín).
- 일부 복잡한 쿼리에서 컬럼 alias가 표현식 이름과 동일할 경우 잘못된 cast가 발생할 수 있던 문제를 수정했습니다. 이 변경으로 #25447가 해결됩니다. 또한 #26914도 해결됩니다. 이 수정은 하위 호환되지 않을 수 있습니다. 이름이 같은 서로 다른 표현식이 있으면 예외가 발생합니다.
enable_optimize_predicate_expression이 설정된 일부 드문 경우에는 문제가 될 수 있습니다. #26639 (alexey-milovidov). - 이제 스칼라 subquery는 해당 타입이
널 허용일 수 있으면 항상널 허용결과를 반환합니다. 빈 subquery의 결과는Null이어야 하므로 이 변경이 필요합니다. 이전에는 호환되지 않는 타입에 대한 오류가 발생할 수 있었습니다(타입 추론은 스칼라 subquery를 실행하지 않으므로 널 비허용 타입을 사용할 수 있었습니다). 빈 결과를 반환하는 스칼라 subquery 중널 허용로 변환할 수 없는 것(Array또는Tuple등)은 이제 오류를 발생시킵니다. #25411을 수정합니다. #26423 (Nikolai Kochetov). - here document용 구문을 도입했습니다. 예시
SELECT $doc$ VALUE $doc$. #26671 (Maksim Kita). 이 변경은 쿼리에$를 포함한 식별자가 있는 경우 하위 호환되지 않습니다 #28768. - 이제 인덱스가
isNull및isNotNull을 포함한널 허용타입을 처리할 수 있습니다. #12433 및 #12455 (Amos Bird), 그리고 #27250 (Azat Khuzhin). 하지만 이 변경에는 디스크 저장 포맷 변경이 수반되므로, 새 서버는 이전 데이터를 읽을 수 있어도 이전 서버는 새 데이터를 읽을 수 없습니다. 또한MINMAXdata skipping indices가 있는 경우 새 인덱스는.idx2확장자를 사용하고 이전에는.idx를 사용했기 때문에Data after mutation/merge is not byte-identical오류가 발생할 수 있습니다. 따라서 이 경우 기존의 모든 레플리카 업데이트를 미루지 않아야 합니다. 그렇지 않으면 이전 레플리카(<21.9)가 21.9+의 새 레플리카에서 데이터를 다운로드할 때 다운로드한 part에 인덱스를 적용할 수 없습니다.
새 기능
- 함수의 단락 평가 구현으로 #12587가 해결되었습니다. 함수의 단락 평가를 구성하기 위한 설정
short_circuit_function_evaluation이 추가되었습니다. #23367 (Kruglov Pavel). - INTERSECT, EXCEPT, ANY, ALL 연산자 지원이 추가되었습니다. #24757 (Kirill Ershov). (Kseniia Sumarokova).
- AES-CTR 알고리즘을 사용해 가상 파일 시스템 수준의 암호화(데이터 저장 시 암호화) 지원을 추가했습니다. #24206 (Latysheva Alexandra). (Vitaly Baranov) #26733 #26377 #26465.
- 동의어 확장 기능에 토큰화, 어간 추출, 표제어 추출, 검색을 위한 자연어 처리(NLP) 함수를 추가했습니다. #24997 (Nikolay Degterinsky).
- S2 geometry 라이브러리 통합이 추가되었습니다. #24980 (Andr0901). (Nikita Mikhaylov).
- SQLite 테이블 엔진, 테이블 함수, 데이터베이스 엔진이 추가되었습니다. #24194 (Arslan Gumerov). (Kseniia Sumarokova).
MySQL,PostgreSQL,ClickHouse,JDBC,Cassandra딕셔너리 소스에 사용자 지정 쿼리 지원이 추가되었습니다. #1270이 해결되었습니다. #26995 (Maksim Kita).- ZooKeeper를 통해 사용자, 역할, 행 정책, 쿼터 및 설정 프로필의 공유(복제) 저장소를 추가했습니다. #27426 (Kevin Michel).
- 압축 알고리즘을 자동으로 선택하는
INTO OUTFILE용 압축을 추가했습니다. #3473를 해결합니다. #27134 (Filatenkov Artur). SELECT ... INTO OUTFILE와 마찬가지로INSERT ... FROM INFILE을 추가했습니다. #27655 (Filatenkov Artur).complex_key_range_hashed딕셔너리가 추가되었습니다. #22029가 해결되었습니다. #27629 (Maksim Kita).- JOIN ON 절에서 표현식을 지원합니다. #21868을 해결합니다. #24420 (Vladimir C).
- 클라이언트가 서버에 연결되면 서버에 이미 수집된 모든 경고에 대한 정보를 받습니다. (
--no-warnings옵션을 사용하면 이 기능을 비활성화할 수 있습니다.) 서버 구성에 관한 경고를 수집하기 위해system.warnings테이블을 추가했습니다. #26246 (Filatenkov Artur). #26282 (Filatenkov Artur). - WITH 및 SELECT의 상수 표현식을 집계 함수 매개변수에서 사용할 수 있도록 합니다. #10945를 해결합니다. #27531 (abel-cheng).
tupleToNameValuePairs를 추가했습니다. 이 함수는 named tuple을 키-값 쌍의 배열로 변환합니다. #27505 (Braulio Valdivielso Martínez).- 가져오기/내보내기용
bzip2압축 방식을 지원합니다. #22428을 해결했습니다. #27377 (Nikolay Degterinsky). bitmapSubsetOffsetLimit(bitmap, offset, cardinality_limit)함수를 추가했습니다. 이 함수는 비트맵의 부분집합을 생성하고,offset만큼 건너뛴 뒤 결과를cardinality_limit개로 제한합니다. #27234 (DHBin).system.users에default_database컬럼을 추가했습니다. #27054 (kevin wan).- 테이블 함수 ‘cluster’ 및 ‘clusterAllReplicas’에서
cluster매크로를 지원합니다. #26913 (polyprogrammist). - 새로운 함수
currentRoles(),enabledRoles(),defaultRoles()를 추가했습니다. #26780 (Vitaly Baranov). - 새로운 함수
currentProfiles(),enabledProfiles(),defaultProfiles(). #26714 (Vitaly Baranov). - 현재 쿼리의 (initial_)query_id를 반환하는 함수를 추가했습니다. 이 변경으로 #23682가 해결되었습니다. #26410 (Alexey Boykov).
REPLACE GRANT기능이 추가되었습니다. #26384 (Caspian).EXPLAIN쿼리에 이제EXPLAIN ESTIMATE ...모드가 추가되어 MergeTree 테이블에서 읽는 행 수, 마크, 파트 정보를 표시합니다. #23941를 해결합니다. #26131 (fastio).system.zookeeper_log테이블이 추가되었습니다. ZooKeeper 클라이언트의 모든 작업이 이 테이블에 기록됩니다. #25449을 구현합니다. #26129 (tavplubix).HDFS스토리지의ReplicatedMergeTree를 위한 zero-copy 복제. #25918 (Zhichang Yu).Arrow,ORC,Parquet입력 형식에서 Nested 타입을 struct의 배열로 삽입할 수 있습니다. #25902 (Kruglov Pavel).- 새 데이터 유형
Date32를 추가했습니다(Int32로 데이터 저장).DateTime64와 동일한 날짜 범위를 지원하며, Parquet의 date32를 ClickHouseDate32로 로드할 수 있습니다. 또한toDate와 유사한 새 함수toDate32를 추가했습니다. #25774 (LiuNeng). - 기본 데이터베이스를 설정할 수 있습니다. #25268. #25687 (kevin wan).
MongoDB엔진에 연결 문자열 옵션을 받고 SSL 연결을 지원하는 선택적 매개변수를 추가했습니다. #21189를 해결합니다. #21041를 해결합니다. #22045 (Omar Bazaraa).
실험적 기능
- 컬럼을 압축하는 대신 암호화하는 코덱
AES_128_GCM_SIV를 추가했습니다. #19896 (PHO). 다시 작성될 예정이므로 사용하지 마십시오. MaterializeMySQL의 이름을MaterializedMySQL로 변경했습니다. #26822 (tavplubix).
성능 개선
clock_gettime시스템 호출 횟수를 줄여max_execution_time = 0일 때 빠른 쿼리의 성능을 개선했습니다. #27325 (filimonov).- date time 관련 비교를 특수화해 성능을 개선했습니다. 이 변경으로 #27083가 수정되었습니다. #27122 (Amos Bird).
- 동일한 파일에 대한 동시 읽기에서 파일 디스크립터를 공유합니다. Linux에서는 눈에 띄는 성능 차이가 없습니다. 하지만 일반적인 서버에서는 열린 파일 수가 크게(10~100배) 줄어들어 운영이 더 수월해집니다. #26214를 참조하십시오. #26768 (alexey-milovidov).
- 많은 수의 컬럼이 있는 테이블에서 읽기가 필요한 짧은 쿼리의 지연 시간을 개선했습니다. #26371 (Anton Popov).
- 쿼리를 분석할 때 인덱스용 Set을 생성하지 않도록 했습니다. #26365 (Raúl Marín).
- 네이티브 표현을 사용해 널 허용 정수 타입의 SUM을 벡터화했습니다 (David Manzanares, Raúl Marín). #26248 (Raúl Marín).
Enum타입 컬럼이 포함된 표현식을 컴파일합니다. #26237 (Maksim Kita).- 집계 함수
groupBitOr,groupBitAnd,groupBitXor를 컴파일합니다. #26161 (Maksim Kita). - 비어 있는 DEFAULT 컬럼을 읽을 때 블록 크기 예측을 개선해 메모리 사용량을 줄였습니다. #17317을 해결합니다. #25917 (Vladimir Chebotarev).
ORDER BY primary_key가 있는 쿼리에서 메모리 사용량과 읽는 행 수를 줄였습니다. #25721 (Anton Popov).distributed_push_down_limit를 기본적으로 활성화했습니다. #27104 (Azat Khuzhin).timeZone이 상수 값일 때toTimeZone이 단조성을 갖도록 해, 다음과 같은 SQL을 사용할 때 파티션 가지치기를 지원합니다. #26261 (huangzhaowei).
개선
- 윈도우 함수를 정식으로 사용할 수 있도록 합니다.
allow_experimental_window_functions설정을 제거합니다. #27184 (Alexander Kuzmenkov). - 분 단위가 아닌 시간대 오프셋에 대한 호환성을 개선했습니다. #27080 (Raúl Marín).
File테이블의 file descriptor가 일반 파일이면 이를 여러 번 읽을 수 있도록 허용했습니다. 이에 따라 stdin이clickhouse-local --query "SELECT * FROM table UNION ALL SELECT * FROM table" ... < file와 같은 일반 파일인 경우,clickhouse-local에서 stdin을 여러 번 읽을 수 있습니다(여러 SELECT 쿼리 또는 서브쿼리를 사용하는 경우). 이로써 #11124가 해결되었습니다. (alexey-milovidov)와 공동 작성했습니다. #25960 (BoloniniD).- 중복된 인덱스 분석을 제거하고, 프로젝션 분석 중 유효하지 않은 limit 검사가 수행될 수 있는 문제를 방지했습니다. #27742 (Amos Bird).
- HTTP 요청 본문으로 쿼리 매개변수를 전달할 수 있도록 했습니다. #27706 (Hermano Lustosa).
- 파티션 표현식에서
arrayJoin을 사용할 수 없도록 했습니다. #27648 (Raúl Marín). - 인증 실패 시 클라이언트 IP 주소를 기록합니다. #27514 (Misko Lee).
- GRPC 프로토콜에서 바이너리 데이터에 문자열 대신 바이트를 사용합니다. #27431 (Vitaly Baranov).
- HTTP 포트가 설정되지 않은 상태에서 TCP 포트로 HTTP 요청을 보내려고 하면 오류 메시지가 포함된 응답을 반환합니다. #27385 (Braulio Valdivielso Martínez).
- 내부 사용을 위한
_CAST함수를 추가했습니다. 이 함수는 유형의 널 허용 여부를 보존하지 않지만, 일반 CAST는cast_keep_nullable설정에 따라 이를 보존합니다. #12636을 해결합니다. #27382 (Kseniia Sumarokova). system.query_log에 추가로 포맷된 쿼리를 기록하는 설정log_formatted_queries를 추가했습니다.normalizeQuery및normalizeQueryKeepNames같은 함수는 더 나은 성능을 위해 쿼리를 parse하거나 포맷하지 않으므로, 정규화된 쿼리 분석에 유용합니다. #27380 (Amos Bird).- hyperscan 관련 함수(예:
multiMatchAny)에서 지나치게 큰 정규식이 사용되지 않도록max_hyperscan_regexp_length및max_hyperscan_regexp_total_length두 설정을 추가했습니다. #27378 (Amos Bird). - 이제 비트맵 집계 함수가 사용하는 메모리가 메모리 제한에 포함됩니다. 이로써 #26555가 해결되었습니다. #27252 (alexey-milovidov).
- S3 프록시 리졸버에 10초 캐시를 추가했습니다. #27216 (ianton-ru).
- 전역 뮤텍스를 각 regexp 생성별로 분리했습니다. 이를 통해 대규모 regexp 생성 때문에 다른 관련 스레드가 차단되는 일을 줄이는 데 도움이 됩니다. #27211 (Amos Bird).
- PostgreSQL 데이터베이스 엔진의 스키마를 지원합니다. #27166를 해결했습니다. #27198 (Kseniia Sumarokova).
- clickhouse-client의 메모리 사용량을 추적합니다. #27191 (Filatenkov Artur).
- 쿼리 시작에 실패하더라도
system.query_log에query_kind를 기록하도록 개선했습니다. #27182 (Amos Bird). - 레플리카 이름을 레플리카 활성 여부에 매핑하는 컬럼
replica_is_active가 테이블system.replicas에 추가되었습니다. #27138을 닫습니다. #27180 (Maksim Kita). - Web UI에서 서버 URI를 통해 쿼리 설정을 전달할 수 있게 했습니다. #27177 (kolsys).
MaxPushedDDLEntryID라는 새 메트릭을 추가했습니다. 이 메트릭은 현재 노드가 ZooKeeper에 푸시한 최대 DDL 엔트리 ID를 나타냅니다. #27174 (Fuwang Hu).clickhouse-keeper가 znode를 생성할 때 존재 조건 및 빈 문자열 노드 판별을 개선했습니다. #27125 (小路).- 머지 JOIN이 오른쪽 빈 집합도 올바르게 처리합니다. #27078 (Vladimir C).
- 이제 함수는 세그먼트 수준 상수로 사용할 수 있습니다. 즉, 일부 분산 테이블의 Context에서 실행되면 일반 컬럼을 생성하고, 그렇지 않으면 상수 값을 생성합니다. 대표적인 함수는 다음과 같습니다:
hostName(),tcpPort(),version(),buildId(),uptime(), 등입니다. #27020 (Amos Bird). extractAllGroupsHorizontal개선 - 선택적 세 번째 인수를 통해 행별 일치 항목 수의 상한을 설정할 수 있습니다. #26961 (Vasily Nemkov).RocksDB통계를 system.rocksdb 테이블을 통해 노출합니다. ClickHouse 설정에서 rocksdb 옵션(rocksdb...키)을 읽어옵니다. 참고: ClickHouse는 RocksDB에 의존하지 않으며, 이는 추가로 제공되는 통합 스토리지 엔진 중 하나일 뿐입니다. #26821 (Azat Khuzhin).- 내부 RocksDB 로그의 상세 수준을 낮췄습니다. 참고: ClickHouse는 RocksDB에 의존하지 않으며, RocksDB는 추가 통합 스토리지 엔진 중 하나일 뿐입니다. 이로써 #26252가 해결되었습니다. #26789 (alexey-milovidov).
- 기본 역할 변경은 새 세션에만 영향을 줍니다. #26759 (Vitaly Baranov).
- Docker에서는 기본적으로 Watchdog가 비활성화되어 있습니다. Ctrl+C를 처리하지 못하던 문제를 수정했습니다. #26757 (Mikhail f. Shiryaev).
SET PROFILE는 전달된 profile에 제약 조건이 설정된 경우, 이제 해당 제약 조건도 함께 적용합니다. #26730 (Vitaly Baranov).KILL QUERY요청 처리 방식이 개선되었습니다. #26675 (Raúl Marín).mapPopulatesSeries함수가Map타입을 지원합니다. #26663 (Ildus Kurbangaliev).skip_unavailable_shards에서 발생하던 과도한(x2) 연결 시도를 수정했습니다. #26658 (Azat Khuzhin).- 연결에 실패할 때(예: EMFILE)
clickhouse-benchmark가 멈춘 상태가 되지 않도록 했습니다. #26656 (Azat Khuzhin). - Kafka 엔진이 더 많은 스레드를 사용할 수 있도록 개선했습니다. #26642 (feihengye).
clickhouse-benchmark에 라운드 로빈 지원을 추가했습니다(통계 보고서를 제외하면 일반적인 다중 호스트/포트 실행과 차이가 없습니다). #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).- protobuf를 3.17.3 버전으로 업데이트했습니다. 변경 이력은 https://github.com/protocolbuffers/protobuf/releases에서 확인할 수 있습니다. #26424 (Ilya Yatsishin).
- 대규모 클러스터에서 테일 레이턴시를 완화할 수 있도록
use_hedged_requests설정을 활성화했습니다. #26380 (alexey-milovidov). - 사용자 허용 호스트 목록에 존재하지 않는 호스트가 포함된 경우의 동작을 개선했습니다. #26368 (ianton-ru).
- CREATE TABLE을 통해
Distributed디렉터리 모니터 설정을 지정할 수 있는 기능이 추가되었습니다(즉,CREATE TABLE dist (key Int) Engine=Distributed(cluster, db, table) SETTINGS monitor_batch_inserts=1및 이와 유사한 구문). #26336 (Azat Khuzhin). - 서버 주소가 웹 UI의 origin과 다른 경우, 해당 서버 주소를 웹 UI의 이력 URL에 저장합니다. 이 변경으로 #26044가 해결됩니다. #26322 (alexey-milovidov).
sleep/sleepEachRow호출에 대한 프로파일링 이벤트를 추가했습니다. #26320 (Raúl Marín).- 서로 다른 클러스터 간에 세그먼트 연결을 재사용할 수 있도록 했습니다. 또한
cluster테이블 함수를 사용할 때 새 연결을 생성하지 않도록 합니다. #26318 (Amos Bird). - 기본값이 설정된 매개변수로 오래된 임시 디렉터리를 정리하는 실행 주기를 제어할 수 있습니다. #26212. #26313 (fastio).
- 함수
range가 생성하는 데이터 양의 안전 임계값을 조정할 수 있도록 설정function_range_max_elements_in_block을 추가했습니다. 이로써 #26303이 해결되었습니다. #26305 (alexey-milovidov). - 샘플링 시점이 아니라 테이블 생성 시점에 hash function을 검사하도록 했습니다. 잘못된 샘플링 컬럼으로 테이블을 생성했더라도 샘플링을 전혀 사용하지 않았다면, 예외 없이 server를 시작할 수 있도록 이 설정을 비활성화하는 MergeTree 설정을 추가했습니다. #26256 (zhaoyu).
- 지정된 String 컬럼이 기본 bytes 대신 string으로 Avro에 저장되도록
output_format_avro_string_column_pattern설정을 추가했습니다. #22414을 구현합니다. #26245 (Ilya Golshtein). Log및TinyLog테이블의system.columns테이블에 컬럼 크기 정보를 추가했습니다. 이로써 #9001이 해결되었습니다. #26241 (Nikolay Degterinsky).- 사용자 지정 디스크 구성이 있고 일부 디스크에
detached디렉터리가 없더라도system.detached_parts테이블을 쿼리할 때 예외가 발생하지 않도록 개선했습니다. 이로써 #26078이 해결되었습니다. #26236 (alexey-milovidov). now(),today()와 같은 상수 표현식을 포함해 키에 비결정적 함수가 있는지 확인합니다. 이로써 #25875가 해결되었습니다. 이로써 #11333가 해결되었습니다. #26235 (alexey-milovidov).- PostgreSQL 테이블 엔진에서
timestamp및timestamptz데이터 타입을DateTime64로 변환합니다. #26234 (jasine). - 더 적합한 프로젝션 후보를 선택할 수 있도록 프로젝션에 대해 IN 인덱스 분석을 적극적으로 적용했습니다. #26218 (Amos Bird).
- 스칼라 함수가 전달된 경우
IN에서 GLOBAL 키워드를 제거했습니다. 이전 버전에서는 사용자가GLOBAL IN f(x)를 지정하면 예외가 발생했습니다. #26217 (Amos Bird). - 예외 메시지에 오류 ID(
BAD_ARGUMENTS등)를 추가했습니다. 이로써 #25862가 해결되었습니다. #26172 (alexey-milovidov). - clickhouse-local의
--progress옵션에서 잘못된 출력이 발생하는 문제를 수정했습니다. 진행 표시줄은 100%에 도달하면 clickhouse-client와 동일하게 지워집니다. #17484를 해결했습니다. #26128 (Kseniia Sumarokova). merge_selecting_sleep_ms설정을 추가했습니다. #26120 (lthaooo).- 한 블록 선행 읽기와 함께 사용하는 복잡한 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일 때만 적용되던 동작이었지만, 이제는 항상 동일하게 동작합니다. - 이제 종속 뷰가 읽기 진행 상황을 Context에 보고합니다. #25714 (Raúl Marín). - 분산 쿼리 실행이 끝난 후 연결 드레이닝을 비동기적으로 수행합니다. 백그라운드에서 연결을 회수하는 worker 수를 지정하는 새로운 서버 설정
max_threads_for_connection_collector가 추가되었습니다. 풀이 가득 차면 연결 드레이닝은 동기적으로 수행되지만, 이전과는 조금 다릅니다. 클라이언트에 EOS를 보낸 뒤 드레이닝이 수행되며, 쿼리는 충분한 데이터를 받는 즉시 성공으로 처리되고, 예외는 클라이언트에 반환되지 않고 로그에 기록됩니다. 설정drain_timeout도 추가되었습니다(기본값은 3초). 연결 드레이닝은 타임아웃이 발생하면 연결을 끊습니다. #25674 (Amos Bird). - 구성에서 여러 include를 지원합니다. 여러 소스의 users 구성과 remote servers 구성을 include할 수 있습니다.
<include />요소에from_zk,from_env또는incl속성을 지정하면 해당 치환값으로 대체됩니다. #24404 (nvartolomei). insert_distributed_one_random_shard = 1에서 분산 테이블에 여러 block을 삽입할 때의 문제를 수정했습니다. 이는 사소한 기능입니다. 개선 사항으로 분류했습니다. #23140 (Amos Bird).Map유형에서LowCardinality및FixedString키/값을 지원합니다. #21543 (hexiaoting).- 로컬 디스크 구성을 다시 로드할 수 있도록 했습니다. #19526 (taiyang-li).
버그 수정
- 레플리카 간 불일치를 일으킬 수 있는 몇 가지 버그를 수정했습니다. #27808 (tavplubix).
DROP PART에서 드물게 발생해 오류Unexpected merged part intersects drop range를 일으킬 수 있는 버그를 수정했습니다. #27807 (alesapin).- Kafka의 NULL (tombstone) 메시지가 유입될 때 일부 포맷에서 발생하던 비정상 종료를 방지합니다. #19255를 해결합니다. #27794 (filimonov).
- 서브쿼리에서 union distinct 사용 시 컬럼 필터링 문제를 수정했습니다. #27578를 해결했습니다. #27689 (Kseniia Sumarokova).
arrayHas와 같은 함수를DateTime및DateTime64처럼 서로 다른 비숫자 타입의LowCardinality(Nullable(...))배열에 적용할 때 발생하던 잘못된 타입 캐스팅 문제를 수정했습니다. 이전 버전에서는 잘못된 캐스팅이 발생했습니다. 새 버전에서는 예외가 발생합니다. 이로써 #26330이 해결되었습니다. #27682 (alexey-milovidov).- 연결이 닫히지 않던 postgresql 테이블 함수를 수정했습니다. #26088을 해결합니다. #27662 (Kseniia Sumarokova).
Unexpected merged part ... intersecting drop range ...오류가 발생하는 또 다른 경우를 수정했습니다. #27656 (tavplubix).Distributed테이블의 별칭 컬럼 관련 오류를 수정했습니다. #27652 (Vladimir C).max_memory_usage*를 0이 아닌 값으로 설정한 뒤에는 다시 0(무제한)으로 되돌릴 수 없었습니다. 이 문제가 수정되었습니다. #27638 (tavplubix).- 구성 요소로 시간 값을 만들 때 발생하던 언더플로를 수정했습니다. #27193를 해결합니다. #27605 (Vasily Nemkov).
- 일부 파트에서 컬럼이 누락된 경우 projection을 머티리얼라이즈하는 중 발생하던 크래시를 수정했습니다. 이로써 #27512가 해결되었습니다. #27528 (Amos Bird).
BackgroundMessageBrokerSchedulePoolTask메트릭을 수정했습니다. 오타였을 가능성이 있습니다. #27452 (Ben).- 세그먼트가 0개인 경우의 분산 쿼리 및 집계 문제를 수정했습니다. #27427 (Azat Khuzhin).
/proc/meminfo에 KB 접미사가 없을 때의 호환성. #27361 (Mike Kot).- 행 수준 보안, PREWHERE 및 LowCardinality 필터가 적용된 쿼리에서 잘못된 결과가 반환되는 문제를 수정했습니다. #27179를 수정합니다. #27329 (Nikolai Kochetov).
- 이전 문법으로 생성된 MergeTree 테이블의 파티션 ID에 대한 잘못된 유효성 검사를 수정했습니다. #27328 (tavplubix).
- 병렬 포맷(CSV / TSV) 사용 시 발생하던 MySQL 프로토콜 문제를 수정했습니다. #27326 (Raúl Marín).
- 샘플링이 있는 쿼리에서 발생하는
Cannot find column오류를 수정했습니다. 해당 문제는 #24574에서 도입되었습니다. #26522를 수정했습니다. #27301 (Nikolai Kochetov). 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_push_down_limit = 1또는optimize_distributed_group_by_sharding_key = 1조합에서 발생하는distributed_group_by_no_merge = 2관련 문제를 수정했습니다. #27249 (Azat Khuzhin). 이는 사실상 아무도 사용하지 않는 드문 설정 조합입니다.- 비복제 MergeTree에서 잘못된 파티션 때문에 멈춰 있던 mutation 문제를 수정했습니다. #27248 (Azat Khuzhin).
- 모호한 경우, 람다 함수에서는 다른 별칭이나 식별자보다 해당 인수를 우선합니다. #27235 (Raúl Marín).
- 머지 조인의 컬럼 구조를 수정하고 #27091을 해결했습니다. #27217 (Vladimir C).
- 드물게
system.detached_parts테이블에 일부 파트의 잘못된 정보가 포함되는 경우가 있었는데, 이 문제가 수정되었습니다. #27114을 수정했습니다. #27183 (tavplubix). - 빈 배열을 사용할 때
multiSearch*함수에서 발생하는 초기화되지 않은 메모리 문제를 수정하고, #27169를 해결했습니다. #27181 (Vladimir C). - GRPCServer의 동기화 문제를 수정했습니다. 이 PR은 #27024를 해결합니다. #27064 (Vitaly Baranov).
cache,complex_key_cache,ssd_cache,complex_key_ssd_cache구성 파싱을 수정했습니다.cache유형이 아닌 Dictionaries에서는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와 같은 쿼리에서 파티션 ID의 유효성을 검사합니다. #25718을 수정했습니다. #26963 (alesapin). - 일부 경우 여러 조인을 사용할 때 발생하는 “알 수 없는 컬럼 이름” 오류를 수정하고 #26899를 해결했습니다. #26957 (Vladimir C).
- 사용자 지정 TLD를 읽을 때 버퍼가 더 작거나 파일이 더 크면 처리가 중단되던 문제를 수정했습니다. #26948 (Azat Khuzhin).
DEFAULT표현식이 없는 다른 비구체화 컬럼을DEFAULT컬럼이 참조할 때 발생하는 오류Missing columns: 'xxx'를 수정했습니다. #26591을 해결했습니다. #26900 (alesapin).library딕셔너리 소스의library-bridge에서 딕셔너리 키 로딩 문제를 수정했습니다. #26834 (Kseniia Sumarokova).- 일부 combinator를 적용할 때 집계 함수 매개변수가 손실되어
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).
- 간혹
SET ROLE이 올바르게 동작하지 않는 문제가 있었는데, 이 PR에서 이를 수정했습니다. #26707 (Vitaly Baranov). - 병렬 포맷팅 관련 몇 가지 수정 사항입니다 (https://github.com/ClickHouse/ClickHouse/issues/26694). #26703 (Raúl Marín).
- 윈도우 함수에서 발생할 수 있는 잠재적인
nullptr역참조 문제를 수정했습니다. 이 변경으로 #25276가 해결되었습니다. #26668 (Alexander Kuzmenkov). - 파일이 비어 있을 때 clickhouse-client 이력 파일 변환(3년 전 clickhouse-client 버전의 포맷에서 업그레이드하는 경우) 문제를 수정했습니다. #26589 (Azat Khuzhin).
- 일부 상황에서 표시될 수 있는 groupBitmapAnd/Or/Xor의 잘못된 함수명을 수정했습니다. #26557 (Amos Bird).
- clickhouse-server Docker 엔트리포인트의
chown명령 검사 로직을 업데이트했습니다. 이로써 Kubernetes에서 클러스터 파드 재시작이 실패하거나 타임아웃되던 버그를 수정했습니다. #26545 (Ky Li). RabbitMQ설정이 시작되지 않은 경우RabbitMQ종료 중 발생하는 크래시를 수정했습니다. #26504를 해결합니다. #26529 (Kseniia Sumarokova).- 딕셔너리 이름 또는 데이터베이스 이름을 따옴표로 감싼 경우
CREATE DICTIONARY쿼리에서 발생하던 문제를 수정했습니다. #26491을 해결합니다. #26508 (Maksim Kita). - 컬럼 별칭을 재작성한 후 깨지던 컬럼 이름 해석을 수정했습니다. 이 변경으로 #26432가 해결됩니다. #26475 (Amos Bird).
- 퍼징 중 발견된 msan 충돌 일부를 수정했습니다. #22517을 해결했습니다. #26428 (Nikolai Kochetov).
partial_merge_join에서 무한히 이어지는 비조인 block stream 문제를 수정해 #26325를 해결했습니다. #26374 (Vladimir C).- 삭제된 사용자로 로그인할 때 발생할 수 있는 비정상 종료 문제를 수정합니다. 이 PR은 #26073를 해결합니다. #26363 (Vitaly Baranov).
- 여러 컬럼을 처리할 때
optimize_distributed_group_by_sharding_key를 수정했습니다(optimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1이 설정되어 있고 세그먼트 분할 키 표현식에 여러 컬럼이 포함된 경우 잘못된 결과가 발생함). #26353 (Azat Khuzhin). - 드물게 발생하던, 손실된 레플리카 복구 과정에서 레플리카 간 데이터가 불일치할 수 있는 버그를 수정했습니다. #26321 (tavplubix).
- 내부 버퍼 끝에 이스케이프 시퀀스가 있는 경우 zstd 압축 해제를 수정했습니다(zstd 프레이밍 포맷으로 import/export할 때이며, 테이블 데이터와는 무관함). #26013을 해결합니다. #26314 (Kseniia Sumarokova).
- 합계가 포함된 join의 논리적 오류를 수정하고 #26017을 해결했습니다. #26250 (Vladimir C).
system.stack_trace테이블의thread_name컬럼에서 불필요한 줄바꿈을 제거했습니다. 이로써 #24124가 수정되었습니다. #26210 (alexey-milovidov).- 둘 이상의
untuple표현식을 사용할 때 발생할 수 있는 잠재적 크래시를 수정했습니다. #26179 (alexey-milovidov). - Enum에 0값이 정의되어 있지 않은 경우에도 널 허용 Enum의
toString에서 예외를 발생시키지 않도록 수정, #25806 해결. #26123 (Vladimir C). - 쿼리 실행 중 예외가 발생했을 때 ClickHouse가 전송하는 MySQL 프로토콜 패킷의 잘못된
sequence_id를 수정했습니다. 이 문제로 인해 MySQL 클라이언트가 ClickHouse 서버와의 연결(connection)을 재설정할 수 있었습니다. #21184를 수정했습니다. #26051 (tavplubix). cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom()가 상수에 대해 잘못된 타입을 반환해optimize_skip_unused_shards가 작동하지 않던 문제를 수정했습니다:. #26041 (Azat Khuzhin).- prewhere와 함께 일반 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).- non-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로 처리한 뒤 DateTime의 시간대를 반영해 DateTime으로 변환합니다. 이는 Arrow와 Parquet에서 Date가 UInt16으로 직렬화되기 때문입니다. 이제 GraphiteMergeTree는 시간 반올림에 시간대를 반영합니다. #5098를 수정했습니다. 작성자: @alexey-milovidov. #15408 (alesapin).
clickhouse-test는 Jinja2 Template을 사용하는 SQL 테스트를 지원합니다. #26579 (Vladimir C).clang-13으로 빌드할 수 있도록 지원을 추가했습니다. 이로써 #27705가 해결됩니다. #27714 (alexey-milovidov). #27777 (Sergei Semin)- 특정 CPU 명령어 집합 포함 여부를 선택해 빌드할 수 있도록 CMake 옵션을 추가했습니다. 이는 #17469 및 #27509를 위한 것입니다. #27508 (alexey-milovidov).
- 동적 라이브러리 사용 시 보조 프로그램의 링크 문제를 수정했습니다. #26958 (Raúl Marín).
- RocksDB를
2021-07-16master로 업데이트했습니다. #26411 (alexey-milovidov).
ClickHouse 릴리스 v21.8, 2021-08-12
업그레이드 참고 사항
- 새 버전에서는 시스템 로그 테이블(
system.query_log,system.query_thread_log,system.processes,system.opentelemetry_span_log)에Map데이터 타입을 사용합니다. 이 테이블들은 새 데이터 타입으로 자동 생성됩니다. 기존 쿼리와의 호환성을 위해 가상 컬럼이 생성됩니다. #18698을 해결했습니다. #23934, #25773 (hexiaoting, sundy-li, Maksim Kita). 버전 21.8에서 이전 버전으로 다운그레이드하려면 로그가 있는 system 테이블을 수동으로 정리해야 합니다./var/lib/clickhouse/data/system/*_log를 확인하십시오.
새로운 기능
- SQL/JSON 표준의 일부를 지원합니다. #24148 (l1tsolaiki, Kseniia Sumarokova).
- CPU 사용량, 디스크 사용량, 메모리 사용량, IO, 네트워크, 파일, 로드 평균, CPU 주파수, 열 센서, EDAC 카운터, 시스템 uptime에 관한 공통 시스템 메트릭을
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). - 기존 data skipping indices에 대한 정보를 담은
system.data_skipping_indices테이블을 도입했습니다. #7659를 해결했습니다. #25693 (Dmitry Novik). bin/unbin함수를 추가했습니다. #25609 (zhaoyu).mapAdd및mapSubtract함수에서Map과UInt128,Int128,UInt256,Int256타입을 지원합니다. #25596 (Ildus Kurbangaliev).DISTINCT ON (columns)표현식을 지원하며, #25404를 해결했습니다. #25589 (Zijie Lu).- 사용자 지정 설정을 기본값으로 재설정하고 테이블 메타데이터에서 제거하는 기능을 추가했습니다. 이를 통해 시스템/설정의 기본값을 몰라도 변경 사항을 롤백할 수 있습니다. #14449를 해결했습니다. #17769 (xjewer).
EXPLAIN PIPELINE graph = 1쿼리를 제출하면 Web UI에서 파이프라인을 그래프로 렌더링합니다. #26067 (alexey-milovidov).
성능 개선
- 집계 함수를 컴파일할 수 있습니다. 활성화하려면
compile_aggregate_expressions옵션을 사용하세요. #24789 (Maksim Kita). - 컬럼이 많은 테이블을 읽어야 하는 짧은 쿼리의 지연 시간을 개선했습니다. #26371 (Anton Popov).
개선사항
- 시스템 로그 테이블(
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함수를 구현했습니다. #26094 (zhaoyu).empty및notEmpty함수에서UUID유형의 인수를 지원합니다.UUID가 모두 0인 경우 비어 있는 것으로 간주됩니다(nil UUID). #3446을 해결합니다. #25974 (zhaoyu).- MySQL 프로토콜에
SET SQL_SELECT_LIMIT지원을 추가했습니다. #17115를 종료합니다. #25972 (Kseniia Sumarokova). - 네트워크 상호작용에 대한 계측을 더 추가했습니다. recv/send 바이트용 Counter를 추가하고, recv/send 횟수용 Gauge를 추가했습니다. 누락된 문서를 추가했습니다. #5897을 종료했습니다. #25962 (alexey-milovidov).
optimize_move_to_prewhere_if_final설정을 추가했습니다. 쿼리에FINAL이 있으면move_to_prewhere최적화는optimize_move_to_prewhere와optimize_move_to_prewhere_if_final이 모두 활성화된 경우에만 적용됩니다. #8684를 종료합니다. #25940 (Kseniia Sumarokova).- JOIN된 테이블에서 복잡한 따옴표로 묶인 식별자를 허용합니다. #17861을 해결했습니다. #25924 (alexey-milovidov).
Nested데이터 타입에서 유니코드(예: 중국어, 키릴 문자) 컴포넌트를 지원합니다. #25594를 해결합니다. #25923 (alexey-milovidov).aggregate_functions_null_for_empty와 함께quantiles*함수가 작동할 수 있도록 허용합니다. #25892를 해결합니다. #25919 (alexey-milovidov).- 매개변수화된 집계 함수의 매개변수로 리터럴뿐만 아니라 임의의 상수 표현식(예:
1 + 2)도 사용할 수 있습니다. 또한 매개변수화된 쿼리(예:{param:UInt8})의 쿼리 매개변수를 매개변수화된 집계 함수 내에서도 사용할 수 있습니다. #11607을 해결합니다. #25910 (alexey-milovidov). - 잘못된
Date를 파싱하려고 할 때 예외가 올바르게 발생하도록 했습니다. #6481을 해결합니다. #25909 (alexey-milovidov). - 구성에서 여러 include를 지원합니다. 여러 소스의 사용자 구성과 원격 서버 구성을 포함할 수 있습니다.
from_zk,from_env또는incl속성이 있는<include />요소를 추가하면 해당 대체 값으로 치환됩니다. #24404 (nvartolomei). "null"이라는 이름의 컬럼(백틱 또는 큰따옴표로 지정해야 함)과ON CLUSTER가 포함된 쿼리를 지원합니다. #24035를 해결합니다. #25907 (alexey-milovidov).JSONExtract가 이제LowCardinality,Decimal,UUID를 지원합니다. #24606을 해결했습니다. #25900 (Kseniia Sumarokova).readline포맷의 이력 파일을replxx포맷으로 변환합니다. #25888 (Azat Khuzhin).DROP PART이후 또는 빈 파트가 백그라운드에서 삭제된 후 서로 겹치는 파트가 발생할 수 있는 문제를 수정했습니다. #25884 (alesapin).ReplicatedMergeTree테이블에서 손실된 파트 처리가 개선되었습니다.ReplicationQueue에서 드물게 발생하는 불일치를 수정했습니다. #10368을 수정했습니다. #25820 (alesapin).- 작업 디렉터리를 읽을 수 없는 경우에도 clickhouse-client를 시작할 수 있도록 합니다. #25817 (ianton-ru).
Merge스토리지에서 발생하는 “사용 가능한 컬럼이 없습니다” 오류를 수정했습니다. #25801 (Azat Khuzhin).- MySQL Engine이 이제 MySQL과 ClickHouse 사이에서 컬럼 주석을 교환할 수 있도록 지원합니다. #25795 (Storozhuk Kostiantyn).
- 빈 집합에서
GROUP BY상수 동작의 일관성 문제를 수정했습니다. #6842를 해결합니다. #25786 (Kseniia Sumarokova). ReplicatedMergeTree에서DROP PARTITION및TRUNCATE시 해당 파티션에서 이미 실행 중인 머지를 취소합니다. #17151을 해결했습니다. #25684 (tavplubix).- MaterializeMySQL에서 ENUM` 데이터 타입을 지원합니다. #25676 (Storozhuk Kostiantyn).
- JOIN에서 구체화된 컬럼 및 별칭 컬럼을 지원하고, #13274를 해결했습니다. #25634 (Vladimir C).
ALTER TABLE ... DETACH와 백그라운드 머지 사이에서 발생할 수 있는 논리적 경쟁 상태를 수정했습니다. #25605 (Azat Khuzhin).NetworkReceiveElapsedMicroseconds메트릭에 클라이언트가INSERT할 데이터를 보내기를 기다리는 시간이 올바르게 포함되도록 했습니다. #9958를 해결했습니다. #25602 (alexey-milovidov).- S3 및 HDFS에 대한
TRUNCATE TABLE을 지원합니다. #25530을 해결했습니다. #25550 (Kseniia Sumarokova). - 백그라운드 작업 실행(머지, 뮤테이션, fetches)에 사용하는 풀의 스레드 수를 변경할 수 있도록 config를 동적으로 다시 로드하는 기능을 지원합니다. #25548 (Nikita Mikhaylov).
JSONExtract를 사용해 문자열이 아닌 요소도 문자열로 추출할 수 있도록 했습니다. 이는 #25414 관련 변경입니다. #25452 (Amos Bird).StorageMerge의Database인수에서 정규식 사용을 지원합니다. #776를 종료했습니다. #25064 (flynn).- 웹 UI: 값이 URL로 보이면 링크를 자동으로 생성합니다. #25965 (alexey-milovidov).
- Centos 8과 같이
systemd를 사용하는 시스템에서도sudo service clickhouse-server start가 동작하도록 했습니다. #14298을 해결했습니다. #17799을 해결했습니다. #25921 (alexey-milovidov).
버그 수정
- 일부 경우
SET ROLE의 잘못된 동작을 수정했습니다. #26707 (Vitaly Baranov). - 윈도우 함수에서 발생할 수 있는
nullptr역참조 문제를 수정했습니다. #25276 문제를 수정했습니다. #26668 (Alexander Kuzmenkov). groupBitmapAnd/Or/Xor의 잘못된 함수명을 수정했습니다. #26557 문제를 해결했습니다 (Amos Bird).- RabbitMQ 설정이 시작되지 않은 상태에서 RabbitMQ 종료 시 발생하던 충돌을 수정했습니다. #26504을 해결했습니다. #26529 (Kseniia Sumarokova).
- 딕셔너리 이름 또는 데이터베이스 이름을 따옴표로 감싼 경우
CREATE DICTIONARY쿼리에서 발생하던 문제를 수정했습니다. #26491을 해결했습니다. #26508 (Maksim Kita). - 컬럼 별칭을 다시 작성한 후 깨진 이름 확인 문제가 수정되었습니다. #26432를 수정했습니다. #26475 (Amos Bird).
partial_merge_join종료 시 조인되지 않은 블록 스트림이 무한히 이어지는 문제를 수정했습니다 #26325. #26374 (Vladimir C).- 삭제된 사용자로 로그인할 때 발생할 수 있는 크래시를 수정했습니다. #26073를 수정했습니다. #26363 (Vitaly Baranov).
- 여러 컬럼을 사용하는 경우의
optimize_distributed_group_by_sharding_key를 수정했습니다(optimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1사용 시 세그먼트 분할 키 표현식에 여러 컬럼이 포함되어 있으면 잘못된 결과가 발생함). #26353 (Azat Khuzhin). CAST에서Date를DateTime(또는DateTime64)으로 변환할 때DateTime타입의 시간대를 사용하지 않았습니다. 이로 인해Date와DateTime간 비교에도 영향이 있을 수 있습니다.Date와DateTime의 공통 타입을 추론할 때도 해당 시간대를 사용하지 않았습니다. 이 문제는if함수와 배열 생성 결과에 영향을 주었습니다. #24128을 해결합니다. #24129 (Maksim Kita).- 레플리카 간 불일치를 초래할 수 있는 유실된 레플리카 복구 과정의 드문 버그를 수정했습니다. #26321 (tavplubix).
- 내부 버퍼 끝에 이스케이프 시퀀스가 있을 때 zstd 압축 해제가 올바르게 동작하도록 수정했습니다. #26013을 해결합니다. #26314 (Kseniia Sumarokova).
- totals가 포함된 JOIN의 논리 오류를 수정하고 #26017을 해결했습니다. #26250 (Vladimir C).
system.stack_trace테이블의thread_name컬럼에서 불필요한 줄바꿈을 제거했습니다. #24124를 수정했습니다. #26210 (alexey-milovidov).LowCardinality컬럼의joinGet문제를 수정하고, #25993를 해결했습니다. #26118 (Vladimir C).validate_polygons설정이 꺼져 있을 경우pointInPolygon에서 발생할 수 있는 충돌 문제를 수정했습니다. #26113 (alexey-milovidov).- 존재하지 않는 원격 디렉터리를 순회할 때 발생하던 예외를 수정했습니다. #26087 (ianton-ru).
- ZooKeeper client의
abort로 인해 드물게 발생하던 server 충돌을 수정했습니다. #25813을 해결합니다. #26079 (alesapin). - 일부 경우
right subquery join에서 스레드 수를 잘못 추정하던 문제를 수정했습니다. #24075를 해결했습니다. #26052 (Vladimir C). - 쿼리 실행 중 예외 발생 시 ClickHouse가 전송하는 MySQL 프로토콜 패킷의 잘못된
sequence_id를 수정했습니다. 이 문제로 인해 MySQL 클라이언트가 ClickHouse 서버와의 연결을 재설정할 수 있었습니다. #21184를 수정했습니다. #26051 (tavplubix). PREWHERE와 함께 일반 projection을 사용할 때 발생할 수 있는 헤더 불일치 문제를 수정했습니다. #26020. #26038 (Amos Bird).- 정수 키를 가진
Map을JSON으로 포맷할 때 발생하던 문제를 수정했습니다. #25982 (Anton Popov). - 쿼리 프로파일러 스택 언와인딩 중 발생할 수 있는 교착 상태를 수정했습니다. #25968을 수정했습니다. #25970 (Maksim Kita).
- 잘못된 인수로
dictGet()을 호출할 때 발생하는 충돌을 수정했습니다. #25913 (Vitaly Baranov). - PostgreSQL 엔진의
scram-sha-256authentication 문제를 수정했습니다. #24516을 해결합니다. #25906 (Kseniia Sumarokova). - background pool이 가득 찼을 때 백그라운드 작업의 백오프가 지나치게 길어지는 문제를 수정했습니다. #25836 관련 수정입니다. #25893 (alesapin).
- 기본 페이지 크기가 아닌 경우의 ARM 예외 처리를 수정했습니다. #25512, #25044, #24901, #23183, #20221, #19703, #19028, #18391, #18121, #17994, #12483를 해결했습니다. #25854 (Maksim Kita).
remote()에서 함수 없이 지정된 컬럼의 sharding_key를 수정했습니다(이전에는select * from remote('127.1', system.one, dummy)로 인해Unknown column: dummy, there are only columns .오류가 발생했습니다). #25824 (Azat Khuzhin).MaterializeMySQL에서 조회할 때 발생하던Not found column ...및Missing column ...오류를 수정했습니다. #23708, #24830, #25794를 해결합니다. #25822 (tavplubix).optimize_skip_unused_shards_rewrite_in을UInt64가 아닌 타입에서 수정했습니다(그렇지 않으면 잘못된 세그먼트를 선택하거나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).- StorageMerge에서 별칭이 있는 테이블에 접근할 수 있도록 했습니다. #6051를 해결했습니다. #25694 (Kseniia Sumarokova).
- 일부 경우 dict join이 느리게 동작하던 문제를 수정하고, #24209를 해결했습니다. #25618 (Vladimir C).
- TTL 표현식에 포함되는 컬럼의
ALTER MODIFY COLUMN관련 문제를 수정했습니다. #25554 (Anton Popov). PREWHERE에서 UInt8이 아닌 유형으로 발생하는 assertion 오류를 수정하고 #19589를 해결했습니다. #25484 (Vladimir C).- 퍼징으로 발견된 일부 msan 크래시를 수정했습니다. #22517을 해결합니다. #26428 (Nikolai Kochetov).
clickhouse-serverDocker 엔트리포인트에서chowncmd 확인 로직을 업데이트했습니다. 이 변경으로 Kubernetes에서 발생하는 ‘cluster pod restart failed (or timeout)’ 오류를 해결합니다. #26545 (Ky Li).
ClickHouse 릴리스 v21.7, 2021-07-09
하위 호환되지 않는 변경 사항
- 명시적으로 정의된 큰 Set이 있는 쿼리의 성능을 개선했습니다. 호환성 설정
legacy_column_name_of_tuple_literal를 추가했습니다. 21.7 미만 버전에서 그 이상의 버전으로 클러스터를 롤링 업데이트하는 동안에는 이 값을true로 설정하는 것이 좋습니다. 그렇지 않으면 업데이트 중IN절에 명시적으로 정의된 Set이 있는 분산 쿼리가 실패할 수 있습니다. #25371 (Anton Popov). - clickhouse-keeper(ZooKeeper의 실험적 대안)의 최대 버퍼 크기에 대해 이전/이후 버전과 호환되지 않는 변경이 있습니다. 나중에 하는 것보다 지금(프로덕션 적용 전) 하는 편이 더 낫습니다. #25421 (alesapin).
새 기능
- XML의 대안으로 YAML 포맷 구성을 지원합니다. 이로써 #3607이 해결되었습니다. #21858 (BoloniniD).
- 데이터는 (아마도) 존재하지만 ZooKeeper 메타데이터가 손실된 경우 복제된 테이블을 복원하는 방법을 제공합니다. #13458을 해결합니다. #13652 (Mike Kot).
- Arrow/Parquet/ORC에서 struct와 맵을, Arrow 입력/출력 포맷에서 딕셔너리를 지원합니다. 새로운 설정
output_format_arrow_low_cardinality_as_dictionary를 도입했습니다. #24341 (Kruglov Pavel). - 딕셔너리에서
Array타입 지원을 추가했습니다. #25119 (Maksim Kita). - 함수
bitPositionsToArray를 추가했습니다. #23792를 해결합니다. 작성자: [Kevin Wan] (@MaxWk). #25394 (Maksim Kita). - ‘Friday’ 또는 ‘April’과 같은 이름을 반환하는 함수
dateName을 추가했습니다. 작성자: [Daniil Kondratyev] (@dankondr). #25372 (Maksim Kita). - 컬럼을 JSON 표현으로 직렬화하는
toJSONString함수를 추가했습니다. #25164 (Amos Bird). - 이제
query_log에는 새 컬럼 2개(initial_query_start_time,initial_query_start_time_microsecond)가 추가되어, 분산 쿼리가 있는 경우 해당 시작 시간을 기록합니다. #25022 (Amos Bird). - 집계 함수
segmentLengthSum을 추가했습니다. #24250 (flynn). - 모든 IN/JOIN을 기본적으로 GLOBAL IN/JOIN으로 설정하는 새 불리언 설정
prefer_global_in_and_join을 추가했습니다. #23434 (Amos Bird). Join테이블 엔진에서ALTER DELETE쿼리를 지원합니다. #23260 (foolchi).- 집계 함수
quantileBFloat16과 이에 대응하는quantilesBFloat16및medianBFloat16을 추가했습니다. 이는 상대 오차가 0.390625%를 넘지 않는 매우 단순하고 빠른 분위수 추정기입니다. 이로써 #16641이 해결되었습니다. #23204 (Ivan Novitskiy). flow analysis에 유용한 함수sequenceNextNode()를 구현했습니다. #19766 (achimbab).
실험적 기능
- HDFS 상의 가상 파일 시스템 지원이 추가되었습니다. #11058 (overshov) (Kseniia Sumarokova).
- 이제 clickhouse-keeper(실험적인 ZooKeeper 대안)에서 ZooKeeper와 유사한
digestACL을 지원합니다. #24448 (alesapin).
성능 개선
- 읽는 데이터 양을 줄이기 위해 일부 함수를 서브컬럼을 읽는 방식으로 변환하는 최적화가 추가되었습니다. 예를 들어, 구문
col IS NULL은 서브컬럼col.null을 읽는 것으로 변환됩니다. 이 최적화는optimize_functions_to_subcolumns설정으로 활성화할 수 있으며, 현재는 기본적으로 비활성화되어 있습니다. #24406 (Anton Popov). - 더 많은 컬럼을 가능한 별칭 표현식으로 재작성하도록 개선했습니다. 이를 통해 프로젝션과 같은 더 나은 최적화가 가능해질 수 있습니다. #24405 (Amos Bird).
bloom_filter유형의 인덱스는 상수 배열이 포함된hasAny함수 표현식에 사용할 수 있습니다. 이 변경으로 다음 이슈가 해결됩니다: #24291. #24900 (Vasily Nemkov).- RabbitMQ 큐가 비어 있을 때 읽기 시도를 다시 예약하도록 지수 백오프를 추가했습니다. (ClickHouse는 RabbitMQ에서 데이터를 가져오는 기능을 지원합니다.) 다음 이슈를 해결합니다: #24340. #24415 (Kseniia Sumarokova).
개선
- 복제에 사용할 네트워크 대역폭을 제한할 수 있도록 했습니다. 두 개의 Replicated*MergeTree 설정인
max_replicated_fetches_network_bandwidth및max_replicated_sends_network_bandwidth를 추가하여 테이블의 복제 fetch/send 최대 속도를 제한할 수 있습니다.default사용자 profile에 서버 전역 설정 두 개(max_replicated_fetches_network_bandwidth_for_server및max_replicated_sends_network_bandwidth_for_server)도 추가하여 모든 테이블의 복제 최대 속도를 제한할 수 있습니다. 이 설정은 완벽하게 정확히 적용되지는 않습니다. 기본적으로 비활성화되어 있습니다. #1821을 수정합니다. #24573 (alesapin). - ODBC 및 Library 브리지에 리소스 제약 및 격리를 적용했습니다. 브리지 프로세스에는 별도의
clickhouse-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).- 서버 시작 시 파티션 ID가 올바르지 않은 파트는 제거되지 않고 항상 분리된 상태가 되었습니다. #25070. #25166 (Nikolai Kochetov).
- 백그라운드 스케줄 풀 크기를 128로 늘렸습니다(
background_schedule_pool_size설정). 이를 통해 Zookeeper 연결이 느릴 때 복제 큐가 멈추는 현상을 방지할 수 있습니다. #25072 (alesapin). - 백그라운드에서 한 번에 머지할 수 있는 파트 수를 제한하는 MergeTree 설정
max_parts_to_merge_at_once를 추가했습니다.OPTIMIZE FINAL쿼리에는 영향을 주지 않습니다. #1820을 수정했습니다. #24496 (alesapin). - 파티션 프루닝에서
NOT IN연산자를 사용할 수 있도록 했습니다. #24894 (Amos Bird). 127.0.1.1과 같은 IPv4 주소를 로컬 주소로 인식합니다. 이 변경은 다소 논란의 여지가 있으며 #23504를 해결합니다. Michael Filimonov가 이 기능을 테스트할 예정입니다. #24316 (alexey-milovidov).- MaterializeMySQL로 생성된 ClickHouse 데이터베이스에 이제 구체화된 MySQL 데이터베이스의 모든 컬럼 주석이 포함됩니다(이 기능은 실험적입니다). #25199 (Storozhuk Kostiantyn).
- MySQL 스토리지 엔진용 설정(
connection_auto_close/connection_max_tries/connection_pool_size)을 추가했습니다. #24146 (Azat Khuzhin). - 분산 엔진의 시작 시간을 단축했습니다. #25663 (Azat Khuzhin).
- 분산 테이블 개선. internal_replication=true일 때 dirname에서 레플리카를 제거했습니다(cluster가 설정된 Distributed에 레플리카 수와 관계없이 INSERT할 수 있으며, 이전에는 15개의 레플리카까지만 지원되었고 그보다 많으면 async blocks용 디렉터리를 생성하는 동안 ENAMETOOLONG으로 실패했습니다). #25513 (Azat Khuzhin).
LowCardinality에Interval유형 지원이 추가되었습니다. 이는 일부 표현식의 중간 값에 필요합니다. #21730을 해결합니다. #25410 (Vladimir).sequenceMatch및sequenceCount함수의 시간 조건에==연산자가 추가되었습니다. 예: 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). - 함수
if의 분기에서Decimal및Int타입 지원이 추가되었습니다. 이로써 #20549가 해결되었습니다. 이로써 #10142가 해결되었습니다. #25283 (alexey-milovidov). clickhouse-client프롬프트를 변경하고 재연결할 때 메시지를 표시합니다. 이로써 #10577이 해결되었습니다. #25281 (alexey-milovidov).- 집계 함수
topK의 메모리 추적을 수정했습니다. 이로써 #25259 이슈가 해결되었습니다. #25260 (alexey-milovidov). - IDN 호스트(예:
example.рф)에서topLevelDomain이 빈 문자열을 반환하던 문제를 수정했습니다. #25103 (Azat Khuzhin). - 런타임에 Linux 커널 버전을 감지합니다(중첩 epoll이 제대로 작동하려면
async_socket_for_remote/use_hedged_requests에 이 기능이 필요하며, 그렇지 않으면 원격 쿼리가 멈출 수 있습니다). #25067 (Azat Khuzhin). - 분산 쿼리에서
optimize_skip_unused_shards=1일 때(세그먼트 분할 키) IN (단일 요소 튜플)과 같은 조건으로 세그먼트를 건너뛸 수 있게 했습니다. (여러 요소로 이루어진 튜플은 이미 지원되었습니다. 단일 요소 튜플은 리터럴로 파싱되기 때문에 동작하지 않았습니다.) #24930 (Amos Bird). - S3 오류 로그 메시지를 개선했으며, 키와 버킷이 비어 있는 경우 더 이상 공백이 두 번 들어가지 않습니다. #24897 (Vladimir Chebotarev).
- 일부 쿼리는 여러 단계의 의미 분석이 필요합니다. 이 경우
IN에 대해 이미 생성된 Set을 재사용해 보십시오. #24874 (Amos Bird). insert_distributed_sync에max_distributed_connections를 적용합니다(그렇지 않으면 대규모 클러스터에서 동기 삽입 시max_thread_pool_size가 소진될 수 있습니다). #24754 (Azat Khuzhin).- 스칼라 서브쿼리에서
Limit for rows or bytes to read exceeded와 같은 오류가 숨겨지지 않도록 개선했습니다. #24545 (nvartolomei). - String-to-Int parser를 더 엄격하게 하여
toInt64('+')가 예외를 던지도록 했습니다. #24475 (Amos Bird). SSD_CACHE를 DDL 쿼리로 생성하는 경우user_files디렉터리 내부에서만 생성할 수 있습니다. #24466 (Maksim Kita).- 삽입 쿼리에서 기본 스키마가 아닌 스키마를 지정할 수 있도록 PostgreSQL 지원이 추가되었습니다. #24149를 해결합니다. #24413 (Kseniia Sumarokova).
- IPv6 주소 해석 문제를 수정했습니다(즉,
select * from remote('[::1]', system.one)가 수정됨). #24319 (Azat Khuzhin). - 여러 줄 모드에서 서브쿼리가 있는 FROM 절의 후행 공백을 수정하고, 쿼리 출력도 사람이 읽기 더 쉬운 형태로 약간 변경했습니다. #24151 (Azat Khuzhin).
- 분산 테이블이 개선되었습니다. 실패 시(예: 메모리 제한, 손상) 분산 Batch를 분할할 수 있는 기능이
distributed_directory_monitor_split_batch_on_failure에 추가되었습니다(기본값은 OFF). #23864 (Azat Khuzhin). Join테이블 엔진의 컬럼 이름 충돌을 처리합니다. #20309를 해결합니다. #23769 (Vladimir).- stdin으로 데이터를 전달할 때
clickhouse-local의File테이블 엔진과clickhouse-client의 INSERT 쿼리에서 진행 상황을 표시합니다. #18209을 해결했습니다. #23656 (Kseniia Sumarokova). clickhouse-copier의 버그를 수정하고 개선했습니다. 서로 다른(하지만 호환 가능한 스키마를 가진) 테이블도 복사할 수 있도록 했습니다. #9159를 해결했습니다. ReplacingMergeTree를 복사하는 테스트를 추가했습니다. #22711을 해결했습니다. 컬럼의 TTL 및 데이터 스키핑 인덱스를 지원합니다. 내부 분산 테이블을 생성하기 위해 이 정보는 단순히 제거되며(기반 테이블에는 TTL과 스킵 인덱스가 유지됨), #19384를 해결했습니다. MATERIALIZED 및 ALIAS 컬럼도 복사할 수 있도록 했습니다. 일부 경우에는 이것이 유용할 수 있습니다(예: 해당 컬럼이 PRIMARY KEY에 포함된 경우). 이제 작업 구성에서allow_to_copy_alias_and_materialized_columns속성을 true로 설정하면 이를 허용할 수 있습니다. #9177를 해결했습니다. [#11007] (https://github.com/ClickHouse/ClickHouse/issues/11007)을 해결했습니다. #9514를 해결했습니다. 보조 테이블을 이동하기 전에 원본 테이블의 파티션을 삭제할 수 있도록 작업 구성에allow_to_drop_target_partitions속성을 추가했습니다. #20957를 해결했습니다.OPTIMIZE DEDUPLICATE쿼리를 제거했습니다. 이는ALTER TABLE MOVE PARTITION이 여러 번 재시도되었고, 일반 MergeTree 테이블에는 중복 제거 기능이 없기 때문에 필요했던 우회 방법이었습니다. #17966를 해결했습니다. 진행 상황을task_path + /status경로의 ZooKeeper 노드에 JSON 포맷으로 기록합니다. #20955를 해결했습니다. 인수 없는 ReplicatedTables를 지원합니다. #24834 .#23518 (Nikita Mikhaylov).- S3에서 읽기 재시도 사이에 백오프를 적용한 대기 시간을 추가했습니다. #23461 (Vladimir Chebotarev).
Distributed테이블에 INSERT할 때insert_allow_materialized_columns설정(materialized 컬럼 허용)이 적용됩니다. #23349 (Azat Khuzhin).- 분산 쿼리에서 LIMIT 푸시다운을 지원하도록 했습니다. #23027 (Azat Khuzhin).
- 여러 S3 볼륨을 사용할 때 발생하던 zero-copy 복제 문제를 수정했습니다 (#22679 수정). #22864 (ianton-ru).
- 사용자가 운영 체제에 사용 가능한 아무 포트나 요청했을 때, 바인딩된 실제 포트 번호를 확인해 로그 메시지에 표시하도록 했습니다. #25569 (bnaecker).
attndims가 일부 경우 올바르게 동작하지 않아 postgres 배열 변환 결과가 n차원 배열이 아니라String데이터 타입으로 처리되던 문제를 수정했습니다. #24804을 해결했습니다. #25538 (Kseniia Sumarokova).- MySQL, PostgreSQL, ODBC에서 시간대가 포함된 DateTime 변환을 수정했습니다. #5057를 해결합니다. #25528 (Kseniia Sumarokova).
- 서로 다른 테이블의 KILL MUTATION을 구분하도록 개선했습니다(예기치 않은
Cancelled mutating parts오류를 수정). #25025 (Azat Khuzhin). - 버킷 루트에 S3 디스크를 선언할 수 있도록 했습니다(S3 가상 파일 시스템은 현재 개발 중인 실험적 기능입니다). #24898 (Vladimir Chebotarev).
- 분산 테이블에서 서브컬럼(예: 튜플의 구성 요소)을 읽을 수 있도록 했습니다. #24472 (Anton Popov).
- MySQL 호환성 프로토콜 관련 기능:
user함수가 올바른 결과를 반환하도록 합니다. #25697을 해결합니다. #25697 (sundyli).
버그 수정
- 하위 호환성을 개선했습니다. 파티션 키에 사용하는 경우 이전 modulo 함수 버전을 사용합니다. #23508을 해결했습니다. #24157 (Kseniia Sumarokova).
- 메모리가 매우 부족한 서버에서 재시작하지 않으면 머지를 수행할 수 없게 되는 매우 드문 버그를 수정했습니다. #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 연결이 끊겼다가 복구된 후 레플리카가 복제되면, 해당 복제 큐에 outdated 항목이 포함될 수 있었습니다. 복제 큐에 서로 겹치는 virtual parts가 포함되어 있을 때 발생하던 assertion 실패를 수정했습니다. 일부 데이터 파트가 손실된 경우 드물게 발생할 수 있습니다. 프로세스를 종료하는 대신 로그에 오류를 출력합니다. #24777 (tavplubix).
- 쿼리 계획의 표현식 푸시다운 최적화에서 누락된
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). - 배열이 기본 키(primary key)에 사용될 때
ARRAY JOIN이 포함된 쿼리에서 발생하는Key expression contains comparison between inconvertible types오류를 수정했습니다. #8247을 해결합니다. #25546 (Anton Popov). WITH TOTALS및WITH FILL쿼리의 잘못된 합계를 수정했습니다. #20872를 수정했습니다. #25539 (Anton Popov).- 클러스터 구성을 다시 로드하는 동시에
system.clusters를 쿼리할 때 발생하던 데이터 레이스를 수정했습니다. #25737 (Amos Bird). - 데이터베이스 간에
Distributed테이블을 이동할 때 발생하던No such file or directory오류를 수정했습니다. #24971를 해결했습니다. #25667 (tavplubix). REPLACE PARTITION은 소스 파티션이 비어 있는 드문 경우 무시될 수 있었습니다. 이 문제가 수정되었습니다. #24869. #25665 (tavplubix).- 드물게 일부 레플리카가 큐에 등록된 DDL 쿼리를 건너뛸 수 있게 하는
Replicated데이터베이스 엔진의 버그를 수정했습니다. #24805 (tavplubix). EXPLAIN AST를 쿼리 없이 사용할 때 발생하는 널 포인터 역참조 문제를 수정했습니다. #25631 (Nikolai Kochetov).- 빈 파트 자동 삭제 대기 문제를 수정했습니다. 이 문제로 인해 백그라운드 풀(background pool)이 가득 차고 복제가 멈출 수 있었습니다. #23315 (Anton Popov).
- S3 가상 파일 시스템에 저장된 테이블의 복원 문제를 수정했습니다(실험적 기능으로, 아직 프로덕션 환경에서 사용할 준비가 되지 않았습니다). #25601 (ianton-ru).
Decimal256사용 시Arrow포맷에서 발생하던 nullptr 역참조 문제를 수정했습니다.Arrow포맷에서Decimal256을 지원하도록 추가했습니다. #25531 (Kruglov Pavel).- 전처리된 설정 파일 이름 앞에 과도한 언더스코어가 붙는 문제를 수정했습니다. #25431 (Vitaly Baranov).
clickhouse-copier도구 수정: copier 작업 구성에 sharding_key가 없을 때 발생하는 segfault를 수정했습니다. #25419 (Nikita Mikhaylov).- 포맷된 쿼리를 올바르게 따옴표 처리하도록 하여 DDL에서 사용할 때
REPLACE컬럼 변환기를 수정했습니다. 이로써 #23925가 해결되었습니다. #25391 (Amos Bird). quantileDeterministic함수 및 이와 유사한 함수에서 비결정적 동작이 발생할 수 있는 문제를 해결했습니다. 이로써 #20480이 해결되었습니다. #25313 (alexey-milovidov).SummingMergeTree에서SimpleAggregateFunction(LowCardinality)를 지원합니다. #25134를 해결합니다. #25300 (Nikolai Kochetov).- 예외 메시지 “min/maxMap에서 Array/Tuple을 합산할 수 없음”이 발생하는 논리 오류를 수정했습니다. #25298 (Kruglov Pavel).
- IN에
LowCardinality인수를 사용한 쿼리에서 발생하던 오류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). - CSVWithNames 포맷을 사용해 일부 컬럼을 삽입할 때 발생하던 오류를 수정했습니다. #25129을 해결합니다. #25169 (Nikita Mikhaylov).
FINAL이 있는SELECT에서는 테이블 프로젝션을 사용하지 마십시오. 아직 지원되지 않습니다. #25163 (Amos Bird).- 테이블의 파티션 키에
UUID를 사용한 경우, 21.5까지 업데이트한 후 발생할 수 있는 파트 손실 문제를 수정했습니다. (UUID를 파티션 키에 사용하는 것은 권장되지 않습니다.) #25070을 수정했습니다. #25127 (Nikolai Kochetov). - cross join 및
joined_subquery_requires_alias = 0이 설정된 쿼리에서 발생하던 충돌을 수정했습니다. #24011을 해결합니다. #25082 (Nikolai Kochetov). empty column was returned by function mapContains오류를 일으키던 mapContains 함수의 상수 맵 관련 버그를 수정했습니다. #25077를 해결합니다. #25080 (Kruglov Pavel).a UInt32 ALIAS a + 1또는b UInt32 MATERIALIZED b처럼 자기 자신을 참조하는 컬럼이 있는 테이블은 생성할 수 없도록 변경했습니다. #24910, #24292를 수정했습니다. #25059 (alesapin).- 비어 있지 않은
GROUP BY키가 있는 집계 PROJECTION을 사용해 비어 있는 키로GROUP BY하는 쿼리를 실행할 때 잘못된 결과가 나오던 문제를 수정했습니다. #25055 (Amos Bird). - Protobuf 형식에서 분할된 중첩 메시지 직렬화 문제를 수정했습니다. 이 PR은 #24647을 해결합니다. #25000 (Vitaly Baranov).
- 분산 쿼리의 LIMIT/OFFSET 설정을 수정했습니다(원격 노드에서는 무시). #24940 (Azat Khuzhin).
Arrow포맷에서 발생할 수 있는 힙 버퍼 오버플로우 문제를 수정했습니다. #24922 (Kruglov Pavel).- DiskS3에서 파일을 읽을 때 발생할 수 있는 ‘Cannot read from istream at offset 0’ 오류를 수정했습니다(S3 가상 파일 시스템은 현재 개발 중인 실험적 기능이므로 프로덕션에서는 사용하지 않아야 합니다). #24885 (Pavel Kovalenko).
- 분산 materialized view를 조인할 때 “Missing columns” 예외가 발생하던 문제를 수정했습니다. #24870 (Azat Khuzhin).
- PostgreSQL 호환 프로토콜에서
NULL값을 허용합니다. #22622를 해결했습니다. #24857 (Kseniia Sumarokova). - mutation이 아직 메모리에 로드되지 않은 상태에서 mutation을 기다리는 동안
Mutation was killed예외가 클라이언트에 전달될 수 있는 버그를 수정했습니다. #24809 (alesapin). - 일부 데이터 타입(예:
AggregateFunction(groupArraySample(N), T)))이 비결정적으로 동작할 수 있었던 랜덤 생성기 상태 역직렬화 버그를 수정했습니다. #24538 (tavplubix). - 다른 집계 상태에서 uniqXXXXStates를 생성하지 못하도록 했습니다. #24523 (Raúl Marín). 이후 관련 문제의 근본 원인을 실제로 제거하여 다시 허용했습니다. (alexey-milovidov).
CREATE .. AS SELECT쿼리에서 튜플 사용 문제를 수정했습니다. #24464 (Anton Popov).Buffer테이블의 총 바이트 수 계산을 수정했습니다. 현재 ClickHouse 버전에서는 버퍼 플러시 중 total_writes.bytes 카운터가 과도하게 감소합니다. 이로 인해 카운터 오버플로우가 발생하며, 플러시 후 얼마 지나지 않아 totalBytes가 약 17.44 EB의 값을 반환합니다. #24450 (DimasKovas).- toWeek 함수의 단조성에 대한 잘못된 정보를 수정했습니다. 이로써 #24422가 해결됩니다. 이 버그는 https://github.com/ClickHouse/ClickHouse/pull/5212 에서 도입되었으며, 이후 더 정교한 파티션 프루너로 인해 드러났습니다. #24446 (Amos Bird).
- 사용자 authentication이 LDAP로 관리되는 경우, LDAP 그룹이 존재하지 않는 로컬 역할에 매핑될 때 LDAP 역할 (re)mapping 중 발생할 수 있는 잠재적 교착 상태를 수정했습니다. #24431 (Denis Glazachev).
- “multipart/form-data” 메시지에서는 boundary 앞의 CRLF를 해당 boundary의 일부로 간주합니다. #23905를 수정했습니다. #24399 (Ivan).
- intersect 가짜 파트가 있는 파티션 삭제 문제를 수정했습니다. 드물게 현재 block 번호보다 mutation 버전이 더 큰 파트가 있을 수 있습니다. #24321 (Amos Bird).
- Ordinary 데이터베이스에서 Atomic 데이터베이스로 materialized view를 이동할 때 발생하던 버그를 수정했습니다(
RENAME TABLE쿼리). 이제 내부 테이블도 materialized view와 함께 새 데이터베이스로 이동합니다. #23926를 수정했습니다. #24309 (tavplubix). - 빈 HTTP 헤더를 허용합니다. #23901을 해결합니다. #24285 (Ivan).
- Memory 테이블에서 뮤테이션(ALTER UPDATE/DELETE)이 정상적으로 처리되도록 수정했습니다. #24274를 해결했습니다. #24275 (flynn).
- JOIN 출력의 컬럼 LowCardinality 속성이 입력과 동일해지도록 수정하고, #23351, #20315을 해결했습니다. #24061 (Vladimir).
- Kafka 테이블(table)에 대한 수정입니다. 이전에 동일한 consumer의 할당이 비어 있었던 경우, Engine = Kafka에서 failover 동작 시 소비를 시작하지 못하던 버그를 수정했습니다. #21118을 해결했습니다. #21267 (filimonov).
빌드/테스트/패키징 개선
- CI에
darwin-aarch64(Mac M1 / Apple Silicon) 빌드를 추가했습니다 #25560 (Ivan). 또한 문서와 웹사이트에도 링크를 추가했습니다 (alexey-milovidov). - 실행 파일에 바이너리 리소스를 크로스 플랫폼 방식으로 임베딩하는 기능을 추가했습니다. Illumos에서도 동작합니다. #25146 (bnaecker).
- 퍼징을 개선하기 위해 스트레스 테스트에 JOIN 관련 옵션을 추가했습니다. #25200 (Vladimir).
- osx에서 S3 모듈을 포함한 빌드를 활성화했습니다 #25217. #25218 (kevin wan).
- JDBC 브리지를 다루는 통합 테스트 케이스를 추가했습니다. #25047 (Zhichun Wu).
- 통합 테스트 구성에서 딕셔너리에 대한 특별 처리를 정리하고, 남아 있던 딕셔너리 수동 설정을 제거했습니다. #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).
- 설치 스크립트의 TOCTOU 오류를 수정했습니다. #25277 (alexey-milovidov).
ClickHouse 릴리스 21.6, 2021-06-05
하위 호환되지 않는 변경 사항
- uniqState / uniqHLL12State / uniqCombinedState / uniqCombined64State는
UUID유형에서 호환되지 않는 상태를 생성합니다. #33607.
업그레이드 참고 사항
zstd압축 라이브러리가 v1.5.0으로 업데이트되었습니다. 복제 중 “checksum does not match” 메시지가 표시될 수 있습니다. 이 메시지는 압축 알고리즘 업데이트로 인해 예상되는 것이므로 무시해도 됩니다. 이 메시지는 정보 제공용이며, 바람직하지 않은 동작을 의미하지는 않습니다.compile_expressions설정이 기본적으로 활성화됩니다. 다양한 시나리오에서 충분히 테스트되었지만, 서버에서 바람직하지 않은 동작이 발견되면 이 설정을 꺼 보십시오.UUID유형의 값은 정수와 비교할 수 없습니다. 예를 들어uuid != 0대신uuid != '00000000-0000-0000-0000-000000000000'를 입력하십시오.
새 기능
- Postgres 스타일의 CAST 연산자(
::)를 추가했습니다. 예:[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).- 테이블 주석을 구현했습니다. #23225를 해결했습니다. #23548 (flynn).
clickhouse-local에서 DDL 쿼리를 사용한 딕셔너리 생성을 지원합니다. #22354를 해결했습니다.DETACH DICTIONARY PERMANENTLY를 지원합니다.Atomic데이터베이스 엔진에서EXCHANGE DICTIONARIES를 지원합니다.RENAME DICTIONARY를 사용해 데이터베이스 간 딕셔너리 이동을 지원합니다. #23436 (Maksim Kita).- ClickHouse에서 Theta Sketch 지원을 위해 집계 함수
uniqTheta를 추가했습니다. #23894. #22609 (Ping Yu). - 함수
splitByRegexp가 추가되었습니다. #24077 (abel-cheng). - 배열을 매개변수로 받아 배열의 모든 요소를 곱한 값을 반환하는 함수
arrayProduct를 추가했습니다. #21613을 해결합니다. #23782 (Maksim Kita). system.stack_trace에thread_name컬럼을 추가했습니다. 이 변경으로 #23256가 해결되었습니다. #24124 (abel-cheng).insert_null_as_default= 1이면INSERT ... SELECT및INSERT ... SELECT ... UNION ALL ...쿼리에서 NULL 대신 기본값을 삽입합니다. #22832를 해결합니다. #23524 (Kseniia Sumarokova).--progress옵션을 사용해clickhouse-local에서 진행 상황을 표시할 수 있도록 지원을 추가했습니다. #23196 (Egor Savin).http딕셔너리 소스에서 HTTP 압축(Content-EncodingHTTP header로 결정됨) 지원이 추가되었습니다. 이 변경으로 #8912가 수정되었습니다. #23946 (FArthur-cmd).SYSTEM QUERY RELOAD MODEL,SYSTEM QUERY RELOAD MODELS를 추가했습니다. #18722를 해결했습니다. #23182 (Maksim Kita).EXPLAIN PLAN쿼리에json설정(불리언, 기본값은 0)을 추가했습니다. 이 설정을 활성화하면 쿼리 출력이 단일JSON행으로 반환됩니다. 불필요한 이스케이프를 피하려면TSVRaw포맷을 사용하는 것이 좋습니다. #23082 (Nikolai Kochetov).EXPLAIN PIPELINE쿼리에indexes설정(bool, 기본값은 비활성화)을 추가했습니다. 활성화하면 적용된 각 인덱스에 대해 사용된 인덱스와 필터링된 파트 수 및 그래뉼 수를 표시합니다.MergeTree*테이블에서 지원됩니다. #22352 (Nikolai Kochetov).- LDAP: Active Directory 그룹을 ClickHouse 역할에 매핑할 때 사용할 수 있도록 user DN 감지 기능을 구현했습니다. #22228 (Denis Glazachev).
- 타임스탬프를 저장해 머지 중에도 순서를 유지하면서 연속된 행 사이의 차이를 합산하는 새로운 집계 함수
deltaSumTimestamp가 추가되었습니다. #21888 (Russ Frank). - docker에서 올바르게 작동하는, 보안성이 다소 낮은 S3용 IMDS 자격 증명 제공자를 추가했습니다. #21852 (Vladimir Chebotarev).
indexHint함수를 다시 추가했습니다. 이는 #21238 관련 변경입니다. 이 변경으로 #9542를 되돌렸습니다. 또한 #9540도 수정했습니다. #21304 (Amos Bird).
실험적 기능
성능 개선
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를 단일 집계 함수로 결합합니다. 이 최적화는optimize_fuse_sum_count_avg설정으로 제어됩니다. 이는 새로운 집계 함수sumCount로 구현됩니다. 이 함수는sum과count라는 두 필드를 가진 Tuple을 반환합니다. #21337 (hexiaoting). zstd를 v1.5.0으로 업데이트했습니다. Compression 성능이 한 자릿수 퍼센트 수준으로 향상되었습니다. #24135 (Raúl Marín). 참고: 복제 과정에서 “checksum does not match” 메시지가 표시될 수 있습니다. 이는 압축 알고리즘 업데이트로 인해 예상되는 메시지이므로 무시해도 됩니다.Buffer테이블의 성능이 개선되었습니다.Buffer엔진에서 total_bytes/total_rows에 대해서는 잠금을 획득하지 않습니다. #24066 (Azat Khuzhin).hashed/sparse_hashedDictionaries에 대한 사전 할당 지원이 다시 추가되었습니다. #23979 (Azat Khuzhin).async_socket_for_remote가 기본적으로 활성화됩니다(팬아웃이 큰 분산 테이블을 쿼리할 때 thread 수 감소). #23683 (Nikolai Kochetov).
개선
- MergeTree 테이블 계열에
_partition_value가상 컬럼을 추가했습니다. 이 컬럼은 결정론적인 방식으로 파티션을 프루닝하는 데 사용할 수 있습니다. 뮤테이션을 위한 파티션 매처를 구현하는 데 필요합니다. #23673 (Amos Bird). - S3 스토리지와 디스크에
region매개변수가 추가되었습니다. #23846 (Vladimir Chebotarev). - 서로 다른 로깅 채널별로 서로 다른 로그 수준을 설정할 수 있도록 합니다. #19569을 해결했습니다. #23857 (filimonov).
- 명시적으로 지정하지 않은 경우
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에 대한 특별 처리를 추가했습니다. 또한 이전 버전 알고리즘 구현에서 centroid가 과도하게 압축되는 버그도 수정했습니다. #23314 (Vladimir Chebotarev).- 함수
now64가 이제 선택적 시간대 인수를 지원하게 되었습니다. #24091 (Vasily Nemkov). clickhouse-client의 대화형 모드에서 데이터 중간에 나타나는 진행 표시줄이 터미널에 표시된 데이터 일부를 덮어쓰는 문제를 수정했습니다. 이로써 #19283가 해결되었습니다. #23050 (alexey-milovidov).- simdjson에서 메모리 할당 실패 시 발생할 수 있는 충돌을 수정했습니다. https://github.com/simdjson/simdjson/pull/1567 . 매우 드물게 발생하는 버그이므로 개선 사항으로 분류했습니다. #24147 (Amos Bird).
- 스토리지가 종료될 때까지 딕셔너리를 유지합니다(이렇게 하면
Buffer엔진의 최종 플러시 중 서버 종료 시 발생할 수 있는external dictionary 'DICT' not found오류를 방지할 수 있습니다). #24068 (Azat Khuzhin). - 기반 테이블이 이미 분리되어 블록이 버려지고(로그에
Destination table default.a_data_01870 doesn't exist. Block of data is discarded오류가 기록됨) 있는 상황을 방지하기 위해, 테이블(하나의 데이터베이스 내)을 종료하기 전에Buffer테이블을 플러시합니다. #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).- 서버 시작 시 OS 이름, 커널 버전, CPU 아키텍처 정보를 로그에 기록합니다. #23988 (Azat Khuzhin).
postgresql딕셔너리 소스에서 테이블 스키마를 지정할 수 있도록 지원합니다. #23958를 해결했습니다. #23980 (Kseniia Sumarokova).Enum요소 이름에 대한 힌트를 추가합니다(오타가 있을 경우 올바른 이름을 제안합니다). #17112를 해결합니다. #23919 (flynn).- Dictionaries의 조회 성공률(값을 찾은 비율,
system.dictionaries의found_rate참조)을 측정합니다. #23916 (Azat Khuzhin). - 테이블 설정
rabbitmq_queue_settings_list를 통해 특정 큐 설정을 추가할 수 있도록 했습니다. (#23737 및 #23918 해결). 사용자가 RabbitMQ 설정 전체를 제어할 수 있도록 했습니다. 즉, 테이블 설정rabbitmq_queue_consume이1로 설정되면 RabbitMQ 테이블 엔진은 지정된 큐에만 연결하며, exchange, 큐, bindings 선언과 같은 RabbitMQ consumer 측 설정은 수행하지 않습니다. (#21757 해결). RabbitMQ 테이블이 삭제될 때 적절히 정리되도록 개선했습니다. 테이블이 선언한 큐와, 테이블이 생성한 경우 해당 큐에 바인딩된 모든 exchange를 삭제합니다. #23887 (Kseniia Sumarokova). system.distribution_queue에broken_data_files/broken_data_compressed_bytes를 추가했습니다. 손상된 것으로 표시된 분산 테이블의 비동기 삽입 파일 수를 나타내는 메트릭(BrokenDistributedFilesToInsert)을 추가했습니다. #23885 (Azat Khuzhin).system.tables에 대한 쿼리는 이제 더 이상 ZooKeeper로 가지 않습니다. #23793 (Fuwang Hu).OPTIMIZE쿼리에도lock_acquire_timeout_for_background_operations를 적용합니다. #23623 (Azat Khuzhin).- 새로운
SYSTEM RESTART DISKSQL 명령으로 런타임 중S3디스크 설정을 변경할 수 있게 되었습니다. #23429 (Pavel Kovalenko). - 사용자가 실수로
max_distributed_connections값을 0으로 설정해 잘못된 구성을 적용하면,Distributed테이블에 대한 모든 쿼리에서 “logical error”가 포함된 메시지와 함께 예외가 발생합니다. 하지만 이는 실제로 논리 오류가 아니라 예상된 동작이므로, 예외 메시지가 다소 부정확했습니다. 또한 이로 인해 논리 오류가 절대 발생하지 않아야 한다고 검사하는 CI 환경의 체크도 실행되었습니다. 앞으로는max_distributed_connections가 0으로 잘못 설정된 경우 이를 가능한 최소값인 1로 처리합니다. #23348 (Azat Khuzhin). min_bytes_to_use_mmap_io를 기본값으로 비활성화했습니다. #23322 (Azat Khuzhin).join_use_nulls에서LowCardinality의 NULL 허용을 지원하고, #15101을 해결했습니다. #23237 (vdimir).S3디스크에서MergeTree파트를detached디렉터리로 복원하는 기능이 추가되었습니다. #23112 (Pavel Kovalenko).- S3에서 HTTP connection 끊김 시 재시도합니다. #22988 (Vladimir Chebotarev).
- MySQL 테이블 엔진, 딕셔너리 소스, 그리고 MaterializeMySQL의 소규모 데이터 가져오기 작업을 위해 설정
external_storage_max_read_rows및external_storage_max_read_rows를 추가했습니다. #22697 (TCeason). MaterializeMySQL(실험적 기능): 이전에는 SQL 비호환성 때문에 MySQL 5.7.9를 지원하지 않았습니다. 이제 MySQL 매개변수 검증은 MaterializeMySQL에서 처리합니다. #23413 (TCeason).- 분산 테이블에서 서브컬럼을 읽을 수 있도록 했습니다. #24472 (Anton Popov).
CREATE .. AS SELECT쿼리에서 튜플 사용 문제를 수정했습니다. #24464 (Anton Popov).Kafka테이블의Parquet포맷 지원. #23412 (Chao Ma).
버그 수정
- 파티션 키와 기본 키에 사용할 때는 이전 modulo 함수 버전을 사용합니다. #23508을 해결했습니다. #24157 (Kseniia Sumarokova). 이전 릴리스에서 이전 버전과의 호환성을 깨뜨리는 원인이었습니다.
- 쿼리
SYSTEM RESTART REPLICA또는SYSTEM SYNC REPLICA가 무한히 처리되던 문제를 수정했습니다. 이 문제는 RAM이 극히 적은 서버에서 발견되었습니다. #24457 (Nikita Mikhaylov). toWeek함수의 잘못된 단조성을 수정했습니다. 이로써 #24422가 해결됩니다. 이 버그는 #5212에서 도입되었으며, 이후 더 정교해진 파티션 가지치기 기능으로 인해 드러났습니다. #24446 (Amos Bird).- intersect fake parts가 있는 경우 파티션 삭제 문제를 수정했습니다. 드물게 현재 블록 번호보다 큰 mutation 버전을 가진 파트가 있을 수 있습니다. #24321 (Amos Bird).
- materialized view를 Ordinary 데이터베이스에서 Atomic 데이터베이스로 이동할 때 발생하던 버그를 수정했습니다(
RENAME TABLE쿼리). 이제 내부 테이블도 materialized view와 함께 새 데이터베이스로 이동합니다. #23926을 수정했습니다. #24309 (tavplubix). - 클라이언트 요청에서 빈 HTTP 헤더를 허용합니다. #23901을 해결합니다. #24285 (Ivan).
max_threads = 1로 설정하여Memory테이블에서 발생하던 mutation 실패를 해결합니다. #24274를 해결합니다. #24275 (flynn).Memory테이블 구현의 오타를 수정했습니다. 이 버그는 #15127에서 도입되었습니다. #24192를 해결합니다. #24193 (张中南).- 쿼리 실행 중
HDFS에 더 이상 접근할 수 없게 되어 발생하는 비정상적인 서버 종료 문제를 수정했습니다. #24117를 해결합니다. #24191 (Kseniia Sumarokova). - 상수 조건으로
Nested컬럼을 업데이트할 때 발생하던 충돌을 수정했습니다. #24183 (hexiaoting). - 높은 부하 상황에서 RBAC에 발생할 수 있던 경쟁 상태를 수정했습니다. 이 PR은 #24090, #24134,. #24176을 수정합니다 (Vitaly Baranov).
- 쓰기 요청(삽입/alter 등)을 처리할 수 있는 부분적으로만 초기화된 테이블이 생성될 수 있었던 드문 버그를 수정했습니다. 이제 이러한 테이블은 읽기 전용 모드로 전환됩니다. #24122 (alesapin).
SELECT xxx FINAL과 함께 사용하는EXPLAIN PIPELINE이 잘못된 파이프라인을 표시하던 문제를 수정했습니다. (hexiaoting).WHERE에서 constDateTime값을DateTime64컬럼과 비교할 때 발생하던 문제를 수정했습니다. #24100 (Vasily Nemkov).- merge JOIN에서 발생하던 충돌을 수정했으며, #24010을 해결했습니다. #24013 (vdimir).
- 일부
ALTER PARTITION쿼리로 인해 복제 큐에서Part A intersects previous part B및Unexpected merged part C intersecting drop range D오류가 발생할 수 있었습니다. 이 문제가 수정되었습니다. #23296를 해결했습니다. #23997 (tavplubix). - external GROUP BY와 오버플로우 행에서 발생하던 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). PostgreSQLengine의 연결 풀 구현을 수정했습니다. #23897을 해결했습니다. #23909 (Kseniia Sumarokova).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테이블 함수 수정: 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에서 읽는 중 발생하던 heap use-after-free 문제가 수정되었습니다. #23761 (Kseniia Sumarokova).- Distributed에 INSERT할 때(일부 예외가 발생한 경우) 발생할 수 있는 “Cannot schedule a task” 오류를 방지합니다. #23744 (Azat Khuzhin).
- 오래된
ReplicatedMergeTree레플리카를 복구하는 과정에서 발생하던 버그를 수정했습니다. 레플리카가 중단된 동안ALTER쿼리가 실행되면, 오래된 레플리카가 일부 메타데이터 업데이트를 무시할 수 있었습니다. #23742 (tavplubix). Join및WITH TOTALS관련 버그를 수정해 #17718을 해결했습니다. #23549 (vdimir).- filter-pushdown 최적화 후
UNION이 포함된 쿼리에서 발생할 수 있던Block structure mismatch오류를 수정했습니다. #23029를 수정했습니다. #23359 (Nikolai Kochetov). optimize_skip_unused_shards_rewrite_in설정이 활성화되었을 때 형 변환을 추가했습니다. 이를 통해 MSan 보고 문제를 수정했습니다. #23219 (Azat Khuzhin).- 중첩된 서브컬럼을 업데이트할 때 누락된 검사를 추가하여 이슈를 해결했습니다: #22353. #22503 (hexiaoting).
빌드/테스트/패키징 개선
- Illumos에서의 빌드를 지원합니다. #24144. Solaris 계열 운영 체제에서 빌드할 수 있도록 지원을 추가합니다. #23746 (bnaecker).
- Google의 Swiss Table을 포함해 해시 테이블 벤치마크를 추가합니다(특정 사용 시나리오에서는 ClickHouse 해시 맵보다 느린 것으로 나타남). #24111 (Maksim Kita).
- librdkafka를 1.6.0-RC3에서 1.6.1로 업데이트합니다. #23874 (filimonov).
asynchronous-unwind-tables를 항상 명시적으로 활성화합니다. AArch64에서 쿼리 프로파일러 문제를 해결할 수 있습니다. #23602 (alexey-milovidov).- 로캘 및 파일 시스템 순서에 대한 빌드 의존성이 생길 가능성을 방지합니다. 이를 통해 재현 가능한 빌드가 가능해집니다. #23600 (alexey-milovidov).
- 빌드의 비결정성 원인 하나를 제거합니다. 이제 서로 다른 시점에 빌드해도 바이트 단위로 동일한 바이너리가 생성됩니다. #22113를 부분적으로 해결했습니다. #23559 (alexey-milovidov).
- (Zoo)Keeper 벤치마크를 위한 간단한 도구를 추가합니다. #23038 (alesapin).
ClickHouse 릴리스 21.5, 2021-05-20
하위 호환되지 않는 변경 사항
- 정수를 부동소수점 데이터 타입으로 정확하게 표현할 수 없을 때의 정수와 부동소수점 수 비교 방식이 변경되었습니다. 새 버전에서는 반올림 오차가 발생하므로 비교 결과가 false가 됩니다. 예시:
9223372036854775808.0 != 9223372036854775808. 이는9223372036854775808이라는 값을 부동소수점 수로 정확하게 표현할 수 없기 때문입니다(그리고9223372036854775808.0은9223372036854776000.0으로 반올림됩니다). 그러나 이전 버전에서는 이 비교 결과가 두 수가 같다고 나왔습니다. 부동소수점 수9223372036854776000.0을 다시 UInt64로 변환하면9223372036854775808이 되기 때문입니다. 참고로 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가 추가되었습니다. 이를 통해 지정된 cluster의 각 노드에서s3의 파일을 병렬로 처리할 수 있습니다. #22012 (Nikita Mikhaylov). - MySQL/PostgreSQL 테이블 엔진 / 테이블 함수에서 레플리카와 세그먼트 지원이 추가되었습니다.
SELECT * FROM mysql('host{1,2}-{1|2}', ...)와 같이 작성할 수 있습니다. #20969를 해결했습니다. #22217 (Kseniia Sumarokova). ALTER TABLE ... FETCH PART ...쿼리가 추가되었습니다. 이는FETCH PARTITION과 유사하지만, 하나의 파트만 가져옵니다. #22706 (turbo jason).Distributed테이블에 대한 재귀 쿼리의 깊이를 제한하는 설정max_distributed_depth가 추가되었습니다. #20229를 해결했습니다. #21942 (flynn).
성능 개선
- AVX2용 동적 디스패치를 적용해
intDiv성능을 개선했습니다. 이 변경으로 #22314가 해결되었습니다. #23000 (alexey-milovidov). - 로컬 파일이 아닌 소스(예: URL)에서
ArrowStream입력 형식을 읽을 때의 성능을 개선했습니다. #22673 (nvartolomei). - 네이티브 프로토콜로
localhost와 통신할 때(clickhouse-client사용 시 또는 분산 쿼리의 서버 간 통신 시) 기본적으로 Compression을 비활성화했습니다. 이에 따라 일부 가져오기/내보내기 작업의 성능이 향상될 수 있습니다. 이 변경으로 #22234가 해결되었습니다. #22237 (alexey-milovidov). - 분산 쿼리의 IN 절 오른쪽 부분에서 해당 세그먼트에 속하지 않는 값을 제외하도록 했습니다(
optimize_skip_unused_shards_rewrite_in기준, 기본적으로 활성화되지만 여전히optimize_skip_unused_shards가 필요함). #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).
개선
- 기본값으로
max_uri_size(HTTP 인터페이스에서 URL의 최대 크기)를 1 MiB로 늘렸습니다. 이 변경으로 #21197이 해결되었습니다. #22997 (alexey-milovidov). background_fetches_pool_size를8로 설정했습니다. 이는 빈번한 소규모 삽입이 있거나 ZooKeeper 클러스터가 느린 프로덕션 환경에 더 적합합니다. #22945 (alexey-milovidov).- FlatDictionary에
initial_array_size,max_array_size옵션이 추가되었습니다. #22521 (Maksim Kita). - 복제되지 않은 MergeTree에서 삽입 중복 제거를 위한 새로운 설정
non_replicated_deduplication_window을 추가했습니다. #22514 (alesapin). CatBoost모델 구성의 경로를 구성을 다시 로드할 때 업데이트했습니다. #22434 (Kruglov Pavel).- Dictionaries에
Decimal256유형 지원이 추가되었습니다.Decimal256은 실험적 기능입니다. #20979를 해결했습니다. #22960 (Maksim Kita). - 기본값으로
async_socket_for_remote를 활성화했습니다(분산 쿼리에 사용하는 OS 스레드 수를 줄임). #23683 (Nikolai Kochetov). quantile(s)TDigest를 수정했습니다. tdunning/t-digest 3.2+에 따라 싱글턴 centroid에 대한 특별 처리를 추가했습니다. 또한 이전 버전 알고리즘 구현에서 centroid가 과도하게 압축되던 버그도 수정했습니다. #23314 (Vladimir Chebotarev).- MySQL과의 호환성을 위해 함수 이름
unhex가 대소문자를 구분하지 않도록 변경했습니다. #23229 (alexey-milovidov). - 배열 요소의 타입이 서로 다른 일반적인 경우에도
arrayHasAny,arrayHasAll,has,indexOf,countEqual함수가 동작하도록 구현했습니다. 이전 버전에서는arrayHasAny,arrayHasAll함수는 false를 반환했고has,indexOf,countEqual은 예외를 발생시켰습니다. 또한has및 유사한 함수에서Decimal및 큰 정수 타입을 지원하도록 추가했습니다. 이로써 #20272가 해결되었습니다. #23044 (alexey-milovidov). - 함수
extractAllGroupsHorizontal의 결과에서 최대 일치 개수의 한도를 높였습니다. #23036 (Vasily Nemkov). - 노드가 1개뿐인 클러스터에서는
optimize_skip_unused_shards를 수행하지 않습니다. #22999 (Azat Khuzhin). - SSL을 사용해 clickhouse-keeper(ZooKeeper를 바로 대체할 수 있는 Experimental drop-in replacement)를 실행할 수 있는 기능이 추가되었습니다. 클라이언트와 keeper-server 간의 보안 통신에는
keeper_server.tcp_port_secure설정을 사용할 수 있습니다. 노드 간 내부 보안 통신을 활성화하려면keeper_server.raft_configuration.secure를 사용할 수 있습니다. #22992 (alesapin). Buffer테이블에서 버퍼를 백그라운드에서만 플러시할 수 있는 기능이 추가되었습니다. #22986 (Azat Khuzhin).- WHERE 조건에 NULL이 포함된 MergeTree 테이블을 SELECT할 때, 드물게 예외가 발생하던 문제를 수정했습니다. 이로써 #20019가 해결되었습니다. #22978 (alexey-milovidov).
- AWS용 Poco HTTP Client의 오류 처리 문제를 수정했습니다. #22973 (kreuzerkrieg).
ReplicatedMergeTree에서max_part_removal_threads설정을 적용합니다. #22971 (Azat Khuzhin).- inactive_parts_to_throw_insert = 0이고 inactive_parts_to_delay_insert > 0일 때 발생하는 MergeTree 설정의 드문 예외 사례를 수정했습니다. #22947 (Azat Khuzhin).
dateDiff가 이제DateTime64인수를 지원합니다(DateTime범위를 벗어나는 값도 포함). #22931 (Vasily Nemkov).- MaterializeMySQL (실험적 기능): 뷰를 포함하는 MySQL 데이터베이스도 오류 없이 복제할 수 있는 기능이 추가되었습니다. 이는 뷰를 무시하는 방식으로 구현되었습니다. #22760 (Christian).
- PostgreSQL 프로토콜을 통해 RBAC ROW POLICY를 사용할 수 있도록 했습니다. #22658를 해결합니다. PostgreSQL 프로토콜은 기본적으로 구성에서 활성화되어 있습니다. #22755 (Kseniia Sumarokova).
- Buffer layer lock을 기다리는 데 소요되는 시간을 추적하기 위한 메트릭을 추가했습니다. #22725 (Azat Khuzhin).
- VIEW 정의에서 CTE를 사용할 수 있게 되었습니다. 이로써 #22491 문제가 해결되었습니다. #22657 (Amos Bird).
- 이전 프로그램이 터미널에 깨진 출력을 남긴 경우
clickhouse-client에서 화면의 나머지 부분을 지우고 커서를 다시 표시합니다. 이로써 #16518 문제가 해결됩니다. #22634 (alexey-milovidov). round함수가 non-x86_64 플랫폼에서도 일관되게 동작하도록 개선했습니다. 정확히 절반인 경우 가장 가까운 짝수로 반올림하는 방식(Banker’s rounding)을 사용합니다. #22582 (alexey-milovidov).- 분산 테이블이 전송하는 데이터 블록의 구조를 올바르게 검사합니다. #22325 (Azat Khuzhin).
kafka_handle_error_mode설정으로 제어되는 Kafka engine의 가상 컬럼에 Kafka 오류를 게시할 수 있도록 했습니다. #21850 (fastio).visitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}의 별칭으로simpleJSONExtract/simpleJSONHas를 추가합니다. #21383를 수정했습니다. #21519 (fastio).- 라이브러리 딕셔너리 소스를 위해
clickhouse-library-bridge를 추가했습니다. #9502를 종료합니다. #21509 (Kseniia Sumarokova). - materialized view에서 참조되는 컬럼은 삭제할 수 없게 합니다. #21164를 해결합니다. #21303 (flynn).
- 서비스 중단 없이 자격 증명을 교체할 수 있는 동적 서버 간 자격 증명을 지원합니다. #14113 (johnskopis).
- Kafka 스토리지에서
Arrow및ArrowStream포맷 메시지 지원을 추가했습니다. #23415 (Chao Ma). - 예외 메시지에서 누락된 세미콜론을 수정했습니다. 이 예외 메시지는 읽기에 다소 불편할 수 있습니다. #23208 (alexey-milovidov).
- 일부
LowCardinality유형 관련 예외 메시지에서 누락된 공백을 수정했습니다. #23207 (alexey-milovidov). Markdown포맷에서 일부 값이 테이블 셀 내에서 가운데 정렬로 표시되던 문제가 있었습니다. 이제는 더 이상 그렇지 않습니다. #23096 (alexey-milovidov).- clickhouse-client의 제안 항목에서 불필요한 세부 정보를 제거했습니다. 이 변경으로 #22158이 해결되었습니다. #23040 (alexey-milovidov).
- 희소_hashed 사전의 system.dictionaries에서
bytes_allocated필드가 올바르게 계산되도록 수정했습니다. #22867 (Azat Khuzhin). - MergeTree에서 역방향으로 읽을 때 대략적인 전체 행 수 집계를 수정했습니다. #22726 (Azat Khuzhin).
- 자기 자신을 참조하는 ClickHouse 소스로 딕셔너리를 구성할 수 있어 무한 루프가 발생하던 문제를 수정했습니다. #14314를 종료합니다. #22479 (Maksim Kita).
버그 수정
- 헤지드 요청과 관련된 여러 수정이 적용되었습니다.
use_hedged_requests설정이 활성화된 상태에서GLOBAL IN/JOIN이 포함된 쿼리에서 발생하던Can't initialize pipeline with empty pipe오류를 수정했습니다. #23431을 해결합니다. #23805 (Nikolai Kochetov). 충돌을 유발하던 헤지드 연결의 race condition을 수정했습니다. 이 변경으로 #22161이 해결됩니다. #22443 (Kruglov Pavel). 원격 쿼리에서unknown packet을 수신했을 때(async_socket_for_remote활성화 시) 발생할 수 있는 충돌을 수정했습니다. #21167을 해결합니다. #23309 (Nikolai Kochetov). input_format_with_names_use_header설정을 비활성화했을 때 CSVWithNames 포맷에서 모든 입력이 버려지던 문제를 수정했습니다. 이 변경으로 #22406이 해결되었습니다. #23202 (Nikita Mikhaylov).- 원격 JDBC bridge의 connection timeout 문제를 해결했습니다. #9609을 닫습니다. #23771 (Maksim Kita, alexey-milovidov).
update_field가 지정된 경우complex_key_hashed의 초기 적재 로직을 수정합니다. #23800을 해결합니다. #23824 (Maksim Kita).PREWHERE와 ROW POLICY 필터가 모두 적용되어 있고 결과가 비어 있을 때 발생하던 크래시를 수정했습니다. #23763 (Amos Bird).- 분산에 INSERT할 때(일부 예외가 발생했을 때) 발생할 수 있는 “Cannot schedule a task” 오류를 방지합니다. #23744 (Azat Khuzhin).
- 두 샘플의 값이 모두 완전히 동일한 경우에 대비한 예외를 집계 함수
mannWhitneyUTest에 추가했습니다. 이로써 #23646을 수정했습니다. #23654 (Nikita Mikhaylov). - HTTP를 통해 데이터를 삽입할 때 예외가 발생하던 서버 결함을 수정했습니다. 이 수정으로 #23512이 해결됩니다. #23643 (Nikita Mikhaylov).
- 이스케이프 시퀀스가 포함된 일부
LIKE표현식의 잘못된 해석을 수정했습니다. #23610 (alexey-milovidov). - 재시작 / 중지 명령이 멈추는 문제를 수정했습니다. #20214를 해결합니다. #23552 (filimonov).
- 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할 수 없던 버그를 수정했습니다. 예:
CAST([] AS Array(Array(String))). #14476를 해결합니다. #23456 (Maksim Kita). deltaSum집계 함수에서 카운터를 재설정한 후 잘못된 결과가 발생하던 버그를 수정했습니다. #23437 (Russ Frank).- 멀티디스크 구성에서 ReplicatedMergeTree 테이블 생성에 실패했을 때 발생하던
Cannot unlink file오류를 수정했습니다. 이로써 #21755가 해결되었습니다. #23433 (tavplubix). - 가상 컬럼 기반 파티션 프루닝 중 호환되지 않는 상수 표현식이 생성되던 문제를 수정했습니다. 이로써 https://github.com/ClickHouse/ClickHouse/pull/21401#discussion_r611888913 문제가 해결됩니다. #23366 (Amos Bird).
- join_algorithm 설정이 ‘auto’로 되어 있고 딕셔너리와 Join을 수행할 때 발생하던 충돌을 수정했습니다. #23002를 해결했습니다. #23312 (Vladimir).
- 파티션 프루닝 시 NOT 조건을 완화하지 않도록 했습니다. 이로써 #23305 및 #21539가 해결됩니다. #23310 (Amos Bird).
- 오래된 블록을 백그라운드에서 정리하는 과정에서 매우 드물게 발생하던 경쟁 상태를 수정했습니다. 이 문제로 인해 블록이 중복 제거 윈도우의 끝에 너무 가까우면 중복 제거되지 않을 수 있었습니다. #23301 (tavplubix).
- ReplicatedMergeTree 테이블을 생성하거나 제거하는 과정 사이에서 발생하는 매우 드문 (distributed) race condition를 수정했습니다. 이 문제로 인해 복제된 테이블(Replicated Table)을 생성하려고 할 때
node doesn't exist와 같은 예외가 발생할 수 있었습니다. 이 수정은 #21419를 해결합니다. #23294 (tavplubix). - 프라이머리 키(primary key)가 첫 번째 속성이 아닐 경우 DDL 생성 시 단순 키 딕셔너리에서 발생하던 문제를 수정했습니다. #23236을 수정합니다. #23262 (Maksim Kita).
- 테이블에 긴 컬럼 이름이 많이 있을 때 ODBC에서 읽는 문제가 수정되었습니다. #8853를 해결합니다. #23215 (Kseniia Sumarokova).
- MaterializeMySQL(실험적 기능): 키 컬럼에 조건을 걸고
MaterializeMySQL에서 조회할 때 발생하던Not found column오류를 수정했습니다. #22432를 해결했습니다. #23200 (tavplubix). - 서브쿼리가 상수로 최적화된 경우 alias 처리가 올바르게 이루어지도록 수정했습니다. #22924를 수정했습니다. #10401을 수정했습니다. #23191 (Maksim Kita).
- 기본 프로필에서
data_type_default_nullable설정이 활성화된 경우 서버가 시작되지 않을 수 있던 문제가 수정되었습니다. #22573를 수정했습니다. #23185 (tavplubix). - 현재 연결 수를 잘못 계산해 종료 시 발생하던 충돌을 수정했습니다. #23154 (Vitaly Baranov).
- materialized view를 Atomic 데이터베이스에서 분리했다가 다시 ATTACH한 뒤 조회할 때 발생하던
Table .inner_id... doesn't exist오류를 수정했습니다. #23047 (tavplubix). - 하위 쿼리(subquery)에서
untuple을 사용할 때 발생할 수 있는 오류Cannot find column in ActionsDAG result를 수정했습니다. #22290. #22991 (Nikolai Kochetov). - 값이 널 허용인
Map타입 상수 컬럼 사용 문제를 수정했습니다. #22939 (Anton Popov). DateTime64에서formatDateTime()과 “%C” 포맷 지정자 문제가 수정되었으며, 큰 값과 0이 아닌 scale에서toDateTime64()도 수정되었습니다. #22937 (Vasily Nemkov).mannWhitneyUTest및rankCorr를 윈도우 함수와 함께 사용할 때 발생하던 크래시를 수정했습니다. 이로써 #22728이 해결되었습니다. #22876 (Nikita Mikhaylov).- LIVE VIEW (실험적 기능):
TemporaryLiveViewCleaner에서 TEMPORARY LIVE VIEW를 동시에 DROP/CREATE할 때 발생할 수 있던 멈춤 현상을 수정했습니다. 참조. #22858 (Vitaly Baranov). - 집계에 필터 컬럼이 사용되는 경우
HAVINGpushdown 문제를 수정했습니다. #22763 (Anton Popov). - OOM 예외 발생 시 Zookeeper 요청에서 발생할 수 있는 멈춤 현상을 수정했습니다. #22438을 해결합니다. #22684 (Nikolai Kochetov).
- ReplicatedMergeTree 테이블 엔진에서 여러 레플리카에 대한 뮤테이션 대기 동작을 수정했습니다. 이전에는 다른 레플리카에서 뮤테이션이 실제로 실행되기 전에 mutation/alter 쿼리가 완료될 수 있었습니다. #22669 (alesapin).
- SELECT 절에 컬럼이 없는 중첩 타입의 Log에서 발생하던 예외를 수정했습니다. #22654 (Azat Khuzhin).
- AWS 보조 요청에서 무기한 대기하는 문제를 수정했습니다. #22594 (Vladimir Chebotarev).
- 클라이언트가 연결을 아주 일찍 닫을 때 발생하던 충돌을 수정했습니다 #22579. #22591 (nvartolomei).
Map데이터 타입(실험적 기능): 분산 쿼리에서 함수map이 잘못 포맷되던 문제를 수정했습니다. #22588 (foolchi).- TSV 포맷 끝에 개행이 없는 빈 문자열을 역직렬화할 때 발생하던 문제를 수정했습니다. 이로써 #20244가 해결되었습니다. 버전을 업데이트하지 않고 적용할 수 있는 우회 방법으로
input_format_null_as_default를 0으로 설정할 수 있습니다. 이전 버전에서는 이 값이 0이었습니다. #22527 (alexey-milovidov). - Merge Join 알고리즘에서
LowCardinality타입 컬럼의 잘못된 CAST를 수정했습니다. #22386, #22388를 해결했습니다. #22510 (Vladimir). tokenbf_v1전문 검색 인덱스에서 버퍼 오버플로우(읽기 시)가 발생할 수 있었습니다. 초과된 바이트는 사용되지 않지만, 드물게 읽기 작업 중 충돌이 발생할 수 있습니다. 이로써 #19233가 해결되었습니다. #22421 (alexey-milovidov).- HTTP 청크 크기를 제한하지 않도록 수정했습니다. #21907 문제를 수정했습니다. #22322 (Ivan).
optimize_aggregation_in_order가 활성화되어 있고 테이블에 파트가 많은 경우 데이터가 충분히 집계되지 않던 버그를 수정했습니다.optimize_aggregation_in_order가 활성화된 상태에서 집계 성능도 약간 개선했습니다. #21889 (Anton Popov).- 테이블 함수 view가 컬럼으로 사용되는지 확인합니다. 이는 #20350을 보완합니다. #21465 (Amos Bird).
Merge엔진을 사용하는 테이블에서JOIN및 집계가 포함된 쿼리의 “알 수 없는 컬럼” 오류를 수정했습니다. #18368 및 #22226를 해결했습니다. #21370 (Vladimir).- pushdown 최적화에서 발생한 이름 충돌 문제를 수정했습니다. 이로 인해 FULL JOIN 이후
WHERE필터링이 잘못 적용되던 문제가 있었습니다. #20497를 해결했습니다. #20622 (Vladimir). - 중복 제거로 인해
quorum_parallel=1을 사용한 quorum 삽입이 실제로는 “quorum”으로 동작하지 않는 매우 드문 버그를 수정했습니다. #18215 (filimonov - 보고, alesapin - 수정).
빌드/테스트/패키징 개선
- CI에서 stateless tests를 병렬로 실행합니다. #22300 (alesapin).
- Debian 패키지를 단순화했습니다. 이로써 #21698 문제가 해결됩니다. #22976 (alexey-milovidov).
- Apple M1에서 ClickHouse 빌드를 지원하도록 추가했습니다. #21639 (changvvb).
- macOS용 ClickHouse Keeper 빌드를 수정했습니다. #22860 (alesapin).
- AArch64 플랫폼의 일부 테스트를 수정했습니다. #22596 (alexey-milovidov).
- 성능 향상을 위해 함수 정렬을 추가했습니다. #21431 (Danila Kutenin).
- amd64와 aarch64(qemu)에서 동일한 결과가 출력되도록 일부 테스트를 조정했습니다. 이전에는 구현별 CPU 동작에 따라 결과가 달라졌습니다. #22590 (alexey-milovidov).
- 쿼리 profiling은 x86_64에서만 허용하도록 했습니다. #15174 및 #15638을 참조하십시오. 이 변경으로 #15638가 종료됩니다. #22580 (alexey-milovidov).
USE_INTERNAL_XZ_LIBRARY=OFFCMake 옵션을 사용해 번들되지 않은 xz(lzma)로 빌드할 수 있도록 했습니다. #22571 (Kfir Itzhak).ppc64le에서 번들된openldap를 활성화했습니다. #22487 (Kfir Itzhak).ppc64le에서 호환되지 않는 라이브러리(대개 플랫폼별 라이브러리)를 비활성화했습니다. #22475 (Kfir Itzhak).- CI에 ClickHouse Keeper용 Jepsen 테스트를 추가했습니다. #22373 (alesapin).
- heap profiling을 지원하도록
jemalloc을 빌드합니다. #22834 (nvartolomei). - 다른 thread에서 unlock이 수행되어 rwlock unlock 시
*Log엔진에서 UB가 발생하는 문제를 방지했습니다. #22583 (Azat Khuzhin). - 동일한 thread에서 TinyLog의 rwlock을 unlock하도록 변경해 UB를 수정했습니다. #22560 (Azat Khuzhin).
ClickHouse 릴리스 21.4
ClickHouse 릴리스 21.4.1 2021-04-12
하위 호환되지 않는 변경 사항
toStartOfIntervalFunction은 이제 시간 인터벌을 자정 기준으로 정렬합니다(이전 버전에서는 unix epoch 시작 시점 기준으로 정렬되었습니다). 예를 들어toStartOfInterval(x, INTERVAL 11 HOUR)는 하루를 3개의 인터벌로 나눕니다: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/폴더를 먼저 검색합니다. 구현 세부 사항으로, 복제 로그에 새로운ATTACH_PART명령이 도입되었습니다. 파트는 체크섬을 기준으로 검색하고 비교합니다. #18978 (Mike Kot). 참고:- cluster 업그레이드 중에는
ATTACH PART[ITION]쿼리가 작동하지 않을 수 있습니다. - 새 버전에서
ALTER ... ATTACH쿼리를 실행한 후에는 이전 ClickHouse 버전으로 롤백할 수 없습니다. 이전 server가 복제 로그의ATTACH_PART항목을 처리하지 못하기 때문입니다.
- cluster 업그레이드 중에는
- 이 버전에서는 비어 있는
<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). 다만 모든 시간 및 날짜 함수가 확장된 날짜 범위에서 동작하는 것은 아닙니다.- 사전 구성된 사용자와 HTTP 요청에 대한 Kerberos 인증(GSS-SPNEGO) 지원이 추가되었습니다. #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). executable_pool딕셔너리 소스를 추가했습니다. #14528를 해결했습니다. #21321 (Maksim Kita).- 테이블 함수
dictionary가 추가되었습니다.Dictionary엔진과 동일하게 작동합니다. #21560을 해결했습니다. #21910 (Maksim Kita). PolygonDictionary속성에Nullable타입을 지원합니다. #21890 (Maksim Kita).- 함수
dictGet,dictHas는 DDL로 생성된 딕셔너리에서 데이터베이스 이름이 지정되지 않은 경우 현재 데이터베이스 이름을 사용합니다. #21632를 해결합니다. #21859 (Maksim Kita). - 함수
dictGetOrNull이 추가되었습니다. 이 함수는dictGet처럼 동작하지만, 딕셔너리에서 키를 찾지 못하면Null을 반환합니다. #22375를 해결합니다. #22413 (Maksim Kita). ComplexKeyCache,SSDCache,SSDComplexKeyCache사전에 비동기 업데이트가 추가되었습니다.Cache,ComplexKeyCache,SSDCache,SSDComplexKeyCache사전에서Nullable널 허용 유형 지원이 추가되었습니다.dictGet,dictGetOrDefault함수에서 여러 속성을 가져오는 기능이 추가되었습니다. #21517을 수정했습니다. #20595 (Maksim Kita).RangeHashedDictionary에서dictHas함수를 지원합니다. #6680을 수정합니다. #19816 (Maksim Kita).DateTime또는DateTime64데이터 타입의 시간대 이름을 반환하는timezoneOf함수를 추가했습니다. 이 변경은 #9959를 해결하지는 않습니다. 함수 이름의 불일치를 수정하여timezone및timeZone,toTimezone및toTimeZone,timezoneOf및timeZoneOf별칭을 추가했습니다. #22001 (alexey-milovidov).CREATE/ALTER USER명령에 새로운 선택적 절GRANTEES가 추가되었습니다. 이 절은 이 사용자가 grant option과 함께 필요한 모든 접근 권한도 부여받은 경우, 이 사용자로부터 권한을 부여받을 수 있는 사용자 또는 역할을 지정합니다. 기본값은GRANTEES ANY이며, 이는 grant option이 있는 사용자가 누구에게나 권한을 부여할 수 있음을 의미합니다. 구문:CREATE USER ... GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]. #21641 (Vitaly Baranov).system.clusters에 새 컬럼slowdowns_count를 추가했습니다. hedged requests를 사용할 때 이 레플리카의 응답이 느려 다른 레플리카로 전환한 횟수를 보여줍니다. 또한system.clusters에서errors_count의 실제 값도 표시합니다. #21480 (Kruglov Pavel).MergeTree*엔진에_partition_id가상 컬럼을 추가했습니다._partition_id를 사용해 파티션 프루닝이 가능해졌습니다. 파티션 ID 문자열을 계산하는partitionID()함수를 추가했습니다. #21401 (Amos Bird).- 주어진 CIDR 네트워크 프리픽스에 IPv4 또는 IPv6 주소가 속하는지 확인하는
isIPAddressInRange함수를 추가했습니다. #21329 (PHO). - 새로운 SQL 명령
ALTER TABLE 'table_name' UNFREEZE [PARTITION 'part_expr'] WITH NAME 'backup_name'이 추가되었습니다. 이 명령은 모든 디스크에서 ‘동결된’ 파티션을 올바르게 삭제하는 데 필요합니다. #21142 (Pavel Kovalenko). - JOIN에서 키 유형의 암시적 변환을 지원합니다. #19885 (Vladimir).
실험적 기능
- 부동소수점 타입에 대해
RANGE OFFSET프레임(윈도우 함수)을 지원합니다.lag/lead와 유사하지만 윈도우 프레임을 따르는lagInFrame/leadInFrame윈도우 함수를 구현했습니다. 프레임이between unbounded preceding and unbounded following인 경우에는 두 함수가 동일합니다. 이로써 #5485가 해결되었습니다. #21895 (Alexander Kuzmenkov). - S3 storage 기반
ReplicatedMergeTree의 zero-copy 복제를 지원합니다. #16240 (ianton-ru). - 기존 S3 디스크를 백업 및 복원 기능을 지원하는 스키마로 마이그레이션할 수 있는 기능이 추가되었습니다. #22070 (Pavel Kovalenko).
성능 개선
clickhouse-local및 기타 전반에서 병렬 포맷팅을 지원합니다. #21630 (Nikita Mikhaylov).CSVWithNames및TSVWithNames포맷에 대한 병렬 파싱을 지원합니다. 이로써 #21085가 해결되었습니다. #21149 (Nikita Mikhaylov).- 64 MiB 이상의 파일 범위에 대해 mmap IO 읽기를 활성화합니다(설정
min_bytes_to_use_mmap_io). 이에 따라 성능이 어느 정도 향상될 수 있습니다. #22326 (alexey-milovidov). min_bytes_to_use_mmap_io설정으로 읽는 파일에 cache를 추가합니다. 이 설정값이 작을 때 빈번한 mmap/munmap 호출과 그에 따른 페이지 폴트를 줄여 성능이 크게(2배 이상) 향상됩니다. mmap IO는 운영 환경에서 신뢰성이 떨어질 수 있는 큰 단점도 있습니다(예: 디스크 결함 시 hang 또는 SIGBUS 발생, 제어하기 더 어려운 메모리 사용량). 그럼에도 벤치마크에서는 유용합니다. #22206 (alexey-milovidov).- 코덱
NONE을 사용할 때 불필요한 데이터 복사를 피합니다. 코덱NONE은 대체로 거의 쓸모가 없으며, Compression(LZ4가 기본값)을 항상 사용하는 것을 권장합니다. 일반적인 인식과 달리 압축을 비활성화해도 성능이 향상되지 않을 수 있으며, 오히려 반대 효과가 날 수도 있습니다.NONE코덱은 일부 경우에 유용합니다. - 데이터가 압축되지 않는 경우 - 합성 벤치마크의 경우 #22145 (alexey-milovidov). max_rows_to_group_by가 작고group_by_overflow_mode='any'인 경우GROUP BY를 더 빠르게 수행합니다. #21856 (Nikolai Kochetov).SELECT ... FINAL ... WHERE형태의 쿼리 성능을 최적화합니다. 이제FINAL이 포함된 쿼리에서는 sorting key에 포함된 컬럼을PREWHERE로 이동할 수 있습니다. #21830 (foolchi).memcpy를 다른 구현으로 대체해 성능을 개선했습니다. 이로써 #18583가 해결되었습니다. #21520 (alexey-milovidov).- sorting key 순서에 따른 집계 성능을 개선합니다(설정
optimize_aggregation_in_order가 활성화된 경우). #19401 (Anton Popov).
개선
- PostgreSQL 테이블/데이터베이스 엔진과 딕셔너리 소스에 연결 풀을 추가했습니다. 이로써 #21444가 해결됩니다. #21839 (Kseniia Sumarokova).
- Postgres storage/table-function에서 기본 스키마가 아닌 테이블 스키마를 지원합니다. #21701을 해결했습니다. #21711 (Kseniia Sumarokova).
- postgres 딕셔너리 소스에서 레플리카 우선순위를 지원합니다. #21710 (Kseniia Sumarokova).
- 새로운 MergeTree 설정
min_bytes_to_rebalance_partition_over_jbod를 도입하여 JBOD 볼륨의 서로 다른 디스크에 새 파트를 균형 있게 할당할 수 있도록 했습니다. #16481 (Amos Bird). system.query_log의 해당 쿼리에 대해query_kind컬럼에Grant,Revoke,System값을 추가했습니다. #21102 (Vasily Nemkov).- 복제에 사용되는 HTTP 연결에 대한 시간 제한을 다른 HTTP 시간 제한과 별도로 설정할 수 있도록 했습니다. #20088 (nvartolomei).
- server가 블록을 쓰는 도중 예외가 발생할 경우, client에 더 나은 예외 메시지가 표시되도록 개선했습니다. 이전 버전에서는 client가
Data compressed with different methods와 같이 오해를 불러일으킬 수 있는 메시지를 받을 수 있었습니다. #22427 (alexey-milovidov). - part fetch 실패 후 발생할 수 있던
Directory tmp_fetch_XXX already exists오류를 수정했습니다. 이미 존재하는 경우 임시 fetch 디렉터리를 삭제하도록 했습니다. #14197을 해결했습니다. #22411 (nvartolomei). UInt256인수를 사용하는range함수의 MSan 리포트를 수정했습니다(큰 정수 지원은 실험적 기능입니다). 이로써 #22157가 해결되었습니다. #22387 (alexey-milovidov).system.processes테이블에current_database컬럼을 추가했습니다. 이 컬럼에는 해당 쿼리의 현재 데이터베이스가 저장됩니다. #22365 (Alexander Kuzmenkov).clickhouse-client에 대소문자를 구분하지 않는 이력 검색/이동과 하위 단어 단위 이동 기능을 추가했습니다. #22105 (Amos Bird).- 예를 들어
(NULL, NULL)처럼 NULL로만 이루어진 튜플이IN연산자의 왼쪽에 있고,SELECT (NULL, NULL) IN ((0, 0), (3, 1))처럼 오른쪽에 NULL이 아닌 값으로 이루어진 튜플이 있는 경우, 호환되지 않는 타입이라는 예외를 발생시키는 대신 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). - 사용 중인 simdjson 버전을 0.9.1로 업데이트했습니다. 이로써 #21984가 수정됩니다. #22057 (Vitaly Baranov).
CONNECTION_ID()및VERSION()함수에 대소문자를 구분하지 않고 사용할 수 있는 별칭이 추가되었습니다. 이 변경으로 #22028 문제가 수정되었습니다. #22042 (Eugene Klimov).- 각 이벤트가 한 번만 계산되도록
windowFunnel함수에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설정을 지원합니다. 기본 타임아웃 값을 줄였습니다. #21911을 수정했습니다. #21912 (turbo jason).- 시스템 테이블에서
EmbeddedRocksDB테이블의 데이터 디렉터리 경로를 표시합니다. #21903 (tavplubix). - 프로파일 이벤트
HedgedRequestsChangeReplica를 추가하고, 데이터 읽기 timeout 단위를 초에서 ms로 변경했습니다. #21886 (Kruglov Pavel). - DiskS3 (개발 중인 실험적 기능). 대상 디렉터리가 비어 있지 않고 캐시 디스크를 사용하는 경우 디렉터리를 이동할 수 없던 버그를 수정했습니다. #21837 (Pavel Kovalenko).
- Web UI에서
Array및Map데이터 타입의 표시 형식이 개선되었습니다. #21798 (alexey-milovidov). - 구성이 업데이트된 클러스터만 업데이트합니다. #21685 (Kruglov Pavel).
- 분산 DDL 쿼리에서 쿼리 및 세션 설정이 전파되도록 했습니다. 이를 활성화하려면
distributed_ddl_entry_format_version을 2로 설정하십시오.distributed_ddl_output_mode설정이 추가되었습니다. 지원되는 모드:none,throw(기본값),null_status_on_timeout,never_throw입니다.Replicated데이터베이스 엔진에 여러 수정 및 개선 사항이 적용되었습니다. #21535 (tavplubix). PODArray가 요소 크기를 16의 약수나 배수가 아닌 값으로 인스턴스화된 경우, 버퍼 오버플로우가 발생할 수 있었습니다. 현재 릴리스에는 이러한 버그가 없습니다. #21533 (alexey-milovidov).system.errors에last_error_time/last_error_message/last_error_stacktrace/remote컬럼이 추가되었습니다. #21529 (Azat Khuzhin).simpleJSONExtract/simpleJSONHas별칭을visitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}에 추가했습니다. #21383을 해결했습니다. #21519 (fastio).optimize_skip_unused_shards에서 세그먼트 분할 키 값의 개수를 제한하는 설정optimize_skip_unused_shards_limit을 추가했습니다. #21512 (Azat Khuzhin).- 마지막 쿼리 뒤에 여분의 공백이나 주석이 있어도
clickhouse-format이 예외를 발생시키지 않도록 개선하고, 데이터가 포함된ASTInsertQuery를 포맷할 때는 읽기 쉬운 메시지와 함께 예외를 조기에 발생시키도록 개선했습니다. #21311 (flynn). - 데이터 타입
Map에서 정수형 키 지원을 개선했습니다. #21157 (Anton Popov). - MaterializeMySQL: connection이 끊어지면 MySQL에 다시 연결을 시도합니다. #20961 (Håvard Kvålen).
CROSS JOIN을INNER JOIN으로 재작성할 수 있는 경우를 더 많이 지원합니다. #20392 (Vladimir).optimize_on_insert설정이 활성화되어 있을 때 INSERT 시 빈 파트가 생성되지 않도록 했습니다. #20304을 수정했습니다. #20387 (Kruglov Pavel).MaterializeMySQL:_version컬럼에 minmax 스키핑 인덱스를 추가했습니다. #20382 (Stig Bakken).clickhouse-format에--backslash옵션이 추가되어, 포맷된 쿼리의 각 줄 끝에 백슬래시를 붙일 수 있습니다. #21494 (flynn).- 이제 이미 처리된 part에 대해 mutation을 수행하더라도 ClickHouse는
LOGICAL_ERROR예외를 발생시키지 않습니다. #22013을 수정했습니다. #22291 (alesapin).
버그 수정
HedgedConnections에서 패킷 수신기를 취소하기 전에 epoll에서 socket을 제거해 발생할 수 있는 경쟁 상태를 방지합니다. #22161을 수정했습니다. #22443 (Kruglov Pavel).- 병렬 파싱 루틴에 (누락되어 있던) 메모리 사용량 집계를 추가했습니다. 이전 버전에서는 결과 세트에 매우 큰 데이터 블록이 포함된 경우 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). JOIN,TOTALS,arrayJoin사용 시 발생하던 오류Invalid number of rows in Chunk를 수정했습니다. #19303을 해결했습니다. #22129 (Vladimir).- Kafka에서 메시지를 폴링하는 데 사용되던 백그라운드 스레드 풀 이름을 수정했습니다. 문제가 있는 스레드 풀을 사용하는 Kafka 엔진은 메시지 큐의 메시지를 소비하지 못합니다. #22122 (fastio).
ReplicatedMergeTree테이블 엔진의OPTIMIZE및ALTER쿼리 대기 문제를 수정했습니다. 이제 테이블이 분리되었거나 재시작된 경우에도 쿼리가 멈추지 않습니다. #22118 (alesapin).- 문제가 있는 Linux 커널에서는
async_socket_for_remote/use_hedged_requests를 비활성화합니다. #22109 (Azat Khuzhin). - Docker 엔트리포인트:
LOG_PATH가 비어 있을 때.에 대해 chown을 수행하지 않도록 수정했습니다. #22100. #22102 (filimonov). - 함수
decrypt에AEAD모드로 암호화된 데이터의 최소 크기를 확인하는 검사가 빠져 있었습니다. 이로써 #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).
- 헤지드 연결이 겹치는 문제를 방지합니다 (
Unknown packet 9 from server오류). #21941 (Azat Khuzhin). - 일부 경우 “multipart/form-data” 콘텐츠 유형의 HTTP POST 요청을 읽지 못하던 문제를 수정했습니다. #21936 (Ivan).
- 쿼리에 윈도우 함수가 포함되어 있고 기본 키(primary key) 순서로 읽는 최적화가 적용된 경우 잘못된
ORDER BY결과가 나오던 문제를 수정했습니다. #21828을 수정했습니다. #21915 (Alexander Kuzmenkov). - 첫 catboost 모델 실행 시 발생하던 데드락을 수정했습니다. #13832을 닫습니다. #21844 (Kruglov Pavel).
WHERE또는HAVING조건이GROUP BY보다 먼저 푸시될 경우 발생할 수 있던 잘못된 쿼리 결과(및 크래시 가능성)를 수정했습니다. #21773를 수정합니다. #21841 (Nikolai Kochetov).WriteBufferFromS3의 오류 처리와 로깅이 개선되었습니다. #21836 (Pavel Kovalenko).Distinctcombinator를 사용하는 집계 함수에서 2단계 집계 중 발생할 수 있는 비정상 종료를 수정했습니다. 이는 #18365의 후속 수정입니다. 운영 환경에서만 재현됩니다. #21818 (Amos Bird).- 스칼라 서브쿼리 인덱스 분석을 수정했습니다. 이 변경으로 #18896에서 발생한 #21717 문제가 해결되었습니다. #21766 (Amos Bird).
ALTER MODIFY COLUMN쿼리에서Decimal컬럼의 크기(32비트 또는 64비트)가 바뀌지 않으면 컬럼 유형이 변경되지 않는ReplicatedMerge테이블 엔진 버그를 수정했습니다. #21728 (alesapin).ReplicatedMergeTree에서OPTIMIZE와DROP이 동시에 실행될 때 발생할 수 있는 무한 대기 문제를 수정했습니다. #21716 (Azat Khuzhin).- 상수 정수 인수에 대해
Map유형의arrayElement함수 문제를 수정했습니다. #21699 (Anton Popov). access_to_key_from_attributes사용 시ip_trie에 존재하지 않는 속성 때문에 발생하던 SIGSEGV를 수정했습니다. #21692 (Azat Khuzhin).- 서버는 이제
DDLWorker및 Dictionaries 초기화가 완료된 후에만 연결을 수락합니다. #21676 (Azat Khuzhin). Join유형의 테이블 키에 대한 형 변환을 추가했습니다(이전에는 SIGSEGV를 유발했습니다). #21646 (Azat Khuzhin).async_socket_for_remote=1사용 시 분산 요청 취소 문제가 수정되었습니다(예: limit이 포함된 여러 세그먼트에 대한 단순 select, 즉select * from remote('127.{2,3}', system.numbers) limit 100). #21643 (Azat Khuzhin).- 수평 머지에서
fsync_part_directory를 수정했습니다. #21642 (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). - 구성 업데이트 후 S3 테이블에 이전 자격 증명이 계속 남아 있던 문제를 수정했습니다. #21457 (Grigory Pervakov).
- Poco의
SecureSocket내부의 SSL 객체에서 발생하던 경쟁 상태를 수정했습니다. #21456 (Nikita Mikhaylov). Kafka용Avro포맷 파싱을 수정했습니다. #21437을 해결했습니다. #21438 (Ilya Golshtein).- 보안 소켓의 수신 및 송신 timeout, 그리고 논블로킹 읽기를 수정했습니다. #21429 (Kruglov Pavel).
force_drop_table플래그가MATERIALIZED VIEW에서 작동하지 않던 문제가 수정되었습니다. #18943를 해결했습니다. #20626 (tavplubix).PredicateRewriteVisitor의 이름 충돌을 수정했습니다. 이 문제로 인해 full join 이후WHERE필터링이 잘못 적용되었습니다. #20497를 해결했습니다. #20622 (Vladimir).
빌드/테스트/패키징 개선
- ClickHouse Keeper용 Jepsen 테스트를 추가했습니다. #21677 (alesapin).
- CI에서 stateless tests를 병렬 실행합니다. #22181이 선행되어야 합니다. #22300 (alesapin).
- SQLancer CI 실행의 상태 확인을 활성화합니다. #22015 (Ilya Yatsishin).
- PowerPC 빌드를 위한 여러 사전 작업:
ppc64le에서 번들 openldap을 활성화했습니다. #22487 (Kfir Itzhak).ppc64le에서 Clang으로 컴파일할 수 있도록 했습니다. #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에서의 컴파일 문제를 수정하고, 올바른 instruction pointer register를 사용하도록 했습니다. #22430 (Kfir Itzhak). aarch64에서 S3 (AWS) 라이브러리를 재활성화했습니다. #22484 (Kfir Itzhak).ORC포맷을 읽으려면tzdata가 필요하므로 Docker 컨테이너에 이를 추가합니다. 이로써 #14156가 해결됩니다. #22000 (alexey-milovidov).clickhouse-server이미지 Dockerfile에deb_location및single_binary_location이라는 2개의 인수를 추가했습니다. #21977 (filimonov).- clang-tidy를 사용하는 경우 어설션을 활성화하여 릴리스 빌드에서도 사용할 수 있게 했습니다. #21914 (alexey-milovidov).
- cmake 스크립트의 검색 대상에 llvm-12 바이너리 이름을 추가했습니다. clang 경고를 억제하기 위해 암시적 상수 변환을 적용했습니다. CMake 3.19로 빌드할 수 있도록 서브모듈을 업데이트했습니다.
readpassphrase라이브러리의 매크로 확장에서 재귀를 억제했습니다. clang에서 더 이상 권장되지 않는-fuse-ld를--ld-path로 변경했습니다. #21597 (Ilya Yatsishin). - Docker Hub에서 매우 엄격한 요청 횟수 제한을 적용했기 때문에, Yandex dockerhub-proxy를 사용하도록
docker/test/testflows/runner/dockerd-entrypoint.sh를 업데이트했습니다 #21551 (vzakaznikov). - macOS용 공유 라이브러리 빌드를 수정했습니다. #20184 (nvartolomei).
zookeeper-dump-tree에ctime옵션이 추가되었습니다. 이 옵션을 사용하면 노드 생성 시각을 덤프할 수 있습니다. #21842 (Ilya).
ClickHouse 릴리스 21.3 (LTS)
ClickHouse 릴리스 v21.3, 2021-03-12
하위 호환되지 않는 변경 사항
- 이제 기존 구문으로 table TTL이 포함된 MergeTree 테이블을 생성할 수 없습니다. 해당 TTL이 무시되기 때문입니다. 기존 테이블은 계속 ATTACH할 수 있습니다. #20282 (alesapin).
- 이제 대소문자를 구분하지 않는 모든 함수 이름은 정규 표기로 다시 작성됩니다. 이는 프로젝션 쿼리 라우팅(예정된 기능)에 필요합니다. #20174 (Amos Bird).
- 표현식이 함수이고
ORDER BY키와 동일한 경우의TTL생성 문제를 수정했습니다. 이제GROUP BY가 있는TTL에서는 프라이머리 키 컬럼에 사용자 지정 집계를 설정할 수 있습니다. 하위 호환되지 않음: 이제GROUP BY에 포함되지 않고 명시적으로 설정되지 않은 프라이머리 키 컬럼에는 TTL이 만료될 때max대신any함수가 적용됩니다. 또한WHERE또는GROUP BY와 함께 TTL을 사용하면 롤링 업데이트 중 머지 시 예외가 발생할 수 있습니다. #15450 (Anton Popov).
새로운 기능
- 파일 엔진 설정
engine_file_empty_if_not_exists및engine_file_truncate_on_insert를 추가했습니다. #20620 (M0r64n). - 연속된 행 간 차이를 합산하는 집계 함수
deltaSum을 추가했습니다. #20057 (Russ Frank). system.part_log테이블에 새event_time_microseconds컬럼을 추가했습니다. #20027 (Bharat Nallan).- UTC 대비 오프셋을 초 단위로 반환하는
timezoneOffset(datetime)함수를 추가했습니다. 이 변경으로 #issue:19850이 해결됩니다. #19962 (keenwolf). - 분산 테이블에서 특정 세그먼트에 데이터를 삽입할 수 있도록
insert_shard_id설정을 추가했습니다. #19961 (flynn). reinterpretAs함수가 큰 정수를 지원하도록 업데이트되었습니다. #19691을 수정합니다. #19858 (Maksim Kita).- S3 클라이언트에 Server Side Encryption Customer Keys(
x-amz-server-side-encryption-customer-(key/md5)header) 지원을 추가했습니다. 자세한 내용은 링크를 참조하십시오. 이 변경으로 #19428이 해결됩니다. #19748 (Vladimir Chebotarev). - 실행형 딕셔너리 소스에
implicit_key옵션을 추가했습니다. 이 옵션을 사용하면 레코드가 입력 키와 동일한 순서로 들어올 때 각 레코드마다 키를 출력하지 않아도 됩니다. #14527을 구현합니다. #19677 (Maksim Kita). - QUOTA 유형
query_selects및query_inserts를 추가했습니다. #19603 (JackyWoo). - 함수
extractTextFromHTML을 추가했습니다. #19600 (zlx19950903), (alexey-milovidov). - 이제
MergeTree*엔진을 사용하는 테이블에는 쿼리 동시성 제어를 위한 새 테이블 수준 설정 2개가 있습니다.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로 활성화되는 윈도우 함수 지원을 실험적으로 도입했습니다. 이는 alpha 수준의 초기 구현으로, 프로덕션 환경에는 적합하지 않으며 이후 릴리스에서 하위 호환되지 않는 방식으로 변경될 예정입니다. 지원되는 기능 목록은 문서를 참조하십시오. #20337 (Alexander Kuzmenkov).- DiskS3의 메타데이터 파일을 백업/복원할 수 있는 기능을 추가했습니다. #18377 (Pavel Kovalenko).
성능 개선
- 원격 쿼리를 위한 헤지드 요청입니다.
use_hedged_requests를 활성화하면(기본값은 비활성화) 쿼리를 위해 서로 다른 레플리카에 대해 여러 연결을 설정할 수 있습니다. 기존 레플리카 연결이hedged_connection_timeout내에 수립되지 않았거나receive_data_timeout내에 데이터를 받지 못한 경우 새 연결이 활성화됩니다. 쿼리는 비어 있지 않은 첫 번째 progress 패킷(또는allow_changing_replica_until_first_data_packet가 설정된 경우 데이터 패킷)을 보내는 연결을 사용하며, 다른 연결은 취소됩니다.max_parallel_replicas > 1인 쿼리도 지원됩니다. #19291 (Kruglov Pavel). 이를 통해 매우 큰 클러스터에서 테일 레이턴시를 크게 줄일 수 있습니다. - 행 수준 보안 표현식이 지정된 테이블에서
PREWHERE지원이 추가되었으며(해당 최적화도 활성화됨). #19576 (Denis Glazachev). - 설정
distributed_aggregation_memory_efficient은 기본적으로 활성화되어 있습니다. 메모리 사용량을 줄이고 분산 쿼리 성능을 향상시킵니다. #20599 (alexey-milovidov). - 여러 개의 고정 길이 키에 대한 GROUP BY 성능을 개선했습니다. #20472 (alexey-milovidov).
- 별칭을 더 엄격하게 처리해 집계 함수의 성능을 개선했습니다. #19946 (alexey-milovidov).
- 파이프라인을 단순화하고, 그에 따라 파이프라인 스케줄링에서의 잠금 경합을 줄여 극단적인 경우(
Memory테이블의 읽기 속도가 초당 50 GB 수준에 이르는 경우)Memory테이블의 읽기 성능을 향상했습니다. #20468 (alexey-milovidov). - 들어오고 나가는 데이터의 복사 횟수를 줄이기 위해 HTTP server를 부분적으로 다시 구현했습니다. 이로써 HTTP를 통해 긴 레코드를 삽입할 때 성능이 최대 1.5배 향상됩니다. #19516 (Ivan).
Memory테이블에compress설정이 추가되었습니다. 이 설정을 활성화하면 테이블이 사용하는 RAM이 줄어듭니다. 일부 머신과 데이터셋에서는 SELECT 시 더 빠르게 동작할 수도 있지만, 항상 그런 것은 아닙니다. 이 변경으로 #20093가 해결되었습니다. 참고: Memory 테이블이 MergeTree보다 더 느리게 동작할 수 있는 이유는 (1) 압축 부재 (2) 블록의 고정된 크기 (3) 인덱스와 prewhere 부재 때문입니다… #20168 (alexey-milovidov).- 집계 코드가 약간 개선되었습니다. #20978 (alexey-milovidov).
- 성능 향상을 위해
intDiv/modulo특수화를 다시 추가합니다. 이로써 #21293 문제가 수정됩니다. 이 회귀는 https://github.com/ClickHouse/ClickHouse/pull/18145 에서 도입되었습니다. #21307 (Amos Bird). - INSERT SELECT로 Memory 테이블에 삽입할 때 블록을 과도하게 합치지 않도록 했습니다. 이전 버전에서는 INSERT SELECT 이후 Memory 테이블에 비효율적인 데이터 표현이 만들어졌습니다. 이로써 #13052를 해결합니다. #20169 (alexey-milovidov).
- DataType 파서에서 지수적 복잡도가 발생할 수 있는 사례를 최소 1건 수정했습니다(퍼저가 발견). 이로써 #20096가 해결되었습니다. #20132 (alexey-milovidov).
do_not_merge_across_partitions_select_final설정이 1이면level > 0인 단일 part에 대한 FINAL이 포함된 SELECT를 병렬로 실행합니다. #19375 (Kruglov Pavel).system.parts및system.parts_columns를 쿼리할 때 요청된 컬럼만 채우도록 했습니다. #19570을 해결했습니다. #21035 (Anmol Arora).avg집계 함수 내부의 산술 표현식에 대수적 최적화를 적용합니다. #20092 해결. #20183 (flynn).
개선 사항
- 테이블 함수에서 압축 방식을 대소문자 구분 없이 사용할 수 있도록 했습니다. 또한 대문자로 검사되던 LZMA 압축 방식도 수정했습니다. #21416 (Vladimir Chebotarev).
- 삽입 중 비활성 파트가 너무 많으면 삽입을 지연하거나 오류를 발생시키는 두 가지 설정을 추가했습니다. 이는 서버가 파트를 충분히 빠르게 정리하지 못할 때 유용합니다. #20178 (Amos Bird).
- mysql 클라이언트와의 호환성을 개선했습니다. 1. mysql jdbc 2. mycli. #21367 (Amos Bird).
- materialized view에서 참조 중인 컬럼은 삭제할 수 없도록 했습니다. Closes #21164. #21303 (flynn).
- 이제 MySQL 딕셔너리 소스는 SSL/TLS 연결에서 가끔 발생하는 예기치 않은 연결 실패(Lost connection to MySQL server during query)가 발생하면 재시도합니다. #21237 (Alexander Kazakov).
- 사용성 개선:
DateTime64파싱이 더 일관되게 이루어지도록 개선했습니다. 소수 초 해상도의 Unix timestamp가1111111111.222대신1111111111222와 같이 스케일된 정수로 지정된 경우를 인식합니다. 이로써 #13194가 해결됩니다. #21053 (alexey-milovidov). - distributed_group_by_no_merge 사용 시 initiator에서는 정렬된 블록만 머지하도록 변경했습니다. #20882 (Azat Khuzhin).
- mysql source의 구성을 로드할 때 ClickHouse는 이제 동일한 우선순위를 가진 레플리카 목록을 무작위로 섞어, mysql endpoint를 선택하는 라운드 로빈 로직이 올바르게 동작하도록 합니다. 이로써 #20629가 해결되었습니다. #20632 (Alexander Kazakov).
- 함수 ‘reinterpretAs(x, Type)‘가 ‘reinterpret(x, Type)‘로 이름이 변경되었습니다. #20611 (Maksim Kita).
- RabbitMQ engine에 vhost 지원을 추가했습니다 #20576. #20596 (Kseniia Sumarokova).
- 배열과 튜플이 결합된 데이터 타입의 직렬화를 개선했습니다. enum 데이터 타입을 protobuf enum 타입에 매칭하는 방식을 개선했습니다.
Map데이터 타입의 직렬화를 수정했습니다. 이제 생략된 값에는 기본값이 설정됩니다. #20506 (Vitaly Baranov). - 분산 DDL 작업 실행과 DDL 큐 정리 사이의 경쟁 상태를 수정했습니다. 이제 활성 상태의 worker가 있으면 DDL 작업을 ZooKeeper에서 제거할 수 없습니다. #20016을 해결했습니다. #20448 (tavplubix).
- alpine 이미지에서 FQDN 및 기타 DNS 관련 함수가 올바르게 동작하도록 개선했습니다. #20336 (filimonov).
- 명시적으로 금지된 함수에 대해서는 이른 시점의 상수 폴딩을 허용하지 않습니다. #20303 (Azat Khuzhin).
- 정수 값이 Decimal 유형에 맞지 않아도 정수에서 Decimal 유형으로의 암시적 변환이 성공할 수 있었습니다. 이제는
ARGUMENT_OUT_OF_BOUND예외가 발생합니다. #20232 (tavplubix). - 잠금 없이
SYSTEM FLUSH DISTRIBUTED. #20215 (Azat Khuzhin). - count(constant)와 sum(1)을 count()로 정규화합니다. 이는 프로젝션 쿼리 라우팅에 필요합니다. #20175 (Amos Bird).
- 비트맵 함수가 모든 네이티브 정수 타입을 지원합니다. #20171 (Amos Bird).
CacheDictionary,ComplexCacheDictionary,SSDCacheDictionary,SSDComplexKeyDictionary가 기반 인덱스로 LRUHashMap을 사용하도록 업데이트했습니다. #20164 (Maksim Kita).- 이제 시작 시
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT를 지정해access_management설정을 구성할 수 있습니다. 기본값은 비활성화(0)이며, 이는 이전과 동일한 값입니다. #20139 (Marquitos). toDateTime64(toDate()/toDateTime())의 DateTime64 관련 수정 - DateTime 동작에 맞게 DateTime64 클램핑을 구현했습니다. #20131 (Azat Khuzhin).- Quota 개선사항: 이제 quota 계산 시 SHOW TABLES는 2개의 쿼리가 아니라 1개의 쿼리로 간주됩니다. 이제 SYSTEM 쿼리도 quota를 소모합니다. quota 사용량 계산에서 인터벌 끝값 계산을 수정했습니다. #20106 (Vitaly Baranov).
system.zookeeper테이블에서path IN (set)표현식을 지원합니다. #20105 (小路).system.tables에서MaterializeMySQL테이블의 상세 정보를 모두 표시합니다. #20051 (Stig Bakken).- 잘못 사용한 경우에만 발생할 수 있었던 실행형 딕셔너리의 데이터 레이스를 수정했습니다(예: 스크립트가 입력을 무시하고 데이터를 반환하는 경우). #20045 (alexey-milovidov).
- 이제 MySQL 레플리카의 config 섹션에서 “opt_reconnect” 매개변수로 MYSQL_OPT_RECONNECT 옵션 값을 제어할 수 있습니다. #19998 (Alexander Kazakov).
- 사용자가
JSONExtract함수를 호출할 때 요청한 유형이Float32이면, 결과 유형으로의 부정확한 변환을 허용합니다. 예를 들어 JSON의 숫자0.1은 배정밀도(double precision)이므로 Float32로는 정확히 표현할 수 없지만, 사용자는 여전히 그 값을 얻고자 합니다. 이전 버전에서는 변환이 부정확함을 나타내기 위해 널 허용이 아닌 유형에는 0을, 널 허용 유형에는 NULL을 반환했습니다. 이 로직은 100% 정확했지만 사용자에게는 예상 밖이었고 혼란을 일으켜 질문으로 이어졌습니다. 이 변경으로 #13962가 해결됩니다. #19960 (alexey-milovidov). - 분산 테이블에 INSERT할 때 블록 구조가 일치하지 않으면 이를 변환하는 기능을 추가했습니다. #19947 (Azat Khuzhin).
system.distributed_ddl_queue테이블이 개선되었습니다. 재시작 후 MaxDDLEntryID를 마지막 값으로 초기화합니다. 이 PR 이전에는 새 DDLTask가 처리되기 전까지 MaxDDLEntryID가 0으로 유지되었습니다. #19924 (Amos Bird).system.parts에MaterializeMySQL테이블을 표시합니다. #19770 (Stig Bakken).Buffer프로필을 위한 별도의 설정 지시문을 추가했습니다. #19721 (Azat Khuzhin).- JOIN과 관련 없는 조건을 WHERE 절로 이동합니다. #18720. #19685 (hexiaoting).
- 비동기 전송의 대기 중 바이트 수를 기준으로
Distributed엔진에 대한 INSERT 속도를 제한하는 기능이 추가되었습니다(Distributed엔진에bytes_to_delay_insert/max_delay_to_insert및bytes_to_throw_insert설정이 추가됨). #19673 (Azat Khuzhin). - destructor에서 쓰기 오류가 무시될 수 있는 드문 경우 일부를 수정했습니다. #19451 (Azat Khuzhin).
- 치명적 오류 발생 시 스택 트레이스에 인라인 프레임을 출력합니다. #19317 (Ivan).
버그 수정
- ZooKeeper에 대한 불필요한 재연결과 단일 ClickHouse 서버에서 두 개의 세션이 동시에 활성화될 수 있는 문제를 수정했습니다. 두 문제 모두 #14678에서 도입되었습니다. #21264 (alesapin).
Values포맷에서LowCardinality컬럼이 있는 테이블에 데이터를 삽입할 때 발생하던Bad cast from type ... to DB::ColumnLowCardinality오류를 수정했습니다. #21140을 수정했습니다 #21357 (Nikolai Kochetov).- 프레디케이트에 해당 테이블 자체가 포함된 경우, 비복제 MergeTree 테이블 엔진의
ALTER DELETE뮤테이션에서 발생하던 교착 상태를 수정했습니다. #20558를 해결합니다. #21477 (alesapin). - 장애 발생 시 분산 쿼리에서 발생하던 SIGSEGV를 수정했습니다. #21434 (Azat Khuzhin).
- 이제
ALTER MODIFY COLUMN쿼리에서 파티션 키, 스킵 인덱스, TTL 등의 변경 사항이 올바르게 반영됩니다. #13675를 수정했습니다. #21334 (alesapin). join_use_nulls및 서브쿼리의TOTALS를 join할 때 발생하던 버그를 수정했습니다. 이로써 #19362 및 #21137가 해결되었습니다. #21248 (vdimir).UNION이 포함된 쿼리의EXPLAIN에서 발생하던 충돌을 수정했습니다. #20876, #21170을 수정했습니다. #21246 (flynn).- 이제 뮤테이션은 이를 지원하는 테이블 엔진(MergeTree 엔진 계열, Memory, MaterializedView)에서만 허용됩니다. 다른 엔진은 더 명확한 오류를 반환합니다. #21168을 수정했습니다. #21183 (alesapin).
- #21112를 수정했습니다. 콜백 중 하나가 약간 늦게 도착할 경우 삽입 쿼리에서 중복이 발생할 수 있던 버그를 수정했습니다. #21138 (Kseniia Sumarokova).
- 타입이 널 허용인 경우
input_format_null_as_default가 제대로 적용되도록 수정했습니다. 이로써 #21116 문제가 해결됩니다. #21121 (Amos Bird). - Tuple을 맵으로 CAST할 때 발생하던 버그를 수정했습니다. #21029를 해결했습니다. #21120 (hexiaoting).
- 사용자 지정(기본값이 아닌) ZooKeeper 클러스터를 사용하는 Replicated*MergeTree가 삭제될 때 발생하던 메타데이터 누수를 수정했습니다. #21119 (fastio).
- joinGet에서 LowCardinality 키를 사용할 때 발생하던 타입 불일치 문제를 수정했습니다. 이로써 #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 Compression 오류를 수정했습니다. “ring-buffer에서 초기화되지 않은 데이터에 드물게 접근하던 문제 수정”을 포함하도록 Brotli를 최신 버전으로 업데이트했습니다. #20991 (Kseniia Sumarokova).
- 쿼리 취소 시 ‘비동기 작업 큐에서 빈 작업이 반환되는’ 문제를 수정했습니다. #20881 (Azat Khuzhin).
- MySQL 5.7 클라이언트로 ClickHouse 서버에 연결할 때
USE database;쿼리가 작동하지 않던 문제가 수정되었습니다. #18926를 해결합니다. #20878 (tavplubix). - 집계 함수에서
-Statecombinator와 함께-Distinctcombinator를 사용할 때의 문제를 수정했습니다. #20866 (Anton Popov). UNION DISTINCT및LIMIT절이 포함된 서브쿼리 문제를 수정했습니다. #20597을 해결했습니다. #20610 (flynn).- 딕셔너리에 없는 키를 조회하는 쿼리에서 발생하던 딕셔너리 동작의 불일치 문제를 수정했습니다. #20578 (Nikita Mikhaylov).
- 스칼라 서브쿼리와 인덱스용 서브쿼리에 사용되는 스레드 수를 수정했습니다(#19007 이후에는 항상 단일 스레드만 사용되었습니다). #20457, #20512를 수정했습니다. #20550 (Nikolai Kochetov).
- remove 쿼리에서 알 수 없는 패킷을 수신했을 때 발생할 수 있던 충돌을 수정했습니다(#17868에서 처음 도입됨). #20547 (Azat Khuzhin).
- async INSERT용 디렉터리 이름을 파싱할 때 적절한 검사를 추가했습니다(SIGSEGV 수정). #20498 (Azat Khuzhin).
- 부동소수점 키에서 함수
transform이 제대로 작동하지 않던 문제를 수정했습니다. #20460을 해결합니다. #20479 (flynn). - WITH 별칭을 서브쿼리에 전파하는 과정에서 발생하던 무한 루프를 수정했습니다. 이 수정으로 #20388 문제가 해결됩니다. #20476 (Amos Bird).
- HTTP 클라이언트 연결이 끊겼을 때 server가 비정상적으로 종료되는 문제를 수정했습니다. #20464 (Azat Khuzhin).
- JOIN에 SELECT의 상수가 포함된 경우
join_use_nulls=1에서 발생하는LOGICAL_ERROR를 수정했습니다. #20461 (Azat Khuzhin). - 테이블 함수
view가 표현식 목록에 사용되었는지 확인하고, 사용된 경우 오류를 발생시킵니다. 이로써 #20342가 수정됩니다. #20350 (Amos Bird). - RANGE_HASHED() 딕셔너리에서 유효하지 않은 역참조를 방지합니다. #20345 (Azat Khuzhin).
join_use_nulls=1사용 시 NULL 역참조 문제를 수정했습니다. #20344 (Azat Khuzhin).- scale이 서로 다른 두 상수 decimal 간 이항 연산에서 잘못된 결과가 반환되던 문제를 수정했습니다. #20283를 수정했습니다. #20339 (Maksim Kita).
ReplicatedMergeTree테이블 엔진 계열에서 실패한 백그라운드 작업을 너무 자주 재시도하던 문제를 수정했습니다. 이로 인해 로깅이 지나치게 많아지고 CPU 부하가 증가할 수 있었습니다. #20203를 수정했습니다. #20335 (alesapin).*CollapsingMergeTree및ReplacingMergeTree테이블 엔진의 버전 컬럼의DROP또는RENAME을 제한합니다. #20300 (alesapin).- 손상된 JSON에서 전체 파일을 메모리로 읽으려다가 allocator 예외가 발생하던 문제를 수정했습니다. #19719을 수정합니다. #20286 (Nikita Mikhaylov).
- 수직 병합을 지원하지 않는
MergeTree테이블 엔진 계열에서 수직 병합 중 발생하던 예외를 수정했습니다. #20259를 해결했습니다. #20279 (alesapin). - 종료 중 설정을 다시 로드할 때 드물게 발생하는 server 충돌을 수정했습니다. #19689을 해결합니다. #20224 (alesapin).
- INSERT SELECT에서 사용할 때 CTE가 올바르게 동작하도록 수정했습니다. 이 변경으로 #20187 및 #20195 문제가 수정되었습니다. #20211 (Amos Bird).
- #19314를 수정했습니다. #20156 (Ivan).
- 특수한 시간대를 올바르게 처리하도록
toMinute함수를 수정했습니다. #20149 (keenwolf). - then/else 분기 결과 타입이
Tuple인if함수가 포함된 쿼리 실행 후 서버가 충돌하던 문제를 수정했습니다.Tuple타입에는Array또는 다른 복합 타입이 포함되어 있어야 합니다. #18356을 수정했습니다. #20133 (alesapin). MongoDB테이블 엔진은 이제 데이터를 읽을 때만 연결을 맺습니다.ATTACH TABLE은 더 이상 연결을 시도하지 않습니다. #20110 (Vitaly Baranov).- StorageJoin의 버그 수정. #20079 (vdimir).
- 작은 제수로 음수를 나눌 때 나머지를 계산하는 경우, 음수 결과를 담기에 결과 데이터 타입이 충분히 크지 않았던 문제를 수정했습니다. 이로써 #20052가 해결되었습니다. #20067 (alexey-milovidov).
- MaterializeMySQL: 여러 테이블을 업데이트하는 SQL 문의 복제를 수정했습니다. #20066 (Håvard Kvålen).
- 초기화 스크립트 실행 중 Docker에서 “Connection refused” 오류가 발생하지 않도록 수정했습니다. #20012 (filimonov).
EmbeddedRocksDB는 Experimental 스토리지입니다. 적절한 유형 검사가 없어 발생하던 문제를 수정했습니다. 코드를 단순화했습니다. 이로써 #19967이 해결되었습니다. #19972 (alexey-milovidov).- 인수 타입이 Int32를 제외한 다른 정수 타입의
Nullable(T)인 경우 함수fromModifiedJulianDay에서 발생하던 segfault를 수정했습니다. #19959 (PHO). - BloomFilter 인덱스 크래시 수정. #19757를 수정했습니다. #19884 (Maksim Kita).
- system.text_log가 활성화되어 있으면 교착 상태가 발생할 수 있었습니다. 이로써 #19874가 수정되었습니다. #19875 (alexey-milovidov).
- dictGet()를 포함하는 기본 표현식이 있는 테이블로 server를 시작할 때 발생하던 문제를 수정했습니다. 딕셔너리를 로드하지 않고도 dictGet()의 반환 유형을 가져올 수 있도록 했습니다. #19805 (Vitaly Baranov).
select만 실행할 때 발생하던 clickhouse-client abort 예외를 수정했습니다. #19790 (taiyang-li).- 여러
clickhouse-copier를 실행할 때 조각을 대상 테이블로 이동하는 작업이 실패할 수 있는 버그를 수정했습니다. #19743 (madianjun). ON CLUSTER쿼리를 실행하는 백그라운드 스레드가 삭제된 복제된 테이블이 작업을 진행하기를 기다리며 멈출 수 있었습니다. 수정되었습니다. #19684 (yiguolei).
빌드/테스트/패키징 개선
- AVX-2를 전역으로 활성화하여 ClickHouse를 빌드할 수 있도록 했습니다. 최신 CPU에서는 성능이 소폭 향상됩니다. 프로덕션 환경에는 권장되지 않으며, 현재로서는 공식 빌드로 지원되지 않습니다. #20180 (alexey-milovidov).
- Coverity에서 발견한 일부 문제를 수정했습니다. #19964를 참조하십시오. #20010 (alexey-milovidov).
- gdb에서 수정된 실행 파일(binary)로 시작할 수 있도록 했습니다. 이전 버전에서는 시작 전에 gdb에 중단점을 설정하면 무결성 검사 실패로 인해 서버가 시작을 거부했습니다. #21258 (alexey-milovidov).
- Kafka의 다양한 압축 방식에 대한 테스트를 추가했습니다. #21111 (filimonov).
- test_storage_kerberized_hdfs 테스트에서 발생하던 포트 충돌을 수정했습니다. #19974 (Ilya Yatsishin).
- 통합 테스트에서 Docker 시작에 실패하면
stdout및stderr를 로그에 출력하도록 했습니다. 이 PR 이전에는 이 경우 오류 메시지가 매우 짧아 문제를 조사하는 데 도움이 되지 않았습니다. #20631 (Vitaly Baranov).
ClickHouse 21.2 릴리스
ClickHouse 릴리스 v21.2.2.8-안정, 2021-02-07
하위 호환되지 않는 변경 사항
- 비트 연산 함수(
bitAnd,bitOr등)는 부동소수점 인수에 사용할 수 없습니다. 이제 명시적으로 정수로 캐스팅해야 합니다. #19853 (Azat Khuzhin). lcm/gcd는 부동소수점 인수에 사용할 수 없도록 했습니다. #19532 (Azat Khuzhin).OPTIMIZE TABLE/머지에 대한 메모리 추적을 수정했습니다.OPTIMIZE TABLE/머지에 쿼리 메모리 제한과 샘플링이 반영되도록 했습니다. #18772 (Azat Khuzhin).- 부동소수점 컬럼은 파티션 키로 사용할 수 없도록 했습니다. #18421을 참조하십시오. #18464 (hexiaoting).
- 유형 정의에서 괄호를 과도하게 사용하는 방식은 더 이상 지원되지 않습니다. 예시:
Array((UInt8)).
새 기능
PostgreSQL테이블 엔진이 추가되었습니다(select 및 삽입을 모두 지원하며, 다차원 배열도 지원).PostgreSQL테이블 함수도 추가되었습니다.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에 대한 삽입을 지원하며, 테이블 함수remote및cluster모두에서 세그먼트 분할 키를 지정해 데이터를 노드 간에 분산할 수 있도록 지원합니다. #16752를 해결했습니다. #18264 (flynn). - XML 문자를 디코딩하기 위한 함수
decodeXMLComponent를 추가했습니다. 예시:SELECT decodeXMLComponent('Hello,"world"!')#17659. #18542 (nauta). parseDateTimeBestEffortUSOrZero,parseDateTimeBestEffortUSOrNull함수가 추가되었습니다. #19712 (Maksim Kita).sign수학 함수가 추가되었습니다. #19527 (flynn).- 사용된 기능(함수, 테이블 엔진 등) 정보를 system.query_log에 추가합니다. #18495. #19371 (Kseniia Sumarokova).
- 함수
formatDateTime이 날짜를 분기로 포맷하는%Q수정자를 지원합니다. #19224 (Jianmei Zhang). - 실행 UI에서 MetaKey+Enter 단축키를 지원합니다. #19012 (sundyli).
- 맵 데이터 타입을 위한 세 가지 함수가 추가되었습니다: 1.
mapContains(map, key)는map.keys에 두 번째 매개변수인key가 포함되어 있는지 확인합니다. 2.mapKeys(map)는 모든 키를 배열 형식으로 반환합니다. 3.mapValues(map)는 모든 값을 배열 형식으로 반환합니다. #18788 (hexiaoting). - #18494와 관련해
log_comment설정이 추가되었습니다. #18549 (Zijie Lu). argMin및argMax함수에 튜플 형태의 인수 지원을 추가했습니다. #17359 (Ildus Kurbangaliev).EXISTS VIEW구문을 지원합니다. #18552 (Du Chuan).SELECT ALL구문을 추가했습니다. #18706을 해결했습니다. #18723 (flynn).
성능 개선
statsyscall 수를 줄여 파트 제거 속도를 높였습니다. 이는 예전에 있던 최적화를 다시 적용한 것입니다. 또한IDisk인터페이스를 더 안전하게 개선했습니다. 이 변경으로 #19065가 해결되었습니다. #19086 (alexey-milovidov).WITH구문에서 선언한 별칭이 인덱스 분석에 올바르게 사용되도록 했습니다. 이제WITH column AS alias SELECT ... WHERE alias = ...와 같은 쿼리에서도 인덱스를 사용할 수 있습니다. #18896 (Amos Bird).optimize_alias_column_prediction을 추가했습니다(기본적으로 활성화됨). 이 설정은 다음을 수행합니다. - 파티션 프루닝과 보조 인덱스를 사용한 데이터 스키핑 시 WHERE 절의 별칭 컬럼을 반영합니다. -optimize_trivial_count를 위한 단순 count 쿼리에서 WHERE 절의 별칭 컬럼을 반영합니다. -optimize_aggregation_in_order/optimize_read_in_order를 위한 GROUP BY/ORDER BY에서 별칭 컬럼을 반영합니다. #16995 (sundyli).- 집계 함수
sum의 속도를 높였습니다. 이 개선은 합성 벤치마크에서만 눈에 띄며, 실용성은 크지 않습니다. #19216 (alexey-milovidov). - libc++를 업데이트하고 더 나은 성능을 위해 다른 ABI를 사용하도록 했습니다. #18914 (Danila Kutenin).
- 논리적으로 동등한 경우
sumIf()및sum(if())함수를countIf()함수로 재작성합니다. #17041 (flynn). s3_max_connections설정으로 제어되는 S3 연결 풀을 사용합니다. #13405 (Vladimir Chebotarev).- 공간 절약을 위해 문자열 컬럼을 더 잘 압축할 수 있는 zstd long 옵션 지원을 추가했습니다. #17184 (ygrek).
- 각 연결마다 구성에 접근하던 동작을 제거해 서버 지연 시간을 약간 개선했습니다. #19863 (alexey-milovidov).
Buffer엔진의 여러 레이어에서 잠금 경합을 줄였습니다. #19379 (Azat Khuzhin).- 쿼리 계획의
Filter단계를Expression + Filter쌍으로 분할할 수 있도록 지원합니다.Expression + Expression병합 최적화(#17458)와 함께 사용하면Filter단계 이후 일부 표현식의 실행을 지연시킬 수 있습니다. #19253 (Nikolai Kochetov).
개선
SELECT count() FROM table는 이제table에서 임의의 컬럼 1개만 선택할 수 있어도 실행할 수 있습니다. 이 PR은 #10639을 수정합니다. #18233 (Vitaly Baranov).- 원격 MySQL server와 통신할 때 문자 집합을
utf8mb4로 설정하도록 했습니다. #19795를 해결합니다. #19800 (alexey-milovidov). S3테이블 함수가 이제auto압축 모드(자동 감지)를 지원합니다. 이로써 #18754 문제가 해결되었습니다. #19793 (Vladimir Chebotarev).formatReadableTimeDelta함수에서 무한대 인수를 올바르게 출력합니다. 이전 버전에서는 구현별 정수 값으로 암시적으로 변환되었습니다. #19791 (alexey-milovidov).- 테이블 함수
S3는 리전을 정확히 확인할 수 없을 경우 글로벌 리전을 사용합니다. 이로써 #10998가 해결되었습니다. #19750 (Vladimir Chebotarev). - 분산 쿼리에서 설정
async_socket_for_remote가 활성화된 경우, 테이블에 매우 깊게 중첩된 데이터 타입(예:Array(Array(Array(...more...))))을 사용하면 적어도 디버그 빌드 구성에서는 스택 오버플로우가 발생할 수 있었습니다. 이 변경으로 #19108가 수정되었습니다. 이 변경에는 경미한 하위 호환성 문제가 있습니다. 이제 타입 정의에서 과도한 괄호는 더 이상 지원되지 않습니다. 예시:Array((UInt8)). #19736 (alexey-milovidov). - 메시지 브로커(RabbitMQ 및 Kafka)용으로 별도의 풀을 추가했습니다. #19722 (Azat Khuzhin).
- 드물게
max_number_of_merges_with_ttl_in_pool제한을 초과하는 문제(TTL이 있는 머지를 더 많이 할당할 수 있음)를 비복제 MergeTree에서 수정했습니다. #19708 (alesapin). - 딕셔너리: 속성 구문 분석 중 오류 메시지 개선. #19678 (Maksim Kita).
- 읽기 시 체크섬 검증을 비활성화하는 옵션을 추가했습니다. 프로덕션 환경에서는 절대 사용해서는 안 됩니다. 이를 비활성화해도 어떤 이점도 기대하지 마십시오. 실험과 벤치마크에만 사용할 수 있습니다. 이 설정은 MergeTree 엔진 계열의 테이블에만 적용됩니다. 다른 테이블 엔진에서는 물론 네트워크를 통해 데이터를 수신할 때도 항상 체크섬을 검증합니다. 제 관찰로는 성능 차이가 없거나 0.5% 미만입니다. #19588 (alexey-milovidov).
- 함수
multiIf에서 상수 결과를 지원하도록 했습니다. #19533 (Maksim Kita). - Map 데이터 유형에서 length/empty/notEmpty 함수를 사용할 수 있도록 했으며, 이 함수들은 Map의 키 개수를 반환합니다. #19530 (taiyang-li).
clickhouse-benchmark에--reconnect옵션을 추가했습니다. 이 옵션을 지정하면 각 요청 전에 다시 연결합니다. 이는 테스트에 필요합니다. #19872 (alexey-milovidov)..debug파일의 새 위치 사용을 지원합니다. 이 변경으로 #19348 문제가 수정되었습니다. #19520 (Amos Bird).toIPv6함수가IPv4주소를 파싱합니다. #19518 (Bharat Nallan).system.query_log,system.processes등에http_referer필드를 추가했습니다. 이로써 #19389가 해결되었습니다. #19390 (alexey-milovidov).- 더 많은 함수에서 대소문자를 구분하지 않도록 하고 별칭을 추가해 MySQL 호환성을 개선했습니다. #19387 (Daniil Kondratyev).
- MergeTree 파트 유형(Wide/Compact/InMemory)용 메트릭을 추가했습니다. #19381 (Azat Khuzhin).
- 임의의 UID로 Docker를 실행할 수 있도록 합니다. #19374 (filimonov).
- Pretty 형식에서
IPv4데이터 타입 값의 잘못된 정렬을 수정했습니다. 기존에는 왼쪽이 아니라 오른쪽으로 정렬되었습니다. 이로써 #19184가 해결되었습니다. #19339 (alexey-milovidov). - 재시작 없이
max_server_memory_usage를 변경할 수 있게 되었습니다. 이로써 #18154가 해결되었습니다. #19186 (alexey-milovidov). - 이전 버전에서는 함수
bar가 특정 NaN 인수로 호출될 때 발생하는 예외가 다소 오해의 소지가 있을 수 있었습니다. 이 수정으로 #19088 문제가 해결되었습니다. #19107 (alexey-milovidov). - clickhouse-server 이미지에서 clickhouse 사용자 및 그룹의 uid / gid를 고정값(101)으로 명시적으로 설정했습니다. #19096 (filimonov).
- 매우 긴 문자열이 포함된 데이터를 삽입할 때 발생하던
PeekableReadBuffer: Memory limit exceed오류를 수정했습니다. #18690을 해결합니다. #18979 (tavplubix). - Docker 이미지: clickhouse-server 엔트리포인트가 여러 면에서 개선되었습니다. #18954 (filimonov).
- 긴 이름을
?로 마스킹하지 않고도 쿼리를 정규화할 수 있도록normalizeQueryKeepNames와normalizedQueryHashKeepNames를 추가했습니다. 이를 통해 복잡한 쿼리 로그를 더욱 효과적으로 분석할 수 있습니다. #18910 (Amos Bird). - 전송 전에 송신 측에서 분산 배치의 블록별 체크섬을 확인합니다(파일을 두 번 읽지 않고도, 읽는 동안 체크섬이 검증됩니다). 이렇게 하면 송신 측의 잘린 .bin 파일로 인해 수신 측에서
INSERT가 멈추는 현상을 방지할 수 있습니다. 또한 배치INSERT를 위해 .bin 파일을 두 번 읽지 않도록 했습니다(이전에는 squashing을 고려해 행 수/바이트 수를 계산하기 위해 필요했지만, 이제 이 정보가 헤더에 포함되며 하위 호환성도 유지됩니다). #18853 (Azat Khuzhin). - 집계 함수 상태를 가진 테이블의 RIGHT 및 FULL JOIN 문제를 수정했습니다. 이전 버전에서는
cloneResized메서드와 관련된 예외가 발생했습니다. #18818 (templarzq). - 접두사 기반 S3 엔드포인트 설정이 추가되었습니다. #18812 (Vladimir Chebotarev).
- bitmapTransform, bitmapSubsetInRange, bitmapSubsetLimit, bitmapContains 함수에서 [UInt8, UInt16, UInt32, UInt64] 인수 타입을 지원하도록 추가했습니다. 이로써 #18713이 해결되었습니다. #18791 (sundyli).
- CTE(공통 테이블 표현식)에 추가 별칭을 지정할 수 있도록 했습니다.
enable_global_with_statement = 1일 때 같은 수준의 서브쿼리에도 CSE(공통 서브표현식 제거)가 전파되도록 했습니다. 이로써 #17378가 수정되었습니다. 이로써 https://github.com/ClickHouse/ClickHouse/pull/16575#issuecomment-753416235 도 수정되었습니다. #18684 (Amos Bird). - librdkafka를 v1.6.0-RC2로 업데이트했습니다. #18668 문제를 수정했습니다. #18671 (filimonov).
- 예기치 않은 예외가 발생할 경우 분산 DDL 쿼리 실행을 담당하는 백그라운드 스레드를 자동으로 재시작합니다. #17991을 수정합니다. #18285 (徐炘).
- S3에서 전역 리전을 활용할 수 있도록 AWS C++ SDK를 업데이트했습니다. #17870 (Vladimir Chebotarev).
LIVE VIEW테이블 생성 시WITH ... [AND] [PERIODIC] REFRESH [interval_in_sec]절 지원이 추가되었습니다. #14822 (vzakaznikov).- 이전 구문으로 생성된
MergeTree테이블에서는MODIFY TTL쿼리가 제한됩니다. 이전에는 이 쿼리가 성공하는 것처럼 보였지만 실제로는 아무런 효과가 없었습니다. #19064 (Anton Popov).
버그 수정
- 상수 인수를 사용하는 이항 함수의 인덱스 분석을 수정해 잘못된 쿼리 결과가 발생하던 문제를 해결했습니다. 이 수정으로 #18364가 해결되었습니다. #18373 (Amos Bird).
dictGet()를 포함한 기본 표현식이 있는 테이블로 서버를 시작할 때 발생하던 문제를 수정했습니다. 이제 딕셔너리를 로드하지 않아도dictGet()의 반환 유형을 확인할 수 있습니다. #19805 (Vitaly Baranov).if함수에서 then/else 분기 결과의Tuple유형을 사용하는 쿼리 실행 후 발생하던 서버 충돌을 수정했습니다.Tuple유형에는Array또는 다른 복합 유형이 포함되어 있어야 합니다. #18356을 수정했습니다. #20133 (alesapin).MaterializeMySQL(실험적 기능): 여러 테이블을 업데이트하는 SQL 문의 복제 문제를 수정했습니다. #20066 (Håvard Kvålen).- 초기화 스크립트 실행 중 docker에서 발생하는 “Connection refused”를 방지합니다. #20012 (filimonov).
EmbeddedRocksDB는 실험적 스토리지입니다. 적절한 타입 검사가 이루어지지 않던 문제를 수정했습니다. 코드를 단순화했습니다. 이 변경으로 #19967가 해결되었습니다. #19972 (alexey-milovidov).- 인수 타입이
Nullable(T)이고 Int32를 제외한 다른 정수형 타입일 때 함수fromModifiedJulianDay에서 발생하는 세그폴트를 수정했습니다. #19959 (PHO). - 이전 버전에서 함수
greatCircleAngle는 부정확한 결과를 반환했습니다. 이로써 #19769가 해결되었습니다. #19789 (alexey-milovidov). - 데이터 손상 이후 일부 복제된 작업(예: mutation)이 일부 파트를 처리하지 못하는 드문 버그를 수정했습니다. #19593를 해결합니다. #19702 (alesapin).
ON CLUSTER쿼리를 실행하는 백그라운드 스레드가 삭제된 복제된 테이블이 어떤 작업을 수행하기를 기다리다가 멈추는 문제가 있었습니다. 수정되었습니다. #19684 (yiguolei).- 컬럼 설명이 잘못 역직렬화되던 문제를 수정했습니다. 이로 인해 이름이
\인 컬럼이 있는 테이블(table)에 INSERT할 수 없었습니다. #19479 (alexey-milovidov). - 파일 중 하나에 빈 데이터 블록이 있으면 분산 배치를 손상된 것으로 표시합니다. #19449 (Azat Khuzhin).
DROP/DETACH/REPLACE/MOVE PARTITION이후 mutation이 멈출 수 있는 매우 드문 버그를 수정했습니다. 이 문제는 대부분의 경우 #15537에서 부분적으로 수정되었습니다. #19443 (tavplubix).- 발생 가능한 오류
Extremes transform was already added to pipeline를 수정했습니다. #14100. #19430 (Nikolai Kochetov). - 0이 아닌 기본값(예: 일부 Enum)을 갖는 JOIN 타입의 기본값 처리를 수정했습니다. #18197를 해결합니다. #19360 (vdimir).
- EOF에서 분산 전송용 mark file을 손상된 것으로 표시하지 않도록 했습니다. #19290 (Azat Khuzhin).
async_socket_for_remote의 파이프 fd 누수를 수정했습니다. #19153 (Azat Khuzhin).- 파일에서
ORC포맷을 무한히 읽는 문제를 수정했습니다(#10580에서 도입됨). #19095를 해결했습니다. #19134 (Nikolai Kochetov). - 마크 크기가 고정된 세분화 수준보다 커질 수 있는 MergeTree 데이터 작성기 문제를 수정했습니다. #18913을 수정합니다. #19123 (alesapin).
- ClickHouse가
LowCardinality(Nullable(...))에서 압축 코덱을 읽지 못하고Attempt to read after EOF예외를 발생시키던 시작 시 버그를 수정했습니다. #18340을 해결합니다. #19101 (alesapin). tupleHammingDistance구현을 단순화했습니다. 길이가 같은 모든 튜플을 지원합니다. #19029를 수정했습니다. #19084 (Nikolai Kochetov).groupUniqArray가 Enum 유형의 인수에 대해 올바른 유형을 반환하도록 수정했습니다. 이로써 #17875가 해결되었습니다. #19019 (alexey-milovidov).LowCardinality인수와 함께 함수ignore를 사용할 때 발생할 수 있는 오류Expected single dictionary argument for function를 수정했습니다. #14275를 해결했습니다. #19016 (Nikolai Kochetov).TinyLog엔진을 사용하는 테이블에LowCardinality컬럼을 삽입할 때 발생하던 문제를 수정했습니다. 이 변경으로 #18629가 해결되었습니다. #19010 (Nikolai Kochetov).- JOIN의 사소한 문제를 수정했습니다. Join이 const 컬럼을 구체화하려고 시도하지만, 코드의 다른 부분에서는 이러한 컬럼이 그대로 남아 있기를 기대합니다. #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). - 종료 시 매우 드물게 발생하는 데드락을 수정했습니다. #18977 (tavplubix).
- server의 메모리가 부족할 때 드물게 발생하던 충돌을 수정했습니다. #18976 (tavplubix).
ALTER TABLE ... DROP PART 'part_name'쿼리가 전체 파티션의 모든 중복 제거 블록을 삭제하는 잘못된 동작을 수정했습니다. #18874를 수정합니다. #18969 (alesapin).- 이슈 #18894를 수정했습니다. 긴 컬럼 별칭(alias)(
table.column형식으로, 보통 Looker와 같은 BI 도구에서 자동 생성됨)이 긴 테이블 이름과 같을 때 예외가 발생하지 않도록 검사를 추가했습니다. #18968 (Daniel Qin). Task was not found in task queue오류를 수정했습니다(원격 쿼리에서만 발생 가능하며,async_socket_for_remote = 1인 경우). #18964 (Nikolai Kochetov).- 일부 이스케이프된 텍스트가 포함된 mutation(예:
ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1'))의 직렬화가 잘못되던 버그를 수정했습니다. #18878를 해결했습니다. #18944 (alesapin). - ATTACH PARTITION은 뮤테이션을 초기화합니다. #18804. #18935 (fastio).
bitmapOrCardinality에서 널 포인터 역참조가 발생할 수 있는 문제를 수정했습니다. 이로써 #18911이 해결되었습니다. #18912 (sundyli).Nullable(String)에서Nullable(Decimal(P, S))로NULL을CAST하려고 할 때 발생하던Attempt to read after eof오류를 수정했습니다. 이제 함수CAST는 널 허용 문자열에서 decimal을 파싱할 수 없으면NULL을 반환합니다. #7690을 해결했습니다. #18718 (Winter Zhang).- MySQL engine의 데이터 타입 변환 문제를 해결했습니다. #18124 (bo zeng).
select만 실행할 때 clickhouse-client에서 발생하는 abort 예외를 수정했습니다. #19790 (taiyang-li).
빌드/테스트/패키징 개선
- CI에서 SQLancer(논리 SQL 퍼저)를 실행하도록 했습니다. #19006 (Ilya Yatsishin).
- 쿼리 퍼저가 새로 추가된 테스트를 더 폭넓게 퍼징하도록 했습니다. 이로써 #18916이 해결됩니다. #19185 (alexey-milovidov).
- 더 나은 퍼징을 위해 Big List of Naughty Strings와 통합했습니다. #19480 (alexey-milovidov).
- MSan으로 실행되는 통합 테스트를 추가했습니다. #18974 (alesapin).
- cyrus-sasl 및 musl의 MemorySanitizer 오류를 수정했습니다. #19821 (Ilya Yatsishin).
positionCaseInsensitiveUTF8함수에서 인수 부족 검사 시 address sanitizer가 트리거되던 문제를 수정했습니다. #19720 (alexey-milovidov).- 통합 테스트에서 docker-compose용 —project-directory를 제거했습니다. Docker 컨테이너의 로그 포맷도 수정했습니다. #19706 (Ilya Yatsishin).
- 통합 테스트용 macros.xml을 더 쉽게 생성할 수 있도록 했습니다. dicttoxml의 과도한 로깅도 더 이상 발생하지 않습니다. dicttoxml 프로젝트는 5년 넘게 활발히 유지보수되지 않았습니다. #19697 (Ilya Yatsishin).
- 환경 변수
CLICKHOUSE_WATCHDOG_ENABLE로 watchdog를 명시적으로 활성화하거나 비활성화할 수 있도록 했습니다. 기본적으로 server가 터미널에 연결되어 있지 않으면 활성화됩니다. #19522 (alexey-milovidov). - arm64에서 Kafka 지원을 포함해 ClickHouse를 빌드할 수 있도록 했습니다. #19369 (filimonov).
- ssl 없이 librdkafka를 빌드할 수 있도록 했습니다. #19337 (filimonov).
- FreeBSD 빌드에서 Kafka 입력을 복원했습니다. #18924 (Alexandre Snarskii).
- 테이블 함수
VALUES에서 발생할 수 있는 nullptr 역참조 문제를 수정했습니다. #19357 (alexey-milovidov). arrayElement함수,substring,arraySum에서 UBSan 보고가 발생하지 않도록 했습니다. #19305를 수정했습니다. #19287를 수정했습니다. 이로써 #19336이 해결됩니다. #19347 (alexey-milovidov).
ClickHouse 릴리스 21.1
ClickHouse 릴리스 v21.1.3.32-안정, 2021-02-03
버그 수정
- BloomFilter 인덱스 크래시 수정. #19757를 해결했습니다. #19884 (Maksim Kita).
- 프레디케이트를 union distinct 서브쿼리에 푸시다운할 때 발생하던 크래시를 수정했습니다. 이 변경으로 #19855가 해결됩니다. #19861 (Amos Bird).
- UInt8 값이 127보다 큰 경우의 필터링을 수정했습니다. #19799 (Anton Popov).
- 이전 버전에서는 함수
arrayEnumerateUniq에 비정상적인 인수가 전달될 경우 충돌이 발생하거나 무한 루프에 빠질 수 있었습니다. 이로써 #19787가 해결되었습니다. #19788 (alexey-milovidov). - 산술 타입과 String 타입 간의 정확한 비교를 사용할 때 발생하던 스택 오버플로우를 수정했습니다. #19773 (tavplubix).
- 중첩된 컬럼 이름이
WHERE또는PREWHERE에서 사용될 때 발생하던 크래시를 수정했습니다. #19755를 해결한 변경입니다. #19763 (Nikolai Kochetov). bitmapAndnot함수의 세그멘테이션 폴트를 수정했습니다. #19668를 수정했습니다. #19713 (Maksim Kita).- 큰 정수와 관련된 일부 함수에서 세그멘테이션 오류가 발생할 수 있습니다. 큰 정수 기능은 실험적 기능입니다. 이 변경으로 #19667이 해결되었습니다. #19672 (alexey-milovidov).
LowCardinality인수에 대한neighbor함수의 잘못된 결과 문제를 수정했습니다. #10333. #19617 (Nikolai Kochetov).- 연결 해제 후 Connection에서 CompressedWriteBuffer를 해제한 뒤 다시 사용하는(use-after-free) 문제를 수정했습니다. #19599 (Azat Khuzhin).
DROP/DETACH TABLE table ON CLUSTER cluster SYNC쿼리가 멈출 수 있던 문제가 수정되었습니다. #19568 문제를 수정했습니다. #19572 (tavplubix).- CREATE DICTIONARY 쿼리의 id 표현식 수정. #19571 (Maksim Kita).
- 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).
- Uber H3 라이브러리의 잠재적인 버퍼 오버플로우 문제를 수정했습니다. https://github.com/uber/h3/issues/392를 참조하십시오. 이 변경으로 #19219가 해결되었습니다. #19383 (alexey-milovidov).
- system.parts _state 컬럼을 수정했습니다(잘못된 순서 때문에 이 컬럼을 쿼리하면 LOGICAL_ERROR가 발생하던 문제). #19346 (Azat Khuzhin).
- materialized view와 대상 테이블의 구조가 서로 다를 때 집계에서 발생할 수 있는 잘못된 결과 또는 segfault를 수정했습니다. #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).- 결과를 계산할 수 없는 경우 분석 단계에서 서브쿼리의 상수 접기를 비활성화합니다. #18446 (Azat Khuzhin).
MOVE또는REPLACE PARTITION이후, 드물게는DETACH또는DROP PARTITION이후에 존재하지 않는 part를 기다리느라 mutation이 멈춘 상태로 남아 있을 수 있었습니다. 이 문제가 수정되었습니다. #15537 (tavplubix).
ClickHouse 릴리스 v21.1.2.15-안정 2021-01-18
하위 호환되지 않는 변경 사항
- 설정
input_format_null_as_default가 기본적으로 활성화됩니다. #17525 (alexey-milovidov). - config의 프로필 설정에 대한 제약 조건을 검사합니다. users.xml에 해당 제약 조건을 충족하지 않는 설정이 포함되어 있으면 server가 시작되지 않습니다. #18486 (tavplubix).
- 데이터 파트에 영향을 미치는 스토리지 설정(
write_final_mark,enable_mixed_granularity_parts)을 변경하지 못하도록ALTER MODIFY SETTING을 제한합니다. #18306 (Amos Bird). - 기본적으로
insert_quorum_parallel을 1로 설정합니다. 이는 “sequential” 쿼럼 삽입보다 훨씬 사용하기 편리합니다. 하지만 순차 일관성에 의존하는 경우 이 설정을 다시 0으로 되돌려야 합니다. #17567 (alexey-milovidov). sumburConsistentHash함수를 제거했습니다. 이로써 #18120이 해결됩니다. #18656 (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를 참조하십시오.
- 기본 config에서 substitutions 파일(
/etc/metrika.xml)에 대한incl참조가 제거되었습니다(<remote_servers>,<zookeeper>,<macros>,<compression>,<networks>). substitutions 파일을 사용하고 있었고 이러한 암묵적 참조에 의존했다면, 업데이트 전에 해당 섹션을incl="..."속성과 함께 추가해 수동으로 명시적으로 다시 설정해야 합니다. #18740 (alexey-milovidov).
새로운 기능
- ClickHouse에 gRPC 프로토콜 지원을 구현했습니다. #15111 (Vitaly Baranov).
- 여러 ZooKeeper 클러스터를 사용할 수 있도록 했습니다. #17070 (fastio).
REPLACE TABLE및CREATE OR REPLACE TABLE쿼리를 구현했습니다. #18521 (tavplubix).UNION DISTINCT를 구현하고, 일반UNION절은 기본적으로UNION DISTINCT로 처리하도록 했습니다. 또한 이를UNION ALL로 처리하거나 모드를 명시적으로 지정하도록 요구할 수 있는union_default_mode설정을 추가했습니다. #16338 (flynn).- 함수
accurateCastOrNull을 추가했습니다. 이로써 #10290이 해결되었습니다.x IN (subquery)표현식에 형 변환을 추가했습니다. 이로써 #10266이 해결되었습니다. #16724 (Maksim Kita). - IP 딕셔너리에서
IPv4/IPv6타입을 직접 지원합니다. #17571 (vdimir). - IP 딕셔너리에서 키 조회를 지원합니다. #18241을 해결했습니다. #18480 (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설정이 추가되었습니다. 활성화되면, 해당 블록에서 머지가 수행된 경우와 동일한 변환(예: Replacing, Collapsing, Aggregating…)이 INSERT된 데이터 블록에 적용됩니다. 이 설정은 기본적으로 활성화되어 있습니다. 이로 인해 materialized view와 MaterializeMySQL의 동작에 영향을 줄 수 있습니다(자세한 설명 참조). 이 변경으로 #10683가 해결되었습니다. #16954 (Kruglov Pavel).- HDFS용 Kerberos 인증. #16621 (Ilya Golshtein).
SHOW SETTINGS문을 지원하여 system.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). - 삽입된 파트에 대한
query_id컬럼을system.part_log에 추가합니다. #10097를 해결합니다. #18644 (flynn). - 컬럼을 지정한
CREATE TABLE ... AS SELECT를 허용합니다. 예시CREATE TABLE t1 (x String) ENGINE = Memory AS SELECT 1;. #18060 (Maksim Kita). arrayMin,arrayMax,arrayAvg집계 함수가 추가되었습니다. #18032 (Maksim Kita).ATTACH TABLE name FROM 'path/to/data/' (col1 Type1, ...쿼리를 구현했습니다. 이 쿼리는 지정된 구조로 새 테이블을 생성하고,user_files아래의 지정된 디렉터리에서 테이블 데이터를 연결하여 등록합니다. #17903 (tavplubix).- StorageMemory에 mutation 지원이 추가되었습니다. 이로써 #9117이 해결되었습니다. #15127 (flynn).
EXISTS DATABASE name구문을 지원합니다. #18458 (Du Chuan).- MySQL처럼 내장 함수
isIPv4String및isIPv6String을 지원합니다. #18349 (Du Chuan). - 분산 키가 없어도 여러 세그먼트로 이루어진 분산 테이블에 삽입할 수 있도록 새로운 설정
insert_distributed_one_random_shard = 1을 추가했습니다. #18294 (Amos Bird). min_compress_block_size및max_compress_block_size설정이 MergeTreeSettings에 추가되었습니다. 이 설정은 전역 설정보다 우선순위가 높으며, 설정된 경우 적용됩니다. close 13890. #17867 (flynn).- 64비트 Roaring 비트맵 지원이 추가되었습니다. #17858 (Andy Yang).
- 중복 검사에 사용할 컬럼 목록을 명시적으로(또는 별표/컬럼 변환기를 통해 암시적으로) 지정할 수 있도록
OPTIMIZE ... DEDUPLICATE구문을 확장했습니다. … #17846 (Vasily Nemkov). toModifiedJulianDay,fromModifiedJulianDay,toModifiedJulianDayOrNull,fromModifiedJulianDayOrNull함수가 추가되었습니다. 이 함수들은 프로렙틱 그레고리력 날짜와 수정 율리우스일 번호 간 변환을 수행합니다. #17750 (PHO).- 사용자 지정 TLD 목록을 사용할 수 있도록 기능을 추가했습니다. 함수
firstSignificantSubdomainCustom,cutToFirstSignificantSubdomainCustom를 추가했습니다. #17748 (Azat Khuzhin). - 네이티브 TCP 인터페이스를 감싸는
PROXYv1프로토콜 지원을 추가했습니다. 프록시가 전달한 IP 주소를 기준으로 쿼터를 적용할 수 있도록 했습니다(PROXYv1주소와 HTTP 인터페이스의X-Forwarded-For에 적용됨). 이는 ClickHouse에 신뢰할 수 있는 프록시(예: CloudFlare)를 통해서만 액세스를 제공하면서도, 원래 IP 주소를 기준으로 사용자 리소스 사용량을 집계하려는 경우에 유용합니다. 이 변경으로 #17268이 수정되었습니다. #17707 (alexey-milovidov). - 이제 clickhouse-client에서 명령을 편집할 때
EDITOR를 열 수 있습니다.Alt-Shift-E. #17665 (Amos Bird). - 문자열을 XML 텍스트 노드 또는 속성에 넣을 때 문자를 이스케이프하는 함수
encodeXMLComponent를 추가했습니다. #17659 (nauta). DETACH TABLE/VIEW ... PERMANENTLY구문을 도입하여, 재시작 후 테이블이 자동으로 다시 나타나지 않도록 했습니다(명시적으로 요청한 경우에만 다시 나타납니다). 테이블은 짧은 구문인 ATTACH TABLE을 사용해 다시 attach할 수 있습니다. #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타입을 만들 수 있도록 새로운 집계 함수 combinator인-SimpleState를 추가했습니다. 이는 AggregatingMergeTree 엔진의 MaterializedView를 정의할 때 유용하며, 프로젝션에도 도움이 됩니다. #16853 (Amos Bird). clickhouse-client와clickhouse-local에queries-file매개변수가 추가되었습니다. #15930 (Maksim Kita).clickhouse-benchmark에query매개변수를 추가했습니다. #17832 (Maksim Kita).EXPLAIN AST가 이제SELECT뿐만 아니라 다른 쿼리도 지원합니다. #18136 (taiyang-li).
실험적 기능
- 텍스트 n-그램과 shingle의 minHash 및 simHash를 계산하는 함수가 추가되었습니다. 이 함수들은 유사 중복 검색에 사용됩니다. 또한
bitHammingDistance및tupleHammingDistance함수도 추가되었습니다. #7649 (flynn). - 새로운 데이터 타입
Map이 추가되었습니다. #1841을 참조하십시오.Map의 첫 번째 버전은 키와 값에String타입만 지원합니다. #15806 (hexiaoting). - ANTLR4 런타임을 기반으로 하고 EBNF 문법에서 생성된 대체 SQL 파서가 구현되었습니다. #11298 (Ivan).
성능 개선
- 메모리 사용량을 줄인 새로운 IP 딕셔너리 구현으로, 일부 경우 성능을 개선하고 버그를 수정했습니다. #16804 (vdimir).
- 데이터 내보내기용 병렬 포맷팅. #11617 (Nikita Mikhaylov).
- LDAP 통합: LDAP 서버 연결 구성에
verification_cooldown매개변수를 추가하여, 성공한 “bind” 시도를 구성 가능한 기간 동안 캐싱할 수 있도록 했습니다. #15988 (Denis Glazachev). clickhouse-local에--no-system-table옵션이 추가되어 시스템 테이블 없이 실행할 수 있습니다. 이렇게 하면 시작 시 수십 밀리초가 걸릴 수 있는DateLUT초기화를 방지할 수 있습니다. #18899 (alexey-milovidov).windowFunnel함수의 성능 향상을 위해AggregateFunctionWindowFunnelData에서PODArray를PODArrayWithStackMemory로 대체했습니다. #18817 (flynn).- 분산 테이블에 동기식 INSERT를 수행할 때 빈 블록을 세그먼트로 전송하지 않도록 했습니다. 이로써 #14571이 해결되었습니다. #18775 (alexey-milovidov).
- StorageMemory 읽기 작업을 최적화했습니다. #18052 (Maksim Kita).
- float를 string으로 변환할 때 ryu 대신 Dragonbox 알고리즘을 사용합니다. 이에 따라 float를 string으로 변환하는 성능이 크게 향상됩니다. #17831 (Maksim Kita).
IPv6CIDRToRange구현 속도 개선. #17569 (vdimir).remerge_sort_lowered_memory_bytes_ratio설정이 추가되었습니다(리머지 후 메모리 사용량이 이 비율만큼 감소하지 않으면 리머지가 비활성화됩니다). #17539 (Azat Khuzhin).- PK의
SimpleAggregateFunction(String)을 사용하는 AggregatingMergeTree의 성능을 개선했습니다. #17109 (Azat Khuzhin). - 이제
-Ifcombinator가 디버추얼라이즈되었고,count도 올바르게 벡터화되었습니다. 이는 이 PR에 대한 변경입니다. #17043 (Amos Bird). - 매우 많은
MergeTree테이블에 걸친Merge테이블 읽기 성능을 개선했습니다. #7748을 수정했습니다. #16988 (Anton Popov). repeat함수의 성능을 개선했습니다. #16937 (satanson).- 부동소수점 파싱 성능이 소폭 개선되었습니다. #16809 (Maksim Kita).
OPTIMIZE TABLE ... FINAL에서 병합된 파티션을 건너뛸 수 있도록 했습니다. #15939 (Kruglov Pavel).- 부동소수점 수를 파싱하기 위해 Daniel Lemire의 fast_float와 통합했습니다. #16787 (Maksim Kita). 하지만 아직 ClickHouse의 기존 부동소수점 파서보다 성능이 낮아 활성화되지는 않았습니다.
- max_distributed_connections를 수정했습니다(
prefer_localhost_replica = 1및max_threads != max_distributed_connections에 영향을 줍니다). #17848 (Azat Khuzhin). - S3로 데이터를 전송할 때 단일/다중 part 업로드를 자동으로 선택합니다. 단일 part 업로드는 새로운 설정
max_single_part_upload_size로 제어됩니다. #17934 (Pavel Kovalenko). PipelineExecutor에서 비동기 작업을 지원합니다. 원격 쿨리를 위한 비동기 소켓을 초기 지원합니다. #17868 (Nikolai Kochetov).- 컬럼 크기를 알 수 없는 경우에도 compact 파트에서
optimize_move_to_prewhere최적화를 사용할 수 있도록 허용했습니다. #17330 (Anton Popov).
개선
TinyLog또는Log테이블 엔진을 사용하는 테이블에서 자기 자신을 대상으로 INSERT SELECT를 실행할 때 데드락이 발생하는 문제를 방지했습니다. 이로써 #6802가 해결되었습니다. 이로써 #18691가 해결되었습니다. 이로써 #16812가 해결되었습니다. 이로써 #14570가 해결되었습니다. #15260 (alexey-milovidov).- MySQL처럼
SHOW CREATE VIEW name구문을 지원합니다. MySQL. #18095 (Du Chuan). Decimal * Float유형의 모든 쿼리와 그 반대 조합도 허용되며, 집계 쿼리도 포함됩니다(예:SELECT sum(decimal_field * 1.1)또는SELECT dec_col * float_col). 결과 유형은 Float32 또는 Float64입니다. #18145 (Mike).- 간소한 Web UI를 개선했습니다: 이력을 추가하고, 공유 기능을 지원하며, 서로 다른 요청 간 경쟁 상태를 방지하고, 요청 처리 중 및 준비 완료 표시기를 추가하고, 파비콘을 추가했으며, textarea에 포커스가 없을 때 Ctrl+Enter 입력을 감지하도록 했습니다. #17293 #17770 (alexey-milovidov).
- clickhouse-server가 ZooKeeper 서버에
close요청을 보내지 않던 문제를 수정했습니다. #16837 (alesapin). - 메모리 제한이 지나치게 낮은 경우(
max_memory_usage = 1/max_untracked_memory = 1) server의 비정상 종료를 방지했습니다. #17453 (Azat Khuzhin). - 서로 다른 이벤트의 timestamp가 동일한 경우 발생하던
windowFunnel함수의 비결정적 결과를 수정했습니다. #18884 (Fuwang Hu). - Docker: clickhouse-server Docker 이미지에서 clickhouse 사용자 및 그룹의 uid / gid를 고정된 값(101)으로 명시적으로 설정했습니다. #19096 (filimonov).
Distributed테이블로의 비동기 INSERT: MergeTree 엔진 계열과 마찬가지로 두 개의 새로운 설정이 추가되었습니다: -fsync_after_insert- 삽입할 때마다 fsync를 수행합니다. 삽입 성능이 저하됩니다. -fsync_directories- 모든 작업(쓰기, 이름 변경 등) 후 임시 디렉터리(비동기 INSERT에만 사용됨)에 fsync를 수행합니다. #18864 (Azat Khuzhin).- Docker에서
SYSTEM KILL명령이 작동하게 되었습니다. 이로써 #18847가 해결되었습니다. #18848 (alexey-milovidov). 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).
- 사용성 문제를 수정했습니다. 일부 도구에서 예외 메시지 뒤에 줄바꿈이 없던 문제입니다. #18444 (alexey-milovidov).
- 프라이머리 키 및 파티션 키 컬럼의 유형을
LowCardinality(Type)에서Type으로, 또는 그 반대로 변경할 수 있는 기능을 추가했습니다. 또한 프라이머리 키 컬럼의 유형을EnumX에서IntX로 변경할 수 있는 기능도 추가했습니다. #5604를 수정했습니다. #18362 (alesapin). untuple필드 접근을 구현했습니다. #18133. #18309 (hexiaoting).- 중첩 CSV로 직렬화된 배열이 들어 있는 문자열로 표현된 경우, CSV의 배열(Array) 필드를 파싱할 수 있습니다. 예시:
"[""Hello"", ""world"", ""42"""" TV""]"는['Hello', 'world', '42" TV']로 파싱됩니다. CSV에서 배열을 감싸는 중괄호 없이 문자열 안에 있는 배열도 파싱할 수 있습니다. 예시:"'Hello', 'world', '42"" TV'"는['Hello', 'world', '42" TV']로 파싱됩니다. #18271 (alexey-milovidov). - MergeTree 와이드 파트에 대한 적응형 세분화 수준 계산을 개선했습니다. #18223 (alesapin).
- 이제 Mac에서도
clickhouse install이 작동할 수 있게 되었습니다. 문제는 이 플랫폼에 procfs가 없다는 점이었습니다. #18201 (Nikita Mikhaylov). SHOW ...쿼리 구문에 대한 힌트가 개선되었습니다. #18183 (Du Chuan).- 배열 집계 함수
arrayMin,arrayMax,arraySum,arrayAvg가Int128,Int256,UInt256를 지원합니다. #18147 (Maksim Kita). - Set 및 Join의 스토리지 설정에
disk를 추가했습니다. #18112 (Grigory Pervakov). - 접근 제어: 이제 테이블 함수
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은 인트로스펙션 함수의 사용을 금지하지만, 이제 더 이상 해당 함수에 대한 권한 부여를 막지는 않습니다(권한을 부여받은 사용자가 그 권한을 사용하려면 직접allow_introspection_functions=1로 설정해야 합니다). 마찬가지로allow_ddl=0은 DDL 명령의 사용을 금지하지만, 이제 더 이상 해당 명령에 대한 권한 부여를 막지는 않습니다. #17908 (Vitaly Baranov). - 사용성 개선: 컬럼 이름 힌트. #17112. #17857 (fastio).
- 두 개의 머지 테이블이 서로의 데이터를 읽으려고 할 때 진단 정보를 추가합니다. #17854 (徐炘).
- ClickHouse Docker image를 사용해 스크립트를 실행할 때 timeout 값을 재정의할 수 있게 했습니다. #17818 (Guillaume Tassery).
- 일부 구성 오류를 방지하기 위해 시스템 로그 테이블의 엔진 정의 문법을 검사합니다. 이 문법 검사는 의미적 검사가 아니므로, 존재하지 않는 컬럼이나 표현식 함수와 같은 오류는 테이블이 생성되기 전까지 발견되지 않을 수 있습니다. #17739 (Du Chuan).
- 연결이 없더라도
RabbitMQ테이블 초기화 시 예외를 발생시키지 않도록 변경했습니다(백그라운드에서 재연결을 시도합니다). #17709 (Kseniia Sumarokova). - Buffer 플러시 시 서버 메모리 제한을 무시하지 않습니다. #17646 (Azat Khuzhin).
- use-after-free 오류를 해결하기 위해 ClickHouse-Extras의 패치된 RocksDB 버전으로 전환했습니다. #17643 (Nikita Mikhaylov).
- 병렬 parsing 시 예외 메시지에 오프셋을 추가했습니다. 이로써 #17457가 수정되었습니다. #17641 (Nikita Mikhaylov).
- INSERT 쿼리 중간에 “Too many parts” 오류가 발생하지 않도록 했습니다. #17566 (alexey-milovidov).
- ALTER 쿼리의 UPDATE 문에서 쿼리 매개변수를 사용할 수 있도록 했습니다. #10976을 수정했습니다. #17563 (alexey-milovidov).
- 쿼리 난독화기: 식별자 이름으로 일부 SQL 키워드를 사용하지 않도록 했습니다. #17526 (alexey-milovidov).
- DDLWorker가 실행한 현재 최대 DDL 엔트리를 서버 메트릭을 통해 내보냅니다. DDLWorker가 중간에 어디선가 멈췄는지 확인하는 데 유용합니다. #17464 (Amos Bird).
- 모든 서버의 현재 스레드에 대한 비동기 메트릭을 내보냅니다. 이와 같은 문제를 추적하는 데 유용합니다. #17463 (Amos Bird).
- 설정
asterisk_include_materialized_columns및asterisk_include_alias_columns가 활성화되면 와일드카드 쿼리에 MATERIALIZED / ALIAS와 같은 동적 컬럼이 포함됩니다. #17462 (Ken Chen). config.xml에서<ttl>속성을 사용해 시스템 로그 테이블의 오래된 항목을 제거할 수 있도록 TTL을 지정할 수 있습니다. #17438 (Du Chuan).- 이제 MySQL 및 PostgreSQL 프로토콜을 통해 서버에 들어오는 쿼리에는 각각 고유한 인터페이스 유형이 부여됩니다(이는 table
system.query_log의interface컬럼에서 확인할 수 있습니다). MySQL은4, PostgreSQL은5이며, 이전에 사용되던1은 이제 네이티브 프로토콜에만 사용됩니다. #17437 (Vitaly Baranov). INSERT ... SELECT ... SETTINGS쿼리의 SETTINGS 절 파싱을 수정했습니다. #17414 (Azat Khuzhin).- RadixSort의 메모리를 올바르게 계산하도록 수정했습니다. #17412 (Nikita Mikhaylov).
Attempt to read after eof예외 발생을 방지하기 위해 server의receiveHello에 eof 검사를 추가합니다. #17365 (Kruglov Pavel).- bigint 변환 중 발생할 수 있는 스택 오버플로우를 방지합니다. Big integer는 아직 실험적입니다. #17269 (flynn).
- 이제
set인덱스가GLOBAL IN에서도 작동합니다. 이로써 #17232 , #5576 문제가 해결되었습니다. #17253 (Amos Bird). - S3 스토리지에 대한 요청의 HTTP 리디렉션 제한(
s3_max_redirects)을 추가했습니다. #17220 (ianton-ru). -OrNullcombinator를-If,-Merge,-MergeState,-Statecombinator와 함께 사용할 때는-OrNull을 앞에 배치해야 합니다. #16935 (flynn).- HTTP 프록시와 HTTPS S3 엔드포인트 구성을 지원합니다. #16861 (Pavel Kovalenko).
- 환경 변수,
~/.aws,AssumeRole을 사용하는 S3 클라이언트에 올바른 authentication이 추가되었습니다. #16856 (Vladimir Chebotarev). - OpenTelemetry 스팬을 추가로 더했습니다. 스팬 데이터를 Zipkin으로 내보내는 방법에 대한 예시를 추가했습니다. #16535 (Alexander Kuzmenkov).
- 캐시 사전: 값을 가져올 때 필요한 콜백과 잠금을 완전히 제거했습니다. 키는 쿼리 수행 중 “찾을 수 없음”과 “만료됨”으로 구분하지 않고 동일한 맵에 저장합니다. #14958 (Nikita Mikhaylov).
fsync_part_directory/fsync_after_insert/in_memory_parts_insert_sync가 전혀 작동하지 않던 문제를 수정했습니다(실험적 기능). #18845 (Azat Khuzhin).MaterializeMySQL엔진의 중첩된 데이터베이스에서Atomic엔진을 사용할 수 있게 했습니다. #14849 (tavplubix).
버그 수정
- 매우 드문 경우에 server가 연결을 더 이상 수락하지 않을 수 있는 문제를 수정했습니다. #17542 (Amos Bird, alexey-milovidov).
- 잘못된 쿼리 결과를 초래하던 상수 인수가 있는 이항 함수의 인덱스 분석을 수정했습니다. 이 수정으로 #18364가 해결됩니다. #18373 (Amos Bird).
- 인덱스 비교에 사용되는 타입이 서로 다를 때 발생할 수 있는 잘못된 인덱스 분석을 수정했습니다. 이 변경으로 #17122가 해결됩니다. #17145 (Amos Bird).
- 머지 중 AIO 쓰기를 비활성화했습니다. 머지 과정에서 프라이머리 키 컬럼의 데이터가 극히 드물게 손상될 수 있기 때문입니다. #18481 (alesapin).
- wide 파트에서 compact 파트로의 머지를 제한했습니다. 수직 병합 시 결과 파트가 손상되는 문제가 있었습니다. #18381 (Anton Popov).
- 읽기 백오프(로그의
<Debug> MergeTreeReadPool: Will lower number of threads메시지) 발생 시MergeTree*에서 읽는 동안 쿼리 결과가 불완전해질 수 있는 문제를 수정했습니다. 이 문제는 #16423에서 처음 도입되었습니다. #18137을 해결했습니다. #18216 (Nikolai Kochetov). rocksdb라이브러리의 use-after-free 버그를 수정했습니다. #18862 (sundyli).ORC포맷 파일에서 무한히 읽히던 문제가 수정되었습니다(#10580에서 도입됨). #19095를 수정합니다. #19134 (Nikolai Kochetov).- MergeTree 데이터 작성기에서 고정된 세분화 수준 크기보다 큰 마크가 생성될 수 있는 버그를 수정했습니다. #18913을 해결합니다. #19123 (alesapin).
LowCardinality(Nullable(...))에서 압축 코덱을 읽지 못해 시작 시Attempt to read after EOF예외가 발생하던 ClickHouse 버그를 수정했습니다. #18340을 해결합니다. #19101 (alesapin).- 이전 구문으로 생성된
MergeTree테이블에 대해서는MODIFY TTL쿼리가 제한됩니다. 이전에는 이 쿼리가 성공했지만, 실제로는 아무런 효과가 없었습니다. #19064 (Anton Popov). groupUniqArray가 Enum 유형의 인수에 대해 올바른 유형을 반환하도록 수정했습니다. 이로써 #17875가 해결되었습니다. #19019 (alexey-milovidov).- 함수
ignore를LowCardinality인수와 함께 사용할 때 발생할 수 있는Expected single dictionary argument for function오류를 수정했습니다. #14275를 수정합니다. #19016 (Nikolai Kochetov). TinyLog엔진을 사용하는 테이블에LowCardinality컬럼을 삽입할 때 발생하던 문제를 수정했습니다. #18629을 수정합니다. #19010 (Nikolai Kochetov).- Join은 const 컬럼을 구체화하려고 하지만, 코드에서는 이를 다른 곳에서 사용합니다. #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). - 종료 시 매우 드물게 발생하는 데드락을 수정했습니다. #18977 (tavplubix).
ALTER TABLE ... DROP PART 'part_name'쿼리가 전체 파티션의 모든 중복 제거 블록을 삭제하던 잘못된 동작을 수정했습니다. #18874를 수정했습니다. #18969 (alesapin).- 파티션을 ATTACH하면 mutation이 재설정되도록 했습니다. #18804. #18935 (fastio).
bitmapOrCardinality에서 nullptr 역참조를 일으킬 수 있는 문제를 수정했습니다. 이로써 #18911이 해결되었습니다. #18912 (sundyli).clickhouse-local종료 시 발생할 수 있는 중단 현상을 수정했습니다. 이 수정으로 #18891 문제가 해결됩니다. #18893 (alexey-milovidov).- 외부 데이터베이스(MySQL, ODBC, JDBC)에 대한 쿼리에서
x IN table형태의 표현식이 있으면 쿼리가 잘못 재작성되던 문제를 수정했습니다. 이 수정은 #9756을 해결합니다. #18876 (alexey-milovidov). - *If combinator의 단항 함수 및 널 허용 타입 관련 문제를 수정했습니다. #18806 (Azat Khuzhin).
- 설정
network_compression_method가 전역적으로 기본값이 아닌 값으로 설정된 경우, 비동기 분산 INSERT가 server에서 거부될 수 있는 문제를 수정했습니다. 이 수정으로 #18741이 해결됩니다. #18776 (alexey-milovidov). Nullable(String)에서Nullable(Decimal(P, S))로NULL을CAST할 때 발생하던Attempt to read after eof오류를 수정했습니다. 이제 함수CAST는 널 허용 문자열에서 10진수를 파싱하지 못하면NULL을 반환합니다. #7690을 해결했습니다. #18718 (Winter Zhang).- 로깅 관련 사소한 문제를 수정했습니다. #18717 (sundyli).
- 이전 구문으로 생성된
ReplicatedMergeTree테이블에서 빈 파트가 제거되지 않던 문제를 수정했습니다. #18582. #18614 (Anton Popov). - 서로 다른 값에서 날짜 오버플로우가 발생하던 기존 버그를 수정했습니다. Date 값의 엄격한 상한을 “2106-02-07”로 제한하고, “2106-02-07”보다 큰 날짜는 값 0으로 변환합니다. #18565 (hexiaoting).
- MySQL 복제를 위한 FixedString 데이터 타입 지원을 추가했습니다. MySQL 복제는 실험적 기능입니다. 이 패치에서는 #18450을 수정했습니다. 또한 #6556도 수정했습니다. #18553 (awesomeleo).
RIGHT또는FULL조인이 포함된 서브쿼리 뒤에ORDER BY를 사용할 때 발생할 수 있는Pipeline stuck오류를 수정했습니다. #18550 (Nikolai Kochetov).- 해당 mutation을 중단한 후
ALTER쿼리가 멈출 수 있는 버그를 수정했습니다. thread fuzzer로 발견되었습니다. #18518 (alesapin). parseDateTimeBestEffort함수에서 12AM을 올바르게 처리하도록 지원을 추가했습니다. 이로써 #18402 문제가 수정되었습니다. #18449 (vladimir-golovchenko).Nullable(String)유형의 인수로toType(...)함수(toDate,toUInt32등)를 실행할 때 발생하던value is too short오류를 수정했습니다. 이제 이러한 함수는 parsing 오류가 발생하면 예외를 발생시키는 대신NULL을 반환합니다. #7673를 수정했습니다. #18445 (tavplubix).SHOW TABLES의 예상치 못한 동작을 수정했습니다. #18431 (fastio).- 수정 -SimpleState combinator가 호환되지 않는 인수 유형 및 반환 유형을 생성하던 문제를 수정했습니다. #18404 (Amos Bird).
Set또는Join테이블을 동시에 사용하거나system.tables에서 조회할 때 발생할 수 있는 경쟁 상태(race condition)를 수정했습니다. #18385 (alexey-milovidov).- 테이블
system.settings_profile_elements이 채워지는 문제를 수정했습니다. 이 PR은 #18231을 수정합니다. #18379 (Vitaly Baranov). - 2단계 집계 사용 시
Distinctcombinator가 적용된 집계 함수에서 발생할 수 있는 크래시를 수정했습니다. #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). - Enum과 Int 타입 간 키 비교를 수정했습니다. 이로써 #17989가 해결되었습니다. #18214 (Amos Bird).
- MySQL로부터의 복제(실험적 기능). #18186을 수정했습니다. #16372을 수정했습니다. MaterializeMySQL 데이터베이스 엔진의 고유 키 변환 문제를 수정했습니다. #18211 (Winter Zhang).
WITH FILL과WITH TIES를 함께 사용하는 쿼리에서 발생하던 불일치를 수정했습니다 #17466. #18188 (hexiaoting).- 마지막 컬럼에서 구문 분석 오류가 발생한 경우 기본값으로 행이 삽입되도록 수정했습니다. #17712를 수정했습니다. #18182 (Jianmei Zhang).
- 설정 프로필을 지정하려고 할 때 발생하던
Unknown setting profile오류를 수정했습니다. #18167 (tavplubix). - 쿼리
MODIFY COLUMN ... REMOVE TTL이 실제로 컬럼 TTL을 제거하지 않던 오류를 수정했습니다. #18130 (alesapin). - S3 URL 파싱 중 발생하던
std::out_of_range: basic_string문제를 수정했습니다. #18059 (Vladimir Chebotarev). DateTime64와Date비교를 수정했습니다. #13804 및 #11222를 수정했습니다. … #18050 (Vasily Nemkov).- MySQL 복제(실험적 기능): #15187 수정, #17912 수정, MaterializeMySQL에서 MySQL prefix 인덱스 변환을 지원합니다. #17944 (Winter Zhang).
logger.size매개변수를 사용해 2^32보다 큰 숫자 값으로 server 로그 로테이션을 설정한 경우, 로그가 제대로 로테이션되지 않았습니다. 이 문제가 수정되었습니다. #17905 (Alexander Kuzmenkov).- 쿼리에 ARRAY JOIN이 포함된 경우(즉, 실제로는 단순 쿼리가 아닌 경우), 단순 쿼리 최적화로 인해 잘못된 결과가 반환되던 문제가 있었습니다. #17887 (sundyli).
topK집계 함수에서 발생할 수 있는 segfault를 수정했습니다. 이로써 #17404를 해결했습니다. #17845 (Maksim Kita).- WAL (실험적 기능):
in_memory_parts_enable_wal이 비활성화되어 있으면 WAL에서 파트를 복원하지 않습니다. #17802 (detailyang). - 삭제 가능한 최대 테이블 크기에 관한 예외 메시지가 잘못 표시되었습니다. #17764 (alexey-milovidov).
Distributed테이블에 삽입할 때 공간이 부족한 경우 발생할 수 있는 segfault를 수정했습니다. #17737 (tavplubix).- ClickHouse가 MySQL 서버와의 연결을 다시 복구하지 못하는 문제를 수정했습니다. #17681 (Alexander Kazakov).
- Windows: Windows Subsystem for Linux에서 실행되는 ClickHouse의
Atomic데이터베이스에서RENAME쿼리 실행 시 발생하던Function not implemented오류를 수정했습니다. #17661을 해결합니다. #17664 (tavplubix). pool_size> 1일 때 발생하는 race condition으로 인해ON CLUSTER쿼리 실행 시 클러스터가 순환 복제 또는 (교차) 복제되었는지 잘못 판단되는 문제가 있었습니다. 수정되었습니다. #17640 (tavplubix).- server가 데몬 모드로 실행될 때
system.stack_tracetable이 비어 있던 문제를 수정했습니다. #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). - 잘못된 최적화로 인해 발생할 수 있었던
DISTINCT이후의 중복 문제를 수정했습니다. #17294를 수정했습니다. #17296 (li chengxiang). #17439 (Nikolai Kochetov). - *MergeTree 테이블의 백그라운드 작업에서 발생하던 높은 CPU 사용량 문제를 수정했습니다. #17416 (tavplubix).
LowCardinality타입이 있는JOIN테이블을 읽을 때 발생할 수 있는 크래시를 수정했습니다. #17228를 수정했습니다. #17397 (Nikolai Kochetov).- MySQL로부터의 복제(실험적 기능): MySQL SHOW 문과 헤더가 일치하지 않던 문제를 해결하는 #16835를 수정했습니다. #17366 (Winter Zhang).
- 프레디케이트 옵티마이저에서 비결정적 함수 관련 문제를 수정했습니다. 이 변경으로 #17244가 해결되었습니다. #17273 (Winter Zhang).
LIMIT가 있는 분산 쿼리에서 클라이언트로부터Unexpected packet Data received from client오류가 발생할 수 있던 문제를 수정했습니다. #17254 (Azat Khuzhin).- 서브쿼리에 const 컬럼이 있을 때 set 인덱스가 잘못 무효화되는 문제를 수정했습니다. 이로써 #17246가 해결됩니다. #17249 (Amos Bird).
- clickhouse-copier: 파티션되지 않은 테이블 수정 #15235. #17248 (Qi Chen).
- S3 disk에 저장된 파트에서 뮤테이션이 작동하지 않을 수 있던 문제를 수정했습니다(실험적 기능). #17227 (Pavel Kovalenko).
fuzzBits함수의 버그 수정입니다. 관련 이슈: #16980. #17051 (hexiaoting).- OFFSET만 있는 쿼리에서
optimize_distributed_group_by_sharding_key문제를 수정했습니다. #16996 (Azat Khuzhin). - JOIN이 있는
Distributed테이블 상의Merge테이블에 대한 쿼리를 수정했습니다. #16993 (Azat Khuzhin). - 단조 함수 사용 시 ORDER BY 최적화 문제를 수정했습니다. #16107을 수정합니다. #16956 (Anton Popov).
- 서로 다른 소수 자릿수를 가진
DateTime64타입 간의 잘못된 비교를 수정했습니다. #16655 … #16952 (Vasily Nemkov). - 설정
optimize_aggregators_of_group_by_keys이 활성화된 상태에서 GROUP BY와 조인을 함께 사용할 때의 최적화를 수정했습니다. #12604를 수정했습니다. #16951 (Anton Popov). - SHOW ACCESS 쿼리의 사소한 수정. #16866 (tavplubix).
- 파티션 프레디케이트 사용 시 활성화된
optimize_trivial_count_query설정의 동작을 수정했습니다. #16767 (Azat Khuzhin). - MySQL wire protocol을 통한 INSERT 쿼리에서 영향받은 행 수를 반환합니다. 이전에는 ClickHouse가 항상 0을 반환했지만, 이제 수정되었습니다. #16605를 수정했습니다. #16715 (Winter Zhang).
- 최적화된 단순 count 쿼리와 시스템 테이블에서
select_sequential_consistency로 인해 발생한 일관되지 않은 동작을 수정했습니다. #16309 (Hao Chen). - 존재하지 않는 컬럼에
REPLACE컬럼 변환기가 적용되면 오류를 발생시키도록 수정했습니다. #16183 (hexiaoting). - RIGH|FULL JOIN에서 ON 표현식이 equi-join이 아닌 경우 예외를 발생시킵니다. #15162 (Artem Zuikov).
빌드/테스트/패키징 개선
- ClickHouse 실행 파일에 대한 간단한 무결성 검사를 추가했습니다. 이를 통해 하드웨어 결함(저장 매체의 비트 손상 또는 RAM의 비트 반전)으로 인한 손상을 감지할 수 있습니다. #18811 (alexey-milovidov).
OpenSSL을BoringSSL로 변경했습니다. 이를 통해 sanitizers 관련 문제를 방지할 수 있습니다. 이 변경으로 #12490이 수정되었습니다. 이 변경으로 #17502이 수정되었습니다. 이 변경으로 #12952이 수정되었습니다. #18129 (alexey-milovidov).Sys/Vinit 스크립트를 간소화했습니다. Ubuntu 12.04 및 그 이전 버전에서는 작동하지 않았습니다. #17428 (alexey-milovidov)../clickhouse install스크립트가 여러 면에서 개선되었습니다. #17421 (alexey-milovidov).- 이제 ClickHouse는 가짜 ZooKeeper처럼 동작할 수 있습니다. 현재 스토리지 구현은 메모리 내 hash table에만 저장되며, server는 ZooKeeper 프로토콜을 부분적으로 지원합니다. #16877 (alesapin).
- TestKeeperStorage(ZooKeeper용 모의 객체)에서 dead list watch 제거가 제대로 되지 않던 문제를 수정했습니다. #18065 (alesapin).
- 장애 주입을 위해
SYSTEM SUSPEND명령을 추가했습니다. 이 명령은 페일오버 테스트를 쉽게 수행하는 데 사용할 수 있습니다. 이로써 #15979가 해결되었습니다. #18850 (alexey-milovidov). - ClickHouse를
lld로 링크할 때 build id를 생성합니다. 제 환경에서는lld가 기본적으로 이를 생성하지 않는 것으로 확인되었습니다. build id는 충돌 보고서와 내부 검사에 사용됩니다. #18808 (alexey-milovidov). - 스타일 검사에서 발생한 shellcheck 오류를 수정했습니다. #18566 (Ilya Yatsishin).
- 시간대 정보를 2020e로 업데이트했습니다. #18531 (alesapin).
- codespell 경고를 수정했습니다. 스타일 검사를 별도 항목으로 분리했습니다. 스타일 검사용 Docker 이미지를 업데이트했습니다. #18463 (Ilya Yatsishin).
- 문서에 남아 있는 충돌 마커를 자동으로 검사합니다. #18332 (alexey-milovidov).
- stateless tests 플래키 검사에 Thread Fuzzer를 활성화했습니다. #18299 (alesapin).
- 스레드 안전하지 않은
strerror함수는 사용하지 않습니다. #18204 (alexey-milovidov). anchore/scan-action@main워크플로 액션을 업데이트했습니다(master에서main으로 변경됨). #18192 (Stig Bakken).- 이제
clickhouse-test는 타임아웃을 적용해 데이터베이스에 대해 DROP/CREATE를 수행합니다. #18098 (alesapin). - stateless 테스트를 위한 Pytest 프레임워크의 실험적 지원을 활성화했습니다. #17902 (Ivan).
- 이제 통합 테스트에서 최신 docker daemon 버전을 사용합니다. #17671 (alesapin).
- Sentry가 활성화된 경우 공식 빌드 정보, 메모리, CPU 및 사용 가능한 디스크 여유 공간 정보를 Sentry로 전송합니다. Sentry는 ClickHouse 개발자를 지원하기 위한 옵트인 기능입니다. 이로써 #17279가 해결되었습니다. #17543 (alexey-milovidov).
- clickhouse-copier 코드에 초기화되지 않은 변수가 있었습니다. #17363 (Nikita Mikhaylov).
- #17309의 MSan 보고서 1건을 수정했습니다. #17344 (Nikita Mikhaylov).
- Arrow Flight 라이브러리의 IPv6 관련 문제 수정. 자세한 내용은 댓글을 참조하십시오. #16664 (Zhanna).
- 일부
libc함수를 프로세스를 종료하는 트랩으로 대체하는 라이브러리를 추가했습니다. #16366 (alexey-milovidov). - 스택 오버플로우가 발생할 경우 서버 로그에 진단 정보를 남기고, clickhouse-client로 오류 메시지를 보냅니다. 이로써 #14840이 해결되었습니다. #16346 (alexey-milovidov).
- 이제 거의 모든 상태 비저장형 기능 테스트를 병렬로 실행할 수 있습니다. #15236 (alesapin).
librdkafka의 snappy 압축 해제 중 발생하던 손상 문제를 수정했습니다(gcc10 빌드에서만 발생하던 문제였지만, 공식 빌드는 이미 clang을 사용하므로 적어도 최근 공식 릴리스는 영향을 받지 않습니다). #18053 (Azat Khuzhin).- 서버가 OOM killer에 의해 종료되면 로그에 메시지를 출력합니다. #13516 (alexey-milovidov).
- PODArray:
(nullptr, 0)인수로memcpy를 호출하지 않도록 수정했습니다(UBSan 보고 수정). 이 수정으로 #18525가 해결되었습니다. #18526 (alexey-milovidov). - DDLWorker 내부의 zookeeper 경로 연결이 소폭 개선되었습니다. #17767 (Bharat Nallan).
- 디버그 파일에서 심볼을 다시 로드할 수 있게 했습니다. 이 PR에서는 build-id 문제도 수정했습니다. #17637 (Amos Bird).