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

2021 변경 로그

ClickHouse v21.12 릴리스 (2021-12-15). 발표 자료, 동영상

하위 호환성이 깨지는 변경 사항

  • 이전에 원치 않는 동작을 하던 기능에 대한 수정입니다. Kafka/RabbitMQ/FileLog에 대해 direct select를 허용하지 않습니다. stream_like_engine_allow_direct_select 설정을 통해 활성화할 수 있습니다. materialized view가 연결되어 있는 경우에는, 설정으로 활성화하더라도 direct select가 허용되지 않습니다. Kafka 및 RabbitMQ에서 direct select가 허용된 경우에도 기본적으로 메시지를 커밋하지 않습니다. direct select 시 커밋을 활성화하려면, 사용자는 스토리지 수준 설정 kafka{rabbitmq}_commit_on_select=1(기본값 0)을 사용해야 합니다. #31053 (Kseniia Sumarokova).
  • 새 함수의 동작이 약간 변경되었습니다. JSON_VALUE에서 따옴표가 없는 문자열을 반환합니다. #27965를 해결합니다. #31008 (Kseniia Sumarokova).
  • SETTING 이름 변경. TSV/CSV 입력 포맷에 대해 사용자 정의 null 표현을 지원합니다. TSV/CSV/JSONCompactStringsEachRow/JSONStringsEachRow 입력 포맷에서 Nullable(String)을 역직렬화하는 문제를 수정했습니다. output_format_csv_null_representationoutput_format_tsv_null_representation을 각각 format_csv_null_representationformat_tsv_null_representation으로 이름을 변경했습니다. #30497 (Kruglov Pavel).
  • 이미 사용되지 않는 코드의 추가적인 폐기. 이는 20.6보다 이전 버전의 ClickHouse를 사용하는 경우에만 관련이 있습니다. 20.6부터는 여러 리더를 지원하므로 ReplicatedMergeTree에서 "leader election" 메커니즘이 제거되었습니다. 이전 버전에서 업그레이드하는 경우, 이전 버전의 레플리카가 리더라면 업그레이드 후 서버가 시작되지 않습니다. 새 버전을 시작하려면 이전 버전의 레플리카를 중지해야 합니다. 이후에는 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).
  • INSERT 중 검사 없이 CONSTRAINT ... ASSUME ...를 추가했습니다. 보다 편리한 최적화를 위해 쿼리를 CNF 형태로 변환하는 기능을 추가했습니다(https://github.com/ClickHouse/ClickHouse/issues/11749). 제약 조건을 사용한 간단한 쿼리 재작성 기능을 추가했습니다(현재는 단순 매칭만 지원하며, 이후 <,=,>...를 지원하도록 개선될 예정입니다). 가능한 경우 무거운 컬럼을 가벼운 컬럼으로 대체할 수 있는 기능을 추가했습니다. #18787 (Nikita Vasilev).
  • http/url 함수에서 기본 액세스 인증을 지원합니다. #31648 (michael1589).
  • WITH FILL 수정자의 STEP 절에서 INTERVAL 타입을 지원하도록 했습니다. #30927 (Anton Popov).
  • 여러 파일을 병렬로 읽는 기능과 FROM INFILE 절에서 glob 패턴을 지원하는 기능을 추가했습니다. #30135 (Filatenkov Artur).
  • Identifier 테이블과 데이터베이스 쿼리 매개변수에 대한 지원을 추가했습니다. #27226 이슈를 종료합니다. #28668 (Nikolay Degterinsky).
  • 요약: 텍스트 포맷의 완전성과 일관성이 크게 향상되었습니다. TSV, TSVRaw, CSV, JSONCompactEachRow, JSONCompactStringsEachRow 포맷을 리팩터링하고, 코드 중복을 제거하며, -WithNames-WithNamesAndTypes 접미사를 가진 포맷을 위한 공통 인터페이스를 추가합니다. CSVWithNamesAndTypes, TSVRawWithNames, TSVRawWithNamesAndTypes, JSONCompactEachRowWIthNames, JSONCompactStringsEachRowWIthNames, RowBinaryWithNames 포맷을 추가합니다. TSVWithNamesAndTypes, TSVRaw(WithNames/WIthNamesAndTypes), CSVWithNamesAndTypes, JSONCompactEachRow(WithNames/WIthNamesAndTypes), JSONCompactStringsEachRow(WithNames/WIthNamesAndTypes) 포맷에 대해 병렬 파싱을 지원합니다. RowBinaryWithNamesAndTypes 포맷에 대해 컬럼 매핑 및 타입 검사를 지원합니다. <format_name>WIthNamesAndTypes 포맷에 기록된 타입이 테이블 구조와 일치하는지 확인해야 하는지를 지정하는 input_format_with_types_use_header SETTING을 추가합니다. input_format_csv_empty_as_default SETTING을 추가하고, CSV 포맷에서 input_format_defaults_for_omitted_fields 대신 이를 사용합니다(이 SETTING은 csv_empty_as_default를 제어하면 안 되기 때문입니다). input_format_defaults_for_omitted_fields SETTING의 사용 방식을 수정합니다(이전에는 csv_empty_as_default로만 사용되었으나, 누락된 필드에 대한 기본 표현식 계산을 제어해야 합니다). TSVRaw 포맷에서 널 허용(Nullable) 입력/출력을 수정하여, TSV로 삽입할 때 이 포맷이 완전히 호환되도록 합니다. input_format_null_as_default가 활성화된 경우 LowCardinality(Nullable)에 NULL을 삽입하는 동작을 수정합니다(이전에는 실제 NULL 대신 기본값이 삽입되었습니다). JSONStringsEachRow/JSONCompactStringsEachRow 포맷에서 문자열 역직렬화를 수정합니다(문자열이 첫 번째 '\n' 또는 '\t'까지로만 파싱되었습니다). Template 입력 포맷에서 Raw 이스케이프 규칙을 사용할 수 있는 기능을 추가합니다. JSONCompactEachRow(WithNames/WIthNamesAndTypes) 입력 포맷에 대한 진단 정보를 추가합니다. min_chunk_bytes_for_parallel_parsing SETTING이 단일 행의 바이트 수보다 작은 경우 -WithNames 포맷의 병렬 파싱 시 발생하는 버그를 수정합니다. #30178 (Kruglov Pavel). CustomSeparated 입력/출력 포맷에서 컬럼의 이름과 타입을 출력/파싱할 수 있도록 지원합니다. TSVWithNames/WithNamesAndTypes와 유사한 CustomSeparatedWithNames/WithNamesAndTypes 포맷을 추가합니다. #31434 (Kruglov Pavel).
  • Aliyun OSS Storage 지원이 추가되었습니다. #31286 (cfcz48).
  • 구성 파일에서 전역 스레드 풀의 모든 설정을 설정할 수 있도록 했습니다. #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 타입에 대한 맵 조합자를 추가합니다. - 매핑된 배열용 기존 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 패밀리에 대해 BACKUPRESTORE 명령을 구현합니다. 이 기능은 개발 중입니다. #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).
  • JSONEachRowWithProgressPrettyCompactMonoBlock을 제외한 모든 텍스트 포맷에 대해 병렬 포맷팅을 지원합니다. #31489 (Kruglov Pavel).
  • 널 허용 컬럼에 대한 count 연산을 가속화합니다. #31806 (Raúl Marín).
  • avgsumCount 집계 함수의 속도를 향상합니다. #31694 (Raúl Marín).
  • JSON 및 XML 출력 포맷의 성능을 개선합니다. #31673 (alexey-milovidov).
  • 블록 디바이스로 데이터를 동기화하는 성능을 개선합니다. 이 변경으로 #31181 이슈를 해결합니다. #31229 (zhanglistar).
  • LiveView 테이블에서 쿼리 성능 문제를 수정합니다. #30831 이슈를 해결합니다. #31006 (vzakaznikov).
  • 쿼리 파싱을 가속화합니다. #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_filesystemmerge_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).
  • RangeHashedDictionaryComplexKeyRangeHashedDictionaryupdate_field 지원을 추가했습니다. #32185 (Maksim Kita).
  • murmurHash3_128sipHash128 함수가 이제 임의 개수의 인수를 허용합니다. 이로써 #28774가 해결됩니다. #28965 (小路).
  • HDFS 스토리지에서 기본 표현식을 지원하고, 소스가 컬럼 지향인 경우 가져오기를 최적화합니다. #32256 (李扬).
  • OpenTelemetry span의 operation name을 개선했습니다. #32234 (Frank Chen).
  • 출력 형식이 JSONEachRow인 경우 Content-Type: application/x-ndjson (http://ndjson.org/)을 사용합니다. #32223 (Dmitriy Dorofeev).
  • Template/CustomSeparated 포맷에서 따옴표 이스케이프 규칙을 사용해 알 수 없는 필드를 건너뛰는 동작을 개선했습니다. 이전에는 따옴표로 둘러싸인 문자열만 건너뛸 수 있었지만, 이제는 모든 타입의 값을 건너뛸 수 있습니다. #32204 (Kruglov Pavel).
  • 이제 clickhouse-keeper는 구성에 중복된 ID나 엔드포인트가 포함되어 있을 경우 시작하거나 구성 변경 사항을 적용하지 않습니다. #31339을(를) 수정했습니다. #32121 (alesapin).
  • URL 엔진에서 발행하는 HTTP 요청에 Content-Type 헤더를 설정합니다. #32113 (Frank Chen).
  • output_format_json_array_of_rows가 활성화되어 있으면 JSONEachRow 포맷에 대해 Content-Type 헤더를 'application/json'으로 반환합니다. #32112 (Frank Chen).
  • Float32/Float64 값 앞에 오는 + 기호도 파싱할 수 있도록 했습니다. #32079 (Kruglov Pavel).
  • DiskHDFSStorageHDFS에서 사용자가 설정한 hdfs_replication 파라미터를 사용할 수 있도록 했습니다. #32039 이슈를 해결했습니다. #32049 (leosunli).
  • OpenTelemetry 스팬 로그에 ClickHouse exceptionexception_code 필드를 추가했습니다. #32040 (Frank Chen).
  • OpenTelemetry span 로그의 지속 시간(duration)을 개선합니다. 쿼리 예외가 발생하는 경우 쿼리 수준에서 해당 값이 0으로 표시되던 문제를 수정합니다. #32038 (Frank Chen).
  • Int256LowCardinality를 CREATE 문으로 생성할 수 없던 문제를 수정합니다. #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) (author: Amos Bird).
  • 줄/히스토리 단위 이동이 아니라 히스토리 항목을 탐색할 수 있는 키 바인딩을 추가합니다. #31641 (Azat Khuzhin).
  • max_execution_time 검사를 개선했습니다. 타임아웃 검사가 수행되지 않아 쿼리가 너무 오래 실행될 수 있던 일부 경우를 수정했습니다. #31636 (Raúl Marín).
  • 잘못된 비밀번호 해시로 인해 users.xml을 로드할 수 없을 때의 예외 메시지를 개선했습니다. #24126 이슈를 해결합니다. #31557 (Vitaly Baranov).
  • 설정에서 해당 매크로가 정의되어 있지 않은 경우, ReplicatedMergeTree 인수에서 매크로를 확장할 때 Replicated 데이터베이스 인수에 있는 세그먼트(shard) 및 레플리카(replica) 이름을 사용합니다. #31471 이슈를 해결합니다. #31488 (tavplubix).
  • min/max/count PROJECTION에 대한 분석이 더 잘 수행되도록 개선되었습니다. 이제 allow_experimental_projection_optimization을 활성화하면, 가상 min/max/count PROJECTION을 파티션 키에 포함된 컬럼과 함께 사용할 수 있습니다. #31474 (Amos Bird).
  • clickhouse-local--pager 지원을 추가했습니다. #31457 (Azat Khuzhin).
  • 대화형 쿼리 편집 중 에디터가 대기 상태에 머무르는 문제를 수정했습니다 (SIGWINCH 수신 시 waitpid()가 -1을 반환하고 EDITORclickhouse-local/clickhouse-client가 동시에 실행되는 경우). #31456 (Azat Khuzhin).
  • JSONCompactStrings(EachRow) 포맷에서 필드 뒤에 불필요한 데이터가 있을 경우 예외를 던지도록 했습니다. #31455 (Kruglov Pavel).
  • http_send_timeouthttp_receive_timeout 설정의 기본값이 1800(30분)에서 180(3분)으로 변경되었습니다. #31450 (tavplubix).
  • MaterializedMySQL이 이제 CREATE TABLE ... LIKE ... DDL 쿼리를 지원합니다. #31410 (Stig Bakken).
  • 시스템 테이블에서 show create table을 실행할 때 가상 CREATE 쿼리를 반환합니다. #31391 (SuperDJY).
  • 이전에는 진행 상황이 numbers 테이블 함수에 대해서만 표시되었습니다. 이제는 numbers_mt 테이블 함수에 대해서도 표시됩니다. #31318 (Kseniia Sumarokova).
  • 초기 사용자에게 부여된 역할은 이제 행 정책(row policy)을 찾는 데 사용됩니다. #31080. #31262 (Vitaly Baranov).
  • 일부 더 이상 사용되지 않는 설정이 변경되면 system.warnings에 경고가 표시됩니다. #31252 (tavplubix).
  • MergeTree의 백그라운드 정리 작업을 위한 백오프(backoff)가 개선되었습니다. merge_tree_clear_old_temporary_directories_interval_secondsmerge_tree_clear_old_parts_interval_seconds 설정이 사용자 설정에서 MergeTree 설정으로 이동되었습니다. #31180 (tavplubix).
  • 이제 모든 레플리카가 프로파일 이벤트 카운터에 대한 증분 정보만 클라이언트로 전송합니다. #31155 (Dmitry Novik). 이를 통해 clickhouse-client--hardware_utilization 옵션을 실제로 활용할 수 있게 되었습니다.
  • 기본값으로 clickhouse-client에서 여러 줄 편집을 활성화했습니다. 이는 #31121을 해결합니다. #31123 (Amos Bird).
  • ALTER 쿼리에서 FUNCTION 이름을 정규화합니다. 이를 통해 인덱스/프로젝션이 있는 테이블을 생성하는 경우와 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/25684https://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의 경우: --interactive 옵션이 --query 또는 --queries-file과 함께 지정되면, 먼저 비대화형 모드에서와 같이 해당 쿼리를 실행한 다음 대화형 모드를 시작합니다. #30851 (Kseniia Sumarokova).
  • ZooKeeper에서 znode를 제거하는 동안 DROP이 실패하는 경우 발생할 수 있는 "The local set of parts of X doesn't look like the set of parts in ZooKeeper" 오류를 수정합니다. #30826 (Azat Khuzhin).
  • Avro 포맷을 Kafka와 함께 사용할 수 있습니다. output_format_avro_rows_in_file 설정이 추가되었습니다. #30351 (Ilya Golshtein).
  • 하나의 MaterializedPostgreSQL 데이터베이스에 대해 하나 또는 여러 개의 PostgreSQL 스키마를 지정할 수 있게 했습니다. #28901 이슈를 해결했습니다. #29324 이슈를 해결했습니다. #28933 (Kseniia Sumarokova).
  • ClickHouse Keeper 내부 통신을 위한 기본 포트를 44444에서 9234로 변경했습니다. #30879를 수정했습니다. #31799 (alesapin).
  • Decimal 인수를 사용하는 transform 함수를 구현했습니다. #31839 (李帅).
  • 잘못된 hdfs URL일 때 hdfs URL 구조를 추가로 검사하도록 하여 디버그 서버의 비정상 종료와 릴리스 서버의 DB::Exception: std::out_of_range: basic_string 오류를 수정합니다. #31042 (Kruglov Pavel).
  • hdfs 테이블 함수/엔진에서 발생할 수 있는 assert 실패를 수정하고 테스트를 추가합니다. #31036 (Kruglov Pavel).

버그 수정 사항

  • 위치 인수가 활성화된 상태에서 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).
  • 부분 권한 취소가 사용될 때 SHOW GRANTS의 동작을 수정했습니다. 이 PR에서 #31138 이슈를 수정했습니다. #31249 (Vitaly Baranov).
  • cgroup 제한이 설정된 컨테이너에서 ClickHouse를 실행할 때 메모리 용량이 잘못 계산되었습니다. #31157 (Pavel Medvedev).
  • 기본 표현식의 데이터 타입이 컬럼의 데이터 타입과 일치하지 않는 경우에도 올바르게 동작하도록 ALTER ... MATERIALIZE COLUMN ... 쿼리를 수정했습니다. #32348 (Anton Popov).
  • Decimal 인자를 사용하는 집계 함수 avgWeighted에서 SIGFPE로 인해 발생하던 크래시를 수정했습니다. #32053 이슈를 해결했습니다. #32303 (tavplubix).
  • Dictionary 테이블이 동일한 이름의 XML 딕셔너리를 참조하는 경우 Cannot attach 1 tables due to cyclic dependencies 오류와 함께 서버가 시작되지 않을 수 있었으나, 이 문제가 수정되었습니다. #31315 이슈를 수정합니다. #32288 (tavplubix).
  • Quoted 이스케이프 규칙에서 널 허용(Float) 타입에 대한 NaN 역직렬화 시 발생하던 파싱 오류를 수정합니다. #32190 (Kruglov Pavel).
  • XML 사전: 테이블 CREATE 쿼리에서 사용된 식별자는 새 버전으로 업그레이드하는 동안 default_database로 한정(qualified)되도록 변경되었습니다. #31963 종료. #32187 (Maksim Kita).
  • 일부 레플리카에서 replicated_can_become_leader 설정이 비활성화되어 있는 경우, quorum을 사용해 데이터를 삽입할 때 활성 레플리카 수가 잘못 계산될 수 있었습니다. 이 문제가 수정되었습니다. #32157 (tavplubix).
  • Dictionaries: 커스텀 데이터베이스 쿼리에서 {condition} 이(가) 작동하지 않던 문제를 수정했습니다. #32117 (Maksim Kita).
  • Nullable(널 허용) 데이터 타입에서 cast_keep_nullable을 사용할 때의 CAST 동작을 수정했습니다(예: toUInt32OrDefault(toNullable(toUInt32(1)))에서 이전에는 PARAMETER_OUT_OF_BOUND 오류가 발생했습니다). #32080 (Azat Khuzhin).
  • 일부 특수한 경우에 Join Storage의 CREATE TABLE 동작을 수정했습니다. #31680 이슈를 종료했습니다. #32066 (SuperDJY).
  • 파트를 분리(detach)할 때 발생했던 Directory ... already exists and is not empty 오류를 수정했습니다. #32063 (tavplubix).
  • MaterializedMySQL (실험적 기능): MySQL의 DECIMAL 데이터를 잘못 해석하던 문제를 수정합니다. #31990 (Håvard Kvålen).
  • FileLog (실험적 기능) 엔진이 CREATE TABLE이 실패했을 때 불필요하게 메타데이터 디렉터리를 생성하는 문제를 수정했습니다. #31962 수정. #31967 (flynn).
  • 일부 GET_PART 항목은 모든 레플리카에서 파트가 손실되고 동일한 파티션에 다른 파트가 없는 경우 복제 큐에서 계속 대기 상태로 남아 있을 수 있습니다. 파티션 키에 정수형 타입 컬럼이나 Date[Time] 컬럼만 포함되는 경우에 대해 이 문제가 수정되었습니다. #31485를 수정합니다. #31887 (tavplubix).
  • UUID 타입 인수를 사용하는 emptynotEmpty 함수의 동작을 수정합니다. #31819 이슈를 해결합니다. #31883 (Anton Popov).
  • KeeperTCPHandler를 생성할 때 구성 경로를 keeper_server.session_timeout_ms에서 keeper_server.coordination_settings.session_timeout_ms로 변경합니다. operation_timeout에도 동일하게 적용합니다. #31859 (JackyWoo).
  • 널 허용(Nullable) 타입이 널 허용 기본 키를 사용할 때 잘못 캐스트되는 문제를 수정합니다. (널 허용 기본 키는 사용을 권장하지 않는 기능이므로 사용하지 마십시오.) 이 수정은 #31075를 해결합니다. #31823 (Amos Bird).
  • SQL의 재귀 UDF에서 발생하던 크래시를 수정했습니다. #30856 이슈를 해결했습니다. #31820 (Maksim Kita).
  • 딕셔너리 속성에서 타입이 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 출력 형식에서 발생하는 레이스 조건을 수정합니다. #31736 (Kruglov Pavel).
  • 클러스터 이름이 Replicated 데이터베이스 이름과 동일한 경우 ON CLUSTER 쿼리를 실행할 때 발생하던 there are no such cluster here 오류를 수정했습니다. #31723 (tavplubix).
  • decrypt 함수를 널 허용 컬럼에 적용하는 일부 상황에서 발생하던 예외를 수정합니다. #31662를 해결합니다. #31426를 해결합니다. #31707 (alexey-milovidov).
  • 문자열에 UTF-8 문자가 포함된 경우 ngrams FUNCTION이 올바르게 동작하도록 수정했습니다. #31706 (yandd).
  • IPv4와 같은 도메인 타입을 파싱할 때 설정값 input_format_allow_errors_numinput_format_allow_errors_ratio가 동작하지 않는 문제가 있었으며, 이를 수정했습니다. #31686을 수정합니다. #31697 (tavplubix).
  • MATERIALIZE COLUMN에서 발생하던 널 포인터 예외(null pointer exception)를 수정했습니다. #31679 (Nikolai Kochetov).
  • Ordinary 데이터베이스에서 DDL 딕셔너리의 이름을 변경하려고 할 때 RENAME TABLE 쿼리가 잘못 동작하던 문제가 수정되었습니다. #31638 (tavplubix).
  • sparkbar 집계 FUNCTION을 의도한 대로 구현했습니다. 자세한 내용은 #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 쿼리의 진행 상태 표시를 수정했습니다. #31510 (Azat Khuzhin).
  • GROUP BY와 위치 인자를 함께 사용할 때 발생하던 잘못된 동작을 수정합니다. #31280#issuecomment-968696186 이슈를 종료합니다. #31420 (Kseniia Sumarokova).
  • S3용 STS 자격 증명 제공자에서 발생하는 nullptr 문제를 수정했습니다. #31409 (Vladimir Chebotarev).
  • notLike 함수를 인덱스 분석에서 제거했습니다. 해당 처리가 잘못되었기 때문입니다. #31169 (sundyli).
  • 일부 coordination 로그가 손실되고 최신 로그보다 더 최신 스냅샷이 존재하는 경우 Keeper가 시작되지 못할 수 있었던 버그를 수정했습니다. #31150 (alesapin).
  • 로컬 조인에서 오른쪽 분산 테이블을 재작성하도록 수정했습니다. #25809을(를) 해결했습니다. #31105 (abel-cheng).
  • 별칭과 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 check를 건너뜁니다. #30995 (Amr Alaa).
  • INTERSECTEXCEPT 연산자의 일부 엣지 케이스를 수정합니다. #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-cxz, re2, sentry, gsasl, arrow, protobuf에 대해 자체 CMakeLists를 사용합니다. 이는 #20151을(를) 위해 필요합니다. #9226의 일부입니다. 빌드 시스템에서 성가신 불필요한 요소를 제거하기 위한 작은 단계입니다. #30599 (alexey-milovidov).
  • Hermetic 빌드: 고정된 버전의 libc를 사용하고, 빌드 중에 호스트 OS의 소스나 바이너리 파일이 사용되지 않도록 보장합니다. #27133, #21435, #30462을(를) 종료합니다. #30011 (alexey-milovidov).
  • 특정 함수들을 손쉽게 퍼징(fuzzing)하기 위한 함수 getFuzzerData()를 추가합니다. #23227을(를) 종료합니다. #27526 (Alexey Boykov).
  • Docker 내부에서 capabilities(권한)를 보다 올바르게 설정합니다. #31802 (Constantine Peresypkin).
  • clang 컴파일 옵션 -fstrict-vtable-pointers, -fwhole-program-vtables를 활성화합니다. #20151 (Maksim Kita).
  • FreeBSD용 크로스 컴파일 시 툴체인 tarball 다운로드를 방지합니다. #31672 (alexey-milovidov).
  • RISC-V에 대한 초기 지원을 추가합니다. 특이 사항과 검증된 빌드 명령은 development/build-cross-riscv를 참고하십시오. #31309 (Vladimir Smirnov).
  • ARM 머신에서 "-DENABLE_TESTS=OFF" 파라미터를 사용한 컴파일을 지원합니다. #31007 (zhanghuajie).

ClickHouse 릴리스 v21.11, 2021-11-09. 발표 자료, 동영상

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

  • 표준과의 일관성을 위해 SQL/JSON 함수에서 json_pathjson 인자의 순서를 변경합니다. #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_format 조정 설정으로 비활성화할 수 있으며, 이 설정은 모든 쿼럼 레플리카에서 동일해야 합니다. 이전 버전과의 비호환성은 상당히 드물며, 복구 과정에서 새 노드가 스냅샷을 이전 노드로 전송하는 경우, 그리고 해당 이전 노드가 ZSTD 포맷의 스냅샷을 읽을 수 없는 경우에만 발생할 수 있습니다. #29417 (alesapin).

새 기능

  • 새 비동기 INSERT 모드는 삽입된 데이터를 누적했다가 백그라운드에서 하나의 배치로 저장하도록 합니다. 클라이언트에서는 async_insert를 설정하여, 데이터가 쿼리에 인라인되어 있거나 별도 버퍼에 있는(예: HTTP 프로토콜을 통한 INSERT 쿼리) INSERT 쿼리에 대해 이 모드를 활성화할 수 있습니다. wait_for_async_insert의 기본값이 true인 경우 클라이언트는 데이터가 테이블에 플러시될 때까지 대기합니다. 서버 측에서는 async_insert_threads, async_insert_max_data_size, async_insert_busy_timeout_ms 설정으로 제어합니다. #18282를 구현했습니다. #27537 (Anton Popov). #20557 (Ivan). 성능 관련 참고 사항: 비동기 INSERT를 사용하면 초당 약 10,000개의 개별 INSERT 쿼리를 실행할 수 있으므로, 초당 수백만 행 삽입 성능을 달성하려면 여전히 배치 단위로 INSERT하는 것이 권장됩니다.
  • clickhouse-local에 대화형 모드를 추가합니다. 이제 서버에 연결하지 않고도 명령줄 기반 ClickHouse 인터페이스를 사용하기 위해 clickhouse-local만 실행하여 파일 및 외부 데이터 소스의 데이터를 처리할 수 있습니다. 또한 clickhouse-clientclickhouse-local의 코드를 통합합니다. #7203을 해결합니다. #25516을 해결합니다. #22401을 해결합니다. #26231 (Kseniia Sumarokova).
  • 실행 가능(스크립트형) UDF(사용자 정의 함수) 지원이 추가되었습니다. 이러한 UDF는 어떤 프로그래밍 언어로든 작성할 수 있습니다. #28803 (Maksim Kita).
  • 미리 정의된 외부 데이터 소스 연결을 허용합니다. 이를 통해 외부 데이터 소스를 사용할 때마다 자격 증명이나 주소를 지정하지 않아도 되며, 대신 이름으로 참조할 수 있습니다. #28367를 종료합니다. #28577 (Kseniia Sumarokova).
  • system 데이터베이스의 해당 테이블을 대상으로 하는 SCHEMATA, TABLES, VIEWS, COLUMNS 뷰를 포함한 INFORMATION_SCHEMA 데이터베이스를 추가했습니다. #9770을(를) 해결했습니다. #28691 (tavplubix).
  • EXISTS (subquery)를 지원합니다. #6852를 해결합니다. #29731 (Kseniia Sumarokova).
  • 감사를 위한 세션 로깅. 성공과 실패를 포함한 모든 로그인 및 로그아웃 이벤트를 새로운 system.session_log 테이블에 기록합니다. #22415 (Vasily Nemkov) (Vitaly Baranov).
  • 다차원 cosine distance 및 euclidean distance 함수를 지원합니다. L1, L2, Lp, Linf 거리와 노름(norm)도 지원합니다. 튜플에 대한 scalar product 및 다양한 산술 연산자를 제공합니다. 이를 통해 #4509가 완전히 해결되었으며, 그 이상의 개선이 이루어졌습니다. #27933 (Alexey Boykov).
  • INTO OUTFILEFROM INFILE에 대해 압축 및 압축 해제 기능이 추가되었습니다(자동 감지 또는 선택적 추가 매개변수로 지정). #27135 (Filatenkov Artur).
  • HTTP OPTIONS 요청을 통한 CORS(Cross-Origin Resource Sharing) 지원을 추가합니다. 이제 Grafana는 별도의 편법 없이 serverless 요청에서도 동작합니다. #18693를 해결합니다. #29155 (Filatenkov Artur).
  • 이제 JOIN ON이 포함된 쿼리에서 OR 조건(논리합)을 지원합니다. #21320 (Ilya Golshtein).
  • tokens FUNCTION을 추가했습니다. 이 FUNCTION은 비영숫자(non-alphanumeric) ASCII 문자를 구분자로 사용하여 문자열을 토큰으로 분할할 수 있습니다. #29981 (Maksim Kita). 텍스트에서 n그램을 추출하는 ngrams FUNCTION을 추가했습니다. #29699을 해결합니다. #29738 (Maksim Kita).
  • Unicode 정규화를 위한 함수 normalizeUTF8NFC, normalizeUTF8NFD, normalizeUTF8NFKC, normalizeUTF8NFKD를 추가했습니다. #28633 (darkkeks).
  • FileLog 테이블 엔진을 사용하여 애플리케이션 로그 파일을 ClickHouse에서 스트리밍 방식으로 처리할 수 있습니다. 로컬 파일시스템에서 append-only이며 로테이션되는 로그를 위한 Kafka 또는 RabbitMQ 엔진과 비슷합니다. #6953를 해결합니다. #25969 (flynn) (Kseniia Sumarokova).
  • CapnProto 출력 포맷을 추가하고 CapnProto 입력 포맷을 리팩터링했습니다. #29291 (Kruglov Pavel).
  • 쿼리에서 숫자를 2진수 리터럴로 표현할 수 있도록 했습니다. 예: SELECT 0b001;. #29304 (Maksim Kita).
  • hashed_array 딕셔너리 타입을 추가했습니다. 여러 속성을 가진 딕셔너리를 사용할 때 메모리 사용량을 줄여줍니다. #30236 이슈를 종료했습니다. #30242 (Maksim Kita).
  • JSONExtractKeys 함수를 추가했습니다. #30056 (Vitaly).
  • OS 커널 버전을 나타내는 문자열을 반환하는 getOSKernelVersion FUNCTION을 추가합니다. #29755 (Memo).
  • MD4SHA384 FUNCTION을 추가했습니다. 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).
  • ClickHouse에는 아직 없지만 H3 API에서 제공되는 H3 검사용 함수들을 추가합니다: https://h3geo.org/docs/api/inspection. #29209 (Bharat Nallan).
  • Replicated 데이터베이스에서 복제되지 않은(non-replicated) ALTER TABLE FETCHATTACH 작업을 허용합니다. #29202 (Kevin Michel).
  • output_format_csv_null_representation 설정이 추가되었습니다. 이 설정은 output_format_tsv_null_representation와 동일하지만 CSV 형식 출력에 사용됩니다. #29123 (PHO).
  • 현재 ZooKeeper 세션의 가동 시간을 초 단위로 반환하는 함수 zookeeperSessionUptime()가 추가되었습니다. #28983 (tavplubix).
  • h3ToGeoBoundary FUNCTION을 구현했습니다. #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_v1ngram은 String 또는 FixedString 타입의 key를 갖는 Map(맵)을 지원합니다. 이를 통해 맵 key(키) 필터가 있는 쿼리에서 데이터 스키핑이 향상됩니다. sql CREATE TABLE map_tokenbf ( row_id UInt32, map Map(String, String), INDEX map_tokenbf map TYPE ngrambf_v1(4,256,2,0) GRANULARITY 1 ) Engine=MergeTree() ORDER BY id 위와 같은 테이블이 있을 때, select * from map_tokebf where map['K']='V' 쿼리는 key A 를 포함하지 않는 그래뉼(granule)을 건너뜁니다. 물론, 몇 개의 행이 스킵되는지는 설정한 granularityindex_granularity에 따라 달라집니다. #28511 (凌涛).
  • 서버에서 클라이언트로 프로파일 이벤트를 전송합니다. 새 패킷 유형 ProfileEvents가 도입되었습니다. #26177을(를) 해결합니다. #28364 (Dmitry Novik).
  • FixedStringString 데이터 타입에 대한 비트 시프트 연산을 추가했습니다. 이 변경으로 #27763을 해결합니다. #28325 (小路).
  • 데이터베이스 엔진 MaterializedPostgreSQL에서 PostgreSQL로부터 복제할 테이블을 동적으로 추가·삭제하는 기능을 지원합니다. 데이터베이스 설정에 대한 ALTER를 지원합니다. #27573를 종료합니다. #28301 (Kseniia Sumarokova).
  • 함수 accurateCastOrDefault(x, T)가 추가되었습니다. #21330을(를) 해결했습니다. 작성자 @taiyang-li. #23028 (Maksim Kita).
  • 문자열 파싱이 실패하는 경우 널이 아닌 기본값을 사용자가 지정할 수 있도록 toUUIDOrDefault, toUInt8/16/32/64/256OrDefault, toInt8/16/32/64/128/256OrDefault FUNCTION을 추가합니다. #21330 (taiyang-li).

성능 향상

  • 백그라운드 머지는 서로 선점(preempt)할 수 있으며, 적절한 우선순위로 스케줄링됩니다. 이제 장시간 실행되는 머지가 짧은 머지의 진행을 방해하지 않습니다. 이는 머지 실행을 보다 효율적으로 스케줄링하고 제어하기 위함입니다. 이를 통해 「too many 파트」 오류가 발생할 가능성이 줄어듭니다. #22381. #25165 (Nikita Mikhaylov). 백그라운드 풀의 스레드 개수보다 더 많은 머지와 뮤테이션을 실행할 수 있는 기능이 추가되었습니다. 머지와 뮤테이션은 크기(작을수록 우선순위가 높음)에 따라 단계별로 실행됩니다. 실행할 작업 수와 스레드 수의 비율은 기본값이 2인 background_merges_mutations_concurrency_ratio 설정으로 제어됩니다. #29140 (Nikita Mikhaylov).
  • 원격 파일 시스템에 대한 비동기 읽기를 허용합니다. 원격 파일 시스템에서 데이터를 읽을 때 seek 횟수를 줄입니다. 이를 통해 성능이 크게 향상되며, 특정 조건에서는 실험적 webs3 디스크가 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 테이블 FUNCTION이 여러 URL을 병렬로 처리하도록 변경했습니다. 이로써 #29670#29671이 해결되었습니다. #29673 (alexey-milovidov).
  • 기본 키 순서대로 수행되는 집계의 성능을 개선합니다(optimize_aggregation_in_order 설정 활성화 시). #30266 (Anton Popov).
  • 이제 ClickHouse는 외부 S3와 통신할 때 DNS 캐시를 사용합니다. #29999 (alesapin).
  • 외부 데이터베이스(예: MySQL)에 대한 IS NULL/IS NOT NULL 푸시다운 지원을 추가했습니다. #29463 (Azat Khuzhin). isNull/isNotNullIS NULL/IS NOT NULL로 변환하도록 했습니다(MySQL과 같은 외부 DB에 대해). #29446 (Azat Khuzhin).
  • 딕셔너리 테이블(Dictionary table)에 대한 SELECT 쿼리는 여러 스레드를 사용합니다. #30500 (Maksim Kita).
  • Decimal 컬럼의 WHERE 절 필터링 성능을 개선합니다. #30431 (Jun Jin).
  • 필터 연산에서 분기가 많이 발생하는 코드를 제거하고, 성능이 더 우수한 popcnt/ctz 기반의 개선된 구현으로 대체했습니다. #29881 (Jun Jin).
  • WHERE 연산자에 사용되는 필터 bytemask 생성 함수를 SSE/AVX2/AVX512 명령어를 모두 사용하는 올인원 방식으로 개선합니다. 기본적으로 ClickHouse는 SSE만 사용하므로, 이 변경 사항은 커스텀 빌드에서만 의미가 있습니다. #30014 (jasperzhu). #30670 (jasperzhu).
  • 널 허용 부동소수점 숫자에 대한 SUM 집계 FUNCTION의 성능을 개선했습니다. #28906 (Raúl Marín).
  • 여러 디스크를 사용할 때 파트 로딩 속도를 높였습니다. 아이디어는 https://github.com/ClickHouse/ClickHouse/pull/16423 와 유사합니다. 운영 환경에서 24분 -> 16분으로 개선되었습니다. #28363 (Amos Bird).
  • S3 멀티파트 업로드 파트 크기의 기본값을 줄여 메모리 사용량을 낮춥니다. #28679 (ianton-ru).
  • bitmapAnd FUNCTION의 속도를 향상했습니다. #28332 (dddounaiking).
  • 병합이 진행 중일 때 StorageMergeTree에서 발생하던 비효율적인 mutation 알림을 제거했습니다. #27552 (Vladimir Chebotarev).
  • 문자열 비교 성능을 개선하기 위한 시도를 했습니다. #28767 (alexey-milovidov).
  • 프라이머리 키 인덱스와 파티션 필터를 튜플에도 사용할 수 있습니다. #29281 (凌涛).
  • 쿼리에 동일한 인수를 가지지만 서로 다른 level 파라미터를 사용하는 여러 quantile 집계 함수가 있는 경우, 설정 optimize_syntax_fuse_functions가 활성화되어 있으면 이 함수들이 하나로 합쳐져 한 번의 패스로 실행됩니다. #26657 (hexiaoting).
  • 이제 기본 키 첫 번째 표현식에 대한 min-max 집계가 projection으로 최적화되었습니다. 이는 #329 이슈를 해결합니다. #29918 (Amos Bird).

실험적 기능

  • ClickHouse Keeper에 대해 노드 구성을 변경할 수 있는 기능을 추가했습니다 (.xml 파일 내). #30372 (alesapin).
  • sparkbar 집계 함수(aggregate function)를 추가했습니다. 이로써 #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_indicesdata_compressed_bytes, data_uncompressed_bytes, marks_bytes 컬럼을 추가했습니다. system.partssecondary_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).
  • 서버 시작 시 테이블 간 의존 관계를 올바르게 해소합니다. #8004, #15170 이슈를 해결합니다. #28373 (tavplubix).
  • divide, intDiv, modulo 함수에서 분모가 널 허용(Nullable) 타입일 때 「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에서 위치 인수(positional arguments)를 완전히 지원합니다. #30433 (Kseniia Sumarokova).
  • JSONExtractString을 사용하여 문자열이 아닌 요소도 문자열로 추출할 수 있도록 허용합니다. 이는 pull/25452#issuecomment-927123287을 위한 것입니다. #30426 (Amos Bird).
  • GraphiteMergeTree 테이블에서 SELECT 쿼리에 FINAL 절을 사용할 수 있도록 기능을 추가했습니다. #30360 (Nikita Mikhaylov).
  • 레플리카 클로닝과 손상된 파트 fetch 요청의 대기열 추가(enqueue)를 소폭 개선하여, 복제 큐에서 GET_PART 항목이 극히 드물게 대기 상태로 멈춰 버리는 현상을 방지합니다. #30346 (tavplubix).
  • file 테이블 함수에서 user_files 디렉터리 내 파일에 대한 심볼릭 링크를 허용합니다. #30309 (Kseniia Sumarokova).
  • Date32Date, 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 딕셔너리(역 지오코딩): store_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 테이블에서 flush 작업과 startup 과정 사이에 발생하는 데이터 레이스를 수정했습니다. 이는 테스트에서 나타날 수 있습니다. #29930 (Azat Khuzhin).
  • DatabaseMemory에 대한 DROP TABLELiveView 사이의 lock-order-inversion 문제를 수정합니다. 라이브 view는 실험적인 기능입니다. 메모리 데이터베이스는 clickhouse-local에서 사용됩니다. #29929 (Azat Khuzhin).
  • 주기적인 딕셔너리 다시 로드와 설정 다시 로드 간의 락 순서 역전 문제를 수정합니다. #29928 (Azat Khuzhin).
  • zoneinfo 파일을 2021c 버전으로 업데이트합니다. #29925 (alexey-milovidov).
  • clickhouse-copier에 대해 재시도 횟수와 재시도 간 지연 시간을 구성할 수 있는 기능을 추가했습니다. #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를 적용하여 merge 중 메모리 사용량을 프로파일링합니다. #29681 (Azat Khuzhin).
  • 쿼리 난독화 도구: clickhouse-format --obfuscate가 더 많은 유형의 쿼리를 지원하도록 개선되었습니다. #29672 (alexey-milovidov).
  • clickhouse-format --obfuscate가 내장 딕셔너리(함수 regionTo...)가 포함된 쿼리를 처리하지 못하던 문제를 수정했습니다. #29667 (alexey-milovidov).
  • JSON 함수의 널 허용(Nullable) 처리 오류를 수정합니다. 이로써 #29615 이슈가 해결됩니다. https://github.com/ClickHouse/ClickHouse/pull/28012 가 아직 릴리스되지 않았으므로 개선 사항으로 표시합니다. #29659 (Amos Bird).
  • 기본 listen_backlog 값을 증가시켜 더 새로운 Linux 커널의 기본값과 일치하도록 했습니다. #29643 (Azat Khuzhin).
  • 서버 설정 dictionaries_config, models_config, user_defined_executable_functions_config이 변경될 경우 사전, 모델, 사용자 정의 실행 가능 함수를 다시 로드합니다. #28142를 해결합니다. #29529 (Maksim Kita).
  • 프로젝션 이름에 적용되던 불필요한 제한을 제거했습니다. 이제 프로젝션 이름은 tmp_로 시작할 수 있습니다. #29520 (Amos Bird).
  • 뮤테이션에서 중첩 서브쿼리를 사용할 때 발생하던 There is no query or query context has expired 오류를 수정했습니다. 테이블이 레플리카 테이블이고 allow_nondeterministic_mutations 설정이 비활성화되어 있는 경우, 뮤테이션에서 서브쿼리를 허용하지 않습니다. #29495 (tavplubix).
  • 런타임 중에 max_concurrent_queries 설정 변경을 적용할 수 있습니다(재시작할 필요 없음). #29414 (Raúl Marín).
  • use_skip_indexes SETTING이 추가되었습니다. #29405 (Maksim Kita).
  • 메모리 내 파트를 백업을 위해 FREEZE할 수 있는 기능을 추가했습니다. #29376 (Mo Xuan).
  • clickhouse-benchmark에서 initial query_id가 전달되도록 했습니다(이전에는 clickhouse-benchmark를 통해 원격 쿼리를 실행하는 경우, 세그먼트에서 실행되는 쿼리가 initial_query_id를 통해 초기 쿼리와 연결되지 않았습니다). #29364 (Azat Khuzhin).
  • Skip 인덱스 tokenbf_v1ngrambf_v1: String 또는 FixedString 타입의 키를 사용하는 Array 데이터 타입 지원이 추가되었습니다. #29280 (Maksim Kita). Skip 인덱스 tokenbf_v1ngrambf_v1에서 String 또는 FixedString 타입의 키를 사용하는 Map 데이터 타입(맵) 지원이 추가되었습니다. Author @lingtaolf. #29220 (Maksim Kita).
  • 함수 has에 맵(Map) 데이터 타입 지원이 추가되었습니다. #29267 (Maksim Kita).
  • clickhouse-keeper용 compress_logs 설정을 추가하여 복제 상태 머신(replicated state machine)의 clickhouse-keeper 로그를 ZSTD로 압축할 수 있도록 했습니다. 구현: #26977. #29223 (alesapin).
  • external_table_strict_query SETTING을 추가했습니다. 이 SETTING은 호환되지 않더라도 외부 데이터베이스로의 쿼리에서 전체 WHERE 절을 전달하도록 강제합니다. #29206 (Azat Khuzhin).
  • ARRAY JOIN을 사용할 때는 프로젝션을 비활성화합니다. 이전 버전에서는 프로젝션 분석으로 인해 ARRAY JOIN에서 별칭이 올바르게 동작하지 않을 수 있었습니다. #29139 (Amos Bird).
  • 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 프로토콜: 클라이언트에서 서버 측 압축 방식을 변경할 수 있도록 했습니다. #28953 (Vitaly Baranov).
  • 비동기 메트릭을 위해 온도 센서를 읽을 때 발생하는 "no data" 예외를 무시합니다. 이 변경으로 #28852가 해결되었습니다. #28882 (alexey-milovidov).
  • 드물게 기존 딕셔너리에 대해 Dictionary not found 오류가 발생할 수 있던 논리적 경쟁 조건을 수정했습니다. #28853 (tavplubix).
  • If-combinator 검사에서 중첩 함수에 대한 제약을 완화하되, 동일한 combinator의 중첩은 금지합니다. #28828 (Azat Khuzhin).
  • 서버 종료 시 발생할 수 있는 처리되지 않은 예외를 수정합니다. #28761 (Azat Khuzhin).
  • mutation/merge가 비정상적으로 오래 지속되는 경우, 활성 mutation/merge에서 사용할 수 있는 tmp 디렉터리를 정리하지 않도록 합니다. #28760 (Azat Khuzhin).
  • 별칭(alias)을 사용할 때도 optimize_arithmetic_operations_in_aggregate_functions = 1 설정에 의한 최적화를 허용합니다. #28746 (Amos Bird).
  • ReplicatedMergeTreedetach_not_byte_identical_parts 설정을 도입하여, merge/mutate 이후 바이트 단위로 동일하지 않은 파트를 삭제하지 않고 분리(detach)하도록 했습니다. #28708 (Azat Khuzhin).
  • MergeTreemax_suspicious_broken_parts_bytes 설정을 도입했습니다(모든 손상된 파트의 총 크기를 제한하며 기본값은 1GiB입니다). #28707 (Azat Khuzhin).
  • RabbitMQ 테이블 설정에서 매크로 확장을 활성화했습니다. #28683 (Vitaly Baranov).
  • Log 엔진을 사용하는 테이블 데이터를 여러 스레드에서 읽을 수 있는 기능을 복원했습니다. #28125 (Vitaly Baranov).
  • JSON 함수에서 NULL 컬럼 처리와 관련된 잘못된 동작을 수정합니다. 이 수정으로 #27930이 해결됩니다. #28012 (Amos Bird).
  • 컬럼과 별도로 skip 인덱스용 Mark/Uncompressed 캐시 크기를 설정할 수 있도록 했습니다. #27961 (Amos Bird).
  • USING 구문을 사용하는 JOIN을 다른 JOIN 유형과 함께 사용할 수 있도록 했습니다. #23881 (darkkeks).
  • Yandex Cloud S3의 throttling을 처리할 수 있도록 aws-sdk 서브모듈을 업데이트했습니다. #30646 (ianton-ru).
  • gRPC 호출을 처리할 때 쿼리 처리가 끝난 후 query IDsession ID가 해제되도록 수정합니다. #29954 (Vitaly Baranov).
  • AccessControlManager의 종료 처리를 수정하여 간헐적으로 실패하던 테스트를 해결했습니다. #29951 (Vitaly Baranov).
  • HDFS에서 읽는 동안 발생한 어설션 실패를 수정합니다. 테스트를 디버그 모드에서 실행할 수 있도록 libhdfs3 라이브러리를 업데이트합니다. #29251를 해결합니다. #27814를 해결합니다. #29276 (Kseniia Sumarokova).

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

  • AArch64 머신에 대한 FreeBSD 빌드 지원을 추가했습니다. #29952 (MikaelUrankar).
  • ClickHouse에서는 더 이상 재귀 서브모듈이 필요하지 않습니다. #30315 (alexey-milovidov).
  • ClickHouse를 Musl로 정적 빌드할 수 있습니다. 이는 실험적으로 추가된 기능이며, odbc-bridge, library-bridge, CatBoost 통합 및 일부 라이브러리 빌드는 지원하지 않습니다. #30248 (alexey-milovidov).
  • AArch64Darwin(macOS) 빌드에서 Protobuf, Arrow, ORC, Parquet를 활성화했습니다. #29248를 해결합니다. #28018를 해결합니다. #30015 (alexey-milovidov).
  • PowerPC(powerpc64le)에 대한 크로스 빌드를 추가했습니다. #9589를 해결합니다. AArch64 및 PowerPC에 대해 MySQL과의 연동을 활성화했습니다. #26301를 해결합니다. #30010 (alexey-milovidov).
  • 크로스 컴파일 툴체인에 필요한 파일만 남기고, 이를 서브모듈로 포함했습니다(이전에는 tarball로 다운로드했습니다). #29974 (alexey-milovidov).
  • SELECT 구문 파서를 위해 ClickHouse에 구조 인식 퍼징(structure-aware fuzzing) 기법을 구현했습니다. #30012 (Paul).
  • template 코드 컴파일을 가속하기 위해 clang의 실험적 constexpr 표현식 평가기를 활성화했습니다. #29668 (myrrc).
  • 새로운 심볼을 사용하지 않고도 최신 버전의 glibc를 사용해 컴파일할 수 있는 기능을 추가했습니다. #29594 (Azat Khuzhin).
  • clang 최적화 옵션을 사용하여 Debug 빌드 바이너리 크기를 줄였습니다. #28736 (flynn).
  • 이제 CI용 모든 이미지는 별도의 Docker Hub 저장소에 배치됩니다. #28656 (alesapin).
  • clang-13으로 빌드할 때의 지원을 개선했습니다. #28046 (Sergei Semin).
  • clickhouse-client에서 원시 프로파일 이벤트를 출력할 수 있는 기능을 추가했습니다(디버깅 및 테스트에 유용할 수 있습니다). #30064 (Azat Khuzhin).
  • clickhouse-server 유닛(systemd 및 sysvinit init)에 시간 의존성을 추가했습니다. #28891 (Azat Khuzhin).
  • 심볼이 다시 로드될 때 스택 트레이스 캐시를 다시 로드하도록 했습니다. #28137 (Amos Bird).

버그 수정 사항

  • positionCaseInsensitiveUTF8countSubstringsCaseInsensitiveUTF8와 같은 UTF-8 문자열에서 대소문자를 구분하지 않고 검색하는 FUNCTION에서 극히 드문 경우 실제로는 일치하지 않는 부분 문자열을 찾는 문제가 있었으며, 이를 수정했습니다. #30663 (tavplubix).
  • 암호화된 디스크에서 빈 파일을 읽을 때 발생하던 문제를 수정합니다. #30494 (Vitaly Baranov).
  • legacy_column_name_of_tuple_literal = 0 설정이 사용되는 분산 쿼리에서, optimize_min_equality_disjunction_chain_length 설정으로 제어되는 논리합(disjunction) 체인을 IN으로 변환하는 최적화를 수정합니다. #28658 (Anton Popov).
  • insert_allow_materialized_columns=0으로 설정된 경우에도 분산 테이블에서 구체화된 컬럼을 샤딩 키로 사용할 수 있도록 허용합니다:. #28637 (Vitaly Baranov).
  • 결과 집합에 행이 없고 TOFROM이 설정된 경우의 ORDER BY ... WITH FILL 동작을 수정했습니다. #30888 (Anton Popov).
  • 피연산자가 2개보다 많은 AND/OR 표현식에서 Set 인덱스가 사용되지 않던 문제를 수정합니다. 이를 통해 #30416 이슈가 해결됩니다. #30887 (Amos Bird).
  • 해싱 함수를 사용하는 프로젝션이 구체화될 때 발생하던 크래시를 수정합니다. 이로써 #30861 이슈가 해결됩니다. 이 이슈는 헤더가 비어 있어야 한다는 불변 조건을 제대로 이해하지 못해 발생한 https://github.com/ClickHouse/ClickHouse/pull/28560 과 유사합니다. #30877 (Amos Bird).
  • ReplicatedMergeTree에서 ZooKeeper 경로로부터 보조 ZooKeeper 이름을 추출할 때 발생하던 모호함을 해결했습니다. 이전에는 ZooKeeper 경로에 콜론이 포함된 경우 서버가 Unknown auxiliary ZooKeeper name 오류와 함께 시작에 실패할 수 있었습니다. #29052를 수정합니다. 또한 이전에는 슬래시로 시작하지 않는 ZooKeeper 경로를 지정하는 것이 허용되었으나, 이제는 사용 중단(deprecated)되었으며 이러한 경로를 사용하는 새 테이블의 생성은 허용되지 않습니다. 보조 ZooKeeper 이름에 슬래시와 콜론을 사용하는 것 역시 허용되지 않습니다. #30822 (tavplubix).
  • 어떤 이유로든 localBackup이 실패한 경우 임시 디렉터리를 정리합니다. #30797 (ianton-ru).
  • 비복제(non-replicated) MergeTree에서 REPLACE/MOVE PARTITION과 백그라운드 병합(background merge) 사이에서 발생하던 경쟁 상태(race condition)를 수정하여, 이동되거나 교체된 데이터의 일부가 파티션에 남게 될 수 있던 문제를 해결했습니다. #29327을(를) 수정했습니다. #30717 (tavplubix).
  • 항상 참이 되는 PREWHERE 조건이 있는 경우 PREWHERE 대신 WHERE를 사용하도록 수정합니다. #30668 (Azat Khuzhin).
  • Limit push down 최적화로 인해 Cannot find column 오류가 발생할 수 있는 문제가 있었습니다. #30438를 수정합니다. #30562 (Nikolai Kochetov).
  • 쿼리에서 isNotNull/isNullIS [NOT] NULL로 다시 쓰는 과정에서 누락된 괄호를 추가합니다(예: isNotNull(1)+isNotNull(2)와 같은 쿼리가 동작하지 않던 문제를 수정). #30520 (Azat Khuzhin).
  • 동일한 테이블을 대상으로 하는 스칼라 서브쿼리가 포함된 ALTER 문에서 발생하는 교착 상태 문제를 해결하고, #30461 이슈를 종료했습니다. #30492 (Vladimir C).
  • 세션이 REPLACE PARTITION 실행 중 만료될 경우 발생할 수 있었던 세그멘테이션 폴트(segfault)를 수정했습니다. #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에서 널 허용 속성(nullable attributes)에 대한 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 INWITH TOTALS가 포함된 쿼리에서 발생하던 Port is already connected 오류를 수정했습니다. 21.9 및 21.10 버전에만 해당됩니다. #30086 (Nikolai Kochetov).
  • MergeTree에서 MOVE PARTITION과 머지 및 뮤테이션 간의 경쟁 상태(race condition)를 수정합니다. #30074 (Azat Khuzhin).
  • 삭제된 Memory 데이터베이스가 서버 재시작 후 다시 나타날 수 있던 문제가 수정되었습니다 (#29795). 또한 클라우드 환경에서는 데이터 잔여물을 수동으로 제거할 수 없기 때문에, Ordinary 데이터베이스를 삭제할 때 발생하는 Directory not empty 오류에 대한 워크어라운드로 force_remove_data_recursively_on_drop 설정이 추가되었습니다. #30054 (tavplubix).
  • tuple()로 인해 발생하던 sample의 크래시를 수정합니다. #30004 이슈를 종료합니다. #30016 (flynn).
  • 이슈 #29965를 종료하려는 시도. #29976 (hexiaoting).
  • FileCheckerStorageLog/StorageStripeLog 사이에서 발생할 수 있는 데이터 레이스를 수정했습니다. #29959 (Azat Khuzhin).
  • StorageLog에서 LogSink::writeMarks()LogSource 사이의 데이터 레이스 문제를 수정합니다. #29946 (Azat Khuzhin).
  • https://github.com/ClickHouse/ClickHouse/pull/19544에서 도입된 MergeTree 테이블 동시 쿼리 제한의 잠재적인 리소스 누수 문제를 수정합니다. #29879 (Amos Bird).
  • system 테이블 재생성 검사를 수정하여 Enum 값 변경을 감지하지 못하던 문제를 해결합니다. #29857 (Azat Khuzhin).
  • MaterializedMySQL: MySQL 연결이 끊어진 경우 트랜잭션이 일부만 처리될 수 있던 문제를 수정합니다. #29837 (Håvard Kvålen).
  • 커널의 버그로 추정되는 문제로 인해 극히 드문 경우에 발생할 수 있는 Timeout exceeded: elapsed 18446744073.709553 seconds 오류가 발생하지 않도록 합니다. #29154를 수정합니다. #29811 (tavplubix).
  • 경로 대신 비문자열 리터럴이 사용될 때 ATTACH TABLE ... FROM 'path' 쿼리에서 잘못된 형 변환을 수정합니다. 이로 인해 초기화되지 않은 메모리를 읽을 수 있습니다. #29790 (alexey-milovidov).
  • GROUP BYLowCardinality에 대한 동시 액세스를 수정했습니다 (Buffer 테이블과 함께 사용되는 경우 문제를 일으킬 수 있었습니다). #29782 (Azat Khuzhin).
  • 분산 쿼리에서 세그먼트에 <= 21.3>= 21.4 버전이 혼재하고, GROUP BY 키가 모두 고정 크기인 여러 컬럼으로 구성되어 있으며, 이중 레벨 집계(two-level aggregation)가 활성화되어 있을 때(group_by_two_level_thresholdgroup_by_two_level_threshold_bytes 참조), 결과에 동일한 키를 가진 여러 행이 포함될 수 있던 잘못된 GROUP BY 동작을 수정했습니다. #29580을(를) 수정합니다. #29735 (Nikolai Kochetov).
  • 서버 재시작 시 materialized_postgresql_tables_list 설정이 잘못 동작하던 문제를 수정했습니다. 해당 문제는 #28529에서 보고되었습니다. #29686 (Kseniia Sumarokova).
  • 푸시다운 최적화 이후 필터 술어의 조건이 누락되는 문제가 있었습니다. #29625 (Nikolai Kochetov).
  • 별칭 및 단락 평가(short-circuit) 표현식을 사용하는 경우의 JIT 표현식 컴파일을 수정합니다. #29403 이슈를 해결합니다. #29574 (Maksim Kita).
  • DEFAULT 표현식에서 x.y.z...와 같이 잘못된 테이블 식별자를 사용할 때 ALTER MODIFY 쿼리에서 드물게 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. 관련 이슈: #29184. #29573 (alesapin).
  • HAVING에 사용된 컬럼이 SELECT 절에 포함되지 않았을 때 GROUP BY WITH TOTALS HAVING에서 발생하던 nullptr 역참조를 수정했습니다. #29553 (Azat Khuzhin).
  • 동시에 Join table engine 테이블에서 읽기와 쓰기를 수행해도 교착 상태가 발생하지 않도록 개선했습니다. #29544 (Raúl Marín).
  • std::mismatch 사용 방식에 버그가 있어 pathStartsWith 검사에서 발생하던 문제를 수정합니다: The behavior is undefined if the second range is shorter than the first range.. #29531 (Kseniia Sumarokova).
  • ODBC bridge에서 "Invalid cursor state" 오류에 대한 재시도 로직을 추가했습니다. 이 오류는 재시도 가능한 오류입니다. #29473를 해결합니다. #29518 (Kseniia Sumarokova).
  • Lazy 데이터베이스를 로드할 때 테이블 이름을 잘못 파싱하던 문제를 수정했습니다. 이에 따라 #29456 이슈가 해결되었습니다. #29476 (tavplubix).
  • 푸시다운된 HAVING 프리디케이트가 있는 서브쿼리에서 발생할 수 있는 Block structure mismatch 문제를 수정했습니다. 이로써 #29010 이슈를 해결합니다. #29475 (Nikolai Kochetov).
  • greatest/least 함수에서 발생하는 논리적 오류 Cannot capture columns를 수정합니다. #29334 이슈를 종료합니다. #29454 (Kruglov Pavel).
  • RocksDB 테이블 엔진: 여러 DB를 여는 과정에서 발생하는 경쟁 조건(race condition)을 수정하고, CI에서 이 문제를 재현하는 일부 테스트를 다시 활성화했습니다. #29393 (Azat Khuzhin).
  • 구성이 잘못된 경우 복제된 access storage가 정상적으로 종료되지 않던 문제를 수정합니다. #29388 (Kevin Michel).
  • 메모리 측면에서 안전하지 않으므로 윈도우 함수 nth_value를 제거합니다. 이를 통해 #29347 이슈를 해결합니다. #29348 (alexey-milovidov).
  • 프로젝션 파트의 수직 병합을 수정합니다. 이 변경으로 #29253이 해결됩니다. 또한 이 PR은 https://github.com/ClickHouse/ClickHouse/pull/25165 에서 도입된 여러 프로젝션 병합/뮤테이션 이슈도 수정합니다. #29337 (Amos Bird).
  • 새 레플리카를 추가하는 동안 Replicated 데이터베이스에서 대기 상태에 빠지던 DDL 쿼리 문제를 수정했습니다. #29328 (Kevin Michel).
  • 연결 타임아웃(send_timeout/receive_timeout) 문제를 수정했습니다. #29282 (Azat Khuzhin).
  • ReplicatedMergeTree의 레플리카를 새로 생성하거나 다시 생성할 때, 테이블 컬럼 중 하나에 대소문자를 구분하지 않는 함수가 포함된 기본값 표현식이 있는 경우 발생할 수 있는 Table columns structure in ZooKeeper is different from local table structure 예외가 발생하지 않도록 수정합니다. #29266 (Anton Popov).
  • TCP를 통해 클라이언트에 전송할 때 ATTEMPT_TO_READ_AFTER_EOF 대신 일반적인 Database doesn't exist error (UNKNOWN_DATABASE)를 보내도록 했습니다. #29229 (Azat Khuzhin).
  • Avro 입력 포맷에서 LowCardinality(Nullable) 타입 컬럼에 데이터 삽입 시 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. #29132 (Kruglov Pavel).
  • 서버 간 시크릿(inter-server secret)이 사용되는 경우 이전 자격 증명이 재사용되지 않도록 했습니다(해당 클러스터에 interserver secret이 설정된 상태에서 Buffer/Kafka를 통해 분산 테이블(Distributed table)에 INSERT하기 전에, 해당 연결에 대해 이전에 설정된 USER가 재사용될 수 있었습니다). #29060 (Azat Khuzhin).
  • 딕셔너리와 조인할 때 any_join_distinct_right_table_keys를 처리하여 #29007 이슈를 해결했습니다. #29014 (Vladimir C).
  • 별칭 컬럼을 기준으로 JOIN을 수행할 때 발생하던 「Not found column ... in block」 오류를 수정하고 #26980 이슈를 종료했습니다. #29008 (Vladimir C).
  • GLOBAL IN 서브쿼리에 사용되는 스레드 수를 수정했습니다(이전에는 #19414 버그 수정 이후 단일 스레드에서만 실행되었습니다). #28997 (Nikolai Kochetov).
  • WITH FILL을 포함하는 ORDER BY에 대한 잘못된 최적화를 수정합니다. #28908 이슈를 해결합니다. #26049 이슈를 해결합니다. #28910 (alexey-milovidov).
  • 상수 인자에서 발생하던 고차 배열 함수(arrayCompactSIGSEGV, arrayDifferencearrayCumSumNonNegativeILLEGAL_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 PARTREPLACE/MOVE PARTITION 사이의 경쟁 상태를 수정했습니다. #28864 (tavplubix).
  • 단락 평가(short-circuit evaluation)가 적용된 표현식의 컴파일 문제를 수정했습니다. #28821 (Azat Khuzhin).
  • 모든 레플리카를 하드 리부트한 이후 ReplicatedMergeTree 레플리카 간 데이터가 달라질 수 있는 극히 드문 경우를 수정합니다. 오류 메시지는 Part ... intersects (previous|next) part ... 형태로 표시됩니다. #28817 (alesapin).
  • 연결의 유효성을 보다 엄격히 검사하고, 혹시 모를 상황에 대비해 RabbitMQ 종료 시 발생하는 모든 예외도 포착하도록 했습니다. #28797 (Kseniia Sumarokova).
  • ReplicatedMergeTreeQueue의 무해한 경쟁 조건을 수정했습니다. 사용자에게는 보이지 않지만, 미묘한 버그를 유발할 수 있습니다. #28734 (alesapin).
  • 예외 발생 시 부분적으로 생성된 집계 PROJECTION이 있는 SELECT 쿼리에서 발생할 수 있는 크래시를 수정했습니다. #28700 (Amos Bird).
  • 잘못된 파라미터가 전달된 경우 분산 테이블 생성 시 발생하는 코어 덤프를 수정합니다. #28686 (Zhiyong Wang).
  • system.processes 테이블에 Settings.Names, Settings.Values 별칭을 추가합니다. #28685 (Vitaly).
  • S2 Geometry 라이브러리 지원: s2RectAdds2RectContains 함수에 필요한 인수 개수를 수정했습니다. #28663 (Bharat Nallan).
  • Nullable(널 허용) 또는 LowCardinality 기본 키가 사용될 때 발생하는 잘못된 상수 타입 변환 문제를 수정합니다. #28636 (Amos Bird).
  • PREWHERE를 사용할 때 발생하는 "Column is not under aggregate function and not in GROUP BY" 오류를 수정합니다(Fixes: #28461). #28502 (Azat Khuzhin).

ClickHouse 릴리스 v21.10, 2021-10-16. 발표 자료, 영상

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

  • 이제 다음 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).

New Feature

  • 람다 표현식으로 사용자 정의 함수(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).
  • 데이터 가져오기/내보내기에서 gz, bz2, xz, zstd에 더해 lz4 압축 형식을 지원합니다. #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 간의 변환 함수(conversion functions)를 추가했습니다. #27058를 참조하십시오. #27704 (jasine).
  • SHA512 함수를 추가했습니다. #27830 (zhanglistar).
  • 쿼리의 일부만 샘플링하여 query_log에 기록할 수 있도록 하는 log_queries_probability 설정을 추가했습니다. #16609를 종료합니다. #27527 (Nikolay Degterinsky).

실험적 기능

  • 정적 파일 형태로 웹 서버에 있는 읽기 전용 테이블을 저장하기 위한 web 타입의 디스크를 추가했습니다. #23982, #25251 (Kseniia Sumarokova). 주로 공유 스토리지에서의 동작을 테스트하고 데이터셋을 손쉽게 가져오기 위해 필요합니다. 21.11 릴리스 이전에는 사용을 권장하지 않습니다.
  • 새로운 명령어 BACKUPRESTORE를 추가했습니다. #21945 (Vitaly Baranov). 현재 개발 중이며, 이 버전에서의 사용을 전제로 하지 않습니다.

성능 개선

  • sumIfcountIf 집계 함수의 속도를 향상했습니다. #28272 (Raúl Marín).
  • minmax 인덱스를 위한 가상 PROJECTION을 생성했습니다. 이제 allow_experimental_projection_optimization이 활성화되어 있을 때, 가능한 경우 쿼리가 데이터를 직접 읽는 대신 minmax 인덱스를 사용합니다. #26286 (Amos Bird).
  • 이벤트 목록에서 시퀀스 패턴의 일부 결정적 부분이 누락된 경우 조기 종료할 수 있도록, sequenceMatchsequenceCount에 두 개의 검사를 도입했습니다. 이 변경으로 이전에 연산 상한에 도달해 실패하던 많은 쿼리를 실행할 수 있게 되었고, 전반적으로 파이프라인 속도가 향상되었습니다. #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 테이블을 생성하기 전에 클러스터 이름을 확인해, 잘못된 클러스터 이름으로 테이블이 생성되지 않도록 했습니다. #27832를 수정했습니다. #27927 (tavplubix).
  • 다른 quantile...Weighted 계열 함수와 마찬가지로 집계 함수 quantileBFloat16Weighted를 추가합니다. 이로써 #27745가 종료됩니다. #27758 (Ivan Novitskiy).
  • 속성 목록이 비어 있는 딕셔너리를 CREATE할 수 있도록 했습니다. #27905 (Maksim Kita).
  • clickhouse-client에 비밀번호를 재설정하는 방법에 대한 대화형 안내를 추가했습니다. 이는 사용자가 ClickHouse를 설치하고 비밀번호를 설정하자마자 곧바로 잊어버리는 경우에 유용합니다. #27750를 참조하십시오. #27903 (alexey-milovidov).
  • JSONAsString 입력 포맷에서 데이터가 배열로 감싸져 있는 경우를 지원합니다. #25517 이슈를 해결합니다. #25633 (Kruglov Pavel).
  • system.replicas 테이블에 새 컬럼 last_queue_update_exception을 추가합니다. #26843 (nvartolomei).
  • MaterializedPostgreSQL 테이블에 대해 장애 조치(failover) 시 재연결을 지원합니다. #28529를 해결합니다. #28614 (Kseniia Sumarokova).
  • 서버를 처음 시작할 때 고유한 서버 UUID를 생성합니다. #20089 (Bharat Nallan).
  • MySQL 엔진에 connection_wait_timeout SETTING을 도입합니다(기본값 5초, 0이면 대기하지 않음). #28474 (Azat Khuzhin).
  • 잘못된 인수로 MaterializedPostgreSQL을(를) 생성할 수 없도록 했습니다. #28423 이슈를 해결합니다. #28430 (Kseniia Sumarokova).
  • 수직 병합에서 미리 정의된 "rows_sources" 대신 실제 tmp 파일을 사용합니다. 이렇게 하면 tmp 디스크에 불필요한 디렉터리가 생성되지 않도록 합니다. #28299 (Amos Bird).
  • clickhouse-server.service에서 환경 변수 LIBHDFS3_CONF를 export하는 대신 서버 설정에 libhdfs3_conf를 추가했습니다. 이는 HDFS와의 연동을 구성하기 위한 것입니다. #28268 (Zhichang Yu).
  • Temporary 상태에 있는 파트를 제거할 때 발생할 수 있는 예기치 않은 예외(Part %name% doesn't exist)를 수정합니다. 이를 통해 #23661 이슈를 해결합니다. #28221 #28221) (Azat Khuzhin).
  • zookeeper_log.address를 수정합니다(이 PR의 첫 번째 패치 이전에는 주소가 항상 ::였습니다) 그리고 이 컬럼에 대해 수행되는 getpeername(2) 호출 횟수를 줄입니다(zookeeper_log에 항목이 추가될 때마다 getpeername()이 호출되므로, 이를 방지하기 위해 이 주소를 zookeeper 클라이언트에 캐시합니다). #28212 (Azat Khuzhin).
  • [] 연산자의 인덱스와 Map 타입 키 간의 암시적 형 변환을 지원합니다(예: 서로 다른 Int 타입, StringFixedString). #28096 (Anton Popov).
  • PostgreSQL table engine 또는 table function에 데이터를 삽입할 때 ON CONFLICT 절을 지원합니다. #27727 GitHub 이슈를 해결합니다. #28081 (Kseniia Sumarokova).
  • 호환되는 데이터를 ATTACH 할 수 있도록 Enum 데이터 유형에 대한 제한을 완화했습니다. #26672를 해결했습니다. #28028 (Dmitry Novik).
  • empty_result_for_aggregation_by_constant_keys_on_empty_set 설정을 추가하여 비어 있는 Set에서 상수 키로 그룹화할 때의 동작을 제어합니다. 이는 #6842의 이전 동작을 복원하기 위한 것입니다. #27932 (Amos Bird).
  • replication_wait_for_inactive_replica_timeout 설정이 추가되었습니다. 이 설정을 사용하면 비활성 레플리카가 ALTER/OPTIMZE/TRUNCATE 쿼리를 실행할 때까지 얼마나 오래 대기할지 지정할 수 있습니다(기본값은 120초입니다). replication_alter_partitions_sync가 2이고 일부 레플리카가 replication_wait_for_inactive_replica_timeout초를 초과해 비활성 상태인 경우 UNFINISHED 예외가 발생합니다. #27931 (tavplubix).
  • 두 개 이상의 인수를 받는 함수를 적용할 수 있도록 APPLY 컬럼 변환기에서 람다 인자를 지원합니다. 이는 #27877를 위한 변경입니다. #27901 (Amos Bird).
  • tcp_keep_alive_timeout을 기본적으로 활성화하도록 설정했습니다. #27882 (Azat Khuzhin).
  • 원격 서버가 비정상적으로 종료된 경우를 위한 원격 쿼리 취소 기능을 개선했습니다. #27881 (Azat Khuzhin).
  • 대용량 S3 객체에 멀티파트 복사 업로드를 사용하도록 했습니다. #27858 (ianton-ru).
  • 라이브러리 딕셔너리 경로에서 심볼릭 링크 탐색을 허용합니다. #27815 (Kseniia Sumarokova).
  • 이제 ALTER MODIFY COLUM TNullable(T)로 변경해도 mutation 작업이 더 이상 필요하지 않습니다. #27787 (victorgao).
  • ReadBufferFromS3에서 오류를 암묵적으로 무시하지 않고, 지연 시간을 계산하지 않도록 했습니다. #27484 (Vladimir Chebotarev).
  • ALTER ... MATERIALIZE TTL이 실제 TTL 동작을 수행하지 않고 메타데이터만 재계산하도록 개선되었습니다. #27019 (lthaooo).
  • EOF에 개행 문자(new line)가 없어도 사용자 정의 최상위 도메인 목록을 읽을 수 있도록 했습니다. #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에 저장된 세션 컨텍스트가 전역 컨텍스트를 소멸하기 전에 먼저 소멸됩니다. #27875 (Vitaly Baranov).
  • windowFunnel의 「strict」 모드 버그를 수정했습니다. 이 수정으로 #27469 이슈가 해결되었습니다. #27563 (achimbab).
  • 잘려 손상된 bzip2 아카이브를 읽을 때 발생하던 무한 루프를 수정했습니다. #28543 (Azat Khuzhin).
  • MaterializedMySQL의 내부 DDL에서 DROP TABLE 실행 시 UUID가 중복되는 문제를 수정합니다. MaterializedMySQL은 실험적인 기능입니다. #28533 (Azat Khuzhin).
  • Nested 컬럼과 이름에 점이 있고 Nested와 같은 접두사를 가진 스칼라 컬럼이 함께 존재하는 테이블(예: n.id UInt32, n.arr1 Array(UInt64), n.arr2 Array(UInt64))에서 SELECT 쿼리를 실행할 때 발생하던 There is no subcolumn 오류를 수정합니다. #28531 (Anton Popov).
  • ReplicatedVersionedCollapsingMergeTree에 대해 ALTER를 수행한 후 Existing table metadata in ZooKeeper differs in sorting key expression. 오류가 발생할 수 있었던 버그를 수정합니다. #28515를 수정합니다. #28528 (alesapin).
  • 백그라운드에서 수행되는 분산 DDL 큐의 처리 중 발생할 수 있는 ZooKeeper watch 누수(경미한 문제)를 수정했습니다. #26036을 해결합니다. #28446 (tavplubix).
  • MaterializedPostgreSQL 엔진에서 테이블 이름에 대한 따옴표 누락 문제를 수정했습니다. #28316 이슈를 종료합니다. #28433 (Kseniia Sumarokova).
  • 널 허용 컬럼의 조인되지 않은 행에서 발생하던 잘못된 동작을 수정했습니다. #27691 이슈를 닫았습니다. #28349 (vdimir).
  • 모든 키 컬럼이 사용되지 않는 경우에도 NOT IN 인덱스 최적화가 올바르게 동작하도록 수정했습니다. 이로써 #28120 이슈가 해결되었습니다. #28315 (Amos Bird).
  • 새 파트가 비어 있는 파트로 교체되면서 파트 간 교차가 발생하던 문제를 수정했습니다. #28310 (Azat Khuzhin).
  • optimize_read_in_order 설정이 활성화된 Merge 테이블을 사용하고 ORDER BY를 포함한 쿼리에서 발생하던 결과 불일치 문제를 수정합니다. #28266 (Anton Popov).
  • Nullable(LowCardinality) 타입과 설정 extremes가 1인 쿼리에서 발생할 수 있는 초기화되지 않은 메모리 읽기 문제를 수정합니다. #28165를 수정합니다. #28205 (Nikolai Kochetov).
  • 프로젝션에 여러 가지 작은 수정이 포함되었습니다. 자세한 설명은 PR을 참고하십시오. #28178 (Amos Bird).
  • context/config 리로더의 종료 순서가 잘못되어 종료 시 극히 드물게 발생하던 segfault를 수정합니다. #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).

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

  • 스트레스 테스트에서 Thread Fuzzer를 활성화합니다. Thread Fuzzer는 더 다양한 스레드 스케줄링 조합을 테스트하고 더 많은 잠재적 문제를 발견할 수 있게 해 주는 ClickHouse 기능입니다. 이로써 #9813, #9814, #9515, #9516 이슈가 해결됩니다. #27538 (alexey-milovidov).
  • 테스트 환경을 위한 새로운 로그 레벨 test를 추가합니다. 기본값인 trace보다 더 상세한 로그를 출력합니다. #28559 (alesapin).
  • CMake 설정 단계에서 git 상태 정보를 출력합니다. #28047 (Braulio Valdivielso Martínez).
  • 기본 저장소인 archive.ubuntu.com이 CI에서 응답하지 않아, Ubuntu APT 저장소를 임시로 미러인 ru.archive.ubuntu.com으로 전환했습니다. #28016 (Ilya Yatsishin).

ClickHouse 릴리스 v21.9, 2021-09-09

하위 호환성 깨지는 변경 사항

  • Decimal 타입의 텍스트 표현에서 끝자리 0을 출력하지 않습니다. 예: 스케일이 6인 decimal의 경우 1.230000 대신 1.23이 출력됩니다. 이 변경으로 #15794가 해결됩니다. 애플리케이션이 끝자리 0에 의존하는 경우 약간의 비호환성이 발생할 수 있습니다. 출력 포맷에서의 직렬화는 설정 output_format_decimal_trailing_zeros로 제어할 수 있습니다. toString 구현과 String으로의 캐스팅은 항상 변경됩니다. #27680 (alexey-milovidov).
  • 파라미터가 있는 집계 함수에 -Merge 조합자를 사용하여, 다른 파라미터로 생성된 집계 함수 상태에 적용하는 것을 허용하지 않습니다. 예를 들어, fooState(42)(x)로 생성된 상태는 fooMerge(s) 또는 fooMerge(123)(s)로 최종화할 수 없으며, fooMerge(42)(s)처럼 파라미터를 명시적으로 지정해야 하고 동일해야 합니다. 이 변경은 최종화에만 파라미터를 사용하는 quantilesequence*와 같은 일부 특수 집계 함수에는 영향을 주지 않습니다. #26847 (tavplubix).
  • clickhouse-local에서는 포트가 있는 로컬 주소를 항상 원격으로 취급합니다. #26736 (Raúl Marín).
  • 일부 복잡한 쿼리에서 컬럼 별칭이 표현식 이름과 동일한 경우, 잘못된 캐스팅이 발생할 수 있는 문제를 수정합니다. 이 수정으로 #25447가 해결되며, #26914도 해결됩니다. 이 수정으로 하위 호환성 문제가 생길 수 있습니다. 동일한 이름을 가진 서로 다른 표현식이 있는 경우 예외가 발생합니다. enable_optimize_predicate_expression이 설정된 드문 경우 일부 동작이 깨질 수 있습니다. #26639 (alexey-milovidov).
  • 이제 스칼라 서브쿼리는 그 타입이 Nullable이 될 수 있는 경우 항상 Nullable 결과를 반환합니다. 서브쿼리가 비어 있는 경우 결과가 Null이어야 하기 때문입니다. 이전에는 타입이 호환되지 않는다는 오류가 발생할 수 있었습니다(타입 추론 시 스칼라 서브쿼리는 실행되지 않으며, 널 허용이 아닌 타입을 사용할 수 있었습니다). ArrayTuple처럼 Nullable로 변환할 수 없는 타입의 빈 결과를 가지는 스칼라 서브쿼리는 이제 오류를 발생시킵니다. #25411을 수정합니다. #26423 (Nikolai Kochetov).
  • here document를 위한 문법을 도입했습니다. 예: SELECT $doc$ VALUE $doc$. #26671 (Maksim Kita). 쿼리에 $를 포함하는 식별자가 있는 경우 이 변경은 하위 호환되지 않습니다. #28768.
  • 이제 인덱스는 isNullisNotNull을 포함하여 널 허용(Nullable) 타입을 처리할 수 있습니다. #12433#12455 (Amos Bird)와 #27250 (Azat Khuzhin). 그러나 이는 디스크 상의 포맷 변경을 동반하며, 새 서버는 이전 데이터를 읽을 수 있지만 이전 서버는 그렇지 못합니다. 또한 MINMAX 데이터 스키핑 인덱스가 있는 경우, 새로운 인덱스의 확장자가 예전에는 .idx였던 것이 .idx2가 되므로 Data after mutation/merge is not byte-identical 오류가 발생할 수 있습니다. 따라서 이 경우에는 모든 기존 레플리카를 지체하지 말고 업데이트해야 합니다. 그렇지 않으면, 예전 레플리카(<21.9)가 21.9+ 버전의 새 레플리카에서 데이터를 다운로드할 때 다운로드된 파트에 대해 인덱스를 적용할 수 없습니다.

새 기능

  • 단락 회로 함수 평가(short circuit function evaluation)를 구현하였습니다. #12587 이슈를 해결합니다. 단락 회로 함수 평가를 구성할 수 있도록 설정 항목 short_circuit_function_evaluation을(를) 추가하였습니다. #23367 (Kruglov Pavel).
  • INTERSECT, EXCEPT, ANY, ALL 연산자 지원을 추가했습니다. #24757 (Kirill Ershov). (Kseniia Sumarokova).
  • AES-CTR 알고리즘을 사용하여 가상 파일 시스템 수준에서의 암호화(데이터 저장 시 암호화)를 지원합니다. #24206 (Latysheva Alexandra). (Vitaly Baranov) #26733 #26377 #26465.
  • 동의어 확장(synonyms extensions)에서 토큰화(tokenization), 어간 추출(stemming), 표제어 추출(lemmatizing) 및 검색을 위한 자연어 처리(NLP) FUNCTION 여러 개를 추가했습니다. #24997 (Nikolay Degterinsky).
  • S2 기하학 라이브러리와의 통합을 추가했습니다. #24980 (Andr0901). (Nikita Mikhaylov).
  • SQLite 테이블 엔진, 테이블 함수, 데이터베이스 엔진을 추가했습니다. #24194 (Arslan Gumerov). (Kseniia Sumarokova).
  • MySQL, PostgreSQL, ClickHouse, JDBC, Cassandra 딕셔너리 소스에서 사용자 정의 쿼리를 지원하도록 기능을 추가했습니다. #1270 이슈를 해결했습니다. #26995 (Maksim Kita).
  • ZooKeeper를 통해 users, roles, 행 정책(row policies), QUOTA 및 SETTINGS PROFILE을 위한 공유(복제) 스토리지를 추가했습니다. #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).
  • 집계 FUNCTION 매개변수에서 WITH 및 SELECT의 상수 표현식을 사용할 수 있도록 허용합니다. #10945 이슈를 종료했습니다. #27531 (abel-cheng).
  • 이름이 있는 튜플을 이름-값 쌍의 배열로 변환하는 함수 tupleToNameValuePairs를 추가했습니다. #27505 (Braulio Valdivielso Martínez).
  • 가져오기/내보내기에서 bzip2 압축 방식을 지원하도록 했습니다. #22428를 해결합니다. #27377 (Nikolay Degterinsky).
  • bitmapSubsetOffsetLimit(bitmap, offset, cardinality_limit) 함수가 추가되었습니다. 이 함수는 비트맵에서 offset 위치부터 시작하여 결과를 최대 cardinality_limit개로 제한하는 부분 집합을 생성합니다. #27234 (DHBin).
  • system.usersdefault_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에 대해 제로 카피 복제를 지원합니다. #25918 (Zhichang Yu).
  • Arrow, ORC, Parquet 입력 포맷에서 Nested 타입을 struct 배열 형태로 삽입할 수 있게 되었습니다. #25902 (Kruglov Pavel).
  • 새로운 데이터 타입 Date32(데이터를 Int32로 저장)를 추가하고, DateTime64와 동일한 날짜 범위를 지원하며, Parquet의 date32를 ClickHouse Date32로 로드하는 기능을 지원합니다. 또한 toDate와 유사한 새로운 함수 toDate32를 추가합니다. #25774 (LiuNeng).
  • 기본 데이터베이스를 지정할 수 있도록 했습니다. #25268. #25687 (kevin wan).
  • MongoDB 엔진에 선택적 매개변수를 추가하여 연결 문자열 옵션을 사용할 수 있게 하고 SSL 연결을 지원합니다. #21189 이슈를 종료합니다. #21041 이슈를 종료합니다. #22045 (Omar Bazaraa).

실험적 기능

  • 데이터를 압축하는 대신 컬럼을 암호화하는 압축 코덱 AES_128_GCM_SIV를 추가했습니다. #19896 (PHO). 재작성될 예정이므로 사용하지 마십시오.
  • MaterializeMySQLMaterializedMySQL로 이름을 변경했습니다. #26822 (tavplubix).

성능 개선

  • max_execution_time = 0인 경우 clock_gettime 시스템 호출 횟수를 줄여 빠른 쿼리의 성능을 향상합니다. #27325 (filimonov).
  • 더 나은 성능을 위해 날짜·시간 관련 비교 연산을 전문화합니다. 이 변경으로 #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 테이블의 파일 디스크립터가 일반 파일인 경우, 해당 파일에서 여러 번 읽을 수 있도록 허용합니다. 이를 통해 stdin이 clickhouse-local --query "SELECT * FROM table UNION ALL SELECT * FROM table" ... &lt; file과 같은 일반 파일일 때 clickhouse-local이 stdin에서 여러 번(여러 개의 SELECT 쿼리 또는 서브쿼리로) 읽을 수 있습니다. 이 변경으로 #11124 이슈가 해결됩니다. (alexey-milovidov)와 공동 작성되었습니다. #25960 (BoloniniD).
  • 중복 인덱스 분석을 제거하고, PROJECTION 분석에서 발생할 수 있는 잘못된 limit 검사를 방지합니다. #27742 (Amos Bird).
  • HTTP 요청 본문에서 쿼리 매개변수를 전달할 수 있도록 허용합니다. #27706 (Hermano Lustosa).
  • 파티션 표현식에서 arrayJoin 사용을 금지합니다. #27648 (Raúl Marín).
  • 인증 실패 시 클라이언트 IP 주소를 로그에 기록합니다. #27514 (Misko Lee).
  • GRPC 프로토콜에서 바이너리 데이터에는 문자열이 아닌 바이트를 사용하도록 했습니다. #27431 (Vitaly Baranov).
  • HTTP 포트가 설정되지 않았는데 HTTP 요청이 TCP 포트로 전송되면 오류 메시지를 포함한 응답을 보내도록 했습니다. #27385 (Braulio Valdivielso Martínez).
  • 내부용으로 사용할 _CAST FUNCTION을 추가합니다. 이 FUNCTION은 타입의 널 허용 여부를 보존하지 않지만, 내부용이 아닌 캐스트는 cast_keep_nullable SETTING에 따라 널 허용 여부를 보존합니다. #12636을(를) 해결합니다. #27382 (Kseniia Sumarokova).
  • system.query_log에 포맷된 쿼리를 추가로 기록하기 위한 log_formatted_queries SETTING을 추가합니다. 이는 normalizeQuery, normalizeQueryKeepNames 같은 FUNCTION이 성능 향상을 위해 쿼리를 파싱/포맷하지 않으므로, 정규화된 쿼리 분석에 유용합니다. #27380 (Amos Bird).
  • Hyperscan 관련 함수인 multiMatchAny 등에서 과도하게 큰 정규식을 사용하지 못하도록 max_hyperscan_regexp_lengthmax_hyperscan_regexp_total_length 설정 두 개를 추가했습니다. #27378 (Amos Bird).
  • 비트맵 집계 함수가 사용하는 메모리가 이제 메모리 제한을 적용할 때 고려됩니다. 이로써 #26555가 해결되었습니다. #27252 (alexey-milovidov).
  • S3 프록시 리졸버에 10초짜리 캐시를 추가합니다. #27216 (ianton-ru).
  • 전역 뮤텍스를 정규식(regexp)별 생성용으로 분리했습니다. 이를 통해 대규모 정규식 생성 작업이 다른 관련 스레드를 차단하는 상황을 피할 수 있습니다. #27211 (Amos Bird).
  • PostgreSQL 데이터베이스 엔진에 대한 스키마 지원을 추가했습니다. #27166 이슈를 해결했습니다. #27198 (Kseniia Sumarokova).
  • clickhouse-client에서 메모리 사용량을 추적하도록 했습니다. #27191 (Filatenkov Artur).
  • 쿼리가 시작되기 전에 실패하더라도 system.query_logquery_kind를 기록하도록 했습니다. #27182 (Amos Bird).
  • 테이블 system.replicas에 레플리카 이름과 해당 레플리카의 활성 상태를 매핑하는 컬럼 replica_is_active를 추가했습니다. #27138을(를) 해결했습니다. #27180 (Maksim Kita).
  • Web UI에서 쿼리 설정을 서버 URI로 전달할 수 있도록 했습니다. #27177 (kolsys).
  • 현재 노드가 ZooKeeper로 푸시한 DDL 엔트리 ID 중 최댓값을 나타내는 MaxPushedDDLEntryID라는 새로운 메트릭을 추가합니다. #27174 (Fuwang Hu).
  • clickhouse-keeper가 znode를 CREATE할 때 존재 여부 판단과 빈 문자열 노드에 대한 판단 로직을 개선했습니다. #27125 (小路).
  • Merge JOIN이 오른쪽에 빈 Set이 있는 경우를 올바르게 처리합니다. #27078 (Vladimir C).
  • 이제 함수를 세그먼트 수준의 상수로 사용할 수 있습니다. 이는 특정 분산 테이블의 컨텍스트에서 실행될 경우 일반 컬럼을 생성하고, 그렇지 않으면 상수 값을 반환함을 의미합니다. 대표적인 함수로는 hostName(), tcpPort(), version(), buildId(), uptime() 등이 있습니다. #27020 (Amos Bird).
  • extractAllGroupsHorizontal가 업데이트되어 각 행에서 일치 항목 개수의 상한을 선택적인 세 번째 인자를 통해 설정할 수 있습니다. #26961 (Vasily Nemkov).
  • system.rocksdb 테이블을 통해 RocksDB 통계를 제공합니다. ClickHouse 설정에서 rocksdb... 키로 지정된 RocksDB 옵션을 읽습니다. 참고: ClickHouse는 RocksDB에 의존하지 않으며, RocksDB는 추가 통합용 스토리지 엔진 중 하나일 뿐입니다. #26821 (Azat Khuzhin).
  • 내부 RocksDB 로그가 더 간결해졌습니다. 참고로, ClickHouse는 RocksDB에 의존하지 않으며, RocksDB는 추가 통합 스토리지 엔진 중 하나일 뿐입니다. 이 변경으로 #26252가 해결되었습니다. #26789 (alexey-milovidov).
  • 기본 역할을 변경해도 새로 생성되는 세션에만 영향을 미칩니다. #26759 (Vitaly Baranov).
  • Docker에서는 기본적으로 Watchdog가 비활성화됩니다. ctrl+c 입력을 처리하지 못하던 문제를 수정했습니다. #26757 (Mikhail f. Shiryaev).
  • SET PROFILE은(는) 이제 지정된 프로파일에 제약 조건이 설정되어 있는 경우, 해당 제약 조건도 함께 적용합니다. #26730 (Vitaly Baranov).
  • KILL QUERY 요청 처리 방식을 개선했습니다. #26675 (Raúl Marín).
  • mapPopulatesSeries 함수가 Map 타입을 지원하도록 개선되었습니다. #26663 (Ildus Kurbangaliev).
  • skip_unavailable_shards 사용 시 두 배로 과도하게 발생하던 연결 시도를 수정합니다. #26658 (Azat Khuzhin).
  • 연결에 실패하는 경우(예: EMFILE 발생 시) clickhouse-benchmark가 응답 없이 대기 상태로 머무르지 않도록 했습니다. #26656 (Azat Khuzhin).
  • Kafka 엔진에서 더 많은 스레드를 사용할 수 있도록 했습니다. #26642 (feihengye).
  • clickhouse-benchmark에 라운드 로빈(round-robin) 지원을 추가합니다(통계 보고를 제외하면 일반적인 다중 호스트/포트 실행과 동일합니다). #26607 (Azat Khuzhin).
  • 실행형 사전(executable, executable_pool)을 clickhouse-local에서 DDL 쿼리로 생성할 수 있습니다. 이 변경으로 #22355 이슈가 해결되었습니다. #26510 (Maksim Kita).
  • mysqlpostgresql 호환성 프로토콜 핸들러에 대해 클라이언트 쿼리 유형을 설정하도록 했습니다. #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).
  • Distributed 디렉터리 모니터 SETTINGS를 CREATE TABLE을 통해 설정할 수 있는 기능을 추가합니다(예: CREATE TABLE dist (key Int) Engine=Distributed(cluster, db, table) SETTINGS monitor_batch_inserts=1 등). #26336 (Azat Khuzhin).
  • 웹 UI의 서버 주소가 웹 UI의 오리진과 다른 경우, 해당 서버 주소를 웹 UI의 history URL에 저장합니다. 이를 통해 #26044가 해결됩니다. #26322 (alexey-milovidov).
  • sleep / sleepEachRow 호출을 프로파일링하기 위한 이벤트를 추가했습니다. #26320 (Raúl Marín).
  • 여러 클러스터에서 세그먼트 연결을 재사용할 수 있도록 합니다. 또한 cluster table function을 사용할 때 새로운 연결을 생성하지 않도록 합니다. #26318 (Amos Bird).
  • 기본값이 설정된 파라미터로 오래된 임시 디렉터리를 정리하는 실행 주기를 제어하도록 했습니다. #26212. #26313 (fastio).
  • range 함수가 생성하는 데이터 양에 대한 안전 임계값을 조정할 수 있도록 설정 function_range_max_elements_in_block을 추가했습니다. 이로써 #26303이 해결되었습니다. #26305 (alexey-milovidov).
  • 샘플링 시점이 아니라 테이블 생성 시점에 해시 함수를 검사합니다. MergeTree용 설정을 추가하여, 잘못된 샘플링 컬럼으로 테이블을 생성했더라도 샘플링이 전혀 사용되지 않는 경우 이 설정을 비활성화해 예외 없이 서버를 시작할 수 있도록 합니다. #26256 (zhaoyu).
  • 지정된 String 컬럼을 Avro로 내보낼 때 기본 bytes 대신 string으로 기록하도록 하는 output_format_avro_string_column_pattern 설정을 추가했습니다. #22414을 구현했습니다. #26245 (Ilya Golshtein).
  • LogTinyLog 테이블에 대해 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).
  • 예외 메시지에 BAD_ARGUMENTS와 같은 오류 ID를 추가합니다. #25862를 해결합니다. #26172 (alexey-milovidov).
  • clickhouse-local의 --progress 옵션에서 잘못된 출력을 수정합니다. 진행률 표시줄은 100%에 도달하면 지워지며, clickhouse-client와 동일하게 동작합니다. #17484 이슈를 해결합니다. #26128 (Kseniia Sumarokova).
  • merge_selecting_sleep_ms 설정을 추가했습니다. #26120 (lthaooo).
  • 단일 블록 readahead를 사용하는 복잡한 Linux AIO 구현을 제거하고, O_DIRECT를 사용하는 단순한 동기식 IO로 교체합니다. 이전 버전에서는 max_threads가 1보다 큰 경우 min_bytes_to_use_direct_io 설정이 올바르게 동작하지 않을 수 있습니다. direct IO(쿼리에는 기본적으로 비활성화되어 있고, 대규모 머지에는 기본적으로 활성화됨)를 사용한 읽기 작업이 비효율적인 방식으로 수행되었습니다. 이 변경으로 #25997이 해결됩니다. #26003 (alexey-milovidov).
  • REPLACE TABLE 쿼리에서 Distributed 테이블을 플러시합니다. #24566을(를) 해결합니다 - 새 테이블에 대한 삽입이 실패한 경우 [CREATE OR] REPLACE TABLE ... AS SELECT 쿼리에서 테이블을 교체(또는 생성)하지 않습니다. #23175을(를) 해결합니다. #25895 (tavplubix).
  • views 컬럼을 system.query_log에 추가하여 쿼리에 의해 실행된 (구체화 또는 라이브) 뷰의 이름을 포함하도록 했습니다. 각 쿼리에서 실행된 뷰별 정보를 포함하는 새로운 로그 테이블(system.query_views_log)을 추가했습니다. 뷰 실행 방식을 수정했습니다. 뷰를 실행하는 동안 예외가 발생하면, 이미 실행이 시작된 모든 뷰는 완료될 때까지 계속 실행됩니다. 이는 이전에는 parallel_view_processing=true일 때만의 동작이었으나, 이제 항상 동일하게 동작합니다. - 종속 뷰는 이제 컨텍스트에 읽기 진행 상황을 보고합니다. #25714 (Raúl Marín).
  • 분산 쿼리 실행을 마친 후 연결 드레이닝(connection draining)을 비동기적으로 수행합니다. 백그라운드에서 연결을 재활용하는 워커 수를 지정하는 새로운 서버 설정 max_threads_for_connection_collector가 추가되었습니다. 풀(pool)이 가득 찬 경우에는 이전과는 조금 다르게 동기적으로 연결을 드레이닝합니다. 클라이언트에 EOS(End Of Stream)를 전송한 뒤 드레이닝이 수행되며, 쿼리는 충분한 데이터를 수신하는 즉시 성공으로 처리되고, 발생하는 모든 예외는 클라이언트로 전달되지 않고 로그에만 기록됩니다. 기본값이 3초인 drain_timeout 설정이 추가되었습니다. 연결 드레이닝은 이 타임아웃이 지나면 연결을 끊습니다. #25674 (Amos Bird).
  • 설정에서 여러 include를 지원합니다. 이제 users 설정과 remote servers 설정을 여러 소스에서 포함할 수 있습니다. from_zk, from_env 또는 incl 속성을 가진 <include /> 요소를 두면 해당 위치가 치환된 내용으로 대체됩니다. #24404 (nvartolomei).
  • insert_distributed_one_random_shard = 1 설정이 활성화된 상태에서 분산 테이블로 여러 블록을 삽입할 때 발생하던 문제를 수정했습니다. 이는 비핵심 기능입니다. 개선 사항으로 분류됩니다. #23140 (Amos Bird).
  • Map 타입에서 LowCardinalityFixedString 키/값을 지원하도록 개선했습니다. #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 등의 서로 다른 비수치 타입에 대한 Nullable LowCardinality 배열에 적용될 때 잘못된 타입 캐스트가 발생하는 문제를 수정합니다. 이전 버전에서는 잘못된 캐스트가 발생했습니다. 새 버전에서는 예외를 발생시키도록 변경됩니다. 이 수정으로 #26330이(가) 종료됩니다. #27682 (alexey-milovidov).
  • PostgreSQL table function으로 인해 연결이 종료되지 않는 문제를 수정합니다. #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).
  • row-level security, 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 BYLIMIT OFFSET와 함께 사용되는 distributed_group_by_no_merge = 2distributed_push_down_limit = 1 또는 optimize_distributed_group_by_sharding_key = 1 조합을 수정합니다. #27249 (Azat Khuzhin). 이는 사실상 아무도 사용하지 않는 드문 설정 조합입니다.
  • 복제되지 않은 MergeTree에서 잘못된 파티션 때문에 멈춰 있던 mutation이 진행되지 않던 문제를 수정합니다. #27248 (Azat Khuzhin).
  • 모호한 경우 lambda 함수는 인수를 해석할 때 다른 별칭이나 식별자보다 자신의 인수를 우선적으로 사용합니다. #27235 (Raúl Marín).
  • 머지 조인의 컬럼 구조를 수정하고 #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 유형이 아닌 딕셔너리에서 allow_read_expired_keys, max_update_queue_size, update_queue_push_timeout_milliseconds, query_wait_timeout_milliseconds 옵션이 파싱되지 않는 문제가 있었습니다. #27032 (Maksim Kita).
  • DROP_RANGE와의 경쟁 상태로 인해 발생할 수 있는 mutation 스택 문제를 수정했습니다. #27002 (Azat Khuzhin).
  • 이제 ALTER TABLE ... PARTITION ID xxx와 같은 쿼리에서 PARTITION ID가 올바른지 검증합니다. #25718을(를) 수정했습니다. #26963 (alesapin).
  • 여러 조인(JOIN)을 사용하는 일부 경우에 발생하는 「Unknown column name」 오류를 수정하고, #26899 이슈를 종료했습니다. #26957 (Vladimir C).
  • 사용자 정의 TLD 읽기 동작을 수정했습니다(버퍼가 더 작거나 파일이 더 큰 경우 처리가 중단되던 문제). #26948 (Azat Khuzhin).
  • DEFAULT 컬럼이 materialized 컬럼이 아니면서 DEFAULT 표현식이 없는 다른 컬럼을 참조할 때 발생하는 Missing columns: 'xxx' 오류를 수정합니다. #26591을(를) 해결합니다. #26900 (alesapin).
  • library 딕셔너리 소스를 위한 library-bridge의 딕셔너리 키 로딩을 수정합니다. #26834 (Kseniia Sumarokova).
  • 일부 콤비네이터를 적용할 때 AggregateFunction의 파라미터가 손실되어 Conversion from AggregateFunction(topKArray, Array(String)) to AggregateFunction(topKArray(10), Array(String)) is not supported와 같은 예외가 발생할 수 있었습니다. 이 문제가 수정되었습니다. #26196#26433 이슈를 해결합니다. #26814 (tavplubix).
  • system.part_log에서 REMOVE_PART에 대해 event_time_microseconds 값을 추가했습니다. 이전 버전에서는 이 값이 설정되지 않았습니다. #26720 (Azat Khuzhin).
  • 데이터와 메타데이터 간의 불일치가 발생하지 않도록 ReplicatedMergeTree 테이블 종료 시 데이터를 제거하지 않도록 했습니다. #26716 (nvartolomei).
  • SET ROLE이 간헐적으로 올바르게 동작하지 않던 문제를 이 PR에서 수정했습니다. #26707 (Vitaly Baranov).
  • 병렬 포맷팅(parallel formatting)에 대한 몇 가지 수정입니다(https://github.com/ClickHouse/ClickHouse/issues/26694). #26703 (Raúl Marín).
  • 윈도우 함수에서 발생할 수 있는 nullptr 역참조 문제를 수정합니다. 이를 통해 #25276 이슈가 해결됩니다. #26668 (Alexander Kuzmenkov).
  • 파일이 비어 있는 경우, 3년 전 버전의 clickhouse-client에서 사용되던 형식에서 업그레이드할 때 clickhouse-client 히스토리 파일 변환이 실패하던 문제를 수정했습니다. #26589 (Azat Khuzhin).
  • 일부 상황에서 잘못 표시되던 groupBitmapAnd/Or/Xor 함수 이름을 수정합니다. #26557 (Amos Bird).
  • clickhouse-server Docker entrypoint에서 chown 명령어 검사 로직을 업데이트합니다. 이를 통해 Kubernetes에서 클러스터 파드 재시작이 실패하거나 타임아웃되던 버그가 수정되었습니다. #26545 (Ky Li).
  • RabbitMQ 설정이 시작되지 않은 상태에서 RabbitMQ 종료 시 발생하던 크래시를 수정합니다. 관련 이슈 #26504를 해결합니다. #26529 (Kseniia Sumarokova).
  • 딕셔너리 이름이나 데이터베이스 이름이 따옴표로 둘러싸인 경우 CREATE DICTIONARY 쿼리에서 발생하던 문제를 수정했습니다. Closes #26491. #26508 (Maksim Kita).
  • 컬럼 별칭을 재작성한 후 깨졌던 컬럼 이름 해석을 수정합니다. #26432를 해결합니다. #26475 (Amos Bird).
  • 퍼즈 테스트로 발견된 일부 msan 크래시를 수정했습니다. #22517 문제를 해결합니다. #26428 (Nikolai Kochetov).
  • partial_merge_join에서 조인되지 않은 블록 스트림이 무한히 계속되는 문제를 수정했습니다. #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 프레이밍 형식에서의 import/export에 사용되는 zstd 압축 해제를 수정합니다. 이슈 #26013을(를) 해결합니다. #26314 (Kseniia Sumarokova).
  • totals를 사용하는 JOIN에서의 논리적 오류를 수정하여 #26017 이슈를 종료했습니다. #26250 (Vladimir C).
  • system.stack_trace 테이블의 thread_name 컬럼에서 불필요한 줄 바꿈을 제거했습니다. 이로써 #24124 문제가 해결되었습니다. #26210 (alexey-milovidov).
  • 둘 이상의 untuple 표현식을 사용할 때 발생할 수 있는 잠재적인 크래시를 수정했습니다. #26179 (alexey-milovidov).
  • Enum에 0 값이 정의되어 있지 않은 경우 Nullable Enum에 대해 toString에서 예외를 던지지 않도록 했습니다. #25806을(를) 해결했습니다. #26123 (Vladimir C).
  • 쿼리 실행 중 예외가 발생했을 때 ClickHouse가 보내는 MySQL 프로토콜 패킷에서 sequence_id가 잘못 설정되던 문제를 수정했습니다. 이로 인해 MySQL 클라이언트가 ClickHouse 서버와의 연결을 재설정하는 문제가 발생할 수 있었습니다. 관련 이슈 #21184를 수정했습니다. #26051 (tavplubix).
  • cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom()이 const 값에 대해 잘못된 타입을 반환하여 optimize_skip_unused_shards가 동작하지 않던 문제를 수정합니다. #26041 (Azat Khuzhin).
  • PREWHERE와 함께 일반 프로젝션(normal projection)을 사용할 때 발생할 수 있는 헤더 불일치 문제를 수정합니다. 이로써 #26020가 해결됩니다. #26038 (Amos Bird).
  • remote()에 대해 함수 없이 컬럼만 사용하는 sharding_key 처리를 수정했습니다(이전에는 select * from remote('127.1', system.one, dummy) 실행 시 Unknown column: dummy, there are only columns . 오류가 발생했습니다). #25824 (Azat Khuzhin).
  • MaterializeMySQL에서 SELECT를 수행할 때 발생하던 Not found column ...Missing column ... 오류를 수정했습니다. 관련 이슈: #23708, #24830, #25794. #25822 (tavplubix).
  • UInt64 이외의 타입에서 optimize_skip_unused_shards_rewrite_in을 수정하여 잘못된 세그먼트를 선택하거나 Cannot infer type of an empty tuple 또는 Function tuple requires at least one argument 예외가 발생할 수 있는 문제를 해결합니다. #25798 (Azat Khuzhin).

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

  • 이제 stateful 및 stateless 테스트를 무작위 시간대에서 실행합니다. #12439 문제를 수정했습니다. Protobuf 포맷에서 String을 DateTime으로 읽거나 DateTime을 String으로 쓸 때 이제 시간대를 반영합니다. Arrow 및 Parquet 포맷에서 UInt16을 DateTime으로 읽을 때는 이제 먼저 Date로 처리한 후, Arrow 및 Parquet에서 Date가 UInt16으로 직렬화되기 때문에 DateTime의 시간대를 고려하여 DateTime으로 변환합니다. GraphiteMergeTree는 이제 시간 반올림 시 시간대를 고려합니다. #5098 문제를 수정했습니다. 작성자: @alexey-milovidov. #15408 (alesapin).
  • clickhouse-testJinja2 템플릿을 사용하는 SQL 테스트를 지원합니다. #26579 (Vladimir C).
  • clang-13으로 빌드하는 기능을 추가했습니다. 이로써 #27705 이슈가 종료되었습니다. #27714 (alexey-milovidov). #27777 (Sergei Semin)
  • 특정 CPU 명령어 Set을 포함하거나 제외하여 빌드할 수 있는 CMake 옵션을 추가했습니다. #17469#27509를 위한 변경입니다. #27508 (alexey-milovidov).
  • 동적 라이브러리를 사용할 때 보조 프로그램(auxiliar programs)의 링크 문제를 수정했습니다. #26958 (Raúl Marín).
  • RocksDB를 2021-07-16 기준 master로 업데이트했습니다. #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에서 이전 버전으로 다운그레이드하려면 로그를 저장하는 시스템 테이블을 수동으로 정리해야 합니다. /var/lib/clickhouse/data/system/*_log 경로를 확인하십시오.

새로운 기능

  • SQL/JSON 표준의 일부를 지원하도록 기능을 추가했습니다. #24148 (l1tsolaiki, Kseniia Sumarokova).
  • CPU 사용량, 디스크 사용량, 메모리 사용량, IO, 네트워크, 파일, 로드 평균(load average), CPU 주파수, 온도 센서, EDAC 카운터, 시스템 가동 시간에 대한 공통 시스템 메트릭을 system.asynchronous_metricssystem.asynchronous_metric_log에서 수집하도록 했습니다. 또한 스케줄링 지터와 메트릭 수집에 소요된 시간에 대한 메트릭도 추가했습니다. 이는 ClickHouse에서 atop과 유사하게 동작하며, 추가 도구를 설치하지 않았더라도 모니터링 데이터에 접근할 수 있도록 합니다. #9430을(를) 해결했습니다. #24416 (alexey-milovidov, Yegor Levankov).
  • MaterializedPostgreSQL 테이블 엔진과 데이터베이스 엔진을 추가했습니다. 이 데이터베이스 엔진은 전체 데이터베이스 또는 데이터베이스 테이블의 임의의 부분 집합을 복제할 수 있습니다. #20470 (Kseniia Sumarokova).
  • 새로운 함수 leftPad(), rightPad(), leftPadUTF8(), rightPadUTF8()를 추가했습니다. #26075 (Vitaly Baranov).
  • 인덱스 목록의 시작 위치에 인덱스를 추가할 수 있도록 ADD INDEX 명령에 FIRST 키워드를 추가했습니다. #25904 (xjewer).
  • 기존 데이터 스키핑 인덱스에 대한 정보를 포함하는 system.data_skipping_indices 테이블을 도입했습니다. #7659을(를) 해결했습니다. #25693 (Dmitry Novik).
  • bin/unbin 함수를 추가했습니다. #25609 (zhaoyu).
  • mapAddmapSubtract 함수에서 MapUInt128, 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 FUNCTION을 구현했습니다. #26094 (zhaoyu).
  • emptynotEmpty FUNCTION에서 UUID 유형의 인수를 지원합니다. UUID가 모두 0인 경우(nil UUID) 비어 있는 것으로 간주됩니다. #3446를 해결합니다. #25974 (zhaoyu).
  • MySQL 프로토콜에서 SET SQL_SELECT_LIMIT 지원을 추가했습니다. #17115 이슈를 해결했습니다. #25972 (Kseniia Sumarokova).
  • 네트워크 상호 작용을 위한 계측을 확장했습니다: recv/send 바이트에 대한 카운터와 recvs/sends에 대한 게이지를 추가했습니다. 누락된 문서를 보완했습니다. #5897 이슈를 종료했습니다. #25962 (alexey-milovidov).
  • optimize_move_to_prewhere_if_final 설정을 추가합니다. 쿼리에 FINAL이 사용된 경우, 최적화 기능인 move_to_prewhereoptimize_move_to_prewhereoptimize_move_to_prewhere_if_final이 모두 활성화된 경우에만 활성화됩니다. 이슈 #8684를 해결합니다. #25940 (Kseniia Sumarokova).
  • 조인된 테이블에서 따옴표로 둘러싸인 복잡한 식별자를 허용합니다. #17861를 종료합니다. #25924 (alexey-milovidov).
  • Nested 데이터 타입에서 Unicode(예: 중국어, 키릴 문자) 구성 요소를 지원하도록 했습니다. #25594 이슈를 해결했습니다. #25923 (alexey-milovidov).
  • quantiles* 함수들이 aggregate_functions_null_for_empty와 함께 작동하도록 허용합니다. #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 형식의 history 파일을 replxx 형식으로 변환합니다. #25888 (Azat Khuzhin).
  • DROP PART 실행 후 또는 빈 파트의 백그라운드 삭제 후 파트가 교차하는 상황이 발생할 수 있는 문제를 수정합니다. #25884 (alesapin).
  • ReplicatedMergeTree 테이블에서 손실된 파트에 대한 처리 방식이 개선되었습니다. ReplicationQueue에서 드물게 발생하던 불일치 문제를 수정했습니다. 관련 이슈 #10368을(를) 해결했습니다. #25820 (alesapin).
  • 읽기 권한이 없는 작업 디렉터리에서도 clickhouse-client를 시작할 수 있도록 허용합니다. #25817 (ianton-ru).
  • Merge 스토리지에서 발생하던 「No available columns」 오류를 수정했습니다. #25801 (Azat Khuzhin).
  • MySQL Engine에서 이제 MySQL과 ClickHouse 간 컬럼 주석 교환을 지원합니다. #25795 (Storozhuk Kostiantyn).
  • 빈 집합에 대한 GROUP BY 상수의 일관되지 않은 동작을 수정합니다. Closes #6842. #25786 (Kseniia Sumarokova).
  • ReplicatedMergeTree에서 DROP PARTITIONTRUNCATE 실행 시 해당 파티션에서 실행 중인 머지 작업을 취소합니다. #17151을(를) 해결합니다. #25684 (tavplubix).
  • MaterializeMySQL에서 ENUM 데이터 형식을 지원합니다. #25676 (Storozhuk Kostiantyn).
  • JOIN에서 구체화된 컬럼(materialized column)과 별칭 컬럼(aliased column)을 지원하고, #13274 이슈를 해결했습니다. #25634 (Vladimir C).
  • ALTER TABLE ... DETACH와 백그라운드 병합 간에 가능한 논리적 경쟁 상태를 수정합니다. #25605 (Azat Khuzhin).
  • NetworkReceiveElapsedMicroseconds 메트릭에 클라이언트의 INSERT 요청에서 데이터를 기다리는 데 소요된 시간이 올바르게 포함되도록 수정했습니다. #9958을(를) 종료했습니다. #25602 (alexey-milovidov).
  • S3 및 HDFS에서 TRUNCATE TABLE을 지원하도록 했습니다. #25530 이슈를 해결했습니다. #25550 (Kseniia Sumarokova).
  • 백그라운드 작업(merge, 뮤테이션, fetch) 실행을 위한 풀의 스레드 수를 변경할 수 있도록 설정을 동적으로 다시 로드하는 기능을 지원합니다. #25548 (Nikita Mikhaylov).
  • JSONExtract를 사용해 문자열이 아닌 요소도 문자열로 추출할 수 있도록 했습니다. 이는 #25414을 위한 변경입니다. #25452 (Amos Bird).
  • StorageMergeDatabase 인수에서 정규 표현식을 지원하도록 했습니다. #776을(를) 해결했습니다. #25064 (flynn).
  • Web 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 종료 시 무한(non-joined) 블록 스트림이 생성되던 버그를 수정했습니다 #26325. #26374 (Vladimir C).
  • 삭제된 USER로 로그인할 때 발생할 수 있던 크래시를 수정했습니다. #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).
  • Date에서 DateTime(또는 DateTime64)으로의 CASTDateTime 타입의 시간대를 사용하지 않았습니다. 이는 DateDateTime 간의 비교에도 영향을 줄 수 있습니다. DateDateTime의 공통 타입을 추론할 때에도 각각에 대응하는 시간대를 사용하지 않았습니다. 이로 인해 함수 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 클라이언트에서 abort로 인해 드물게 발생하던 서버 비정상 종료 문제를 수정합니다. #25813을(를) 해결합니다. #26079 (alesapin).
  • 일부 경우 right subquery join에서 스레드 수를 잘못 추정하던 문제를 수정합니다. #24075를 종료합니다. #26052 (Vladimir C).
  • 쿼리 실행 중 예외가 발생했을 때 ClickHouse가 전송하는 MySQL 프로토콜 패킷의 잘못된 sequence_id를 수정했습니다. 이로 인해 MySQL 클라이언트가 ClickHouse 서버와의 연결을 재설정하도록 만들 수 있었습니다. #21184를 해결했습니다. #26051 (tavplubix).
  • PREWHERE와 일반 프로젝션을 함께 사용할 때 발생할 수 있는 헤더 불일치 문제를 수정했습니다. #26020을(를) 해결했습니다. #26038 (Amos Bird).
  • 정수 키를 사용하는 Map 타입을 JSON으로 변환할 때의 포맷을 수정했습니다. #25982 (Anton Popov).
  • 쿼리 프로파일러의 스택 언와인딩 중 발생할 수 있는 잠재적인 교착 상태를 수정합니다. #25968 수정. #25970 (Maksim Kita).
  • 잘못된 인수로 dictGet()를 호출할 때 발생하던 충돌을 수정했습니다. #25913 (Vitaly Baranov).
  • PostgreSQL 엔진의 scram-sha-256 인증을 수정했습니다. #24516 이슈를 종료합니다. #25906 (Kseniia Sumarokova).
  • 백그라운드 풀(background pool)이 가득 찼을 때 백그라운드 작업에 지나치게 긴 backoff 시간이 적용되던 문제를 수정합니다. #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에서 SELECT할 때 발생하던 Not found column ...Missing column ... 오류를 수정했습니다. #23708, #24830, #25794 이슈를 해결했습니다. #25822 (tavplubix).
  • UInt64가 아닌 타입에서 optimize_skip_unused_shards_rewrite_in을 수정하여 잘못된 세그먼트가 선택되거나 Cannot infer type of an empty tuple 또는 Function tuple requires at least one argument 예외가 발생할 수 있는 문제를 해결합니다. #25798 (Azat Khuzhin).
  • ReplicatedMergeTree 테이블에서 DROP PART 쿼리 실행 시 드물게 Unexpected merged part intersecting drop range 오류 메시지가 발생할 수 있던 버그를 수정했습니다. #25783 (alesapin).
  • GROUP BY 표현식을 사용하는 TTL에서, 파트에서 한 번 실행된 이후에는 다시 TTL이 실행되지 않던 버그를 수정합니다. #25743 (alesapin).
  • 별칭이 있는 테이블에도 StorageMerge가 접근할 수 있도록 허용했습니다. #6051 이슈를 해결했습니다. #25694 (Kseniia Sumarokova).
  • 일부 경우에 느리게 동작하던 dict join을 수정하여 #24209 이슈를 종료했습니다. #25618 (Vladimir C).
  • TTL 표현식에 포함된 컬럼에 대한 ALTER MODIFY COLUMN 동작을 수정했습니다. #25554 (Anton Popov).
  • UInt8가 아닌 타입에서 PREWHERE 사용 시 발생하는 assertion 문제를 수정하고, #19589 이슈를 종료했습니다. #25484 (Vladimir C).
  • 퍼저(fuzzer)로 발견된 msan 크래시 일부를 수정합니다. #22517을(를) 수정합니다. #26428 (Nikolai Kochetov).
  • clickhouse-server Docker entrypoint에서 chown 명령어 체크를 업데이트했습니다. 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).

New Feature

  • XML의 대안으로 YAML 형식의 구성을 지원합니다. #3607을(를) 해결합니다. #21858 (BoloniniD).
  • 데이터는 존재하지만 ZooKeeper 메타데이터가 손실된 경우에도 복제된 테이블(Replicated Table)을 복원할 수 있는 방법을 제공합니다. #13458을(를) 해결합니다. #13652 (Mike Kot).
  • Arrow/Parquet/ORC에서 struct와 맵(map), 그리고 Arrow 입력/출력 형식의 딕셔너리(Dictionary)를 지원합니다. 새로운 설정 output_format_arrow_low_cardinality_as_dictionary를 도입합니다. #24341 (Kruglov Pavel).
  • 딕셔너리(Dictionary)에서 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에 분산 쿼리(있는 경우)의 시작 시간을 기록하는 두 개의 새로운 컬럼 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%를 넘지 않는 매우 단순하고 빠른 분위수(quantile) 추정기입니다. #16641을(를) 해결합니다. #23204 (Ivan Novitskiy).
  • 흐름 분석(flow analysis)에 유용한 sequenceNextNode() 함수를 구현했습니다. #19766 (achimbab).

실험적 기능

  • HDFS에 대한 가상 파일 시스템 지원을 추가했습니다. #11058 (overshov) (Kseniia Sumarokova).
  • 이제 clickhouse-keeper(ZooKeeper의 실험적 대체 구현)가 ZooKeeper와 유사한 digest ACL을 지원합니다. #24448 (alesapin).

성능 향상

  • 일부 함수들을 서브컬럼(subcolumn) 읽기로 변환하여 읽는 데이터 양을 줄이는 최적화를 추가했습니다. 예를 들어, 조건식 col IS NULL은 서브컬럼 col.null을 읽도록 변환됩니다. 이 최적화는 현재 기본값으로 비활성화되어 있으며, optimize_functions_to_subcolumns 설정으로 활성화할 수 있습니다. #24406 (Anton Popov).
  • 가능한 경우 더 많은 컬럼을 별칭(alias) 표현식으로 다시 작성하도록 했습니다. 이를 통해 프로젝션(projections)과 같은 더 나은 최적화가 가능해질 수 있습니다. #24405 (Amos Bird).
  • bloom_filter 타입 인덱스를 상수 배열이 있는 hasAny 함수 표현식에 사용할 수 있습니다. 다음 이슈를 해결합니다: #24291. #24900 (Vasily Nemkov).
  • RabbitMQ 큐가 비어 있는 경우 읽기 시도를 다시 예약하기 위해 지수 백오프(exponential backoff)를 추가했습니다. (ClickHouse는 RabbitMQ에서 데이터를 가져오는 기능을 지원합니다.) #24340 이슈를 종료합니다. #24415 (Kseniia Sumarokova).

개선 사항

  • 복제를 위한 대역폭을 제한할 수 있도록 했습니다. 두 개의 Replicated*MergeTree SETTING인 max_replicated_fetches_network_bandwidthmax_replicated_sends_network_bandwidth를 추가하여, 테이블 단위로 복제 fetch/send의 최대 속도를 제한할 수 있습니다. 서버 전체에 적용되는 SETTING 두 개(default USER 프로필에 있음)인 max_replicated_fetches_network_bandwidth_for_servermax_replicated_sends_network_bandwidth_for_server를 추가하여 모든 테이블에 대한 복제의 최대 속도를 제한합니다. 이 SETTING들은 엄밀하게 강제되지는 않습니다. 기본적으로 비활성화되어 있습니다. #1821를 수정합니다. #24573 (alesapin).
  • ODBC 및 Library bridge에 대한 리소스 제약과 격리를 추가했습니다. bridge 프로세스에는 별도의 clickhouse-bridge 그룹과 USER를 사용합니다. bridge가 OOM killer의 첫 번째 대상이 되도록 oom_score_adj를 설정합니다. 최대 RSS를 1 GiB로 설정합니다. #23861을(를) 해결합니다. #25280 (Kseniia Sumarokova).
  • 기본 clickhouse 바이너리에 독립 실행형 clickhouse-keeper 심볼릭 링크를 추가했습니다. 이제 메인 ClickHouse 서버 없이도 조정 기능을 실행할 수 있습니다. #24059 (alesapin).
  • VIEW에 대한 쿼리에 전역 설정을 사용하도록 했습니다. VIEW에 대한 쿼리가 로컬 설정을 사용하여 CREATE VIEWSELECT의 설정이 서로 다를 때 오류가 발생하던 동작을 수정했습니다. 이제 VIEW는 이러한 변경된 로컬 설정을 사용하지 않지만, 여전히 CREATE VIEW 쿼리의 SETTINGS 절에서 추가 설정을 전달할 수 있습니다. #20551 이슈를 닫습니다. #24095 (Vladimir).
  • 서버가 시작될 때, 잘못된 파티션 ID를 가진 파트는 영구적으로 제거되지 않고 항상 분리(detach)만 되었습니다. #25070. #25166 (Nikolai Kochetov).
  • 백그라운드 스케줄 풀 크기(background_schedule_pool_size SETTING)를 128로 늘렸습니다. 이를 통해 느린 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).
  • Distributed 엔진의 기동 시간을 개선합니다. #25663 (Azat Khuzhin).
  • 분산 테이블에 대한 개선입니다. internal_replication=true인 경우 dirname에서 레플리카를 제거했습니다(이에 따라 이제 레플리카 수와 관계없이 클러스터를 사용하는 Distributed 테이블로 INSERT가 가능하며, 이전에는 레플리카를 최대 15개까지만 지원했고, 그 이상에서는 비동기 블록용 디렉터리를 생성할 때 ENAMETOOLONG 오류로 실패했습니다). #25513 (Azat Khuzhin).
  • LowCardinalityInterval 타입 지원을 추가했습니다. 이는 일부 표현식의 중간 결과 값을 처리하는 데 필요합니다. 이를 통해 #21730 이슈가 해결되었습니다. #25410 (Vladimir).
  • sequenceMatchsequenceCount FUNCTION의 시간 조건에 대해 == 연산자를 사용할 수 있도록 했습니다. 예를 들어: sequenceMatch('(?1)(?t==1)(?2)')(time, data = 1, data = 2). #25299 (Christophe Kalenzaga).
  • http_max_fields, http_max_field_name_size, http_max_field_value_size 설정을 추가했습니다. #25296 (Ivan).
  • if 함수의 분기에서 DecimalInt 타입을 사용할 수 있도록 지원을 추가합니다. 이는 #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인 경우, (sharding key) IN (one-element-tuple)과 같은 조건으로 세그먼트를 건너뛸 수 있도록 지원합니다. (여러 요소를 가진 튜플은 이미 지원되었으나, 단일 요소 튜플은 리터럴로 파싱되기 때문에 동작하지 않았습니다). #24930 (Amos Bird).
  • S3 오류 관련 로그 메시지가 개선되어, 키와 버킷이 비어 있는 경우에도 이제 이중 공백이 더 이상 나타나지 않습니다. #24897 (Vladimir Chebotarev).
  • 일부 쿼리는 여러 차례의 시맨틱 분석이 필요합니다. 이 경우 IN에 대해 이미 생성된 Set을 재사용해 보십시오. #24874 (Amos Bird).
  • insert_distributed_sync에서 max_distributed_connections 설정을 준수하도록 했습니다(그렇지 않으면 대규모 클러스터에서 동기 insert 작업 시 max_thread_pool_size를 초과할 수 있습니다). #24754 (Azat Khuzhin).
  • 스칼라 서브쿼리에서 Limit for rows or bytes to read exceeded와 같은 오류가 숨겨지지 않도록 했습니다. #24545 (nvartolomei).
  • String-to-Int 파서를 더 엄격하게 하여 toInt64('+')가 예외를 던지도록 했습니다. #24475 (Amos Bird).
  • SSD_CACHE를 DDL 쿼리로 CREATE하는 경우, user_files 디렉터리 하위에만 생성할 수 있습니다. #24466 (Maksim Kita).
  • PostgreSQL에서 INSERT 쿼리에 기본 스키마가 아닌 스키마를 지정할 수 있도록 지원합니다. #24149를 해결합니다. #24413 (Kseniia Sumarokova).
  • IPv6 주소가 해석되지 않던 문제를 수정했습니다(예: select * from remote('[::1]', system.one) 쿼리). #24319 (Azat Khuzhin).
  • 여러 줄 모드에서 FROM 절에 서브쿼리를 사용할 때 끝에 붙은 공백 문자를 수정하고, 쿼리 출력도 사람이 읽기에 더 편한 방식으로 약간 변경합니다. #24151 (Azat Khuzhin).
  • 분산 테이블 개선. 장애(예: 메모리 한계, 데이터 손상) 발생 시 분산 배치를 분할할 수 있는 기능을 distributed_directory_monitor_split_batch_on_failure 설정(기본값 OFF)으로 추가했습니다. #23864 (Azat Khuzhin).
  • Join 테이블 엔진에서 컬럼 이름 충돌을 처리합니다. 관련 이슈 #20309를 해결합니다. #23769 (Vladimir).
  • 표준 입력(stdin)으로 데이터를 전달할 때 clickhouse-localFile 테이블 엔진과 clickhouse-client의 INSERT 쿼리에 대해 진행률을 표시합니다. #18209를 해결합니다. #23656 (Kseniia Sumarokova).
  • clickhouse-copier의 버그를 수정하고 기능을 개선했습니다. 서로 다른(하지만 호환 가능한 스키마를 가진) 테이블도 복사할 수 있습니다. #9159 해결. ReplacingMergeTree 복사를 위한 테스트를 추가했습니다. #22711 해결. 컬럼 및 Data Skipping 인덱스에 대한 TTL을 지원합니다. 내부 Distributed 테이블(분산 테이블)을 생성할 때는 이를 단순히 제거하고, 기본 테이블은 TTL과 스키핑 인덱스를 유지합니다. #19384 해결. MATERIALIZED 및 ALIAS 컬럼 복사를 허용합니다. 이 컬럼이 PRIMARY KEY에 포함된 경우처럼 도움이 될 수 있는 몇 가지 사례가 있습니다. 이제 태스크 설정에서 allow_to_copy_alias_and_materialized_columns 속성을 true로 설정하여 허용할 수 있습니다. #9177 해결. #11007 해결. #9514 해결. 헬퍼 테이블을 이동하기 전에 원본 테이블에서 파티션을 드롭할 수 있도록, 태스크 설정에 allow_to_drop_target_partitions 속성을 추가했습니다. #20957 해결. OPTIMIZE DEDUPLICATE 쿼리를 제거했습니다. ALTER TABLE MOVE PARTITION이 여러 번 재시도되고, 일반 MergeTree 테이블에는 중복 제거 기능이 없기 때문에 필요한 우회 방법이었습니다. #17966 해결. JSON 형식으로 task_path + /status 경로의 ZooKeeper 노드에 진행 상황을 기록합니다. #20955 해결. 인수를 사용하지 않는 ReplicatedTables를 지원합니다. #24834 해결. #23518 (Nikita Mikhaylov).
  • S3에서 읽기를 재시도할 때 재시도 간 대기 시간에 backoff를 적용했습니다. #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가 올바르게 동작하지 않아 PostgreSQL 배열이 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).
  • 분산 테이블에서 서브컬럼(예: Tuple의 구성 요소)을 읽을 수 있도록 합니다. #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 연결이 끊겼다가 복원된 이후에 레플리카를 클론한 경우, 해당 레플리카의 복제 큐에 오래된 항목이 포함될 수 있었습니다. 복제 큐에 서로 겹치는 virtual 파트가 포함된 경우 발생하던 assertion 실패를 수정했습니다. 이는 일부 데이터 파트가 손실된 경우 드물게 발생할 수 있습니다. 프로세스를 종료하지 않고 로그에 오류를 출력하도록 변경했습니다. #24777 (tavplubix).
  • 쿼리 플랜의 expression-push-down 최적화 시 누락되던 WHERE 조건을 수정합니다(기본값을 query_plan_filter_push_down = 1로 설정). #25368 문제를 수정합니다. #25370 (Nikolai Kochetov).
  • TTL이 설정된 머지 후 파트가 서로 겹치는 상황이 발생할 수 있는 버그를 수정합니다: Part all_40_40_0 is covered by all_40_40_1 but should be merged into all_40_41_1. This shouldn't happen often.. #25549 (alesapin).
  • ZooKeeper 연결이 끊어졌을 때 ReplicatedMergeTree 테이블이 재연결을 시도하기 전에 백그라운드 작업이 완료될 때까지 대기하는 문제가 있었습니다. 이 문제가 수정되어 이제는 백그라운드 작업이 강제로 중지됩니다. #25306 (tavplubix).
  • 배열이 기본 키에 사용된 경우 ARRAY JOIN이 포함된 쿼리에서 발생하던 Key expression contains comparison between inconvertible types 오류를 수정합니다. 이 변경으로 #8247 이슈가 해결됩니다. #25546 (Anton Popov).
  • WITH TOTALSWITH FILL 쿼리에서 잘못 계산되던 합계를 수정합니다. #20872를 수정합니다. #25539 (Anton Popov).
  • 클러스터 구성을 다시 로드하는 동시에 system.clusters를 쿼리할 때 발생하던 데이터 레이스를 수정했습니다. #25737 (Amos Bird).
  • 데이터베이스 간에 Distributed 테이블을 이동할 때 발생하던 No such file or directory 오류를 수정했습니다. 이 문제로 보고된 #24971 이슈를 해결했습니다. #25667 (tavplubix).
  • 소스 파티션이 비어 있는 드물게 REPLACE PARTITION이 무시될 수 있었습니다. 이 문제가 수정되었습니다. #24869를 해결합니다. #25665 (tavplubix).
  • Replicated 데이터베이스 엔진에서 드물게 일부 레플리카가 대기 중인 DDL 쿼리를 건너뛰는 버그를 수정했습니다. #24805 (tavplubix).
  • 쿼리 없이 실행한 EXPLAIN AST에서 발생하던 null 포인터 역참조를 수정했습니다. #25631 (Nikolai Kochetov).
  • 빈 파트 자동 삭제를 기다리는 로직을 수정했습니다. 이로 인해 백그라운드 풀 전체가 가득 차고 복제가 멈출 수 있었습니다. #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 FUNCTION 및 유사 FUNCTION에서 비결정적 동작이 발생할 수 있는 문제를 수정합니다. 이로써 #20480이(가) 해결됩니다. #25313 (alexey-milovidov).
  • SummingMergeTree에서 SimpleAggregateFunction(LowCardinality)를 지원합니다. #25134를 수정했습니다. #25300 (Nikolai Kochetov).
  • 예외 메시지 "Cannot sum Array/Tuple in min/maxMap"에 대한 논리 오류를 수정합니다. #25298 (Kruglov Pavel).
  • LowCardinality 인자가 IN 연산자에서 사용된 쿼리에서 발생하던 Bad cast from type DB::ColumnLowCardinality to DB::ColumnVector<char8_t> 오류를 수정했습니다(이 버그는 21.6에서 도입되었습니다). #25187를 수정했습니다. #25290 (Nikolai Kochetov).
  • 널을 허용하지 않는 컬럼에서 joinGetOrNull 의 잘못된 동작을 수정합니다. 이 수정으로 #24261가 해결됩니다. #25288 (Amos Bird).
  • 대형 정수형에서의 잘못된 동작과 UBSan 리포트를 수정합니다. 이전 버전에서는 CAST(1e19 AS UInt128)가 0을 반환했습니다. #25279 (alexey-milovidov).
  • CSVWithNames 포맷을 사용해 컬럼의 일부만 삽입할 때 발생하던 오류를 수정했습니다. #25129를 해결합니다. #25169 (Nikita Mikhaylov).
  • FINAL이 있는 SELECT에서는 테이블의 projection을 사용하지 마십시오. 아직 지원되지 않습니다. #25163 (Amos Bird).
  • 테이블이 파티션 키에 UUID를 사용한 경우 21.5 버전으로 업데이트한 이후 발생할 수 있는 파트 손실 가능성을 수정합니다. (UUID를 파티션 키로 사용하는 것은 권장되지 않습니다.) #25070을(를) 수정합니다. #25127 (Nikolai Kochetov).
  • cross join과 joined_subquery_requires_alias = 0가 포함된 쿼리에서 발생하는 크래시를 수정했습니다. 이슈 #24011를 수정합니다. #25082 (Nikolai Kochetov).
  • mapContains 함수에서 상수 맵을 사용할 때 empty column was returned by function mapContains 오류가 발생하던 버그를 수정합니다. #25077를 종료합니다. #25080 (Kruglov Pavel).
  • a UInt32 ALIAS a + 1 또는 b UInt32 MATERIALIZED b처럼 자기 자신을 참조하는 컬럼을 가진 테이블을 CREATE하지 못하도록 했습니다. #24910, #24292를 수정합니다. #25059 (alesapin).
  • 비어 있지 않은 GROUP BY 키를 사용하는 aggregate projection으로 키가 없는 GROUP BY 쿼리를 실행할 때 잘못된 결과가 반환되던 문제를 수정합니다. #25055 (Amos Bird).
  • Protobuf 형식에서 분리된 중첩 메시지의 직렬화를 수정합니다. 이 PR은 #24647 이슈를 해결합니다. #25000 (Vitaly Baranov).
  • 분산 쿼리의 limit/offset 설정을 수정하여 원격 노드에서는 이를 무시하도록 했습니다. #24940 (Azat Khuzhin).
  • Arrow 포맷에서 발생할 수 있는 heap-buffer-overflow 문제를 수정합니다. #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 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).
  • LDAP로 사용자 인증을 관리하는 경우, LDAP 그룹이 존재하지 않는 로컬 역할에 매핑되었을 때 LDAP 역할을 (재)매핑하는 과정에서 발생할 수 있는 잠재적인 교착 상태를 수정했습니다. #24431 (Denis Glazachev).
  • "multipart/form-data" 메시지에서 경계(boundary) 앞에 오는 CRLF를 경계의 일부로 간주하도록 했습니다. #23905를 수정했습니다. #24399 (Ivan).
  • 교차하는 가짜 파트가 있을 때 DROP PARTITION 동작을 수정합니다. 드문 경우이지만, 현재 블록 번호보다 mutation 버전이 더 큰 파트가 존재할 수 있습니다. #24321 (Amos Bird).
  • RENAME TABLE 쿼리를 사용하여 materialized view를 Ordinary 데이터베이스에서 Atomic 데이터베이스로 이동할 때 발생하던 버그를 수정했습니다. 이제 materialized view의 내부 테이블도 함께 새 데이터베이스로 이동됩니다. #23926 이슈를 해결합니다. #24309 (tavplubix).
  • 빈 HTTP 헤더를 허용합니다. #23901 이슈를 해결합니다. #24285 (Ivan).
  • Memory 테이블에서 뮤테이션(ALTER UPDATE/DELETE)이 올바르게 처리되도록 수정했습니다. #24274 이슈를 해결했습니다. #24275 (flynn).
  • JOIN 출력에서 컬럼의 LowCardinality 속성이 입력과 동일하도록 변경했습니다. #23351, #20315 이슈를 종료했습니다. #24061 (Vladimir).
  • Kafka 테이블에 대한 수정입니다. Engine = Kafka인 경우 동일한 consumer가 이전에 비어 있는 assignment를 가졌던 경우에는 소비를 시작할 수 없었던 장애 조치(failover) 동작의 버그를 수정했습니다. #21118 이슈를 해결했습니다. #21267 (filimonov).

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

  • CI에 darwin-aarch64(Mac M1 / Apple Silicon) 빌드를 추가했습니다. #25560 (Ivan) 또한 관련 문서와 웹사이트에 링크를 추가했습니다. (alexey-milovidov).
  • 실행 파일에 바이너리 리소스를 크로스 플랫폼으로 임베딩하는 기능을 추가했습니다. Illumos에서 동작합니다. #25146 (bnaecker).
  • 퍼징을 개선하기 위해 조인 관련 옵션을 스트레스 테스트에 추가했습니다. #25200 (Vladimir).
  • osx에서 S3 모듈을 사용한 빌드를 활성화했습니다. #25217. #25218 (kevin wan).
  • JDBC bridge를 검증하기 위한 통합 테스트 케이스를 추가했습니다. #25047 (Zhichun Wu).
  • 통합 테스트 설정에서 dictionary를 별도로 처리하도록 했으며, 남아 있던 dictionary 수동 설정을 제거했습니다. #24728 (Ilya Yatsishin).
  • YAMLParser 클래스에 대한 libfuzzer 테스트를 추가했습니다. #24480 (BoloniniD).
  • 이제 통합 테스트 실행에 Ubuntu 20.04를 사용하며, 통합 테스트 실행에 사용되는 docker-compose 버전을 1.28.2로 업데이트했습니다. 환경 변수가 이제 docker-compose에 반영됩니다. 병렬 실행을 허용하도록 test_dictionaries_all_layouts_separate_sources를 다시 구성했습니다. #20393 (Ilya Yatsishin).
  • 설치 스크립트의 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와 유사한 형 변환 연산자(::)가 추가되었습니다. 예: [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 FUNCTION을 추가했습니다. #24077 (abel-cheng).
  • 배열을 인수로 받아 배열의 모든 요소를 곱한 값을 반환하는 함수 arrayProduct를 추가했습니다. #21613 이슈를 해결합니다. #23782 (Maksim Kita).
  • system.stack_tracethread_name 컬럼을 추가합니다. 이로써 #23256 이슈를 해결합니다. #24124 (abel-cheng).
  • insert_null_as_default = 1인 경우 INSERT ... SELECTINSERT ... SELECT ... UNION ALL ... 쿼리에서 NULL 대신 기본값을 삽입합니다. #22832를 해결합니다. #23524 (Kseniia Sumarokova).
  • clickhouse-local에서 진행 상황 표시를 위해 --progress 옵션 지원을 추가했습니다. #23196 (Egor Savin).
  • http 딕셔너리 소스에서 Content-Encoding HTTP 헤더를 기준으로 하는 HTTP 압축 지원을 추가했습니다. 이로써 #8912가 수정되었습니다. #23946 (FArthur-cmd).
  • SYSTEM QUERY RELOAD MODEL, SYSTEM QUERY RELOAD MODELS를 추가했습니다. #18722 이슈를 해결했습니다. #23182 (Maksim Kita).
  • EXPLAIN PLAN 쿼리에 대해 json 설정(불리언(boolean), 기본값 0)을 추가합니다. 이 설정을 활성화하면 쿼리 출력은 단일 JSON 행이 됩니다. 불필요한 이스케이프를 피하기 위해 TSVRaw 형식을 사용하는 것이 좋습니다. #23082 (Nikolai Kochetov).
  • EXPLAIN PIPELINE 쿼리에 indexes 설정(boolean, 기본값은 비활성화)을 추가합니다. 이 설정을 활성화하면 사용된 인덱스와 각 인덱스에 대해 필터링된 파트 수 및 그래뉼 수를 표시합니다. MergeTree* 테이블에서 지원됩니다. #22352 (Nikolai Kochetov).
  • LDAP: Active Directory 그룹을 ClickHouse 역할에 매핑할 때 사용할 수 있는 사용자 DN 감지 기능을 구현했습니다. #22228 (Denis Glazachev).
  • 연속된 행 사이의 차이를 합산하면서 타임스탬프를 저장하여 머지 시 순서를 유지하는 새로운 집계 함수 deltaSumTimestamp. #21888 (Russ Frank).
  • Docker 환경에서도 정상적으로 동작하는, 보안 수준이 다소 낮은 S3용 IMDS 자격 증명 공급자를 추가했습니다. #21852 (Vladimir Chebotarev).
  • indexHint 함수를 다시 추가합니다. 이는 #21238 이슈를 위한 것입니다. #9542를 되돌립니다. #9540를 수정합니다. #21304 (Amos Bird).

실험적 기능

  • MergeTree* 테이블에 PROJECTION 지원을 추가했습니다. #20202 (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를 하나의 집계 함수로 결합(fusion)합니다. 이 최적화는 optimize_fuse_sum_count_avg 설정으로 제어됩니다. 이 기능은 새로운 집계 함수 sumCount로 구현되었습니다. 이 함수는 두 필드 sumcount를 가지는 튜플을 반환합니다. #21337 (hexiaoting).
  • zstd를 v1.5.0으로 업데이트합니다. 압축 성능이 한 자릿수 퍼센트 수준으로 개선되었습니다. #24135 (Raúl Marín). 참고: 복제(replication) 중에 "checksum does not match"라는 메시지가 표시될 수 있습니다. 이러한 메시지는 압축 알고리즘 업데이트로 인해 예상되는 것이며 무시해도 됩니다.
  • Buffer 테이블의 성능을 개선했습니다. Buffer 엔진에 대해 total_bytes/total_rows에 대한 잠금(lock)을 획득하지 않습니다. #24066 (Azat Khuzhin).
  • hashed/sparse_hashed 딕셔너리에 대한 사전 할당(preallocate) 지원이 다시 추가되었습니다. #23979 (Azat Khuzhin).
  • 기본값으로 async_socket_for_remote를 활성화합니다(팬아웃이 큰 분산 테이블(Distributed table)에 대해 쿼리할 때 스레드 수를 줄입니다). #23683 (Nikolai Kochetov).

개선 사항

  • MergeTree 테이블 계열에 _partition_value 가상 컬럼을 추가합니다. 이는 파티션을 결정론적으로 프루닝(pruning)하는 데 사용할 수 있습니다. 뮤테이션을 위한 파티션 매처(matcher)를 구현하는 데 필요합니다. #23673 (Amos Bird).
  • 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)에 대한 특별 처리를 추가했습니다. 또한 알고리즘의 이전 버전 구현에서 센트로이드가 과도하게 압축되던 버그를 수정했습니다. #23314 (Vladimir Chebotarev).
  • 함수 now64는 이제 선택적 타임존(timezone) 인자를 지원합니다. #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).
  • 하나의 데이터베이스 내에서 테이블을 셧다운하기 전에 Buffer 테이블을 플러시하여, 기반 테이블이 이미 DETACH되어 블록이 버려지는 것(로그에 Destination table default.a_data_01870 doesn't exist. Block of data is discarded 오류가 기록됨)을 방지합니다. #24067 (Azat Khuzhin).
  • 이제 prefer_column_name_to_alias = 1 설정이 group by, having, order by에서도 컬럼 이름을 우선적으로 사용합니다. 이 변경으로 #23882가 수정되었습니다. #24022 (Amos Bird).
  • DateTime64에 대해 ORDER BY WITH FILL 지원을 추가했습니다. #24016 (kevin wan).
  • ReplacingMergeTree에서 버전 컬럼으로 DateTime64를 사용할 수 있도록 허용합니다. #23992 (kevin wan).
  • 서버 시작 시 OS 이름, 커널 버전, CPU 아키텍처 정보를 로그로 남깁니다. #23988 (Azat Khuzhin).
  • postgresql 딕셔너리 소스에서 테이블 스키마 지정을 지원합니다. #23958 이슈를 해결합니다. #23980 (Kseniia Sumarokova).
  • Enum 요소 이름에 대한 힌트를 추가하여 오타가 있을 경우 이름을 제안하도록 했습니다. #17112를 해결했습니다. #23919 (flynn).
  • 사전에 대해 값이 발견된 비율(값을 찾은 항목의 백분율)을 측정합니다(system.dictionariesfound_rate 참조). #23916 (Azat Khuzhin).
  • 테이블 설정 rabbitmq_queue_settings_list를 통해 특정 큐 설정을 추가할 수 있게 했습니다. (#23737#23918 해결). 사용자가 모든 RabbitMQ 설정을 제어할 수 있도록 했습니다. 테이블 설정 rabbitmq_queue_consume1로 설정된 경우, RabbitMQ 테이블 엔진은 지정된 큐에만 연결하고 exchange, 큐, 바인딩 선언과 같은 RabbitMQ consumer 측 설정은 수행하지 않습니다. (#21757 해결). RabbitMQ 테이블이 DROP될 때 적절한 정리 작업을 수행하도록 했습니다. 테이블이 선언한 큐와, 테이블이 생성한 경우 해당 큐에 바인딩된 모든 exchange를 삭제합니다. #23887 (Kseniia Sumarokova).
  • system.distribution_queuebroken_data_files/broken_data_compressed_bytes를 추가합니다. 분산 테이블(Distributed tables)에 대한 비동기 삽입에서 손상된 것으로 표시된 파일 개수에 대한 메트릭(BrokenDistributedFilesToInsert)을 추가합니다. #23885 (Azat Khuzhin).
  • system.tables를 쿼리해도 더 이상 ZooKeeper에 접근하지 않습니다. #23793 (Fuwang Hu).
  • OPTIMIZE 쿼리가 lock_acquire_timeout_for_background_operations 설정을 준수하도록 했습니다. #23623 (Azat Khuzhin).
  • 새로운 SYSTEM RESTART DISK SQL 명령을 통해 런타임에 S3 디스크 설정을 변경할 수 있게 되었습니다. #23429 (Pavel Kovalenko).
  • 사용자가 실수로 max_distributed_connections 값을 0으로 설정하는 잘못된 설정을 적용한 경우, Distributed 테이블에 대한 모든 쿼리는 「logical error」를 포함한 메시지와 함께 예외를 발생시킵니다. 그러나 이는 실제로는 논리적 오류가 아니라 예상된 동작이므로 예외 메시지가 다소 부정확했습니다. 이로 인해 논리적 오류가 절대 발생하지 않음을 보장하는 CI 환경의 검증도 트리거되었습니다. 대신 이제 max_distributed_connections가 0으로 잘못 설정된 경우 이를 가능한 최소 값(1)으로 처리합니다. #23348 (Azat Khuzhin).
  • 기본적으로 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 연결이 끊어지는 경우 재시도를 수행합니다. #22988 (Vladimir Chebotarev).
  • MySQL 테이블 엔진, 딕셔너리 소스 및 MaterializeMySQL의 소규모 데이터 가져오기를 위해 external_storage_max_read_rowsexternal_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에서 도입되었으며, 이후 더 지능적인 partition pruner(파티션 프루너)에 의해 드러났습니다. #24446 (Amos Bird).
  • 교차하는 가짜 파트가 있는 경우 DROP PARTITION 동작을 수정했습니다. 드물지만 현재 블록 번호보다 더 큰 변경(mutation) 버전을 가진 파트가 존재할 수 있습니다. #24321 (Amos Bird).
  • Ordinary 데이터베이스에서 Atomic 데이터베이스로 RENAME TABLE 쿼리를 사용해 materialized view를 이동하는 과정에서 발생하던 버그를 수정했습니다. 이제 내부 테이블이 materialized view와 함께 새 데이터베이스로 이동합니다. #23926를 수정합니다. #24309 (tavplubix).
  • 클라이언트 요청에서 비어 있는 HTTP 헤더를 허용하도록 했습니다. #23901를 수정했습니다. #24285 (Ivan).
  • Memory 테이블에서 발생하는 mutation 실패를 수정하기 위해 max_threads = 1로 설정합니다. #24274을(를) 종료합니다. #24275 (flynn).
  • Memory 테이블 구현에서 발생한 오타를 수정했습니다. 이 버그는 #15127에서 도입되었습니다. #24192를 해결합니다. #24193 (张中南).
  • HDFS에 쿼리 실행 중 접근할 수 없게 되어 발생하던 서버 비정상 종료를 수정합니다. #24117을(를) 해결합니다. #24191 (Kseniia Sumarokova).
  • 상수 조건이 있는 Nested 컬럼을 업데이트할 때 발생하던 크래시를 수정했습니다. #24183 (hexiaoting).
  • 고부하 환경에서 RBAC에 발생할 수 있는 경쟁 상태(race condition)를 수정했습니다. 이 PR은 #24090, #24134, #24176 이슈를 해결합니다. (Vitaly Baranov).
  • 쓰기 요청(insert/alter/기타)을 처리할 수 있는 부분적으로만 초기화된 테이블이 생성될 수 있는 드문 버그를 수정했습니다. 이제 이러한 테이블은 읽기 전용(readonly) 모드로 동작합니다. #24122 (alesapin).
  • 문제 수정: SELECT xxx FINAL이 포함된 EXPLAIN PIPELINE에서 잘못된 파이프라인이 표시되던 문제를 수정했습니다. (hexiaoting).
  • WHERE 절에서 상수 DateTime 값과 DateTime64 컬럼을 사용하는 경우의 동작을 수정했습니다. #24100 (Vasily Nemkov).
  • merge JOIN에서 발생하던 충돌을 수정합니다. #24010 이슈를 해결합니다. #24013 (vdimir).
  • 일부 ALTER PARTITION 쿼리로 인해 복제 큐에서 Part A intersects previous part BUnexpected merged part C intersecting drop range D 오류가 발생할 수 있었습니다. 이 문제가 수정되었습니다. #23296을(를) 해결했습니다. #23997 (tavplubix).
  • external GROUP BY 및 overflow 행 처리 시 발생하던 SIGSEGV를 수정합니다(예: SELECT FROM GROUP BY WITH TOTALS SETTINGS max_bytes_before_external_group_by>0, max_rows_to_group_by>0, group_by_overflow_mode='any', totals_mode='before_having' 같은 쿼리). #23962 (Azat Khuzhin).
  • 소스에 중복 항목이 있는 CACHE 딕셔너리에 대한 키 메트릭 집계를 수정했습니다(DictCacheKeysRequestedMiss 오버플로가 발생하던 문제). #23929 (Azat Khuzhin).
  • PostgreSQL 엔진의 커넥션 풀 구현을 수정합니다. #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 테이블 FUNCTION에 대한 수정: URI 처리 방식이 개선되었습니다. + 기호를 포함한 URL에서 해당 키를 가진 데이터를 읽을 수 없던 비호환성 문제를 수정했습니다. #23822 (Vladimir Chebotarev).
  • GLOBAL IN/JOINuse_hedged_requests를 사용하는 쿼리에서 발생하는 Can't initialize pipeline with empty pipe 오류를 수정했습니다. #23431을(를) 해결합니다. #23805 (Nikolai Kochetov).
  • materialized view에서 참조되는 경우 CLEAR COLUMN이 동작하지 않던 문제를 수정합니다. #23764를 종료합니다. #23781 (flynn).
  • Values 포맷을 사용할 때 HDFS에서 읽는 경우 발생하는 힙 메모리 해제 후 사용(use-after-free) 문제를 수정합니다. #23761 (Kseniia Sumarokova).
  • Distributed 테이블에 INSERT할 때 어떤 예외가 발생했을 경우 발생할 수 있는 「Cannot schedule a task」 오류를 방지합니다. #23744 (Azat Khuzhin).
  • 동기화가 뒤처진 ReplicatedMergeTree 레플리카 복구 시 발생하던 버그를 수정했습니다. 레플리카의 중단 기간 동안 ALTER 쿼리가 실행된 경우, 뒤처진 레플리카에서 일부 메타데이터 업데이트가 무시될 수 있었습니다. #23742 (tavplubix).
  • JoinWITH TOTALS 관련 버그를 수정하고 #17718 이슈를 종료했습니다. #23549 (vdimir).
  • UNION이 포함된 쿼리에서 filter-pushdown 최적화 이후 발생할 수 있는 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년 5월 20일

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

  • 정수가 부동 소수점 데이터 타입으로 정확히 표현될 수 없는 경우, 정수와 부동 소수점 수의 비교 방식을 변경합니다. 새 버전에서는 반올림 오차가 발생하므로 비교 결과가 false를 반환합니다. 예: 9223372036854775808.0 != 9223372036854775808, 이는 9223372036854775808이라는 수를 부동 소수점 수로는 정확히 표현할 수 없기 때문입니다(그리고 9223372036854775808.09223372036854776000.0으로 반올림됩니다). 하지만 이전 버전에서는 부동 소수점 수 9223372036854776000.0을 다시 UInt64로 변환하면 9223372036854775808이 되므로, 두 수가 동일하다고 판단하여 비교 결과로 true를 반환했습니다. 참고로 Python 프로그래밍 언어 역시 이 수들을 동일한 값으로 취급합니다. 그러나 이 동작은 CPU 모델에 따라 달라졌습니다(일부 범위를 벗어나는 수에 대해서 AMD64와 AArch64에서 서로 다른 결과를 반환). 따라서 비교를 더 정밀하게 만들었습니다. 이제는 정수가 부동 소수점 타입으로 정확히 표현되는 경우에만 정수와 부동 소수점 수를 동일하다고 판단합니다. #22595 (alexey-milovidov).
  • 단일 Tuple 인자를 사용하는 argMinargMax에 대한 지원을 제거합니다. 해당 코드는 메모리 안전하지 않았습니다. 이 기능은 실수로 추가되었으며, 사용자에게 혼란을 주었습니다. 이러한 함수는 나중에 다른 이름으로 다시 도입될 수 있습니다. 이 변경은 #22384를 수정하고 #17359를 되돌립니다. #23393 (alexey-milovidov).

New Feature

  • 함수 dictGetChildren(dictionary, key), dictGetDescendants(dictionary, key, level)가 추가되었습니다. 함수 dictGetChildren는 모든 자식을 인덱스들의 배열로 반환합니다. 이는 dictGetHierarchy에 대한 역변환입니다. 함수 dictGetDescendantsdictGetChildren를 재귀적으로 level회 적용했을 때와 같이 모든 하위 항목을 반환합니다. level 값이 0이면 무한대를 의미합니다. dictGetHierarchy, dictIsIn 함수의 성능이 개선되었습니다. #14656 해결. #22096 (Maksim Kita).
  • 함수 dictGetOrNull이 추가되었습니다. 이 함수는 dictGet과 동일하게 동작하지만, 딕셔너리에서 키를 찾지 못한 경우 Null을 반환합니다. #22375 해결. #22413 (Maksim Kita).
  • 테이블 함수 s3Cluster가 추가되어, 지정된 클러스터의 각 노드에서 s3의 파일을 병렬로 처리할 수 있습니다. #22012 (Nikita Mikhaylov).
  • MySQL/PostgreSQL 테이블 엔진/테이블 함수에서 레플리카와 세그먼트 지원이 추가되었습니다. 예를 들어 SELECT * FROM mysql('host{1,2}-{1|2}', ...)와 같이 작성할 수 있습니다. #20969 해결. #22217 (Kseniia Sumarokova).
  • ALTER TABLE ... FETCH PART ... 쿼리가 추가되었습니다. 이는 FETCH PARTITION과 유사하지만, 하나의 파트(part)만 가져옵니다. #22706 (turbo jason).
  • Distributed 테이블에 대한 재귀 쿼리의 깊이를 제한하는 설정 max_distributed_depth가 추가되었습니다. #20229 해결. #21942 (flynn).

성능 향상

  • AVX2에 대해 동적 디스패치를 사용하여 intDiv의 성능을 향상했습니다. #22314를 해결합니다. #23000 (alexey-milovidov).
  • 로컬 파일이 아닌 소스(예: URL)에 대해 ArrowStream 입력 포맷에서 읽기 성능을 개선했습니다. #22673 (nvartolomei).
  • 네이티브 프로토콜을 통해 localhost와 상호 작용할 때(분산 쿼리를 사용하는 clickhouse-client 또는 서버 간 통신) 기본적으로 압축을 비활성화했습니다. 일부 가져오기/내보내기 작업의 성능이 향상될 수 있습니다. #22234를 해결합니다. #22237 (alexey-milovidov).
  • 분산 쿼리에서(optimize_skip_unused_shards_rewrite_in 옵션이 활성화된 상태에서, 기본적으로 활성화되어 있으며, 여전히 optimize_skip_unused_shards가 필요함) IN 절의 오른쪽 부분에서 세그먼트에 속하지 않는 값을 제외합니다. #21511 (Azat Khuzhin).
  • File 계열 테이블 엔진과 Parquet, Arrow, ORC 같은 컬럼 지향 포맷을 사용할 때 일부 컬럼만 읽을 때의 성능을 개선했습니다. #issue:20129를 해결합니다. #21302 (keenwolf).
  • 버전 21.1 이전과 같이 더 많은 조건을 PREWHERE로 이동할 수 있도록 허용했습니다(내부 휴리스틱 조정). 이동되는 조건의 수가 충분하지 않으면 성능이 저하될 수 있습니다. #23397 (Anton Popov).
  • ODBC 연결 성능을 향상하고, 백로그에 있던 모든 미해결 이슈를 수정했습니다. Poco::ODBC 대신 nanodbc 라이브러리를 사용합니다. #9678를 해결합니다. ODBC 테이블 엔진에 DateTime64 및 Decimal* 지원을 추가했습니다. #21961를 해결합니다. 키릴 문자 텍스트가 잘리는 문제를 수정했습니다. #16246를 해결합니다. odbc bridge용 커넥션 풀을 추가했습니다. #21972 (Kseniia Sumarokova).

개선

  • 기본값으로 max_uri_size(HTTP 인터페이스에서 URL의 최대 크기)를 1 MiB로 늘렸습니다. 이 변경으로 #21197이(가) 해결됩니다. #22997 (alexey-milovidov).
  • 자주 발생하는 소규모 삽입 작업이나 ZooKeeper 클러스터가 느린 프로덕션 환경에서 더 적합하도록 background_fetches_pool_size8로 설정합니다. #22945 (alexey-milovidov).
  • FlatDictionary에 initial_array_size, max_array_size 옵션이 추가되었습니다. #22521 (Maksim Kita).
  • 레플리카가 없는 MergeTree 테이블에 대한 INSERT 작업 중복 제거를 위한 새 설정 non_replicated_deduplication_window를 추가했습니다. #22514 (alesapin).
  • 설정 재로딩 시 CatBoost 모델 설정 파일의 경로가 업데이트되도록 했습니다. #22434 (Kruglov Pavel).
  • 사전에 Decimal256 타입 지원을 추가했습니다. Decimal256은 실험적인 기능입니다. #20979를 해결합니다. #22960 (Maksim Kita).
  • 기본적으로 async_socket_for_remote를 활성화했습니다(분산 쿼리에서 사용하는 OS 스레드 수를 줄이기 위해). #23683 (Nikolai Kochetov).
  • quantile(s)TDigest를 수정했습니다. tdunning/t-digest 3.2+에 따라 단일 센트로이드(singleton centroid)에 대한 특수 처리를 추가했습니다. 또한 이전 버전 알고리즘 구현에서 센트로이드가 과도하게 압축되던 버그를 수정했습니다. #23314 (Vladimir Chebotarev).
  • MySQL과의 호환성을 위해 unhex 함수 이름을 대소문자를 구분하지 않도록 했습니다. #23229 (alexey-milovidov).
  • 배열 요소의 타입이 서로 다른 일반적인 경우에 대해 함수 arrayHasAny, arrayHasAll, has, indexOf, countEqual를 구현했습니다. 이전 버전에서는 함수 arrayHasAny, arrayHasAll가 false를 반환했으며, has, indexOf, countEqual는 예외를 발생시켰습니다. 또한 함수 has 및 유사한 함수에서 Decimal과 big integer 타입에 대한 지원을 추가했습니다. 이로써 #20272가 해결됩니다. #23044 (alexey-milovidov).
  • 함수 extractAllGroupsHorizontal 결과에서 허용되는 일치 항목의 최대 개수 상한을 높였습니다. #23036 (Vasily Nemkov).
  • 노드가 1개인 클러스터에서는 optimize_skip_unused_shards를 수행하지 않습니다. #22999 (Azat Khuzhin).
  • SSL을 사용하여 clickhouse-keeper(ZooKeeper를 대체하는 실험적인 drop-in replacement)를 실행할 수 있는 기능이 추가되었습니다. 구성 설정 keeper_server.tcp_port_secure는 클라이언트와 keeper-server 간의 보안 통신에 사용할 수 있습니다. keeper_server.raft_configuration.secure는 노드 간 내부 보안 통신을 활성화하는 데 사용할 수 있습니다. #22992 (alesapin).
  • Buffer 테이블에 대해 버퍼를 오직 백그라운드에서만 플러시할 수 있는 기능을 추가했습니다. #22986 (Azat Khuzhin).
  • WHERE 절에 NULL 조건이 있는 MergeTree 테이블을 조회할 때, 드물게 예외가 발생하는 문제가 있었습니다. 이 변경으로 #20019를 해결합니다. #22978 (alexey-milovidov).
  • AWS용 Poco HTTP Client의 오류 처리를 수정했습니다. #22973 (kreuzerkrieg).
  • ReplicatedMergeTree에서 max_part_removal_threads 설정을 따르도록 수정했습니다. #22971 (Azat Khuzhin).
  • MergeTree 설정 inactive_parts_to_throw_insert = 0과 inactive_parts_to_delay_insert > 0의 조합에서 발생하는 잘 드러나지 않는 코너 케이스를 수정합니다. #22947 (Azat Khuzhin).
  • dateDiff 가 이제 DateTime64 인수와 함께 동작합니다 (DateTime 범위를 벗어나는 값에 대해서도 동작함) #22931 (Vasily Nemkov).
  • MaterializeMySQL (실험적 기능): 뷰를 포함하는 MySQL 데이터베이스를 오류 없이 레플리케이션할 수 있도록 했습니다. 이는 뷰를 무시함으로써 동작합니다. #22760 (Christian).
  • PostgreSQL 프로토콜을 통해 RBAC ROW POLICY를 허용합니다. #22658를 해결합니다. PostgreSQL 프로토콜은 구성에서 기본적으로 활성화되어 있습니다. #22755 (Kseniia Sumarokova).
  • Buffer 레이어 락을 대기하는 동안 얼마나 시간이 소요되는지 추적하는 메트릭을 추가합니다. #22725 (Azat Khuzhin).
  • VIEW 정의에서 CTE 사용을 허용합니다. 이로써 #22491이(가) 해결되었습니다. #22657 (Amos Bird).
  • 이전에 실행된 프로그램이 터미널에 이상한 출력(garbage)을 남긴 경우 clickhouse-client에서 화면의 나머지 부분을 지우고 커서를 다시 표시하도록 했습니다. 이로써 #16518이(가) 해결되었습니다. #22634 (alexey-milovidov).
  • x86_64가 아닌 플랫폼에서도 round 함수가 일관되게 동작하도록 변경했습니다. 가장 가까운 짝수로 반올림하는 방식(「은행가 반올림, Banker's rounding」)을 사용합니다. #22582 (alexey-milovidov).
  • 분산 테이블이 전송하는 데이터 블록의 구조를 올바르게 검사합니다. #22325 (Azat Khuzhin).
  • Kafka 엔진의 가상 컬럼에 Kafka 오류를 발행할 수 있으며, 이는 kafka_handle_error_mode 설정으로 제어됩니다. #21850 (fastio).
  • visitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}에 대한 별칭으로 simpleJSONExtract/simpleJSONHas를 추가합니다. #21383을(를) 수정합니다. #21519 (fastio).
  • 라이브러리 딕셔너리 소스용으로 clickhouse-library-bridge를 추가합니다. #9502를 해결합니다. #21509 (Kseniia Sumarokova).
  • materialized view에서 참조하는 컬럼은 DROP할 수 없도록 했습니다. #21164를 해결합니다. #21303 (flynn).
  • 동적 interserver 자격 증명을 지원합니다(중단 시간 없이 자격 증명을 교체할 수 있음). #14113 (johnskopis).
  • ArrowArrowStream 형식 메시지를 사용하는 Kafka 스토리지 지원을 추가했습니다. #23415 (Chao Ma).
  • 예외 메시지에서 누락된 세미콜론을 수정했습니다. 사용자가 이 예외 메시지를 읽기에 불편하게 느낄 수 있습니다. #23208 (alexey-milovidov).
  • LowCardinality 타입과 관련된 일부 예외 메시지에서 누락되어 있던 공백을 수정했습니다. #23207 (alexey-milovidov).
  • 일부 값이 Markdown 형식의 표 셀에서 가운데 정렬되도록 포매팅되어 있었는데, 이제는 그렇지 않습니다. #23096 (alexey-milovidov).
  • clickhouse-client의 제안에서 불필요한 세부 정보를 제거합니다. #22158 이슈를 종료합니다. #23040 (alexey-milovidov).
  • sparse_hashed 딕셔너리를 위한 system.dictionaries의 bytes_allocated 필드 계산을 올바르게 수정했습니다. #22867 (Azat Khuzhin).
  • MergeTree에서 역순 읽기 시 근사적인 전체 행 수 계산을 수정했습니다. #22726 (Azat Khuzhin).
  • ClickHouse 소스를 사용하는 딕셔너리를 자기 자신을 참조하도록 구성할 수 있어 무한 루프가 발생하던 문제를 수정합니다. #14314를 종료합니다. #22479 (Maksim Kita).

버그 수정

  • hedged 요청에 대한 여러 가지 수정이 이루어졌습니다. 설정 use_hedged_requests 가 활성화된 상태에서 GLOBAL IN/JOIN 이 포함된 쿼리에 대해 Can't initialize pipeline with empty pipe 오류가 발생하던 문제를 수정했습니다. 이 수정으로 #23431이(가) 해결되었습니다. #23805 (Nikolai Kochetov). 크래시를 유발하던 hedged 연결의 경쟁 상태(race condition)를 수정했습니다. 이 수정으로 #22161이(가) 해결되었습니다. #22443 (Kruglov Pavel). 원격 쿼리(async_socket_for_remote 가 활성화된 경우)로부터 unknown packet 을 수신했을 때 발생할 수 있던 크래시를 수정했습니다. 이 수정으로 #21167이(가) 해결되었습니다. #23309 (Nikolai Kochetov).
  • input_format_with_names_use_header SETTING을 비활성화했을 때 CSVWithNames 포맷의 모든 입력이 버려지던 문제를 수정했습니다. 이로써 #22406이(가) 해결되었습니다. #23202 (Nikita Mikhaylov).
  • 원격 JDBC 브리지 연결 타임아웃 문제를 수정했습니다. #9609 이슈를 해결했습니다. #23771 (Maksim Kita, alexey-milovidov).
  • update_field가 지정된 경우 complex_key_hashed의 초기 로드 로직을 수정했습니다. #23800 이슈를 해결했습니다. #23824 (Maksim Kita).
  • PREWHERE와 ROW POLICY 필터가 모두 적용된 상태에서 빈 결과가 나올 때 발생하던 크래시를 수정했습니다. #23763 (Amos Bird).
  • Distributed 테이블에 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).
  • 여러 JOIN이 있는 select 쿼리에서 COLUMNS 매처가 올바르게 동작하도록 수정했습니다. #22736을(를) 해결합니다. #23501 (Maksim Kita).
  • 컬럼 자체가 ReplacingMergeTree의 파라미터로 사용되는 경우, 해당 컬럼의 기본값을 수정하면 발생하던 크래시를 수정했습니다. #23483 (hexiaoting).
  • ReplacingMergeTree에서 수직 병합의 코너 케이스를 수정했습니다. 드문 경우 이로 인해 Incomplete granules are not allowed while blocks are granules size와 같은 예외와 함께 병합이 실패할 수 있었습니다. #23459 (Anton Popov).
  • 빈 배열 리터럴을 차원이 1보다 큰 배열로 캐스팅할 수 없던 버그를 수정했습니다(예: CAST([] AS Array(Array(String)))). #14476을(를) 종료합니다. #23456 (Maksim Kita).
  • deltaSum 집계 함수에서 카운터를 재설정한 후 잘못된 결과를 반환하던 버그를 수정했습니다. #23437 (Russ Frank).
  • 멀티디스크 구성에서 ReplicatedMergeTree 테이블 생성이 실패할 때 발생하던 Cannot unlink file 오류를 수정했습니다. 이로써 #21755가 해결되었습니다. #23433 (tavplubix).
  • 가상 컬럼을 기반으로 파티션 프루닝 시 생성되던 호환되지 않는 상수 표현식을 수정했습니다. 이를 통해 https://github.com/ClickHouse/ClickHouse/pull/21401#discussion&#95;r611888913 이(가) 해결되었습니다. #23366 (Amos Bird).
  • join_algorithm 설정이 'auto'로 되어 있고 딕셔너리와 Join을 수행할 때 발생하던 비정상 종료를 수정했습니다. #23002 이슈를 해결했습니다. #23312 (Vladimir).
  • 파티션 프루닝 시 NOT 조건을 완화하지 않도록 했습니다. 이로써 #23305#21539 이슈가 수정됩니다. #23310 (Amos Bird).
  • 오래된 블록을 백그라운드에서 정리(cleanup)하는 과정에서 매우 드물게 발생하던 경쟁 조건(race condition)을 수정했습니다. 이 문제로 인해 블록이 중복 제거(deduplication) 윈도우의 끝에 너무 가까이 있는 경우 해당 블록이 중복 제거되지 않을 수 있었습니다. #23301 (tavplubix).
  • ReplicatedMergeTree 테이블의 생성과 제거 사이에서 분산 환경에서 매우 드물게 발생하던 레이스 컨디션을 수정했습니다. 이로 인해 복제된 테이블을 생성하려 할 때 node doesn't exist와 같은 예외가 발생할 수 있었습니다. #21419를 수정했습니다. #23294 (tavplubix).
  • 기본 키가 첫 번째 속성이 아닐 때 DDL에서 simple key 딕셔너리가 올바르게 생성되도록 수정했습니다. #23236을(를) 해결합니다. #23262 (Maksim Kita).
  • 테이블에 길이가 긴 컬럼 이름이 많이 있을 때 ODBC를 통해 읽을 때 발생하던 문제를 수정했습니다. #8853을 해결합니다. #23215 (Kseniia Sumarokova).
  • MaterializeMySQL (실험적 기능): 키 컬럼 조건을 사용해 MaterializeMySQL에서 SELECT를 수행할 때 발생하던 Not found column 오류를 수정했습니다. #22432를 해결합니다. #23200 (tavplubix).
  • 서브쿼리가 상수로 최적화된 경우 별칭이 올바르게 처리되도록 수정합니다. #22924을 수정합니다. #10401을 수정합니다. #23191 (Maksim Kita).
  • 기본 프로파일에서 data_type_default_nullable SETTING이 활성화된 경우 서버가 시작되지 않을 수 있는 문제가 있었으며, 이를 수정했습니다. #22573을(를) 해결합니다. #23185 (tavplubix).
  • 현재 연결 수를 잘못 집계하여 종료 시 크래시가 발생하던 문제를 수정했습니다. #23154 (Vitaly Baranov).
  • Atomic 데이터베이스에서 분리(detach)한 후 다시 연결(attach)한 materialized view에 대해 SELECT를 실행할 때 발생하던 Table .inner_id... doesn't exist 오류를 수정했습니다. #23047 (tavplubix).
  • 서브쿼리에서 untuple을 사용할 때 발생할 수 있는 Cannot find column in ActionsDAG result 오류를 수정하여 #22290를 해결합니다. #22991 (Nikolai Kochetov).
  • 널 허용 값을 갖는 Map 타입 상수 컬럼 처리 방식을 수정했습니다. #22939 (Anton Popov).
  • DateTime64에서 formatDateTime()과 "%C" 형식 지정자를 수정하고, 큰 값 및 스케일이 0이 아닌 경우에 대해 toDateTime64()를 수정했습니다. #22937 (Vasily Nemkov).
  • 윈도 함수와 함께 mannWhitneyUTestrankCorr를 사용할 때 발생하던 크래시를 수정했습니다. 이로써 #22728 이슈가 해결되었습니다. #22876 (Nikita Mikhaylov).
  • LIVE VIEW (실험적 기능): TemporaryLiveViewCleaner에서 TEMPORARY LIVE VIEW를 동시에 DROP/CREATE할 때 발생할 수 있는 hang 현상을 수정했습니다. 자세한 내용은 참고를 확인하십시오. #22858 (Vitaly Baranov).
  • 필터 컬럼이 집계에 사용되는 경우 HAVING 푸시다운을 수정했습니다. #22763 (Anton Popov).
  • OOM 예외 발생 시 Zookeeper 요청이 중단(hang)될 수 있는 문제를 수정했습니다. #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 타입 컬럼의 잘못된 캐스트를 수정했습니다. #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).
  • table function view가 컬럼으로 사용되는 경우를 검사합니다. 이는 #20350을 보완합니다. #21465 (Amos Bird).
  • Merge 엔진을 사용하는 테이블에서 JOIN 및 집계를 포함한 쿼리 실행 시 발생하던 "unknown column" 오류를 수정합니다. #18368, #22226를 해결합니다. #21370 (Vladimir).
  • 푸시다운 최적화에서 발생하던 이름 충돌 문제를 수정했습니다. 이로 인해 FULL JOIN 이후 WHERE 절 필터링이 잘못 동작하는 문제가 있었습니다. #20497 이슈를 해결했습니다. #20622 (Vladimir).
  • quorum_parallel=1인 quorum insert에서 중복 제거 때문에 실제로는 "quorum"이 되지 않는 매우 드물게 발생하던 버그를 수정했습니다. #18215 (filimonov - 제보, alesapin - 수정).

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

  • CI에서 무상태(stateless) 테스트를 병렬로 실행하도록 했습니다. #22300 (alesapin).
  • Debian 패키지를 단순화했습니다. 이 변경으로 #21698 이슈를 해결했습니다. #22976 (alexey-milovidov).
  • Apple M1에서 ClickHouse 빌드를 지원하도록 했습니다. #21639 (changvvb).
  • macOS용 ClickHouse Keeper 빌드를 수정했습니다. #22860 (alesapin).
  • AArch64 플랫폼에서 일부 테스트를 수정했습니다. #22596 (alexey-milovidov).
  • 더 나은 성능을 위해 FUNCTION 정렬(alignment)을 추가했습니다. #21431 (Danila Kutenin).
  • amd64와 aarch64(qemu)에서 동일한 결과를 출력하도록 일부 테스트를 조정했습니다. 결과가 구현별 CPU 동작에 따라 달라지고 있었습니다. #22590 (alexey-milovidov).
  • 쿼리 프로파일링을 x86_64에서만 허용하도록 했습니다. #15174#15638를 참조하십시오. 이 변경으로 #15638 이슈를 해결했습니다. #22580 (alexey-milovidov).
  • USE_INTERNAL_XZ_LIBRARY=OFF CMake 옵션을 사용해 번들되지 않은(unbundled) xz(lzma)로 빌드할 수 있도록 했습니다. #22571 (Kfir Itzhak).
  • ppc64le에서 번들된 openldap을 활성화했습니다. #22487 (Kfir Itzhak).
  • ppc64le에서 호환되지 않는 라이브러리(일반적으로 플랫폼별)를 비활성화했습니다. #22475 (Kfir Itzhak).
  • ClickHouse Keeper용 Jepsen 테스트를 CI에 추가했습니다. #22373 (alesapin).
  • heap profiling을 지원하도록 jemalloc을 빌드했습니다. #22834 (nvartolomei).
  • 다른 스레드에서 잠금을 해제하는 경우 발생하는 *Log 엔진의 rwlock 잠금 해제와 관련된 UB(정의되지 않은 동작)를 방지했습니다. #22583 (Azat Khuzhin).
  • TinyLog의 rwlock을 동일한 스레드에서 해제하도록 하여 UB(정의되지 않은 동작)를 수정했습니다. #22560 (Azat Khuzhin).

ClickHouse 21.4 릴리스

ClickHouse 릴리스 21.4.1 2021-04-12

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

  • toStartOfIntervalFunction 함수는 시간 단위 간격을 자정에 맞추도록 정렬합니다(이전 버전에서는 Unix epoch 시작 시점에 정렬되었습니다). 예를 들어, toStartOfInterval(x, INTERVAL 11 HOUR)는 하루를 다음 세 구간으로 나눕니다: 00:00:00..10:59:59, 11:00:00..21:59:59, 22:00:00..23:59:59. 이 동작은 실제 사용 요구에 더 적합합니다. 이 변경으로 #9510 이슈가 해결되었습니다. #22060 (alexey-milovidov).
  • Graphite 롤업 설정에서 AgePrecision 값은 보존 기간(retention)이 길어질수록 함께 증가해야 합니다. 이제 이를 검사하며, 잘못된 설정은 예외를 발생시킵니다. #21496 (Mikhail f. Shiryaev).
  • 사용자 정의 최상위 도메인 목록에 존재하는 3개 이상의 레벨을 가진 도메인에 대해 cutToFirstSignificantSubdomainCustom()/firstSignificantSubdomainCustom()가 잘못된 결과를 반환하던 문제를 수정했습니다. 이러한 사용자 정의 최상위 도메인과 일치하는 입력 도메인의 경우, 3레벨 도메인이 첫 번째 중요한 도메인으로 간주되었습니다. 이제 이 동작이 수정되었습니다. 이 변경은 예를 들어 샤딩 키에서 이 함수를 사용하는 경우 비호환성을 유발할 수 있습니다. #21946 (Azat Khuzhin).
  • system.dictionaries 테이블의 keys 컬럼은 key.nameskey.types 컬럼으로 대체되었습니다. system.dictionaries 테이블의 key.names, key.types, attribute.names, attribute.types 컬럼은 딕셔너리가 로드되어 있지 않아도 사용 가능합니다. #21884 (Maksim Kita).
  • 이제 ALTER TABLE ATTACH PART[ITION] 명령을 처리하는 레플리카는 다른 레플리카에서 데이터를 가져오기 전에 먼저 자신의 detached/ 폴더에서 검색합니다. 구현 세부 사항으로, 복제 로그(replicated log)에 새로운 명령 ATTACH_PART가 도입되었습니다. 파트는 체크섬을 기준으로 검색되고 비교됩니다. #18978 (Mike Kot). 참고:
    • 클러스터 업그레이드 중에는 ATTACH PART[ITION] 쿼리가 동작하지 않을 수 있습니다.
    • 새 버전에서 ALTER ... ATTACH 쿼리를 실행한 후에는 이전 ClickHouse 버전으로 롤백할 수 없습니다. 이전 서버는 복제 로그의 ATTACH_PART 항목을 처리하지 못하기 때문입니다.
  • 이 버전에서는 빈 <remote_url_allow_hosts></remote_url_allow_hosts> 설정이 모든 원격 호스트에 대한 접근을 차단합니다. 이전 버전에서는 아무런 동작도 하지 않았습니다. 이전 동작을 유지하려면 설정 파일에 비어 있는 remote_url_allow_hosts 요소가 있는 경우 이를 제거하십시오. #20058 (Vladimir Chebotarev).

새 기능

  • DateTime64의 범위를 확장하여 1925년부터 2283년까지의 날짜를 지원합니다. 기준 날짜인 1970-01-01 부근에서의 DateTime 처리도 개선되었습니다. #9404 (alexey-milovidov, Vasily Nemkov). 모든 시간 및 날짜 관련 FUNCTION이 확장된 날짜 범위에서도 동작하는 것은 아닙니다.
  • 사전 구성된 사용자와 HTTP 요청(GSS-SPNEGO)에 대한 Kerberos 인증 지원이 추가되었습니다. #14995 (Denis Glazachev).
  • 별칭 대신 원래 컬럼 이름을 사용하도록 prefer_column_name_to_alias 설정을 추가했습니다. 일반적인 데이터베이스의 별칭 규칙과 더 잘 호환되도록 하기 위해서입니다. #9715#9887을 위한 변경입니다. #22044 (Amos Bird).
  • 함수 dictGetChildren(dictionary, key), dictGetDescendants(dictionary, key, level)가 추가되었습니다. 함수 dictGetChildren은 모든 자식을 인덱스 배열로 반환합니다. 이는 dictGetHierarchy의 역변환입니다. 함수 dictGetDescendantsdictGetChildrenlevel 횟수만큼 재귀적으로 적용한 것과 같이 모든 하위 노드를 반환합니다. level 값이 0이면 무한대를 의미합니다. #14656를 해결합니다. #22096 (Maksim Kita).
  • executable_pool 딕셔너리 소스를 추가했습니다. #14528 이슈를 닫았습니다. #21321 (Maksim Kita).
  • 테이블 FUNCTION인 dictionary를 추가했습니다. 이 FUNCTION은 Dictionary 엔진과 동일한 방식으로 동작합니다. #21560 이슈를 해결합니다. #21910 (Maksim Kita).
  • PolygonDictionary 속성에서 Nullable 타입을 지원합니다. #21890 (Maksim Kita).
  • dictGet, dictHas 함수는 DDL로 생성된 딕셔너리에 대해 데이터베이스 이름이 지정되지 않은 경우 현재 데이터베이스 이름을 사용합니다. #21632 이슈를 해결합니다. #21859 (Maksim Kita).
  • dictGetOrNull FUNCTION을 추가했습니다. 이 FUNCTION은 dictGet과 동일하게 동작하지만, 딕셔너리에서 키를 찾지 못한 경우 Null을 반환합니다. #22375를 해결합니다. #22413 (Maksim Kita).
  • ComplexKeyCache, SSDCache, SSDComplexKeyCache 딕셔너리에 비동기 업데이트를 추가했습니다. Cache, ComplexKeyCache, SSDCache, SSDComplexKeyCache 딕셔너리에서 널 허용(Nullable) 타입 지원을 추가했습니다. dictGet, dictGetOrDefault 함수를 사용해 여러 속성을 가져오는 기능을 추가했습니다. #21517을(를) 수정했습니다. #20595 (Maksim Kita).
  • RangeHashedDictionary에 대한 dictHas FUNCTION을 지원합니다. #6680를 수정합니다. #19816 (Maksim Kita).
  • DateTime 또는 DateTime64 데이터 타입의 타임존 이름을 반환하는 함수 timezoneOf를 추가합니다. 이 변경은 #9959를 해결하지는 않습니다. 함수 이름 간의 불일치를 수정하기 위해 timezonetimeZone, toTimezonetoTimeZone, 그리고 timezoneOftimeZoneOf 별칭을 추가합니다. #22001 (alexey-milovidov).
  • CREATE/ALTER USER 명령에 새로운 선택적 절 GRANTEES를 추가합니다. 이 절은 해당 사용자가 필요한 모든 권한을 grant option과 함께 부여받았다는 조건에서, 이 사용자로부터 권한 부여(grant)를 받을 수 있는 사용자 또는 역할을 지정합니다. 기본값은 GRANTEES ANY이며, 이는 grant option을 가진 사용자가 누구에게나 권한을 부여할 수 있음을 의미합니다. 구문: CREATE USER ... GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]. #21641 (Vitaly Baranov).
  • system.clusters에 새 컬럼 slowdowns_count를 추가했습니다. hedged request를 사용할 때, 특정 레플리카의 응답이 느려 다른 레플리카로 전환된 횟수를 나타냅니다. 또한 system.clusters에서 errors_count의 실제 값도 표시합니다. #21480 (Kruglov Pavel).
  • MergeTree* 엔진에 _partition_id 가상 컬럼을 추가했습니다. _partition_id를 사용해 파티션 프루닝을 할 수 있게 되었습니다. 파티션 ID 문자열을 계산하는 partitionID() 함수를 추가했습니다. #21401 (Amos Bird).
  • IPv4 또는 IPv6 주소가 지정된 CIDR 네트워크 프리픽스에 포함되어 있는지 검사하는 isIPAddressInRange 함수를 추가했습니다. #21329 (PHO).
  • 새 SQL 명령 ALTER TABLE 'table_name' UNFREEZE [PARTITION 'part_expr'] WITH NAME 'backup_name'가 추가되었습니다. 이 명령은 모든 디스크에서 '동결된' 파티션을 올바르게 제거하는 데 필요합니다. #21142 (Pavel Kovalenko).
  • JOIN에서 키 타입의 암시적 변환을 지원합니다. #19885 (Vladimir).

실험적 기능

  • 부동소수점 타입에 대해 윈도우 함수용 RANGE OFFSET 프레임을 지원합니다. 윈도우 프레임을 고려하는 lagInFrame/leadInFrame 윈도우 함수를 구현했습니다. 이 함수들은 lag/lead와 유사하지만, 윈도우 프레임을 따릅니다. 프레임이 between unbounded preceding and unbounded following인 경우 두 함수와 동일합니다. 이 변경으로 #5485가 해결되었습니다. #21895 (Alexander Kuzmenkov).
  • S3 스토리지의 ReplicatedMergeTree에 대해 zero-copy 복제를 지원합니다. #16240 (ianton-ru).
  • 기존 S3 디스크를 백업-복원 기능이 있는 스키마로 마이그레이션할 수 있는 기능을 추가했습니다. #22070 (Pavel Kovalenko).

성능 향상

  • clickhouse-local 및 기타 모든 곳에서 병렬 포매팅을 지원합니다. #21630 (Nikita Mikhaylov).
  • CSVWithNamesTSVWithNames 형식에 대해 병렬 파싱을 지원합니다. 이 변경으로 #21085 이슈가 해결되었습니다. #21149 (Nikita Mikhaylov).
  • 64 MiB 이상의 파일 범위에 대해 mmap IO를 사용한 읽기를 활성화했습니다(설정 min_bytes_to_use_mmap_io). 이를 통해 중간 수준의 성능 향상을 기대할 수 있습니다. #22326 (alexey-milovidov).
  • min_bytes_to_use_mmap_io 설정으로 읽는 파일에 대한 캐시를 추가했습니다. 이로 인해 설정 값이 작을 경우, 빈번한 mmap/munmap 호출과 그에 따른 페이지 폴트를 피함으로써 상당한(2배 이상) 성능 향상이 발생합니다. mmap IO는 장애 디스크에서의 hang 또는 SIGBUS, 메모리 사용량 제어의 어려움 등으로 프로덕션 환경에서 신뢰성이 떨어지는 중요한 단점이 있다는 점에 유의해야 합니다. 그럼에도 벤치마크에서는 좋은 결과를 보입니다. #22206 (alexey-milovidov).
  • 코덱 NONE 사용 시 불필요한 데이터 복사를 피합니다. 코덱 NONE은 대부분의 경우 거의 쓸모가 없으며, 항상 압축을 사용하는 것이 좋습니다(기본값은 LZ4). 일반적인 인식과 달리 압축을 비활성화해도 성능이 향상되지 않을 수 있으며(반대 효과도 가능함), NONE 코덱은 다음과 같은 일부 상황에서만 유용합니다: - 데이터가 압축 불가능한 경우; - 합성 벤치마크용인 경우. #22145 (alexey-milovidov).
  • 작은 max_rows_to_group_bygroup_by_overflow_mode='any' 설정을 사용하는 경우 GROUP BY가 더 빨라졌습니다. #21856 (Nikolai Kochetov).
  • SELECT ... FINAL ... WHERE와 같은 쿼리의 성능을 최적화했습니다. 이제 FINAL이 있는 쿼리에서 정렬 키에 포함된 컬럼을 PREWHERE로 이동하는 것이 허용됩니다. #21830 (foolchi).
  • memcpy를 다른 구현으로 대체하여 성능을 향상했습니다. 이 변경으로 #18583 이슈가 해결되었습니다. #21520 (alexey-milovidov).
  • 정렬 키 순서에 따른 집계 성능을 개선했습니다(설정 optimize_aggregation_in_order 활성화 시). #19401 (Anton Popov).

개선 사항

  • PostgreSQL 테이블/데이터베이스 엔진 및 딕셔너리 소스에 커넥션 풀을 추가합니다. 이를 통해 #21444가 해결됩니다. #21839 (Kseniia Sumarokova).
  • Postgres storage/table-function에서 기본값이 아닌 테이블 스키마를 지원합니다. #21701 이슈를 해결합니다. #21711 (Kseniia Sumarokova).
  • postgres 딕셔너리 소스에서 레플리카 우선순위를 지원합니다. #21710 (Kseniia Sumarokova).
  • JBOD 볼륨의 서로 다른 디스크에 새로운 파트를 균등하게 할당할 수 있도록 하는 새로운 MergeTree 설정인 min_bytes_to_rebalance_partition_over_jbod를 도입했습니다. #16481 (Amos Bird).
  • system.query_log의 해당 쿼리에 대해 query_kind 컬럼에 Grant, Revoke, System 값을 추가했습니다. #21102 (Vasily Nemkov).
  • 복제에 사용되는 HTTP 연결용 타임아웃을 다른 HTTP 타임아웃과는 별도로 사용자 지정할 수 있게 했습니다. #20088 (nvartolomei).
  • 서버가 블록을 쓰는 동안 예외가 발생하는 경우 클라이언트에 표시되는 예외 메시지를 개선했습니다. 이전 버전에서는 클라이언트가 Data compressed with different methods와 같은 혼동을 줄 수 있는 메시지를 받을 수 있었습니다. #22427 (alexey-milovidov).
  • 실패한 fetch part 이후에 발생할 수 있는 Directory tmp_fetch_XXX already exists 오류를 수정합니다. 임시 fetch 디렉터리가 이미 존재하면 삭제합니다. #14197를 수정합니다. #22411 (nvartolomei).
  • UInt256 인자를 사용하는 range FUNCTION에서 발생한 MSan 보고된 문제를 수정했습니다(큰 정수 지원은 실험적 기능입니다). 이를 통해 #22157를 종료했습니다. #22387 (alexey-milovidov).
  • system.processes 테이블에 current_database 컬럼을 추가합니다. 이 컬럼에는 쿼리가 현재 사용 중인 데이터베이스가 포함됩니다. #22365 (Alexander Kuzmenkov).
  • clickhouse-client에 대소문자를 구분하지 않는 이력 검색/이동 및 단어 부분 단위 이동 기능을 추가했습니다. #22105 (Amos Bird).
  • NULL만으로 이루어진 튜플(예: (NULL, NULL))이 IN 연산자의 왼쪽에 있고, NULL이 아닌 값들로 이루어진 튜플들이 오른쪽에 있는 경우(예: SELECT (NULL, NULL) IN ((0, 0), (3, 1))), 타입이 호환되지 않는다는 예외를 발생시키는 대신 0을 반환합니다. 이러한 표현식은 SELECT (NULL, NULL) = (8, 0) OR (NULL, NULL) = (3, 2) OR (NULL, NULL) = (0, 0) OR (NULL, NULL) = (3, 1)와 같은 쿼리의 최적화 과정에서 생성될 수도 있습니다. 이 변경으로 #22017을 해결합니다. #22063 (alexey-milovidov).
  • simdjson 사용 버전을 0.9.1로 업데이트했습니다. 이로써 #21984가 수정되었습니다. #22057 (Vitaly Baranov).
  • CONNECTION_ID()VERSION() 함수에 대해 대소문자를 구분하지 않는 별칭을 추가했습니다. 이로써 #22028 문제가 수정되었습니다. #22042 (Eugene Klimov).
  • windowFunnel FUNCTION에 각 이벤트를 한 번만 집계하도록 하는 strict_increase 옵션을 추가했습니다(#21835 해결). #22025 (Vladimir).
  • MergeTree 테이블의 파티션 키에 Date 또는 DateTime 컬럼은 포함되지 않고 정확히 하나의 DateTime64 컬럼만 포함된 경우, 해당 값을 system.partssystem.parts_columns 테이블의 min_timemax_time 컬럼에 노출합니다. system.parts_columns 테이블에 min_timemax_time 컬럼을 추가합니다(기존에는 system.parts 테이블과 불일치가 있었습니다). 이 변경으로 #18244가 해결됩니다. #22011 (alexey-milovidov).
  • clickhouse-copier에서 헬퍼 테이블에서 대상 테이블로 파티션을 이동할 수 있도록 replication_alter_partitions_sync=1 SETTING을 지원하도록 했습니다. 기본 타임아웃을 단축했습니다. #21911을 수정했습니다. #21912 (turbo jason).
  • 시스템 테이블에서 EmbeddedRocksDB 테이블의 데이터 디렉터리의 경로를 표시합니다. #21903 (tavplubix).
  • 프로파일 이벤트 HedgedRequestsChangeReplica를 추가하고, 데이터 읽기 타임아웃 단위를 초(sec)에서 밀리초(ms)로 변경했습니다. #21886 (Kruglov Pavel).
  • DiskS3(현재 개발 중인 실험적 기능). 대상 디렉터리가 비어 있지 않고 캐시 디스크를 사용하는 경우 디렉터리를 이동할 수 없던 버그를 수정했습니다. #21837 (Pavel Kovalenko).
  • Web UI에서 ArrayMap 데이터 타입의 표시 형식을 개선했습니다. #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의 배수도 16의 분수배도 아닌 값으로 인스턴스화된 경우 버퍼 오버플로가 발생할 수 있었습니다. 현재 릴리스에는 해당 버그가 존재하지 않습니다. #21533 (alexey-milovidov).
  • system.errors 테이블에 last_error_time/last_error_message/last_error_stacktrace/remote 컬럼을 추가합니다. #21529 (Azat Khuzhin).
  • visitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}에 대한 별칭인 simpleJSONExtract/simpleJSONHas를 추가했습니다. #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: 연결이 끊어지면 MySQL에 재연결을 시도합니다. #20961 (Håvard Kvålen).
  • CROSS JOININNER JOIN으로 다시 작성할 수 있는 더 많은 경우를 지원합니다. #20392 (Vladimir).
  • optimize_on_insert 설정이 활성화되어 있을 때 INSERT 시 빈 파트를 생성하지 않도록 했습니다. #20304를 수정합니다. #20387 (Kruglov Pavel).
  • MaterializeMySQL: _version 컬럼용 minmax skipping 인덱스를 추가합니다. #20382 (Stig Bakken).
  • clickhouse-format--backslash 옵션을 추가해 형식화된 쿼리의 각 줄 끝에 백슬래시를 추가할 수 있게 했습니다. #21494 (flynn).
  • 이제 이미 포함된 부분을 변경하려고 시도해도 ClickHouse에서 LOGICAL_ERROR 예외를 발생시키지 않습니다. #22013를 수정했습니다. #22291 (alesapin).

버그 수정

  • HedgedConnections에서 패킷 수신기를 취소하기 전에 epoll에서 소켓을 제거하여 잠재적인 레이스 컨디션을 방지합니다. #22161를 수정합니다. #22443 (Kruglov Pavel).
  • 병렬 파싱 루틴에서 누락되어 있던 메모리 사용량 계측을 추가했습니다. 이전 버전에서는 결과 집합(result set)에 매우 큰 데이터 블록이 포함된 경우 OOM이 발생할 수 있었습니다. #22008을(를) 해결했습니다. #22425 (alexey-milovidov).
  • SELECT에 상수 WHERE 조건이 있고 소스 테이블에 이름이 숫자로만 이루어진 컬럼이 있을 때 발생할 수 있는 예외를 수정했습니다. #22270 (LiuNeng).
  • use_hedged_requests=0async_socket_for_remote=1 사용 시 발생하던 쿼리 취소 문제를 수정했습니다. #22183 (Azat Khuzhin).
  • InterserverIOHTTPHandler에서 발생한 처리되지 않은 예외를 수정했습니다. #22146 (Azat Khuzhin).
  • http_port가 구성 파일에 지정되지 않은 경우를 처리하도록 Docker 엔트리포인트를 수정했습니다. #22132 (Ewout).
  • TOTALSarrayJoin과 함께 사용하는 JOIN에서 발생하는 Invalid number of rows in Chunk 오류를 해결했습니다. #19303 이슈를 종료합니다. #22129 (Vladimir).
  • Kafka에서 메시지를 폴링하던 백그라운드 스레드 풀 이름을 수정합니다. 잘못된 스레드 풀을 사용하는 Kafka 엔진은 메시지 큐에서 메시지를 소비하지 못합니다. #22122 (fastio).
  • ReplicatedMergeTree 테이블 엔진에서 OPTIMIZEALTER 쿼리의 대기 동작을 수정했습니다. 이제 테이블이 분리(detach)되었거나 재시작된 경우에도 쿼리가 멈추지 않습니다. #22118 (alesapin).
  • 버그가 있는 Linux 커널에서 async_socket_for_remote/use_hedged_requests를 비활성화합니다. #22109 (Azat Khuzhin).
  • Docker entrypoint: LOG_PATH가 비어 있는 경우 현재 디렉터리(.)에 대해 chown을 수행하지 않도록 했습니다. #22100 이슈를 닫았습니다. #22102 (filimonov).
  • AEAD 모드에서 암호화된 데이터의 최소 크기를 확인하는 검사가 decrypt FUNCTION에 누락되어 있었습니다. 이 변경으로 #21897 문제가 수정됩니다. #22064 (alexey-milovidov).
  • 드물게 CollapsingMergeTree의 머지 과정에서 index_granularity + 1개의 행을 가진 그래뉼이 생성될 수 있습니다. 이로 인해 #18928에서 추가된 내부 검사(21.2 및 21.3에 영향을 미침)가 Incomplete granules are not allowed while blocks are granules size 오류와 함께 실패할 수 있습니다. 이 오류로 인해 파트가 머지되지 못했습니다. #21976 (Nikolai Kochetov).
  • 해시 유형의 외부 딕셔너리를 로드하는 동안 메모리 사용량이 크게 증가할 수 있는 문제를 일으키던 #15454 변경을 롤백했습니다. 이 변경으로 #21935가 해결되었습니다. #21948 (Maksim Kita).
  • 헤지드(hedged) 연결이 겹쳐 발생하는 문제를 방지합니다 (Unknown packet 9 from server 오류). #21941 (Azat Khuzhin).
  • 일부 상황에서 "multipart/form-data" 콘텐츠 유형의 HTTP POST 요청을 읽는 기능을 수정했습니다. #21936 (Ivan).
  • 쿼리에 윈도 함수(window function)가 포함되어 있고 기본 키 순서(primary key order)로 읽는 최적화가 적용된 경우 잘못된 ORDER BY 결과가 반환되던 문제를 수정합니다. #21828을(를) 수정합니다. #21915 (Alexander Kuzmenkov).
  • 첫 번째 catboost 모델 실행 시 발생하던 교착 상태를 수정했습니다. #13832 이슈를 해결했습니다. #21844 (Kruglov Pavel).
  • WHERE 또는 HAVING 조건이 GROUP BY 이전 단계로 이동될 때 잘못된 쿼리 결과가 반환되거나 크래시가 발생할 수 있는 문제를 수정합니다. 이는 #21773을(를) 수정합니다. #21841 (Nikolai Kochetov).
  • WriteBufferFromS3에서 오류 처리 및 로깅이 개선되었습니다. #21836 (Pavel Kovalenko).
  • 2단계 집계를 사용할 때 combinator Distinct가 있는 집계 함수에서 발생할 수 있는 충돌을 수정합니다. 이는 #18365에 대한 후속 수정입니다. 운영 환경에서만 재현될 수 있습니다. #21818 (Amos Bird).
  • 스칼라 서브쿼리 인덱스 분석을 수정합니다. 이 변경으로 #18896에서 도입된 #21717 이슈가 해결됩니다. #21766 (Amos Bird).
  • ReplicatedMerge 테이블 엔진에서 Decimal 컬럼의 크기(32비트 또는 64비트)는 그대로인 경우에도 ALTER MODIFY COLUMN 쿼리가 Decimal 컬럼의 타입을 변경하지 못하던 버그를 수정합니다. #21728 (alesapin).
  • ReplicatedMergeTree에 대해 동시에 OPTIMIZEDROP이 실행될 때 발생할 수 있는 무한 대기 상태를 수정합니다. #21716 (Azat Khuzhin).
  • Map 맵 타입에서 상수 정수 인수를 사용할 때 함수 arrayElement의 동작을 수정했습니다. #21699 (Anton Popov).
  • access_to_key_from_attributes가 설정된 ip_trie에서 존재하지 않는 attributes에 접근할 때 발생하던 SIGSEGV를 수정합니다. #21692 (Azat Khuzhin).
  • 이제 서버는 DDLWorker와 딕셔너리의 초기화가 완료된 후에만 연결을 허용합니다. #21676 (Azat Khuzhin).
  • Join 타입 테이블 키에 대한 타입 변환을 추가했습니다(이전에는 SIGSEGV가 발생했습니다). #21646 (Azat Khuzhin).
  • async_socket_for_remote=1 설정에서 분산 요청이 취소되지 않던 문제를 수정했습니다(예: 여러 세그먼트에 대한 단순 SELECT에 LIMIT을 사용하는 경우, 즉 select * from remote('127.{2,3}', system.numbers) limit 100). #21643 (Azat Khuzhin).
  • 수평 머지에서 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 객체에서 발생하던 경쟁 상태(race condition)를 수정했습니다. #21456 (Nikita Mikhaylov).
  • Kafka에서 사용하는 Avro 포맷 파싱을 수정했습니다. #21437 이슈를 해결했습니다. #21438 (Ilya Golshtein).
  • 보안 소켓에서 수신 및 송신 타임아웃 처리와 논블로킹 읽기 동작을 수정합니다. #21429 (Kruglov Pavel).
  • force_drop_table 플래그가 MATERIALIZED VIEW에서는 동작하지 않던 문제를 수정했습니다. #18943를 해결했습니다. #20626 (tavplubix).
  • PredicateRewriteVisitor에서 이름 충돌을 수정했습니다. 이로 인해 FULL JOIN 이후 WHERE 절 필터링이 잘못 수행되는 문제가 있었습니다. #20497를 종료합니다. #20622 (Vladimir).

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

  • ClickHouse Keeper에 대한 Jepsen 테스트를 추가했습니다. #21677 (alesapin).
  • CI에서 무상태 테스트를 병렬로 실행합니다. #22181에 의존합니다. #22300 (alesapin).
  • SQLancer CI 실행 시 상태 검사를 활성화합니다. #22015 (Ilya Yatsishin).
  • PowerPC 빌드를 위한 여러 준비 작업: ppc64le에서 번들된 openldap을 사용할 수 있도록 했습니다. #22487 (Kfir Itzhak). Clang으로 ppc64le에서 컴파일할 수 있도록 했습니다. #22476 (Kfir Itzhak). ppc64le에서 boost 컴파일 문제를 수정했습니다. #22474 (Kfir Itzhak). ppc64le에서 내부 CMake 변수 CMAKE_ASM_COMPILE_OBJECT가 설정되지 않은 것과 관련된 CMake 오류를 수정했습니다. #22469 (Kfir Itzhak). Fedora/RHEL/CentOS에서 ppc64le 환경에서 libclang_rt.builtins를 찾지 못하는 문제를 수정했습니다. #22458 (Kfir Itzhak). ppc64le에서 jemalloc으로 빌드할 수 있도록 했습니다. #22447 (Kfir Itzhak). ppc64le에서 ClickHouse 설정의 내장 처리와 cctz의 타임존 내장 처리 문제를 수정했습니다. #22445 (Kfir Itzhak). ppc64le에서의 컴파일 문제를 수정하고, ppc64le에서 올바른 명령 포인터 레지스터를 사용하도록 했습니다. #22430 (Kfir Itzhak).
  • aarch64에서 S3(AWS) 라이브러리를 다시 활성화했습니다. #22484 (Kfir Itzhak).
  • ORC 포맷을 읽으려면 tzdata가 필요하므로 Docker 컨테이너에 tzdata를 추가했습니다. 이로써 #14156가 해결되었습니다. #22000 (alexey-milovidov).
  • clickhouse-server 이미지 Dockerfile에 deb_locationsingle_binary_location 두 개의 인자를 추가합니다. #21977 (filimonov).
  • clang-tidy를 사용하는 경우 어서션을 활성화하여 release 빌드에서도 clang-tidy를 사용할 수 있도록 했습니다. #21914 (alexey-milovidov).
  • cmake 스크립트에서 검색할 llvm-12 바이너리 이름을 추가했습니다. clang 경고를 없애기 위해 암시적 상수 변환을 적용했습니다. CMake 3.19로 빌드할 수 있도록 서브모듈을 업데이트했습니다. readpassphrase 라이브러리에서 매크로 확장 시 재귀를 비활성화했습니다. clang에서 사용이 중단된 -fuse-ld--ld-path로 변경했습니다. #21597 (Ilya Yatsishin).
  • Docker Hub에서 매우 엄격한 요청 속도 제한을 적용했기 때문에 docker/test/testflows/runner/dockerd-entrypoint.sh를 Yandex dockerhub-proxy를 사용하도록 업데이트합니다 #21551 (vzakaznikov).
  • macOS용 공유 라이브러리 빌드를 수정합니다. #20184 (nvartolomei).
  • zookeeper-dump-treectime 옵션을 추가했습니다. 이를 통해 노드 생성 시간을 덤프할 수 있습니다. #21842 (Ilya).

ClickHouse 21.3 릴리스 (LTS)

ClickHouse v21.3 릴리스, 2021-03-12

이전 버전과의 비호환 변경

  • 이제 이전 문법을 사용하여 테이블 TTL이 있는 MergeTree 테이블을 생성하는 것은 허용되지 않습니다. 해당 TTL이 단순히 무시되기 때문입니다. 기존 테이블에 대한 ATTACH는 여전히 가능합니다. #20282 (alesapin).
  • 이제 대소문자를 구분하지 않는 모든 함수 이름은 정규(표준) 표현으로 자동 변경됩니다. 이는 projection 쿼리 라우팅(향후 제공 예정 기능)에 필요합니다. #20174 (Amos Bird).
  • TTL 표현식이 함수이고 ORDER BY 키와 동일한 경우의 TTL 생성 문제를 수정했습니다. 이제 GROUP BY가 있는 TTL에서 기본 키 컬럼에 사용자 지정 집계를 설정할 수 있습니다. 이전 버전과의 비호환 사항: GROUP BY에 포함되지 않고 명시적으로 설정되지 않은 기본 키 컬럼에 대해서는 TTL이 만료될 때 이제 max 대신 함수 any가 적용됩니다. 또한 WHERE 또는 GROUP BY가 있는 TTL을 사용하는 경우 롤링 업데이트를 수행하면서 머지 중에 예외가 발생할 수 있습니다. #15450 (Anton Popov).

New Feature

  • 파일 엔진 설정 engine_file_empty_if_not_existsengine_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)) 지원을 추가했습니다. 자세한 내용은 해당 링크를 참조하십시오. 이로써 #19428 이슈를 종료합니다. #19748 (Vladimir Chebotarev).
  • executable 딕셔너리 소스에 implicit_key 옵션을 추가했습니다. 이 옵션을 사용하면 레코드가 입력 키와 동일한 순서로 들어오는 경우, 각 레코드마다 키를 출력하지 않아도 됩니다. #14527을 구현합니다. #19677 (Maksim Kita).
  • QUOTA 유형 query_selectsquery_inserts를 추가했습니다. #19603 (JackyWoo).
  • 함수 extractTextFromHTML를 추가했습니다. #19600 (zlx19950903), (alexey-milovidov).
  • MergeTree* 엔진을 사용하는 테이블에 쿼리 동시성 제어를 위한 두 개의 새로운 테이블 수준 설정이 추가되었습니다. 설정 max_concurrent_queries는 이 테이블과 관련된 동시에 실행될 수 있는 쿼리 수를 제한합니다. 설정 min_marks_to_honor_max_concurrent_queries는 쿼리가 최소 이 수만큼의 마크를 읽는 경우에만 이전 설정을 적용하도록 지정합니다. #19544 (Amos Bird).
  • user_files 디렉터리에서 파일을 String으로 읽어들이는 file 함수를 추가했습니다. 이는 file 테이블 함수와는 다릅니다. #issue:18851을 구현합니다. #19204 (keenwolf).

실험적 기능

  • 실험적 Replicated 데이터베이스 엔진을 추가합니다. 이 엔진은 여러 호스트 간에 DDL 쿼리를 복제합니다. #16193 (tavplubix).
  • allow_experimental_window_functions = 1로 활성화할 수 있는 윈도우 함수에 대한 실험적 지원을 도입합니다. 이는 알파 단계 수준의 초기 구현으로, 프로덕션 환경에 적합하지 않으며 향후 릴리스에서 하위 호환되지 않는 방식으로 변경될 수 있습니다. 지원되는 기능 목록은 문서를 참조하십시오. #20337 (Alexander Kuzmenkov).
  • DiskS3용 메타데이터 파일을 백업/복원할 수 있는 기능을 추가합니다. #18377 (Pavel Kovalenko).

성능 개선

  • 원격 쿼리에 대해 헤지드 요청(hedged requests)을 사용할 수 있습니다. use_hedged_requests 설정을 활성화했을 때(기본값은 비활성화되어 있습니다), 하나의 쿼리에 대해 서로 다른 레플리카와 여러 개의 연결을 설정할 수 있습니다. 기존 레플리카와의 연결이 hedged_connection_timeout 내에 설정되지 않았거나 receive_data_timeout 내에 어떤 데이터도 수신되지 않은 경우 새 연결이 생성됩니다. 쿼리는 가장 먼저 비어 있지 않은 Progress 패킷(또는 allow_changing_replica_until_first_data_packet가 설정된 경우 Data 패킷)을 전송한 연결을 사용하며, 나머지 연결은 취소됩니다. max_parallel_replicas > 1인 쿼리도 지원합니다. #19291 (Kruglov Pavel). 이를 통해 매우 큰 클러스터에서 테일 지연 시간(tail latency)을 크게 줄일 수 있습니다.
  • 행 수준 보안 표현식이 지정된 테이블에서도 PREWHERE를 사용할 수 있도록 지원을 추가하고, 해당 최적화를 활성화했습니다. #19576 (Denis Glazachev).
  • distributed_aggregation_memory_efficient 설정은 기본적으로 활성화되어 있습니다. 이 설정은 메모리 사용량을 줄이고 분산 쿼리의 성능을 향상시킵니다. #20599 (alexey-milovidov).
  • 여러 개의 고정 크기 키를 사용하는 GROUP BY 연산의 성능을 향상했습니다. #20472 (alexey-milovidov).
  • 더 엄격한 별칭(aliasing) 규칙을 적용하여 집계 함수의 성능을 향상했습니다. #19946 (alexey-milovidov).
  • 파이프라인을 단순화하여, 그 결과 파이프라인 스케줄링 시 락 경합을 줄임으로써, 극단적인 경우(읽기 속도가 초당 50 GB 수준인 경우) Memory 테이블에서의 읽기 속도를 향상했습니다. #20468 (alexey-milovidov).
  • HTTP 서버를 부분적으로 재구현하여 수신 및 송신 데이터의 복사 횟수를 줄였습니다. 이를 통해 HTTP를 통한 길이가 긴 레코드 삽입 시 성능이 최대 1.5배까지 향상되었습니다. #19516 (Ivan).
  • Memory 테이블에 compress 설정이 추가되었습니다. 이 설정을 활성화하면 테이블이 더 적은 RAM을 사용합니다. 일부 머신과 데이터셋에서는 SELECT 시 더 빠르게 동작할 수도 있지만, 항상 그런 것은 아닙니다. 이는 #20093를 해결합니다. 참고: Memory 테이블이 MergeTree보다 느리게 동작할 수 있는 이유는 다음과 같습니다. (1) 압축이 없음 (2) 블록 크기가 고정됨 (3) 인덱스와 prewhere가 없음... #20168 (alexey-milovidov).
  • 집계 연산에서 코드가 소폭 개선되었습니다. #20978 (alexey-milovidov).
  • 더 나은 성능을 위해 intDiv/modulo 특수화를 다시 추가합니다. 이로써 #21293 이슈가 해결됩니다. 이 회귀는 https://github.com/ClickHouse/ClickHouse/pull/18145에서 도입되었습니다. #21307 (Amos Bird).
  • Memory 테이블에 데이터를 삽입할 때 INSERT SELECT 수행 시 블록을 과도하게 병합(squash)하지 않도록 했습니다. 이전 버전에서는 INSERT SELECT 이후 Memory 테이블에 데이터가 비효율적인 형태로 저장되는 문제가 있었습니다. 이 변경으로 #13052가 해결되었습니다. #20169 (alexey-milovidov).
  • fuzzer로 발견된, DataType parser에서 지수 시간 복잡도가 발생할 수 있는 경우 중 적어도 하나를 수정했습니다. 이로써 #20096을(를) 해결했습니다. #20132 (alexey-milovidov).
  • do_not_merge_across_partitions_select_final 설정이 1일 때, 레벨 > 0인 단일 파트에 대해 FINAL이 포함된 SELECT를 병렬로 실행합니다. #19375 (Kruglov Pavel).
  • system.partssystem.parts_columns를 쿼리할 때 요청된 컬럼만 채우도록 했습니다. #19570에 보고된 문제를 해결했습니다. #21035 (Anmol Arora).
  • avg 집계 FUNCTION 내 산술식에 대한 대수적 최적화를 수행했습니다. #20092를 해결했습니다. #20183 (flynn).

개선 사항

  • 테이블 함수에서 압축 방식 이름의 대소문자를 구분하지 않도록 했습니다. 또한 압축 방식 이름을 대문자로만 인식하던 LZMA 압축 방식을 수정했습니다. #21416 (Vladimir Chebotarev).
  • 비활성 파트가 너무 많을 때 삽입을 지연시키거나 오류를 발생시키도록 하는 두 가지 설정을 추가합니다. 이는 서버가 파트를 충분히 빠르게 정리하지 못하는 경우에 유용합니다. #20178 (Amos Bird).
  • mysql 클라이언트와의 호환성을 개선합니다. 1. mysql jdbc 2. mycli. #21367 (Amos Bird).
  • materialized view에서 참조하는 컬럼은 DROP할 수 없도록 했습니다. #21164를 해결했습니다. #21303 (flynn).
  • MySQL 딕셔너리 소스는 이제 예기치 않은 연결 실패(쿼리 중 MySQL 서버와의 연결이 끊어짐)가 발생할 경우 연결을 재시도합니다. 이는 SSL/TLS 연결에서 때때로 발생하는 문제입니다. #21237 (Alexander Kazakov).
  • 사용성 개선: DateTime64 파싱이 더 일관되도록 개선했습니다. 소수점 이하(서브초) 정밀도를 가진 유닉스 타임스탬프가 스케일된 정수(예: 1111111111.222 대신 1111111111222)로 지정된 경우를 인식합니다. 이 변경으로 #13194가 해결되었습니다. #21053 (alexey-milovidov).
  • distributed_group_by_no_merge 사용 시 이니시에이터에서만 정렬된 블록의 병합을 수행하도록 했습니다. #20882 (Azat Khuzhin).
  • mysql 소스용 설정을 로드할 때 ClickHouse가 동일한 우선순위를 가진 레플리카 목록을 무작위로 섞어 mysql 엔드포인트를 선택하는 라운드로빈 로직이 보장되도록 합니다. 이는 #20629를 해결합니다. #20632 (Alexander Kazakov).
  • 함수 'reinterpretAs(x, Type)'의 이름이 'reinterpret(x, Type)'로 변경되었습니다. #20611 (Maksim Kita).
  • RabbitMQ 엔진에서 vhost를 지원합니다. #20576. #20596 (Kseniia Sumarokova).
  • Array와 Tuple이 조합된 데이터 타입에 대한 직렬화를 개선했습니다. enum 데이터 타입을 protobuf enum 타입과 매칭하는 방식을 개선했습니다. Map 데이터 타입의 직렬화 방식을 수정했습니다. 누락된 값은 이제 기본값으로 설정되도록 했습니다. #20506 (Vitaly Baranov).
  • 분산 DDL 작업 실행과 DDL 큐 정리 사이의 레이스 컨디션을 수정했습니다. 이제 활성 워커가 있는 경우 ZooKeeper에서 DDL 작업이 제거될 수 없습니다. #20016 문제를 수정했습니다. #20448 (tavplubix).
  • Alpine 이미지에서 FQDN 및 기타 DNS 관련 함수가 올바르게 동작하도록 수정합니다. #20336 (filimonov).
  • 명시적으로 사용이 금지된 FUNCTION의 조기 상수 폴딩을 허용하지 않습니다. #20303 (Azat Khuzhin).
  • 정수에서 Decimal 타입으로의 암시적 변환이, 정수 값을 Decimal 타입으로 표현할 수 없는 경우에도 성공할 수 있었습니다. 이제 ARGUMENT_OUT_OF_BOUND 예외를 발생시킵니다. #20232 (tavplubix).
  • 락 없이 동작하는 SYSTEM FLUSH DISTRIBUTED. #20215 (Azat Khuzhin).
  • count(constant)와 sum(1)을 count()으로 정규화합니다. 이는 PROJECTION 쿼리 라우팅을 위해 필요합니다. #20175 (Amos Bird).
  • bitmap 함수가 모든 네이티브 정수 타입을 지원하도록 했습니다. #20171 (Amos Bird).
  • CacheDictionary, ComplexCacheDictionary, SSDCacheDictionary, SSDComplexKeyDictionary가 LRUHashMap을 기반 인덱스로 사용하도록 업데이트했습니다. #20164 (Maksim Kita).
  • access_management 설정은 이제 시작 시 CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT를 제공하여 구성할 수 있으며, 기본값은 비활성화(0)로 이전 값과 동일합니다. #20139 (Marquitos).
  • DateTime64에 대해 toDateTime64(toDate()/toDateTime()) 처리를 수정하고, DateTime 동작과 일치하도록 DateTime64 클램핑을 구현했습니다. #20131 (Azat Khuzhin).
  • QUOTA 관련 개선 사항: SHOW TABLES가 이제 QUOTA 계산에서 두 개의 쿼리가 아니라 하나의 쿼리로 간주됩니다. SYSTEM 쿼리도 이제 QUOTA를 소모합니다. QUOTA 소모 시 구간 종료 시점 계산을 수정했습니다. #20106 (Vitaly Baranov).
  • system.zookeeper 테이블에서 path IN (set) 식을 지원합니다. #20105 (小路).
  • system.tables에서 MaterializeMySQL 테이블의 모든 세부 정보를 표시합니다. #20051 (Stig Bakken).
  • 스크립트가 입력을 무시하고 데이터를 반환하는 경우와 같은 오용 상황에서만 발생할 수 있었던 executable 딕셔너리의 데이터 레이스를 수정했습니다. #20045 (alexey-milovidov).
  • MYSQL_OPT_RECONNECT 옵션의 값을 이제 mysql 레플리카의 config 섹션에 있는 "opt_reconnect" 파라미터를 통해 제어할 수 있습니다. #19998 (Alexander Kazakov).
  • 사용자가 Float32 타입을 요청하여 JSONExtract FUNCTION을 호출하는 경우, 결과 타입으로의 부정확한 변환을 허용합니다. 예를 들어 JSON의 숫자 0.1은 배정밀도(double precision)이며 Float32로는 정확히 표현할 수 없지만, 사용자는 여전히 해당 값을 얻기를 원합니다. 이전 버전에서는 변환이 부정확하다는 것을 나타내기 위해 널 허용이 아닌(non-Nullable) 타입에는 0을, 널 허용(Nullable) 타입에는 NULL을 반환했습니다. 이 로직은 100% 정확했지만 사용자에게는 예상 밖의 동작이었고 여러 질문을 야기했습니다. 이 변경으로 #13962가 해결됩니다. #19960 (alexey-milovidov).
  • 일치하지 않는 경우 Distributed 분산 테이블에 대한 INSERT 시 블록 구조를 변환하도록 추가했습니다. #19947 (Azat Khuzhin).
  • system.distributed_ddl_queue 테이블 동작을 개선했습니다. 재시작 후 MaxDDLEntryID를 마지막 값으로 초기화합니다. 이 PR 이전에는 새 DDLTask가 처리될 때까지 MaxDDLEntryID가 0으로 유지되었습니다. #19924 (Amos Bird).
  • system.parts에서 MaterializeMySQL 테이블을 표시하도록 했습니다. #19770 (Stig Bakken).
  • Buffer 프로필용 별도 구성 지시어를 추가했습니다. #19721 (Azat Khuzhin).
  • JOIN과 관련 없는 조건을 WHERE 절로 이동합니다. #18720. #19685 (hexiaoting).
  • 비동기 전송을 위한 대기 중인 바이트 양에 따라 Distributed로의 INSERT를 조절(throttle)할 수 있는 기능이 추가되었습니다 (Distributed 엔진에 bytes_to_delay_insert/max_delay_to_insertbytes_to_throw_insert SETTINGS가 추가됨). #19673 (Azat Khuzhin).
  • 소멸자에서 쓰기 오류가 무시되는 드문 경우를 수정합니다. #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를 사용하는 조인에서 발생하는 버그를 수정했습니다. 이로써 #19362#21137가 해결되었습니다. #21248 (vdimir).
  • UNION이 포함된 쿼리에 대해 EXPLAIN에서 발생하던 충돌을 수정했습니다. 이로써 #20876, #21170가 해결되었습니다. #21246 (flynn).
  • 이제 뮤테이션은 이를 지원하는 테이블 엔진에서만 허용됩니다(MergeTree 패밀리, Memory, 구체화된 뷰(Materialized View)). 다른 엔진에서는 더 명확한 오류를 반환합니다. #21168을(를) 수정합니다. #21183 (alesapin).
  • #21112를 수정했습니다. 콜백 중 하나가 다소 늦게 호출되는 경우 INSERT 쿼리에서 중복이 발생할 수 있던 버그를 수정했습니다. #21138 (Kseniia Sumarokova).
  • input_format_null_as_default 설정이 널 허용(Nullable) 타입에서도 적용되도록 수정했습니다. 이를 통해 #21116 이슈가 해결되었습니다. #21121 (Amos Bird).
  • Tuple을 맵(Map)으로 캐스팅할 때 발생하는 버그를 수정합니다. #21029 이슈를 종료합니다. #21120 (hexiaoting).
  • 사용자 지정(기본값이 아닌) ZooKeeper 클러스터를 사용하는 Replicated*MergeTree가 삭제될 때 발생하던 메타데이터 누수 문제를 수정했습니다. #21119 (fastio).
  • LowCardinality 키를 사용하는 joinGet에서 발생하던 타입 불일치 문제를 수정합니다. 이로써 #21114 이슈가 해결됩니다. #21117 (Amos Bird).
  • 엔진에 다른 매개변수를 지정해야 하는 경우 Replicated(*)MergeTree 엔진에서 default_replica_path 및 default_replica_name 값이 효력이 없던 문제를 수정했습니다. #21060 (mxzlxy).
  • DateTime64 타입의 특수하게 구성된 범위 초과 값을 포맷팅할 때, 범위를 벗어난 메모리 접근이 발생할 수 있었습니다. 이로써 #20494를 수정했습니다. 이로써 #20543를 수정했습니다. #21023 (alexey-milovidov).
  • storage join 엔진에 대한 병렬 삽입을 차단합니다. #21009 (vdimir).
  • ALTER MODIFY COLUMN이 실패할 것이 분명한 뮤테이션(mutation)을 생성하던 동작을 수정했습니다. #21007 (Anton Popov).
  • #9969를 닫습니다. 대용량 데이터, 다소 복잡한 구조, 그리고 JSON 출력 포맷에서 재현되던 Brotli HTTP 압축 오류를 수정했습니다. 「fix rare access to uninitialized data in ring-buffer」를 포함하기 위해 Brotli를 최신 버전으로 업데이트했습니다. #20991 (Kseniia Sumarokova).
  • 쿼리 취소 시 비동기 작업 큐에서 'Empty task was returned from async task queue'가 반환되던 문제를 수정했습니다. #20881 (Azat Khuzhin).
  • ClickHouse 서버에 연결하기 위해 MySQL 5.7 클라이언트를 사용할 때 USE database; 쿼리가 동작하지 않던 문제가 수정되었습니다. #18926 이슈를 수정했습니다. #20878 (tavplubix).
  • 집계 함수에서 -State 결합자와 함께 -Distinct 결합자를 사용하는 방식을 수정합니다. #20866 (Anton Popov).
  • UNION DISTINCTLIMIT 절이 포함된 서브쿼리를 수정합니다. #20597를 해결합니다. #20610 (flynn).
  • 딕셔너리에서 존재하지 않는 키를 조회하는 쿼리에서 딕셔너리가 일관되게 동작하지 않던 문제를 수정했습니다. #20578 (Nikita Mikhaylov).
  • 스칼라 서브쿼리와 인덱스용 서브쿼리에 사용되는 스레드 수를 수정합니다(#19007 이후에는 항상 단일 스레드만 사용되었습니다). #20457, #20512 문제를 수정합니다. #20550 (Nikolai Kochetov).
  • 알 수 없는 패킷이 원격 쿼리에서 수신된 경우 발생할 수 있던 충돌을 수정했습니다(#17868에서 도입되었습니다). #20547 (Azat Khuzhin).
  • 비동기 INSERT를 위한 디렉터리 이름 파싱 시 적절한 검사를 추가하여 SIGSEGV를 수정했습니다. #20498 (Azat Khuzhin).
  • 부동 소수점 키에 대해 함수 transform이 올바르게 동작하지 않던 문제를 수정합니다. #20460을(를) 종료합니다. #20479 (flynn).
  • WITH 절 별칭을 서브쿼리로 전파할 때 발생하던 무한 루프 문제를 수정합니다. 이 변경으로 #20388가 해결됩니다. #20476 (Amos Bird).
  • HTTP 클라이언트가 종료될 때 서버가 비정상 종료되던 문제를 수정합니다. #20464 (Azat Khuzhin).
  • SELECT에 const가 포함된 JOIN에서 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).
  • 서로 다른 스케일을 가진 두 상수 Decimal 값 간 이진 연산에서 잘못된 결과가 나오는 문제를 수정합니다. #20283을(를) 해결합니다. #20339 (Maksim Kita).
  • ReplicatedMergeTree 테이블 엔진 계열에서 실패한 백그라운드 태스크가 지나치게 자주 재시도되던 동작을 수정합니다. 이로 인해 로그가 과도하게 남고 CPU 부하가 증가할 수 있었습니다. #20203을(를) 수정합니다. #20335 (alesapin).
  • *CollapsingMergeTreeReplacingMergeTree 테이블 엔진에서 version 컬럼에 대해서는 DROP 또는 RENAME만 허용하도록 제한합니다. #20300 (alesapin).
  • 손상된 JSON인 경우 전체 파일을 메모리에 읽어들이려다 allocator에서 예외가 발생하던 동작을 수정했습니다. #19719를 수정합니다. #20286 (Nikita Mikhaylov).
  • 수직 병합을 지원하지 않는 MergeTree 테이블 엔진 계열에서 수직 병합을 시도할 때 발생하는 예외를 수정합니다. #20259를 수정합니다. #20279 (alesapin).
  • 종료 중 설정을 다시 로드할 때 드물게 발생하던 서버 비정상 종료 문제를 수정합니다. 이로써 #19689 이슈가 해결됩니다. #20224 (alesapin).
  • INSERT SELECT에서 CTE 사용 시 동작을 수정합니다. 이로써 #20187#20195를 해결합니다. #20211 (Amos Bird).
  • #19314를 수정했습니다. #20156 (Ivan).
  • 특수한 시간대를 올바르게 처리하도록 toMinute FUNCTION을 수정했습니다. #20149 (keenwolf).
  • if 함수에서 then/else 분기의 결과가 Tuple 타입일 때 쿼리 실행 후 서버가 크래시되던 문제를 수정합니다. Tuple 타입은 Array 또는 다른 복합 타입을 포함해야 합니다. 관련 이슈: #18356. #20133 (alesapin).
  • MongoDB 테이블 엔진은 이제 데이터를 읽을 때만 연결을 설정합니다. ATTACH TABLE은 더 이상 연결을 시도하지 않습니다. #20110 (Vitaly Baranov).
  • StorageJoin의 버그 수정. #20079 (vdimir).
  • 음수를 작은 제수로 나눈 뒤 나머지(modulo)를 계산할 때, 음수 결과를 담기에 결과 데이터 타입의 범위가 충분히 크지 않았던 문제를 수정합니다. 이로써 #20052를 해결합니다. #20067 (alexey-milovidov).
  • MaterializeMySQL: 여러 테이블을 업데이트하는 SQL 문 복제를 수정했습니다. #20066 (Håvard Kvålen).
  • 초기화 스크립트 실행 중 Docker에서 「Connection refused」 오류가 발생하지 않도록 했습니다. #20012 (filimonov).
  • EmbeddedRocksDB는 실험적인 스토리지입니다. 적절한 타입 검사(type checking)가 부족했던 문제를 수정했습니다. 코드를 단순화했습니다. 이 변경으로 #19967 이슈가 해결되었습니다. #19972 (alexey-milovidov).
  • Int32를 제외한 모든 정수형 타입에서 인자 타입이 Nullable(T)일 때 fromModifiedJulianDay 함수에서 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. #19959 (PHO).
  • BloomFilter 인덱스 비정상 종료 문제 수정. #19757를 수정합니다. #19884 (Maksim Kita).
  • system.text_log이 활성화되어 있을 때 데드락이 발생할 수 있는 문제가 있었습니다. 이 변경으로 #19874 문제가 수정되었습니다. #19875 (alexey-milovidov).
  • 기본 표현식에 dictGet()가 포함된 테이블이 있을 경우 서버가 시작되지 않던 문제를 수정합니다. 딕셔너리를 로드하지 않고도 dictGet()의 반환 타입을 조회할 수 있도록 했습니다. #19805 (Vitaly Baranov).
  • select만 실행했을 때 발생하던 clickhouse-client 비정상 종료(abort) 예외를 수정합니다. #19790 (taiyang-li).
  • 여러 개의 clickhouse-copier 인스턴스를 실행할 때 조각을 대상 테이블로 이동하는 작업이 실패할 수 있던 버그를 수정합니다. #19743 (madianjun).
  • ON CLUSTER 쿼리를 실행하는 백그라운드 스레드가 드롭된 복제된 테이블(Replicated Table)의 처리를 기다리느라 대기 상태에서 멈춰 있을 수 있었습니다. 이 문제가 수정되었습니다. #19684 (yiguolei).

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

  • AVX-2를 전역적으로 활성화한 상태로 ClickHouse를 빌드할 수 있도록 했습니다. 최신 CPU에서 약간의 성능 향상이 있습니다. 현재는 프로덕션 환경에서는 권장되지 않으며 공식 빌드로도 제공되지 않습니다. #20180 (alexey-milovidov).
  • Coverity에서 발견된 일부 문제를 수정했습니다. #19964를 참조하십시오. #20010 (alexey-milovidov).
  • gdb에서 수정된 바이너리로 서버를 시작할 수 있도록 했습니다. 이전 버전에서는 시작 전에 gdb에서 브레이크포인트를 설정하면 무결성 검사 실패로 인해 서버가 시작을 거부했습니다. #21258 (alexey-milovidov).
  • Kafka에서 여러 가지 압축 방식에 대한 테스트를 추가했습니다. #21111 (filimonov).
  • test_storage_kerberized_hdfs 테스트에서 발생하던 포트 충돌을 수정했습니다. #19974 (Ilya Yatsishin).
  • 통합 테스트에서 Docker 시작에 실패했을 때 stdoutstderr를 로그에 출력합니다. 이 PR 이전에는 이 경우 매우 짧은 오류 메시지만 출력되어 문제를 분석하는 데 도움이 되지 않았습니다. #20631 (Vitaly Baranov).

ClickHouse 21.2 릴리스

ClickHouse 릴리스 v21.2.2.8-stable, 2021-02-07

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

  • 비트 연산 함수(bitAnd, bitOr 등)는 부동 소수점 인자에 대해 사용할 수 없습니다. 이제 정수형으로 명시적으로 캐스팅해야 합니다. #19853 (Azat Khuzhin).
  • 부동 소수점 인자에 대해 lcm/gcd 사용을 금지합니다. #19532 (Azat Khuzhin).
  • OPTIMIZE TABLE/병합(merge)에 대한 메모리 추적을 수정하고, OPTIMIZE TABLE/병합에 쿼리 메모리 한도와 샘플링이 반영되도록 했습니다. #18772 (Azat Khuzhin).
  • 파티션 키로 부동 소수점 컬럼 사용을 허용하지 않습니다. #18421를 참조하십시오. #18464 (hexiaoting).
  • 타입 정의에서 과도한 괄호 사용은 더 이상 지원하지 않습니다. 예: Array((UInt8)).

새로운 기능

  • PostgreSQL 테이블 엔진을 추가했습니다(select/insert 모두에 대해 다차원 배열을 지원하며, 테이블 FUNCTION으로도 제공됩니다). PostgreSQL 딕셔너리 소스를 추가했습니다. PostgreSQL 데이터베이스 엔진을 추가했습니다. #18554 (Kseniia Sumarokova).
  • 데이터 타입 Nested가 이제 임의 깊이의 중첩을 지원합니다. Arraysize0, Nullablenull, Tuple 요소의 이름과 같은 복합 타입의 하위 컬럼이 도입되어, 전체 컬럼을 읽지 않고도 해당 값을 읽을 수 있습니다. #17310 (Anton Popov).
  • FlatDictionary, HashedDictionary, ComplexKeyHashedDictionary, DirectDictionary, ComplexKeyDirectDictionary, RangeHashedDictionaryNullable(널 허용) 타입 지원을 추가했습니다. #18236 (Maksim Kita).
  • DDL worker 대기열에 있는 쿼리를 표시하는 system.distributed_ddl_queue라는 새 테이블을 추가합니다. #17656 (Bharat Nallan).
  • LDAP 사용자 디렉터리의 사용자에 대해 LDAP 그룹 이름과 일반 속성 값을 로컬 역할에 매핑하는 기능이 추가되었습니다. #17211 (Denis Glazachev).
  • 테이블 함수 cluster에 대한 INSERT를 지원하며, 테이블 함수 remotecluster 모두에서 세그먼트 키(sharding key)를 지정해 노드 간에 데이터를 분산하도록 지원합니다. #16752를 해결했습니다. #18264 (flynn).
  • XML 문자 디코딩을 위한 함수 decodeXMLComponent를 추가합니다. 예: SELECT decodeXMLComponent('Hello,&quot;world&quot;!') #17659. #18542 (nauta).
  • parseDateTimeBestEffortUSOrZero, parseDateTimeBestEffortUSOrNull 함수를 추가했습니다. #19712 (Maksim Kita).
  • sign 수학 함수를 추가합니다. #19527 (flynn).
  • 사용된 기능(함수, 테이블 엔진 등)에 대한 정보를 system.query_log에 기록합니다. #18495. #19371 (Kseniia Sumarokova).
  • 함수 formatDateTime은 날짜를 분기 단위로 포맷하기 위한 %Q 수정자를 지원합니다. #19224 (Jianmei Zhang).
  • Play UI에서 MetaKey+Enter 단축키를 지원합니다. #19012 (sundyli).
  • 맵 데이터 타입을 위한 세 가지 함수를 추가했습니다: 1. mapContains(map, key)map.keys 에 두 번째 인자인 key 가 포함되어 있는지 확인합니다. 2. mapKeys(map) 는 모든 키를 Array 형식으로 반환합니다. 3. mapValues(map) 는 모든 값을 Array 형식으로 반환합니다. #18788 (hexiaoting).
  • log_comment 설정을 #18494와 관련하여 추가했습니다. #18549 (Zijie Lu).
  • argMinargMax 함수에 튜플 인수 지원을 추가했습니다. #17359 (Ildus Kurbangaliev).
  • EXISTS VIEW 구문을 지원합니다. #18552 (Du Chuan).
  • SELECT ALL 구문을 추가합니다. #18706 이슈를 해결합니다. #18723 (flynn).

성능 개선

  • stat 시스템 호출 횟수를 줄여 파트 제거 속도를 향상했습니다. 예전에 존재하던 최적화를 다시 도입한 것입니다. IDisk 인터페이스를 더 안전하게 만들었습니다. #19065를 해결합니다. #19086 (alexey-milovidov).
  • WITH 구문에서 선언된 별칭이 인덱스 분석에서 올바르게 사용되도록 개선했습니다. 이제 WITH column AS alias SELECT ... WHERE alias = ...와 같은 쿼리는 인덱스를 사용할 수 있습니다. #18896 (Amos Bird).
  • optimize_alias_column_prediction(기본값: on)을 추가했습니다. 이 설정은 다음을 수행합니다. - 파티션 프루닝 및 보조 인덱스를 통한 데이터 스킵 시 WHERE 절의 별칭 컬럼을 반영합니다. - optimize_trivial_count를 사용하는 단순 count 쿼리에서 WHERE 절의 별칭 컬럼을 반영합니다. - optimize_aggregation_in_order/optimize_read_in_order를 위한 GROUP BY/ORDER BY의 별칭 컬럼을 반영합니다. #16995 (sundyli).
  • 집계 함수 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).

개선 사항

  • 이제 table에서 임의의 컬럼 하나만 선택할 수 있는 경우에도 SELECT count() FROM table을(를) 실행할 수 있습니다. 이 PR은 #10639을(를) 수정합니다. #18233 (Vitaly Baranov).
  • 원격 MySQL 서버와 통신할 때 문자 인코딩을 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).
  • 레플리카가 없는 MergeTree에서 드물게 발생하던 max_number_of_merges_with_ttl_in_pool 제한 초과 문제(더 많은 TTL 병합 작업이 할당되던 문제)를 수정합니다. #19708 (alesapin).
  • 딕셔너리: 속성 파싱 시 오류 메시지가 개선되었습니다. #19678 (Maksim Kita).
  • 읽을 때 체크섬 검증을 비활성화하는 옵션을 추가합니다. 프로덕션 환경에서는 절대 사용하면 안 됩니다. 이를 비활성화해도 어떠한 이점도 기대하지 마십시오. 실험 및 벤치마크 목적으로만 사용할 수 있습니다. 이 설정은 MergeTree 계열 테이블에만 적용됩니다. 다른 테이블 엔진 및 네트워크를 통해 데이터를 수신할 때는 항상 체크섬을 검증합니다. 관찰 결과, 성능 차이는 없거나 0.5% 미만이었습니다. #19588 (alexey-milovidov).
  • multiIf FUNCTION에서 상수 결과를 지원하도록 했습니다. #19533 (Maksim Kita).
  • 맵(Map) 데이터 타입에 대해 함수 length/empty/notEmpty를 활성화하여 맵에서 키의 개수를 반환하도록 했습니다. #19530 (taiyang-li).
  • clickhouse-benchmark--reconnect 옵션이 추가되었습니다. 이 옵션을 지정하면 각 요청을 보내기 전에 다시 연결합니다. 이는 테스트를 위해 필요합니다. #19872 (alexey-milovidov).
  • .debug 파일의 새 위치 사용을 지원합니다. 이를 통해 #19348 이슈가 해결됩니다. #19520 (Amos Bird).
  • toIPv6 FUNCTION은 이제 IPv4 주소를 파싱합니다. #19518 (Bharat Nallan).
  • system.query_log, system.processes 등에 http_referer 필드를 추가합니다. 이로써 #19389를 해결합니다. #19390 (alexey-milovidov).
  • 더 많은 FUNCTION에서 대소문자를 구분하지 않도록 하고 별칭을 추가하여 MySQL 호환성을 개선합니다. #19387 (Daniil Kondratyev).
  • MergeTree 파트(Wide/Compact/InMemory 타입)에 대한 메트릭을 추가했습니다. #19381 (Azat Khuzhin).
  • Docker를 임의의 UID로 실행할 수 있도록 허용합니다. #19374 (filimonov).
  • Pretty 포맷에서 IPv4 데이터 타입 값의 잘못된 정렬을 수정했습니다. 원래 왼쪽 정렬이어야 하지만 오른쪽으로 정렬되어 있었습니다. 이 변경으로 #19184 이슈가 해결됩니다. #19339 (alexey-milovidov).
  • 서버를 재시작하지 않고도 max_server_memory_usage 설정을 변경할 수 있게 되었습니다. 이 변경으로 #18154가 해결되었습니다. #19186 (alexey-milovidov).
  • 이전 버전에서는 함수 bar가 특정 NaN 인수로 호출될 때 발생하는 예외가 다소 혼동을 줄 수 있었습니다. 이 변경으로 #19088이 수정되었습니다. #19107 (alexey-milovidov).
  • ClickHouse 사용자 및 그룹의 UID/GID를 clickhouse-server 이미지에서 고정된 값(101)으로 명시적으로 설정합니다. #19096 (filimonov).
  • 매우 긴 문자열을 포함한 데이터를 삽입할 때 발생하던 PeekableReadBuffer: Memory limit exceed 오류를 수정했습니다. #18690 이슈를 해결했습니다. #18979 (tavplubix).
  • Docker 이미지: clickhouse-server entrypoint가 여러 가지로 개선되었습니다. #18954 (filimonov).
  • normalizeQueryKeepNamesnormalizedQueryHashKeepNames를 추가하여 긴 이름을 ?로 마스킹하지 않고 쿼리를 정규화할 수 있습니다. 이를 통해 복잡한 쿼리 로그를 더 잘 분석할 수 있습니다. #18910 (Amos Bird).
  • 전송하기 전에 송신 측에서 분산 배치의 블록 단위 체크섬을 확인하도록 변경했습니다(파일을 두 번 읽지 않고, 읽는 동안 체크섬을 검증합니다). 이를 통해 송신 측의 잘린(truncated) .bin 파일로 인해 수신 측에서 INSERT가 걸리는 문제를 방지합니다. 배치 INSERT 시 .bin 파일을 두 번 읽지 않도록 했습니다(이전에는 행/바이트 수를 계산하여 squashing 을 고려해야 했으나, 이제 이 정보가 헤더에 포함되며, 이전 버전과의 호환성은 유지됩니다). #18853 (Azat Khuzhin).
  • 집계 함수 상태(aggregate function state)를 포함한 테이블에서 RIGHT 및 FULL JOIN을 수행할 때 발생하던 문제를 수정했습니다. 이전 버전에서는 cloneResized 메서드와 관련된 예외가 발생했습니다. #18818 (templarzq).
  • 접두사 기반의 S3 엔드포인트 설정을 추가했습니다. #18812 (Vladimir Chebotarev).
  • [UInt8, UInt16, UInt32, UInt64] 인자 타입 지원을 bitmapTransform, bitmapSubsetInRange, bitmapSubsetLimit, bitmapContains 함수에 추가했습니다. 이 변경으로 #18713이(가) 해결되었습니다. #18791 (sundyli).
  • CTE(공통 테이블 표현식)에 추가 별칭(alias)을 지정할 수 있도록 허용합니다. enable_global_with_statement = 1일 때 동일한 수준의 서브쿼리로 CSE(Common Subexpressions Elimination)를 전파합니다. 이를 통해 #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).
  • 인자 타입이 Int32를 제외한 정수형에 대한 Nullable(T)인 경우 fromModifiedJulianDay FUNCTION에서 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. #19959 (PHO).
  • 이전 버전에서는 greatCircleAngle 함수가 부정확한 결과를 반환했습니다. 이 변경으로 #19769가 해결되었습니다. #19789 (alexey-milovidov).
  • 일부 복제 관련 연산(예: mutation)이 데이터 손상 이후 특정 파트를 처리하지 못할 수 있는 드문 버그를 수정합니다. #19593를 수정합니다. #19702 (alesapin).
  • ON CLUSTER 쿼리를 실행하는 백그라운드 스레드가 드롭된 복제 테이블이 어떤 처리를 수행하기를 기다리면서 대기 상태에 걸릴 수 있었습니다. 이 문제가 수정되었습니다. #19684 (yiguolei).
  • 컬럼 설명 역직렬화 오류를 수정합니다. 이로 인해 이름이 \인 컬럼이 있는 테이블에 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)을 사용하는 조인 타입에서 기본값 처리를 수정했습니다. #18197을(를) 해결합니다. #19360 (vdimir).
  • EOF에 도달했을 때 분산 전송용 파일을 손상된 것으로 표시하지 않도록 했습니다. #19290 (Azat Khuzhin).
  • async_socket_for_remote에 대한 파이프 파일 디스크립터의 누수 문제를 수정합니다. #19153 (Azat Khuzhin).
  • ORC 포맷에서 파일을 무한히 반복해서 읽는 문제를 수정합니다(해당 문제는 #10580에서 도입됨). #19095를 수정합니다. #19134 (Nikolai Kochetov).
  • 고정 그라뉼러리티 크기를 초과하는 크기의 마크가 생성될 수 있던 MergeTree 데이터 writer의 문제를 수정합니다. 관련 이슈: #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이 상수 컬럼을 구체화하려고 하지만, 나머지 코드는 상수 컬럼이 다른 위치에서 구체화되기를 기대합니다. #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).
  • 서버에서 메모리가 부족할 때 드물게 발생하던 크래시를 수정했습니다. #18976 (tavplubix).
  • ALTER TABLE ... DROP PART 'part_name' 쿼리가 전체 파티션의 모든 중복 제거 블록을 삭제하던 잘못된 동작을 수정합니다. #18874를 수정합니다. #18969 (alesapin).
  • #18894 이슈를 수정했습니다. 주로 Looker와 같은 BI 도구가 자동 생성하는 긴 컬럼 별칭('table.column' 스타일)이 긴 테이블 이름과 동일한 경우 예외가 발생하지 않도록 검사를 추가했습니다. #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에서 nullptr를 역참조하여 문제(오류)가 발생할 수 있는 버그를 수정합니다. 이 변경으로 #18911이 해결되었습니다. #18912 (sundyli).
  • Nullable(String)에서 Nullable(Decimal(P, S))NULLCAST하려고 할 때 발생하던 Attempt to read after eof 오류를 수정했습니다. 이제 CAST 함수는 널 허용 문자열에서 Decimal 값을 파싱할 수 없을 경우 NULL을 반환합니다. #7690 문제를 수정합니다. #18718 (Winter Zhang).
  • MySQL 엔진의 데이터 타입 변환 관련 문제를 수정합니다. #18124 (bo zeng).
  • select만 실행할 때 clickhouse-client에서 발생하던 중단 예외를 수정합니다. #19790 (taiyang-li).

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

  • CI에서 SQLancer (논리 SQL 퍼저)를 실행합니다. #19006 (Ilya Yatsishin).
  • Query Fuzzer가 새로 추가된 테스트를 더 광범위하게 퍼징합니다. #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을 명시적으로 활성화하거나 비활성화할 수 있도록 했습니다. 기본적으로 서버가 터미널에 연결되어 있지 않으면 활성화됩니다. #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-stable 릴리스, 2021-02-03

버그 수정

  • BloomFilter 인덱스 크래시 수정. #19757를 수정합니다. #19884 (Maksim Kita).
  • union distinct 서브쿼리로 프리디케이트를 푸시다운할 때 발생하던 크래시를 수정했습니다. 이로써 #19855 이슈가 해결되었습니다. #19861 (Amos Bird).
  • 127보다 큰 UInt8 값에 대한 필터링을 수정했습니다. #19799 (Anton Popov).
  • 이전 버전에서는 함수 arrayEnumerateUniq에 비정상적인 인수를 전달하면 충돌이 발생하거나 무한 루프에 빠질 수 있었습니다. 이 변경으로 #19787이(가) 해결되었습니다. #19788 (alexey-milovidov).
  • 산술형과 문자열형을 정확하게 비교할 때 발생하던 스택 오버플로를 수정했습니다. #19773 (tavplubix).
  • 중첩 컬럼 이름이 WHERE 또는 PREWHERE에서 사용될 때 충돌이 발생하던 문제를 수정했습니다. #19755를 해결합니다. #19763 (Nikolai Kochetov).
  • bitmapAndnot 함수에서 발생하는 세그멘테이션 폴트를 수정합니다. #19668 이슈를 해결합니다. #19713 (Maksim Kita).
  • 일부 big integer를 사용하는 함수에서 세그멘테이션 폴트(segfault)가 발생할 수 있습니다. Big integer는 실험적인 기능입니다. 이 변경으로 #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와 대상 테이블의 구조가 서로 다를 때 집계 수행 시 잘못된 결과가 나오거나 세그멘테이션 폴트가 발생할 수 있던 문제를 수정했습니다. #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).
  • 동시에 실행되는 ALTERDROP 쿼리가 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-stable 2021-01-18

하위 호환 불가 변경

  • input_format_null_as_default 설정이 기본값으로 활성화됩니다. #17525 (alexey-milovidov).
  • 설정 프로파일에 대해 config에 지정된 설정 제약 조건을 확인합니다. users.xml에 해당 제약 조건을 만족하지 않는 설정이 포함되어 있으면 서버가 시작되지 않습니다. #18486 (tavplubix).
  • 데이터 파트(write_final_markenable_mixed_granularity_parts)에 영향을 주는 스토리지 설정을 변경하는 ALTER MODIFY SETTING을 제한합니다. #18306 (Amos Bird).
  • 기본적으로 insert_quorum_parallel 값을 1로 설정합니다. 이는 「순차(sequential)」 quorum insert보다 훨씬 사용하기 편리합니다. 그러나 순차적 일관성에 의존하는 경우, 이 설정을 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).
  • avgavgWeighted 함수에서 확장 정수 타입(Int128, Int256, UInt256) 사용을 허용합니다. 또한 avgWeighted 함수에서 값과 가중치에 서로 다른 타입(정수, Decimal, 부동소수점)을 사용하는 것도 허용합니다. 이는 하위 호환성이 없는 변경입니다. 이제 avgavgWeighted 함수는 항상 Float64를 반환합니다(문서에 명시된 대로). 이 변경 이전에는 Decimal 인자를 사용하는 경우 반환 타입도 Decimal이었습니다. #15419 (Mike).
  • 표현식 toUUID(N)은 더 이상 동작하지 않습니다. toUUID('00000000-0000-0000-0000-000000000000')로 대체하십시오. 이 변경은 N이 0이 아닌 경우 toUUID(N)의 결과가 직관적이지 않다는 점을 고려하여 이루어졌습니다.
  • 잘못된 "key usage"를 가진 SSL 인증서는 거부됩니다. 이전 버전에서는 이러한 인증서도 허용되었습니다. #19262를 참고하십시오.
  • substitutions 파일(/etc/metrika.xml)에 대한 incl 참조가 기본 config(<remote_servers>, <zookeeper>, <macros>, <compression>, <networks>)에서 제거되었습니다. substitutions 파일을 사용하고 이러한 암묵적 참조에 의존하고 있었다면, 업데이트 전에 incl="..." 속성이 있는 해당 섹션을 추가하여 수동으로, 명시적으로 다시 설정해야 합니다. #18740 (alexey-milovidov).

신규 기능

  • ClickHouse에 gRPC 프로토콜을 구현했습니다. #15111 (Vitaly Baranov).
  • 여러 개의 ZooKeeper 클러스터를 사용할 수 있게 했습니다. #17070 (fastio).
  • REPLACE TABLECREATE OR REPLACE TABLE 쿼리를 추가했습니다. #18521 (tavplubix).
  • UNION DISTINCT를 구현하고, 기본적으로 별도 수식어가 없는 UNION 절을 UNION DISTINCT로 처리합니다. 이를 UNION ALL로 처리하거나 모드의 명시적 지정을 요구하도록 할 수 있는 설정 union_default_mode를 추가합니다. #16338 (flynn).
  • accurateCastOrNull FUNCTION을 추가하여 #10290를 해결했습니다. x IN (subquery) 표현식에 형 변환을 추가하여 #10266를 해결했습니다. #16724 (Maksim Kita).
  • IP 딕셔너리에서 IPv4 / IPv6 타입을 직접 지원합니다. #17571 (vdimir).
  • 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_kindnormalized_query_hash 필드를 추가합니다. #17726 (Amos Bird).
  • optimize_on_insert 설정을 추가합니다. 이 설정을 활성화하면 INSERT된 데이터 블록에 대해, 해당 블록에 병합이 수행된 것과 동일한 변환을 수행합니다(예: Replacing, Collapsing, Aggregating...). 이 설정은 기본적으로 활성화되어 있습니다. 이는 materialized view 및 MaterializeMySQL의 동작에 영향을 줄 수 있습니다(자세한 설명 참조). #10683을(를) 해결합니다. #16954 (Kruglov Pavel).
  • HDFS에 대한 Kerberos 인증. #16621 (Ilya Golshtein).
  • system.settings의 파라미터를 표시하는 SHOW SETTINGS 문을 지원합니다. SHOW CHANGED SETTINGSLIKE/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).
  • 삽입된 파트에 대해 system.part_logquery_id 컬럼을 추가합니다. #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).
  • 내장 FUNCTION isIPv4StringisIPv6StringMySQL과 유사하게 지원하도록 했습니다. #18349 (Du Chuan).
  • 분산 키 없이도 여러 세그먼트로 분할된 분산 테이블에 데이터를 삽입할 수 있도록 새로운 설정 insert_distributed_one_random_shard = 1를 추가했습니다. #18294 (Amos Bird).
  • min_compress_block_sizemax_compress_block_size 설정을 MergeTreeSettings에 추가했습니다. 이 설정들은 전역 설정보다 우선순위가 높으며, 값이 지정되면 해당 설정들이 적용됩니다. 13890 이슈를 종료했습니다. #17867 (flynn).
  • 64비트 Roaring 비트맵 지원을 추가했습니다. #17858 (Andy Yang).
  • 중복을 검사할 컬럼 목록을 명시적으로 지정하거나(또는 별표/컬럼 변환기를 사용해 암시적으로 지정할 수 있도록) OPTIMIZE ... DEDUPLICATE 구문을 확장했습니다. ... #17846 (Vasily Nemkov).
  • toModifiedJulianDay, fromModifiedJulianDay, toModifiedJulianDayOrNull, fromModifiedJulianDayOrNull FUNCTION을 추가했습니다. 이 FUNCTION들은 프로렙틱 그레고리력(Proleptic Gregorian calendar) 날짜와 Modified Julian Day 번호 간의 변환을 수행합니다. #17750 (PHO).
  • 사용자 정의 TLD 목록을 사용할 수 있도록 firstSignificantSubdomainCustom, cutToFirstSignificantSubdomainCustom 함수를 추가했습니다. #17748 (Azat Khuzhin).
  • 네이티브 TCP 인터페이스를 래핑하기 위한 PROXYv1 프로토콜 지원을 추가했습니다. 프록시에서 전달된 IP 주소(PROXYv1 주소와 HTTP 인터페이스의 X-Forwarded-For 모두에 적용)를 기준으로 QUOTA를 구분해 적용할 수 있습니다. 이는 신뢰할 수 있는 프록시(예: CloudFlare)를 통해서만 ClickHouse에 접근하도록 허용하면서도, 사용자별 리소스 사용량을 원래 IP 주소 기준으로 집계하고자 할 때 유용합니다. #17268를 수정했습니다. #17707 (alexey-milovidov).
  • 이제 clickhouse-client에서 명령을 편집하기 위해 EDITOR를 열 수 있습니다. Alt-Shift-E. #17665 (Amos Bird).
  • XML 텍스트 노드나 속성에 문자열을 넣을 때 문자를 이스케이프하기 위한 encodeXMLComponent FUNCTION을 추가했습니다. #17659 (nauta).
  • DETACH TABLE/VIEW ... PERMANENTLY 구문을 도입하여, 재시작 후에는 명시적으로 다시 요청하지 않는 한 테이블이 자동으로 다시 나타나지 않도록 합니다. 테이블은 여전히 간단한 구문인 ATTACH TABLE을 사용하여 다시 붙일 수 있습니다. #5555를 구현합니다. #13850를 수정합니다. #17642 (filimonov).
  • MergeTree 테이블에서 총 행 수, 바이트 수 및 파트 수에 대한 비동기 메트릭을 추가합니다. 이 수정으로 #11714가 해결됩니다. #17639 (flynn).
  • SQL 외부 페이지네이션을 위해 limitoffset 설정을 추가합니다: #16176 API를 구현할 때 유용합니다. 이 두 설정은 select * from (your_original_select_query) t limit xxx offset xxx;가 추가된 것처럼 SELECT 쿼리에 적용됩니다. #17633 (hexiaoting).
  • 쿼리를 통해 SimpleAggregateFunction 타입을 생성할 수 있도록 새로운 aggregator combinator인 -SimpleState를 추가합니다. 이는 AggregatingMergeTree 엔진의 구체화된 뷰(Materialized View)를 정의하는 데 유용하며, 프로젝션에도 유익합니다. #16853 (Amos Bird).
  • clickhouse-clientclickhouse-localqueries-file 매개변수가 추가되었습니다. #15930 (Maksim Kita).
  • clickhouse-benchmarkquery 매개변수가 추가되었습니다. #17832 (Maksim Kita).
  • EXPLAIN AST가 이제 SELECT 이외의 다른 쿼리도 지원합니다. #18136 (taiyang-li).

실험적 기능

  • 텍스트 n-그램과 shingles의 minHash 및 simHash를 계산하는 함수가 추가되었습니다. 준중복(semi-duplicate) 검색에 사용됩니다. 또한 bitHammingDistancetupleHammingDistance 함수가 추가되었습니다. #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).
  • AggregateFunctionWindowFunnelData에서 PODArrayPODArrayWithStackMemory로 교체하여 windowFunnel FUNCTION의 성능을 향상했습니다. #18817 (flynn).
  • 동기식 INSERT를 수행할 때 분산 테이블(Distributed table)의 세그먼트로 빈 블록이 전송되지 않도록 했습니다. 이로써 #14571 이슈를 해결했습니다. #18775 (alexey-milovidov).
  • StorageMemory 엔진의 읽기 성능을 최적화했습니다. #18052 (Maksim Kita).
  • float를 문자열로 변환할 때 ryu 대신 Dragonbox 알고리즘을 사용하도록 변경했습니다. 이를 통해 float를 문자열로 변환하는 성능이 크게 향상되었습니다. #17831 (Maksim Kita).
  • IPv6CIDRToRange 구현 성능을 향상했습니다. #17569 (vdimir).
  • remerge_sort_lowered_memory_bytes_ratio SETTING을 추가합니다 (리머지 이후 메모리 사용량이 이 비율만큼 줄어들지 않으면 리머지를 수행하지 않습니다). #17539 (Azat Khuzhin).
  • PK에 SimpleAggregateFunction(String)을 사용하는 AggregatingMergeTree의 성능을 향상했습니다. #17109 (Azat Khuzhin).
  • 이제 -If 조합자는 비가상화(devirtualize)되었고, count는 올바르게 벡터화되었습니다. 이 PR을 위한 변경입니다. #17043 (Amos Bird).
  • 매우 많은 MergeTree 테이블을 포함하는 Merge 테이블에서 읽기 성능을 개선합니다. #7748 이슈를 해결합니다. #16988 (Anton Popov).
  • repeat 함수의 성능이 개선되었습니다. #16937 (satanson).
  • float 파싱 성능을 소폭 개선했습니다. #16809 (Maksim Kita).
  • OPTIMIZE TABLE ... FINAL에서 병합된 파티션을 건너뛸 수 있는 기능을 추가했습니다. #15939 (Kruglov Pavel).
  • 부동소수점 수를 파싱하기 위해 Daniel Lemire의 fast_float과 통합했습니다. #16787 (Maksim Kita). 그러나 아직 기본값으로 활성화되어 있지 않습니다. ClickHouse의 기존 단순 float 파서보다 성능이 여전히 낮기 때문입니다.
  • max_distributed_connections를 수정했습니다(이 변경은 prefer_localhost_replica = 1max_threads != max_distributed_connections인 경우에 영향을 줍니다). #17848 (Azat Khuzhin).
  • S3로 데이터를 전송할 때 단일 파트 업로드와 멀티 파트 업로드 중에서 자동으로 선택합니다. 단일 파트 업로드는 새로운 설정 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 구문을 지원합니다. #18095 (Du Chuan).
  • Decimal * Float 형태의 모든 쿼리와 그 반대(Float * Decimal) 형태의 쿼리가 집계 쿼리(예: SELECT sum(decimal_field * 1.1) 또는 SELECT dec_col * float_col)를 포함하여 모두 허용되며, 결과 타입은 Float32 또는 Float64입니다. #18145 (Mike).
  • 간단한 Web UI를 개선했습니다: 요청 히스토리를 추가하고, 공유 기능을 추가하고, 서로 다른 요청 간의 경쟁 상태(race condition)를 방지하고, 요청 진행 중 및 완료 상태 인디케이터를 추가하고, 파비콘을 추가하고, textarea에 포커스가 없을 때도 Ctrl+Enter를 감지합니다. #17293 #17770 (alexey-milovidov).
  • clickhouse-server가 ZooKeeper 서버로 close 요청을 전송하지 않았습니다. #16837 (alesapin).
  • 메모리 제한(max_memory_usage = 1 / max_untracked_memory = 1)이 지나치게 낮게 설정된 경우 서버가 비정상적으로 종료되지 않도록 했습니다. #17453 (Azat Khuzhin).
  • 동일한 타임스탬프를 가진 서로 다른 이벤트가 있을 때 windowFunnel FUNCTION이 비결정적인 결과를 반환하는 문제를 수정합니다. #18884 (Fuwang Hu).
  • Docker: clickhouse 사용자 및 그룹의 uid/gid를 clickhouse-server Docker 이미지에서 고정값(101)으로 명시적으로 설정하도록 했습니다. #19096 (filimonov).
  • Distributed 테이블에 대한 비동기 INSERT: MergeTree 계열과 유사한 두 가지 새로운 설정이 추가되었습니다. fsync_after_insert - 각 INSERT마다 fsync를 수행합니다. INSERT 성능이 저하됩니다. fsync_directories - 모든 작업(쓰기, 이름 변경 등) 이후에 임시 디렉터리(비동기 INSERT에만 사용됨)에 대해 fsync를 수행합니다. #18864 (Azat Khuzhin).
  • SYSTEM KILL 명령이 Docker 환경에서도 동작합니다. 이를 통해 #18847 이슈가 해결되었습니다. #18848 (alexey-milovidov).
  • FETCH PARTITION 실행 시 zk 경로의 매크로를 확장합니다. #18839 (fastio).
  • ALTER TABLE &lt;replicated_table&gt; 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 wide 파트에 대한 adaptive granularity 계산 방식을 개선했습니다. #18223 (alesapin).
  • 이제 Mac에서도 clickhouse install이 작동합니다. 이 플랫폼에는 procfs가 없기 때문이었습니다. #18201 (Nikita Mikhaylov).
  • SHOW ... 쿼리 구문에 대한 힌트가 더 개선되었습니다. #18183 (Du Chuan).
  • 배열 집계 함수 arrayMin, arrayMax, arraySum, arrayAvgInt128, Int256, UInt256 타입을 지원하도록 확장되었습니다. #18147 (Maksim Kita).
  • Set 및 Join 스토리지 설정에 disk 옵션을 추가합니다. #18112 (Grigory Pervakov).
  • 액세스 제어: 이제 테이블 함수 merge()를 사용하려면 데이터 원본이 되는 각 테이블에 대해 현재 사용자에게 SELECT 권한이 있어야 합니다. 이 PR은 #16964를 해결합니다. #18104 #17983 (Vitaly Baranov).
  • 임시 테이블은 이제 생성된 세션에서만 시스템 테이블 system.tablessystem.columns에 표시됩니다. 내부 데이터베이스 _temporary_and_external_tables는 이제 해당 시스템 테이블에서 숨겨지며, 임시 테이블은 is_temporary 플래그가 설정된, 데이터베이스 이름이 비어 있는 테이블로 표시됩니다. #18014 (Vitaly Baranov).
  • 터미널 창 크기가 변경될 때 발생하던 clickhouse-client 렌더링 문제를 수정했습니다. #18009 (Amos Bird).
  • 클라이언트가 연결을 끊을 때 발생하는 이벤트 로그의 상세 수준을 Warning에서 Information으로 낮췄습니다. #18005 (filimonov).
  • DiskS3 디스크의 파일 시스템에서 비어 있거나 잘못된 메타데이터 파일을 강제로 제거합니다. S3는 아직 실험적 기능입니다. #17935 (Pavel Kovalenko).
  • 액세스 제어: allow_introspection_functions=0은 introspection 함수 사용을 허용하지 않지만, 더 이상 해당 함수들에 대한 grant 부여 자체를 막지는 않습니다(권한을 부여받은 사용자가 해당 grant를 사용하려면 allow_introspection_functions=1을 직접 설정해야 합니다). 마찬가지로 allow_ddl=0은 DDL 명령 사용을 허용하지 않지만, 더 이상 해당 명령들에 대한 grant 부여 자체를 막지는 않습니다. #17908 (Vitaly Baranov).
  • 사용성 개선: 컬럼 이름에 대한 힌트 제공. #17112. #17857 (fastio).
  • 두 개의 Merge 테이블이 서로의 데이터를 읽으려 할 때 진단 정보를 추가했습니다. #17854 (徐炘).
  • ClickHouse Docker 이미지를 사용하여 스크립트를 실행할 때 timeout 값을 재정의할 수 있도록 허용했습니다. #17818 (Guillaume Tassery).
  • 시스템 로그 테이블의 엔진 정의 구문을 검사하여 일부 설정 오류가 발생하지 않도록 합니다. 이 구문 검사는 의미적 검사가 아니므로, 존재하지 않는 컬럼이나 표현식 함수와 같은 오류는 테이블이 생성될 때까지 발견되지 않습니다. #17739 (Du Chuan).
  • 연결이 없을 때 RabbitMQ 테이블을 초기화해도 예외를 발생시키지 않도록 변경했습니다(백그라운드에서 자동으로 재연결됩니다). #17709 (Kseniia Sumarokova).
  • Buffer flush 동안 서버 메모리 제한을 더 이상 무시하지 않습니다. #17646 (Azat Khuzhin).
  • use-after-free 오류를 수정하기 위해 ClickHouse-Extras에 포함된 패치된 RocksDB 버전으로 전환했습니다. #17643 (Nikita Mikhaylov).
  • 병렬 파싱을 위한 예외 메시지에 오프셋을 추가했습니다. 이를 통해 #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_columnsasterisk_include_alias_columns 설정이 활성화되어 있을 때 MATERIALIZED / ALIAS와 같은 동적 컬럼도 포함되도록 했습니다. #17462 (Ken Chen).
  • config.xml<ttl> 속성을 사용하여 system log tables에서 오래된 항목을 제거할 수 있도록 TTL을 지정할 수 있게 했습니다. #17438 (Du Chuan).
  • 이제 MySQL 및 PostgreSQL 프로토콜을 통해 서버로 들어오는 쿼리는 구분되는 인터페이스 유형을 갖습니다 (system.query_log 테이블의 interface 컬럼에서 확인할 수 있음). MySQL은 4, PostgreSQL은 5를 사용하며, 이전에 사용되던 1은 이제 네이티브 프로토콜에만 사용됩니다. #17437 (Vitaly Baranov).
  • INSERT ... SELECT ... SETTINGS 쿼리에서 SETTINGS 절의 파싱을 수정합니다. #17414 (Azat Khuzhin).
  • RadixSort에서 메모리 사용량을 정확하게 집계하도록 수정했습니다. #17412 (Nikita Mikhaylov).
  • 서버의 receiveHello에 EOF 검사를 추가하여 Attempt to read after eof 예외가 발생하지 않도록 했습니다. #17365 (Kruglov Pavel).
  • bigint 변환 시 발생할 수 있는 스택 오버플로우를 방지합니다. bigint는 실험적 기능입니다. #17269 (flynn).
  • 이제 set 인덱스가 GLOBAL IN과 함께 동작합니다. 이 변경으로 #17232, #5576이(가) 수정되었습니다. #17253 (Amos Bird).
  • S3 스토리지를 대상으로 하는 요청에서 HTTP 리다이렉트의 최대 허용 횟수를 설정하는 옵션(s3_max_redirects)을 추가했습니다. #17220 (ianton-ru).
  • -OrNull 결합자를 -If, -Merge, -MergeState, -State 결합자와 함께 사용할 때에는 -OrNull을 앞에 위치시켜야 합니다. #16935 (flynn).
  • HTTP 프록시 및 HTTPS S3 엔드포인트 구성을 지원합니다. #16861 (Pavel Kovalenko).
  • S3 클라이언트를 위해 환경 변수, ~/.awsAssumeRole을 사용하는 적절한 인증을 추가했습니다. #16856 (Vladimir Chebotarev).
  • OpenTelemetry span을 더 추가했습니다. span 데이터를 Zipkin으로 내보내는 예제도 추가했습니다. #16535 (Alexander Kuzmenkov).
  • 캐시 딕셔너리: 이를 획득할 때 콜백과 락을 완전히 제거합니다. 키는 「찾을 수 없음(not found)」과 「만료됨(expired)」으로 구분하지 않고, 쿼리 중에 동일한 맵에 저장됩니다. #14958 (Nikita Mikhaylov).
  • 작동하지 않던 fsync_part_directory/fsync_after_insert/in_memory_parts_insert_sync(실험적 기능)을 수정했습니다. #18845 (Azat Khuzhin).
  • MaterializeMySQL 엔진의 중첩 데이터베이스에 Atomic 엔진을 사용할 수 있도록 했습니다. #14849 (tavplubix).

버그 수정 사항

  • 서버가 매우 드문 경우에 연결 수락을 중단하는 문제를 수정합니다. #17542 (Amos Bird, alexey-milovidov).
  • 상수 인자를 가진 이항 함수의 인덱스 분석 로직을 수정하여 잘못된 쿼리 결과가 반환되던 문제를 해결했습니다. 이 수정은 #18364를 해결합니다. #18373 (Amos Bird).
  • 인덱스 비교에 사용되는 타입이 서로 다를 때 인덱스 분석이 잘못될 수 있는 문제를 수정합니다. 이 변경은 #17122를 수정합니다. #17145 (Amos Bird).
  • 머지 시 AIO를 사용한 쓰기를 비활성화했습니다. 이는 머지 과정에서 기본 키 컬럼 데이터가 극히 드물게 손상될 수 있기 때문입니다. #18481 (alesapin).
  • wide 파트에서 compact 파트로의 병합을 제한합니다. 수직 병합의 경우 결과 파트가 손상되는 문제가 발생했습니다. #18381 (Anton Popov).
  • MergeTree*에서 읽기 백오프(read backoff)가 발생했을 때(로그의 메시지 <Debug> MergeTreeReadPool: Will lower number of threads 참조) 쿼리 결과가 불완전해질 수 있는 문제를 수정합니다. 이 문제는 #16423에서 도입되었습니다. #18137를 수정합니다. #18216 (Nikolai Kochetov).
  • rocksdb 라이브러리에서 발생하던 use-after-free 버그를 수정했습니다. #18862 (sundyli).
  • ORC 포맷의 파일을 무한 반복해서 읽는 문제를 수정했습니다(#10580에서 도입됨). 이로써 #19095를 수정합니다. #19134 (Nikolai Kochetov).
  • MergeTree 데이터 writer에서 고정 그레뉼러리티 크기보다 더 큰 마크가 생성될 수 있던 버그를 수정했습니다. #18913을(를) 해결합니다. #19123 (alesapin).
  • 시작 시 ClickHouse가 LowCardinality(Nullable(...))에서 압축 코덱을 읽지 못하고 Attempt to read after EOF 예외를 던지던 버그를 수정합니다. #18340를 수정합니다. #19101 (alesapin).
  • 이전 구문으로 생성된 MergeTree 테이블에 대해 MODIFY TTL 쿼리를 제한하도록 변경했습니다. 이전에는 쿼리가 성공했지만 실제로는 아무 효과도 없었습니다. #19064 (Anton Popov).
  • Enum 타입 인자에 대해 groupUniqArray가 올바른 타입을 반환하도록 했습니다. 이로써 #17875이(가) 해결되었습니다. #19019 (alexey-milovidov).
  • LowCardinality 인수와 함께 함수 ignore를 사용할 때 발생할 수 있는 Expected single dictionary argument for function 오류를 수정했습니다. #14275를 수정합니다. #19016 (Nikolai Kochetov).
  • TinyLog 엔진을 사용하는 테이블에 LowCardinality 컬럼을 삽입할 때의 동작을 수정합니다. #18629를 해결합니다. #19010 (Nikolai Kochetov).
  • Join이 const 컬럼을 구체화(materialize)하려 하지만, 현재 코드는 해당 컬럼이 다른 위치에 있기를 기대합니다. #18982 (Nikita Mikhaylov).
  • optimize_move_functions_out_of_any 최적화를 비활성화했습니다. 이 최적화가 항상 올바르게 동작하는 것은 아니기 때문입니다. 이 변경으로 #18051를 해결했습니다. 또한 #18973를 해결했습니다. #18981 (alexey-milovidov).
  • 쿼리 플랜의 Expression 단계 병합 과정에서 발생할 수 있는 QueryPipeline stream: different number of columns 예외를 수정합니다. 관련 이슈: #18190. #18980 (Nikolai Kochetov).
  • 종료 시 매우 드물게 발생하던 데드락을 수정했습니다. #18977 (tavplubix).
  • ALTER TABLE ... DROP PART 'part_name' 쿼리가 전체 파티션에 대해 중복 제거 블록이 모두 제거되던 잘못된 동작을 수정합니다. #18874를 수정합니다. #18969 (alesapin).
  • ATTACH PARTITION 실행 시 뮤테이션이 초기화되도록 했습니다. #18804. #18935 (fastio).
  • bitmapOrCardinality에서 발생할 수 있는 nullptr 역참조 문제를 수정했습니다. 이로써 #18911을(를) 해결했습니다. #18912 (sundyli).
  • clickhouse-local 종료 시 발생할 수 있는 중단(hang) 문제를 수정합니다. 이 수정으로 #18891가 해결됩니다. #18893 (alexey-milovidov).
  • 외부 데이터베이스(MySQL, ODBC, JDBC)에 대한 쿼리에서 x IN table 형태의 표현이 있을 경우, 쿼리가 잘못 재작성되었습니다. 이번 수정으로 #9756이 해결되었습니다. #18876 (alexey-milovidov).
  • 단항 함수와 널 허용(Nullable) 타입에서 *If 조합자가 제대로 동작하지 않던 문제를 수정했습니다. #18806 (Azat Khuzhin).
  • 전역 설정 network_compression_method가 기본값이 아닌 값으로 전역적으로 설정된 경우 비동기 분산 INSERT가 서버에 의해 거부될 수 있는 문제를 수정합니다. 이 수정으로 #18741가 해결되었습니다. #18776 (alexey-milovidov).
  • Nullable(String)에서 Nullable(Decimal(P, S))CAST하려고 할 때 발생하던 Attempt to read after eof 오류를 수정했습니다. 이제 함수 CAST는 널 허용 문자열 값에서 10진수(Decimal)를 파싱할 수 없을 때 NULL을 반환합니다. #7690을(를) 수정했습니다. #18718 (Winter Zhang).
  • 로깅 관련 사소한 문제를 수정했습니다. #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).
  • thread fuzzer로 발견된, 해당 mutation을 kill한 이후 관련 ALTER 쿼리가 hang된 상태로 남을 수 있는 버그를 수정했습니다. #18518 (alesapin).
  • parseDateTimeBestEffort FUNCTION에서 오전 12시(12AM)를 올바르게 처리하도록 수정했습니다. #18402를 해결합니다. #18449 (vladimir-golovchenko).
  • Nullable(String) 타입의 인자를 사용해 toType(...) 함수들(toDate, toUInt32 등)을 실행할 때 발생하던 value is too short 오류를 수정했습니다. 이제 이러한 함수들은 파싱 오류가 발생하면 예외를 던지는 대신 NULL을 반환합니다. #7673 문제를 해결했습니다. #18445 (tavplubix).
  • SHOW TABLES의 예기치 않은 동작을 수정했습니다. #18431 (fastio).
  • -SimpleState 조합자가 서로 호환되지 않는 인자 타입과 반환 타입을 생성하던 문제를 수정했습니다. #18404 (Amos Bird).
  • Set 또는 Join 테이블을 동시에 사용하면서 system.tables에서 SELECT를 수행할 때 발생할 수 있는 경쟁 상태를 수정했습니다. #18385 (alexey-milovidov).
  • 테이블 system.settings_profile_elements의 데이터 채우기 방식을 수정합니다. 이 PR은 #18231을 해결합니다. #18379 (Vitaly Baranov).
  • 2단계 집계를 사용할 때 Distinct 조합자가 있는 집계 함수에서 발생할 수 있는 충돌을 수정합니다. #17682 문제를 해결합니다. #18365 (Anton Popov).
  • 듀얼 IPv4/IPv6 스택을 사용하는 머신에서 서버가 clickhouse-odbc-bridge 프로세스에 연결할 수 없던 문제를 수정했습니다. 잘못된 쿼리로 ODBC 딕셔너리 업데이트를 수행하거나, 그 과정에서 odbc-bridge 프로세스가 크래시 나던 문제도 수정했습니다. #14489를 해결했을 가능성이 있습니다. #18278 (Denis Glazachev).
  • 액세스 제어: 이제 SELECT count() FROM table는 사용자에게 테이블의 컬럼 하나 이상에 대한 액세스 권한만 있어도 실행할 수 있습니다. 이 PR은 #10639를 수정합니다. #18233 (Vitaly Baranov).
  • 액세스 제어: 이제 SELECT JOIN을 사용할 때 조인된 각 테이블에 대해 SELECT 권한이 필요합니다. 이 PR은 #17654를 해결합니다. #18232 (Vitaly Baranov).
  • Enum 타입과 Int 타입 간의 키 비교 문제를 수정했습니다. 이를 통해 #17989를 해결했습니다. #18214 (Amos Bird).
  • MySQL에서의 복제 기능(실험적 기능). #18186를 수정합니다. #16372를 수정합니다. MaterializeMySQL 데이터베이스 엔진에서 고유 키 변환 문제를 해결합니다. #18211 (Winter Zhang).
  • WITH FILLWITH TIES를 동시에 사용하는 쿼리의 동작 불일치를 수정합니다. #17466. #18188 (hexiaoting).
  • 마지막 컬럼 파싱 중 오류가 발생하는 경우 기본값으로 행을 삽입하는 동작을 수정합니다. #17712를 수정합니다. #18182 (Jianmei Zhang).
  • settings profile을 설정하려고 할 때 발생하던 Unknown setting profile 오류를 수정했습니다. #18167 (tavplubix).
  • 쿼리 MODIFY COLUMN ... REMOVE TTL에서 실제로 컬럼 TTL이 제거되지 않던 오류를 수정했습니다. #18130 (alesapin).
  • S3 URL을 파싱할 때 발생하던 std::out_of_range: basic_string 문제를 수정했습니다. #18059 (Vladimir Chebotarev).
  • DateTime64Date 간 비교를 수정했습니다. #13804#11222 이슈를 해결했습니다. ... #18050 (Vasily Nemkov).
  • MySQL에서의 복제(실험적 기능): #15187#17912를 수정하고, MaterializeMySQL에서 MySQL 프리픽스 인덱스 변환을 지원합니다. #17944 (Winter Zhang).
  • 서버 로그 로테이션을 logger.size 파라미터에 2^32보다 큰 숫자 값을 지정하여 구성했을 때, 로그가 제대로 순환되지 않았습니다. 이 문제가 수정되었습니다. #17905 (Alexander Kuzmenkov).
  • 단순 쿼리 최적화가 ARRAY JOIN을 포함하는(즉, 실제로는 단순하지 않은) 쿼리에 대해 잘못된 결과를 반환했습니다. #17887 (sundyli).
  • topK 집계 FUNCTION에서 발생할 수 있는 세그멘테이션 폴트(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).
  • 서버가 데몬 모드로 실행 중일 때 system.stack_trace 테이블이 비어 있는 문제를 수정합니다. #17630 (Amos Bird).
  • fmt::v7::format_error 예외가 MergeTree 테이블에 대해 백그라운드에서 로그에 기록될 수 있습니다. 이 수정으로 #17613 이슈가 해결됩니다. #17615 (alexey-milovidov).
  • clickhouse-client를 대화형 모드에서 여러 줄 쿼리와 함께 사용할 때, 한 줄 주석이 잘못 처리되어 쿼리의 끝까지 확장되는 문제가 있었습니다. 이 변경으로 #13654가 수정되었습니다. #17565 (alexey-milovidov).
  • 서로 다른 레플리카에서 해당 mutation이 강제 종료되었을 때 ALTER 쿼리가 멈추는 문제를 수정했습니다. #16953를 수정합니다. #17499 (alesapin).
  • ClickHouse가 마크 캐시 크기를 과소 추정하여 메모리 사용량 계산이 잘못되던 문제를 수정했습니다. 이는 마크가 포함된 매우 작은 파일이 많을 때 발생할 수 있습니다. #17496 (alesapin).
  • optimize_redundant_functions_in_order_by 설정이 활성화된 상태에서 ORDER BY가 잘못 동작하던 문제를 수정했습니다. #17471 (Anton Popov).
  • 잘못된 최적화로 인해 DISTINCT 이후에 발생할 수 있었던 중복을 수정합니다. #17294를 해결합니다. #17296 (li chengxiang). #17439 (Nikolai Kochetov).
  • *MergeTree 테이블 백그라운드 작업에서의 높은 CPU 사용률 문제를 수정했습니다. #17416 (tavplubix).
  • LowCardinality 타입을 사용하는 JOIN 테이블에서 읽을 때 발생할 수 있는 충돌을 수정했습니다. #17228 이슈를 해결했습니다. #17397 (Nikolai Kochetov).
  • MySQL에서의 복제(실험적 기능): MySQL SHOW statement의 헤더 불일치 문제를 수정합니다. #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 디스크에 저장된 파트에서 뮤테이션이 정상적으로 동작하지 않을 수 있었던 문제를 수정했습니다(실험적 기능). #17227 (Pavel Kovalenko).
  • fuzzBits 함수 버그 수정. 관련 이슈: #16980. #17051 (hexiaoting).
  • OFFSET만 사용하는 쿼리에 대해 optimize_distributed_group_by_sharding_key를 수정합니다. #16996 (Azat Khuzhin).
  • Distributed 테이블을 기반으로 한 Merge 테이블에서 조인을 사용하는 쿼리 관련 문제를 수정했습니다. #16993 (Azat Khuzhin).
  • 단조 함수가 사용된 ORDER BY에 대한 최적화를 수정합니다. #16107 문제를 해결합니다. #16956 (Anton Popov).
  • 서로 다른 스케일을 가진 DateTime64 타입 간의 잘못된 비교를 수정합니다. #16655 ... #16952를 해결합니다 (Vasily Nemkov).
  • optimize_aggregators_of_group_by_keys 설정이 활성화된 상태에서 group by 및 조인(joins) 시의 최적화 동작을 수정합니다. #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).
  • select_sequential_consistency로 인해 최적화된 단순 count 쿼리와 system 테이블에서 발생하던 일관성 없는 동작을 수정합니다. #16309 (Hao Chen).
  • 존재하지 않는 컬럼에 REPLACE 컬럼 변환기를 적용할 경우 오류가 발생하도록 변경했습니다. #16183 (hexiaoting).
  • RIGHT/FULL JOIN에서 동등 조인이 아닌 ON 표현식이 사용되면 예외를 던집니다. #15162 (Artem Zuikov).

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

  • ClickHouse 바이너리에 대한 간단한 무결성 검사 기능을 추가합니다. 이를 통해 불량 하드웨어로 인한 손상(스토리지 미디어의 비트 로트(bit rot) 또는 RAM의 비트 플립)을 감지할 수 있습니다. #18811 (alexey-milovidov).
  • OpenSSLBoringSSL로 변경합니다. 이로써 sanitizer 관련 문제를 피할 수 있습니다. #12490를 수정합니다. #17502를 수정합니다. #12952를 수정합니다. #18129 (alexey-milovidov).
  • Sys/V init 스크립트를 단순화했습니다. Ubuntu 12.04 및 그 이전 버전에서는 동작하지 않았습니다. #17428 (alexey-milovidov).
  • ./clickhouse install 스크립트가 다수 개선되었습니다. #17421 (alexey-milovidov).
  • 이제 ClickHouse는 가짜 ZooKeeper 역할을 할 수 있습니다. 현재 저장소 구현은 단순히 메모리 내 해시 테이블이며, 서버는 ZooKeeper 프로토콜을 부분적으로만 지원합니다. #16877 (alesapin).
  • TestKeeperStorage(ZooKeeper용 mock)에서 사용되지 않는 watch 목록 삭제 문제를 수정했습니다. #18065 (alesapin).
  • 장애 주입을 위해 SYSTEM SUSPEND 명령을 추가했습니다. 장애 조치(failover) 테스트를 쉽게 수행하는 데 사용할 수 있습니다. #15979를 해결합니다. #18850 (alexey-milovidov).
  • ClickHouse를 lld로 링크할 때 빌드 ID를 생성하도록 했습니다. 일부 환경에서 lld가 기본적으로 빌드 ID를 생성하지 않는 것으로 나타났습니다. 빌드 ID는 크래시 리포트와 내부 분석(introspection)에 사용됩니다. #18808 (alexey-milovidov).
  • 스타일 검사에서 발생한 shellcheck 오류를 수정했습니다. #18566 (Ilya Yatsishin).
  • 시간대 정보를 2020e 버전으로 업데이트합니다. #18531 (alesapin).
  • codespell 경고를 수정합니다. 스타일 검사를 개별 파트로 분리합니다. 스타일 검사 Docker 이미지를 업데이트합니다. #18463 (Ilya Yatsishin).
  • 문서에 남아 있는 충돌 마커를 자동으로 검사합니다. #18332 (alexey-milovidov).
  • stateless 테스트의 flaky 여부를 검사하기 위해 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 데몬을 사용합니다. #17671 (alesapin).
  • Sentry가 활성화된 경우 공식 빌드, 메모리, CPU 및 여유 디스크 공간 정보를 Sentry로 전송합니다. Sentry는 ClickHouse 개발자를 돕기 위한 옵트인(opt-in) 기능입니다. #17279를 해결합니다. #17543 (alexey-milovidov).
  • clickhouse-copier 코드에 초기화되지 않은 변수가 존재했습니다. #17363 (Nikita Mikhaylov).
  • #17309MSan 리포트 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).

2020년 변경 로그