2023 변경 로그
목차
ClickHouse v23.12 릴리스, 2023-12-28
ClickHouse v23.11 릴리스, 2023-12-06
ClickHouse v23.10 릴리스, 2023-11-02
ClickHouse v23.9 릴리스, 2023-09-28
ClickHouse v23.8 LTS 릴리스, 2023-08-31
ClickHouse v23.7 릴리스, 2023-07-27
ClickHouse v23.6 릴리스, 2023-06-30
ClickHouse v23.5 릴리스, 2023-06-08
ClickHouse v23.4 릴리스, 2023-04-26
ClickHouse v23.3 LTS 릴리스, 2023-03-30
ClickHouse v23.2 릴리스, 2023-02-23
ClickHouse v23.1 릴리스, 2023-01-25
2022년 변경 로그
ClickHouse 23.12 릴리스(2023-12-28). 발표 자료, 영상
하위 호환되지 않는 변경 사항
- TTL 표현식에서 비결정적 함수(non-deterministic function)에 대한 검사 로직을 수정합니다. 이전에는 일부 경우에 비결정적 함수를 사용하는 TTL 표현식을 생성할 수 있었고, 이는 나중에 정의되지 않은 동작을 유발할 수 있었습니다. 이 변경으로 #37250을(를) 해결합니다. 기본적으로 테이블의 어떤 컬럼에도 의존하지 않는 TTL 표현식은 허용되지 않습니다.
SET allow_suspicious_ttl_expressions = 1또는SET compatibility = '23.11'을(를) 사용하면 다시 허용할 수 있습니다. #37286을(를) 종료합니다. #51858 (Alexey Milovidov). - MergeTree 설정
clean_deleted_rows는 더 이상 사용되지(deprecated) 않으며, 이제 아무 효과도 없습니다.OPTIMIZE에 대한CLEANUP키워드는 기본적으로 허용되지 않습니다(allow_experimental_replacing_merge_with_cleanup설정으로 잠금을 해제할 수 있습니다). #58267 (Alexander Tokmakov). 이 변경으로 #57930을(를) 해결합니다. #54988을(를) 종료합니다. #54570을(를) 종료합니다. #50346을(를) 종료합니다. #47579을(를) 종료합니다. 이 기능은 바람직하지 않기 때문에 제거해야 합니다. 다른 선택지가 없으므로 가능한 한 빨리 제거해야 합니다. #57932 (Alexey Milovidov).
신규 기능
- #33919에서 요청된 Refreshable materialized view(갱신 가능 구체화 뷰)를 구현했습니다. #56946 (Michael Kolupaev, Michael Guzov).
PASTE JOIN을 도입하여ON절 없이 행 번호만으로 테이블을 조인할 수 있습니다. 예:SELECT * FROM (SELECT number AS a FROM numbers(2)) AS t1 PASTE JOIN (SELECT number AS a FROM numbers(2) ORDER BY a DESC) AS t2. #57995 (Yarik Briukhovetskyi).- 이제
ORDER BY절에서ALL을 지정할 수 있으며, 이는 ClickHouse가SELECT절의 모든 컬럼을 기준으로 결과를 정렬한다는 뜻입니다. 예:SELECT col1, col2 FROM tab WHERE [...] ORDER BY ALL. #57875 (zhongyuankai). - 새로운 mutation 명령어
ALTER TABLE <table> APPLY DELETED MASK가 추가되었습니다. 이 명령어는 경량한 삭제(lightweight delete)로 기록된 마스크 적용을 강제하고, 삭제된 것으로 표시된 행을 디스크에서 제거할 수 있게 합니다. #57433 (Anton Popov). - 핸들러
/binary는 ClickHouse 바이너리 내부 심볼을 시각적으로 확인할 수 있는 뷰어를 제공합니다. #58211 (Alexey Milovidov). - Sqids(https://sqids.org/)를 생성하는 새로운 SQL 함수
sqid가 추가되었습니다. 예시:SELECT sqid(125, 126). #57512 (Robert Schulze). - FFT를 사용하여 시계열의 주기를 감지하는 새로운 FUNCTION
seriesPeriodDetectFFT를 추가합니다. #57574 (Bhavna Jindal). - Keeper가 트래픽을 수신할 준비 상태인지 확인할 수 있는 HTTP 엔드포인트를 추가합니다. #55876 (Konstantin Bogdanov).
- 스키마 추론(schema inference)을 위한
union모드를 추가합니다. 이 모드에서는 결과 테이블 스키마가 모든 파일의 스키마 합집합이 됩니다(즉, 각 파일로부터 스키마를 추론합니다). 스키마 추론 방식은schema_inference_modeSETTING으로 제어되며, 가능한 값은default와union두 가지입니다. #55428 이슈를 해결합니다. #55892 (Kruglov Pavel). - CSV 형식에서 문자열로부터 숫자를 추론할 수 있도록 하는 새로운 설정
input_format_csv_try_infer_numbers_from_strings가 추가되었습니다. #56455를 해결합니다. #56859 (Kruglov Pavel). - 데이터베이스 또는 테이블의 수가 설정 가능한 임계값을 초과하면 사용자에게 경고를 표시합니다. #57375 (凌涛).
HASHED_ARRAY(및COMPLEX_KEY_HASHED_ARRAY) 레이아웃을 사용하는 딕셔너리는HASHED와 마찬가지로SHARDS(세그먼트)를 지원합니다. #57544 (vdimir).- 메모리 상의 총 기본 키 바이트 수와 총 할당된 기본 키 바이트 수에 대한 비동기 메트릭을 추가합니다. #57551 (Bharat Nallan).
SHA512_256FUNCTION을 추가했습니다. #57645 (Bharat Nallan).formatReadableSize의 별칭(alias)으로FORMAT_BYTES를 추가했습니다. #57592 (Bharat Nallan).- 선택적 세션 토큰을
s3테이블 함수에 전달할 수 있도록 했습니다. #57850 (Shani Elharrar). - 새 설정인
http_make_head_request가 도입되었습니다. 이 설정을 끄면 URL 테이블 엔진은 파일 크기를 확인하기 위해 HEAD 요청을 보내지 않습니다. 이는 비효율적이거나 잘못 구성되었거나 해당 기능을 지원하지 않는 HTTP 서버를 지원하기 위해 필요합니다. #54602 (Fionera). - 이제 인덱스 정의(기본 키가 아닌 인덱스)에서 ALIAS 컬럼을 참조할 수 있습니다(이슈 #55650). 예:
CREATE TABLE tab(col UInt32, col_alias ALIAS col + 1, INDEX idx (col_alias) TYPE minmax) ENGINE = MergeTree ORDER BY col;. #57546 (Robert Schulze). - S3 디스크를 읽기 전용으로 지정할 수 있는 새로운
readonly설정이 추가되었습니다. 이는 기본 S3 버킷에 대한 읽기 전용 권한만 있는 경우에도s3_plain타입 디스크에 테이블을 생성할 수 있어 유용합니다. #57977 (Pengyuan Bian). - MergeTree 테이블에서 기본 키 분석이 이제 가상 컬럼
_part_offset(선택적으로_part포함)을 사용하는 조건식에도 적용됩니다. 이 기능은 특수한 형태의 보조 인덱스로 활용할 수 있습니다. #58224 (Amos Bird).
성능 개선
- FINAL 처리 중에 MergeTree 테이블에서 서로 교차하지 않는 파트 범위를 추출합니다. 이렇게 하면 이 교차하지 않는 파트 범위에 대해 추가적인 FINAL 로직을 수행하지 않아도 됩니다. 동일한 기본 키를 가진 중복 값의 개수가 적은 경우, 성능은 FINAL을 사용하지 않았을 때와 거의 동일합니다.
do_not_merge_across_partitions_select_final설정이 활성화된 경우 MergeTree FINAL의 조회 성능을 향상합니다. #58120 (Maksim Kita). - 버퍼를 거쳐 복사하는 대신 S3 서버 측 복사를 사용하여 S3 디스크 간 복사를 수행하도록 했습니다.
BACKUP/RESTORE작업 및clickhouse-disks copy명령의 성능이 향상되었습니다. #56744 (MikhailBurdukov). - Hash JOIN은
max_joined_block_size_rows설정을 준수하며ALL JOIN의 경우 큰 블록을 생성하지 않습니다. #56996 (vdimir). - 집계에 사용된 메모리를 더 이른 시점에 해제합니다. 이렇게 하면 불필요한 외부 집계를 피할 수 있습니다. #57691 (Nikolai Kochetov).
- 문자열 직렬화 성능을 향상했습니다. #57717 (Maksim Kita).
Merge엔진 테이블에 대해 단순 COUNT 최적화를 지원합니다. #57867 (skyoct).- 일부 상황에서 집계를 최적화했습니다. #57872 (Anton Popov).
hasAny함수가 이제 전체 텍스트 스키핑 인덱스를 활용할 수 있습니다. #57878 (Jpnock).- 함수
if(cond, then, else)(및 그 별칭cond ? then : else)이 분기 없는 방식으로 평가되도록 최적화되었습니다. #57885 (zhanglistar). - MergeTree는 파티션 키 표현식이 프라이머리 키 표현식에 포함된 컬럼만으로 구성된 경우
do_not_merge_across_partitions_select_finalSETTING 값을 자동으로 결정합니다. #58218 (Maksim Kita). - 네이티브 타입에서
MIN및MAX연산을 더 빠르게 동작하도록 최적화했습니다. #58231 (Raúl Marín). - 파일 시스템 캐시에
SLRU캐시 정책을 구현합니다. #57076 (Kseniia Sumarokova). - 백그라운드 페치용 엔드포인트당 연결 수 제한이
15에서background_fetches_pool_size설정 값으로 상향 조정되었습니다. - MergeTree 수준 설정replicated_max_parallel_fetches_for_host는 더 이상 사용되지 않습니다. - MergeTree 수준 설정replicated_fetches_http_connection_timeout,replicated_fetches_http_send_timeout,replicated_fetches_http_receive_timeout는 Server 수준으로 이동되었습니다. - Server 수준 설정 목록에keep_alive_timeout이 추가되었습니다. #57523 (Nikita Mikhaylov). system.filesystem_cache에 대한 쿼리가 메모리를 많이 사용하지 않도록 최적화했습니다. #57687 (Kseniia Sumarokova).- 문자열 역직렬화 과정의 메모리 사용량을 줄였습니다. #57787 (Maksim Kita).
- Enum에 대한 더 효율적인 생성자를 도입했습니다. Enum의 값 개수가 매우 많은 경우에 유용합니다. #57887 (Duc Canh Le).
- 파일 시스템 캐시에서의 읽기 동작이 개선되었습니다. 이제 항상
pread메서드를 사용합니다. #57970 (Nikita Taranov). - 논리식 옵티마이저에서 AND notEquals 연산 체인에 대한 최적화를 추가했습니다. 이 최적화는 실험적 Analyzer가 활성화되어 있을 때에만 사용할 수 있습니다. #58214 (Kevin Mingtarja).
개선 사항
- Keeper에서 soft memory limit(소프트 메모리 한도)를 지원합니다. 메모리 사용량이 허용 최대치에 근접하면 요청을 거부합니다. #57271 (Han Fei). #57699 (Han Fei).
- 분산 테이블로의 INSERT가 변경된 클러스터 구성을 올바르게 처리하도록 개선했습니다. 클러스터 노드 목록이 동적으로 업데이트되면 분산 테이블의 Directory Monitor가 이를 반영합니다. #42826 (zhongyuankai).
- 일관성 없는 머지 매개변수로 복제된 테이블(Replicated Table)을 생성하지 못하도록 했습니다. #56833 (Duc Canh Le).
system.tables에 압축되지 않은 크기를 표시합니다. #56618. #57186 (Chen Lixiang).Distributed테이블에 대해 대응하는 쿼리 수준 설정과 유사한skip_unavailable_shards설정을 추가했습니다. #43666을(를) 해결합니다. #57218 (Gagan Goel).substring함수(별칭:substr,mid)를 이제Enum타입에도 사용할 수 있게 되었습니다. 이전에는 첫 번째 함수 인자가String또는FixedString타입의 값이어야 했습니다. 이 변경으로 MySQL 인터페이스를 통해 Tableau와 같은 서드파티 도구와의 호환성이 향상됩니다. #57277 (Serge Klochkov).- 이제
format함수는 임의의 인수 타입을 지원합니다(기존에는String및FixedString인수만 지원). 이를 통해SELECT format('The {0} to all questions is {1}', 'answer', 42)와 같은 쿼리를 실행할 수 있습니다. #57549 (Robert Schulze). date_trunc함수의 첫 번째 인수에서 대소문자를 구분하지 않고 사용할 수 있습니다. 이제SELECT date_trunc('day', now())와SELECT date_trunc('DAY', now())두 경우 모두 지원됩니다. #57624 (Yarik Briukhovetskyi).- 테이블이 존재하지 않을 때 개선된 안내 메시지를 제공합니다. #57342 (Bharat Nallan).
- 쿼리 실행 시
max_partition_size_to_drop및max_table_size_to_drop서버 설정을 재정의할 수 있도록 했습니다. #57452 (Jordi Villar). - JSON 형식에서 이름 없는 튜플에 대한 추론이 약간 더 개선되었습니다. #57751 (Kruglov Pavel).
- Keeper에 연결할 때 read-only 플래그 지원을 추가했습니다(#53749 수정). #57479 (Mikhail Koviazin).
- 디스크에서 배치를 복구하는 과정에서 「No such file or directory」 오류로 인해 분산 전송이 멈출 수 있던 문제를 수정합니다.
distributed_directory_monitor_max_sleep_time_ms가 5분을 초과하는 경우 발생할 수 있는system.distribution_queue의error_count관련 잠재적 문제를 수정합니다. 비동기 INSERT 실패를 추적하기 위한 프로필 이벤트DistributedAsyncInsertionFailures를 도입합니다. #57480 (Azat Khuzhin). MaterializedPostgreSQL(실험적 기능)에서 PostgreSQL 생성 컬럼과 컬럼 기본값을 지원합니다. #40449 이슈를 해결합니다. #57568 (Kseniia Sumarokova).- 서버를 재시작하지 않고도 filesystem cache 관련 일부 설정 변경을 적용할 수 있도록 했습니다. #57578 (Kseniia Sumarokova).
- 빈 배열을 포함한 PostgreSQL 테이블 구조를 올바르게 처리하도록 개선했습니다. #57618 (Mike Kot).
- 마지막 서버 재시작 이후 발생한 총 오류 발생 횟수를
ClickHouseErrorMetric_ALL메트릭으로 노출합니다. #57627 (Nikita Mikhaylov). - 구성 파일에서
from_env/from_zk참조를 사용하고replace=1이 설정된 비어 있지 않은 요소를 포함하는 노드를 허용합니다. #57628 (Azat Khuzhin). - 퍼징을 위해 다량의 비정상적인 JSON을 생성할 수 있는 테이블 함수
fuzzJSON. #57646 (Julia Kartseva). - IPv6를 UInt128로 변환하고 2진 산술 연산을 수행할 수 있도록 했습니다. #57707 (Yakov Olkhovskiy).
async inserts deduplication cache에 대해 캐시 업데이트를 얼마나 오래 대기할지 지정하는 설정을 추가했습니다.async_block_ids_cache_min_update_interval_ms설정은 사용 중단되었습니다. 이제 캐시는 충돌이 발생하는 경우에만 업데이트됩니다. #57743 (alesapin).sleep()함수는 이제KILL QUERY로 취소할 수 있습니다. #57746 (Vitaly Baranov).- 실험적
Replicated데이터베이스에서는 지원되지 않으므로Replicated테이블 엔진에 대한CREATE TABLE ... AS SELECT쿼리를 허용하지 않습니다. 자세한 내용은 #35408을 참조하십시오. #57796 (Nikolay Degterinsky). - 외부 데이터베이스에 대한 쿼리 변환을 수정 및 개선하여 재귀적으로 모든 호환 가능한 조건(predicate)을 얻을 수 있도록 했습니다. #57888 (flynn).
- 파일 시스템 캐시 크기를 동적으로 다시 로드할 수 있도록 지원합니다. #57866 이슈를 해결합니다. #57897 (Kseniia Sumarokova).
- SIGRTMIN이 차단된 스레드(이러한 스레드는 Apache rdkafka와 같은 품질이 낮은 외부 라이브러리에 존재할 수 있습니다)에 대해
system.stack_trace를 올바르게 지원합니다. #57907 (Azat Khuzhin). 또한 의미가 없을 때storage_system_stack_trace_pipe_read_timeout_ms를 기다리지 않도록, 해당 신호가 차단되어 있지 않은 스레드에만 신호를 보내도록 합니다. #58136 (Azat Khuzhin). - 쿼럼 INSERT 검사에서 Keeper 장애를 허용하도록 했습니다. #57986 (Raúl Marín).
- 최대 RSS(peak RSS)인
MemoryResidentMax를 system.asynchronous_metrics에 추가합니다. #58095 (Azat Khuzhin). - 이 PR을 통해 기본 리전이 아닌 경우에도 리전을 명시하지 않고 s3 스타일 링크(
https://및s3://)를 사용할 수 있습니다. 또한 사용자가 잘못된 리전을 지정한 경우 올바른 리전을 자동으로 찾습니다. #58148 (Yarik Briukhovetskyi). clickhouse-format --obfuscate는 Settings, MergeTreeSettings, time zone을 인식하고 이들의 이름은 변경하지 않고 그대로 유지합니다. #58179 (Alexey Milovidov).ZipArchiveWriter에 명시적인finalize()함수를 추가했습니다.ZipArchiveWriter의 지나치게 복잡한 코드를 단순화했습니다. 이로써 #58074가 수정되었습니다. #58202 (Vitaly Baranov).- 경로가 같은 캐시는 동일한 캐시 객체를 사용하도록 했습니다. 이 동작은 원래 존재했으나 23.4에서 깨졌습니다. 경로가 같은 이러한 캐시가 서로 다른 캐시 설정 집합을 사용할 경우, 이를 허용하지 않는다는 예외가 발생합니다. #58264 (Kseniia Sumarokova).
- 병렬 레플리카(실험적 기능): 사용하기 편리한 설정 #57542 (Igor Nikonov).
- 병렬 레플리카(실험적 기능): announcement 응답 처리 방식 개선 #57749 (Igor Nikonov).
- Parallel replicas(실험적 기능):
ParallelReplicasReadingCoordinator에서min_number_of_marks값을 보다 엄격하게 준수하도록 개선 #57763 (Nikita Taranov). - 병렬 레플리카(실험적 기능): IN (subquery)를 사용할 때 병렬 레플리카를 비활성화합니다 #58133 (Igor Nikonov).
- 병렬 레플리카(실험적 기능): 프로파일링 이벤트 'ParallelReplicasUsedCount'를 추가합니다. #58173 (Igor Nikonov).
- HEAD와 같은 POST가 아닌 요청은 GET과 마찬가지로 읽기 전용으로 동작합니다. #58060 (San).
system.part_log에bytes_uncompressed컬럼을 추가합니다. #58167 (Jordi Villar).system.backups및system.backup_log테이블에 기본 백업 이름을 추가했습니다 #58178 (Pradeep Chhetri).- clickhouse-local에서 명령줄로 쿼리 매개변수를 지정할 수 있는 기능을 추가했습니다 #58210 (Pradeep Chhetri).
빌드/테스트/패키징 개선
- 더 많은 설정을 무작위로 변경합니다. #39663 (Anton Popov).
- CI에서 비활성화된 최적화를 무작위로 선택합니다. #57315 (Raúl Marín).
- macOS에서 Azure 관련 테이블 엔진 및 함수 사용을 허용합니다. #51866 (Alexey Milovidov).
- 이제 ClickHouse Fast Test는 GLibc 대신 Musl을 사용합니다. #57711 (Alexey Milovidov). 완전히 정적인 Musl 빌드는 CI에서 다운로드할 수 있습니다.
- 모든 커밋마다 ClickBench를 실행합니다. 이로써 #57708 이슈가 종료됩니다. #57712 (Alexey Milovidov).
- 외부 라이브러리에서 문제를 일으킬 수 있는 C/POSIX
select함수 사용을 제거합니다. #57467 (Igor Nikonov). - ClickHouse Cloud에서만 사용 가능하던 설정은 편의를 위해 오픈 소스 ClickHouse 빌드에서도 제공됩니다. #57638 (Nikita Mikhaylov).
버그 수정(공식 안정 버전에서 사용자에게 직접 보이는 잘못된 동작)
- TTL GROUP BY에서 정렬 순서가 깨질 수 있던 문제를 수정했습니다. #49103 (Nikita Mikhaylov).
- 수정:
lttb버킷 전략을 변경하여 첫 번째 버킷과 마지막 버킷에는 각각 하나의 포인트만 포함되도록 했습니다 #57003 (FFish). - 오류 발생 후
Template포맷 동기화 과정에서 발생할 수 있는 교착 상태를 수정했습니다 #57004 (Kruglov Pavel). - 많은 오류를 건너뛰며 파일을 파싱할 때 발생하던 조기 종료를 수정합니다 #57006 (Kruglov Pavel).
dictionarytable function을 통해 딕셔너리 ACL이 우회되는 것을 방지합니다. #57362 (Salvatore Mesoraca).- Fuzzer로 발견된 「non-ready set」 오류의 또 다른 사례를 수정했습니다. #57423 (Nikolai Kochetov).
- PostgreSQL의
array_ndims사용과 관련된 여러 문제를 수정합니다. #57436 (Ryan Jacobs). - 쓰기 락 타임아웃 이후 발생하는 RWLock 일관성 문제를 수정했습니다 #57454 (Vitaly Baranov). 쓰기 락 타임아웃 이후 발생하는 RWLock 일관성 문제를 다시 수정했습니다 #57733 (Vitaly Baranov).
- 수정: VIEW 체인으로 푸시를 구성할 때 일시적인 컬럼을 제외하지 않도록 수정 #57461 (Yakov Olkhovskiy).
- MaterializedPostgreSQL(실험적 기능): 이슈 #41922를 수정하고 #41923에 대한 테스트를 추가했습니다 #57515 (Kseniia Sumarokova).
- 복제된 액세스 엔티티 관리를 위해 사용하는 GRANT/REVOKE 쿼리에서 ON CLUSTER 절을 무시하도록 했습니다. #57538 (MikhailBurdukov).
- clickhouse-local에서 발생하던 충돌을 수정했습니다 #57553 (Nikolay Degterinsky).
- Hash JOIN 관련 수정입니다. #57564 (vdimir).
- PostgreSQL 소스의 잠재적인 오류를 수정함 #57567 (Kseniia Sumarokova).
- 중첩된 LowCardinality를 사용하는 Hash JOIN에서 데이터 타입 보정 문제를 수정했습니다. #57614 (vdimir).
system.stack_trace에서의 병렬 읽기를 적절히 차단하여 hang 현상이 발생하지 않도록 했습니다. #57641 (Azat Khuzhin).- 희소 컬럼에서
any(...) RESPECT NULL집계 시 발생하던 오류를 수정했습니다 #57710 (Azat Khuzhin). - 단항 연산자 파싱 오류를 수정합니다 #57713 (Nikolay Degterinsky).
- 실험적인 테이블 엔진
MaterializedPostgreSQL의 의존성 로딩 문제를 수정합니다. #57754 (Kseniia Sumarokova). - 클러스터에서 BACKUP/RESTORE를 수행할 때 연결이 끊긴 노드에 대한 재시도 로직을 수정합니다 #57764 (Vitaly Baranov).
- 부분적으로 구체화된 프로젝션(projection)이 있는 경우 외부 집계 결과를 수정했습니다. #57790 (Anton Popov).
*Map조합자를 사용하는 집계 함수의 머지 동작을 수정했습니다 #57795 (Anton Popov).- 버그 때문에
system.kafka_consumers를 비활성화했습니다. #57822 (Azat Khuzhin). - Merge JOIN에서 LowCardinality 키 지원 문제를 수정했습니다. #57827 (vdimir).
- 샘플 블록과 관련된
InterpreterCreateQuery의 문제를 수정했습니다. #57855 (Maksim Kita). - PostgreSQL에서 가져온 named collection에서
addresses_expr가 무시되었습니다. #57874 (joelynch). - BLAKE3 (Rust)에서 잘못된 메모리 접근을 수정했습니다. #57876 (Raúl Marín). 이후 더 나은 메모리 안전성을 위해 Rust 구현을 C++로 재작성했습니다. #57994 (Raúl Marín).
CREATE INDEX에서 함수 이름을 정규화합니다 #57906 (Alexander Tokmakov).- 첫 번째 요청이 발생하기 전에 사용 불가능한 레플리카를 처리하는 방식을 수정합니다 #57933 (Nikita Taranov).
- 리터럴 별칭 잘못된 분류 수정 #57988 (Chen768959).
- Keeper에서의 잘못된 전처리를 수정합니다. #58069 (Antonio Andelic).
UTF32Encoding과 관련된Poco라이브러리의 정수 오버플로 문제를 수정했습니다. #58073 (Andrey Fedotov).- 큰 정수 값을 가지는 스칼라 서브쿼리가 존재하는 경우 병렬 레플리카(실험적 기능)의 동작을 수정했습니다. #58118 (Alexey Milovidov).
- 범위를 벗어나는
DateTime값에 대해accurateCastOrNull동작을 수정했습니다 #58139 (Andrey Zvonov). - MergeTree의 wide part에서 subcolumns를 읽는 중 발생할 수 있는
PARAMETER_OUT_OF_BOUND오류를 수정합니다 #58175 (Kruglov Pavel). - 서브쿼리가 매우 많은 CREATE VIEW 실행 시 발생하던 속도 저하를 수정합니다 #58220 (Tao Wang).
- JSONCompactEachRow의 병렬 파싱을 수정했습니다 #58181 (Alexey Milovidov). #58250 (Kruglov Pavel).
ClickHouse 23.11 릴리스(2023-12-06). 발표 자료, 영상
하위 호환되지 않는 변경 사항
- 기본 ClickHouse 서버 설정 파일에서 이제
default사용자에 대해access_management(SQL 쿼리를 통한 사용자 조작)와named_collection_control(SQL 쿼리를 통한 named collection 조작)이 기본적으로 활성화됩니다. 이로써 #56482가 해결됩니다. #56619 (Alexey Milovidov). - 윈도우 함수에서
RESPECT NULLS/IGNORE NULLS에 대한 여러 가지 개선이 이루어졌습니다. 이를 집계 함수로 사용하고, 이러한 수정자를 포함한 집계 함수의 상태를 저장한 경우 호환되지 않게 될 수 있습니다. #57189 (Raúl Marín). - 최적화
optimize_move_functions_out_of_any가 제거되었습니다. #57190 (Raúl Marín). parseDateTime함수의 포매터%l/%k/%c는 이제 앞에 0이 붙지 않은 시/월도 파싱할 수 있습니다. 예:select parseDateTime('2023-11-26 8:14', '%F %k:%i')가 이제 동작합니다. 이전처럼 두 자리 수를 요구하는 동작으로 되돌리려면parsedatetime_parse_without_leading_zeros = 0을 설정하십시오.formatDateTime함수 역시 이제 앞에 0이 붙지 않은 시/월을 출력할 수 있습니다. 이 동작은formatdatetime_format_without_leading_zeros설정으로 제어되며, 기존 사용 사례를 깨뜨리지 않기 위해 기본값은 비활성화되어 있습니다. #55872 (Azat Khuzhin).- 더 이상
Decimal타입 인수를 사용하여 집계 함수avgWeighted를 사용할 수 없습니다. 우회 방법: 인수를Float64로 변환하십시오. 이로써 #43928가 해결됩니다. 또한 #31768과 #56435도 해결됩니다. 이 함수를 materialized view나 프로젝션에서Decimal인수와 함께 사용한 경우 support@clickhouse.com으로 문의하십시오. 집계 함수sumMap의 오류를 수정하는 과정에서 성능이 약 1.5~2배 정도 느려졌습니다. 어차피 이 함수는 쓸모가 없기 때문에 문제가 되지 않습니다. 이로써 #54955, #53134, #55148가 해결됩니다. 함수groupArraySample의 버그도 수정되었습니다. 하나의 쿼리에서 둘 이상의 집계 상태가 생성되는 경우 동일한 랜덤 시드를 사용하는 문제가 있었습니다. #56350 (Alexey Milovidov).
새 기능
- 데이터베이스와 테이블을 비동기적으로 로드하기 위한 서버 설정
async_load_databases가 추가되었습니다. 서버 시작 시간을 단축합니다.Ordinary,Atomic,Replicated엔진을 사용하는 데이터베이스에 적용됩니다. 이러한 데이터베이스의 테이블은 메타데이터를 비동기적으로 로드합니다. 테이블에 대한 쿼리가 실행되면 로드 작업의 우선순위를 높이고, 작업이 완료될 때까지 대기합니다. 내부 상태 분석을 위한 새 테이블system.asynchronous_loader가 추가되었습니다. #49351 (Sergei Trifonov). - 시스템 테이블
blob_storage_log를 추가했습니다. 이를 통해 S3 및 기타 객체 스토리지에 기록된 모든 데이터를 감사할 수 있습니다. #52918 (vdimir). STATISTICS를 사용해PREWHERE조건의 순서를 보다 효율적으로 결정합니다. #53240 (Han Fei).- Keeper 프로토콜에 압축 지원을 추가했습니다. ClickHouse에서는
zookeeper섹션 내에서use_compression플래그를 사용하여 이를 활성화할 수 있습니다. Apache ZooKeeper는 압축을 지원하지 않고 ClickHouse Keeper만 압축을 지원한다는 점에 유의하십시오. #49507을(를) 해결했습니다. #54957 (SmitaRKulkarni). storage_metadata_write_full_object_key기능을 도입합니다. 이 설정을true로 지정하면 메타데이터 파일이 새 형식으로 기록됩니다. 이 형식에서는 ClickHouse가 전체 원격 객체 키를 메타데이터 파일에 저장하여 더 높은 유연성과 최적화를 제공합니다. #55566 (Sema Checherinda).- 이름이 지정된 컬렉션의 필드가 덮어써지지 않도록 보호하는 새로운 설정과 구문을 추가합니다. 이는 악의적인 사용자가 비밀 정보에 무단으로 접근하는 것을 방지하기 위한 것입니다. #55782 (Salvatore Mesoraca).
- 모든 시스템 로그 테이블에
hostname컬럼을 추가합니다. 이는 시스템 테이블을 복제, 공유 또는 분산 테이블로 구성하는 경우에 유용합니다. #55894 (Bharat Nallan). CHECK ALL TABLES쿼리를 추가했습니다. #56022 (vdimir).- MySQL의
FROM_DAYS와 유사한 FUNCTIONfromDaysSinceYearZero를 추가했습니다. 예를 들어SELECT fromDaysSinceYearZero(739136)은2023-09-08을 반환합니다. #56088 (Joanna Hulboj). - ClickHouse를 사용하지 않고도 백업을 조회하고 그 안에서 정보를 추출할 수 있도록 하는 외부 Python 도구가 추가되었습니다. #56268 (Vitaly Baranov).
preferred_optimize_projection_name라는 새로운 설정을 도입했습니다. 이 설정이 빈 문자열이 아닌 값으로 설정되어 있으면, 가능한 경우 모든 후보 중에서 선택하는 대신 지정된 projection이 사용됩니다. #56309 (Yarik Briukhovetskyi).- 리더 역할을 양도하거나 사임하기 위한 4자 명령을 추가합니다(https://github.com/ClickHouse/ClickHouse/issues/56352). #56354 (Pradeep Chhetri). #56620 (Pradeep Chhetri).
- 새로운 SQL 함수
arrayRandomSample(arr, k)가 추가되었습니다. 이 함수는 입력 배열에서 k개의 원소를 샘플링하여 반환합니다. 이전에는SELECT arrayReduce('groupArraySample(3)', range(10))과 같은 덜 편리한 구문으로만 유사한 기능을 구현할 수 있었습니다. #56416 (Robert Schulze). .npy파일에서Float16타입 데이터를 사용할 수 있도록 지원을 추가했습니다. #56344 이슈를 해결합니다. #56424 (Yarik Briukhovetskyi).- Tableau Online과의 호환성을 향상하기 위해 시스템 뷰
information_schema.statistics를 추가했습니다. #56425 (Serge Klochkov). - 바이너리를 분석할 때 유용한
system.symbols테이블을 추가했습니다. #56548 (Alexey Milovidov). - 구성 가능한 대시보드. 차트용 쿼리는 이제 기본적으로 새로운
system.dashboards테이블을 사용하는 쿼리를 통해 로드됩니다. #56771 (Sergei Trifonov). user_files디렉터리에 공유 파일 시스템(NFS 등)을 마운트한 경우에 유용한fileCluster테이블 함수를 도입했습니다. #56868 (Andrey Zvonov).s3/file/hdfs/url/azureBlobStorage엔진들에 파일 크기(바이트)를 나타내는_size가상 컬럼을 추가합니다. #57126 (Kruglov Pavel).- Prometheus 엔드포인트를 통해 서버가 마지막으로 재시작된 이후 발생한 각 오류 코드별 오류 개수를 제공합니다. #57209 (Nikita Mikhaylov).
- ClickHouse Keeper는
/keeper/availability-zone경로에 자신이 실행 중인 가용 영역을 보고합니다. 이는<availability_zone><value>us-west-1a</value></availability_zone>를 통해 구성할 수 있습니다. #56715 (Jianfei Hu). - ALTER materialized_view MODIFY QUERY를 더 이상 실험적 기능이 아니도록 하고
allow_experimental_alter_materialized_view_structure설정을 사용 중단합니다. #15206을(를) 수정합니다. #57311 (alesapin). - 이제
join_algorithm설정이 지정된 순서를 준수합니다 #51745 (vdimir). - Protobuf 포맷에서 well-known Protobuf 타입에 대한 지원을 추가합니다. #56741 (János Benjamin Antal).
성능 향상
- S3와 상호 작용할 때 적응형(adaptive) 타임아웃을 사용합니다. 첫 번째 요청은 짧은 송신 및 수신 타임아웃으로 시도합니다. #56314 (Sema Checherinda).
max_concurrent_queries의 기본값을 100에서 1000으로 증가시킵니다. 이는 연결하는 클라이언트 수가 매우 많고 이들이 데이터를 천천히 전송하거나 수신하여 서버가 CPU에 의해 병목되지 않는 경우, 또는 CPU 코어 수가 100보다 큰 경우에 합리적인 설정입니다. 또한 기본적으로 동시성 제어를 활성화하고, 전체 쿼리 처리 스레드 수를 CPU 코어 수의 두 배로 설정합니다. 이는 매우 많은 수의 동시 쿼리가 발생하는 시나리오에서 성능을 개선합니다. #46927 (Alexey Milovidov).- 윈도우 함수의 병렬 실행을 지원합니다. #34688 문제를 수정했습니다. #39631 (Dmitry Novik).
Numbers테이블 엔진(system.numbers테이블용)이 이제 조건을 분석하여 테이블의 인덱스처럼 필요한 데이터 부분집합만 생성합니다. #50909 (JackyWoo).Merge테이블 엔진에서IN (...)조건을 사용한 필터링 성능을 향상했습니다. #54905 (Nikita Taranov).- 파일 시스템 캐시가 가득 찬 상태에서 대규모 읽기 작업이 수행될 때 발생하는 개선입니다. #55158 (Kseniia Sumarokova).
- S3에 대한 체크섬을 비활성화할 수 있는 기능을 추가하여 파일을 불필요하게 여러 번 읽는 작업을 피할 수 있도록 했습니다(설정
s3_disable_checksum으로 제어됩니다). #55559 (Azat Khuzhin). - 이제 페이지 캐시에 데이터가 있을 때 원격 테이블도 로컬 테이블과 동일하게 동기적으로 읽습니다. 이렇게 하면 더 빠르고, 스레드 풀 내부에서의 동기화가 필요 없으며, 로컬 파일 시스템에서
seek를 수행하는 데 제약이 없어 CPU 대기 시간이 줄어듭니다. #55841 (Nikita Taranov). map,arrayElement에서 값 조회를 최적화하여 약 30%의 성능 향상을 달성했습니다. - 예약 메모리를 줄였습니다. -resize호출을 줄였습니다. #55957 (lgbo).- AVX-512를 사용한 다단계 필터링 최적화. ICX 장치(Intel Xeon Platinum 8380 CPU, 80코어, 160스레드)에서 OnTime 데이터셋으로 수행한 성능 실험 결과, 이 변경으로 인해 쿼리 Q2, Q3, Q4, Q5, Q6의 QPS가 각각 7.4%, 5.9%, 4.7%, 3.0%, 4.6% 향상되며, 다른 쿼리에는 영향이 없는 것으로 나타났습니다. #56079 (Zhiguo Zhou).
- 쿼리 프로파일러에서 동시에 사용할 수 있는 스레드 수를 제한합니다. 그보다 많은 스레드는 프로파일링을 건너뜁니다. #56105 (Alexey Milovidov).
- 윈도우 함수에서 발생하는 가상 함수 호출 수를 줄였습니다. #56120 (Maksim Kita).
- ORC 데이터 형식에서 Tuple 필드를 재귀적으로 프루닝할 수 있도록 하여 스캔 속도를 높입니다. #56122 (李扬).
Npy데이터 포맷에 대한 단순 count 연산 최적화:select count() from 'data.npy'와 같은 쿼리는 결과를 캐싱하기 때문에 훨씬 더 빠르게 실행됩니다. #56304 (Yarik Briukhovetskyi).- 집계를 포함하고 스트림 수가 많은 쿼리는 쿼리 계획을 생성하는 동안 사용하는 메모리 양이 줄어듭니다. #57074 (Alexey Milovidov).
- ProcessList 접근을 최적화하여 다수의 사용자와 매우 높은 동시성 쿼리(초당 2000건(QPS) 초과)를 처리하는 사용 사례에서 쿼리 실행 성능을 향상합니다. #57106 (Andrej Hoos).
array join에서 일부 중간 결과를 재사용하는 간단한 최적화를 수행합니다. #57183 (李扬).- 스택 언와인딩 속도가 느린 경우가 있었지만 이제는 해결되었습니다. #57221 (Alexey Milovidov).
- 이제
max_streams = 1인 경우 외부 스토리지에서 읽을 때 기본 읽기 풀을 사용합니다. 이는 읽기 프리페치가 활성화되어 있을 때 특히 효과적입니다. #57334 (Nikita Taranov). - Keeper 개선: 로그 전처리를 지연하여 시작 시 메모리 사용량을 줄였습니다. #55660 (Antonio Andelic).
File및HDFS스토리지에 대한 glob 패턴 매칭 성능이 향상되었습니다. #56141 (Andrey Zvonov).- 실험적 전체 텍스트 인덱스에서 포스팅 리스트(posting list)가 이제 압축되어 크기가 10~30% 줄어듭니다. #56226 (Harry Lee).
- 백업에서 사용하는
BackupEntriesCollector를 병렬로 실행하도록 했습니다. #56312 (Kseniia Sumarokova).
개선사항
- 기본값이 비활성화인 새로운
MergeTree설정add_implicit_sign_column_constraint_for_collapsing_engine이 추가되었습니다. 이 설정을 활성화하면CollapsingMergeTree테이블에Sign컬럼의 값을 -1 또는 1로만 제한하는 암시적 CHECK 제약 조건을 추가합니다. #56701. #56986 (Kevin Mingtarja). - 서버를 재시작하지 않고 스토리지 구성에 새 디스크를 추가할 수 있도록 했습니다. #56367 (Duc Canh Le).
- 하나의 ALTER 쿼리에서 인덱스를 생성하고 materialize하는 작업을 동시에 수행할 수 있으며, 동일한 쿼리에서 "modify TTL" 및 "materialize TTL"도 함께 사용할 수 있습니다. Closes #55651. #56331 (flynn).
fuzzJSON이라는 새로운 테이블 함수(table function)를 추가하여, 원본 JSON 문자열에 무작위 변동을 가해 생성된 변형을 담은 행을 생성합니다. #56490 (Julia Kartseva).- Engine
Merge는 하위 테이블의 ROW POLICY에 따라 행을 필터링하므로,Merge테이블에 별도의 ROW POLICY를 생성할 필요가 없습니다. #50209 (Ilya Golshtein). - 분산 쿼리에서 세그먼트 단위의 실행 시간을 제한하기 위한 설정인
max_execution_time_leaf와, 타임아웃이 발생했을 때의 동작을 제어하기 위한timeout_overflow_mode_leaf를 추가합니다. #51823 (Duc Canh Le). - HTTP 프록시를 통한 HTTPS 요청에 대해 터널링을 비활성화하는 ClickHouse 설정이 추가되었습니다. #55033 (Arthur Passos).
background_fetches_pool_size를 16,background_schedule_pool_size를 512로 설정하면, 소량의 데이터 삽입이 자주 발생하는 프로덕션 환경에서 더 적합합니다. #54327 (Denny Crane).- CSV 형식 파일에서 데이터를 읽을 때 한 줄의 끝이
\r이고 그 뒤에\n이 오지 않으면Cannot parse CSV format: found \r (CR) not followed by \n (LF). Line must end by \n (LF) or \r\n (CR LF) or \n\r.와 같은 예외가 발생합니다. ClickHouse에서 CSV의 줄 끝은 반드시\n또는\r\n또는\n\r이어야 하므로\r뒤에는 반드시\n이 따라와야 합니다. 그러나 위와 같이 어떤 상황에서는 CSV 입력 데이터 형식이 비정상적이어서\r이 줄 끝에만 존재하는 경우가 있습니다. #54340 (KevinyhZou). - 새 인코딩을 지원하는 Arrow 라이브러리를 release-13.0.0으로 업데이트합니다. #44505 이슈를 해결합니다. #54800 (Kruglov Pavel).
- DDL 엔트리의 호스트 목록에서 로컬 IP 주소를 찾을 때 모든 네트워크 인터페이스를 조회하는 비용이 큰 시스템 호출을 제거하여
ON CLUSTER쿼리의 성능을 개선합니다. #54909 (Duc Canh Le). - 스레드를 쿼리 또는 USER에 연결하기 전에 할당된 메모리 사용량 집계를 수정했습니다. #56089 (Nikita Taranov).
- Apache Arrow 형식에
LARGE_LIST지원을 추가했습니다. #56118 (edef). OPTIMIZE쿼리를 통해EmbeddedRocksDB에서 수동 컴팩션을 수행할 수 있도록 했습니다. #56225 (Azat Khuzhin).EmbeddedRocksDB테이블에 대해BlockBasedTableOptions를 지정할 수 있는 기능을 추가했습니다. #56264 (Azat Khuzhin).- 이제
SHOW COLUMNS가 MySQL 프로토콜을 통해 연결된 경우 MySQL에 상응하는 데이터 타입 이름을 표시합니다. 이전에는use_mysql_types_in_show_columns = 1로 설정했을 때만 이렇게 동작했습니다. 해당 설정은 유지되지만 더 이상 사용할 필요는 없습니다. #56277 (Robert Schulze). - 서버가
TRUNCATE또는DROP PARTITION직후에 재시작될 경우 발생할 수 있었던The local set of parts of table doesn't look like the set of parts in ZooKeeper오류를 수정했습니다. #56282 (Alexander Tokmakov). formatQuery/formatQuerySingleLine함수에서 non-const 쿼리 문자열의 처리 방식을 수정했습니다. 또한 쿼리를 파싱할 수 없을 때 예외를 던지는 대신 NULL을 반환하는 두 함수의OrNull변형을 추가했습니다. #56327 (Robert Schulze).- 백업이 실패하지 않도록 삭제된 inner 테이블이 있는 materialized view도 백업할 수 있도록 허용합니다. #56387 (Kseniia Sumarokova).
system.replicas에 대한 쿼리는 특정 컬럼을 조회하면 ZooKeeper에 요청을 보냅니다. 수천 개의 테이블이 있는 경우 이러한 요청이 ZooKeeper에 상당한 부하를 줄 수 있습니다.system.replicas에 동시에 여러 개의 쿼리가 실행되면 동일한 요청을 여러 번 수행하게 됩니다. 이번 변경은 동시에 실행되는 쿼리에서 발생하는 이러한 요청을 「중복 제거(deduplicate)」하도록 합니다. #56420 (Alexander Gololobov).- 외부 데이터베이스를 쿼리하기 위한 MySQL 호환 쿼리 변환을 수정했습니다. #56456 (flynn).
KeeperMap엔진을 사용한 테이블 백업 및 복원 지원이 추가되었습니다. #56460 (Antonio Andelic).- CompleteMultipartUpload에 대한 404 응답은 재확인해야 합니다. 클라이언트가 타임아웃이나 기타 네트워크 오류를 받은 경우에도 서버에서 작업이 완료되었을 수 있습니다. 이후 CompleteMultipartUpload를 재시도하면 404 응답을 받을 수 있습니다. 객체 키가 존재한다면 해당 작업은 성공한 것으로 간주합니다. #56475 (Sema Checherinda).
- 기본적으로 HTTP OPTIONS 메서드를 활성화하여 웹 브라우저에서 ClickHouse에 요청하는 작업을 단순화했습니다. #56483 (Alexey Milovidov).
dns_max_consecutive_failures값이 #46550에서 실수로 변경되었으나, 이를 원래대로 복원하고 더 적절한 값으로 조정했습니다. 또한 프로덕션 환경에서 사용 중인 합리적인 값으로 HTTP keep-alive 타임아웃을 늘렸습니다. #56485 (Alexey Milovidov).- 기본 백업을 지연 로딩하도록 했습니다(필요해질 때까지 기본 백업을 로드하지 않습니다). 또한 백업에 대한 일부 로그 메시지와 프로파일링 이벤트를 추가했습니다. #56516 (Vitaly Baranov).
false또는true값을 사용하는query_cache_store_results_of_queries_with_nondeterministic_functions설정은 사용 중단(obsolete)으로 표시되었습니다. 이 설정은query_cache_nondeterministic_function_handling설정으로 대체되었으며, 이는 쿼리 캐시가 비결정적 함수가 포함된 쿼리를 어떻게 처리할지 제어하는 세 가지 값을 가진 enum입니다. a) 예외를 발생시킴(기본 동작), b) 비결정적 쿼리 결과를 상관없이 저장, c) 무시(예외를 발생시키지 않고 결과를 캐시하지 않음). #56519 (Robert Schulze).- JOIN ON 섹션의 동등 조건을
is null검사와 함께 다시 작성하도록 했습니다. 실험적인 기능으로, Analyzer 전용입니다. #56538 (vdimir). concatFUNCTION이 이제 String 및 FixedString 인자만이 아니라 임의의 타입의 인자를 지원합니다. 이를 통해 MySQL의concat구현과 보다 유사하게 동작합니다. 예를 들어,SELECT concat('ab', 42)는 이제ab42를 반환합니다. #56540 (Serge Klochkov).- 이제 config의 'named_collection' 섹션 또는 SQL로 생성된 named collection에서 캐시 구성을 가져올 수 있습니다. #56541 (Kseniia Sumarokova).
- PostgreSQL 데이터베이스 엔진: PostgreSQL 연결에 실패한 경우 오래된 테이블 제거 작업이 과도하게 수행되지 않도록 조정했습니다. #56609 (jsc0218).
- URL이 올바르지 않을 때 PG에 연결하는 데 너무 오랜 시간이 걸려, 관련 쿼리가 그 상태에서 멈췄다가 취소되는 문제가 있었습니다. #56648 (jsc0218).
- Keeper 개선: 기본값으로 압축 로그를 비활성화했습니다. #56763 (Antonio Andelic).
- 구성 설정
wait_dictionaries_load_at_startup을(를) 추가합니다. #56782 (Vitaly Baranov). - 이전 ClickHouse 버전에서 잠재적인 취약점이 발견되었습니다. 사용자가 "interserver secret" 방식으로 연결을 시도한 뒤 인증에 실패하더라도, 서버가 연결을 즉시 종료하지 않고 클라이언트로부터 남은 패킷을 계속 수신하면서 무시했습니다. 이러한 패킷은 무시되지만 여전히 파싱되며, 만약 다른 알려진 취약점이 있는 압축 방식을 사용할 경우, 인증 없이 해당 취약점이 악용될 수 있습니다. 이 문제는 https://twitter.com/malacupa 에 의해 ClickHouse Bug Bounty Program에서 발견되었습니다. #56794 (Alexey Milovidov).
- 조각을 가져올 때 원격 레플리카에서 해당 조각이 완전히 커밋될 때까지 기다립니다. PreActive 상태인 조각은 전송하지 않는 것이 더 좋습니다. zero-copy의 경우 이는 필수적인 제약 사항입니다. #56808 (Sema Checherinda).
- 실험적 기능인
MaterializedPostgreSQL을 사용할 때 발생할 수 있는 PostgreSQL 논리 복제(logical replication) 변환 오류를 수정합니다. #53721 (takakawa). ALTER TABLE ... MOVE PARTITION|PART TO DISK|VOLUME쿼리를 비동기적으로 실행할 수 있도록 하는 사용자 수준 설정alter_move_to_space_execute_async를 구현했습니다. 백그라운드 실행용 풀의 크기는background_move_pool_size로 제어됩니다. 기본 동작은 동기 실행입니다. #47643를 수정했습니다. #56809 (alesapin).- system.tables를 스캔할 때 엔진을 기준으로 필터링할 수 있어, 불필요한(잠재적으로 시간이 많이 소요될 수 있는) 연결을 피할 수 있습니다. #56813 (jsc0218).
- RocksDB 스토리지에 대해 시스템 테이블에
total_bytes와total_rows를 표시하도록 했습니다. #56816 (Aleksandr Musorin). - TEMPORARY 테이블에 대해 ALTER의 기본 명령을 허용합니다. #56892 (Sergey).
- LZ4 압축. 드물게 out 버퍼 용량이 부족하여 압축 블록을 out 버퍼에 직접 쓸 수 없는 경우, 압축된 블록을 버퍼링합니다. #56938 (Sema Checherinda).
- 대기 중인 작업 수를 나타내는 메트릭을 추가하여 IO thread pool에 활용할 수 있도록 했습니다. #56958 (Alexey Milovidov).
- 구성 파일에 PostgreSQL table engine을 위한 설정을 추가했습니다. 해당 설정에 대한 검사 로직을 추가했습니다. 추가된 설정에 대한 문서를 추가했습니다. #56959 (Peignon Melvyn).
- 이제 FUNCTION
concat은 단일 인자로도 호출할 수 있습니다(예:SELECT concat('abc')). 이로 인해 동작이 MySQL의 concat 구현과 더 일관되게 됩니다. #57000 (Serge Klochkov). - AWS S3 문서에서 요구하는 대로 모든
x-amz-*헤더를 서명합니다. #57001 (Arthur Passos). - 이제 함수
fromDaysSinceYearZero(별칭:FROM_DAYS)를 부호 없는 정수형뿐만 아니라 부호 있는 정수형에도 사용할 수 있게 되었습니다(이전에는 부호 없는 정수형만 허용되었습니다). 이를 통해 Tableau Online과 같은 서드파티 도구와의 호환성이 향상됩니다. #57002 (Serge Klochkov). - 기본 설정에
system.s3queue_log를 추가합니다. #57036 (Kseniia Sumarokova). wait_dictionaries_load_at_startup의 기본값이 true로 변경되었으며,dictionaries_lazy_load가 false인 경우에만 이 설정을 사용하도록 했습니다. #57133 (Vitaly Baranov).dictionaries_lazy_load가 활성화된 상태여도 생성 시 딕셔너리의 소스 타입을 확인합니다. #57134 (Vitaly Baranov).- 플랜 수준 최적화는 이제 개별적으로 활성화하거나 비활성화할 수 있습니다. 이전에는 모든 최적화를 한꺼번에만 비활성화할 수 있었습니다. 기존에 이 역할을 하던 설정(
query_plan_enable_optimizations)은 그대로 유지되며, 여전히 모든 최적화를 비활성화하는 데 사용할 수 있습니다. #57152 (Robert Schulze). - 서버의 종료 코드는 예외 코드에 해당합니다. 예를 들어, 서버가 메모리 제한 때문에 시작할 수 없는 경우 코드 241 = MEMORY_LIMIT_EXCEEDED로 종료됩니다. 이전 버전에서는 예외에 대한 종료 코드는 항상 70 = Poco::Util::ExitCode::EXIT_SOFTWARE였습니다. #57153 (Alexey Milovidov).
functionalC++ 헤더에서 생성된 스택 프레임에 대해 demangle 및 심벌화(symbolize)를 수행하지 않습니다. #57201 (Mike Kot).- HTTP 서버 페이지
/dashboard에서 이제 여러 개의 선이 있는 차트를 지원합니다. #57236 (Sergei Trifonov). max_memory_usage_in_client명령줄 옵션이 접미사(K, M, G 등)가 포함된 문자열 값을 지원합니다. #56879 이슈를 해결했습니다. #57273 (Yarik Briukhovetskyi).- codec
DEFLATE_QPL에서 사용되는 Intel QPL 버전을 v1.2.0에서 v1.3.1로 업데이트했습니다. 또한 BOF(Block On Fault) = 0인 경우의 버그를 수정하고, 페이지 폴트가 발생하면 SW 경로로 폴백하도록 처리 방식을 변경했습니다. #57291 (jasperzhu). - MergeTree 설정에서
replicated_deduplication_window의 기본값을 100에서 1k로 상향했습니다. #57335 (sichenzhao). INCONSISTENT_METADATA_FOR_BACKUP사용을 줄였습니다. 가능하면 백업을 위해 스캔을 중단했다가 처음부터 다시 시작하는 대신, 스캔을 계속 진행하도록 동작합니다. #57385 (Vitaly Baranov).
빌드/테스트/패키징 개선
- SQLLogic 테스트를 추가합니다. #56078 (Han Fei).
- 사용성을 위해
clickhouse-local과clickhouse-client를 짧은 이름(ch,chl,chc)으로도 사용할 수 있도록 합니다. #56634 (Alexey Milovidov). - 외부 라이브러리에서 사용되지 않는 코드를 제거하여 빌드 크기를 추가로 최적화합니다. #56786 (Alexey Milovidov).
- 큰 translation unit이 없도록 자동 검사를 추가합니다. #56559 (Alexey Milovidov).
- 단일 바이너리 배포의 크기를 줄입니다. 이로써 #55181를 해결합니다. #56617 (Alexey Milovidov).
- 각 빌드 이후 모든 translation unit과 바이너리 파일의 크기 정보가 ClickHouse Cloud의 CI 데이터베이스로 전송됩니다. 이로써 #56107를 해결합니다. #56636 (Alexey Milovidov).
- "Apache Arrow" 라이브러리의 특정 파일(arrow 포맷 파싱처럼 필수적이지 않은 작업에만 사용됨)이 빌드 캐시와 무관하게 항상 다시 빌드되는 문제가 있었습니다. 이 문제를 수정했습니다. #56657 (Alexey Milovidov).
- 버전 정보에 대한 자동 생성 소스 파일에 의존하는 translation unit을 재컴파일하지 않도록 합니다. #56660 (Alexey Milovidov).
- 링커 호출에 대한 트레이싱 데이터가 ClickHouse Cloud의 CI 데이터베이스로 전송됩니다. #56725 (Alexey Milovidov).
- clickhouse 바이너리에 대해 DWARF 5 디버그 심볼을 사용합니다(이전에는 DWARF 4 사용). #56770 (Michael Kolupaev).
- 새로운 빌드 옵션
SANITIZE_COVERAGE를 추가합니다. 이 옵션이 활성화되면, 커버리지를 추적할 수 있도록 코드에 계측이 추가됩니다. 수집된 정보는 ClickHouse 내부에서 다음을 통해 확인할 수 있습니다: (1) 이전 커버리지 초기화 이후 코드에서 발견된 고유 주소 배열을 반환하는 새로운 함수coverage; (2) 누적 데이터를 초기화하는SYSTEM RESET COVERAGE쿼리. 이를 통해 차등 코드 커버리지를 포함하여 서로 다른 테스트의 커버리지를 비교할 수 있습니다. #20539의 연속 작업입니다. #56102 (Alexey Milovidov). - 스택을 수집할 때 일부 스택 프레임이 해석되지 않을 수 있습니다. 이러한 경우 원시 주소가 도움이 될 수 있습니다. #56267 (Alexander Gololobov).
libssh를 비활성화하는 옵션을 추가합니다. #56333 (Alexey Milovidov).- CI의 S3 테스트에서
temporary_data_in_cache를 활성화합니다. #48425 (vdimir). - CI에서 clickhouse-client의 최대 메모리 사용량을
1G로 설정합니다. #56873 (Nikita Mikhaylov).
버그 수정(공식 안정 릴리스에서 사용자에게 노출되는 오작동)
- 실험적 Analyzer의 동작을 수정했습니다 - 삽입 테이블을 참조하는 서브쿼리가 포함된
SELECT를 통한 삽입은 이제 삽입 블록만 처리합니다. #50857 (Yakov Olkhovskiy). str_to_mapFUNCTION에서 발생하던 버그를 수정합니다. #56423 (Arthur Passos).- Keeper
reconfig: 리더 역할을 양도하거나 획득하기 전에 타임아웃을 추가합니다 #53481 (Mike Kot). - Grace Hash Join 및 Filter Pushdown에서 잘못된 헤더를 수정했습니다 #53922 (vdimir).
- 테이블이 table function을 기반으로 생성된 경우에도 system 테이블에서 선택할 수 있도록 수정했습니다. #55540 (MikhailBurdukov).
- RFC: Distributed queries에서 LIMIT BY 사용 시 발생하는 "Cannot find column X in source stream" 오류 수정 #55836 (Azat Khuzhin).
- 클라이언트를 백그라운드에서 실행할 때 발생하는 'Cannot read from file:' 오류를 수정했습니다. #55976 (Kruglov Pavel).
- send_logs_level 설정 오류로 clickhouse-local이 종료되던 문제 수정 #55994 (Kruglov Pavel).
- 매개변수화된 VIEW에 대해 EXPLAIN AST를 사용할 때 발생하던 버그 수정 #56004 (SmitaRKulkarni).
- 시작할 때 테이블을 로딩하는 과정에서 발생하던 충돌을 수정합니다 #56232 (Nikolay Degterinsky).
- 명시적인 쿼리를 사용하도록 ClickHouse 기반 딕셔너리를 수정했습니다 #56236 (Nikolay Degterinsky).
- Keeper의 시그널 핸들러에서 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다 #56266 (Antonio Andelic).
- view() 함수에서 UNION 사용 시 발생하던 쿼리 결과 누락 문제를 수정합니다. #56274 (Nikolai Kochetov).
- "cast('0' as DateTime64(3))"와 "cast('0' as Nullable(DateTime64(3)))" 간의 불일치 문제를 수정했습니다. #56286 (李扬).
- 메모리 할당 실패와 관련된 드문 경쟁 상태(race condition) 문제를 수정합니다 #56303 (alesapin).
flatten_nested및data_type_default_nullable사용 시 백업 복원 기능을 수정했습니다 #56306 (Kseniia Sumarokova).- Object(JSON) 타입 컬럼을 추가할 때 발생하던 크래시를 수정했습니다. #56307 (Nikita Mikhaylov).
- filterPushDown에서 발생하던 크래시 수정 #56380 (vdimir).
- 구체화된 뷰(Materialized View)와 해당 소스 테이블이 삭제된 경우의 백업 복구 동작을 수정합니다 #56383 (Kseniia Sumarokova).
- Kerberos 초기화 중 발생하는 세그멘테이션 폴트(segfault)를 수정 #56401 (Nikolay Degterinsky).
- T64의 버퍼 오버플로 문제를 수정했습니다 #56434 (Alexey Milovidov).
- FINAL에서 널 허용 기본 키 문제 수정 (2) #56452 (Amos Bird).
- 초기 노드에 데이터베이스가 없을 때
ON CLUSTER쿼리가 동작하지 않던 문제를 수정합니다 #56484 (Nikolay Degterinsky). - TTL 종속성으로 인해 발생하는 시작 실패를 수정했습니다 #56489 (Nikolay Degterinsky).
- ON CLUSTER에서의
ALTER COMMENT쿼리 처리를 수정했습니다. #56491 (Nikolay Degterinsky). - ALIAS를 사용하는 ALTER COLUMN 동작을 수정했습니다 #56493 (Nikolay Degterinsky).
- 비어 있는 NAMED COLLECTION 처리 문제를 수정했습니다. #56494 (Nikolay Degterinsky).
- 프로젝션 분석과 관련된 두 가지 문제를 수정했습니다. #56502 (Amos Bird).
- 쿼리 캐시에서 별칭(alias) 처리 방식 수정 #56545 (Robert Schulze).
Nullable(Enum)에서Nullable(String)으로의 변환을 수정했습니다. #56644 (Nikolay Degterinsky).- Keeper의 로그 처리 신뢰성 향상 #56670 (Antonio Andelic).
- 치환 속성이 있는 노드의 설정 병합을 수정함 #56694 (Konstantin Bogdanov).
- 테이블 함수 input()의 중복 사용 문제를 수정합니다. #56695 (Nikolai Kochetov).
- RabbitMQ OpenSSL 동적 로딩 문제 수정 #56703 (Igor Nikonov).
- 데이터에 0이 포함된 경우 GCD 코덱에서 발생하던 크래시를 수정했습니다 #56704 (Nikita Mikhaylov).
- clickhouse-local에서 FUNCTION으로 INSERT하는 동안 발생하던 'mutex lock failed: Invalid argument' 오류를 수정했습니다 #56710 (Kruglov Pavel).
- 낙관적 경로에서 Date 텍스트 파싱을 수정했습니다 #56765 (Kruglov Pavel).
- FPC 코덱에서 발생하던 크래시 문제를 수정 #56795 (Alexey Milovidov).
- DatabaseReplicated: 레플리카 복구 후 발생하는 DDL 쿼리 타임아웃 문제를 수정합니다 #56796 (Alexander Tokmakov).
- MySQL 바이너리 프로토콜에서 널 허용 컬럼이 잘못 보고되던 문제를 수정합니다 #56799 (Serge Klochkov).
- 메타스토어 테이블의 Iceberg 메타데이터 파일을 지원합니다 #56810 (Kruglov Pavel).
- transform에서 발생한 TSAN 리포트 수정 #56817 (Raúl Marín).
- SET 쿼리와 SETTINGS의 형식을 수정했습니다 #56825 (Nikolay Degterinsky).
- joinGet의 테이블 의존성 때문에 서버가 시작되지 않던 문제를 수정합니다 #56828 (Nikolay Degterinsky).
- ADD COLUMN 수행 시 기존 Nested 컬럼이 평탄화되던 문제를 수정했습니다. #56830 (Nikolay Degterinsky).
- CSV에서 줄 끝에 CR을 허용하도록 수정 #56901 (KevinyhZou).
- 잘못된 입력 처리 시
tryBase64Decode동작을 수정합니다 #56913 (Robert Schulze). - CapnProto/Protobuf 스키마에서 깊게 중첩된 컬럼이 생성되는 문제를 수정합니다 #56941 (Kruglov Pavel).
- 프로젝션 컬럼에 대한 비호환적인 ALTER 작업을 방지합니다 #56948 (Amos Bird).
- sqlite 파일 경로 검증을 수정했습니다 #56984 (San).
- S3Queue: 메타데이터 참조 카운터 증가 처리를 수정 #56990 (Kseniia Sumarokova).
- S3Queue 관련 사소한 수정 #56999 (Kseniia Sumarokova).
- DatabaseFileSystem 파일 경로 검증을 수정했습니다 #57029 (San).
ARRAY JOIN에서fuzzBits관련 문제를 수정 #57033 (Antonio Andelic).- partial merge join에서 joined_subquery_re... 사용 시 발생하는 nullptr 역참조를 수정했습니다. #57048 (vdimir).
- RemoteSource의 경쟁 상태 문제를 수정했습니다. #57052 (Raúl Marín).
- 큰 정수에 대한
bitHammingDistance를 구현했습니다 #57073 (Alexey Milovidov). - S3 스타일 링크 관련 버그 수정 #57075 (Yarik Briukhovetskyi).
- 여러 개의 숫자 경로를 사용하는 JSON_QUERY 함수를 수정했습니다 #57096 (KevinyhZou).
- Gorilla 코덱의 버퍼 오버플로를 수정 #57107 (Nikolay Degterinsky).
- 어떤 예외가 발생하더라도 인증 전에 인터서버 연결을 종료하도록 했습니다 #57142 (Antonio Andelic).
- ALTER UPDATE 실행 후 널 허용(Nullable) MATERIALIZED 컬럼에서 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. #57147 (Nikolay Degterinsky).
- 부분적으로 구체화된 일반 프로젝션에서 발생하던 잘못된 JOIN 계획 최적화를 수정합니다. #57196 (Amos Bird).
- 컬럼 설명 비교 시 주석을 무시합니다 #57259 (Antonio Andelic).
- 모든 상황에서
ReadonlyReplica메트릭이 올바르게 동작하도록 수정합니다 #57267 (Antonio Andelic). - 백그라운드 머지가 이제 캐시의 임시 데이터 저장소를 올바르게 사용합니다 #57275 (vdimir).
- changelog 및 스냅샷 관련 Keeper 수정 #57299 (Antonio Andelic).
- 호스트 이름이 변경된 경우 완료된 ON CLUSTER 작업은 무시되도록 했습니다 #57339 (Alexander Tokmakov).
- MergeTree 뮤테이션이 소스 파트의 인덱스 granularity를 재사용합니다 #57352 (Maksim Kita).
- FS 캐시: 백그라운드 다운로드에 대한 제한을 추가했습니다 #57424 (Kseniia Sumarokova).
ClickHouse 23.10 릴리스 (2023-11-02). 발표 자료, 동영상
하위 호환성이 깨지는 변경 사항
- 손상된 데이터 파트를 자동으로 제거하는 옵션이 더 이상 제공되지 않습니다. 이 변경으로 #55174가 해결되었습니다. #55184 (Alexey Milovidov). #55557 (Jihyuk Bok).
- 더 이상 사용되지 않는(in-memory) 데이터 파트는 write-ahead log에서 읽을 수 없습니다. 이전에 in-memory 파트를 구성한 경우 업그레이드 전에 제거해야 합니다. #55186 (Alexey Milovidov).
- Meilisearch 통합을 제거했습니다. 이유: 구버전 0.18과만 호환되었습니다. 최신 Meilisearch 버전은 프로토콜이 변경되어 더 이상 동작하지 않습니다. 참고: 이 기능을 다시 도입하는 데 기여해 주신다면 감사하겠습니다. #55189 (Alexey Milovidov).
- directory monitor 개념의 이름을 background INSERT로 변경했습니다. 모든
*directory_monitor*설정은distributed_background_insert*로 이름이 변경되었습니다. 이전 버전과의 호환성은 유지됩니다 (기존 설정 이름을 별칭으로 추가했습니다). #55978 (Azat Khuzhin). - 클라이언트 측에 설정된
send_timeout을 서버 측의receive_timeout으로(또는 그 반대로) 해석하지 않도록 변경했습니다. #56035 (Azat Khuzhin). - 단위가 다른 시간 간격(time interval)을 비교하면 예외가 발생합니다. 이 변경으로 #55942가 해결되었습니다. 이전 동작이 단위를 무시하고 내부 숫자 값만 비교하는 방식이었기 때문에 여기에 우연히 의존하고 있었을 수 있습니다. #56090 (Alexey Milovidov).
- 실험적
S3Queue테이블 엔진을 완전히 다시 작성했습니다. ZooKeeper에 정보를 저장하는 방식을 변경하여 ZooKeeper 요청 수를 줄였고, 상태가 변경되지 않을 것임을 알고 있는 경우에는 ZooKeeper 상태를 캐시하도록 했으며, S3에서 폴링하는 프로세스를 덜 공격적으로 개선했습니다. 또한 추적된 파일에 대해 TTL 및 설정된 max 값을 유지·관리하는 방식을 변경하여 이제 백그라운드 프로세스로 동작합니다.system.s3queue및system.s3queue_log테이블을 추가했습니다. #54998를 해결합니다. #54422 (Kseniia Sumarokova). - HTTP 엔드포인트에서 임의의 경로는 더 이상
/query엔드포인트에 대한 요청으로 해석되지 않습니다. #55521 (Konstantin Bogdanov).
새 기능
- 동일한 카디널리티를 가진 여러 배열에 람다 함수를 적용하여 결과를 누산기에 모으는 함수
arrayFold(accumulator, x1, ..., xn -> expression, initial, array1, ..., arrayn)를 추가합니다. #49794 (Lirikl). Npy형식 지원이 추가되었습니다.SELECT * FROM file('example_array.npy', Npy). #55982 (Yarik Briukhovetskyi).- 테이블 키에 공간 채움 곡선이 있는 경우(예:
ORDER BY mortonEncode(x, y)), 그 인수에 대한 조건식(예:x >= 10 AND x <= 20 AND y >= 20 AND y <= 30)을 인덱싱에 사용할 수 있습니다. 이 분석을 활성화하거나 비활성화하기 위해analyze_index_with_space_filling_curves설정이 추가되었습니다. 이 변경으로 #41195 이슈가 해결됩니다. #4538의 후속 작업입니다. #6286의 후속 작업입니다. #28130의 후속 작업입니다. #41753의 후속 작업입니다. #55642 (Alexey Milovidov). force_optimize_projection_name이라는 새로운 설정이 추가되었으며, projection 이름을 인자로 받습니다. 이 값이 빈 문자열이 아니도록 설정되면 ClickHouse는 해당 projection이 쿼리에서 최소 한 번 이상 사용되었는지 확인합니다. #55331 이슈를 종료했습니다. #56134 (Yarik Briukhovetskyi).- 네이티브 프로토콜을 통해 외부 데이터를 사용하는 비동기 insert를 이제 지원합니다. 이전에는 데이터가 쿼리에 인라인으로 포함된 경우에만 동작했습니다. #54730 (Anton Popov).
- 데이터 시각화를 위한 다운샘플링에 Largest-Triangle-Three-Buckets 알고리즘을 사용하는 집계 함수
lttb가 추가되었습니다. #53145 (Sinan). CHECK TABLE쿼리는 성능과 사용성이 향상되었습니다(진행 상황 업데이트 전송, 실행 취소 가능).CHECK TABLE ... PART 'part_name'를 사용하여 특정 파트를 검사하는 기능을 지원합니다. #53404 (vdimir).jsonMergePatchFUNCTION이 추가되었습니다. JSON 데이터를 문자열로 처리할 때, 이 FUNCTION은 JSON 객체를 나타내는 여러 문자열을 병합하여 하나의 JSON 객체를 포함하는 단일 문자열로 만들어 줍니다. #54364 (Memo).- Kusto Query Language 방언 지원의 두 번째 단계입니다. 1단계 구현은 병합되었습니다. #42510 (larryluogit).
- 새로운 SQL FUNCTION인
arrayRandomSample(arr, k)가 추가되었습니다. 이 FUNCTION은 입력 배열에서 k개의 요소를 무작위로 추출한 샘플을 반환합니다. 이전에는 이와 유사한 기능을 덜 편리한 문법으로만 구현할 수 있었으며, 예를 들어 "SELECT arrayReduce('groupArraySample(3)', range(10))"와 같았습니다. #54391 (itayisraelov). -ArgMin/-ArgMax집계 combinator를 도입하여 최소/최대 값에 대해서만 집계할 수 있도록 합니다. 사용 사례는 #54818에서 확인할 수 있습니다. 또한 이 PR에서는 combinator를 전용 폴더로 재구성합니다. #54947 (Amos Bird).SYSTEM DROP SCHEMA FORMAT CACHE [FOR Protobuf]를 사용하여 Protobuf 포맷 캐시를 삭제할 수 있도록 했습니다. #55064 (Aleksandr Musorin).- 외부 HTTP Basic 인증 기능을 추가합니다. #55199 (Aleksei Filatov).
- 부호 없는 정수의 바이트 순서를 뒤집는
byteSwapFUNCTION이 추가되었습니다. 이는 IPv4와 같이 내부적으로 부호 없는 정수로 표현되는 형식의 값을 뒤집는 데 특히 유용합니다. #55211 (Priyansh Agrawal). - SQL 쿼리 문자열을 포맷한 버전(여러 줄에 걸칠 수 있음)을 반환하는
formatQueryFUNCTION을 추가했습니다. 또한 동일한 작업을 수행하지만 반환되는 문자열에 줄바꿈이 포함되지 않도록 하는formatQuerySingleLineFUNCTION도 추가했습니다. #55239 (Salvatore Mesoraca). - ELF 실행 파일/라이브러리/오브젝트 파일에서 디버그 심볼을 읽는
DWARF입력 포맷이 추가되었습니다. #55450 (Michael Kolupaev). - RabbitMQ, NATS 및 FileLog 엔진에서 파싱되지 않은 레코드와 에러를 저장할 수 있습니다. ClickHouse가 새 레코드 파싱에 실패했을 때 채워지는 가상 컬럼
_error및_raw_message(NATS 및 RabbitMQ용),_raw_record(FileLog용)를 추가합니다. 동작은 NATS의 스토리지 설정nats_handle_error_mode, RabbitMQ의rabbitmq_handle_error_mode, FileLog의handle_error_mode로 제어되며,kafka_handle_error_mode와 유사하게 동작합니다. 해당 설정이default이면 ClickHouse가 레코드 파싱에 실패할 때 예외가 발생하고,stream이면 에러와 원시 레코드가 가상 컬럼에 저장됩니다. #36035를 해결합니다. #55477 (Kruglov Pavel). - Keeper 클라이언트 개선: 특정 경로 아래에 있는 모든 하위 노드의 개수를 반환하는
get_all_children_number명령어가 추가되었습니다. #55485 (guoxiaolong). - Keeper 클라이언트 개선: 지정된 경로 아래에 있는 직접 하위 노드 수를 반환하는
get_direct_children_number명령을 추가합니다. #55898 (xuzifu666). - 기존 구문인
SHOW SETTINGS의 더 단순한 버전인SHOW SETTING setting_name구문을 추가했습니다. #55979 (Maksim Kita). system.parts_columns테이블에substreams및filenames컬럼을 추가했습니다. #55108 (Anton Popov).SHOW MERGES쿼리에 대한 지원이 추가되었습니다. #55815 (megao).- 기본
ORDER BY ()를 위한 설정create_table_empty_primary_key_by_default를 도입합니다. #55899 (Srikanth Chekuri).
성능 향상
- 윈도우 함수(window function)를 평가한 후에도 스트림 수를 유지하여 병렬 스트림 처리를 허용하도록
query_plan_preserve_num_streams_after_window_functions옵션을 추가합니다. #50771 (frinkr). - 데이터 양이 작은 경우 더 많은 스트림을 해제하도록 했습니다. #53867 (Jiebin Sun).
- 직렬화 전에 RoaringBitmaps가 최적화되도록 했습니다. #55044 (UnamedRus).
- 역색인의 포스팅 리스트가 이제 내부 비트맵에 대해 가능한 한 가장 작은 표현을 사용하도록 최적화되었습니다. 데이터의 중복도에 따라 역색인이 차지하는 저장 공간을 크게 줄일 수 있습니다. #55069 (Harry Lee).
- Context lock에 대한 경합을 줄여 다수의 단시간 동시 쿼리에서 성능이 크게 향상되었습니다. #55121 (Maksim Kita).
- 역인덱스 생성 성능을 30% 향상했습니다. 이는
std::unordered_map을absl::flat_hash_map으로 교체함으로써 달성되었습니다. #55210 (Harry Lee). - ORC 필터 푸시다운을 row group 수준에서 지원합니다. #55330 (李扬).
- 임시 파일을 많이 사용하는 외부 집계의 성능을 개선합니다. #55489 (Maksim Kita).
- 보조 인덱스용 마크 캐시에 대해 기본값으로 합리적인 크기를 설정하여 마크를 반복해서 로드하지 않도록 했습니다. #55654 (Alexey Milovidov).
- skip index를 읽을 때 인덱스 그래뉼을 불필요하게 재구성하지 않도록 합니다. 이는 #55653 문제를 해결합니다. #55683 (Amos Bird).
- 실행 중에 Set 내에서 CAST 함수를 캐싱하여, Set의 요소 타입이 컬럼 타입과 정확히 일치하지 않을 때
IN함수의 성능을 향상시킵니다. #55712 (Duc Canh Le). ColumnVector::insertMany및ColumnVector::insertManyFrom의 성능이 향상되었습니다. #55714 (frinkr).- 다음 행에서의 키 위치를 예측해 비교 연산을 줄임으로써 맵(Map) 서브스크립트 연산을 최적화했습니다. #55929 (lgbo).
- Parquet에서 struct 필드 프루닝을 지원합니다(이전 버전에서는 일부 상황에서 작동하지 않았습니다). #56117 (lgbo).
- 읽을 행 수의 추정값에 따라 쿼리 실행에 사용되는 병렬 레플리카 수를 조정할 수 있는 기능을 추가했습니다. #51692 (Raúl Marín).
- 많은 임시 파일이 생성된 경우 외부 집계에서 메모리 사용량을 최적화했습니다. #54798 (Nikita Taranov).
async_socket_for_remote모드(기본값)에서 실행되는 분산 쿼리는 이제max_threads제한을 준수합니다. 이전에는 일부 쿼리가 과도한 수의 스레드(최대max_distributed_connections까지)를 생성하여 서버 성능 문제를 일으킬 수 있었습니다. #53504 (filimonov).- Zookeeper 분산 DDL 큐에서 DDL을 실행할 때 건너뛸 수 있는 항목을 캐시합니다. #54828 (Duc Canh Le).
- 실험적 역인덱스에서는 너무 많은 일치 항목(즉, 포스팅 리스트(posting list)의 행 ID)을 가진 토큰을 저장하지 않습니다. 이는 저장 공간을 절약하고, 순차 스캔이 동일하거나 더 빠른 경우 비효율적인 인덱스 조회를 피하는 데 도움이 됩니다. 이전에 토큰을 저장하지 않을 시점을 제어하던 휴리스틱(인덱스 정의에 전달되는
density파라미터)은 사용자에게 지나치게 혼란스러웠습니다. 포스팅 리스트에서 허용되는 최대 행 ID 수를 직접 제어하는 훨씬 더 단순한 휴리스틱이max_rows_per_postings_list파라미터(기본값: 64k)를 기반으로 도입되었습니다. #55616 (Harry Lee). EmbeddedRocksDB테이블의 쓰기 성능을 개선했습니다. #55732 (Duc Canh Le).- 하나의 파티션 내에 파트가 매우 많을 때(1000개를 초과할 때) ClickHouse의 전반적인 내결함성이 개선되었습니다. 이로 인해
TOO_MANY_PARTS오류 발생 횟수가 줄어들 수 있습니다. #55526 (Nikita Mikhaylov). - 계층형 사전 로딩 시 메모리 사용량을 줄였습니다. #55838 (Nikita Taranov).
- 모든 딕셔너리에서
dictionary_use_async_executor설정을 지원합니다. #55839 (vdimir). - AggregateFunctionTopKGenericData를 역직렬화할 때 과도한 메모리 사용을 방지하도록 개선했습니다. #55947 (Raúl Marín).
- watch가 많이 걸려 있는 Keeper에서
DB::KeeperStorage::getSessionsWithWatchesCount내에서 AsyncMetrics 스레드가 상당 시간 동안 CPU를 100%까지 사용할 수 있습니다. 이 문제는 부하가 큰watches및list_watches집합을 순회하지 않도록 하여 해결합니다. #56054 (Alexander Gololobov). - EmbeddedRocksDB 스토리지에서
count근사치를 사용하도록optimize_trivial_approximate_count_query설정을 추가합니다. StorageJoin에 대해 trivial count를 활성화합니다. #55806 (Duc Canh Le).
개선 사항
- 이제 함수
toDayOfWeek(MySQL 별칭:DAYOFWEEK),toYearWeek(YEARWEEK) 및toWeek(WEEK)에서String인수를 지원합니다. 이로써 MySQL과 동작이 일치합니다. #55589 (Robert Schulze). date_time_overflow_behavior설정을 도입하여ignore,throw,saturate값을 지원하며, Date, Date32, DateTime64, Integer 또는 Float에서 Date, Date32, DateTime 또는 DateTime64로 변환할 때 오버플로 발생 시 동작을 제어하도록 했습니다. #55696 (Andrey Zvonov).ALTER TABLE ... ACTION PARTITION [ID] {parameter_name:ParameterType}에 대한 쿼리 매개변수 지원을 구현합니다. #49516을(를) 병합합니다. #49449을(를) 종료합니다. #55604 (alesapin).- EXPLAIN 출력에서 프로세서 ID를 보다 보기 좋게 표시합니다. #48852 (Vlad Seliverstov).
- 수명(lifetime) 필드가 있는 direct 딕셔너리를 생성하려고 하면, direct 딕셔너리에서는 수명 설정이 의미가 없으므로 생성 시점에 거부됩니다. 수정 사항: #27861. #49043 (Rory Crispin).
ALTER TABLE t DROP PARTITION와 같은 파티션 관련 쿼리에서 매개변수를 허용합니다. #49449 이슈를 해결합니다. #49516 (Nikolay Degterinsky).system.zookeeper_connection에 새로운 컬럼xid를 추가합니다. #50702 (helifu).- 구성을 다시 로드한 후
system.server_settings에 올바른 서버 설정이 표시되도록 수정했습니다. #53774 (helifu). - 쿼리에서
-와 마찬가지로 수학 기호인 마이너스−문자도 지원하도록 했습니다. #54100 (Alexey Milovidov). - 실험적인
Replicated데이터베이스 엔진에 레플리카 그룹을 추가했습니다. #53620을(를) 해결했습니다. #54421 (Nikolay Degterinsky). - 재시도 가능한 S3 오류의 경우 쿼리를 완전히 실패시키기보다 재시도하는 편이 더 낫습니다. 기본값으로
s3_retry_attempts가 더 큰 값으로 설정되도록 변경했습니다. #54770 (Sema Checherinda). - 로드 밸런싱 모드
hostname_levenshtein_distance를 추가했습니다. #54826 (JackyWoo). - 로그에서 비밀 정보 마스킹을 개선합니다. #55089 (Vitaly Baranov).
- 현재는 PROJECTION 분석이 쿼리 플랜(query plan) 상에서만 수행됩니다. 설정
query_plan_optimize_projection은 오래전에 기본값으로 활성화된 이후로 더 이상 사용되지 않습니다. #55112 (Nikita Mikhaylov). - 이제 함수
untuple이 이름이 지정된 요소를 가진 tuple에 대해 호출되고 해당 함수 자체에 별칭이 있는 경우(예:select untuple(tuple(1)::Tuple(element_alias Int)) AS untuple_alias), 결과 컬럼 이름은 untuple 별칭과 tuple 요소 별칭을 조합하여 생성됩니다(이 예에서는 "untuple_alias.element_alias"). #55123 (garcher22). DESCRIBE쿼리 결과에 테이블의 가상 컬럼을 포함할 수 있도록 하는describe_include_virtual_columns설정이 추가되었습니다. 또한describe_compact_output설정이 추가되었습니다. 이 설정을true로 지정하면DESCRIBE쿼리는 추가 정보 없이 컬럼의 이름과 타입만 반환합니다. #55129 (Anton Popov).- 때때로
optimize_throw_if_noop=1이 설정된OPTIMIZE가unknown reason오류와 함께 실패할 수 있는데, 실제 원인은 서로 다른 파트에 서로 다른 프로젝션이 존재하기 때문입니다. 이 동작이 수정되었습니다. #55130 (Nikita Mikhaylov). - 동일한 Postgres 테이블을 기반으로 여러 개의
MaterializedPostgreSQL테이블을 사용할 수 있도록 허용합니다. 기본적으로 이 동작은 비활성화되어 있으며(기존 버전과의 호환성을 위한 것으로, 이전 버전과 호환되지 않는 변경입니다), 설정materialized_postgresql_use_unique_replication_consumer_identifier로 활성화할 수 있습니다. #54918을(를) 해결합니다. #55145 (Kseniia Sumarokova). - 짧은 문자열 표현에서 소수 자릿수를 포함하는 음수
DateTime64및DateTime값을 파싱할 수 있도록 했습니다. #55146 (Andrey Zvonov). - MySQL과의 호환성을 개선하기 위해 1.
information_schema.tables에 새 필드table_rows가 포함되며, 2.information_schema.columns에 새 필드extra가 포함됩니다. #55215 (Robert Schulze). - Clickhouse-client는 결과 행 수가 0이고 예외가 발생한 경우 「0 rows in set」을 표시하지 않습니다. #55240 (Salvatore Mesoraca).
RENAME db.t1 to db.t2와 같이TABLE키워드를 사용하지 않고도 테이블 이름을 변경하는 것을 지원합니다. #55373 (凌涛).system.clusters에internal_replication을 추가했습니다. #55377 (Konstantin Morozov).- 요청 프로토콜에 따라 원격 프록시 리졸버를 선택하고, 프록시 기능에 대한 문서를 추가하며
DB::ProxyConfiguration::Protocol::ANY를 제거합니다. #55430 (Arthur Passos). - 테이블이 종료된 후 INSERT에서 Keeper 작업을 재시도하지 않도록 했습니다. #55519 (Azat Khuzhin).
SHOW COLUMNS가 이제use_mysql_types_in_show_columns설정이 활성화되어 있을 때FixedString타입을BLOB으로 올바르게 보고합니다. 또한 타입String과FixedString의 출력 형식을TEXT또는BLOB으로 전환할 수 있도록,mysql_map_string_to_text_in_show_columns및mysql_map_fixed_string_to_text_in_show_columns라는 두 개의 새로운 설정이 추가되었습니다. #55617 (Serge Klochkov).- ReplicatedMergeTree 테이블이 시작될 때 ClickHouse 서버는 파트 집합을 확인하여 예기치 않은 파트(로컬에는 존재하지만 ZooKeeper에는 없는 파트)가 있는지 검사합니다. 모든 예기치 않은 파트는 detached 디렉터리로 이동되고, 서버는 대신 해당 파트를 포함하는 상위(covered) 파트를 복구하려고 시도합니다. 이제 서버는 임의의 covered 파트 대신 가장 가까운 상위 파트를 복구하려고 시도합니다. #55645 (alesapin).
- 고급 대시보드는 이제 터치 기기에서도 차트를 드래그할 수 있습니다. 이로써 #54206이(가) 해결되었습니다. #55649 (Alexey Milovidov).
http_write_exception_in_output_format로 예외를 출력할 때 선언된 경우, 기본 쿼리 형식을 사용합니다. #55739 (Raúl Marín).- 일반적인 MATERIALIZED VIEW 실수에 대해 더 나은 메시지가 출력되도록 했습니다. #55826 (Raúl Marín).
- 현재 데이터베이스를 삭제했더라도
clickhouse-local에서 일부 쿼리는 계속 실행하고 다른 데이터베이스로 전환할 수 있습니다. 이로써clickhouse-client와의 동작이 일관되게 됩니다. 이 변경으로 #55834가 해결됩니다. #55853 (Alexey Milovidov). - 이제
(add|subtract)(Year|Quarter|Month|Week|Day|Hour|Minute|Second|Millisecond|Microsecond|Nanosecond)함수에서 문자열로 인코딩된 날짜 인자도 지원합니다. 예를 들어SELECT addDays('2023-10-22', 1)과 같습니다. 이는 MySQL과의 호환성을 높이고 Tableau Online에서 필요로 합니다. #55869 (Robert Schulze). - 설정
apply_deleted_mask를 비활성화하면 경량한 삭제(DELETE) 쿼리에 의해 삭제된 것으로 표시된 행을 읽을 수 있습니다. 디버깅 시 유용합니다. #55952 (Alexander Gololobov). - Tuple을 JSON 객체로 직렬화할 때
null값을 건너뛸 수 있도록 허용하여 Spark의to_jsonFUNCTION과의 호환성을 유지할 수 있게 하며, gluten에서도 유용합니다. #55956 (李扬). (add|sub)DateFUNCTION이 이제 문자열 형식의 날짜 인자를 지원합니다. 예:SELECT addDate('2023-10-22 11:12:13', INTERVAL 5 MINUTE). 문자열 형식의 날짜 인자에 대한 동일한 지원이 더하기 및 빼기 연산자에도 추가되었습니다. 예:SELECT '2023-10-23' + INTERVAL 1 DAY. 이는 MySQL과의 호환성을 높여 주며 Tableau Online에서 필요합니다. #55960 (Robert Schulze).- CSV 포맷에서 CR 문자(
\r)가 포함된 따옴표로 둘러싸이지 않은 문자열을 허용합니다. #39930 이슈를 해결합니다. #56046 (Kruglov Pavel). - 임베디드 구성을 사용하여
clickhouse-keeper를 실행할 수 있습니다. #56086 (Maksim Kita). - Kafka에서 데이터 페치를 시작할 때 발생할 수 있는 문제를 방지하기 위해
queued.min.messages설정값의 최대 허용치를 제한했습니다. #56121 (Stas Morozov). - SQL FUNCTION
minSampleSizeContinous의 오타를 수정하여minSampleSizeContinuous로 이름을 변경했습니다. 이전 이름도 하위 호환성을 위해 유지됩니다. 다음 이슈를 종료합니다: #56139. #56143 (Dorota Szeremeta). - 서버를 종료하기 전에 디스크에서 손상된 파트의 경로를 출력합니다. 이 변경 전에는 디스크에 있는 파트가 손상되어 서버를 시작할 수 없을 때, 어떤 파트가 손상되었는지 파악하는 것이 거의 불가능했습니다. 이 문제가 수정되었습니다. #56181 (Duc Canh Le).
빌드/테스트/패키징 개선
- Docker 내 데이터베이스가 이미 초기화되어 있는 경우, 이후 실행 시 다시 초기화할 필요가 없습니다. 이를 통해 데이터베이스가 1000번의 시도 내에 로드되지 못할 때 컨테이너가 무한 재시작되는 문제를 잠재적으로 해결할 수 있습니다(매우 큰 데이터베이스 및 멀티 노드 구성에 해당). #50724 (Alexander Nikolaev).
- 서브모듈이 포함된 소스 코드 리소스를 Darwin 전용 특수 빌드 작업에서 빌드합니다. 이를 사용하면 서브모듈을 별도로 체크아웃하지 않고도 ClickHouse를 빌드할 수 있습니다. #51435 (Ilya Yatsishin).
- AVX 계열 명령어를 전역적으로 활성화(권장되지 않음)한 상태에서 ClickHouse를 빌드할 때 오류가 발생했습니다. 원인은 snappy가
SNAPPY_HAVE_X86_CRC32를 활성화하지 않는 데 있습니다. #55049 (monchickey). clickhouse-server패키지에서 독립 실행형clickhouse-keeper를 실행할 때 발생하는 문제를 해결했습니다. #55226 (Mikhail f. Shiryaev).- 테스트에서 RabbitMQ 버전을 3.12.6으로 업데이트했습니다. RabbitMQ 테스트용 로그 수집을 개선했습니다. #55424 (Ilya Yatsishin).
- 기능 테스트를 통과하도록 OpenSSL과 BoringSSL 간 오류 메시지 차이를 수정했습니다. #55975 (MeenaRenganathan22).
- Apache DataSketches에 대해 업스트림 저장소를 사용하도록 변경했습니다. #55787 (Nikita Taranov).
버그 수정 (공식 안정 릴리스에서 사용자에게 나타나는 오작동)
- 뮤테이션에서 역인덱스 파일에 대한 하드링크 생성을 건너뜁니다 #47663 (cangyin).
matchFUNCTION(정규식)에서 alternation을 포함한 패턴을 사용할 때 잘못된 키 조건(key condition)이 생성되던 버그를 수정했습니다. #53222 이슈를 해결했습니다. #54696 (Yakov Olkhovskiy).- ARRAY JOIN이 있는 read-in-order 최적화에서 발생하는 'Cannot find column' 오류를 수정했습니다 #51746 (Nikolai Kochetov).
- 쿼리에서 누락되어 있던 실험적인
Object(Nullable(json))서브컬럼을 지원합니다. #54052 (zps). accurateCastOrNull에 대한 수정 사항을 다시 추가했습니다 #54629 (Salvatore Mesoraca).- AS 없이 생성된 분산 테이블의 컬럼에서
DEFAULT를 올바르게 감지하도록 수정했습니다 #55060 (Vitaly Baranov). - ShellCommandSource 생성자에서 예외가 발생했을 때 리소스가 적절히 정리되도록 수정 #55103 (Alexander Gololobov).
- LDAP에 할당된 역할을 업데이트할 때 발생하던 교착 상태를 수정했습니다 #55119 (Julian Maicher).
- 내부 예외에 대해서는 오류 통계를 업데이트하지 않도록 했습니다 #55128 (Robert Schulze).
- 백업 수행 중 발생하던 데드락을 수정 #55132 (alesapin).
- 스토리지에서 Iceberg 파일을 조회하는 기능을 수정합니다 #55144 (Kseniia Sumarokova).
- Set에서 추가 컬럼에 대한 파티션 프루닝을 수정했습니다. #55172 (Amos Bird).
- adaptive granularity를 사용하는 테이블에서
ALTER UPDATE쿼리를 실행할 때 skip 인덱스가 잘못 재계산되던 문제를 수정했습니다. #55202 (Duc Canh Le). - fs 캐시의 백그라운드 다운로드 문제를 수정 #55252 (Kseniia Sumarokova).
- 버퍼 최종 처리가 누락된 경우 압축기에서 발생할 수 있는 메모리 누수를 방지합니다 #55262 (Azat Khuzhin).
- 희소 컬럼에서 함수가 실행되는 방식을 수정했습니다 #55275 (Azat Khuzhin).
- SummingMergeTree에서 SELECT FINAL 쿼리에서 Nested 타입이 잘못 머지되던 문제를 수정함 #55276 (Azat Khuzhin).
- S3 기반에서 zero copy 없이 사용하는 복제된 MergeTree 테이블에서 detached 상태의 파티션을 DROP 할 수 없던 버그를 수정했습니다 #55309 (alesapin).
- MergeSortingPartialResultTransform에서
remerge이후 청크가 0개가 되어 발생하던 크래시를 수정함 #55335 (Azat Khuzhin). - 오류 발생 시 공유 예외를 던져 발생하던 CreatingSetsTransform의 데이터 레이스를 수정했습니다 #55338 (Azat Khuzhin).
- trash 최적화를 일부 수정했습니다 #55353 (Alexey Milovidov).
- StorageHDFS의 메모리 누수 문제를 수정했습니다. #55370 (Azat Khuzhin).
- cast 연산자에서의 배열 파싱을 수정합니다 #55417 (Anton Popov).
- OR 조건을 사용하는 쿼리에서 가상 컬럼을 이용한 필터링을 수정함 #55418 (Azat Khuzhin).
- MongoDB 연결 문제를 수정했습니다 #55419 (Nikolay Degterinsky).
- MySQL 인터페이스의 Boolean 값 표현을 수정했습니다 #55427 (Serge Klochkov).
- MySQL 텍스트 프로토콜의 DateTime 형식 지정과 LowCardinality(Nullable(T)) 타입 보고를 수정했습니다 #55479 (Serge Klochkov).
use_mysql_types_in_show_columns설정이SHOW COLUMNS명령에만 영향을 미치도록 합니다 #55481 (Robert Schulze).- 스택 심볼라이저가
DW_FORM_ref_addr를 잘못 파싱하여 때때로 크래시가 발생하던 문제를 수정했습니다 #55483 (Michael Kolupaev). - AsyncTaskExecutor의
cancelBefore에서 예외가 발생할 경우 fiber를 소멸하도록 했습니다 #55516 (Kruglov Pavel). - 커스텀 HTTP 핸들러에서 쿼리 파라미터(Query Parameters)가 작동하지 않던 문제를 수정합니다 #55521 (Konstantin Bogdanov).
- Values 포맷에서 미처리 데이터에 대한 검사 로직을 수정합니다 #55527 (Azat Khuzhin).
- ODBC를 통해 MS SQL Server와 상호 작용할 때 발생하던 'Invalid cursor state' 오류를 수정했습니다 #55558 (vdimir).
- max execution time 및 'break' overflow 모드를 수정했습니다 #55577 (Alexander Gololobov).
- 순환 별칭으로 인해 QueryNormalizer가 크래시되는 문제를 수정합니다 #55602 (vdimir).
- 잘못된 최적화를 사용 중지하고 테스트를 추가함 #55609 (Alexey Milovidov).
- #52352 및 #55621 병합(Alexey Milovidov).
- 잘못된 decimal 정렬을 방지하는 테스트를 추가했습니다 #55662 (Amos Bird).
- URL에 와일드카드(glob)가 없는 S3 및 Azure 클러스터 함수의 진행률 표시줄을 수정함 #55666 (Kruglov Pavel).
- 쿼리에서 OR 조건과 함께 사용하는 가상 컬럼 필터링을 수정했습니다(재제출). #55678 (Azat Khuzhin).
- Iceberg 스토리지 관련 수정 및 개선 #55695 (Kruglov Pavel).
- CreatingSetsTransform (v2)의 데이터 레이스를 수정했습니다 #55786 (Azat Khuzhin).
- precise_float_parsing이 true인 경우 잘못된 문자열을 float로 파싱하면 예외를 발생시키도록 변경 #55861 (李扬).
- CTE에 상태를 가지는 함수가 포함된 경우 프레디케이트 푸시다운을 비활성화합니다 #55871 (Raúl Marín).
- 쿼리에서
FORMAT이 제거되던 문제를 수정하기 위해ASTSelectWithUnionQuery의 정규화 과정을 수정했습니다. #55887 (flynn). - Native ORC 입력 포맷에서 발생할 수 있는 segfault를 수정하려고 시도했습니다 #55891 (Kruglov Pavel).
- 희소 컬럼이 포함된 경우 윈도 함수 동작을 수정했습니다. #55895 (János Benjamin Antal).
- 수정: StorageNull이 서브컬럼을 지원하도록 수정했습니다 #55912 (FFish).
- Replicated mutate/merge 작업의 재시도 가능한 오류를 에러 로그에 기록하지 않습니다 #55944 (Azat Khuzhin).
SHOW DATABASES LIMIT <N>를 수정했습니다. #55962 (Raúl Marín).- 밑줄이 포함된 필드를 가진 자동 생성 Protobuf 스키마를 수정했습니다 #55974 (Kruglov Pavel).
- 기본값이 아닌 scale을 사용할 때 dateTime64ToSnowflake64()가 올바르게 동작하지 않던 문제를 수정했습니다 #55983 (Robert Schulze).
- Arrow 딕셔너리 컬럼의 입출력을 수정했습니다 #55989 (Kruglov Pavel).
- AvroConfluent에서 schema registry에서 스키마를 가져오는 기능을 수정했습니다. #55991 (Kruglov Pavel).
- Buffer 테이블에서 ALTER와 INSERT를 동시에 수행할 때 발생하던 「Block structure mismatch」 오류를 수정했습니다 #55995 (Michael Kolupaev).
- least_used JBOD 정책에서 사용 가능한 공간을 잘못 계산하던 문제를 수정했습니다. #56030 (Azat Khuzhin).
- 테이블 함수 내에서 서브쿼리를 평가할 때 발생하는 스칼라 누락 문제를 수정합니다 #56057 (Amos Bird).
- http_write_exception_in_output_format=1일 때 잘못된 쿼리 결과가 반환되던 문제를 수정했습니다 #56135 (Kruglov Pavel).
- 설정이 변경된 경우 fallback JSON->JSONEachRow에 대한 스키마 캐시를 수정했습니다 #56172 (Kruglov Pavel).
- odbc-bridge에 오류 처리기를 추가합니다 #56185 (Yakov Olkhovskiy).
ClickHouse 릴리스 23.9, 2023-09-28. 발표 자료, 비디오
하위 호환되지 않는 변경 사항
- 기본 Prometheus 핸들러에서
status_info설정 옵션과 딕셔너리 상태 정보를 제거합니다. #54090 (Alexey Milovidov). - 실험적인 파트(parts) 메타데이터 캐시가 코드베이스에서 제거되었습니다. #54215 (Alexey Milovidov).
- 기본적으로
input_format_json_try_infer_numbers_from_strings설정을 비활성화합니다. 이를 통해 샘플 데이터에 숫자처럼 보이는 문자열이 포함된 경우 발생할 수 있는 파싱 오류를 피하기 위해, JSON 포맷에서 문자열로부터 숫자를 기본적으로 추론하지 않도록 합니다. #55099 (Kruglov Pavel).
새로운 기능
- JSON 포맷에서 스키마 추론을 개선합니다. 1) 이제 JSON 포맷에서
input_format_json_try_infer_named_tuples_from_objects설정을 사용하면 실험적 JSON 타입 없이도 JSON 객체로부터 이름이 있는 Tuple(named Tuple)을 추론할 수 있습니다. 이전에는 실험적 JSON 타입이 없을 때 JSON 객체를 String 또는 맵(Map)으로만 추론할 수 있었지만, 이제는 이름이 있는 Tuple을 추론할 수 있습니다. 결과 Tuple 타입에는 스키마 추론 동안 데이터 샘플에서 읽은 객체의 모든 키가 포함됩니다. 이는 희소한 객체가 없는 구조화된 JSON 데이터를 읽는 데 유용합니다. 이 설정은 기본적으로 활성화되어 있습니다. 2)input_format_json_read_arrays_as_strings설정을 사용하면 JSON 배열을 String 타입 컬럼으로 파싱할 수 있습니다. 이는 서로 다른 타입의 값을 가진 배열을 읽는 데 도움이 됩니다. 3)input_format_json_infer_incomplete_types_as_strings설정을 사용하면 샘플 데이터에서 타입을 알 수 없는(null/[]/{}) JSON 키에 대해 String 타입을 사용할 수 있습니다. 이제 JSON 포맷에서는 어떤 값이든 String 컬럼으로 읽을 수 있으므로, 알 수 없는 타입에 대해 String 타입을 사용하면 스키마 추론 중Cannot determine type for column 'column_name' by first 25000 rows of data, most likely this column contains only Nulls or empty Arrays/Maps오류가 발생하는 것을 피하고 데이터를 성공적으로 읽을 수 있습니다. #54427 (Kruglov Pavel). - 원격 디스크에 대한 IO 스케줄링 지원이 추가되었습니다. 디스크 유형
s3,s3_plain,hdfs,azure_blob_storage에 대한 스토리지 구성에 이제 리소스 이름을 지정하는read_resource및write_resource요소를 포함할 수 있습니다. 이러한 리소스에 대한 스케줄링 정책은 별도의 서버 설정 섹션resources에서 구성할 수 있습니다. 다양한 리소스 스케줄링 목표를 달성하기 위해, 쿼리를 설정workload로 표시하고 서버 설정 섹션workload_classifiers를 사용해 분류할 수 있습니다. 자세한 내용은 문서를 참고하십시오. #47009 (Sergei Trifonov). "bandwidth_limit" IO 스케줄링 노드 타입이 추가되었습니다. 이 노드를 통과하는 트래픽에 대해max_speed및max_burst제한을 지정할 수 있습니다. #54618 (Sergei Trifonov). - 새로운 유형의 SSH 키 기반 인증이 추가되었습니다. 이는 네이티브 TCP 프로토콜에서만 동작합니다. #41109 (George Gamezardashvili).
- MergeTree 테이블에 새로운 컬럼
_block_number가 추가되었습니다. #44532. #47532 (SmitaRKulkarni). DROP TABLE쿼리에IF EMPTY절을 추가했습니다. #48915 (Pavel Novitskiy).- SQL 함수
toString(datetime, timezone)및formatDateTime(datetime, format, timezone)가 이제 상수가 아닌 시간대(timezone) 인자를 지원합니다. #53680 (Yarik Briukhovetskyi). ALTER TABLE MODIFY COMMENT에 대한 지원을 추가합니다. 참고: 과거에 외부 기여자가 이와 유사한 기능을 추가했으나, 해당 기능은 전혀 동작하지 않아 사용자에게 혼란만 주었습니다. 이 변경으로 #36377이(가) 해결됩니다. #51304 (Alexey Milovidov). 참고: 이 명령은 레플리카 간에 전파되지 않으므로, 하나의 테이블에 대해 각 레플리카가 서로 다른 주석을 가질 수 있습니다.GCD(greatest common denominator, 최대공약수)을 새로운 데이터 압축 코덱으로 추가했습니다. 이 코덱은 모든 컬럼 값의 GCD를 계산한 뒤, 각 값을 그 GCD로 나눕니다. GCD 코덱은 Delta, DoubleDelta와 유사한 데이터 준비용 코덱으로, 단독으로는 사용할 수 없습니다. 정수, 소수, 날짜/시간 타입의 데이터에서 동작합니다. GCD 코덱의 적절한 사용 사례는 GCD의 배수 단위로 증가하거나 감소하는 컬럼 값입니다. 예: 24 - 28 - 16 - 24 - 8 - 24 (GCD = 4라고 가정). #53149 (Alexander Nam).- 두 가지 새로운 타입 별칭
DECIMAL(P)(이는DECIMAL(P, 0)의 축약형)과DECIMAL(이는DECIMAL(10, 0)의 축약형)이 추가되었습니다. 이로써 ClickHouse는 MySQL의 SQL 방언과 더 잘 호환됩니다. #53328 (Val Doroshchuk). - 모든
BACKUP및RESTORE작업을 추적할 수 있도록 새로운 시스템 로그 테이블backup_log를 추가했습니다. #53638 (Victor Krasnov). - 형식 설정
output_format_markdown_escape_special_characters(기본값: false)이 추가되었습니다. 이 설정은Markdown출력 형식에서!,#,$등과 같은 특수 문자를 이스케이프할지(예: 문자 앞에 역슬래시를 붙이는 방식) 여부를 제어합니다. #53860 (irenjj). decodeHTMLComponentFUNCTION을 추가했습니다. #54097 (Bharat Nallan).query_log테이블에peak_threads_usage를 추가했습니다. #54335 (Alexey Gerasimchuck).- clickhouse-client에
SHOW FUNCTIONS지원이 추가되었습니다. #54337 (Julia Kartseva). - MySQL과의 호환성을 위해 별칭
TO_DAYS를 가지며, 프로렙틱 그레고리력(Proleptic Gregorian Calendar)을 기준으로0001-01-01이후 경과한 일 수를 반환하는 함수toDaysSinceYearZero가 추가되었습니다. #54479 (Robert Schulze). 함수toDaysSinceYearZero는 이제DateTime및DateTime64타입의 인수도 지원합니다. #54856 (Serge Klochkov). YYYYMMDDtoDate,YYYYMMDDtoDate32,YYYYMMDDhhmmssToDateTime및YYYYMMDDhhmmssToDateTime64함수를 추가했습니다. 이 함수들은 정수로 인코딩된 날짜 또는 날짜-시간(예: 20230911)을 네이티브 날짜 또는 날짜-시간으로 변환합니다. 따라서 기존 함수YYYYMMDDToDate,YYYYMMDDToDateTime,YYYYMMDDhhmmddToDateTime,YYYYMMDDhhmmddToDateTime64와 반대 방향의 기능을 제공합니다. #54509 (Quanfa Fu) (Robert Schulze).byteHammingDistance,editDistance등을 포함한 여러 문자열 거리 함수를 추가합니다. #54935 (flynn).VALID UNTIL datetime절을 사용하여 사용자 자격 증명에 대한 만료 날짜와, 선택적으로 만료 시간을 지정할 수 있습니다. #51261 (Nikolay Degterinsky).- 테이블 함수
s3,gcs,oss에 대해 S3 스타일의 URL을 허용합니다. URL은 자동으로 HTTP URL로 변환됩니다. 예:'s3://clickhouse-public-datasets/hits.csv'는'https://clickhouse-public-datasets.s3.amazonaws.com/hits.csv'로 변환됩니다. #54931 (Yarik Briukhovetskyi). - 깊게 중첩된 튜플/맵/배열 타입을 보기 좋게 출력할 수 있도록 새로운 설정
print_pretty_type_names를 추가합니다. #55095 (Kruglov Pavel).
성능 개선
- 기본값으로 prefetch를 활성화하여 S3에서 데이터 읽기 속도를 높였습니다. #53709 (Alexey Milovidov).
- FINAL이 있는 쿼리에서 필요하지 않은 경우, 단일 파트의 PK와 버전 컬럼을 암묵적으로 읽지 않습니다. #53919 (Duc Canh Le).
- 상수 키를 사용하는
GROUP BY를 최적화합니다. https://github.com/ClickHouse/ClickHouse/pull/53529 이후에는_file/_path로GROUP BY하는 쿼리도 최적화됩니다. #53549 (Kruglov Pavel). Decimal컬럼 정렬 성능을 개선합니다. ORDER BY 절에Decimal컬럼이 포함된 경우MergeTree로의 삽입 성능을 개선합니다. 데이터가 이미 정렬되어 있거나 거의 정렬된 상태일 때 정렬 성능을 개선합니다. #35961 (Maksim Kita).- 대규모 쿼리 분석 시 성능을 개선했습니다. #51224를 수정했습니다. #51469 (frinkr).
GROUP BY가 있는 서브쿼리에서 선택되는 경우COUNT(DISTINCT ...)및 다양한uniq변형을count로 변환하는 최적화입니다. #52082 #52645 (JackyWoo).- 수동으로
mmap/mremap/munmap를 호출하던 부분을 제거하고 이 모든 작업을jemalloc에 위임하여 성능이 소폭 향상되었습니다. #52792 (Nikita Taranov). - NATS 사용 시 발생하던 높은 CPU 사용량 문제를 수정했습니다. #54399 (Vasilev Pyotr).
toString를 datetime 인수와 함께 실행하기 위해 별도의 구현을 사용하므로, datetime이 아닌 인수에 대해서는 성능을 약간 향상시키고 코드의 일부를 더 단순하게 만들 수 있습니다. #53680에 대한 후속 작업입니다. #54443 (Yarik Briukhovetskyi).std::stringstream으로 JSON 요소를 직렬화하는 대신, 이 PR에서는 직렬화 결과를ColumnString에 직접 저장합니다. #54613 (lgbo).- 뷰를 통해 접근하는 MergeTree 테이블에서도 ORDER BY 순서에 맞춰 데이터를 읽을 수 있도록 최적화를 활성화했습니다. #54628 (Vitaly Baranov).
GeneratorJSONPath를 재사용하고 여러 개의 shared pointer를 제거하여 JSON SQL 함수의 성능을 향상시켰습니다. #54735 (lgbo).- Keeper는 성능 향상을 위해 요청을 가능한 한 배치로 flush합니다. #53049 (Antonio Andelic).
- 이제
clickhouse-client는INFILE 'glob_expression'구문을 사용하는 경우 파일을 병렬로 처리합니다. #54218를 해결합니다. #54533 (Max K.). - 기본 키 컬럼의 타입이
IN함수 오른쪽 컬럼 타입과 달라더라도IN함수에 기본 키를 사용할 수 있도록 했습니다. 예시:SELECT id FROM test_table WHERE id IN (SELECT '5'). #48936를 해결합니다. #54544 (Maksim Kita). - Hash JOIN이 내부 버퍼를 축소하여,
max_bytes_in_join으로 설정된 최대 사용 가능 메모리의 절반만 사용하도록 합니다. #54584 (vdimir). - 잠재적인 OOM을 피하기 위해 ARRAY JOIN에서
max_block_size를 준수하도록 했습니다. #54290를 해결했습니다. #54664 (李扬). s3테이블 함수에서 HTTP 연결을 재사용하도록 했습니다. #54812 (Michael Kolupaev).MergeTreeRangeReader::Stream::ceilRowsToCompleteGranules에서의 선형 탐색을 이진 탐색으로 대체합니다. #54869 (usurai).
실험적 기능
- 이제
max_threads_for_annoy_index_creation설정을 사용하여Annoy인덱스 생성을 병렬화할 수 있습니다. #54047 (Robert Schulze). - 분산 테이블에서 parallel replicas를 사용할 때 더 이상 모든 레플리카에서 읽기를 수행하지 않습니다. #54199 (Igor Nikonov).
개선 사항
MergeTree데이터 파트에서 컬럼 파일의 너무 긴 이름을 이름의 해시로 대체할 수 있도록 합니다. 이를 통해 일부 상황에서File name too long오류가 발생하는 것을 방지할 수 있습니다. #50612 (Anton Popov).- 메타데이터 파싱에 실패하면
JSON형식의 데이터를JSONEachRow로 파싱합니다. 이를 통해 실제 형식이JSONEachRow인 경우에도.json확장자를 가진 파일을 읽을 수 있습니다. #45740 이슈를 종료합니다. #54405 (Kruglov Pavel). - HTTP 쿼리 실행 중 예외가 발생해도 유효한 JSON/XML을 출력합니다. 이 동작을 제어하기 위한 설정인
http_write_exception_in_output_format을(를) 추가했습니다(기본값: 활성화). #52853 (Kruglov Pavel). information_schema.tablesVIEW에 이제data_length라는 새 필드가 추가되어 디스크에 저장된 데이터의 대략적인 크기를 보여줍니다. Amazon QuickSight에서 생성된 쿼리를 실행하는 데 필요합니다. #55037 (Robert Schulze).- MySQL 인터페이스에 준비된 SQL 문(prepared statements)의 최소 구현이 추가되어, MySQL 커넥터를 통해 Tableau Online에서 ClickHouse로의 연결이 가능해졌습니다. #54115 (Serge Klochkov). 참고: 준비된 SQL 문 구현은 아직 매우 제한적인 수준이며, 현재는 인자 바인딩(argument binding)을 지원하지 않습니다. 이 기능은 이번 Tableau Online 사용 사례에는 필요하지 않습니다. Tableau Online을 광범위하게 테스트하는 과정에서 문제가 발견될 경우, 필요 시 후속 작업으로 구현할 예정입니다.
regexp_tree딕셔너리에서 대소문자를 구분하지 않는(case-insensitive) 및 dot-all 매칭 모드를 지원합니다. #50906 (Johann Gan).- Keeper 개선:
createIfNotExistsKeeper 명령이 추가되었습니다. #48855 (Konstantin Bogdanov). - 정수형 타입 추론을 보다 정밀하게 개선하고 #51236을(를) 수정했습니다. #53003 (Chen768959).
- MaterializedMySQL의 문자열 리터럴에 대한 문자 집합(charset) 해석이 도입되었습니다. #53220 (Val Doroshchuk).
- 극히 드물게 사용되는
EmbeddedRocksDB테이블 엔진에서, 매우 예외적인 상황에만 발생하는 미묘한 문제를 수정합니다. 일부 경우DROP TABLE실행 후EmbeddedRocksDB테이블 엔진이 NFS에서 파일을 올바르게 닫지 않는 문제가 있었습니다. #53502 (Mingliang Pan). RESTORE TABLE ON CLUSTER는 각 호스트에서 UUID가 일치하는 복제된 테이블(Replicated Table)을 CREATE해야 합니다. 그렇지 않으면 ZooKeeper 경로의 매크로{uuid}가 RESTORE 이후에 올바르게 동작할 수 없습니다. 이 PR에서 이를 구현했습니다. #53765 (Vitaly Baranov).- 복구 설정
restore_broken_parts_as_detached가 추가되었습니다. 값이 true이면 RESTORE 과정에서 손상된 파트가 있어도 중단되지 않으며, 대신 모든 손상된 파트를broken-from-backup접두사가 붙은 이름으로detached폴더에 복사합니다. 값이 false이면 RESTORE 과정은 (있는 경우) 첫 번째 손상된 파트에서 중단됩니다. 기본값은 false입니다. #53877 (Vitaly Baranov). - HTTP 헤더 X-ClickHouse-Progress와 X-ClickHouse-Summary에
elapsed_ns필드를 추가합니다. #54179 (joelynch). - keeper-client에 대한
reconfig(https://github.com/ClickHouse/ClickHouse/pull/49450),sync,exists명령어를 구현했습니다. #54201 (pufit). clickhouse-local과clickhouse-client는 이제--query파라미터를 여러 번 지정할 수 있습니다. 예를 들어./clickhouse-client --query "SELECT 1" --query "SELECT 2"와 같이 사용할 수 있습니다. 이 구문은./clickhouse-client --multiquery "SELECT 1;S ELECT 2"보다 조금 더 직관적이고, 스크립트에서 사용하기도 약간 더 쉽고(예:queries.push_back('--query "$q"')), 기존 파라미터인--queries-file의 동작과도 더 잘 맞습니다(예:./clickhouse client --queries-file queries1.sql --queries-file queries2.sql). #54249 (Robert Schulze).formatReadableTimeDelta에 초 미만 정밀도 지원을 추가합니다. #54250 (Andrey Zvonov).allow_remove_stale_moving_parts설정을 기본적으로 활성화했습니다. #54260 (vdimir).- 캐시에서 count를 사용하는 방식을 수정하고, 아카이브에서 읽을 때 진행 표시줄을 개선합니다. #54271 (Kruglov Pavel).
- SSO를 사용한 S3 자격 증명 지원을 추가했습니다. SSO와 함께 사용할 프로필을 정의하려면
AWS_PROFILE환경 변수를 설정해야 합니다. #54347 (Antonio Andelic). - 입력 포맷에서 Array/Tuple/Map과 같은 중첩된 타입의 기본값으로 NULL을 지원합니다. #51100을(를) 해결합니다. #54351 (Kruglov Pavel).
- Arrow/Parquet 포맷에서 일부 비정상적인 청크 구성도 읽을 수 있도록 허용합니다. #54370 (Arthur Passos).
- MySQL과의 호환성을 위해
stddevPop함수에STD별칭을 추가했습니다. #54274를 해결했습니다. #54382 (Nikolay Degterinsky). - MySQL과의 호환성을 위해
addDate함수를, 일관성을 위해subDate함수를 추가했습니다. #54275를 참조하십시오. #54400 (Nikolay Degterinsky). system.detached_parts테이블에modification_time을(를) 추가했습니다. #54506 (Azat Khuzhin).- 인자 "max_substring" > 0인 함수 "splitBy*()"에서 결과 배열에 남은 문자열(있는 경우)을 포함할지 여부(Python/Spark 동작 방식)를 제어하는 설정
splitby_max_substrings_includes_remaining_string가 추가되었습니다. 기본 동작은 변경되지 않았습니다. #54518 (Robert Schulze). Int64/UInt64필드에 대한 정수형 타입 추론이 개선되었습니다. #53003의 후속 작업입니다. 이제 배열의 배열과 같은 중첩 타입과map/tuple같은 함수에서도 작동합니다. 이슈: #51236. #54553 (Kruglov Pavel).- 스칼라 값과 배열 간의 곱셈, 나눗셈 및 나머지 연산이 추가되었습니다. 예를 들어
5 * [5, 5]와[5, 5] * 5처럼 양쪽 표현 모두에서 동작하며, 두 경우 모두 사용 가능합니다. #54608 (Yarik Briukhovetskyi). keeper-client에서 삭제 작업을 보다 안전하게 할 수 있도록rm명령에 선택적version인수를 추가했습니다. #54708 (János Benjamin Antal).- systemd가 서버를 강제로 종료하지 못하도록 설정했습니다 (Buffer 테이블을 사용할 때 데이터 손실이 발생할 수 있기 때문입니다). #54744 (Azat Khuzhin).
- 시스템 테이블
system.functions에is_deterministic필드가 추가되었습니다. 이 필드는 (완전히 동일한 입력이 주어졌을 때) 함수를 두 번 호출하더라도 결과가 동일하게 유지되는지 여부를 나타냅니다. #54766 #55035 (Robert Schulze). - 스키마
information_schema의 뷰들을 MySQL의 대응하는 뷰들과 더 호환되도록(즉, 수정 및 확장하여) 개선하여 Tableau Online이 ClickHouse에 연결할 수 있을 정도로 맞추었습니다. 구체적으로는 다음과 같습니다. 1. 필드information_schema.tables.table_type의 타입을 Enum8에서 String으로 변경했습니다. 2. 뷰information_schema.table에 필드table_comment와table_collation을 추가했습니다. 3. 뷰information_schema.key_column_usage와referential_constraints를 추가했습니다. 4.information_schema뷰들에서 대문자 별칭을 구체적인 대문자 컬럼으로 교체했습니다. #54773 (Serge Klochkov). - 이제 쿼리 캐시는
now,randomString,dictGet와 같은 비결정적 함수가 포함된 쿼리 결과를 캐시하려고 하면 오류를 반환합니다. 이전 동작(아무 메시지 없이 결과를 캐시하지 않음)과 비교하면, 이는 혼란과 예기치 않은 동작을 줄여 줍니다. #54801 (Robert Schulze). file/s3/url/... 스토리지에서 materialized/ephemeral/alias와 같은 특수 컬럼 사용을 금지하고, 파일에서 ephemeral 컬럼으로의 INSERT 동작을 수정합니다. #53477를 해결합니다. #54803 (Kruglov Pavel).- 백업용 메타데이터 수집을 보다 세밀하게 설정할 수 있도록 했습니다. #54804 (Vitaly Baranov).
clickhouse-local의 로그 파일(--server_logs_file 플래그로 활성화된 경우)은 이제 각 행 앞에 타임스탬프, 스레드 ID 등을clickhouse-server와 마찬가지로 붙입니다. #54807 (Michael Kolupaev).system.merge_tree_settings테이블의is_obsolete필드 - 이제 더 이상 사용되지 않는 merge tree 설정에 대해 1로 설정됩니다. 이전에는 이 설정이 더 이상 사용되지 않음을 설명에서만 알 수 있었습니다. #54837 (Robert Schulze).- interval 리터럴을 사용할 때 복수형도 사용할 수 있도록 했습니다.
INTERVAL 2 HOURS는INTERVAL 2 HOUR와 동일하게 취급됩니다. #54860 (Jordi Villar). NullablePK를 가진 PROJECTION을 항상 생성할 수 있도록 했습니다. 이 변경으로 #54814가 해결되었습니다. #54895 (Amos Bird).- 연결 재설정으로 인한 실패 시 백업 S3 작업을 재시도합니다. #54900 (Vitaly Baranov).
- 설정의 최대값이 최소값보다 작은 경우 예외 메시지가 보다 정확하게 출력되도록 했습니다. #54925 (János Benjamin Antal).
LIKE,match및 기타 정규 표현식을 사용하는 매칭 FUNCTION이 이제 UTF-8 이외의 부분 문자열을 포함하는 패턴도 이진 매칭으로 폴백하여 매칭할 수 있게 되었습니다. 예를 들어,string LIKE '\xFE\xFF%'를 사용하여 BOM을 감지할 수 있습니다. 이로써 #54486이(가) 해결되었습니다. #54942 (Alexey Milovidov).ContextLockWaitMicroseconds프로파일 이벤트가 추가되었습니다. #55029 (Maksim Kita).- Keeper에서 로그 레벨을 동적으로 조정할 수 있게 되었습니다. #50372 (helifu).
- MySQL과의 호환성을 위해
timestamp함수를 추가했습니다. #54275를 해결했습니다. #54639 (Nikolay Degterinsky).
빌드/테스트/패키징 개선
- ClickHouse 공식 빌드와 지속적 통합 빌드에서 사용하는 컴파일러를 Clang 16에서 17로 올렸습니다. #53831 (Robert Schulze).
- 조회용 tld 데이터(
tldLookup.generated.cpp)를 다시 생성했습니다. #54269 (Bharat Nallan). - 중복된
clickhouse-keeper-client심볼릭 링크를 제거했습니다. #54587 (Tomas Barton). - bash를 찾기 위해
/usr/bin/env를 사용하도록 변경하여, 이제 Nix OS를 지원합니다. #54603 (Fionera). - DWARF 호출 그래프 없이
perf record를 수행하는 데 필요한PROFILE_CPU옵션을 CMake에 추가했습니다. #54917 (Maksim Kita). - 링커가 LLD와 다른 경우 치명적인 오류로 중단하도록 했습니다. #55036 (Alexey Milovidov).
- base64 값을 처리(인코딩/디코딩)하는 라이브러리를 Turbo-Base64에서 aklomp-base64로 교체했습니다. 둘 다 x86 및 ARM에서 SIMD 가속을 사용하지만, 1. 후자의 라이선스(BSD-2)가 ClickHouse에 더 유리하고, Turbo-Base64는 그동안 GPL-3로 전환되었으며, 2. GitHub 스타 수가 더 많은 aklomp-base64가 장기적으로 더 적합해 보이고, 3. aklomp-base64는 약간 더 나은 API를 제공하며(이는 다소 주관적일 수 있음), 4. aklomp-base64는 (스레드 안전하지 않은 초기화와 같은) 버그를 우회하기 위한 해킹을 요구하지 않습니다. 참고: aklomp-base64는 패딩되지 않은 base64 값을 거부하지만, Turbo-Base64는 best-effort 방식으로 이를 디코딩합니다. RFC-4648에서는 패딩이 필수인지 여부를 열어 두고 있으므로, 상황에 따라 이 점이 유의해야 할 동작 변경 사항이 될 수 있습니다. #54119 (Mikhail Koviazin).
버그 수정 (공식 안정 버전에서 사용자가 인지할 수 있는 오동작)
- zero-copy 복제(참고: 「zero-copy 복제」는 실험적인 기능입니다)를 사용하는 REPLACE/MOVE PARTITION 동작을 수정했습니다. #54193 (Alexander Tokmakov).
- 하드링크를 사용하여 zero-copy lock을 수정합니다 (참고: 「zero-copy 복제」는 실험적 기능입니다) #54859 (Alexander Tokmakov).
- 제로 카피 가비지 문제를 수정합니다 (참고: "zero-copy replication"은 실험적 기능입니다) #54550 (Alexander Tokmakov).
- HTTP 재시도 타임아웃을 밀리초 단위로 전달하도록 수정했습니다(이전에는 단위가 잘못되었습니다). #54438 (Duc Canh Le).
- OUTFILE에서
CapnProto/Protobuf사용 시 표시되던 오해의 소지가 있는 오류 메시지를 수정했습니다 #52870 (Kruglov Pavel). - 병렬 레플리카와 LIMIT 사용 시 요약 리포팅 동작을 수정합니다 #53050 (Raúl Marín).
- S3로부터/로의 BACKUP 시(네이티브 복사를 사용하지 않은 경우) throttling(속도 제한) 동작과 기타 일부 위치에서의 동작을 수정했습니다 #53336 (Azat Khuzhin).
- 전체 디렉터리 복사 중 I/O 스로틀링 동작을 수정합니다. #53338 (Azat Khuzhin).
- Fix: prewhere 조건으로 이동되는 과정에서 컬럼이 손실될 수 있던 문제를 수정했습니다. #53492 (Yakov Olkhovskiy).
- 바이트 단위로 동일한 파트로 교체할 때 발생하던 내부 오류를 수정했습니다 #53735 (Pedro Riera).
- 수정: interpolate 표현식에 사용되는 컬럼을 반드시 요구하도록 함 #53754 (Yakov Olkhovskiy).
- 클러스터 디스커버리 초기화와 config 내 fail point 설정을 수정 #54113 (vdimir).
accurateCastOrNull함수의 여러 문제를 수정합니다 #54136 (Salvatore Mesoraca).- FINAL 수정자와 함께 널 허용 기본 키를 사용할 때 발생하는 문제를 수정 #54164 (Amos Bird).
- 중복 데이터가 있는 경우 복제된 materialized view에 새 데이터를 삽입하지 못하던 오류를 수정했습니다. #54184 (Pedro Riera).
- 수정: 블룸 필터에서
IPv6를 허용하도록 수정 #54200 (Yakov Olkhovskiy). IPv4타입에서 발생할 수 있었던 타입 불일치 문제를 수정합니다 #54212 (Bharat Nallan).- 재생성된 인덱스를 위한
system.data_skipping_indices를 수정했습니다 #54225 (Artur Malchanau). - multiple join rewriter v2에서 발생하던 이름 충돌을 수정 #54240 (Tao Wang).
- join 이후
system.errors에 나타나는 예기치 않은 오류를 수정합니다 #54306 (vdimir). isZeroOrNull(NULL)동작 오류를 수정했습니다 #54316 (flynn).- 수정:
prefer_localhost_replica= 1인 경우 Distributed 테이블에서 병렬 레플리카 사용 시의 동작을 수정했습니다. #54334 (Igor Nikonov). - 수직 병합과 ReplacingMergeTree에서의 논리 오류를 수정하고 클린업(cleanup)을 최적화했습니다. #54368 (alesapin).
s3테이블 함수에서URI contains invalid characters오류가 발생할 수 있던 문제를 수정했습니다. #54373 (Kruglov Pavel).arrayExistsFUNCTION의 AST 최적화 과정에서 발생하는 세그멘테이션 폴트(segfault)를 수정했습니다. #54379 (Nikolay Degterinsky).analysisOfVariance함수에서 덧셈을 수행하기 전에 오버플로를 확인하도록 했습니다 #54385 (Antonio Andelic).- removeSharedRecursive의 버그를 재현하여 수정했습니다 #54430 (Sema Checherinda).
- PREWHERE 및 FINAL에서 SimpleAggregateFunction을 사용할 때 잘못된 결과가 나올 수 있는 문제를 수정했습니다. #54436 (Azat Khuzhin).
- analyzer가 아닌 경우에 indexHint를 사용한 파트 필터링 문제를 수정했습니다. #54449 (Azat Khuzhin).
- 정규화된 상태를 사용하는 집계 프로젝션을 수정했습니다 #54480 (Amos Bird).
clickhouse-local: multiquery 파라미터 관련 수정 #54498 (CuiShuoGuo).clickhouse-local에서--database명령줄 인자를 지원합니다 #54503 (vdimir).input_format_with_names_use_header가 비활성화된-WithNames포맷에서 발생할 수 있었던 파싱 오류를 수정했습니다. #54513 (Kruglov Pavel).- 드물게 발생하는 CHECKSUM_DOESNT_MATCH 오류를 수정했습니다 #54549 (alesapin).
- 이미 정렬된 결과에 대한 UNION ALL의 정렬 문제를 수정합니다 #54564 (Vitaly Baranov).
- Keeper에서 스냅샷 설치 문제를 수정함 #54572 (Antonio Andelic).
ColumnUnique의 레이스 컨디션을 수정했습니다. #54575 (Nikita Taranov).- Annoy/Usearch 인덱스: 기본값으로 인덱스를 빌드하는 동안 발생하던 LOGICAL_ERROR 수정 #54600 (Robert Schulze).
ColumnDecimal의 직렬화 로직을 수정했습니다. #54601 (Nikita Taranov).- 공백이 포함된 컬럼 이름에 대한 *Cluster functions의 스키마 추론을 수정합니다. #54635 (Kruglov Pavel).
- 기본값과 명시적 삽입 컬럼이 있는 경우 삽입 테이블의 구조를 사용하는 동작 수정 #54655 (Kruglov Pavel).
- 수정: alternation(선택)을 포함할 수 있는 정규식 매치를 키 조건으로 사용하지 않도록 했습니다. #54696 (Yakov Olkhovskiy).
- ReplacingMergeTree에서 수직 병합과 정리 동작을 수정했습니다 #54706 (SmitaRKulkarni).
- ORDER BY 이후 가상 컬럼의 값이 잘못되던 문제를 수정했습니다 #54811 (Michael Kolupaev).
- analyzer를 사용하지 않는 경우 indexHint로 파트를 필터링하는 동작을 수정했습니다 #54825 #54449 (Azat Khuzhin).
- 종료 시 발생하던 Keeper 세그멘테이션 폴트 수정 #54841 (Antonio Andelic).
- MaterializedPostgreSQL에서
Invalid number of rows in Chunk오류를 수정했습니다 #54844 (Kseniia Sumarokova). - 더 이상 사용되지 않는 포맷 설정을 별도 섹션으로 옮겼습니다 #54855 (Kruglov Pavel).
- 파티션 키가 변경될 때
minmax_count_projection이 다시 빌드되도록 했습니다 #54943 (Amos Bird). - 함수
if에서ColumnVector<Int128>로의 잘못된 형 변환을 수정했습니다. #55019 (Kruglov Pavel). - 서로 다른 프로젝션 또는 인덱스를 가진 테이블의 파트를 attach할 수 없도록 함 #55062 (János Benjamin Antal).
- 빈 서브쿼리 결과인 경우 스칼라 결과 맵에 NULL을 저장합니다 #52240 (vdimir).
- 드물게
FINAL이 잘못된 읽기 범위를 생성하던 문제를 수정 #54934 (Nikita Taranov). - 수정: Keeper 재시도 없이 insert quorum을 수행하도록 함 #55026 (Igor Nikonov).
- 널 허용과 함께 simple state를 사용할 때의 문제를 수정 #55030 (Pedro Riera).
ClickHouse 23.8 LTS 릴리스, 2023-08-31. 발표 자료, 동영상
이전 버전과 호환되지 않는 변경 사항
- 동적 디스크에 이름이 있는 경우, 디스크 함수 인수에서
disk = disk(name = 'disk_name', ...)와 같이 지정해야 합니다. 이전 버전에서는disk = disk_<disk_name>(...)와 같이 지정할 수 있었으나, 더 이상 지원되지 않습니다. #52820 (Kseniia Sumarokova). clickhouse-benchmark는--concurrency옵션을 1보다 크게 지정하여 호출하면 병렬로 연결을 설정합니다. 이전에는 유럽에서 미국으로 1000개의 동시 연결을 실행하는 경우 사실상 사용할 수 없었습니다. 이제 지연 시간이 큰 연결에 대해서도 QPS가 올바르게 계산됩니다. 이전 버전과 호환되지 않는 변경 사항:clickhouse-benchmark의 JSON 출력 옵션이 제거되었습니다. 이 옵션을 사용하던 경우, 우회 방법으로system.query_log에서 JSON 형식으로 데이터를 추출할 수 있습니다. #53293 (Alexey Milovidov).system.text_log에서microseconds컬럼이 제거되었고,system.metric_log에서milliseconds컬럼이 제거되었습니다. 이는event_time_microseconds컬럼이 존재함에 따라 중복되기 때문입니다. #53601 (Alexey Milovidov).- 메타데이터 캐시 기능이 사용 중단되었습니다. 실험적 기능이며, 실제로 사용한 적이 없습니다. 이 기능은 위험합니다. 자세한 내용은 #51182를 참고하십시오.
system.merge_tree_metadata_cache시스템 테이블이 제거되었습니다. 메타데이터 캐시는 이 버전에서는 여전히 사용할 수 있지만 곧 제거될 예정입니다. 이로써 #39197이(가) 종료됩니다. #51303 (Alexey Milovidov). - TLS 연결에서 3DES 지원이 비활성화되었습니다. #52893 (Kenji Noguchi).
새로운 기능
- zip/7z/tar 아카이브에서 직접 가져오기를 지원합니다. 예:
file('*.zip :: *.csv'). #50321 (nikitakeba). trace_type = 'MemorySample'인 경우를 위해system.trace_log에 컬럼ptr를 추가했습니다. 이 컬럼에는 메모리 할당 주소가 저장됩니다. 할당되었지만 해제되지 않은 메모리를 포함하는 flame graph를 생성할 수 있는 함수flameGraph를 추가했습니다. #38391에 대한 재작업입니다. #45322 (Nikolai Kochetov).- 테이블 함수
azureBlobStorageCluster가 추가되었습니다. 지원되는 기능 집합은 테이블 함수s3Cluster와 매우 유사합니다. #50795 (SmitaRKulkarni). cluster,clusterAllReplicas,remote,remoteSecure를 테이블 이름 없이 사용할 수 있도록 했습니다(이슈 #50808). #50848 (Yangkuan Liu).- Kafka consumer를 모니터링하는 시스템 테이블입니다. #50999 (Ilya Golshtein).
max_sessions_for_user설정을 추가했습니다. #51724 (Alexey Gerasimchuck).- Spark의
to_utc_timestamp/from_utc_timestamp와 동일하게 동작하는 새로운 함수toUTCTimestamp/fromUTCTimestamp가 추가되었습니다. #52117 (KevinyhZou). - ClickHouse 테이블 구조를 CapnProto/Protobuf 포맷 스키마로 변환하는 새로운 함수
structureToCapnProtoSchema/structureToProtobufSchema를 추가합니다. 테이블 구조에서 자동 생성된 스키마를 사용하여(설정format_capn_proto_use_autogenerated_schema/format_protobuf_use_autogenerated_schema로 제어) 외부 포맷 스키마 없이 CapnProto/Protobuf 포맷으로 데이터를 입출력할 수 있습니다. 설정output_format_schema를 사용해 데이터 입출력 시 자동 생성된 스키마를 내보낼 수 있습니다. #52278 (Kruglov Pavel). system.query_log에 새로운 필드query_cache_usage가 추가되어 이제 쿼리 캐시가 사용되었는지와 어떻게 사용되었는지를 보여줍니다. #52384 (Robert Schulze).- 새로운 함수인
startsWithUTF8및endsWithUTF8를 추가했습니다. #52555 (李扬). - TSV/CustomSeparated/JSONCompactEachRow 형식에서 가변적인 컬럼 개수를 허용하고, 가변적인 컬럼 개수에서도 스키마 추론이 동작하도록 했습니다.
input_format_tsv_allow_variable_number_of_columns,input_format_custom_allow_variable_number_of_columns,input_format_json_compact_allow_variable_number_of_columns설정을 추가했습니다. #52692 (Kruglov Pavel). ReplicatedMergeTree테스트를 위해SYSTEM STOP/START PULLING REPLICATION LOG쿼리가 추가되었습니다. #52881 (Alexander Tokmakov).- 뮤테이션 수행 시 initiator 노드에서 상수 비결정적 FUNCTION을 실행할 수 있도록 허용합니다. #53129 (Anton Popov).
system.one과 같이 어떤 데이터도 읽지 않고 항상UInt8타입의dummy컬럼이 값0인 단일 행을 반환하는 입력 포맷One을 추가합니다. 이 포맷은_file/_path가상 컬럼과 함께 사용하여 file/s3/url/hdfs 등 테이블 함수에서 데이터를 읽지 않고 파일을 나열하는 데 사용할 수 있습니다. #53209 (Kruglov Pavel).tupleConcatFUNCTION을 추가했습니다. #52759 이슈를 종료합니다. #53239 (Nikolay Degterinsky).TRUNCATE DATABASE연산을 지원합니다. #53261 (Bharat Nallan).- 기본 키 처리에 사용되는 스레드 수를 제한하기 위한
max_threads_for_indexes설정을 추가합니다. #53313 (jorisgio). - SipHash 키 기반 FUNCTION들을 다시 추가했습니다. #53525 (Salvatore Mesoraca).
- (#52755 , #52895)
arrayRotateLeft,arrayRotateRight,arrayShiftLeft,arrayShiftRight함수를 추가했습니다. #53557 (Mikhail Koviazin). system.clusters테이블에cluster컬럼의 별칭으로name컬럼을 추가합니다. #53605 (irenjj).- 이제 고급 대시보드에서 일괄 편집(저장 및 불러오기)을 사용할 수 있습니다. #53608 (Alexey Milovidov).
- 이제 고급 대시보드에서 차트를 최대화하고 이동할 수 있습니다. #53622 (Alexey Milovidov).
- 배열 간 덧셈 및 뺄셈 연산을 지원합니다:
[5,2] + [1,7]. 원소별 곱(pointwise multiplication)과 인자들의 스칼라 곱(scalar product) 사이에 혼동의 소지가 있어 나눗셈과 곱셈은 구현하지 않았습니다. #49939을(를) 해결합니다. #52625 (Yarik Briukhovetskyi). - 문자열 리터럴을 테이블 이름으로 사용할 수 있도록 지원을 추가했습니다. 이 변경으로 #52178 이슈가 해결되었습니다. #52635 (hendrik-m).
실험적 기능
- S3에서 스트리밍 데이터 가져오기를 위한 새로운 테이블 엔진
S3Queue를 추가합니다. #37012를 해결합니다. #49086 (s-kat). 아직 사용할 준비가 되어 있지 않습니다. 사용하지 마십시오. - 분산 테이블을 통한 레플리카에서의 병렬 읽기를 활성화합니다. #49708와 관련됩니다. #53005 (Igor Nikonov).
- 근사 이웃 탐색 방법으로 HNSW에 대한 실험적 지원을 추가합니다. #53447 (Davit Vardanyan). 현재는 구현 작업을 계속 진행하는 개발자를 대상으로 합니다. 사용하지 마십시오.
성능 개선
- Parquet 필터 푸시다운. 즉 Parquet 파일을 읽을 때
WHERE조건과 각 컬럼의 최소/최대 값에 따라 행 그룹(파일의 청크)이 건너뜁니다. 특히 파일이 어떤 컬럼을 기준으로 대략 정렬되어 있다면, 해당 컬럼의 좁은 범위를 기준으로 필터링하는 쿼리는 훨씬 더 빨라집니다. #52951 (Michael Kolupaev). - Parquet에서 작은 행 그룹을 묶어 일괄로 읽어들이도록 최적화합니다. 관련 이슈 #53069를 해결합니다. #53281 (Kruglov Pavel).
- 대부분의 입력 포맷에서 파일 기반 count 연산을 최적화합니다. #44334를 종료합니다. #53637 (Kruglov Pavel).
url/file/hdfs테이블 FUNCTION에서 데이터를 읽기 전에 파일/경로 기준 필터링을 수행합니다. #53529 (Kruglov Pavel).- AArch64, PowerPC, SystemZ, RISC-V에서 JIT 컴파일을 활성화했습니다. #38217 (Maksim Kita).
countDistinctIf를count_distinct_implementation으로 재작성하도록 하는 설정rewrite_count_distinct_if_with_count_distinct_implementation을 추가했습니다. #30642 이슈를 해결했습니다. #46051 (flynn).- 병합 전에 변환을 병렬화하여
uniq및uniqExact집계 함수의 상태 병합 속도를 향상했습니다. #50748 (Jiebin Sun). - 다수의 가변 길이 키를 사용할 때 널 허용 문자열 키의 집계 성능을 최적화했습니다. #51399 (LiuNeng).
- Analyzer에 preimage를 사용한 시간 필터 최적화를 위한 패스(pass)를 추가합니다. ICX 장치(Intel Xeon Platinum 8380 CPU, 80코어, 160스레드)에서 SSB를 대상으로 수행한 성능 실험 결과, 실험용 Analyzer가 활성화된 경우 이 변경으로 기하 평균 QPS가 8.5% 향상될 수 있음이 확인되었습니다. #52091 (Zhiguo Zhou).
uniqExact(COUNT DISTINCT) 함수에서 모든 해시 Set이 단일 레벨(single-level)인 경우 머지 작업을 최적화했습니다. #52973 (Jiebin Sun).Join테이블 엔진: 모든 컬럼을 포함하는 해시 조인 데이터 구조를 복제하지 않습니다. #53046 (Duc Canh Le).- "apache arrow" 라이브러리 없이 네이티브
ORC입력 포맷을 구현하여 성능을 개선합니다. #53324 (李扬). - 대시보드는 서버에 데이터 압축을 요청하여, 느린 인터넷 연결 환경에서 긴 시간 범위를 조회할 때 유용합니다. 예를 들어, 데이터 포인트 86,400개가 있는 차트 하나는 압축하지 않았을 때 1.5MB이지만,
br로 압축하면 60KB가 될 수 있습니다. #53569 (Alexey Milovidov). - BACKUP 및 RESTORE 작업에서 스레드 풀 활용이 개선되었습니다. #53649 (Nikita Mikhaylov).
- 시작 시 파일 시스템 캐시 메타데이터를 병렬로 로드합니다. 캐시 구성 설정인
load_metadata_threads(기본값: 1)로 설정합니다. #52037와 관련 있습니다. #52943 (Kseniia Sumarokova). move_primary_key_columns_to_end_of_prewhere를 개선했습니다. #53337 (Han Fei).- 이 변경은 ClickHouse Keeper와의 상호작용을 최적화합니다. 이전에는 호출 측에서 동일한 watch 콜백을 여러 번 등록할 수 있었습니다. 그 경우 각 엔트리가 메모리를 소비하고 동일한 콜백이 여러 번 호출되어 큰 의미가 없었습니다. 이를 피하기 위해서는 호출 측에서 동일한 watch를 여러 번 추가하지 않도록 하는 로직을 구현해야 했습니다. 이번 변경으로, watch 콜백이
shared_ptr를 통해 전달되는 경우 이러한 중복 제거는 내부적으로 수행됩니다. #53452 (Alexander Gololobov). - file/s3/url/hdfs/azure 함수에서 count 연산을 위해 파일 내 행 수를 캐시합니다. 기본적으로 활성화되어 있는
use_cache_for_count_from_files설정을 통해 캐시를 활성화하거나 비활성화할 수 있습니다. https://github.com/ClickHouse/ClickHouse/pull/53637 의 후속 작업입니다. #53692 (Kruglov Pavel). - 보다 정교한 스레드 관리를 통해, 매우 많은 수의 파일에 대해 S3 테이블 함수의 속도가 25% 이상 향상됩니다. #53668 (pufit).
개선 사항
- 외부 명령의 stderr에 데이터가 있을 때 취할 동작(없음, 로그 기록 또는 예외 발생)을 제어할 수 있는
stderr_reaction설정을 추가했습니다. 이를 통해 외부 명령을 더 쉽게 디버깅할 수 있습니다. #43210 (Amos Bird). system part_log및 merge 테이블에partition컬럼을 추가했습니다. #48990 (Jianfei Hu).- (index) uncompressed/mark, mmap 및 쿼리 캐시의 크기를 이제 서버 재시작 없이 런타임에 동적으로 설정할 수 있습니다. #51446 (Robert Schulze).
- 복합 키를 사용하는 딕셔너리를 CREATE하면 「complex key」 레이아웃 변형이 자동으로 선택되도록 했습니다. #49587 (xiebin).
- 새로운 동시성 제어 기능을 보다 잘 테스트할 수 있도록
use_concurrency_control설정을 추가했습니다. #49618 (Alexey Milovidov). - 잘못 입력된 데이터베이스 및 테이블 이름에 대한 제안 기능이 추가되었습니다. #49801 (Yarik Briukhovetskyi).
- Gluten을 통해 HDFS에서 작은 파일을 읽는 경우, Spark에서 직접 쿼리할 때와 비교해 시간이 더 오래 걸린다는 것을 발견했습니다. 이에 대해 몇 가지 개선 작업을 진행했습니다. #50063 (KevinyhZou).
- 세션 만료 후에 쓸모없는 오류 로그가 지나치게 많이 생성되는 문제가 있었으며, 이는 원치 않는 동작이었습니다. #50171 (helifu).
- 시간 제한이 있는 대체 ZooKeeper 세션을 도입했습니다. DNS 주소에 대해 system.zookeeper_connection의
index컬럼을 수정했습니다. #50424 (Anton Kozlov). max_partitions_per_insert_block한계에 도달했을 때 이를 로그로 남기는 기능을 추가했습니다. #50948 (Sean Haynes).- clickhouse-keeper-client에 여러 가지 커스텀 명령을 추가했습니다(주로 ClickHouse 디버깅을 더 쉽게 하기 위함입니다). #51117 (pufit).
sas가 포함된 연결 문자열이 항상 기본 엔드포인트로 시작하지 않을 수 있다는 점을 반영하여azureBlobStorage테이블 함수에서의 연결 문자열 검사를 수정하고, Azure 컨테이너를 URL에 추가한 뒤sas토큰이 포함되도록 연결 URL을 수정했습니다. #51141 (SmitaRKulkarni).full_sorting_mergeJOIN 알고리즘에서 Set 필터링 관련 설명을 수정했습니다. #51329 (Tanay Tummalapalli).max_block_size가 매우 클 때Aggregator의 메모리 사용량 문제를 수정했습니다. #51566 (Nikita Taranov).SYSTEM SYNC FILESYSTEM CACHE명령을 추가합니다. 이 명령은 파일 시스템 캐시의 메모리 내 상태를 디스크에 있는 내용과 비교하고, 필요하면 메모리 내 상태를 수정합니다. 이는 디스크의 데이터에 수동으로 개입하는 경우에만 필요하며, 이러한 작업은 강력하게 권장하지 않습니다. #51622 (Kseniia Sumarokova).- 기존 S3 storage conf 프록시 리졸버와의 하위 호환성을 유지하면서 ClickHouse용 범용 프록시 리졸버를 도입했습니다. #51749 (Arthur Passos).
- file/S3/HDFS/URL/AzureBlobStorage 테이블 함수에서 튜플의 서브컬럼 읽기를 지원합니다. #51806 (Kruglov Pavel).
- 함수
arrayIntersect가 이제 첫 번째 인수에 해당하는 순서로 값을 반환합니다. #27622 이슈를 해결했습니다. #51850 (Yarik Briukhovetskyi). - 지정된 access storage에서 access entity를 생성하거나 삭제하고, access entity를 한 access storage에서 다른 access storage로 이동할 수 있는 새로운 쿼리를 추가했습니다. #51912 (pufit).
ALTER TABLE FREEZE쿼리가 Replicated 데이터베이스 엔진에서 레플리케이션되지 않도록 변경했습니다. #52064 (Mike Kot).- 예기치 않은 종료 시 시스템 테이블을 플러시할 수 있는 기능을 추가했습니다. #52174 (Alexey Gerasimchuck).
- pre-signed URL과 함께 사용할 때
S3테이블 함수가 작동하지 않던 문제를 수정했습니다. #50846을(를) 종료했습니다. #52310 (chen). system.events및system.metrics테이블에event및metric의 별칭(alias)으로name컬럼을 추가합니다. #51257 이슈를 해결합니다. #52315 (chen).- 파서에서
CREATE UNIQUE INDEX구문을 아무 동작도 수행하지 않는(no-op) 구문으로 지원하여 SQL과의 호환성을 개선했습니다.UNIQUE인덱스는 지원되지 않습니다. 쿼리에서 UNIQUE 키워드를 무시하도록 하려면create_index_ignore_unique = 1로 설정합니다. #52320 (Ilya Yatsishin). - 일부 Kafka 엔진 설정(topic, consumer, client_id 등)에 미리 정의된 매크로(
{database},{table}) 지원을 추가했습니다. #52386 (Yury Bogomolov). - backup/restore 동안 filesystem cache 업데이트를 비활성화합니다. backup/restore 동안에는 filesystem cache를 업데이트하지 않아야 합니다.
BACKUP명령이 많은 데이터를 읽을 수 있고, 모든 데이터를 filesystem cache에 넣었다가 즉시 비우는 것은 아무 이득 없이 작업만 느려지게 만드는 것으로 보입니다. #52402 (Vitaly Baranov). - S3 엔드포인트 구성이 루트에서 사용할 수 있도록 허용하고, 필요 시 자동으로 '/'를 추가합니다. #47809. #52600 (xiaolei565).
- clickhouse-local에서 위치 지정 옵션을 허용하고 전역 UDF 설정(user_scripts_path 및 user_defined_executable_functions_config)을 자동으로 채우도록 했습니다. #52643 (Yakov Olkhovskiy).
system.asynchronous_metrics에는 쿼리 캐시를 확인하기 위한 "QueryCacheEntries" 및 "QueryCacheBytes" 메트릭이 이제 포함됩니다. #52650 (Robert Schulze).- S3로 백업할 때
BACKUP문장의SETTINGS절에서s3_storage_class매개변수를 사용할 수 있도록 했습니다. #52658 (Roman Vasin). - 백업 메타데이터 파일을 파싱해 백업 정보를 출력하는 유틸리티
print-backup-info.py를 추가했습니다. #52690 (Vitaly Baranov). - #49510을(를) 해결합니다. 현재 데이터베이스와 테이블 이름은 대소문자를 구분하지만, BI 도구는
information_schema를 쿼리할 때 소문자와 대문자를 혼용합니다. 이러한 이유로 소문자 테이블(예:information_schema.tables)을 포함하는information_schema데이터베이스와, 대문자 테이블(예:INFORMATION_SCHEMA.TABLES)을 포함하는INFORMATION_SCHEMA데이터베이스가 존재합니다. 그러나 일부 도구는INFORMATION_SCHEMA.tables와information_schema.TABLES를 쿼리합니다. 제안된 해결책은 소문자 및 대문자 테이블을 모두, 소문자와 대문자information_schema데이터베이스 각각에 중복해서 두는 것입니다. #52695 (Yarik Briukhovetskyi). CHECK TABLE쿼리의 성능과 사용성이 향상되었습니다(진행 상태를 표시하고 취소할 수 있음). #52745 (vdimir).modulo,intDiv,intDivOrZero연산을 튜플의 각 요소에 분배하여 적용할 수 있도록 튜플에 대한 지원을 추가했습니다. #52758 (Yakov Olkhovskiy).- clickhouse-client에서
xml이후에 기본yaml및yml구성 파일을 검색합니다. #52767 (Alexey Milovidov). - 'clickhouse'를 루트로 하지 않는 구성으로 병합할 때, 루트 노드 이름이 다른 설정은 예외 없이 그대로 건너뛰어졌습니다. #52770 (Yakov Olkhovskiy).
- 이제 샘플링 메모리 프로파일러에서 추적할 메모리 할당에 대해 최소 크기(
memory_profiler_sample_min_allocation_size)와 최대 크기(memory_profiler_sample_max_allocation_size)를 지정할 수 있습니다. #52779 (alesapin). - float 파싱 방식을 빠른/정확 모드로 전환할 수 있도록
precise_float_parsing설정을 추가했습니다. #52791 (Andrey Zvonov). clickhouse-keeper(실행 파일)과 동일한 기본 경로를clickhouse-keeper(심볼릭 링크)에도 사용하도록 변경했습니다. #52861 (Vitaly Baranov).- 테이블 함수
remote의 오류 메시지를 개선했습니다. #40220 이슈를 해결했습니다. #52959 (jiyoungyoooo). RESTORE쿼리의SETTINGS절에서 사용자 지정 스토리지 정책을 설정할 수 있도록 했습니다. #52970 (Victor Krasnov).- 백업 작업에서 S3 요청 속도를 제한(throttle)할 수 있는 기능을 추가했습니다 (
BACKUP및RESTORE명령은 이제s3_max_[get/put]_[rps/burst]설정을 따릅니다). #52974 (Daniel Pozo Escalona). - 복제된 사용자 정의 함수 또는 복제 저장소를 사용하는 액세스 제어 개체를 관리용으로 사용하는 쿼리에서
ON CLUSTER절을 무시하도록 하는 설정을 추가합니다. #52975 (Aleksei Filatov). - EXPLAIN에서 JOIN 단계의 동작을 표시합니다. #53006 (Maksim Kita).
hasTokenOrNull및hasTokenCaseInsensitiveOrNull가 빈 검색어에 대해서는 null을 반환하도록 했습니다. #53059 (ltrk2).- 파일 시스템 캐시에 대해 허용되는 경로를 제한할 수 있습니다. 주로 동적 디스크에 유용합니다. 서버 설정에서
filesystem_caches_path가 지정되어 있으면, 모든 파일 시스템 캐시의 경로는 이 디렉터리로 제한됩니다. 예를 들어, 캐시 설정의path가 상대 경로이면filesystem_caches_path아래에 위치하게 됩니다. 캐시 설정의path가 절대 경로이면filesystem_caches_path내부에 있어야 합니다. 설정에서filesystem_caches_path를 지정하지 않으면 동작은 이전 버전과 동일합니다. #53124 (Kseniia Sumarokova). - 여러 가지 사용자 정의 명령어를 추가했습니다(주로 ClickHouse 디버깅을 더 쉽게 하기 위한 것입니다). #53127 (pufit).
- 스키마 추론 시 파일 이름 관련 진단 정보를 추가합니다. 이는 glob 패턴을 사용해 여러 파일을 처리할 때 도움이 됩니다. #53135 (Alexey Milovidov).
- 두 번째 연결에서 세션을 생성할 수 없는 경우 클라이언트는 주 연결을 사용하여 제안을 로드합니다. #53177 (Alexey Gerasimchuck).
SYSTEM STOP/START LISTEN QUERIES [ALL/DEFAULT/CUSTOM]쿼리에 EXCEPT 절을 추가했습니다. 예를 들어SYSTEM STOP LISTEN QUERIES ALL EXCEPT TCP, HTTP와 같이 사용할 수 있습니다. #53280 (Nikolay Degterinsky).max_concurrent_queries의 기본값을 100에서 1000으로 변경했습니다. 쿼리가 무겁지 않고 대부분 네트워크를 기다리는 상태라면 동시 쿼리 수가 많아도 괜찮습니다. 참고: 동시 쿼리 수와 QPS를 혼동하지 마십시오. 예를 들어 ClickHouse 서버는 동시 쿼리가 100개 미만이어도 초당 수만 QPS를 처리할 수 있습니다. #53285 (Alexey Milovidov).- 동시에 실행되는 백그라운드 파티션 최적화 머지 작업 수를 제한합니다. #53405 (Duc Canh Le).
Replicated데이터베이스를 복제 또는 복구할 때Directory for table data already exists오류를 무시할 수 있게 해 주는allow_moving_table_directory_to_trash설정을 추가했습니다. #53425 (Alexander Tokmakov).- 서버 설정
asynchronous_metrics_update_period_s와asynchronous_heavy_metrics_update_period_s가 0으로 잘못 설정된 경우, 이제 애플리케이션을 종료하는 대신 오류를 안정적으로 처리합니다. #53428 (Robert Schulze). - ClickHouse 서버가 이제 구성을 다시 로드할 때 cgroups를 통해 변경된 메모리 제한을 반영합니다. #53455 (Robert Schulze).
DETACH,DROP또는 서버 종료 시 분산 테이블의 flush 동작을 끌 수 있는 기능을 추가합니다. #53501 (Azat Khuzhin).domainRFC함수가 이제 대괄호로 묶인 IPv6 주소도 지원합니다. #53506 (Chen768959).- 백업에 사용되는 S3 CopyObject 요청의 타임아웃을 늘렸습니다. #53533 (Michael Kolupaev).
- 서버 설정
aggregate_function_group_array_max_element_size가 추가되었습니다. 이 설정은 직렬화 시groupArray함수의 배열 크기를 제한하는 데 사용됩니다. 기본값은16777215입니다. #53550 (Nikolai Kochetov). - MySQL과의 호환성을 개선하기 위해
DATABASE의 별칭으로SCHEMA가 추가되었습니다. #53587 (Daniël van Eeden). system데이터베이스의 테이블에 대한 비동기 메트릭을 추가했습니다. 예를 들어TotalBytesOfMergeTreeTablesSystem과 같습니다. #53603를 해결합니다. #53604 (Alexey Milovidov).- Play UI 및 Dashboard의 SQL editor에서는 Grammarly를 사용하지 않습니다. #53614 (Alexey Milovidov).
- 고급 설정으로 이제 (1) [index] mark/uncompressed 캐시의 size_ratio(즉, 보호 큐의 상대적 크기)를 설정하고, (2) index mark 및 index uncompressed 캐시의 캐시 정책을 설정할 수 있습니다. #53657 (Robert Schulze).
- TCPHandler 쿼리 패킷에 클라이언트 정보 검증을 추가했습니다. #53673 (Alexey Gerasimchuck).
- Microsoft Azure와 상호 작용 중 네트워크 오류가 발생하면 파트 로딩을 재시도합니다. #53750 (SmitaRKulkarni).
- 예외에 대한 stacktrace가 제공되며, 구체화된 뷰(Materialized View)의 예외가 전파됩니다. #53766 (Ilya Golshtein).
- 호스트 이름이나 포트를 지정하지 않은 경우 Keeper 클라이언트는 ClickHouse의 config.xml에서 연결 문자열을 찾습니다. #53769 (pufit).
- MergeTree 테이블 엔진 계열에서 데이터 파트 잠금을 유지한 시간(마이크로초 단위)을 보여주는 프로파일 이벤트
PartsLockMicroseconds를 추가했습니다. #53797 (alesapin). - Keeper의 RAFT 제한 중 재연결 한도를 설정 가능하도록 했습니다. 이 설정을 사용하면 현재 연결이 끊어진 경우 Keeper가 피어와의 연결을 더 빠르게 복원할 수 있습니다. #53817 (Pengyuan Bian).
- MySQL과의 호환성을 개선하기 위해 테이블 정의에 포함된 외래 키를 무시하도록 변경하여, 사용자가 외래 키 관련 SQL을 다시 작성할 필요가 없도록 했습니다. #53380. #53864 (jsc0218).
빌드/테스트/패키징 개선
- ClickHouse 바이너리의 심볼을 동적 링커에 노출하지 않도록 했습니다. 이를 통해 #43933가 해결될 수 있습니다. #47475 (Alexey Milovidov).
clickhouse-keeper-client심볼릭 링크를 clickhouse-server 패키지에 추가했습니다. #51882 (Mikhail f. Shiryaev).- SQL 2016 규격 준수 여부를 보고하도록 CI에 https://github.com/elliotchance/sqltest 를 추가했습니다. #52293 (Alexey Milovidov).
- PRQL 버전을 0.9.3으로 업그레이드했습니다. #53060 (Maximilian Roos).
- CI 체크의 시스템 테이블이 ClickHouse Cloud로 내보내집니다. #53086 (Alexey Milovidov).
- 컴파일러 프로파일링 데이터(
-ftime-trace)가 ClickHouse Cloud로 업로드됩니다. #53100 (Alexey Milovidov). - Debug 및 Tidy 빌드 속도를 개선했습니다. #53178 (Alexey Milovidov).
- 빌드 과정에서 쓸모없는 항목을 대량으로 제거하여 빌드 속도를 향상했습니다. 자주 포함되던 헤더 중 하나가 Boost로 인해 문제가 되는 상태였습니다. #53180 (Alexey Milovidov).
- 더 많은 불필요한 항목을 제거합니다. #53182 (Alexey Milovidov).
- 무거운 C++ 템플릿을 사용하던
arrayAUC함수에서 이를 제거했습니다. #53183 (Alexey Milovidov). - 일부 번역 단위는 ccache와 무관하게 항상 다시 빌드되었습니다. 원인이 밝혀져 수정되었습니다. #53184 (Alexey Milovidov).
- 컴파일러의 프로파일 데이터(
-ftime-trace)가 ClickHouse Cloud에 업로드되도록 했습니다. #53100에 이어 두 번째 시도입니다. #53213 (Alexey Milovidov). - stateful 테스트에서 생성된 CI 로그를 ClickHouse Cloud로 내보냅니다. #53351 (Alexey Milovidov).
- 스트레스 테스트 시 CI에서 로그를 내보내도록 했습니다. #53353 (Alexey Milovidov).
- 퍼저 CI에서 로그를 내보내도록 했습니다. #53354 (Alexey Milovidov).
clickhouse start명령에서 환경 변수를 유지하도록 했습니다. #51962를 수정했습니다. #53418 (Mikhail f. Shiryaev).- #53418에 대한 후속 작업입니다. install_check.py를 약간 개선하고,
init.d start에서 주 프로세스로 올바른 ENV 환경 변수가 전달되는지 검증하는 테스트를 추가했습니다. #53457 (Mikhail f. Shiryaev). - CMake의 파일 관리 구성을 정리하여 잠재적인 중복을 방지합니다. 예를 들어
indexHint.cpp파일이dbms_sources와clickhouse_functions_sources에 중복으로 포함되어 있습니다. #53621 (Amos Bird). - Snappy를 1.1.10으로 업그레이드합니다. #53672 (李扬).
- 몇몇 종속성을 정리하고 중복을 제거하여 CMake 빌드를 소폭 개선했습니다. 각 커밋에는 변경 내용에 대한 간단한 설명이 포함되어 있습니다. #53759 (Amos Bird).
버그 수정(공식 안정 버전에서 사용자에게 직접 노출되는 오동작)
- 두 개 이상의 mark가 있는 build-up 과정에서 (experimental) Annoy 인덱스를 리셋하지 않습니다 #51325 (Tian Xinhui).
- RESTORE 작업에서 임시 디렉터리 사용 방식을 수정합니다. #51493 (Azat Khuzhin).
- Nullable(IPv4)에 대한 이진 산술 연산을 수정합니다 #51642 (Yakov Olkhovskiy).
- 딕셔너리 속성으로 IPv4 및 IPv6 데이터 타입을 지원합니다 #51756 (Yakov Olkhovskiy).
- 압축 마크(compress marks)의 체크섬을 수정했습니다 #51777 (SmitaRKulkarni).
- CSV best effort 파싱에서 쉼표를 datetime의 일부로 잘못 해석하던 문제를 수정합니다 #51950 (Kruglov Pavel).
- 실행형 UDF에 매개변수가 있어도 예외를 발생시키지 않도록 했습니다 #51961 (Nikita Taranov).
ALTER DELETE쿼리에서 skip 인덱스와 프로젝션 재계산 문제를 수정했습니다 #52530 (Anton Popov).- MaterializedMySQL: ReadBuffer::read에서 무한 루프가 발생하던 문제를 수정합니다. #52621 (Val Doroshchuk).
clickhouse방언에서만 로드 제안이 이루어지도록 수정 #52628 (János Benjamin Antal).- 요청 시에만 ares 채널을 초기화하고 해제하도록 했습니다. #52634 (Arthur Passos).
- OR 표현을 사용하는 가상 컬럼 필터링 문제를 수정 #52653 (Azat Khuzhin).
- 희소 컬럼 하나를 인자로 받는
tuple함수에서 발생하던 충돌 문제를 수정했습니다. #52659 (Anton Popov). - 클러스터에서 네임드 컬렉션 관련 문제를 수정합니다 #52687 (Al Korgun).
- 다단계
PREWHERE사용 시 불필요한 컬럼을 읽는 문제를 수정했습니다 #52689 (Anton Popov). - 널 우선(nulls first) 방향을 사용하는 다중 컬럼 정렬에서 예기치 않은 정렬 결과가 발생하던 문제를 수정했습니다 #52761 (copperybean).
- Keeper 재구성 시 발생하는 데이터 레이스를 수정합니다 #52804 (Antonio Andelic).
- 큰 LIMIT 값이 설정된 경우 희소 컬럼 정렬 문제를 수정 #52827 (Anton Popov).
- clickhouse-keeper: poll 기반 서버 구현을 수정했습니다. #52833 (Andy Fiddaman).
regexp분석기가 명명된 캡처 그룹을 인식하도록 수정 #52840 (Han Fei).- clickhouse-local에서
~PushingAsyncPipelineExecutor에서 발생할 수 있는 어설션 오류를 수정합니다 #52862 (Kruglov Pavel). - 비어 있는
Nested(Array(LowCardinality(...)))의 읽기 처리를 수정함 #52949 (Anton Popov). - session_log에 대한 새 테스트를 추가하고 로그인과 로그아웃 간의 불일치를 수정했습니다. #52958 (Alexey Gerasimchuck).
- SHOW CREATE MYSQL TABLE 출력에서 비밀번호가 노출되던 문제를 수정했습니다. #52962 (Duc Canh Le).
- CreateSetAndFilterOnTheFlyStep에서 희소 컬럼 형식을 전체 컬럼 형식으로 변환하도록 수정했습니다 #53000 (vdimir).
- fs 캐시에서 빈 키 프리픽스 디렉터리를 삭제할 때 드물게 발생하던 레이스 컨디션을 수정했습니다 #53055 (Kseniia Sumarokova).
- 간헐적으로 출력이 잘려 나가던
ZstdDeflatingWriteBuffer문제를 수정합니다 #53064 (Michael Kolupaev). - async flush 쿼리에서 part_log에 기록되는 query_id를 수정했습니다 #53103 (Raúl Marín).
- 캐시에서 발생할 수 있는 "Read unexpected size" 오류를 수정했습니다. #53121 (Kseniia Sumarokova).
- 새로운 Parquet 인코더를 비활성화했습니다 #53130 (Alexey Milovidov).
- "Not-ready Set" 예외를 수정했습니다 #53162 (Nikolai Kochetov).
- PostgreSQL 엔진의 문자 이스케이프 처리를 수정했습니다 #53250 (Nikolay Degterinsky).
- Experimental
session_log테이블:session_log에 대한 새로운 테스트를 추가하고 로그인 및 로그아웃 간의 불일치를 수정했습니다. #53255 (Alexey Gerasimchuck). 로그인 성공 시와 로그아웃 시의 동작 간 불일치를 수정했습니다. #53302 (Alexey Gerasimchuck). - DateTime에 하위 초 단위 간격을 추가하는 기능을 수정합니다. #53309 (Michael Kolupaev).
- 사전에서 발생하는 「Context has expired」 오류를 수정했습니다 #53342 (Alexey Milovidov).
- 일반 PROJECTION AST 형식의 오류를 수정했습니다. #53347 (Amos Bird).
- Scalar를 실행할 때 table function에서 use_structure_from_insertion_table_in_table_functions 설정 사용을 금지합니다. #53348 (flynn).
- system.table에서 select 쿼리를 실행할 때 lazy database가 로드되지 않던 문제를 수정합니다 #53372 (SmitaRKulkarni).
- MaterializedMySQL의
system.data_skipping_indices를 수정했습니다. #53381 (Filipp Ozinov). - TSV 파일 분할 엔진에서 단일 캐리지 리턴 처리 방식을 수정합니다 #53407 (Kruglov Pavel).
Context has expired오류를 올바르게 수정했습니다 #53433 (Michael Kolupaev).- IN 연산자의 오른쪽 피연산자(rhs)에 서브쿼리가 있는 경우
timeout_overflow_mode를 수정했습니다 #53439 (Duc Canh Le). - #53152 #53440에서 예기치 않은 동작을 수정했습니다. (Zhiguo Zhou).
- 경로가 모두 숫자로만 구성된 경우
JSON_QUERYFUNCTION에서 발생하던 파싱 오류를 수정함 #53470 (KevinyhZou). - 병렬 FINAL 실행 시 쿼리의 컬럼 순서가 잘못되던 문제를 수정했습니다. #53489 (Nikolai Kochetov).
- do_not_merge_across_partitions_select_final이 설정된 ReplacingMergeTree에서 SELECT를 수행할 때 발생하던 문제를 수정했습니다. #53511 (Vasily Nemkov).
- 종료 시 비동기 삽입 대기열을 먼저 플러시하도록 수정함 #53547 (joelynch).
- 희소 컬럼을 사용하는 JOIN에서 발생하던 크래시를 수정했습니다. #53548 (vdimir).
- Set skipping 인덱스에서 잘못된 인자를 가진 함수로 인해 발생할 수 있는 UB(정의되지 않은 동작)를 수정합니다 #53559 (Azat Khuzhin).
- 실험적 기능인 역색인에서 발생할 수 있는 정의되지 않은 동작(UB)을 수정했습니다. #53560 (Azat Khuzhin).
- 수정: interpolate 표현식이 SELECT 절에서 동일한 이름으로 지정된 별칭 컬럼이 아니라 원본 컬럼을 참조하도록 수정했습니다. #53572 (Yakov Olkhovskiy).
- EXPLAIN PLAN index=1에서 보고되는 삭제된 그래뉼 개수 수정 #53616 (wangxiaobo).
DelayedSource에서 totals 및 extremes를 올바르게 처리하도록 수정했습니다 #53644 (Antonio Andelic).- mutation 파이프라인에서 prepared Set 캐시가 멈추는 현상 #53645 (Nikolai Kochetov).
- UPDATE 및 DELETE 쿼리의 프리디케이트에서 JSON 타입 서브컬럼을 사용할 때 발생하던 뮤테이션 버그를 수정합니다. #53677 (VanDarkholme7).
- full_sorting_merge 조인의 필터 푸시다운을 수정했습니다 #53699 (vdimir).
NULL::LowCardinality(Nullable(...)) NOT IN과 관련된 버그를 수정했습니다. #53706 (Andrey Zvonov).- 수정: 희소 컬럼에서 정렬 DISTINCT 처리 #53711 (Igor Nikonov).
transform: 여러 행을 가진 기본 컬럼을 올바르게 처리하도록 수정했습니다 #53742 (Salvatore Mesoraca).- parseDateTime에서 fuzzer로 인한 크래시 수정 #53764 (Robert Schulze).
- MaterializedPostgreSQL: getCreateTableQueryImpl에서 처리되지 않은 예외를 수정합니다 #53832 (Kseniia Sumarokova).
- PostgreSQL 엔진 사용 시 발생할 수 있는 세그폴트(segfault)를 수정했습니다. #53847 (Kseniia Sumarokova).
named_collection_admin별칭 수정 #54066 (Kseniia Sumarokova).
ClickHouse 릴리스 23.7, 2023-07-27. 발표 자료, 동영상
하위 호환되지 않는 변경 사항
NAMED COLLECTION액세스 유형을 추가했습니다(별칭USE NAMED COLLECTION,NAMED COLLECTION USAGE). 이 PR은 이 액세스 유형이 기본적으로 비활성화되어 있기 때문에 하위 호환되지 않습니다(상위 액세스 유형인NAMED COLLECTION ADMIN도 기본적으로 비활성화되어 있기 때문입니다). #50277에서 제안되었습니다. 사용 권한을 부여하려면GRANT NAMED COLLECTION ON collection_name TO user또는GRANT NAMED COLLECTION ON * TO user를 사용하십시오. 이러한 권한을 부여할 수 있으려면 config에서named_collection_admin이 필요합니다(이전 이름은named_collection_control이며, 별칭으로 계속 유지됩니다). #50625 (Kseniia Sumarokova).system.parts컬럼 이름last_removal_attemp_time의 오타를 수정했습니다. 이제 이름은last_removal_attempt_time입니다. #52104 (filimonov).- 기본적으로
distributed_ddl_entry_format_version의 기본값을 5로 상향했습니다(OpenTelemetry 및initial_query_idd전달을 활성화). 다운그레이드 이후에는 기존 분산 DDL 항목을 처리할 수 없습니다(다만 일반적으로는 그러한 미처리 항목이 없어야 합니다). #52128 (Azat Khuzhin). - 일반 메타데이터를 검사하는 방식과 동일하게 프로젝션 메타데이터를 검사하도록 했습니다. 이 변경으로 인해 잘못된 프로젝션이 있는 테이블이 존재하는 경우 서버가 시작되지 않을 수 있습니다. 예를 들어 기본 키(PK)에 위치 기반 컬럼을 생성하는 프로젝션(예: 테이블 PK에서는 허용되지 않고 insert/merge 중 충돌을 유발할 수 있는
projection p (select * order by 1, 4))이 해당됩니다. 업데이트 전에 이러한 프로젝션을 삭제해야 합니다. #52353을 수정합니다. #52361 (Nikolai Kochetov). - 버그 때문에 실험적 기능
hashid를 제거했습니다. 구현 품질이 처음부터 의문이었고, 실험적 상태를 벗어나지 못했습니다. #52406을 종료합니다. #52449 (Alexey Milovidov).
신규 기능
- 여러 데이터베이스를 하나로 결합하는
Overlay데이터베이스 엔진이 추가되었습니다. 파일 시스템의 디렉터리를 자동으로 감지된 포맷과 구조를 가진, 암시적으로 제공되는 테이블들의 집합으로 표현하는Filesystem데이터베이스 엔진이 추가되었습니다. 새로운S3데이터베이스 엔진을 사용하면 접두어(prefix)를 테이블들의 집합으로 표현하여 S3 스토리지에 읽기 전용으로 접근할 수 있습니다. 새로운HDFS데이터베이스 엔진을 사용하면 동일한 방식으로 HDFS 스토리지와 상호작용할 수 있습니다. #48821 (alekseygolub). - Keeper에서 스냅샷과 로그를 외부 디스크에 저장할 수 있도록 지원을 추가했습니다. #50098 (Antonio Andelic).
- 다중 디렉터리 선택을 위한(
{}) glob 패턴 지원을 추가합니다. #50559 (Andrey Zvonov). - Kafka 커넥터가 URL 인코딩된 자격 증명을 사용한 기본 인증으로 스키마 레지스트리에서 Avro 스키마를 가져올 수 있습니다. #49664 (Ilya Golshtein).
- 두 배열 간 자카드 유사도를 계산하는 함수
arrayJaccardIndex를 추가했습니다. #50076 (FFFFFFFHHHHHHH). system.settings및 유사한 테이블에 컬럼is_obsolete를 추가합니다. #50819을(를) 해결합니다. #50826 (flynn).- 설정 파일에서 암호화된 요소를 지원하도록 기능이 추가되었습니다. 이제 설정 파일의 리프 요소에 암호화된 텍스트를 사용할 수 있습니다. 텍스트는
<encryption_codecs>섹션에 정의된 암호화 코덱을 사용하여 암호화됩니다. #50986 (Roman Vasin). - Grace Hash Join 알고리즘을 이제 FULL 및 RIGHT 조인에서도 사용할 수 있게 되었습니다. #49483. #51013 (lgbo).
- 보다 원활한 종료를 위해
SYSTEM STOP LISTEN쿼리를 추가합니다. #47972에서 보고된 문제를 해결합니다. #51016 (Nikolay Degterinsky). input_format_csv_allow_variable_number_of_columns옵션을 추가했습니다. #51273 (Dmitry Kardymon).- 또 하나의 심심한 기능: Spark 또는 MySQL에 있는 것과 같은
substring_index함수를 추가했습니다. #51472 (李扬). - jemalloc bin에 대한 통계를 보여주는 시스템 테이블
jemalloc_bins가 추가되었습니다. 예:SELECT *, size * (nmalloc - ndalloc) AS allocated_bytes FROM system.jemalloc_bins WHERE allocated_bytes > 0 ORDER BY allocated_bytes DESC LIMIT 10. 활용하시기 바랍니다. #51674 (Alexander Gololobov). - 각 컬럼 앞에 해당 컬럼의 기본값 사용 여부를 나타내는 1바이트 플래그를 추가하는
RowBinaryWithDefaults포맷을 추가합니다. #50854를 종료합니다. #51695 (Kruglov Pavel). default_temporary_table_engine설정이 추가되었습니다.default_table_engine과 동일하지만 임시 테이블에 사용됩니다. #51292. #51708 (velavokr).- 각 단어의 첫 글자를 대문자로, 나머지를 소문자로 변환하는 새로운
initcap/initcapUTF8FUNCTION을 추가했습니다. #51735 (Dmitry Kardymon). - 이제
CREATE TABLE시 컬럼 정의에서PRIMARY KEY구문을 사용할 수 있습니다. 컬럼은 정의된 순서대로 프라이머리 인덱스(primary index)에 추가됩니다. #51881 (Ilya Yatsishin). - 로그 및 오류 로그 파일 이름에 날짜와 시간 형식 지정자를 사용할 수 있도록 했습니다. 설정 파일의
log및errorlog태그와 명령줄 인수--log-file및--errorlog-file모두에서 사용할 수 있습니다. #51945 (Victor Krasnov). - HTTP 헤더에 「Peak Memory Usage」 통계를 추가했습니다. #51946 (Dmitry Kardymon).
- 문자열에서 부분 시퀀스(subsequence)의 일치 여부를 확인하는 새로운
hasSubsequence함수(CaseInsensitive및UTF8버전 포함)를 추가했습니다. #52050 (Dmitry Kardymon). - PostgreSQL과의 호환성을 위해
groupArray의 별칭으로array_agg를 추가합니다. #52100를 종료합니다. ### 사용자 대상 변경 사항에 대한 문서 항목입니다. #52135 (flynn). any집계 함수의 호환용 별칭으로any_value를 추가합니다. #52140를 해결합니다. #52147 (flynn).- BigQuery와의 호환성을 위해 집계 함수
array_concat_agg를 추가합니다. 이 함수는groupArrayArray의 별칭입니다. GitHub 이슈 #52139를 해결합니다. #52149 (flynn). OCTET_LENGTH를length의 별칭으로 추가합니다. #52153을(를) 해결합니다. #52176 (FFFFFFFHHHHHHH).- 여러 줄로 된 문자열에서 첫 번째 줄을 추출하는
firstLineFUNCTION을 추가했습니다. 이로써 #51172가 해결되었습니다. #52209 (Mikhail Koviazin). Interval데이터 타입에 대해 KQL 스타일 형식을 구현합니다. 이는Kusto쿼리 언어와의 호환성을 위해서만 필요합니다. #45671 (ltrk2).- 대상 테이블로의 대기 중인 모든 비동기 삽입을 플러시하는 쿼리
SYSTEM FLUSH ASYNC INSERT QUEUE가 추가되었습니다. 서버 측 설정async_insert_queue_flush_on_shutdown(기본값true)이 추가되어, 정상 종료 시 비동기 삽입 큐를 플러시할지 여부를 결정합니다.async_insert_threads는 이제 서버 측 설정이 되었습니다. #49160 (Anton Popov). - PostgreSQL과의 호환성을 위해
current_database별칭과 새로운 함수current_schemas를 추가했습니다. #51076 (Pedro Riera). - 함수
today(이제curdate/current_date라는 이름으로도 사용 가능)와now(current_timestamp)에 대한 별칭을 추가합니다. #52106 (Lloyd-Pottiger). - 비동기 insert에
async_deduplication_token을 지원합니다. #52136 (Han Fei). - URL engine에서 URI 경로의 디코딩/인코딩을 비활성화할 수 있는 새로운 설정
disable_url_encoding이 추가되었습니다. #52337 (Kruglov Pavel).
성능 향상
- 기본적으로 희소 직렬화(sparse serialization) 포맷을 자동으로 선택하도록 활성화합니다. 성능이 향상됩니다. 이 포맷은 22.1 버전부터 지원됩니다. 이 변경 이후에는 22.1보다 오래된 버전으로 다운그레이드하는 것이 불가능할 수 있습니다. 다운그레이드하려면
ratio_of_defaults_for_sparse_serialization=0.9375값을 설정해야 할 수 있습니다. 55153. MergeTree 테이블에 대해ratio_of_defaults_for_sparse_serialization = 1SETTING을 설정하면 희소 직렬화 포맷 사용을 끌 수 있습니다. #49631 (Alexey Milovidov). move_all_conditions_to_prewhere및enable_multiple_prewhere_read_steps설정을 기본적으로 활성화합니다. #46365 (Alexander Gololobov).- allocator를 조정하여 일부 쿼리의 성능을 개선합니다. #46416 (Azat Khuzhin).
- 이제
MergeTreeReadPool에서와 같이MergeTreePrefetchedReadPool에서 고정 크기 작업을 사용합니다. 또한 이제 S3 요청에 커넥션 풀을 사용합니다. #49732 (Nikita Taranov). - 조인 우측 입력에 대한 pushdown을 더 많이 수행하도록 개선했습니다. #50532 (Nikita Taranov).
hash table크기를 미리 확보하여grace_hash조인을 개선합니다(재제출). #50875 (lgbo).OpenedFileCache에서 락을 기다리는 시간이 때때로 체감될 정도로 길어질 수 있습니다. 경합을 피하기 위해 이를 여러 개의 하위 맵(각각 자체 락을 가짐)으로 분할했습니다. #51341 (Nikita Taranov).- 프라이머리 키 컬럼이 포함된 조건을 PREWHERE 체인의 끝으로 이동하도록 변경했습니다. 프라이머리 키 컬럼이 포함된 조건은 PK 분석에 사용될 가능성이 높아 PREWHERE 단계에서의 추가 필터링 효과는 거의 없기 때문입니다. #51958 (Alexander Gololobov).
- String 타입에 대해 SipHash를 인라인으로 구현하여
COUNT(DISTINCT)를 가속합니다. ICX 장비(Intel Xeon Platinum 8380 CPU, 80코어, 160스레드)에서 OnTime 워크로드로 수행한 성능 실험 결과, 이 변경으로 쿼리 Q8의 QPS가 11.6% 향상될 수 있으며 다른 쿼리에는 영향이 없음을 보여줍니다. #52036 (Zhiguo Zhou). - 기본값으로
allow_vertical_merges_from_compact_to_wide_parts를 활성화했습니다. 병합 작업 중 메모리 사용량을 절감합니다. #52295 (Alexey Milovidov). - 기본 키를 무효화하던 잘못된 PROJECTION 분석 문제를 수정합니다. 이 문제는
query_plan_optimize_primary_key = 1, query_plan_optimize_projection = 1인 경우에만 발생합니다. 이 변경으로 #48823 및 #51173 이슈가 해결됩니다. #52308 (Amos Bird). FileCache::loadMetadata에서 수행되는 시스템 콜(syscall) 수를 줄였습니다. 파일 시스템 캐시가 구성된 경우 서버 시작 속도가 빨라집니다. #52435 (Raúl Marín).- 남은 데이터를 백그라운드에서 다운로드하도록 하여 파일 세그먼트 크기에 대해 엄격한 하한을 둘 수 있도록 합니다. 파일 세그먼트의 최소 크기(실제 파일 크기가 더 큰 경우)는 캐시 설정 항목
boundary_alignment으로 구성하며, 기본값은4Mi입니다. 백그라운드 스레드 수는 캐시 설정 항목background_download_threads로 구성하며, 기본값은2입니다. 또한 이 PR에서max_file_segment_size가8Mi에서32Mi로 증가했습니다. #51000 (Kseniia Sumarokova). - S3의 기본 타임아웃 값을 30초에서 3초로, 기타 HTTP의 기본 타임아웃 값을 180초에서 30초로 단축했습니다. #51171 (Michael Kolupaev).
- 새로운 설정
merge_tree_determine_task_size_by_prewhere_columns가 추가되었습니다. 이를true로 설정하면 읽기 작업 크기를 결정할 때PREWHERE섹션에 있는 컬럼들의 크기만 고려합니다. 그렇지 않으면 쿼리에 포함된 모든 컬럼이 고려됩니다. #52606 (Nikita Taranov).
개선 사항
- s3/file/url/... 테이블 함수의 진행률 표시줄에 read_bytes/total_bytes_to_read를 사용하여 진행 상황 표시를 개선했습니다. #51286 (Kruglov Pavel).
- 테이블 설정
wait_for_unique_parts_send_before_shutdown_ms를 도입했습니다. 이 설정은 레플리카가 복제 전송에 사용하는 interserver handler를 닫기 전에 대기할 시간을 지정합니다. 또한 테이블 종료와 interserver handler 종료 간의 불일치를 수정했습니다. 이제 서버는 먼저 테이블을 종료한 다음 interserver handler를 종료합니다. #51851 (alesapin). OFFSET없이 SQL 표준FETCH문을 허용합니다. https://antonz.org/sql-fetch/ 를 참조하십시오. #51293 (Alexey Milovidov).- 설정의 새로운
http_forbid_headers섹션을 사용하여 URL/S3 테이블 함수의 HTTP 헤더를 필터링할 수 있습니다. 정확히 일치하는 필터와 정규식 기반 필터를 모두 사용할 수 있습니다. #51038 (Nikolay Degterinsky). - 로그에
16 EiB의 여유 공간이 있다는 메시지를 표시하지 않도록 했습니다. 이러한 메시지는 의미가 없습니다. #49320를 해결합니다. #49342 (Alexey Milovidov). sleepEachRow함수에 대한 제한을 올바르게 검사하도록 했습니다.function_sleep_max_microseconds_per_block설정을 추가했습니다. 이는 범용 쿼리 퍼저에 필요합니다. #49343 (Alexey Milovidov).geoHash함수 관련 두 가지 문제를 수정합니다. #50066 (李扬).- 비동기 insert flush 쿼리를
system.query_log에 로깅합니다. #51160 (Raúl Marín). date_diff및age함수는 이제 밀리초와 마이크로초 단위를 지원하며 마이크로초 정밀도로 동작합니다. #51291 (Dmitry Kardymon).- clickhouse-keeper-client에서 경로(path) 파싱을 개선합니다. #51359 (Azat Khuzhin).
- ClickHouse에 의존하는 서드파티 제품인 Gluten(Spark SQL의 성능을 2배로 높이는 플러그인)에 버그가 있었습니다. 이 수정은 HDFS에서 읽는 동안 해당 서드파티 제품에서 발생할 수 있는 힙 오버플로우를 방지합니다. #51386 (李扬).
- S3에 대한 네이티브 복사를 비활성화할 수 있는 기능을 추가했습니다(설정은 BACKUP/RESTORE용
allow_s3_native_copy,s3/s3_plain디스크용s3_allow_native_copy입니다). #51448 (Azat Khuzhin). - 디스크에 있는 압축된 기본 키 크기를 표시할 수 있도록
system.parts테이블에primary_key_size컬럼을 추가합니다. #51400를 해결합니다. #51496 (Yarik Briukhovetskyi). - procfs 없이, 홈 디렉터리가 존재하지 않아도, glibc의 이름 확인 플러그인 없이
clickhouse-local을 실행할 수 있도록 허용합니다. #51518 (Alexey Milovidov). rename_files_after_processing설정에서 전체 파일명을 나타내는 플레이스홀더인%a를 추가했습니다. #51603 (Kruglov Pavel).system.parts_columns에modification_time컬럼을 추가했습니다. #51685 (Azat Khuzhin).- CSV 포맷에
input_format_csv_use_default_on_bad_values라는 새 SETTING을 추가하여 단일 필드 파싱에 실패했을 때 기본값을 삽입할 수 있도록 했습니다. #51716 (KevinyhZou). - 예기치 않은 크래시 발생 후 크래시 로그를 디스크에 플러시하도록 했습니다. #51720 (Alexey Gerasimchuck).
- 대시보드 페이지에서 인증과 관련 없는 오류가 표시되지 않던 문제를 수정합니다. 또한 차트가 서로 겹쳐 보이던 동작도 수정합니다. #51744 (Zach Naimon).
- UUID를 UInt128로 변환할 수 있도록 했습니다. #51765 (Dmitry Kardymon).
range함수의 널 허용 인자에 대한 지원을 추가했습니다. #51767 (Dmitry Kardymon).toyear(x) = c와 같은 조건을c1 <= x < c2형태로 변환합니다. #51795 (Han Fei).SHOW INDEX문을 MySQL과 더 호환되도록 개선합니다. #51796 (Robert Schulze).use_structure_from_insertion_table_in_table_functions가MATERIALIZED및ALIAS컬럼에서 동작하지 않던 문제를 수정합니다. #51817 이슈를 해결합니다. #51019 이슈를 해결합니다. #51825 (flynn).- 캐시 딕셔너리가 이제 데이터 소스에 대해 고유 키만 요청합니다. #51762 이슈를 해결합니다. #51853 (Maksim Kita).
- FORMAT이 지정된 EXPLAIN 쿼리에 설정이 적용되지 않던 문제를 수정했습니다. #51859 (Nikita Taranov).
SELECT쿼리와의 호환성을 위해DESCRIBE TABLE쿼리에서FORMAT앞에SETTINGS를 허용하도록 했습니다. #51544를 해결했습니다. #51899 (Nikolay Degterinsky).- Var-Int로 인코딩된 정수(예: 네이티브 프로토콜에서 사용됨)는 이제 전체 64비트 범위를 사용할 수 있습니다. 제3자 클라이언트는 이에 맞추어 var-int 코드를 업데이트하는 것이 권장됩니다. #51905 (Robert Schulze).
- 인증서 변경 시 수동으로 SYSTEM RELOAD CONFIG를 실행할 필요 없이 자동으로 업데이트되도록 했습니다. #52030 (Mike Kot).
- 지정된
TYPE없이ADD INDEX쿼리를 무시할 수 있도록 하는allow_create_index_without_type설정을 추가했습니다. 표준 SQL 쿼리는 테이블 스키마를 변경하지 않고도 그대로 성공합니다. #52056 (Ilya Yatsishin). - 로그 메시지는 서버가 시작되는 순간부터
system.text_log에 기록됩니다. #52113 (Dmitry Kardymon). - HTTP 엔드포인트에 여러 IP 주소가 있고 그중 첫 번째 IP에 접속할 수 없는 경우 타임아웃 예외가 발생했습니다. 세션 생성 시 조회된 모든 엔드포인트를 처리하도록 수정했습니다. #52116 (Aleksei Filatov).
- Avro 입력 형식은 이제 단일 타입만 포함하는 Union도 지원합니다. #52131 이슈를 해결했습니다. #52137 (flynn).
- 암시적 프로젝션을 비활성화하는
optimize_use_implicit_projections설정을 추가합니다(현재는min_max_count프로젝션에만 적용). #52152 (Amos Bird). - 함수
hasToken을 사용해 무한 루프를 만드는 것이 가능했습니다. 이제 더 이상 그렇게 할 수 없도록 변경되었습니다. 이 변경으로 #52156 이슈가 해결되었습니다. #52160 (Alexey Milovidov). - ZK 상위 경로를 낙관적 방식으로 생성합니다. #52195 (Raúl Marín).
- #50582를 수정합니다. 일부 in-order 읽기 및 상수 처리 시
Not found column ... in block오류가 발생하지 않도록 했습니다. #52259 (Chen768959). - ClickHouse 측에서 가능한 한 이른 시점에 S2 geo primitive가 유효하지 않은지 확인합니다. 다음 이슈를 해결합니다: #27090. #52260 (Nikita Mikhaylov).
query_plan_optimize_projection = 1일 때 누락되어 있던 projection QueryAccessInfo를 다시 추가합니다. 이로써 #50183을 수정합니다. 이로써 #50093을 수정합니다. #52327 (Amos Bird).ZooKeeperRetriesControl이 오류를 다시 던질 때에는ZooKeeperRetriesControl자체의 스택 트레이스가 아니라 원본 스택 트레이스를 확인하는 편이 더 유용합니다. #52347 (Vitaly Baranov).- 일부 디스크가 이를 지원하지 않더라도 zero copy 복제 락을 기다립니다. #52376 (Raúl Marín).
- 이제 인터서버 포트는 테이블이 모두 종료된 후에만 닫힙니다. #52498 (alesapin).
Experimental Feature
- Parquet 파일 쓰기 속도가 10배 빨라졌으며, 이제 멀티 스레드로 동작합니다. 읽기와 거의 동일한 속도입니다. #49367 (Michael Kolupaev). 이 기능은 기본적으로 비활성화되어 있는
output_format_parquet_use_custom_encoder설정으로 제어되며, 아직 기능이 완전하지 않기 때문입니다. - 쿼리 언어로 PRQL을 지원합니다. #50686 (János Benjamin Antal).
- 커스텀 디스크에 디스크 이름을 추가할 수 있습니다. 이전에는 커스텀 디스크가 내부에서 생성된 디스크 이름을 사용했습니다. 이제
disk = disk_<name>(...)(예: 디스크 이름이name이 됨)을 사용하여 이름을 지정할 수 있습니다. #51552 (Kseniia Sumarokova). 이 릴리스에서 이 구문은 변경될 수 있습니다. - (experimental MaterializedMySQL) 연결이 끊어진 뒤
mysqlxx::Pool::Entry가 사용될 때 발생하던 크래시를 수정했습니다. #52063 (Val Doroshchuk). - (experimental MaterializedMySQL) 이제 MaterializedMySQL에서
CREATE TABLE ... AS SELECT.. 이(가) 지원됩니다. #52067 (Val Doroshchuk). - (experimental MaterializedMySQL) MaterializedMySQL에 대해 텍스트 타입을 utf8로 자동 변환하는 기능을 도입했습니다. #52084 (Val Doroshchuk).
- (experimental MaterializedMySQL) 이제 MaterializedMySQL의 DDL에서 따옴표 없는 UTF-8 문자열을 지원합니다. #52318 (Val Doroshchuk).
- (experimental MaterializedMySQL) 이제 MaterializedMySQL에서 큰따옴표로 둘러싼 주석을 지원합니다. #52355 (Val Doroshchuk).
- Intel QPL을 v1.1.0에서 v1.2.0으로 업그레이드했습니다. 2. Intel accel-config를 v3.5에서 v4.0으로 업그레이드했습니다. 3. IAA 가속기에 대해 Device IOTLB miss로 인해 큰 성능 저하가 발생하던 문제를 수정했습니다. #52180 (jasperzhu).
- 버전 23.6에서 새로 도입된
session_timezone설정을 experimental 기능으로 격하했습니다. #52445 (Alexey Milovidov). keeper_server.enable_reconfiguration설정을 통해 활성화할 수 있는 증분 재구성을 사용하여 ClickHouse Keeper에서 ZooKeeperreconfig명령을 지원합니다. 서버 추가, 서버 제거, 서버 우선순위 변경을 지원합니다. #49450 (Mike Kot). 이 기능은 아직 완전하지 않은 것으로 보입니다.
빌드/테스트/패키징 개선
- CI에 Linux RISC-V 64용 실험적 ClickHouse 빌드를 추가했습니다. #31398 (Alexey Milovidov).
- Analyzer가 활성화된 상태에서의 통합 테스트 검사를 추가했습니다. #50926 #52210 (Dmitry Novik).
- Rust용 재현 가능한(reproducible) 빌드를 도입했습니다. #52395 (Azat Khuzhin).
- Cargo 의존성을 업데이트했습니다. #51721 (Raúl Marín).
- 함수
CHColumnToArrowColumn::fillArrowArrayWithArrayColumnData가 ClickHouse에서는 허용되지 않지만 Gluten에서 필요로 하는 널 허용 배열(nullable array)과 함께 동작하도록 했습니다. #52112 (李扬). - CCTZ 라이브러리를 master 브랜치 최신 버전으로 업데이트했으나, 사용자에게 보이는 변경 사항은 없습니다. #52124 (Alexey Milovidov).
- 이제
system.licenses테이블에 하드 포크된 라이브러리 Poco가 포함됩니다. 이로써 #52066이(가) 해결되었습니다. #52127 (Alexey Milovidov). Hello, world대신Hello ,world처럼 쉼표 앞에 공백이 들어가는 잘못된 구두점 사용 사례가 없는지 검사합니다. #52549 (Alexey Milovidov).
버그 수정 (공식 안정 릴리스에서 사용자에게 눈에 띄는 오동작)
- MaterializedPostgreSQL의 syncTables 기능을 수정했습니다 #49698 (Kseniia Sumarokova).
- optimize_aggregators_of_group_by_keys가 설정된 projection 관련 문제를 수정했습니다. #49709 (Amos Bird).
optimize_skip_unused_shards가 조인에서 올바르게 동작하지 않던 문제를 수정합니다 #51037 (Azat Khuzhin).- 소수 자릿수를 가진 음수
DateTime64값에 대한formatDateTime()동작을 수정합니다. #51290 (Dmitry Kardymon). hasToken*FUNCTION 계열의 동작이 완전히 잘못되어 있었습니다. #43358 #51378에 대한 테스트를 추가했습니다 (Alexey Milovidov).- 정렬 전에 FUNCTION을 이동하는 최적화를 수정했습니다. #51481 (Nikolai Kochetov).
- FINAL에서 Pipe::unitePipes의 Block 구조 불일치를 수정했습니다 #51492 (Nikita Taranov).
- 모든 세그먼트의 가중치가 0인 클러스터에서 발생하던 SIGSEGV를 수정합니다(INSERT INTO FUNCTION clusterAllReplicas() 실행 시 발생하던 문제). #51545 (Azat Khuzhin).
- Hedged request의 타임아웃을 수정합니다 #51582 (Azat Khuzhin).
- NULL이 포함된 ANTI 조인의 논리 오류를 수정함 #51601 (vdimir).
IN조건을 PREWHERE로 이동하는 과정에서 발생하던 문제 수정 #51610 (Alexander Gololobov).- ASOF/ANTI 조인에는 PredicateExpressionsOptimizer를 적용하지 않습니다 #51633 (vdimir).
- 머징 알고리즘을 사용하는 ReplicatedMergeTree에서 중복 제거를 포함한 비동기 insert를 수정했습니다. #51676 (Antonio Andelic).
parseSipHashKey에서 비어 있는 컬럼을 읽는 문제를 수정했습니다 #51804 (Nikita Taranov).- 잘못된 EmbeddedRocksdb 테이블을 CREATE할 때 발생하던 segfault를 수정합니다 #51847 (Duc Canh Le).
- MongoDB 테이블로의 INSERT 동작을 수정합니다 #51876 (Nikolay Degterinsky).
- DatabaseCatalog 종료 시 발생하는 데드락을 수정합니다 #51908 (Alexander Tokmakov).
- 서브쿼리 연산자 오류를 수정했습니다. #51922 (Alexey Milovidov).
- 여러 IP를 가진 호스트에 대한 비동기 연결 문제를 수정합니다. #51934 (Kruglov Pavel).
- ActionsDAG::merge 이후 입력이 제거되지 않도록 수정했습니다 #51947 (Nikolai Kochetov).
execute대신RemoveManyObjectStorageOperation::finalize에서 refcount를 확인하도록 변경 #51954 (vdimir).- 매개변수를 사용하는 UDF를 허용합니다 #51964 (Alexey Milovidov).
- 2283-12-31 이후 날짜를 처리하는 toDateTime64()를 소폭 수정했습니다 #52130 (Andrey Zvonov).
- WINDOW 함수의 ORDER BY 튜플 처리를 수정합니다 #52145 (Alexey Milovidov).
- 단조 함수가 포함된 집계 표현식에서 잘못된 PROJECTION 분석을 수정했습니다 #52151 (Amos Bird).
groupArrayMoving함수들에서 발생하던 오류를 수정했습니다 #52161 (Alexey Milovidov).- 범위 딕셔너리에 대한 직접 조인 기능을 비활성화했습니다 #52187 (Duc Canh Le).
- sticky 뮤테이션 테스트(및 극히 드물게 발생하는 경쟁 상태) 수정 #52197 (alesapin).
- Web 디스크의 경쟁 상태(race condition) 수정 #52211 (Kseniia Sumarokova).
- 서버에서 수신한 알 수 없는 패킷 처리 과정에서
Connection::setAsyncCallback에 발생하던 데이터 레이스를 수정함 #52219 (Kruglov Pavel). - 시작 시 임시 데이터 삭제 동작을 수정하고 테스트를 추가함 #52275 (vdimir).
- 널 허용 컬럼 개수를 계산할 때는 minmax_count 프로젝션을 사용하지 않도록 했습니다 #52297 (Amos Bird).
- MergeTree/ReplicatedMergeTree가 로그 항목에 서버 시간대를 사용하도록 수정 #52325 (Azat Khuzhin).
- CTE를 사용하고 여러 번 참조되는 파라미터화된 VIEW를 수정합니다. #52328 (SmitaRKulkarni).
- 시간 간격용 expression 템플릿을 비활성화했습니다 #52335 (Alexander Tokmakov).
- Keeper에서
apply_snapshot를 수정했습니다 #52358 (Antonio Andelic). - build-osx.md를 업데이트 #52377 (AlexBykovski).
- 빈 needle과 컬럼 haystack에서
countSubstrings가 멈추는 문제를 수정했습니다 #52409 (Sergei Trifonov). - merge 테이블에서 일반 projection 동작을 수정했습니다 #52432 (Amos Bird).
- Aggregator에서 발생할 수 있는 이중 해제 문제를 수정했습니다. #52439 (Nikita Taranov).
- Buffer 엔진으로의 데이터 삽입을 수정했습니다. #52440 (Vasily Nemkov).
- AnyHash 구현이 규격을 준수하지 않았습니다. #52448 (Alexey Milovidov).
- OptimizedRegularExpression에서 재귀 깊이 검사를 추가했습니다 #52451 (Alexey Milovidov).
- DatabaseReplicated::startupTables()/canExecuteReplicatedMetadataAlter()에서 발생하는 데이터 레이스 문제를 수정합니다. #52490 (Azat Khuzhin).
- 함수
transform에서 발생하던 비정상 종료(abort)를 수정했습니다. #52513 (Alexey Milovidov). - 프로젝션을 드롭한 후 경량한 삭제를 수정 #52517 (Anton Popov).
- "Cannot drain connections: cancel first" 오류가 발생할 수 있던 문제를 수정합니다. #52585 (Kruglov Pavel).
ClickHouse 23.6 릴리스, 2023-06-29. 발표 자료, 동영상
하위 호환성이 깨지는 변경 사항
- fs 캐시에서
do_not_evict_index_and_mark_files기능을 삭제합니다. 이 기능은 오히려 상황을 더 악화시키기만 했습니다. #51253 (Kseniia Sumarokova). - 실험적 LIVE VIEW에 대한 ALTER 지원을 제거합니다. #51287 (Alexey Milovidov).
http_max_field_value_size및http_max_field_name_size의 기본값을 128 KiB로 줄입니다. #51163 (Mikhail f. Shiryaev).- CPU 관련 CGroups 메트릭을 더 나은 사용성을 위해 단일 메트릭
CGroupMaxCPU로 대체합니다.NormalizedCPU 사용량 메트릭은 설정된 경우 전체 CPU 개수 대신 CGroups 한도로 정규화됩니다. 이 변경으로 #50836이 종료됩니다. #50835 (Alexey Milovidov).
새 기능
- 함수
transform및 값 매칭을 사용하는CASE가 이제 모든 데이터 타입을 지원합니다. 이를 통해 #29730, #32387, #50827, #31336, #40493 이슈가 해결되었습니다. #51351 (Alexey Milovidov). - 옵션
--rename_files_after_processing <pattern>이 추가되었습니다. 이를 통해 #34207 이슈가 해결되었습니다. #49626 (alekseygolub). INTO OUTFILE절에서TRUNCATE수정자에 대한 지원이 추가되었습니다. 파일이 이미 존재할 때는INTO OUTFILE에서APPEND또는TRUNCATE사용을 권장합니다. #50950 (alekar).- 테이블 엔진
Redis와 테이블 함수redis가 추가되었습니다. 이를 통해 외부 Redis 서버에 쿼리를 실행할 수 있습니다. #50150 (JackyWoo). - 설정
s3_skip_empty_files,hdfs_skip_empty_files,engine_file_skip_empty_files,engine_url_skip_empty_files를 사용하여 file/s3/url/hdfs 테이블 함수에서 빈 파일을 건너뛸 수 있습니다. #50364 (Kruglov Pavel). - MySQL 호환 포트를 통해 클라이언트가 연결된 경우
SHOW COLUMNSSQL 문이 MySQL과 동등한 타입을 표시하도록 변경하는use_mysql_types_in_show_columns라는 새 설정이 추가되었습니다. #49577 (Thomas Panetti). - 이제 clickhouse-client를 "--host", "--port", "--user" 등 대신 연결 문자열로 호출할 수 있습니다. #50689 (Alexey Gerasimchuck).
session_timezone설정이 추가되었습니다. 명시적으로 지정되지 않은 경우 세션의 기본 타임존으로 사용됩니다. #44149 (Andrey Zvonov).- 코덱 DEFLATE_QPL은 이제 "allow_experimental_codecs" 설정 대신 서버 설정 "enable_deflate_qpl_codec"(기본값: false)을 통해 제어됩니다. 이로써 DEFLATE_QPL은 더 이상 실험적인 코덱이 아닙니다. #50775 (Robert Schulze).
성능 개선
ReplicatedMergeTree에서 머지 선택 및 정리 작업의 스케줄링을 개선했습니다. 머지나 정리할 내용이 없을 때 작업이 너무 자주 실행되지 않습니다.max_merge_selecting_sleep_ms,merge_selecting_sleep_slowdown_factor,max_cleanup_delay_period,cleanup_thread_preferred_points_per_iteration설정을 추가했습니다. #31919를 해결했습니다. #50107 (Alexander Tokmakov).- CROSS JOIN을 통과하도록 필터 푸시다운을 적용했습니다. #50605 (Han Fei).
- 전역 객체 대신 thread-local
timer_id를 사용하도록 하여 QueryProfiler가 활성화된 경우의 성능을 개선했습니다. #48778 (Jiebin Sun). - CapnProto 입력/출력 포맷을 다시 구현하여 성능을 개선했습니다. 컬럼 이름과 CapnProto 필드를 대소문자를 구분하지 않고 매핑하고, 중첩 구조 필드의 읽기/쓰기를 수정했습니다. #49752 (Kruglov Pavel).
- 병렬 스레드에 대한 Parquet 쓰기 성능을 최적화했습니다. #50102 (Hongbin Ma).
- 하나의 블록만 있는 MATERIALIZED VIEW와 스토리지 처리 시
parallelize_output_from_storages를 비활성화했습니다. #50214 (Azat Khuzhin). - PR #46558을 병합했습니다. 블록이 이미 정렬된 상태인 경우 정렬 중 블록 순열을 피하도록 했습니다. #50697 (Alexey Milovidov, Maksim Kita).
- system.zookeeper 테이블에서 읽기를 빠르게 하기 위해 ZooKeeper에 여러 목록(list) 요청을 병렬로 보내도록 했습니다. #51042 (Alexander Gololobov).
- 시간대용 DateTime 조회 테이블 초기화를 가속화했습니다. 특히 디버그 빌드에서 상당히 무거운 작업이므로, 이를 통해 clickhouse-client의 시작/접속 시간이 단축됩니다. #51347 (Alexander Gololobov).
- 동기 HEAD 요청 때문에 발생하던 데이터 레이크(data lake)의 성능 저하를 수정했습니다. (파일이 매우 많을 때 Iceberg/Deltalake/Hudi가 느려지는 문제와 관련). #50976 (Kseniia Sumarokova).
- 오른쪽 GLOBAL JOIN 테이블에서 모든 컬럼을 읽지 않도록 했습니다. #50721 (Nikolai Kochetov).
Experimental Feature
- analyzer에서 parallel replicas를 지원합니다. #50441 (Raúl Marín).
- 제로 카피 복제를 사용하는 경우 레플리카 간에 부하를 보다 균등하게 분산하기 위해 대규모 머지/뮤테이션을 실행하기 전에 무작위 대기(sleep) 시간을 추가합니다. #51282 (alesapin).
- 세그먼트가 1개만 있고 기반 테이블이
ReplicatedMergeTree인 경우Replicated데이터베이스를 통해ALTER PARTITION쿼리와 뮤테이션을 복제하지 않습니다. #51049 (Alexander Tokmakov).
개선사항
- "파트가 너무 많음(too many parts)"에 대한 임계값을 최신 환경에 맞게 완화했습니다. 장시간 실행되는 insert 쿼리에는 백프레셔(backpressure)를 다시 도입했습니다. #50856 (Alexey Milovidov).
- CIDR ::ffff:0:0/96(IPv4로 매핑된 주소)에 대해 IPv6 주소를 IPv4 주소로 형변환할 수 있도록 허용합니다. #49759 (Yakov Olkhovskiy).
- MongoDB 프로토콜을 업데이트하여 MongoDB 5.1 버전 이상을 지원합니다. 이전 프로토콜(<3.6)을 사용하는 버전에 대한 지원은 그대로 유지됩니다. #45621, #49879 이슈를 해결합니다. #50061 (Nikolay Degterinsky).
- 스키마 추론 시 읽을 바이트 수를 제한하기 위한 설정
input_format_max_bytes_to_read_for_schema_inference를 추가합니다. #50577를 해결합니다. #50592 (Kruglov Pavel). - 스키마 추론 시
input_format_null_as_defaultSETTING을 따르도록 했습니다. #50602 (Kruglov Pavel). - 설정
input_format_csv_skip_trailing_empty_lines,input_format_tsv_skip_trailing_empty_lines,input_format_custom_skip_trailing_empty_lines을 통해 CSV/TSV/CustomSeparated 형식에서 마지막의 빈 줄을 건너뛸 수 있습니다(기본값: 비활성화). #49315 이슈를 해결했습니다. #50635 (Kruglov Pavel). - "toDateOrDefault|OrNull" 및 "accuateCast[OrDefault|OrNull]" 함수들이 이제 숫자 인자를 올바르게 해석합니다. #50709 (Dmitry Kardymon).
- CSV에서 필드 구분자로 공백이나
\t를 지원하며, 이러한 구분자는 Spark에서도 지원됩니다. #50712 (KevinyhZou). number_of_mutations_to_delay및number_of_mutations_to_throw설정이 이제 기본적으로 활성화되며, 기본값은 각각 500과 1000입니다. #50726 (Anton Popov).- 대시보드에서 누락된 값이 올바르게 표시되도록 수정했습니다. 이로써 #50831이(가) 해결되었습니다. #50832 (Alexey Milovidov).
- 함수
parseDateTimeBestEffort*및parseDateTime64BestEffort*에서 syslog 타임스탬프 형식의 날짜 및 시간 인수를 사용할 수 있도록 기능이 추가되었습니다. #50925 (Victor Krasnov). - clickhouse-client의 명령줄 인자 「--password」는 이제 한 번만 지정할 수 있습니다. #50966 (Alexey Gerasimchuck).
- 클러스터 백업 시 파트의 동일성을 확인하기 위해
system.parts의hash_of_all_files를 사용합니다. #50997 (Vitaly Baranov). - 시스템 테이블 zookeeper_connection의 connected_time은 연결이 설정된 시각(표준 형식)을 나타내며, session_uptime_elapsed_seconds가 추가되어 설정된 연결 세션의 지속 시간(초 단위)을 나타냅니다. #51026 (郭小龙).
- file/S3/hdfs/url 테이블 함수의 진행률 표시줄을 개선하여, 소스 데이터의 청크 크기를 사용하고 각 스레드에서 전체 크기를 증분 방식으로 집계하도록 했습니다. *Cluster 함수에 대한 진행률 표시줄도 수정했습니다. #47250를 해결합니다. #51088 (Kruglov Pavel).
- Progress bar를 개선하기 위해 TCP 프로토콜의 Progress 패킷에 total_bytes_to_read를 추가했습니다. #51158 (Kruglov Pavel).
- 파일 시스템 캐시를 사용하는 디스크에서 데이터 파트 검사를 개선했습니다. #51164 (Anton Popov).
- fs 캐시에서 current_elements_num 값이 때때로 잘못되던 문제를 수정합니다. #51242 (Kseniia Sumarokova).
빌드/테스트/패키징 개선
- 독립 실행형 Keeper 바이너리에 임베디드 keeper-client를 추가했습니다. #50964 (pufit).
- 이제 실제 LZ4 버전을 사용합니다. #50621 (Nikita Taranov).
- ClickHouse server가 치명적인 오류 발생 시 변경된 설정 목록을 출력합니다. 이를 통해 #51137가 해결되었습니다. #51138 (Alexey Milovidov).
- ClickHouse를 clang-17로 빌드할 수 있도록 했습니다. #51300 (Alexey Milovidov).
- SQLancer 체크로 인해 발생했던 버그들이 수정되어, 이제 해당 체크는 안정적인 것으로 간주됩니다. 앞으로 SQLancer 체크가 실패하면 실패한 체크 상태로 보고됩니다. #51340 (Ilya Yatsishin).
- Dockerfile의 거대한
RUN명령을 더 작은 조건부 명령들로 분리했습니다. 동일한RUN레이어에서 필요한 도구를 필요 시 설치하고 이후 제거합니다. OS 업그레이드는 시작 시 한 번만 수행합니다. 서명된 저장소를 확인하는 현대적인 방법을 사용합니다. 오래된 Docker 버전에서 발생하는 문제를 해결하기 위해 기본 저장소를 ubuntu:20.04로 낮췄습니다. golang 취약점을 해결하기 위해 golang 버전을 업그레이드했습니다. #51504 (Mikhail f. Shiryaev).
버그 수정(공식 안정 릴리스에서 사용자가 인지할 수 있는 오동작)
- 실행 가능한 딕셔너리의 로딩 상태가 올바르게 보고되도록 수정했습니다 #48775 (Anton Kozlov).
- skip 인덱스와 프로젝션 변경의 올바른 처리 #50104 (Amos Bird).
- 이동 중인 파트 정리 #50489 (vdimir).
- IP 타입의 해싱과 관련된 집계 함수의 하위 호환성을 수정함 #50551 (Yakov Olkhovskiy).
- TRUNCATE 이후 Log 패밀리 테이블에서 잘못된 행 수를 반환하던 문제를 수정했습니다 #50585 (flynn).
uniqExact병렬 병합 과정의 버그를 수정합니다 #50590 (Nikita Taranov).- 최근 grace hash join 변경 사항을 되돌렸습니다 #50699 (vdimir).
- 쿼리 캐시:
ColumnConst를ColumnVector<char8_t>로 잘못 캐스팅하던 문제를 수정합니다 #50704 (Robert Schulze). - 알 수 없는 연산이 포함된 로그가 Keeper에 저장되지 않도록 했습니다 #50751 (Antonio Andelic).
- SummingMergeTree의 DateTime64 지원 #50797 (Jordi Villar).
- 비상수(non-const) 시간대(timezone)에 대한 호환성 설정을 추가했습니다 #50834 (Robert Schulze).
- 캐시 항목에서 LDAP 매개변수 해시 계산을 수정합니다 #50865 (Julian Maicher).
- Parquet 포맷에서 예외를 던지는 대신 String에서 큰 정수 값을 파싱하도록 동작을 변경했습니다 #50873 (Kruglov Pavel).
- 백업 작성 중 잠금 파일을 과도하게 확인하던 동작을 수정함 #50889 (Vitaly Baranov).
- read-in-order가 활성화되어 있으면 프로젝션을 적용하지 않습니다. #50923 (Nikolai Kochetov).
- Azure Blob Storage 이터레이터의 경쟁 상태(race condition)를 수정했습니다 #50936 (SmitaRKulkarni).
CreatingSets에서 잘못 전파되던sort_description을 수정했습니다 #50955 (Nikita Taranov).- Iceberg v2의 선택적 메타데이터 파싱을 수정합니다 #50974 (Kseniia Sumarokova).
- MaterializedMySQL: 빈 테이블 override에서 괄호가 유지되도록 합니다 #50977 (Val Doroshchuk).
- BackupCoordinationStageSync::setError()에서 발생하던 크래시를 수정했습니다 #51012 (Vitaly Baranov).
- ColumnLowCardinality 딕셔너리의 미세한 결함이 있던 copy-on-write 동작을 수정합니다. #51064 (Michael Kolupaev).
- 안전한 IV 생성 #51086 (Salvatore Mesoraca).
- 서브쿼리가 포함된 SELECT에 대해 쿼리 캐시가 제대로 동작하지 않던 문제를 수정합니다 #51132 (Robert Schulze).
- Set 인덱스의 상수 널 허용(Nullable) 값 비교를 수정했습니다. #51205 (Nikolai Kochetov).
- s3 및 s3Cluster 함수에서 발생하던 충돌을 수정했습니다 #51209 (Nikolay Degterinsky).
- 컴파일된 표현식에서 발생하던 크래시를 수정했습니다 #51231 (LiuNeng).
- URL 전환 시 StorageURL에서 발생하던 use-after-free 버그를 수정함 #51260 (Michael Kolupaev).
- 파라미터화된 VIEW에 대한 검사 로직을 업데이트했습니다. #51272 (SmitaRKulkarni).
- 동일한 파일이 백업에 여러 번 쓰이던 문제를 수정합니다 #51299 (Vitaly Baranov).
- ActionsDAG에서 발생한 퍼저(fuzzer) 실패를 수정했습니다. #51301 (Alexey Milovidov).
transformFUNCTION에서 불필요한 데이터를 제거했습니다. #51350 (Alexey Milovidov).
ClickHouse 23.5 릴리스(2023-06-08). 발표 자료, 영상
업그레이드 참고 사항
- 기본적으로 마크와 기본 키를 압축합니다. 이는 콜드 쿼리 시간을 크게 줄여 줍니다. 업그레이드 참고 사항: 압축된 마크와 기본 키에 대한 지원은 버전 22.9에서 추가되었습니다. 압축된 마크 또는 기본 키를 활성화했거나, 기본적으로 압축된 마크 또는 기본 키가 활성화되어 있는 23.5 이상 버전을 설치한 경우 22.8 이하 버전으로 다운그레이드할 수 없습니다. 서버 설정 파일의
<merge_tree>섹션에서compress_marks및compress_primary_key설정을 지정하여 압축된 마크 또는 기본 키를 명시적으로 비활성화할 수도 있습니다. 업그레이드 참고 사항: 22.9 이전 버전에서 업그레이드하는 경우, 모든 레플리카를 한 번에 업그레이드하거나, 업그레이드 전에 압축 기능을 비활성화하거나, 23.3처럼 압축된 마크는 지원하지만 기본적으로 활성화되어 있지 않은 중간 버전을 거쳐 업그레이드해야 합니다. #42587 (Alexey Milovidov). - 로컬 객체 스토리지가 S3 객체 스토리지와 일관되게 동작하도록 하고, append 관련 문제를 수정합니다(#48465 종료). 또한 이를 독립적인 스토리지로 구성할 수 있도록 했습니다. 이 변경은 로컬 객체 스토리지 위의 캐시가 이전 버전과 호환되지 않기 때문에 하위 호환되지 않습니다. #48791 (Kseniia Sumarokova).
- 실험적 기능인 "in-memory data parts"가 제거되었습니다. 데이터 형식은 여전히 지원되지만, 관련 설정은 아무 동작도 하지 않으며 대신 compact 또는 wide 파트가 사용됩니다. 이는 #45409를 해결합니다. #49429 (Alexey Milovidov).
parallelize_output_from_storages및input_format_parquet_preserve_order설정의 기본값이 변경되었습니다. 이를 통해 ClickHouse가 파일(CSV 또는 Parquet 등)에서 읽을 때 행의 순서를 재조정할 수 있어, 많은 경우에 성능이 크게 향상됩니다. 기존의 순서 보존 동작을 복원하려면parallelize_output_from_storages = 0,input_format_parquet_preserve_order = 1을 사용하십시오. #49479 (Michael Kolupaev).- 프로젝션을 프로덕션 환경에서 사용할 수 있도록 준비했습니다. SELECT 쿼리에 대해 프로젝션을 사용할지 제어하기 위해
optimize_use_projections설정을 추가했습니다.allow_experimental_projection_optimization설정은 더 이상 사용되지 않으며 아무 동작도 하지 않습니다. #49719 (Alexey Milovidov). joinGet을 비결정적(non-deterministic) 함수로 표시했습니다(dictGet과 동일). 이를 통해 추가 설정 없이 뮤테이션에서 사용할 수 있습니다. #49843 (Azat Khuzhin).- "
groupArrayreturns cannot be nullable" 변경을 되돌렸습니다(Nullable타입에 대한groupArray/groupArrayLast/groupArraySample의 이진 호환성 깨짐으로 인해TOO_LARGE_ARRAY_SIZE또는CANNOT_READ_ALL_DATA가 발생할 수 있기 때문입니다). #49971 (Azat Khuzhin). enable_memory_bound_merging_of_aggregation_results설정이 기본적으로 활성화되었습니다. 22.12 이전 버전에서 업데이트하는 경우, 업데이트가 완료될 때까지 이 플래그를false로 설정할 것을 권장합니다. #50319 (Nikita Taranov).
새로운 기능
- 스토리지 엔진 AzureBlobStorage와 azureBlobStorage 테이블 함수가 추가되었습니다. 지원 기능은 스토리지/테이블 함수 S3와 매우 유사합니다 [#50604] (https://github.com/ClickHouse/ClickHouse/pull/50604) (alesapin) (SmitaRKulkarni.
- 네이티브 ClickHouse Keeper CLI 클라이언트가 추가되었으며,
clickhouse keeper-client명령으로 사용할 수 있습니다. #47414 (pufit). urlCluster테이블 함수를 추가합니다. 코드 중복을 줄이기 위해 모든 *Cluster 테이블 함수를 리팩터링합니다. 가능한 모든 *Cluster 함수 시그니처와 명명된 컬렉션에 대해 스키마 추론이 동작하도록 합니다. #38499을(를) 해결합니다. #45427 (attack204), Pavel Kruglov.- 쿼리 캐시는 이제 운영 워크로드에 사용할 수 있습니다. #47977 (Robert Schulze). 쿼리 캐시는 이제 totals 및 extremes 수정자가 있는 쿼리를 지원합니다. #48853 (Robert Schulze). 이전 버전과의 호환성을 위해
allow_experimental_query_cache설정을 더 이상 사용되지 않는 설정으로 표시했습니다. 이 설정은 https://github.com/ClickHouse/ClickHouse/pull/47977에서 제거되었습니다. #49934 (Timur Solodovnikov). - 지리 데이터 타입(
Point,Ring,Polygon,MultiPolygon)이 프로덕션 환경에서 사용 가능한 상태입니다. #50022 (Alexey Milovidov). - PostgreSQL, MySQL, MeiliSearch 및 SQLite 테이블 엔진에 스키마 추론을 추가합니다. #49972 이슈를 해결합니다. #50000 (Nikolay Degterinsky).
CREATE USER u IDENTIFIED BY 'p'와 같은 쿼리에서 비밀번호 유형은 서버의config.xml에 있는default_password_type설정에 따라 자동으로 결정됩니다. #42915 이슈를 종료합니다. #44674 (Nikolay Degterinsky).- bcrypt 비밀번호 인증 유형을 추가합니다. #34599를 해결합니다. #44905 (Nikolay Degterinsky).
- 새 키워드
INTO OUTFILE 'file.txt' APPEND가 추가되었습니다. #48880 (alekar). - Keeper 연결 정보를 보여주는
system.zookeeper_connection테이블을 추가했습니다. #45245 (mateng915). - 무작위 테이블 구조를 생성하는 새로운 함수
generateRandomStructure를 추가합니다. 이 함수는 테이블 함수generateRandom과 함께 사용할 수 있습니다. #47409 (Kruglov Pavel). ELSE분기 없이CASE를 사용할 수 있도록 허용하고, 더 많은 타입을 처리할 수 있도록transform을 확장했습니다. 또한 10진수 타입이 다른 숫자 타입과 섞여 있을 때transform()이 잘못된 결과를 반환하던 몇 가지 문제를 수정했습니다. #48300 (Salvatore Mesoraca). 이 변경으로 #2655, #9596, #38666이(가) 해결되었습니다.- S3 테이블에서 KMS 키를 사용한 서버 측 암호화를 추가하고, S3 디스크에
header설정을 추가했습니다. #48723를 해결했습니다. #48724 (Johann Gan). - 백그라운드 작업(머지 및 뮤테이션)을 위한 MemoryTracker를 추가합니다. 머지 및 뮤테이션에 대한 소프트 메모리 제한을 나타내는
merges_mutations_memory_usage_soft_limit및merges_mutations_memory_usage_to_ram_ratioSETTING을 도입합니다. 이 제한에 도달하면 ClickHouse는 새로운 머지 또는 뮤테이션 작업을 스케줄하지 않습니다. 또한 백그라운드 작업의 현재 메모리 사용량을 모니터링할 수 있도록MergesMutationsMemoryTracking메트릭을 도입합니다. #46089를 다시 제출합니다. #48774를 해결합니다. #48787 (Dmitry Novik). - 함수
dotProduct가 배열에서도 동작합니다. #49050 (FFFFFFFHHHHHHH). SHOW INDEX구문을 지원하여 MySQL과의 호환성을 향상했습니다. #49158 (Robert Schulze).- 가상 컬럼
_file및_path지원을 테이블 함수url에 추가합니다. - 테이블 함수url의 오류 메시지를 개선합니다. - #49231 - #49232 해결. #49356 (Ziyi Tan). - users.xml 파일에
grants필드를 추가하여 사용자 권한을 지정할 수 있게 했습니다. #49381 (pufit). - Grace Hash Join 알고리즘을 사용해 FULL/RIGHT JOIN을 지원합니다. #49483 (lgbo).
WITH FILL수정자는 정렬 접두어를 기준으로 채우기를 그룹화합니다.use_with_fill_by_sorting_prefix설정으로 제어됩니다(기본적으로 활성화되어 있습니다). #33203#issuecomment-1418736794 및 #49503와 관련되어 있습니다. (Igor Nikonov).clickhouse-client는 이제--query(또는-q) 옵션이 없을 때--multiquery뒤에 쿼리를 바로 지정할 수 있습니다. 예시:clickhouse-client --multiquery "select 1; select 2;". #49870 (Alexey Gerasimchuk).- 레플리카로부터 Hello 패킷을 수신하기 위한 별도의
handshake_timeout을 추가합니다. #48854를 종료합니다. #49948 (Kruglov Pavel). - 공백 문자를 지정한 횟수만큼 반복하는 FUNCTION "space"를 추가했습니다. #50103 (Robert Schulze).
- --input_format_csv_trim_whitespaces 옵션을 추가했습니다. #50215 (Alexey Gerasimchuk).
- 정규 표현식 트리 딕셔너리에 대해
dictGetAllFUNCTION이 여러 개의 일치 결과에서 나온 값을 배열로 반환할 수 있도록 허용합니다. #50254를 해결합니다. #50255 (Johann Gan). - 날짜 또는 날짜-시간 값을 가장 가까운 토요일 또는 일요일까지 올림하는
toLastDayOfWeekFUNCTION을 추가했습니다. #50315 (Victor Krasnov). ignore_data_skipping_indices를 지정하여 skip 인덱스를 무시할 수 있는 기능이 추가되었습니다. #50329 (Boris Kuschel).system.user_processes테이블과SHOW USER PROCESSES쿼리를 추가하여 사용자 단위의 메모리 정보와 ProfileEvents를 표시할 수 있도록 합니다. #50492 (János Benjamin Antal).- 테이블, 데이터베이스, 테이블 함수, 딕셔너리의 시크릿을 표시할 수 있도록 서버 및 포맷 설정
display_secrets_in_show_and_select를 추가합니다. 시크릿을 조회할 수 있는 사용자를 제어하는 권한displaySecretsInShowAndSelect를 추가합니다. #46528 (Mike Kot). - DATABASE에 속한 모든 테이블에 대해 ROW POLICY를 설정할 수 있습니다. #47640 (Ilya Golshtein).
성능 개선
- 기본적으로 마크와 기본 키를 압축합니다. 이를 통해 콜드 쿼리 시간이 크게 단축됩니다. 업그레이드 관련 참고 사항: 압축 마크와 기본 키에 대한 지원은 버전 22.9에서 추가되었습니다. 압축 마크 또는 기본 키를 수동으로 활성화했거나, 기본적으로 압축 마크 또는 기본 키가 활성화되어 있는 23.5 이상 버전을 설치한 경우 22.8 이하 버전으로 다운그레이드할 수 없습니다. 서버 구성 파일의
<merge_tree>섹션에서compress_marks및compress_primary_key설정을 지정하여 압축 마크나 기본 키를 명시적으로 비활성화할 수도 있습니다. #42587 (Alexey Milovidov). - 새 설정 s3_max_inflight_parts_for_one_file은 하나의 파일에 대해 multipart 업로드 요청으로 동시에 업로드되는 파트의 최대 개수를 제한합니다. #49961 (Sema Checherinda).
- 여러 파일에서 데이터를 읽을 때 각 파일에 대한 병렬 파싱 스레드 수를 줄입니다. #42192를 해결합니다. #46661 (SmitaRKulkarni).
- 집계 프로젝션은 일반적인 읽기보다 더 적은 그래뉼을 읽는 경우에만 사용하십시오. 쿼리가 테이블의 PK에는 적중하지만 프로젝션에는 적중하지 않는 경우에 도움이 됩니다. #49150를 수정합니다. #49417 (Nikolai Kochetov).
- 아무 데이터도 삽입되지 않을 때는
ANY해시 조인에서 블록을 저장하지 않습니다. #48633 (vdimir). - JIT 컴파일 시 집계 조합자
-If의 동작을 수정하고, 집계 함수에 대해 JIT 컴파일을 활성화합니다. #48120 이슈를 해결합니다. #49083 (Igor Nikonov). - 원격 테이블에서 읽을 때는 태스크 스틸링(task stealing)이 잘 동작하도록 더 작은 태스크(파트 전체를 읽는 대신)를 사용합니다. * 태스크 크기는 읽을 컬럼의 크기에 따라 결정됩니다. * S3에서 읽을 때는 항상 1MB 버퍼를 사용합니다. * 캐시 세그먼트의 경계는 1MB에 맞춰 정렬되어 있어, 작은 태스크에서도 적절한 크기를 유지하며 단편화를 방지하는 데에도 도움이 됩니다. #49287 (Nikita Taranov).
- 다음 설정이 추가되었습니다: - 백그라운드 작업에 사용되는 메모리 양을 제한하는
merge_max_block_size_bytes. - 수직 병합(vertical merge)을 활성화하기 위한 추가 조건을 설정하는vertical_merge_algorithm_min_bytes_to_activate. #49313 (Nikita Mikhaylov). - 로컬 파일 시스템에서 읽을 때 사용하는 읽기 버퍼의 기본 크기가 조금 더 효율적인 값으로 변경되었습니다. 또한 두 개의 새로운 설정
max_read_buffer_size_local_fs및max_read_buffer_size_remote_fs가 도입되었습니다. #49321 (Nikita Taranov). SPARSE_HASHED/HASHED딕셔너리의 메모리 사용량과 성능을 개선합니다(예:SPARSE_HASHED는 이제 메모리를 2.6배 적게 사용하고, 약 2배 더 빠르게 동작합니다). #49380 (Azat Khuzhin).system.query_log및system.query_thread_log테이블에 필요한 경우LowCardinality를 적용하여 최적화합니다. 이 테이블을 대상으로 하는 쿼리는 더 빠르게 수행됩니다. #49530 (Alexey Milovidov).- 로컬
Parquet파일을 병렬로 읽을 때 성능이 향상되었습니다. #49539 (Michael Kolupaev). - 특정 상황에서
RIGHT/FULL JOIN의 성능을 최대 2배까지 향상합니다. 특히 작은 왼쪽 테이블을 큰 오른쪽 테이블과 조인하는 경우에 효과적입니다. #49585 (lgbo). - Rust에서 LTO를 활성화하여 BLAKE3 성능을 11% 향상했습니다. #49600 (Azat Khuzhin). 이제 C++과 동등한 수준입니다.
system.opentelemetry_span_log의 구조를 최적화합니다. 적절한 곳에서는LowCardinality를 사용합니다. 이 테이블은 일반적인 속성에도 맵 데이터 타입을 사용하는 등 전반적으로 비효율적이지만, 다소 개선됩니다. #49647 (Alexey Milovidov).grace_hash조인에서 해시 테이블의 용량을 사전에 예약하도록 시도합니다. #49816 (lgbo).uniqExactIf상태를 병렬로 병합합니다. #49885을(를) 해결합니다. #50285 (flynn).- Keeper 개선: 복제된 테이블(Replicated Table)의 성능을 향상하기 위해 Keeper에
CheckNotExists요청을 추가했습니다. #48897 (Antonio Andelic). - Keeper 성능 개선: 처리 중 동일한 요청을 두 번 직렬화하지 않도록 최적화했습니다. 대용량 요청의 역직렬화 결과를 캐시합니다. 새로운 coordination 설정인
min_request_size_for_cache로 제어됩니다. #49004 (Antonio Andelic). - 병합할 파트를 선택하는 과정에서, 많은 파티션에 병합할 파트가 없는 경우 ZooKeeper의
List요청 횟수를 줄였습니다. #49637 (Alexander Tokmakov). - FS 캐시의 잠금 메커니즘을 개선 #44985 (Kseniia Sumarokova).
- 단순 COUNT 최적화를 사용할 수 있는 경우, 순수 병렬 레플리카를 비활성화합니다. #50594 (Raúl Marín).
- Iceberg 스키마 추론 시 데이터 읽기에 사용되는 키에 대해서만 HEAD 요청을 보내고, 모든 키에 대해 보내지 않도록 했습니다. #50203 (Kruglov Pavel).
enable_memory_bound_merging_of_aggregation_results설정은 기본적으로 활성화되어 있습니다. #50319 (Nikita Taranov).
실험적 기능
DEFLATE_QPL코덱의 최소 SIMD 버전을 SSE 4.2로 낮추었습니다. qpl 문서 변경 - Intel® QPL은 런타임 커널 디스패처와 cpuid 체크에 의존하여 사용 가능한 최상의 구현(sse/avx2/avx512)을 선택합니다. 또한 최신 업스트림 qpl에 맞추기 위해 ClickHouse에서 qpl 빌드를 위한 CMake 파일 구조를 재구성했습니다. #49811 (jasperzhu).- 순수 병렬 레플리카를 사용한 조인(JOIN)에 대한 초기 지원을 추가했습니다. #49544 (Raúl Marín).
- "zero-copy 복제"를 사용하는
Outdated파트 제거 시 더 높은 수준의 병렬성을 제공하도록 개선했습니다. #49630 (Alexander Tokmakov). - Parallel Replicas: 1) 비복제 스토리지에서
parallel_replicas_for_non_replicated_merge_tree설정을 비활성화한 상태로 병렬 레플리카를 사용할 때 발생하던NOT_FOUND_COLUMN_IN_BLOCK오류를 수정했습니다. 2) 이제allow_experimental_parallel_reading_from_replicas는 0, 1, 2의 세 가지 값을 가집니다. 0 - 비활성, 1 - 활성, 실패 시(예: FINAL 또는 JOIN의 경우) 조용히 비활성화, 2 - 활성, 실패 시 예외를 발생시킵니다. 3) SELECT 쿼리에서 FINAL 수정자를 사용하고 병렬 레플리카가 활성화된 경우,allow_experimental_parallel_reading_from_replicas가 1로 설정되어 있으면 ClickHouse는 병렬 레플리카를 비활성화하려 시도하고, 그렇지 않으면 예외를 발생시킵니다. #50195 (Nikita Mikhaylov). - 병렬 레플리카가 활성화된 경우 항상 사용 불가능한 서버를 건너뜁니다(이 동작은 기본적으로 활성화되어 있으며 비활성화만 가능한
skip_unavailable_shards설정으로 제어됩니다). 이는 다음 이슈를 해결합니다: #48565. #50293 (Nikita Mikhaylov).
개선 사항
BACKUP명령은 백업을 생성하는 동안 암호화된 디스크의 데이터를 복호화하지 않습니다. 대신 데이터는 백업에 암호화된 형태로 저장됩니다. 이러한 백업은 동일한(또는 확장된) 암호화 키 목록을 가진 암호화된 디스크로만 복원할 수 있습니다. #48896 (Vitaly Baranov).- ATTACH PARTITION FROM 및 REPLACE PARTITION FROM의 FROM 절에서 임시 테이블도 사용할 수 있도록 했습니다. #49436 (Roman Vasin).
MergeTree테이블에async_insert설정이 추가되었습니다. 이 설정은 쿼리 수준 설정async_insert와 동일한 의미를 가지며, 특정 테이블에 대한 비동기 insert를 활성화합니다. 참고로,clickhouse-client에서 실행되는 insert 쿼리에는 적용되지 않으므로, 그 경우에는 쿼리 수준 설정을 사용해야 합니다. #49122 (Anton Popov).- QUOTA 생성문 매개변수에서 크기 단위 접미사를 지원하는 기능이 추가되었습니다. #49087 (Eridanus).
first_value와last_value에서 NULL을 허용하도록 확장했습니다. #46467 (lgbo).extractKeyValuePairs에 대한 별칭으로str_to_map과mapFromString을 추가합니다. https://github.com/clickhouse/clickhouse/issues/47185 이슈를 해결합니다. #49466 (flynn).- 메모리 사용량 및 가용성에 대한 비동기 메트릭에서 CGroup 버전 2를 지원하도록 했습니다. 이를 통해 #37983 이슈가 해결되었습니다. #45999 (sichenzhao).
- 클러스터 테이블 함수는 항상 사용할 수 없는 세그먼트를 건너뛰어야 합니다. 이슈 #46314를 종료했습니다. #46765 (zk_kiger).
- CSV 파일 헤더에 빈 컬럼을 포함할 수 있도록 허용했습니다. #47496 (你不要过来啊).
- Google Cloud Storage의 S3 호환 테이블 함수
gcs를 추가했습니다.oss및cosn함수와 마찬가지로s3테이블 함수에 대한 별칭(alias)에 불과하며, 새로운 기능은 제공하지 않습니다. #47815 (Kuba Kaflik). - S3용 엄격한 파트 크기 설정을 사용할 수 있는 기능을 추가했습니다(Cloudflare R2 S3 Storage와의 호환성). #48492 (Azat Khuzhin).
system.clusters에Replicated데이터베이스 레플리카 정보를 위한 새 컬럼database_shard_name,database_replica_name,is_active가 추가되었습니다. 또한SYSTEM DROP DATABASE REPLICA쿼리에 선택적FROM SHARD절이 추가되었습니다. #48548 (Alexander Tokmakov).- system.replicas에 새로운 컬럼
zookeeper_name을 추가하여 복제된 테이블(Replicated Table)의 메타데이터가 어떤 (보조) ZooKeeper 클러스터에 저장되어 있는지 나타냅니다. #48549 (cangyin). IN연산자가Date와Date32비교를 지원합니다. #48736 이슈를 해결합니다. #48806 (flynn).HDFS에서 삭제 코딩(erasure coding)에 대한 지원이 추가되었습니다. 작성자: @M1eyu2018, @tomscut. #48833 (M1eyu).- 보조 ZooKeeper 클러스터에서 SYSTEM DROP REPLICA를 구현하여 #48931을 거의 마무리합니다. #48932 (wangxiaobo).
- MongoDB에 Array 데이터 타입을 추가하여 #48598를 해결합니다. #48983 (Nikolay Degterinsky).
- 테이블에
Interval데이터 타입을 저장할 수 있도록 지원합니다. #49085 (larryluogit). - 명시적인 윈도우 프레임을 정의하지 않고도
ntile윈도우 함수를 사용할 수 있도록 했습니다:ntile(3) OVER (ORDER BY a), #46763 이슈를 닫았습니다. #49093 (vdimir). - 테이블에 미완료 상태의 뮤테이션이 많이 존재하는 경우, 뮤테이션(
ALTER UPDATE,ALTER DELETE,ALTER MODIFY COLUMN, ...)을 생성하는ALTER쿼리를 지연시키거나 예외를 발생시키도록 하는 설정(number_of_mutations_to_delay,number_of_mutations_to_throw)이 추가되었습니다. #49117 (Anton Popov). - 파일 시스템 캐시에서
create_directories호출 시 발생하는 예외를 포착합니다. #49203 (Kseniia Sumarokova). - 내장된 예제를
system.functions의 새 필드example로 복사하여description필드를 보완합니다. #49222 (Dan Roscigno). - MongoDB 딕셔너리에 대한 연결 옵션을 사용할 수 있도록 했습니다. 예:
xml <source> <mongodb> <host>localhost</host> <port>27017</port> <user></user> <password></password> <db>test</db> <collection>dictionary_source</collection> <options>ssl=true</options> </mongodb> </source>### 사용자에게 노출되는 변경 사항에 대한 문서 항목입니다. #49225 (MikhailBurdukov). kolmogorovSmirnovTest의 계산 방식asymp에 대한 별칭asymptotic을 추가했습니다. 관련 문서를 개선했습니다. #49286 (Nikita Mikhaylov).- 집계 함수 groupBitAnd/Or/Xor가 이제 부호 있는 정수형 데이터에서도 동작합니다. 이로써 스칼라 함수 bitAnd/Or/Xor의 동작과 일관되게 됩니다. #49292 (exmy).
- FUNCTION 문서를 더 세분화된 필드로 분할했습니다. #49300 (Robert Schulze).
- 서버 내 모든 테이블에서 오래된 데이터 파트를 로드할 때 공용 다중 스레드를 사용합니다. 스레드 풀과 해당 큐의 크기는
max_outdated_parts_loading_thread_pool_size및outdated_part_loading_thread_pool_queue_size설정으로 제어됩니다. #49317 (Nikita Mikhaylov). - 블록 간에 사전을 공유하는
LowCardinality컬럼에 대해 처리된 데이터 크기를 과대 계산하지 않도록 했습니다. #49322를 해결합니다. #48745도 참고하십시오. #49323 (Alexey Milovidov). - 이제 Parquet writer는
OUTFILE로 호출될 때 적절한 row group 크기를 사용합니다. #49325 (Michael Kolupaev). - 별칭이 따옴표로 감싸여 있는 경우
ARRAY와 같은 제한된 키워드를 별칭으로 사용할 수 있도록 허용합니다. #49324를 해결합니다. #49360 (Nikolay Degterinsky). - 데이터 파트 로드 및 삭제 작업이 테이블별 풀 대신 서버 전체에서 공유되는 풀로 옮겨졌습니다. 풀 크기는 최상위 설정에서
max_active_parts_loading_thread_pool_size,max_outdated_parts_loading_thread_pool_size,max_parts_cleaning_thread_pool_size설정으로 제어됩니다. 테이블 수준 설정인max_part_loading_threads및max_part_removal_threads는 더 이상 사용되지 않습니다. #49474 (Nikita Mikhaylov). - Play UI URL에서
?password=pass를 허용합니다. 비밀번호는 브라우저 기록에 남지 않도록 치환됩니다. #49505 (Mike Kot). - 원격 파일 시스템에서 크기가 0인 객체를 읽을 수 있도록 허용합니다. (빈 파일은 백업에 포함되지 않으므로 메타데이터 파일에 크기가 0인 blob이 기록될 수 있습니다.) #49480를 해결합니다. #49519 (Kseniia Sumarokova).
ThreadGroup이 분리된 후에 스레드용MemoryTracker를total_memory_tracker에 연결하도록 했습니다. #49527 (Dmitry Novik).- 쿼리에서 동일한 파라미터를 여러 번 사용할 때 parameterized VIEW가 올바르게 동작하도록 수정했습니다. #49556 (Azat Khuzhin).
- 쿼리 컨텍스트 내에서 마지막으로 전송된 ProfileEvents 스냅샷에 할당된 메모리를 해제합니다. 이슈 #47564의 후속 작업입니다. #49561 (Dmitry Novik).
- Function "makeDate"가 이제 연도와 연중 일자를 인수로 받는 MySQL 호환 오버로드 버전을 제공합니다. #49603 (Robert Schulze).
RegExpTreeDictionary에서dictionary테이블 FUNCTION을 지원합니다. #49666 (Han Fei).- 가중치 기반 공정 IO 스케줄링 정책을 추가했습니다. 서버를 재시작하지 않고도 실행 중에 IO 스케줄링 계층 구조를 업데이트할 수 있는 동적 리소스 관리자를 추가했습니다. #49671 (Sergei Trifonov).
- GCS에 multipart 업로드를 수행한 후 compose 요청을 추가했습니다. 이를 통해 multipart 업로드로 업로드된 객체에 대해 copy 연산을 사용할 수 있습니다. 서로 다른 크기의 파트로 구성된 객체에 대해서는 compose 요청이 실패할 수 있으므로
s3_strict_upload_part_size를 일정한 값으로 설정할 것을 권장합니다. #49693 (Antonio Andelic). extractKeyValuePairsFUNCTION의 경우, 「best-effort」 파싱 로직을 개선하여key_value_delimiter를 값의 일부로도 유효하게 허용합니다. 이를 통해 분기 로직이 단순해지고, 약간의 속도 향상도 기대할 수 있습니다. #49760 (Arthur Passos).- system.processors_profile_log에
initial_query_id필드를 추가했습니다. #49777 (helifu). - 이제 시스템 로그 테이블에서 사용자 지정 정렬 키를 사용할 수 있습니다. #49778 (helifu).
system.query_log에 새로운 필드partitions가 추가되어, 계산에 어떤 파티션이 참여하는지를 나타냅니다. #49779 (helifu).ReplicatedMergeTree용enable_the_endpoint_id_with_zookeeper_name_prefix설정이 추가되었습니다(기본값은 비활성화 상태입니다). 이 설정을 활성화하면 테이블의 서버 간 통신 엔드포인트에 ZooKeeper 클러스터 이름이 추가됩니다. 이를 통해 동일한 경로를 사용하지만 서로 다른 보조 ZooKeeper를 사용하는 복제된 테이블(Replicated Table)이 존재하는 경우 발생할 수 있는Duplicate interserver IO endpoint오류를 방지할 수 있습니다. #49780 (helifu).clickhouse-local에 쿼리 매개변수를 추가하여 #46561를 해결합니다. #49785 (Nikolay Degterinsky).- 기본적으로 YAML에서 딕셔너리와 함수를 로드할 수 있도록 했습니다. 이전 버전에서는 구성 파일에서
dictionaries_config또는user_defined_executable_functions_config를 수정해야 했으며, 해당 설정은*.xml파일만을 사용하도록 되어 있었습니다. #49812 (Alexey Milovidov). - 이제 Kafka 테이블 엔진에서 별칭 컬럼을 사용할 수 있습니다. #49824 (Aleksandr Musorin).
extractKeyValuePairs가 생성하는 쌍의 최대 개수를 제한하는 설정을 추가하여, 메모리를 과도하게 사용하는 상황을 방지하기 위한 안전장치를 마련했습니다. #49836 (Arthur Passos).IN연산자의 인수가 요소가 하나뿐인 튜플인 (다소 특이한) 경우도 지원하도록 기능을 추가했습니다. #49844 (MikhailBurdukov).bitHammingDistance함수가String및FixedString데이터 타입을 지원합니다. #48827 이슈를 해결합니다. #49858 (flynn).- OS X에서 클라이언트에서 발생하는 타임아웃 재설정 오류를 수정합니다. #49863 (alekar).
bitCountFUNCTION에서 UInt128, Int128, UInt256, Int256과 같은 대형 정수 타입을 지원하도록 했습니다. 이를 통해 AI 애플리케이션에서 큰 비트 마스크의 해밍 거리(Hamming distance)를 계산할 수 있습니다. #49867 (Alexey Milovidov).- 암호화된 디스크에서 키 ID 대신 사용할 지문(fingerprint)을 도입했습니다. 이를 통해 암호화된 디스크 구성 설정이 단순해집니다. #49882 (Vitaly Baranov).
- PostgreSQL에 UUID 데이터 타입을 추가했습니다. #49739 이슈를 해결합니다. #49894 (Nikolay Degterinsky).
- 이제
toUnixTimestamp함수에서Date및Date32인수를 허용합니다. #49989 (Victor Krasnov). - 사전에 대해서는 서버 메모리 사용분만 과금합니다. #49995 (Azat Khuzhin).
- 서버에서 MySQL과의 호환성을 위해
SQL_AUTO_IS_NULL과 같은SQL_*설정을 효과가 없는 no-op으로 사용할 수 있도록 허용합니다. 이를 통해 #49927 이슈가 해결되었습니다. #50013 (Alexey Milovidov). - ON CLUSTER 쿼리에서 initial_query_id를 보존하여 내부 상태 분석에 활용할 수 있도록 했습니다 (
distributed_ddl_entry_format_version=5에서 적용). #50015 (Azat Khuzhin). - 이름이 변경된 설정에 대해 별칭을 사용하여 이전 버전과의 비호환성을 유지합니다 (
optimize_use_projections에는allow_experimental_projection_optimization,enable_lightweight_delete에는allow_experimental_lightweight_delete). #50044 (Azat Khuzhin). my_hostname설정을 통해 FQDN을 전달하여 Keeper에 클러스터 노드를 등록하는 기능을 지원합니다. 여러 컴퓨트 그룹을 지원하기 위해invisible설정을 추가합니다. 클러스터로서의 컴퓨트 그룹은 다른 컴퓨트 그룹에서는 보이지 않습니다. #50186 (Yangkuan Liu).LIMIT n을 지정할 수 있음에도 PostgreSQL이 전체 데이터를 읽던 문제를 수정합니다. #50187 (Kseniia Sumarokova).- 서브쿼리를 포함하는 쿼리용 새로운 프로파일 이벤트(
QueriesWithSubqueries/SelectQueriesWithSubqueries/InsertQueriesWithSubqueries)를 추가합니다. #50204 (Azat Khuzhin). users.xml파일에 roles 필드를 추가하여, 구성 파일을 통해 GRANT가 적용된 역할(roles)을 지정할 수 있도록 했습니다. #50278 (pufit).- AsynchronousMetrics에서
CGroupCpuCfsPeriod및CGroupCpuCfsQuota를 보고하도록 합니다. - 서버 시작 시 cgroup v2의 메모리 제한을 준수하도록 합니다. #50379 (alekar). - SIGINT과 동일하게 동작하도록 SIGQUIT에 대한 시그널 핸들러를 추가합니다. #50298를 해결합니다. #50435 (Nikolay Degterinsky).
- JSON 파싱이 객체 출력 크기가 너무 커서 실패하는 경우, 디버깅을 위해 마지막 위치를 출력합니다. #50474 (Valentin Alexeev).
- 고정 크기가 아닌 decimal 타입을 지원합니다. #49130 이슈를 종료합니다. #50586 (Kruglov Pavel).
빌드/테스트/패키징 개선
- 새롭고 개선된
keeper-bench. 모든 항목을 YAML/XML 파일에서 사용자 정의할 수 있습니다: - request generator - 각 유형의 request generator는 고유한 필드 집합을 가질 수 있습니다 -multi키 아래에 동일한 구성을 추가하는 것만으로 multi requests를 생성할 수 있습니다 - multi 내의 각 request 또는 subrequest에 대해 분포를 제어하기 위한weight필드를 정의할 수 있습니다 - 테스트 실행을 위해 설정해야 하는 트리를 정의할 수 있습니다 - 호스트별로 모든 timeout을 사용자 정의할 수 있으며, 각 호스트에 대해 생성할 세션 수를 제어할 수 있습니다 -min_value,max_value필드로 정의된 정수는 난수 생성기로 사용됩니다. #48547 (Antonio Andelic). - Io_uring은 macOS에서 지원되지 않으므로, 간헐적인 실패를 피하기 위해 로컬에서 테스트를 실행할 때 선택하지 마십시오. #49250 (Frank Chen).
- 테스트용 이름이 지정된 장애 주입(fault injection)을 지원합니다. #49361 (Han Fei).
prctl(process control) 시스템 콜을 사용할 수 없는 OS 환경(예: AWS Lambda)에서도 ClickHouse를 실행할 수 있도록 지원합니다. #49538 (Alexey Milovidov).- qpl에서 contrib/isa-l과 isa-l 간 빌드 충돌 문제를 수정했습니다49296. #49584 (jasperzhu).
- 유틸리티는 이제 기본값으로 빌드되지 않고, 명시적으로 요청한 경우("-DENABLE_UTILS=1")에만 빌드되어 일반적인 개발 빌드에서 링크 시간이 단축됩니다. #49620 (Robert Schulze).
- 실수로 제거되는 일을 방지하기 위해 idxd-config의 빌드 정의를 별도의 CMake 파일로 분리했습니다. #49651 (jasperzhu).
- 마스터 브랜치에서 분석기를 활성화한 CI 검사를 추가합니다. 이슈 #49562의 후속 작업입니다. #49668 (Dmitry Novik).
- LLVM/clang 16으로 전환했습니다. #49678 (Azat Khuzhin).
- ClickHouse를 clang-17으로 빌드할 수 있도록 했습니다. #49851 (Alexey Milovidov). #50410 (Alexey Milovidov).
- ClickHouse를 이제 다른 cmake 프로젝트에 더 쉽게 통합할 수 있습니다. #49991 (Amos Bird). (하지만 이러한 통합 방식은 강력히 권장되지 않습니다 - Alexey Milovidov).
- #47151 이후에 이상하게 추가로 발생하던 QEMU 로그 출력을 수정합니다. 자세한 내용은 https://s3.amazonaws.com/clickhouse-test-reports/50078/a4743996ee4f3583884d07bcd6501df0cfdaa346/stateless_tests__release__databasereplicated__[3_4].html을 참조하십시오. #50442 (Mikhail f. Shiryaev).
- ClickHouse는 Linux RISC-V 6.1.22에서 동작을 지원합니다. 이로써 #50456 이슈가 해결되었습니다. #50457 (Alexey Milovidov).
- 내부 protobuf를 v3.18로 업그레이드했습니다(잘못 보고된 CVE-2022-1941 취약성을 수정함). #50400 (Robert Schulze).
- 내부 libxml2를 v2.10.4로 업데이트하여 잘못 보고된 CVE-2023-28484 및 CVE-2023-29469 항목을 해소했습니다. #50402 (Robert Schulze).
- c-ares 버전을 v1.19.1로 상향합니다(허위로 보고된 CVE-2023-32067, CVE-2023-31130, CVE-2023-31147). #50403 (Robert Schulze).
- libgsasl에서 잘못 보고된 CVE-2022-2469 문제를 수정합니다. #50404 (Robert Schulze).
버그 수정(공식 안정 릴리스에서 사용자가 인지할 수 있는 오동작)
- ActionsDAG: 잘못된 최적화 문제 수정 #47584 (Salvatore Mesoraca).
- Keeper에서 동시 스냅샷이 올바르게 처리되도록 수정했습니다 #48466 (Antonio Andelic).
- MergeTreeMarksLoader가 DataPartStorage 대신 DataPart를 가지도록 변경되었습니다 #48515 (SmitaRKulkarni).
- 시퀀스 상태 수정 #48603 (Ilya Golshtein).
- 이전 실패가 있는 경우 BACKUP/RESTORE 동시성 검사 #48726 (SmitaRKulkarni).
- 존재하지 않는 ZK 경로를 사용하는 테이블을 Attach할 때 ReadonlyReplica 메트릭이 증가하지 않던 문제를 수정합니다 #48954 (wangxiaobo).
- 일부 코드 경로에서 포착되지 않은 예외로 인해
terminate가 호출될 수 있었던 문제를 수정합니다 #49112 (Kruglov Pavel). - 여러 StorageJoin을 사용하는 쿼리에서 발생하는 key not found 오류를 수정합니다 #49137 (vdimir).
- 널 허용(Nullable) 기본 키를 사용할 때 잘못된 쿼리 결과가 나오는 문제를 수정했습니다. #49172 (Duc Canh Le).
- 빅 엔디언(big-endian) 머신에서 reinterpretAs*() 함수를 수정했습니다 #49198 (Suzy Wang).
- (실험적 zero-copy 복제) zero-copy 파트를 더 원자적으로 잠그도록 개선했습니다 #49211 (alesapin).
- 오래된 파트 로딩 시 발생하는 경쟁 조건을 수정 #49223 (Alexander Tokmakov).
- 모든 키 값이 null인 상태에서
GROUP BY WITH ROLLUP을 사용할 때 잘못된 결과가 반환되던 문제를 수정 #49282 (Shuai li). - SHARDS를 사용하는 HASHED 딕셔너리의 load_factor 계산을 수정합니다 #49319 (Azat Khuzhin).
- 별칭 컬럼에는 압축 코덱을 구성할 수 없도록 함 #49363 (Timur Solodovnikov).
- 기존 part 디렉터리를 제거하는 과정에서 발생한 버그를 수정했습니다. #49365 (alesapin).
- HMAC 사용 시 GCS가 올바르게 작동하도록 수정 #49390 (Antonio Andelic).
- remote()에서 읽을 때 서브쿼리 Set이 생성되지 않던 fuzz 버그를 수정합니다. #49425 (Alexander Gololobov).
shutdown_wait_unfinished_queries설정을 반대로 변경함 #49427 (Konstantin Bogdanov).- (실험적 zero-copy 복제) 또 다른 zero-copy 버그를 수정했습니다 #49473 (alesapin).
- Postgres 데이터베이스 설정을 수정했습니다 #49481 (Mal Curtis).
s3Cluster인수가 올바르게 처리되도록 개선했습니다 #49490 (Antonio Andelic).- TraceCollector 소멸자 버그를 수정했습니다. #49508 (Yakov Olkhovskiy).
- 짧은 seek 시 AsynchronousReadIndirectBufferFromRemoteFS가 실패하던 문제 수정 #49525 (Michael Kolupaev).
- 사전 로드 순서를 수정합니다 #49560 (Alexander Tokmakov).
- Object('json') 컬럼의 데이터 타입 변경을 금지합니다 #49563 (Nikolay Degterinsky).
- 스트레스 테스트 수정(논리 오류: Expected 7134 >= 11030) #49623 (Kseniia Sumarokova).
- DISTINCT 관련 버그를 수정했습니다 #49628 (Alexey Milovidov).
- 수정: 정렬 대상이 아닌 컬럼에 0 값이 있을 때 DISTINCT ORDER BY 동작 문제 수정 #49636 (Igor Nikonov).
- fuzzer와 UBSan으로 발견된 큰 정수(Big Integer) 관련 일회성 오류를 수정합니다 #49645 (Alexey Milovidov).
- 재시작 후 희소 컬럼에서의 읽기 오류 수정 #49660 (Anton Popov).
- fibers 사용 시 SpanHolder::finish()에서 발생하던 assert 실패를 수정합니다. #49673 (Kruglov Pavel).
- 희소 인수를 사용하는 단락 평가 함수와 뮤테이션을 수정했습니다. #49716 (Anton Popov).
- 증분 백업에 추가된 파일의 기록 방식을 수정합니다 #49725 (Vitaly Baranov).
- Object 컬럼이 있는 테이블에서 경량한 삭제 mutation을 수행하는 동안 발생하는 "There is no physical column _row_exists in table" 오류를 수정합니다. #49737 (Alexander Gololobov).
- randomStringUTF8(uneven number)에서 발생하는 msan 문제 수정 #49750 (Robert Schulze).
- 집계 함수 kolmogorovSmirnovTest를 수정했습니다. #49768 (FFFFFFFHHHHHHH).
- 네이티브 프로토콜의 설정 별칭을 수정함 #49776 (Azat Khuzhin).
- 단일 인수로 튜플 배열을 사용할 때
arrayMap의 동작을 수정합니다. #49789 (Anton Popov). - 쿼리 단위 I/O/BACKUP 처리량 제한 설정을 수정했습니다. #49797 (Azat Khuzhin).
- 프로필 정의에서 NULL을 설정하는 동작을 수정 #49831 (Vitaly Baranov).
- 프로젝션 및 aggregate_functions_null_for_empty 설정(query_plan_optimize_projection용) 관련 버그를 수정합니다 #49873 (Amos Bird).
- 재시작 후 Distributed async INSERT의 대기 중인 배치 처리 문제 수정 #49884 (Azat Khuzhin).
- CacheMetadata::doCleanup의 assertion을 수정합니다 #49914 (Kseniia Sumarokova).
- OptimizeRegularExpression에서
is_prefix를 수정했습니다 #49919 (Han Fei). - 메트릭
WriteBufferFromS3Bytes,WriteBufferFromS3Microseconds,WriteBufferFromS3RequestsErrors를 수정했습니다. #49930 (Aleksandr Musorin). - protobuf에서 IPv6 인코딩을 수정했습니다. #49933 (Yakov Olkhovskiy).
- 텍스트 형식에서 잘못된 널 허용(Nullable) 파싱으로 인해 발생할 수 있는 논리적 오류를 수정합니다 #49960 (Kruglov Pavel).
- 더 호환성이 높은 Parquet 파일을 생성할 수 있도록 output_format_parquet_compliant_nested_types 설정을 추가했습니다 #50001 (Michael Kolupaev).
- 스트레스 테스트 "Not enough space to add ..."에서 발생하는 논리 오류를 수정합니다. #50021 (Kseniia Sumarokova).
ReplicatedMergeTree의 attach 스레드에서 테이블을 시작할 때 데드락이 발생하던 문제를 수정했습니다 #50026 (Antonio Andelic).- fiber 사용 시
SpanHolder::finish()에서 발생하는 assert를 수정 (2차 시도) #50034 (Kruglov Pavel). - DDL OpenTelemetry 컨텍스트 직렬화를 위한 적절한 이스케이프 처리를 추가했습니다 #50045 (Azat Khuzhin).
- 손상된 PROJECTION 파트 보고 기능을 수정합니다 #50052 (Amos Bird).
- JIT 컴파일에서 != NaN 비교 동작 수정 #50056 (Maksim Kita).
- 인자 없이 사용된 Replicated 데이터베이스에서 발생하던 크래시를 수정했습니다. #50058 (Azat Khuzhin).
multiIf에서 상수 조건과 널 허용 인자를 함께 사용할 때 발생하는 비정상 종료를 수정했습니다 #50123 (Anton Popov).- 날짜 관련 키의 잘못된 인덱스 분석을 수정합니다 #50153 (Amos Bird).
- ORDER BY 컬럼이 없는 경우 ORDER BY를 수정할 수 없도록 변경했습니다 #50154 (Han Fei).
- 이항 연산자에 NULL 상수 인자가 포함된 경우 인덱스 분석이 올바르게 동작하지 않던 문제를 수정했습니다 #50177 (Amos Bird).
- clickhouse-client:
--query와--queries-file을 동시에 사용할 수 없도록 변경함 #50210 (Alexey Gerasimchuk). - INTO OUTFILE 확장 기능(
APPEND/AND STDOUT) 및WATCH EVENTS관련 UB(정의되지 않은 동작)을 수정합니다 #50216 (Azat Khuzhin). - CustomSeparatedIgnoreSpaces 포맷에서 행 끝의 공백이 건너뛰어지던 문제를 수정합니다 #50224 (Kruglov Pavel).
- Iceberg 메타데이터 파싱을 수정 #50232 (Kseniia Sumarokova).
- WITH 절에서 중첩된 distributed SELECT를 수정했습니다 #50234 (Azat Khuzhin).
- keyed SipHash의 msan 문제를 수정했습니다. #50245 (Robert Schulze).
- Poco 소켓의 논블로킹 모드 관련 버그를 수정하고, 실제 논블로킹 소켓을 사용하도록 했습니다 #50252 (Kruglov Pavel).
- 백업 항목의 체크섬 계산을 수정합니다. #50264 (Vitaly Baranov).
- 비교 FUNCTION에서 NaN 처리 문제 수정 #50287 (Maksim Kita).
- JIT 집계에서 널 허용 키 관련 수정 #50291 (Maksim Kita).
- 빈 Arrow 또는 Parquet 출력을 기록할 때 clickhouse-local이 비정상 종료되던 문제를 수정했습니다. #50328 (Michael Kolupaev).
- Pool::Entry::disconnect()가 호출될 때 발생하던 크래시를 수정했습니다 #50334 (Val Doroshchuk).
- 디렉터리 잠금을 더 오래 유지하도록 하여 fetch part 동작을 개선했습니다 #50339 (SmitaRKulkarni).
bitShift*함수에서 두 인자가 모두 상수인 경우를 수정했습니다. #50343 (Kruglov Pavel).- 요청 전처리 중 예외가 발생할 때 Keeper에서 발생하던 데드락을 수정합니다. #50387 (frinkr).
- 상수 정수 값에 대한 해싱을 수정했습니다 #50421 (Robert Schulze).
- 데이터 스키핑 인덱스용 merge_tree_min_rows_for_seek 및 merge_tree_min_bytes_for_seek 설정을 수정합니다 #50432 (Azat Khuzhin).
- 오래된 파트를 로드하는 동시 실행 작업 수를 제한합니다 #50450 (Nikita Mikhaylov).
- Keeper 수정: 스냅샷 설치 후 미커밋 상태를 적용하도록 함 #50483 (Antonio Andelic).
- 잘못된 constant folding을 수정했습니다 #50536 (Alexey Milovidov).
- 스트레스 테스트의 논리 오류를 수정(Not enough space to add ...) #50583 (Kseniia Sumarokova).
- VALUES 테이블 함수에서 Null을 LowCardinality(널 허용)로 변환하던 동작을 수정했습니다 #50637 (Kruglov Pavel).
- 잘못된
RegExpTreeDictionary최적화를 되돌립니다 #50642 (Johann Gan).
ClickHouse 릴리스 23.4, 2023-04-26. 발표 자료, 영상
하위 호환성이 없는 변경 사항
- 함수 formatDateTime()에서 서식 지정자
%M은 이제 분(minute) 대신 월 이름을 출력합니다. 이로 인해 MySQL과 동작이 일치합니다. 이전 동작은 설정formatdatetime_parsedatetime_m_is_month_name = 0을 사용하여 복원할 수 있습니다. #47246 (Robert Schulze). - 이 변경은 가상 파일 시스템 캐시를 사용하는 경우에만 의미가 있습니다. 가상 파일 시스템 캐시 설정에서
path가 비어 있지 않고 절대 경로가 아니면,<clickhouse server data directory>/caches/<path_from_cache_config>에 저장됩니다. #48784 (Kseniia Sumarokova). - 동일한 표현식을 가진 기본/보조 인덱스와 정렬 키는 이제 거부됩니다. 이 동작은 설정
allow_suspicious_indices를 사용하여 비활성화할 수 있습니다. #48536 (凌涛).
새로운 기능
- Spark의 approx_percentile과 유사한 새로운 집계 함수
quantileGK/quantilesGK를 지원합니다. Greenwald-Khanna 알고리즘에 대해서는 http://infolab.stanford.edu/~datar/courses/cs361a/papers/quantiles.pdf 문서를 참고하십시오. #46428 (李扬). system.columns테이블에서 추출한 요약 정보를 보여주는SHOW COLUMNS구문이 추가되었습니다. #48017 (Robert Schulze).SYSTEM SYNC REPLICA쿼리에LIGHTWEIGHT및PULL수정자가 추가되었습니다.LIGHTWEIGHT버전은 가져오기(fetch)와 drop-ranges만 기다리며(머지와 뮤테이션은 무시됩니다),PULL버전은 ZooKeeper에서 새로운 엔트리를 가져오기만 하고 해당 엔트리를 기다리지 않습니다. #47794를 수정합니다. #48085 (Alexander Tokmakov).- Kafka DefaultPartitioner와의 호환성을 위해
kafkaMurmurHash함수를 추가했습니다. #47834 이슈를 해결했습니다. #48185 (Nikolay Degterinsky). GRANT CURRENT GRANTS를 사용하여 현재 사용자와 동일한 권한을 가진 사용자를 손쉽게 생성할 수 있게 되었습니다. #48262 (pufit).- 통계 집계 함수
kolmogorovSmirnovTest를 추가합니다. #48228 이슈를 닫습니다. #48325 (FFFFFFFHHHHHHH). system.replicas테이블에lost_part_count컬럼이 추가되었습니다. 이 컬럼 값은 해당 테이블에서 손실된 파트의 총 개수를 나타냅니다. 값은 ZooKeeper에 저장되며, 모니터링을 위해 비영구적인ReplicatedDataLoss프로필 이벤트 대신 사용할 수 있습니다. #48526 (Sergei Trifonov).- 호환성을 위해
soundex함수를 추가했습니다. #39880를 종료했습니다. #48567 (FriendLey). - JSONExtract에서
Map타입을 지원하도록 개선했습니다. #48629 (李扬). - 줄바꿈 구분자와 4개의 공백 들여쓰기를 사용해 예쁘게 서식화된 JSON을 출력하는
PrettyJSONEachRow포맷을 추가합니다. #48898 (Kruglov Pavel). - Parquet 파일의 메타데이터를 읽기 위한
ParquetMetadata입력 포맷을 추가했습니다. #48911 (Kruglov Pavel). - 문자열에서 키-값 쌍을 추출하는
extractKeyValuePairs함수를 추가합니다. 입력 문자열에는 노이즈(예: 로그 파일 / 반드시 키-값 쌍 형식으로 완전히 포맷팅되어 있을 필요는 없음)가 포함될 수 있으며, 알고리즘은 함수에 전달된 인수로 지정한 키에 해당하는 키-값 쌍을 찾습니다. 현재 이 함수는 다음 인수를 지원합니다:data_column(필수),key_value_pair_delimiter(기본값은:),pair_delimiters(기본값은\space \, \;),quoting_character(기본값은 큰따옴표). #43606 (Arthur Passos). - 이제 함수 replaceOne(), replaceAll(), replaceRegexpOne(), replaceRegexpAll()를 패턴 및 치환 인수에 non-const 값을 사용하여 호출할 수 있습니다. #46589 (Robert Schulze).
Map타입 컬럼을 다루기 위한 함수mapConcat,mapSort,mapExists를 추가했습니다. #48071 (Anton Popov).
성능 향상
Parquet포맷 파일 읽기 속도가 크게 향상되었습니다. I/O와 디코딩이 병렬화되었으며 (max_threads설정으로 제어), 필요한 데이터 범위만 읽습니다. #47964 (Michael Kolupaev).- 다음과 같이 IN (서브쿼리)를 사용하는 뮤테이션을 실행하는 경우:
ALTER TABLE t UPDATE col='new value' WHERE id IN (SELECT id FROM huge_table)그리고 테이블t에 여러 파트가 있으면, 각 파트에 대해 서브쿼리SELECT id FROM huge_table의 Set이 메모리에서 생성됩니다. 파트가 많으면 메모리를 많이 사용하게 되어(OOM 발생 가능) CPU 사용량도 증가할 수 있습니다. 이에 대한 해결책으로, 현재 뮤테이션 태스크에 의해 생성 중인 Set에 대한 단기 캐시를 도입했습니다. 동일한 뮤테이션의 다른 태스크가 동시에 실행될 경우 캐시에서 Set을 조회하고, 완성될 때까지 기다렸다가 재사용할 수 있습니다. #46835 (Alexander Gololobov). ALTER TABLE쿼리를 적용할 때 필요한 경우에만 의존성을 검사합니다. #48062 (Raúl Marín).mapUpdate함수를 최적화했습니다. #48118 (Anton Popov).- 이제 로컬 레플리카로의 내부 쿼리는 명시적으로 전송되며, 해당 데이터는 루프백 인터페이스를 통해 수신됩니다. 병렬 레플리카에 대해서는
prefer_localhost_replica설정이 적용되지 않습니다. 이는 더 나은 스케줄링을 위해 필요하며, 코드를 더 단순하고 명확하게 만들어 줍니다. 이니시에이터는 읽기 프로세스의 조정과 결과 머지에만 책임을 지고, 모든 보조 쿼리가 데이터를 읽는 동안 요청에 지속적으로 응답합니다. 참고: 루프백 인터페이스 사용은 성능 면에서 최선은 아니지만, 그렇지 않으면 일부 레플리카가 태스크를 거의 받지 못해 쿼리 실행이 더 느려지고, 가능한 모든 리소스를 활용하지 못할 수 있습니다. 코디네이터의 초기화는 이전보다 더 지연되어 수행됩니다. 모든 수신 요청에는 읽기 알고리즘에 대한 정보가 포함되며, 첫 요청이 도착했을 때 해당 정보로 코디네이터를 초기화합니다. 어떤 레플리카가 다른 알고리즘으로 읽기를 시도하면 예외가 발생하고 쿼리가 중단됩니다. #48246 (Nikita Mikhaylov). - 서브쿼리가 포함된
IN절의 오른쪽이 스킵 인덱스 분석에만 사용되고, 설정(use_skip_indexes=0)으로 스킵 인덱스가 비활성화된 경우에는 Set을 생성하지 않습니다. 이전에는 이로 인해 쿼리 성능이 저하될 수 있었습니다. #48299 (Anton Popov). FROM file(...)를 읽은 직후 쿼리 처리가 병렬화됩니다. #38755 관련. #48525 (Igor Nikonov). 이제 어떤 데이터 소스에서 읽더라도 직후에 쿼리 처리가 병렬화됩니다. 영향을 받는 데이터 소스는 주로url,file같은 테이블 함수와 같이 단순하거나 외부 스토리지에 해당합니다. #48727 (Igor Nikonov). 이는 기본적으로 비활성화되어 있는parallelize_output_from_storages설정으로 제어됩니다.- ThreadPool 뮤텍스의 경합을 줄였습니다(많은 수의 작은 작업을 처리할 때 성능이 향상될 수 있음). #48750 (Sergei Trifonov).
- 다수의
ALTER DELETE뮤테이션에 대한 메모리 사용량을 줄였습니다. #48522 (Nikolai Kochetov). skip_unavailable_shards설정이 활성화된 경우 과도한 연결 시도를 제거했습니다. #48771 (Azat Khuzhin).
실험 기능
- 쿼리 캐시의 엔트리가 이제
max_block_size에 맞게 합쳐지고 압축됩니다. #45912 (Robert Schulze). - 이제 쿼리 캐시에서 사용자별 QUOTA를 정의할 수 있습니다. #48284 (Robert Schulze).
- 병렬 레플리카에 대한 일부 수정이 적용되었습니다. #48433 (Nikita Mikhaylov).
- 암호화된 디스크에서 실험 기능인 zero-copy-replication을 구현했습니다. #48741 (Vitaly Baranov).
개선 사항
connect_timeout_with_failover_ms의 기본값을 1000 ms로 늘렸습니다(https://github.com/ClickHouse/ClickHouse/pull/47229 에서 비동기 연결을 도입했기 때문입니다). #5188를 마감했습니다. #49009 (Kruglov Pavel).- 데이터 레이크 전반에 걸쳐 여러 가지 개선을 했습니다: - 파티션이 없는(non-partitioned) 데이터에서도
Iceberg가 동작하도록 했습니다. -Iceberg포맷 버전 v2를 지원합니다(이전에는 v1만 지원했습니다). -DeltaLake/Hudi에 대해 파티션된(partitioned) 데이터 읽기를 지원합니다. - Delta의 체크포인트 파일을 사용하여DeltaLake메타데이터 읽기가 더 빨라졌습니다. - 잘못된Hudi읽기를 수정했습니다: 이전에는 읽을 데이터를 잘못 선택하여, 작은 크기의 테이블만 올바르게 읽을 수 있었습니다. - 이러한 엔진이 변경된 데이터의 업데이트를 반영하도록 했습니다(이전에는 테이블 생성 시점의 상태로 고정되었습니다). - Spark를 사용하여Iceberg/DeltaLake/Hudi에 대한 적절한 테스트를 추가했습니다. #47307 (Kseniia Sumarokova). - 소켓 비동기 연결과 비동기 쓰기 기능을 추가합니다. 세그먼트 전체에서 연결 생성과 쿼리/외부 테이블 전송을 비동기로 처리합니다. fibers를 사용하여 코드를 리팩터링합니다. #46931를 종료합니다. 이 PR(https://github.com/ClickHouse/ClickHouse/issues/5188) 이후에는 기본
connect_timeout_with_failover_ms값을 늘릴 수 있게 됩니다. #47229 (Kruglov Pavel). zookeeper의 대안으로keeper/keeper_server설정 섹션을 지원합니다. #34766, #34767 이슈를 닫습니다. #35113 (李扬).- ClickHouse 테이블 소스를 사용하는 딕셔너리에 대해 named_collections에서 secure 플래그를 설정할 수 있습니다. #38450을(를) 해결합니다. #46323 (Ilya Golshtein).
bitCount함수가FixedString및String데이터 타입을 지원합니다. #49044 (flynn).- Backup 쿼리에서 [Zoo]Keeper를 사용하는 모든 작업에 대해 구성 가능한 재시도 기능을 추가했습니다. #47224 (Nikita Mikhaylov).
- 기본적으로 S3에 대해
use_environment_credentials를 활성화하여 전체 프로바이더 체인이 자동으로 구성되도록 했습니다. #47397 (Antonio Andelic). - 현재
JSON_VALUEFUNCTION은 Spark의get_json_object함수와 유사하며,'$.key'와 같은 경로를 사용해 JSON 문자열에서 값을 가져오는 기능을 지원합니다. 그러나 다음과 같은 차이점이 있습니다. - 1. Spark의get_json_object는 경로가 존재하지 않는 경우 null을 반환하지만,JSON_VALUEFUNCTION은 빈 문자열을 반환합니다. - 2. Spark의get_json_object는 JSON 객체/배열 값과 같은 복합 타입의 값을 반환할 수 있지만,JSON_VALUEFUNCTION은 이 경우 빈 문자열을 반환합니다. #47494 (KevinyhZou). use_structure_from_insertion_table_in_table_functions에 대해 삽입 테이블 구조를 테이블 함수로 전파하는 동작이 더 유연해졌습니다. 이름 매핑과 가상 컬럼 사용 시 발생하던 문제가 수정되었습니다. 더 이상 'auto' 설정이 필요하지 않습니다. #47962 (Yakov Olkhovskiy).- 쿼리가 강제 종료되었거나 제한을 초과한 경우 Keeper에 대한 연결을 더 이상 재시도하지 않도록 했습니다. #47985 (Raúl Marín).
BSONEachRow에서 Enum 입출력을 지원하고, 모든 맵 키 타입을 허용하며, 출력 시 불필요한 계산을 방지합니다. #48122 (Kruglov Pavel).ORC/Arrow/Parquet포맷에서 더 많은 ClickHouse 타입을 지원합니다: Enum(8|16), (U)Int(128|256), Decimal256(ORC용), Int32 값에서 IPv4를 읽을 수 있도록 허용합니다(ORC는 IPv4를 Int32로 출력하며, 이전에는 다시 읽을 수 없었음),ORC에서 바이너리 데이터로부터 널 허용(Nullable)(IPv6)를 읽을 때의 문제를 수정했습니다. #48126 (Kruglov Pavel).- 테이블
system.storage_policies에 컬럼perform_ttl_move_on_insert,load_balancing을 추가하고, 컬럼volume_type의 데이터 타입을Enum8로 변경합니다. #48167 (lizhuoyu5). - 임시 및 시스템 테이블을 포함한 모든 테이블과 데이터베이스를 백업하는
BACKUP ALL명령에 대한 지원이 추가되었습니다. #48189 (Vitaly Baranov). mapFromArrays함수가 이제 입력으로Map타입을 지원합니다. #48207 (李扬).- 일부
SHOW PROCESSLIST결과가 이제 정렬되어 출력됩니다. #48241 (Robert Schulze). - 원격 IO/로컬 IO/BACKUP 작업에 대해 쿼리 단위/서버 단위로 대역폭을 제한하는 기능(서버 설정:
max_remote_read_network_bandwidth_for_server,max_remote_write_network_bandwidth_for_server,max_local_read_bandwidth_for_server,max_local_write_bandwidth_for_server,max_backup_bandwidth_for_server, 일반 설정:max_remote_read_network_bandwidth,max_remote_write_network_bandwidth,max_local_read_bandwidth,max_local_write_bandwidth,max_backup_bandwidth). #48242 (Azat Khuzhin). CapnProto포맷에서 더 많은 타입을 지원합니다: 맵, (U)Int(128|256), Decimal(128|256). 입력과 출력 시 정수 간 변환을 허용합니다. #48257 (Kruglov Pavel).- 정상 동작에서는 CURRENT_WRITE_BUFFER_IS_EXHAUSTED 예외를 발생시키지 않습니다. #48288 (Raúl Marín).
KeeperMap테이블에서 수행되는 연산에 대해 추가적인 보장을 강제하는 새 설정keeper_map_strict_mode가 추가되었습니다. #48293 (Antonio Andelic).- 단순 딕셔너리의 기본 키 타입이 네이티브 부호 없는 정수형인지 확인합니다. 호환성을 위해
check_dictionary_primary_key설정을 추가했습니다(검사를 비활성화하려면check_dictionary_primary_key = false로 설정). #48335 (lizhuoyu5). - 불필요하므로
KeeperMap에 대해서는 뮤테이션을 복제하지 않습니다. #48354 (Antonio Andelic). - Protobuf 형식에서 이름 없는 tuple을 중첩 Message로 읽고 쓸 수 있도록 허용합니다. Tuple 요소와 Message 필드는 위치 기준으로 매칭됩니다. #48390 (Kruglov Pavel).
- 새로운 플래너에서
additional_table_filters및additional_result_filter설정을 지원합니다. 또한additional_result_filter에 대한 문서 항목을 추가합니다. #48405 (Dmitry Novik). parseDateTime이 이제 형식 문자열 '%f'(소수 초)을 지원합니다. #48420 (Robert Schulze).- formatDateTime()의 형식 문자열 "%f"는 이제 서식화된 값에 분수 초 부분이 없을 경우 "000000"을 출력하며, 이전 동작(0 하나만 출력)은 설정 "formatdatetime_f_prints_single_zero = 1"을 사용하여 복원할 수 있습니다. #48422 (Robert Schulze).
- KeeperMap에 대해 DELETE 및 TRUNCATE를 복제하지 않도록 했습니다. #48434 (Antonio Andelic).
- generateRandom 함수에서 유효한 Decimal 및 Bool 값을 생성하도록 했습니다. #48436 (Kruglov Pavel).
- SELECT 쿼리의 식 목록에서 마지막 항목 뒤에 오는 쉼표를 허용합니다. 예:
SELECT a, b, c, FROM table. #37802를 해결합니다. #48438 (Nikolay Degterinsky). - 클라이언트 파라미터
--user및--password로CLICKHOUSE_USER및CLICKHOUSE_PASSWORD환경 변수를 재정의합니다. #38909 이슈를 해결합니다. #48440 (Nikolay Degterinsky). - 재시도 가능한 오류가 발생하는 경우
MergeTree테이블에서 데이터 파트 로드를 재시도하도록 했습니다. #48442 (Anton Popov). arrayMin,arrayMax,arrayDifference함수에Date,Date32,DateTime,DateTime64데이터 타입 지원을 추가합니다. #21645를 해결합니다. #48445 (Nikolay Degterinsky).{server_uuid}매크로 지원을 추가합니다. 이 매크로는 새로운 레플리카가 실행 중에 지속적으로 추가되고 제거되는 오토스케일링된 클러스터에서 각 레플리카를 식별하는 데 유용합니다. #48554를 해결합니다. #48563 (Alexey Milovidov).- 설치 스크립트는 가능하면 복사하는 대신 하드 링크를 생성합니다. #48578 (Alexey Milovidov).
SHOW TABLE구문을SHOW CREATE TABLE과 동일한 의미로 해석하도록 지원합니다. #48580 이슈를 닫습니다. #48591 (flynn).- 이제 HTTP 임시 버퍼는 가상 파일 시스템 캐시에서 데이터를 제거(evict)하는 방식으로 동작할 수 있습니다. #48664 (Vladimir C).
CREATE AS SELECT에서도 스키마 추론이 작동하도록 했습니다. #47599을(를) 해결했습니다. #48679 (flynn).ReplicatedMergeTree에서MUTATE_PART엔트리 하나당 뮤테이션 명령 수를 제한할 수 있도록replicated_max_mutations_in_one_entrySETTING을 추가했습니다(기본값은 10000입니다). #48731 (Alexander Tokmakov).- AggregateFunction 타입에서 arena 영역의 사용되지 않은 바이트는
read_bytes에 포함하지 않습니다. #48745 (Raúl Marín). - MySQL 딕셔너리 소스와 named collection을 함께 사용할 때 일부 MySQL 관련 설정이 처리되지 않던 문제를 수정합니다. 이슈 #48402를 해결합니다. #48759 (Kseniia Sumarokova).
- 사용자가
max_single_part_upload_size를 매우 큰 값으로 설정했을 때 AWS S3 SDK의 버그로 인해 프로세스가 비정상 종료될 수 있습니다. 이 변경으로 #47679가 해결됩니다. #48816 (Alexey Milovidov). RabbitMQ의 데이터 레이스 문제를 수정하고(보고서), 코드를 리팩터링했습니다. #48845 (Kseniia Sumarokova).system.parts및system.part_log에name및part_name별칭을 추가합니다. #48718 이슈를 해결합니다. #48850 (sichenzhao).- 이제 "arrayDifferenceSupport()", "arrayCumSum()" 및 "arrayCumSumNonNegative()" 함수는 와이드 정수 타입인 (U)Int128/256 입력 배열도 지원합니다. #48866 (cluster).
clickhouse-client의 멀티라인 히스토리가 더 이상 공백으로 채워지지 않습니다. 이로 인해 붙여넣기 작업이 더 자연스러워집니다. #48870 (Joanna Hulboj).- ClickHouse가 LXC 내부에서 실행되고 LXCFS가 사용되는 드문 상황에 대비해 약간의 개선을 구현했습니다. LXCFS에는 문제가 있어 때때로
/proc내부의 파일을 읽을 때 「Transport endpoint is not connected」라는 오류를 반환합니다. 이 오류는 ClickHouse의 서버 로그에 올바르게 기록되고 있었습니다. 추가로, 파일을 다시 여는 방식으로 이 문제에 대한 우회 처리를 적용했습니다. 이는 아주 미미한 변경입니다. #48922 (Real). - 프리페치에 대한 메모리 사용량 계산을 개선했습니다. CI 환경에서 프리페치 설정을 무작위화했습니다. #48973 (Kseniia Sumarokova).
- GCS에서 네이티브 복사 작업 시 헤더가 올바르게 설정되도록 수정했습니다. #48981 (Antonio Andelic).
- 명령줄에서 설정 이름을 지정할 때 밑줄 대신 대시를 사용할 수 있도록 지원을 추가했습니다. 예를 들어
--max_threads대신--max-threads를 사용할 수 있습니다. 추가로,--대신—와 같은 유니코드 대시 문자도 지원합니다. 이는 다른 회사 팀과 소통하는 과정에서, 해당 팀의 관리자가 MS Word에서 코드를 복사하여 붙여넣기한 경우에 유용합니다. #48985 (alekseygolub). - SSL 사용자 인증서 기반 인증이 실패한 경우 비밀번호 인증으로 폴백하도록 했습니다. #48974를 해결합니다. #48989 (Nikolay Degterinsky).
- 임베디드 대시보드를 개선했습니다. #46671 이슈를 닫았습니다. #49036 (Kevin Zhang).
- 로그 메시지에 대한 프로파일 이벤트를 추가하여 로그 심각도별 메시지 개수를 쉽게 확인할 수 있도록 했습니다. #49042 (Alexey Milovidov).
- 이전 버전에서는
LineAsString포맷이 병렬(parallel) 파싱 활성화 여부와 DOS 또는 macOS Classic 줄 바꿈 존재 여부에 따라 일관성 없이 동작했습니다. 이 변경으로 #49039가 해결되었습니다. #49052 (Alexey Milovidov). - 구문 분석되지 않은 쿼리 매개변수에 대한 예외 메시지에 매개변수 이름도 함께 표시되도록 했습니다. #48878을(를) 재구현했습니다. #48772을(를) 닫았습니다. #49061 (Alexey Milovidov).
빌드/테스트/패키징 개선
- 시간대를 업데이트했습니다. 다음 시간대가 업데이트되었습니다: Africa/Cairo, Africa/Casablanca, Africa/El_Aaiun, America/Bogota, America/Cambridge_Bay, America/Ciudad_Juarez, America/Godthab, America/Inuvik, America/Iqaluit, America/Nuuk, America/Ojinaga, America/Pangnirtung, America/Rankin_Inlet, America/Resolute, America/Whitehorse, America/Yellowknife, Asia/Gaza, Asia/Hebron, Asia/Kuala_Lumpur, Asia/Singapore, Canada/Yukon, Egypt, Europe/Kirov, Europe/Volgograd, Singapore. #48572 (Alexey Milovidov).
- 빌드 속도를 높이기 위해 헤더 파일의 의존성 수를 줄였습니다. #47984 (Dmitry Novik).
- 테스트에서 마크와 인덱스의 압축을 무작위로 수행하도록 했습니다. #48286 (Alexey Milovidov).
- 내부 ZSTD 버전을 1.5.4에서 1.5.5로 올렸습니다. #46797 (Robert Schulze).
- 테스트에서 compact 파트에서 wide 파트로의 수직 병합을 무작위로 수행하도록 했습니다. #48287 (Raúl Marín).
- HDFS에서 CRC32 체크섬을 지원하도록 했습니다. 성능 문제를 수정했습니다. #48614 (Alexey Milovidov).
- GCC 지원의 잔여 부분을 제거했습니다. #48671 (Robert Schulze).
- 새로운 analyzer 인프라가 활성화된 CI 실행을 추가했습니다. #48719 (Dmitry Novik).
버그 수정(공식 안정 버전에서 사용자가 직접 인지할 수 있는 오동작)
- 백그라운드 스레드에서 처리되는 구체화된 뷰(Materialized View, MV)에 대해
system.query_views_log를 수정합니다. #46668 (Azat Khuzhin). RENAME COLUMN관련 여러 버그를 수정합니다 #46946 (alesapin).- clickhouse-format의 경미한 하이라이트 문제를 수정했습니다. #47610 (Natasha Murashkina).
- 크기가 INT_MAX를 초과하는 파트를 S3로 업로드할 때 크래시가 발생하던 LLVM의 libc++ 버그를 수정했습니다 #47693 (Azat Khuzhin).
sparkbarFUNCTION에서 발생하는 오버플로우를 수정했습니다. #48121 (Vladimir C).- S3에서 발생하는 레이스 컨디션을 수정 #48190 (Anton Popov).
- 일관되지 않은 동작으로 인해 집계 함수용 JIT을 비활성화했습니다 #48195 (Alexey Milovidov).
- ALTER 구문 서식 수정(사소한 변경) #48289 (Natasha Murashkina).
- RabbitMQ에서 CPU 사용량 문제를 수정합니다(23.2 버전에서 #44404 이후 악화되었던 문제) #48311 (Kseniia Sumarokova).
- Distributed 위의 Merge에 대한 EXPLAIN PIPELINE에서 발생하던 크래시를 수정합니다. #48320 (Azat Khuzhin).
- LowCardinality를 Arrow 딕셔너리로 직렬화하는 기능을 수정했습니다 #48361 (Kruglov Pavel).
- TemporaryFileStream의 캐시 파일 세그먼트에 대한 다운로더를 재설정합니다 #48386 (Vladimir C).
- DROP/REPLACE PARTITION의 경우 SYSTEM SYNC REPLICA가 멈출 수 있던 문제를 수정합니다 #48391 (Azat Khuzhin).
- 딕셔너리에 의존하는 분산 테이블을 로드할 때 발생하던 시작 시 오류를 수정했습니다 #48419 (MikhailBurdukov).
- system 테이블을 자동으로 이름 변경할 때 의존성 검사를 수행하지 않음 #48431 (Raúl Marín).
- KeeperMap 스토리지에서 영향을 받는 행만 업데이트하도록 수정 #48435 (Antonio Andelic).
- VFS 캐시에서 발생할 수 있는 segfault를 수정했습니다 #48469 (Kseniia Sumarokova).
- 상수 문자열이 제공되지 않은 경우
toTimeZone함수가 오류를 발생시킵니다 #48471 (Jordi Villar). - Protobuf에서 IPv4에 대한 논리 오류를 수정하고 Date32 지원을 추가합니다 #48486 (Kruglov Pavel).
- system.settings의 "changed" 플래그가 여러 값을 갖는 설정에 대해 잘못 계산되었습니다 #48516 (MikhailBurdukov).
- 압축이 활성화된
Memory스토리지에서 발생하던 문제를 수정했습니다 #48517 (Anton Popov). - 클라이언트 재연결 시 bracketed-paste 모드로 인해 비밀번호 입력이 잘못 처리되던 문제를 수정합니다 #48528 (Michael Kolupaev).
- IP 및 UUID 타입을 키로 사용하는 중첩 맵을 수정합니다 #48556 (Yakov Olkhovskiy).
- 해시 딕셔너리용 병렬 로더에서 처리되지 않은 예외가 발생하던 문제를 수정했습니다. #48571 (Azat Khuzhin).
groupArray집계 FUNCTION이 널 허용(Nullable) 타입에서 비어 있는 결과에 대해서도 올바르게 동작합니다 #48593 (lgbo).- ACL에서 노드가 때때로
auth스킴 없이 생성되는 경우 발생하는 Keeper의 버그를 수정합니다. #48595 (Aleksei Filatov). - UInt 타입에 대해 IPv4 비교 연산자 사용을 허용합니다. #48611 (Yakov Olkhovskiy).
- 캐시로 인해 발생할 수 있는 오류를 수정했습니다 #48636 (Kseniia Sumarokova).
- 빈 데이터로 수행되는 비동기 insert는 더 이상 예외를 던지지 않습니다. #48663 (Anton Popov).
- RENAME TABLE 실패 시 발생하는 테이블 의존성 문제를 수정합니다 #48683 (Azat Khuzhin).
- 기본 키에 중복된 컬럼이 있는 경우(이는 프로젝션에서만 가능합니다), 이전 버전에서는 #48838 버그가 발생할 수 있었습니다(Amos Bird).
- ZooKeeper에서 send_thread/receive_thread를 join할 때 발생할 수 있는 race condition을 수정했습니다 #48849 (Alexander Gololobov).
- 제로 카피 복제(zero copy replication)를 사용할 때 무시된 detached part를 DROP 하려고 하면 발생하던 예기치 않은 part 이름 오류를 수정했습니다. #48862 (Michael Lex).
Date32Parquet/Arrow 컬럼이Date32가 아닌 컬럼으로 읽히던 문제 수정 #48864 (Kruglov Pavel).- ROW POLICY가 있고 이름에 점(.)이 포함된 컬럼이 있는 테이블에서 SELECT할 때 발생하던
UNKNOWN_IDENTIFIER오류를 수정했습니다 #48976 (Kruglov Pavel). - 빈 널 허용 문자열에 의한 집계 동작을 수정 #48999 (LiuNeng).
ClickHouse 23.3 LTS 릴리스, 2023-03-30. 발표 자료, 영상
Upgrade Notes
- 경량한 삭제(Lightweight DELETE)는 프로덕션 환경에서 사용할 수 있는 상태이며 기본적으로 활성화되어 있습니다. 이제 MergeTree 테이블에 대해
DELETE쿼리를 기본으로 사용할 수 있습니다. *domain*RFC및netloc함수의 동작이 약간 변경되었습니다. 규격 준수를 개선하기 위해 URL authority에서 허용되는 문자 범위를 완화했습니다. #46841 (Azat Khuzhin).- 컬럼에 대해 DEFAULT/EPHEMERAL/ALIAS/MATERIALIZED SQL 문을 사용하는 KafkaEngine 기반 테이블 생성이 금지되었습니다. #47138 (Aleksandr Musorin).
- 「비동기 연결 드레인(asynchronous connection drain)」 기능이 제거되었습니다. 관련 SETTING 및 메트릭도 함께 제거되었습니다. 내부 기능이었으므로, 해당 기능을 알지 못했던 사용자에게는 이 제거가 영향을 미치지 않습니다. #47486 (Alexander Tokmakov).
arraySum/Min/Max/Avg/Product,arrayCumSum/CumSumNonNegative,arrayDifference, 배열 생성, IN 연산자, 쿼리 파라미터,groupArrayMovingSum, 통계 함수,min/max/any/argMin/argMax, PostgreSQL wire protocol, MySQL table engine 및 function,sumMap,mapAdd,mapSubtract,arrayIntersect에서 256비트 Decimal 데이터 타입(38자리 초과)을 지원합니다.arrayIntersect에서 대정수(big integer)도 지원합니다. 모멘트를 포함하는 통계 집계 함수(예:corr또는 다양한TTest)는 내부 표현으로Float64를 사용합니다(이전에는Decimal128을 사용했으나 의미가 없었습니다). 또한 이들 함수는 분산이 무한한 경우inf대신nan을 반환할 수 있습니다. 일부 함수는 이전 버전에서Decimal256데이터 타입을 허용하면서Decimal128을 반환했는데, 이제 수정되었습니다. 이 변경으로 #47569, #44864, #28335가 해결됩니다. #47594 (Alexey Milovidov).- backup_threads/restore_threads를 사용자 설정이 아닌 서버 설정으로 변경했습니다. #47881 (Azat Khuzhin).
- 상수(const)이거나 비결정적(non-deterministic)인 보조 인덱스를 허용하지 않습니다. #46839 (Anton Popov).
새 기능
parallel_replicas_custom_key및parallel_replicas_custom_key_filter_type설정을 사용하여 레플리카 간에 작업을 분할하는 새로운 모드를 추가합니다. 클러스터가 다수의 레플리카를 가진 단일 세그먼트로 구성된 경우, 최대max_parallel_replicas개까지 레플리카를 무작위로 선택하여 세그먼트처럼 동작하도록 간주합니다. 각 세그먼트에 대해서는, 해당 세그먼트에 대응하는 필터를 이니시에이터에서 쿼리에 추가한 뒤 세그먼트로 전송합니다. 클러스터가 여러 세그먼트로 구성된 경우, 임의의 키를 정의할 수 있다는 점을 제외하면sample_key와 동일하게 동작합니다. #45108 (Antonio Andelic).- 취소 시 부분 결과를 표시하는 옵션: 쿼리 설정
partial_result_on_first_cancel가 추가되어, 취소된 쿼리(예: Ctrl+C로 인한 취소)가 부분 결과를 반환할 수 있게 되었습니다. #45689 (Alexey Perevyshin). - 임시 테이블에 임의의 테이블 엔진을 사용할 수 있도록 지원을 추가했습니다(Replicated 및 KeeperMap 엔진 제외). #31497을(를) 해결했습니다. #46071 (Roman Vasin).
- Keeper의 중앙 집중식 스토리지를 사용하여 사용자 정의 SQL 함수 복제를 지원하는 기능을 추가했습니다. #46085 (Aleksei Filatov).
system.settings와 유사하며 서버 설정을 포함하는system.server_settings를 구현했습니다. #46550 (pufit).UNDROP TABLE쿼리를 지원합니다. #46811 이슈를 해결합니다. #47241 (chen).- 이름이 지정된 컬렉션에 대해 별도의 권한 부여를 허용합니다(예: 모든 컬렉션에 한 번에 권한을 부여하는 대신, 특정 컬렉션에만
SHOW/CREATE/ALTER/DROP named collection권한을 부여할 수 있도록 하기 위함). #40894를 해결합니다. 새로운 액세스 권한 유형NAMED_COLLECTION_CONTROL을 추가하며, 이는 사용자 설정에 명시적으로 추가하지 않는 한 기본 사용자에게는 부여되지 않습니다(GRANT ALL을 수행할 수 있으려면 필요합니다). 또한 23.2에서와 달리, 기본 사용자가 전체 액세스 권한을 가지기 위해show_named_collections를 수동으로 지정할 필요는 더 이상 없습니다. #46241 (Kseniia Sumarokova). - 중첩된 사용자 정의 디스크를 허용합니다. 이전에는 사용자 정의 디스크에서 단일 계층 디스크 구조만 지원되었습니다. #47106 (Kseniia Sumarokova).
- 함수
widthBucket이 도입되었습니다 (WIDTH_BUCKET별칭은 호환성을 위해 제공합니다). #42974. #46790 (avoiderboi). - 지정된 형식 문자열에 따라 새로운 함수
parseDateTime/parseDateTimeInJodaSyntax를 추가합니다.parseDateTime은 MySQL 문법을 사용해String을DateTime으로 파싱하고,parseDateTimeInJodaSyntax는 Joda 문법을 사용해 파싱합니다. #46815 (李扬). - 테이블 함수
null의 기본 구조로dummy UInt8을 사용하도록 했습니다. #46930 이슈를 해결합니다. #47006 (flynn). parseDateTimeBestEffortFUNCTION에서Dec 15, 2021과 같이 쉼표가 포함된 날짜 형식을 지원합니다. #46816 이슈를 해결합니다. #47071 (chen).- HTTP 인터페이스의 URL 매개변수
wait_end_of_query및buffer_size에 해당하는 설정http_wait_end_of_query와http_response_buffer_size가 추가되었습니다. 이를 통해 프로필 설정에서 이러한 설정을 변경할 수 있습니다. #47108 (Vladimir C). Atomic데이터베이스에서 드롭되었지만 아직 완전히 제거되지 않은 테이블을 나열하는system.dropped_tables테이블을 추가했습니다. #47364 (chen).- MySQL 호환성을 위해
positionCaseInsensitive함수의 별칭으로INSTR를 추가했습니다. #47529 이슈를 해결했습니다. #47535 (flynn). - 고정 소수점 정밀도로 숫자를 문자열로 변환할 수 있는
toDecimalString함수가 추가되었습니다. #47838 (Andrey Zvonov). - MergeTree 설정
max_number_of_mutations_for_replica가 추가되었습니다. 이 설정은 레플리카당 파트 뮤테이션 개수를 지정한 값으로 제한합니다. 0으로 설정하면 레플리카당 뮤테이션 개수에 제한이 없음을 의미합니다(실행은 여전히 다른 SETTINGS에 의해 제약될 수 있습니다). #48047 (Vladimir C). - 배열 두 개로부터 맵을 생성할 수 있는 맵 관련 함수
mapFromArrays를 추가했습니다. #31125 (李扬). - Parquet/ORC/Arrow 출력 포맷에서 압축을 제어할 수 있도록 했으며, 더 많은 압축 입력 포맷을 지원하도록 했습니다. 이로써 #13541를 해결했습니다. #47114 (Kruglov Pavel).
- 네이티브 프로토콜에 SSL 사용자 인증서 기반 인증을 추가합니다. #47077 이슈를 해결합니다. #47596 (Nikolay Degterinsky).
parseDateTime함수에 *OrNull() 및 *OrZero() 변형을 추가하고, MySQL 호환성을 위해str_to_date별칭을 추가했습니다. #48000 (Robert Schulze).- MySQL과의 호환성을 높이기 위해 연산자
REGEXP(연산자 "LIKE", "IN", "MOD" 등과 유사함)를 추가했습니다. #47869 (Robert Schulze).
성능 개선
- 메모리 상의 마크가 이제 압축되어, 메모리 사용량이 3~6배 감소합니다. #47290 (Michael Kolupaev).
- 이전 버전에서는 파일이 매우 많은 백업 작업이 믿기 어려울 정도로 느렸습니다. 이제는 그렇지 않습니다. 이제는 믿기 어려울 정도로 빨라졌습니다. #47251 (Alexey Milovidov). 백업 I/O 작업을 위한 별도의 스레드 풀이 도입되었습니다. 이를 통해 다른 풀과 독립적으로 확장할 수 있으며 성능이 향상됩니다. #47174 (Nikita Mikhaylov). 백업 처리의 최종 단계에서 메타데이터를 수집할 때 MultiRead 요청과 재시도 메커니즘을 사용합니다. #47243 (Nikita Mikhaylov). 백업과 복원 중인 데이터가 모두 S3에 있는 경우, 이제부터는 서버 측 복사를 사용하도록 했습니다. #47546 (Vitaly Baranov).
FINAL을 사용하는 쿼리에서 과도한 데이터 읽기를 수정했습니다. #47801 (Nikita Taranov).max_final_threadsSETTING은 서버 시작 시 서버의 코어 수와 동일한 값으로 설정되며, 해당 값은max_threads에 사용되는 것과 동일한 알고리즘으로 결정됩니다. 이를 통해 CPU 수가 많은 서버에서final실행의 동시성이 향상됩니다. #47915 (Nikita Taranov).- ClickHouse 소스를 사용하는 DIRECT 딕셔너리에 대해 읽기 파이프라인을 여러 스레드에서 실행할 수 있도록 합니다. 이를 활성화하려면
CREATE DICTIONARY문에서 소스의SETTINGS섹션에dictionary_use_async_executor=1을 설정하십시오. #47986 (Vladimir C). - 단일 널 허용 키에 대한 집계 성능을 최적화합니다. #45772 (LiuNeng).
- 소문자
tokenbf_v1인덱스를hasTokenOrNull,hasTokenCaseInsensitive,hasTokenCaseInsensitiveOrNull함수에서 사용하도록 구현했습니다. #46252 (ltrk2). - SIMD를 사용해 앞의 두 문자를 먼저 검색하도록 하여
position함수와LIKE를 최적화합니다. #46289 (Jiebin Sun). - 크기가 매우 클 수 있는
system.detached_parts에 대한 쿼리를 최적화합니다. 블록 크기 제한을 고려하여 여러 소스를 추가했으며, 각 블록에서 I/O 스레드 풀을 사용해 파트 크기를 계산합니다. 즉, 시스템 호출을 병렬로 수행합니다. #46624 (Sema Checherinda). - ReplicatedMergeTree 테이블에 대한
max_replicated_merges_in_queue기본값을 16에서 1000으로 늘립니다. 이를 통해 ClickHouse Cloud에서 공유 스토리지를 사용하는 클러스터처럼 레플리카 수가 매우 많은 클러스터에서 백그라운드 merge 작업을 더 빠르게 수행할 수 있습니다. #47050 (Alexey Milovidov). - 파티션 목록을 가져오기 위해
clickhouse-copier가DISTINCT대신GROUP BY를 사용하도록 업데이트했습니다. 이로 인해 대용량 테이블에서 SELECT 쿼리 시간이 500초 이상에서 1초 미만으로 단축되었습니다. #47386 (Clayton McClure). ASOF JOIN에서 발생하던 성능 저하를 수정합니다. #47544 (Ongkong).- Keeper에서 배치 처리를 더욱 강화했습니다. 읽기 요청 시 배치를 끊지 않도록 하여 성능을 개선했습니다. #47978 (Antonio Andelic).
- DEFAULT 표현식이 서로 다른 컬럼을 사용하는 Merge에서도 PREWHERE를 허용합니다. #46831 (Azat Khuzhin).
실험적 기능
- Parallel replicas: 로컬 레플리카를 더 잘 활용하여 전체 성능을 향상시키고, 기본적으로 비복제 MergeTree에서 parallel replicas를 사용한 읽기를 금지합니다. #47858 (Nikita Mikhaylov).
- 실험적 Analyzer가 활성화된 경우,
Join,Dictionary및EmbeddedRocksDB테이블과의 JOIN에서 왼쪽 테이블에 대한 필터 푸시다운을 지원합니다. #47280 (Maksim Kita). - 이제 zero copy 복제를 사용하는 ReplicatedMergeTree가 Keeper에 가하는 부하가 감소합니다. #47676 (alesapin).
- MaterializedPostgreSQL을 사용한 materialized view 생성 시 발생하던 문제를 수정했습니다. #40807 (Maksim Buren).
개선 사항
input_format_json_ignore_unknown_keys_in_named_tuple설정을 기본적으로 활성화합니다. #46742 (Kruglov Pavel).- MATERIALIZED VIEW로 데이터를 푸시하는 동안 오류를 무시할 수 있도록 허용합니다(새 설정
materialized_views_ignore_errors를 추가하며, 기본값은false이지만 로그를system.*_log테이블로 플러시할 때는 항상true로 설정됩니다). #46658 (Azat Khuzhin). - 메모리 내에서 분산 전송 작업의 파일 큐를 추적합니다. #45491 (Azat Khuzhin).
- 이제 HTTP 프로토콜을 사용하는 모든 쿼리의 응답에
X-ClickHouse-Query-Id및X-ClickHouse-Timezone헤더가 추가됩니다. 이전에는SELECT쿼리에만 추가되었습니다. #46364 (Anton Popov). MongoDB의 외부 테이블: host:port 나열을 사용하는 URI를 통한 레플리카 세트(replica set) 연결 지원과 MongoDB 딕셔너리에서 readPreference 옵션 지원이 추가되었습니다. 예시 URI: mongodb://db0.example.com:27017,db1.example.com:27017,db2.example.com:27017/?replicaSet=myRepl&readPreference=primary. #46524 (artem-yadr).- 이 개선 사항은 사용자 입장에서는 눈에 띄지 않습니다. 쿼리 플랜 기반으로 프로젝션(projection) 분석을 재구현했습니다. 이전 버전과 새 버전 간 전환을 위해 설정
query_plan_optimize_projection=1을(를) 추가했습니다. #44963를 수정했습니다. #46537 (Nikolai Kochetov). - 기본 출력 형식에서 Parquet 형식 v1 대신 v2를 사용합니다. Parquet 버전을 제어하는 설정
output_format_parquet_version이 추가되었으며, 가능한 값은1.0,2.4,2.6,2.latest(기본값)입니다. #46617 (Kruglov Pavel). - 이제 새 구성 구문을 사용해 이름에 마침표(
.)가 포함된 Kafka 토픽을 설정할 수 있습니다. #46752 (Robert Schulze). - 문제를 일으킬 수 있는 반복을 검사하는 hyperscan 패턴용 휴리스틱을 수정합니다. #46819 (Robert Schulze).
- 다른 레플리카에서 블록이 동시에 생성된 경우 ZK 노드의 존재를 system.errors에 보고하지 않도록 했습니다. #46820 (Raúl Marín).
clickhouse-local에서 열 수 있는 파일 수 제한을 늘립니다. 이렇게 하면 CPU 코어 수가 매우 많은 서버의web테이블에서 읽을 수 있게 됩니다. 열린 파일이 너무 많더라도 URL 테이블 엔진에서 URL을 읽는 작업을 중단하지 않습니다. 이는 #46852를 해결합니다. #46853 (Alexey Milovidov).- 숫자 파싱에 실패해 예외가 발생하는 경우 이제 더 읽기 쉬운 예외 메시지가 표시됩니다. #46917 (Robert Schulze).
- 백업 진행 상황을 추적하기 위해 처리된 각 작업 후에
system.backups를 업데이트하도록 했습니다. #46989 (Aleksandr Musorin). - Native 입력 포맷에서 타입 변환을 허용합니다. 이를 제어하는 설정
input_format_native_allow_types_conversion을 추가했습니다 (기본적으로 활성화되어 있습니다). #46990 (Kruglov Pavel). range함수에서 IPv4를 허용하여 IP 범위를 생성할 수 있도록 했습니다. #46995 (Yakov Olkhovskiy).- 한 볼륨/디스크에서 다른 볼륨/디스크로 파트를 이동할 수 없는 경우 예외 메시지를 개선했습니다. #47032 (alesapin).
JSONType함수에서Bool타입을 지원합니다. 이전에는 bool 값에 대해Null타입이 잘못 반환되었습니다. #47046 (Anton Popov).- 미리 정의된 HTTP 쿼리를 구성하는 데
_request_body매개변수를 사용합니다. #47086 (Constantine Peresypkin). - Enter 키를 눌렀을 때 기본 제공 UI SQL 편집기에서 자동 들여쓰기를 지원합니다. #47113 (Alexey Korepanov).
- 'sudo'를 사용한 자체 압축 해제 시, 추출된 파일의 uid와 gid를 현재 실행 중인 사용자로 설정하려고 시도합니다. #47116 (Yakov Olkhovskiy).
- 이전에는
repeat함수의 두 번째 인수가 부호 없는 정수형만 허용되어 -1과 같은 값은 전달할 수 없었습니다. 이 동작은 Spark 함수와는 달랐습니다. 이번 업데이트에서repeat함수는 Spark 함수의 동작과 일치하도록 수정되었습니다. 이제 음수를 포함하여 동일한 유형의 입력을 허용합니다. 업데이트된 구현의 정확성을 검증하기 위해 광범위한 테스트가 수행되었습니다. #47134 (KevinyhZou). 참고: 이 변경 로그 항목은 ChatGPT가 다시 작성했습니다. - 스택 트레이스에서
::__1부분을 제거합니다. 스택 트레이스에서std::basic_string<char, ...를String으로 표시합니다. #47171 (Mike Kot). - 재생 공격을 방지하기 위해 interserver 모드를 재구현했습니다(참고로 이 변경 사항은 이전 서버와의 하위 호환성을 유지합니다). #47213 (Azat Khuzhin).
- 정규식 그룹 인식 정확도를 개선하고
regexp_tree딕셔너리를 정교하게 다듬었습니다. #47218 (Han Fei). - Keeper 개선: Keeper에서 사용되는 리소스를 정리하기 위한 새로운 4LW 명령
clrs를 추가했습니다(예를 들어, 사용되지 않는 메모리 해제). #47256 (Antonio Andelic). - 코덱
DoubleDelta(bytes_size),Gorilla(bytes_size),FPC(level, float_size)에 선택적 인수를 추가하여,clickhouse-compressor에서 컬럼 타입 없이도 이 코덱들을 사용할 수 있게 했습니다. 이 코덱들을 사용할 때clickhouse-compressor에서 발생할 수 있는 비정상 종료 및 산술 오류를 수정했습니다. 해결: https://github.com/ClickHouse/ClickHouse/discussions/47262. #47271 (Kruglov Pavel). runningDifferenceFUNCTION에 bigint 타입 지원을 추가했습니다. #47194 이슈를 해결합니다. #47322 (Nikolay Degterinsky).- 일부 경계 상황에서 발생할 수 있는
ExpiredToken오류를 방지하기 위해, 만료 시간이 있는 S3 자격 증명에 만료 여유 구간을 추가합니다. 이 동작은expiration_window_seconds구성 옵션으로 제어할 수 있으며, 기본값은 120초입니다. #47423 (Antonio Andelic). Avro포맷에서 Decimal 및 Date32 타입을 지원합니다. #47434 (Kruglov Pavel).Ordinary에서Atomic으로의 변환 작업이 중단된 것이 감지되면 서버가 시작되지 않으며, 문제 해결 방법이 포함된 더 명확한 오류 메시지를 출력합니다. #47487 (Alexander Tokmakov).system.opentelemetry_span_log에 새로운 컬럼kind를 추가합니다. 이 컬럼은 OpenTelemetry에 정의된 SpanKind 값을 저장합니다. #47499 (Frank Chen).Protobuf포맷에서 컬럼 이름으로 루트 필드 이름만 사용하더라도 중첩 배열을 읽고/쓸 수 있도록 허용합니다. 이전에는 컬럼 이름에 모든 중첩 필드 이름이 포함되어야 했습니다(예:a.b.c Array(Array(Array(UInt32))), 이제는a Array(Array(Array(UInt32)))만 사용하면 됩니다). #47650 (Kruglov Pavel).SYSTEM SYNC REPLICA에 선택적인STRICT수정자를 추가하여 쿼리가 복제(replication) 큐가 비워질 때까지 대기하도록 했습니다(https://github.com/ClickHouse/ClickHouse/pull/45648 적용 이전과 동일하게 동작합니다). #47659 (Alexander Tokmakov).- 일부 OpenTelemetry span 로그의 이름을 개선했습니다. #47667 (Frank Chen).
- 집계 함수 결합자(aggregate function combinator) 체인이 지나치게 길어지지 않도록 방지합니다(분석 단계에서 쿼리가 느려질 수 있습니다). 이 변경으로 #47715를 해결합니다. #47716 (Alexey Milovidov).
- 파라미터화된 뷰에서 서브쿼리를 사용할 수 있도록 지원합니다. 이 변경으로 #46741 및 #47725 이슈가 해결되었습니다 (SmitaRKulkarni).
- MySQL 통합 기능에서 발생하던 메모리 누수를 수정합니다 (
connection_auto_close=1에서 재현됨). #47732 (Kseniia Sumarokova). - Decimal 파라미터와 관련된 코드에서 오류 처리가 개선되어, 더 유익한 오류 메시지가 제공됩니다. 이전에는 잘못된 Decimal 파라미터가 전달되었을 때 생성되는 오류 메시지가 불명확하거나 도움이 되지 않았습니다. 이번 업데이트를 통해 출력되는 오류 메시지가 수정되어, Decimal 파라미터와 관련된 문제를 더 쉽게 식별하고 수정할 수 있도록 보다 상세하고 유용한 정보를 제공하게 되었습니다. #47812 (Yu Feng). 참고: 이 변경 로그 항목은 ChatGPT로 다시 작성되었습니다.
- 매개변수
exact_rows_before_limit는rows_before_limit_at_least가 제한에 도달하기 전에 반환된 행의 개수를 정확하게 반영하도록 하기 위해 사용됩니다. 이 Pull Request는 쿼리에 여러 세그먼트에 걸친 분산 처리나 정렬 작업이 포함될 때 발생하는 문제를 해결합니다. 이번 업데이트 이전에는 이러한 시나리오가 의도한 대로 동작하지 않았습니다. #47874 (Amos Bird). - ThreadPools 메트릭 자체 점검 기능. #47880 (Azat Khuzhin).
WriteBufferFromS3Microseconds및WriteBufferFromS3RequestsErrors프로필 이벤트를 추가했습니다. #47885 (Antonio Andelic).- ClickHouse 설치 시
--link및--noninteractive(-y) 옵션을 추가합니다. #47750 이슈를 해결합니다. #47887 (Nikolay Degterinsky). - 사용할 수 없는 종속 테이블이 있는 materialized view에 ATTACH할 때 발생하던
UNKNOWN_TABLE예외를 수정했습니다. 이는 백업에서 상태를 복원하려고 할 때 유용합니다. #47975 (MikhailBurdukov). - 암호화된 디스크 구성에 (선택적) 경로가 추가되지 않던 문제를 수정합니다. #47981 (Kseniia Sumarokova).
- 매개변수화된 VIEW에서의 CTE 지원 구현: 스칼라 서브쿼리를 평가하는 동안 쿼리 매개변수를 사용할 수 있도록 업데이트했습니다. #48065 (SmitaRKulkarni).
- 큰 정수형
(U)Int128/(U)Int256, 임의의 키 타입을 사용하는Map맵, 그리고 3과 6뿐만 아니라 임의의 정밀도를 지원하는DateTime64를 지원합니다. #48119 (Kruglov Pavel). - 행 입력 형식에서 알 수 없는 enum 값으로 인한 오류를 건너뛸 수 있도록 허용합니다. #48133 (Alexey Milovidov).
빌드/테스트/패키징 개선
- ClickHouse가 이제
C++23으로 빌드됩니다. #47424 (Robert Schulze). - AST Fuzzer에서
EXPLAIN쿼리를 퍼징합니다. #47803 #47852 (flynn). - 스트레스 테스트와 자동 하위 호환성 검사(현재는 Upgrade check)를 분리했습니다. #44879 (Kruglov Pavel).
- 일부 잘못된 보안 보고를 줄이기 위해 Docker용 Ubuntu 이미지가 업데이트되었습니다. #46784 (Julio Jimenez). 참고: ClickHouse는 의존성이 없으며 Docker를 필요로 하지 않습니다.
- "curl | sh" 방식으로 ClickHouse를 다운로드할 때, 기존
clickhouse다운로드를 제거할 수 있도록 프롬프트를 추가했습니다. 프롬프트 메시지는 「ClickHouse binary clickhouse already exists. Overwrite? [y/N]」입니다. #46859 (Dan Roscigno). - 오래된 배포판(예: Amazon Linux 2)과 ARM에서 서버 시작 시 glibc 2.28 심볼을 찾을 수 없어 발생하던 오류를 수정했습니다. #47008 (Robert Schulze).
- clang 16에 대비했습니다. #47027 (Amos Bird).
- ARM에서 오래된 glibc로도 ClickHouse를 실행할 수 있는지 확인하는 CI 체크를 추가했습니다. #47063 (Robert Schulze).
NDEBUG매크로의 잘못된 사용을 방지하기 위한 스타일 체크를 추가했습니다. #47699 (Alexey Milovidov).- 빌드 속도를 약간 향상했습니다. #47714 (Alexey Milovidov).
vectorscan을 5.4.9로 업데이트했습니다. #47955 (Robert Schulze).- Apache Arrow의 치명적 로깅이 프로세스를 종료(abort)하지 않도록 보장하는 단위 테스트를 추가했습니다. 이는 ClickHouse/arrow#16의 변경 사항을 포괄합니다. #47958 (Arthur Passos).
- 네이티브 macOS 디버그 서버 빌드가 다시 시작될 수 있도록 기능을 복원했습니다. #48050 (Robert Schulze). 참고: 이 변경 사항은 개발에만 관련이 있으며, ClickHouse 공식 빌드는 크로스 컴파일로 수행됩니다.
버그 수정 (공식 안정 버전에서 사용자가 인지할 수 있는 잘못된 동작)
- 포맷 파서가 리셋되는 문제를 수정하고,
Kafka에서 잘못된 메시지 처리를 검증하는 테스트를 추가합니다 #45693 (Kruglov Pavel). - Keeper의 데이터 크기 계산을 수정했습니다 #46086 (Antonio Andelic).
ReplicatedMergeTree테이블과Atomic데이터베이스에서DROP TABLE쿼리를 자동 재시도하는 기능의 버그를 수정했습니다. 드물게는DROP TABLE실행 중 ZooKeeper 세션이 만료되고, 동시에 ZooKeeper 내 동일한 경로에 새로운 복제된 테이블이 생성되는 경우Can't get data for node /zk_path/log_pointer및The specified key does not exist오류가 발생할 수 있었습니다. #46384 (Alexander Tokmakov).- 쿼리를 정규화하는 과정에서 발생한 잘못된 별칭 재귀로 인해 일부 쿼리가 실행되지 못하던 문제를 수정했습니다. #46609 (Raúl Marín).
- 바이너리 형식에서 IPv4/IPv6 직렬화 및 역직렬화를 수정했습니다 #46616 (Kruglov Pavel).
- ActionsDAG: 최적화 시
and연산의 결과가 변경되지 않도록 수정 #46653 (Salvatore Mesoraca). - 클라이언트가 종료될 때 쿼리 취소 처리를 개선함 #46681 (Alexander Tokmakov).
- 집계 최적화에서 산술 연산을 수정합니다 #46705 (Duc Canh Le).
JSONEachRow스키마 추론 시 발생할 수 있는clickhouse-local의 비정상 종료를 수정합니다. #46731 (Kruglov Pavel).- 만료된 role 변경 시 발생하던 문제를 수정했습니다 #46772 (Vitaly Baranov).
- 여러 단계에서 결합되는 PREWHERE 컬럼 누적 문제를 수정 #46785 (Alexander Gololobov).
- HTTP read buffer에서 파일 크기를 가져올 때 초기 범위를 사용하도록 했습니다. 이 변경이 없으면 일부 원격 파일을 처리하지 못했습니다. #46824 (Antonio Andelic).
- URL 테이블 사용 시 잘못 표시되던 진행률 표시줄을 수정했습니다 #46830 (Antonio Andelic).
maxIntersections함수에서 발생한 MSan 리포트를 수정합니다. #46847 (Alexey Milovidov).Map데이터 타입의 버그를 수정했습니다 #46856 (Alexey Milovidov).- LIKE 패턴에 따옴표로 둘러싸인, 따옴표로 인용할 수 없는 문자가 포함된 경우 일부 LIKE 검색에서 잘못된 결과가 반환되던 문제를 수정합니다 #46875 (Robert Schulze).
- 수정 - WITH FILL 사용 시 Filling Transform이 비어 있는 블록을 처리할 때 비정상 종료가 발생하던 문제를 수정했습니다 #46897 (Yakov Olkhovskiy).
- JSON에서 문자열에서 날짜(date)와 정수(int)를 추론하던 동작을 수정했습니다 #46972 (Kruglov Pavel).
- fetch 중 zero-copy 복제에서의 디스크 선택 버그를 수정합니다 #47010 (alesapin).
- systemd 서비스 정의에 있는 오타를 수정했습니다 #47051 (Palash Goel).
- CROSS JOIN 및 algorithm = auto 조합에서 발생하던 NOT_IMPLEMENTED 오류를 수정합니다 #47068 (Vladimir C).
- 실험적 기능인 'InMemory' 모드로 'part_type'이 설정되었을 때 'ReplicatedMergeTree' 테이블에 비슷한 데이터 두 개를 삽입하지 못하던 문제를 수정합니다. #47121 (liding1992).
- 외부 딕셔너리 / library-bridge: 오류 "unknown library method 'extDict_libClone'"를 수정했습니다. #47136 (alex filatov).
- LIMIT가 포함된 grace hash join에서 발생하는 race condition을 수정 #47153 (Vladimir C).
- 구체 컬럼의 PREWHERE 지원 수정 #47154 (Azat Khuzhin).
- Query Status에서 발생할 수 있는 교착 상태를 수정합니다 #47161 (Kruglov Pavel).
- 동일한
Join테이블에 대해 INSERT SELECT를 금지하여 데드락이 발생할 수 있는 문제를 방지함 #47260 (Vladimir C). min_age_to_force_merge_seconds에 의해 수행되는 머지에서 이미 머지된 파티션을 건너뜁니다 #47303 (Antonio Andelic).- find_first_symbols를 수정하여 find_first_not_symbols가 기대한 대로 동작하도록 했습니다 #47304 (Arthur Passos).
- CSV에서 큰 수 추론 오류 수정 #47410 (Kruglov Pavel).
- 별칭(alias)이 있는 식에 대해 logical expression optimizer를 비활성화합니다. #47451 (Nikolai Kochetov).
decodeURLComponent의 오류를 수정했습니다. #47457 (Alexey Milovidov).- PROJECTION이 포함된 EXPLAIN 그래프를 수정했습니다. #47473 (flynn).
- 쿼리 매개변수를 수정했습니다 #47488 (Alexey Milovidov).
- 매개변수화된 뷰: 버그를 수정했습니다. #47495 (SmitaRKulkarni).
- 데이터 포맷용 Fuzzer와 그에 따른 수정. #47519 (Alexey Milovidov).
DateTime64의 단조성(monotonicity) 검사를 수정했습니다 #47526 (Antonio Andelic).- Nullable LowCardinality 컬럼에서 발생하는 "block structure mismatch" 오류를 수정했습니다 #47537 (Nikolai Kochetov).
- Apache Parquet 버그를 올바르게 수정. #45878 #47538 (Kruglov Pavel).
- 문서 크기가 잘못되었을 때
BSONEachRow의 병렬 파싱을 수정했습니다 #47540 (Kruglov Pavel). SYSTEM FLUSH DISTRIBUTED실행 시system.distribution_queue에서 발생한 에러를 보존하도록 함 #47541 (Azat Khuzhin).BSONEachRow포맷에서 중복 컬럼을 검사하도록 했습니다 #47609 (Kruglov Pavel).- move 작업 중 zero copy lock 대기 동작을 수정 #47631 (alesapin).
- 파티션별 집계가 잘못되던 문제를 수정합니다 #47634 (Nikita Taranov).
BSONEachRow포맷에서 튜플을 배열로 직렬화할 때 발생하던 버그를 수정합니다. #47690 (Kruglov Pavel).polygonsSymDifferenceCartesian에서 발생하던 크래시를 수정 #47702 (pufit).zlib및gzip으로 압축된 파일을File스토리지에서 읽는 동작을 수정했습니다 #47796 (Anton Popov).- PostgreSQL에서 빈 쿼리 감지를 개선했습니다(pgx Go 드라이버용). #47854 (Azat Khuzhin).
- LowCardinality 타입에서 DateTime 단조성 검사를 수정했습니다 #47860 (Antonio Andelic).
- RESTORE ASYNC에는 backup_threads가 아니라 restore_threads를 사용하도록 했습니다 #47861 (Azat Khuzhin).
- 프로젝션을 포함하는 ReplicatedMergeTree에서의 DROP COLUMN 문제를 수정합니다 #47883 (Antonio Andelic).
- 복제된 데이터베이스(Replicated database) 복구 관련 수정 #47901 (Alexander Tokmakov).
- HTTP에서 과도하게 상세한 경고 메시지에 대한 핫픽스 #47903 (Alexander Tokmakov).
catboostEvaluate에서 "Field value too long" 오류를 수정했습니다 #47970 (Robert Schulze).- #36971 수정: Watchdog: 자식 프로세스가 종료되면 0이 아닌 코드로 종료하도록 변경했습니다 #47973 (Коренберг Марк).
- "index file
cidxis unexpectedly long" 문제 수정. #48010 (SmitaRKulkarni). - MaterializedPostgreSQL 쿼리가 attributes(replica-identity)를 올바르게 가져오도록 수정했습니다. #48015 (Solomatov Sergei).
- parseDateTime(): 정의되지 않은 동작(UB, 부호 있는 정수 오버플로우) 수정 #48019 (Robert Schulze).
- Avro Record에 고유한 이름을 사용하여 스키마가 재사용되지 않도록 했습니다 #48057 (Kruglov Pavel).
- Keeper에서 TCP/HTTP 소켓 타임아웃이 올바르게 설정되도록 수정함 #48108 (Antonio Andelic).
Avro포맷에서 null 포인터에 대해 멤버를 호출할 수 있었던 문제를 수정합니다 #48184 (Kruglov Pavel).
ClickHouse 23.2 릴리스, 2023-02-23. 발표 자료, 영상
이전 버전과의 비호환 변경
- 함수 "toDayOfWeek()" (별칭: "DAYOFWEEK")에 주가 월요일 또는 일요일 중 어느 요일부터 시작하는지와 카운트가 0 또는 1부터 시작하는지를 인코딩하는 mode 인자를 추가했습니다. 다른 날짜/시간 함수들과의 일관성을 위해 mode 인자는 time 인자와 time zone 인자 사이에 삽입되었습니다. 이로 인해 기존에 사용되던 (이전에 문서화되지 않았던) 2-인자 문법 "toDayOfWeek(time, time_zone)"은 더 이상 동작하지 않습니다. 수정 방법은 함수를 "toDayOfWeek(time, 0, time_zone)"으로 다시 작성하는 것입니다. #45233 (Robert Schulze).
- 설정
max_query_cache_size를filesystem_cache_max_download_size로 이름을 변경했습니다. #45614 (Kseniia Sumarokova). default사용자는 기본적으로 접근 유형SHOW NAMED COLLECTION에 대한 권한을 가지지 않습니다(예:default사용자는 더 이상 이전과 같이 다른 사용자에게 ALL 권한을 부여할 수 없으므로, 이 PR은 이전 버전과 호환되지 않습니다). #46010 (Kseniia Sumarokova).- SETTINGS 절이 FORMAT 절보다 먼저 지정된 경우, 해당 설정이 포맷팅에도 적용됩니다. #46003 (Azat Khuzhin).
- 기본적으로 꺼져 있던 설정
materialized_postgresql_allow_automatic_update에 대한 지원을 제거했습니다. #46106 (Kseniia Sumarokova). - 실제 데이터셋에서
countDigits의 성능을 약간 개선했습니다. 이를 통해 #44518 이슈가 해결되었습니다. 이전 버전에서는countDigits(0)이0을 반환했으나, 이제는1을 반환하며, 이는 더 올바르고 기존 문서를 따르는 동작입니다. #46187 (Alexey Milovidov). - 코덱 "Delta" 또는 "DoubleDelta" 이후에 코덱 "Gorilla" 또는 "FPC"를 조합하여 압축하는 새로운 컬럼을 생성하는 것은 허용되지 않습니다. 이는 설정 "allow_suspicious_codecs = true"를 사용해 우회할 수 있습니다. #45652 (Robert Schulze).
새로운 기능
- S3에 있는 Iceberg 테이블 저장소에 접근할 수 있도록
StorageIceberg및 테이블 함수iceberg를 추가합니다. #45384 (flynn). - 스토리지 구성을
storage_policy대신SETTINGS disk = '<disk_name>'로 할 수 있고,SETTINGS disk = disk(type=s3, ...)로 디스크를 명시적으로 생성하여 설정할 수 있습니다. #41976 (Kseniia Sumarokova). system.part_log에서ProfileEvents카운터를 확인할 수 있도록 했습니다. #38614 (Bharat Nallan).- 기존
ReplacingMergeTree엔진을 확장하여 중복된 레코드 삽입을 허용하도록 했습니다. 하나의 MergeTree 엔진에서ReplacingMergeTree와CollapsingMergeTree두 엔진의 장점을 모두 활용합니다. 삭제된 데이터는 쿼리 시 반환되지 않지만, 디스크에서도 제거되지는 않습니다. #41005 (youennL-cs). generateULID함수를 추가합니다. #36536을(를) 해결합니다. #44662 (Nikolay Degterinsky).- 각 두 컬럼에 대해 계산하는
corrMatrix집계 함수를 추가합니다. 또한 집계 함수covarSamp및covarPop이corr와 유사하므로, 이와 함께covarSampMatrix,covarPopMatrix도 추가합니다. @alexey-milovidov가 #44587를 닫습니다. #44680 (FFFFFFFHHHHHHH). - 배열을 무작위로 섞기 위한 arrayShuffle FUNCTION을 도입합니다. #45271 (Joanna Hulboj).
- Arrow에서
FIXED_SIZE_BINARY타입과Parquet에서FIXED_LENGTH_BYTE_ARRAY타입을 지원하고, 이를FixedString에 매핑합니다. FixedString의 기본 출력 타입을 제어할 수 있도록output_format_parquet_fixed_string_as_fixed_byte_array/output_format_arrow_fixed_string_as_fixed_byte_array설정을 추가합니다. #45326 이슈를 해결합니다. #45340 (Kruglov Pavel). - system.replication_queue에 새로운 컬럼
last_exception_time을 추가합니다. #45457 (Frank Chen). - SipHash128에서 사용자 정의 키/시드를 허용하는 새로운 함수 두 개가 추가되었습니다. #45513 (Salvatore Mesoraca).
- 테이블 함수
format에 대해 세 개의 인자를 받는 버전을 허용합니다. #45808 이슈를 닫습니다. #45873 (FFFFFFFHHHHHHH). - 'x','w','S'에 대한
JodaTime형식 지원을 추가했습니다. https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html을 참고하십시오. #46073 (zk_kiger). - 윈도우 함수(window function)
ntile을(를) 지원합니다. (lgbo). - 설정
final을 추가하면 모든 테이블에FINAL수정자가 암시적으로 적용됩니다. #40945 (Arthur Passos). arrayPartialSort및arrayPartialReverseSort함수를 추가했습니다. #46296 (Joanna Hulboj).- 새로운 HTTP 매개변수
client_protocol_version을 사용하면 Native 형식을 사용하는 HTTP 응답에 대해 클라이언트 프로토콜 버전을 설정할 수 있습니다. #40397. #46360 (Geoff Genz). - Spark 함수
REGEXP_EXTRACT와의 호환성을 위해 새 함수regexpExtract를 추가합니다. 기존 함수extract와 유사합니다. #46469 (李扬). - 새로운 함수
JSONArrayLength를 추가하여 최상위 JSON 배열에 있는 요소의 개수를 반환합니다. 입력된 JSON 문자열이 올바르지 않은 경우 이 함수는 NULL을 반환합니다. #46631 (李扬).
성능 향상
- 도입된 로직은 PREWHERE 조건이 여러 조건의 논리곱(AND)으로 구성되어 있을 때(cond1 AND cond2 AND ... ) 동작합니다. 이 로직은 동일한 컬럼을 읽어야 하는 조건들을 단계별로 그룹화합니다. 각 단계 이후에는 전체 조건의 해당 부분이 계산되고, 그 결과 행이 필터링될 수 있습니다. 이를 통해 다음 단계에서 더 적은 행만 읽게 되어 IO 대역폭을 절약하고 계산량을 줄일 수 있습니다. 이 로직은 현재 기본적으로 비활성화되어 있습니다. 회귀 문제가 없다는 것이 확인되면 향후 릴리스에서 기본적으로 활성화될 예정이므로, 테스트에 적극적으로 활용하기를 권장합니다. 이 로직은 2개의 설정으로 제어할 수 있습니다: "enable_multiple_prewhere_read_steps" 및 "move_all_conditions_to_prewhere". #46140 (Alexander Gololobov).
- 테이블 파티션 키와 GROUP BY 키가 호환되는 경우 파티션을 서로 독립적으로 집계할 수 있는 옵션이 추가되었습니다.
allow_aggregate_partitions_independently설정으로 제어됩니다. 적용 가능한 경우가 제한적이므로 기본적으로 비활성화되어 있습니다(문서를 참고하십시오). #45364 (Nikita Taranov). - Compact 형식의 파트에서 수직 병합(Vertical merge) 알고리즘을 사용할 수 있게 합니다. 이를 통해 ClickHouse 서버는 백그라운드 작업에 훨씬 적은 메모리를 사용합니다. 이로써 #46084가 해결됩니다. #45681 #46282 (Anton Popov).
- 배치 리더를 사용해
Parquet리더를 최적화합니다. #45878 (LiuNeng). - 비동기 Linux io_uring 서브시스템을 기반으로 하는 새로운
local_filesystem_read_method방식io_uring을 추가하여, 기본pread방식과 비교해 거의 모든 경우에 읽기 성능을 향상합니다. #38456 (Saulius Valatka). - 논리적으로 동등한 경우, 인자로
if표현식을 사용하는 집계 함수(aggregate function)를 재작성하도록 했습니다. 예를 들어avg(if(cond, col, null))는 avgIf(cond, col)로 다시 작성할 수 있습니다. 이는 성능 향상에 도움이 됩니다. #44730 (李扬). - avx512 명령어를 사용하여 lower/upper 함수의 성능을 개선합니다. #37894 (yaqi-zhao).
- 32개 이상의 코어를 갖추고 SMT가 비활성화된 시스템(예: BIOS에서 Hyper-Threading을 비활성화한 경우)에서 ClickHouse가 코어의 절반만 사용하던 제한을 제거합니다. #44973 (Robert Schulze).
- 함수
multiIf를 열 지향 방식으로 실행하도록 개선하여 성능을 향상시키고, 실행 속도를 2.3배 높였습니다. #45296 (李扬). - 검색 문자열이 비어 있을 때
position함수에 대한 fast path를 추가합니다. #45382 (李扬). query_plan_remove_redundant_sorting최적화를 기본적으로 활성화했습니다. 이 최적화는 #45420에서 구현되었습니다. #45567 (Igor Nikonov).- HTTP 인터페이스를 사용하는 대용량 쿼리의 성능을 향상하기 위해 HTTP Transfer Encoding 청크 크기를 늘렸습니다. #45593 (Geoff Genz).
- 많은 수의
Array/Map/Nested컬럼을 포함하는 테이블을 읽는 짧은SELECT쿼리의 성능을 개선했습니다. #45630 (Anton Popov). - 큰 정수 및 Decimal 타입의 필터링 성능을 개선합니다. #45949 (李扬).
- 이 변경으로 ColumnNullable(UInt8)에서 필터를 추출하는 데 드는 오버헤드를 효과적으로 줄이고 전체 쿼리 성능을 향상시킬 수 있습니다. 이 변경의 영향을 평가하기 위해 TPC-H benchmark를 사용하되, 컬럼 타입을 널 비허용(non-nullable)에서 널 허용(nullable)으로 수정하고, 성능 지표로 쿼리의 QPS를 측정했습니다. #45962 (Zhiguo Zhou).
_part및_partition_id가상 컬럼의 타입을LowCardinality(String)으로 지정했습니다. #45964를 해결했습니다. #45975 (flynn).- 스케일이 변하지 않을 때 Decimal 변환의 성능을 개선합니다. #46095 (Alexey Milovidov).
- 데이터 읽기 시 프리페칭을 더 많이 수행할 수 있도록 했습니다. #46168 (Kseniia Sumarokova).
arrayExists(x -> x = 1, arr)를has(arr, 1)로 변경하여 성능을 1.34배 향상합니다. #46188 (李扬).- 원격이 아닌 로컬 디스크에서 수직 병합(vertical merge) 수행 시 발생하던 과도한 메모리 사용 문제를 수정했습니다. 원격 디스크에 대해서는
max_insert_delayed_streams_for_parallel_write설정을 따르도록 수정했습니다. #46275 (Nikolai Kochetov). - zstd를 v1.5.4로 업데이트합니다. 성능과 압축률이 약간 향상되었습니다. 서로 다른 버전의 ClickHouse로 레플리카를 운영하는 경우
Data after merge/mutation is not byte-identical to data on another replicas.와 같은 적절한 오류 메시지와 그에 대한 설명이 표시될 수 있습니다. 이러한 메시지는 정상적인 동작이며, 걱정하지 않아도 됩니다. #46280 (Raúl Marín). - #39737로 인한 성능 저하 문제를 해결합니다. #46309 (Alexey Milovidov).
replicas_status핸들은 복제 큐가 매우 커도 신속하게 응답합니다. #46310 (Alexey Milovidov).sum집계 함수, 단항 산술 함수, 비교 함수에 AVX-512 지원을 추가합니다. #37870 (zhao zhou).- 최대 성능 향상을 달성하기 위해 마크 분포와 전체 읽기 작업 조정을 담당하는 코드를 재작성했습니다. 이로써 #34527가 해결되었습니다. #43772 (Nikita Mikhaylov).
- 쿼리(서브쿼리)에서 불필요한 DISTINCT 절을 제거합니다. 쿼리 플랜 단계에서 구현되었으며, DISTINCT 절과 관련해
optimize_duplicate_order_by_and_distinct와 유사한 최적화를 수행합니다.query_plan_remove_redundant_distinctSETTING을 통해 활성화할 수 있습니다. #42648 및 #44176과 관련이 있습니다. (Igor Nikonov). - 몇 가지 쿼리 재작성 최적화입니다:
sumIf(123, cond) -> 123 * countIf(1, cond),sum(if(cond, 123, 0)) -> 123 * countIf(cond),sum(if(cond, 0, 123)) -> 123 * countIf(not(cond))#44728 (李扬). - 메모리 제약이 있는 머지 및 정렬 순서 유지 집계와 최상위 쿼리 플랜 간의 상호 작용 방식을 개선했습니다. 이전에는 실제로 필요하지 않은 경우에도 일부 상황에서 AIO에 대해 명시적으로 정렬을 수행하도록 되돌리는 경우가 있었습니다. #45892 (Nikita Taranov).
- 동시 병합은 공정하고 기아 현상이 없는 동작을 보장하기 위해 기본적으로 라운드 로빈 방식으로 스케줄링됩니다. 이전에는 심하게 과부하된 세그먼트에서 엄격한 우선순위 스케줄링을 사용했기 때문에, 큰 병합 작업이 더 작은 병합 작업에 밀려 기아 상태에 빠질 수 있었습니다. 스케줄링 알고리즘(
round_robin또는shortest_task_first)을 선택할 수 있도록background_merges_mutations_scheduling_policy서버 구성 옵션이 추가되었습니다. #46247 (Sergei Trifonov).
개선 사항
- ZooKeeper 세션 손실이 발생한 경우 기본값으로 INSERT 재시도를 활성화합니다. 이미 운영 환경에서 사용 중입니다. #46308 (Alexey Milovidov).
- 네임드 튜플에서 JSON 객체의 알 수 없는 키를 무시할 수 있도록 했습니다(
input_format_json_ignore_unknown_keys_in_named_tuple). #45678 (Azat Khuzhin). final이 포함된 쿼리에서 정렬 키 표현식을prewhere로 이동하여where절을 최적화할 수 있도록 지원합니다. #38893. #38950 (hexiaoting).- 백업용 새 메트릭인 num_processed_files 및 processed_files_size를 추가하여 실제로 처리된 파일 관련 정보를 나타내도록 했습니다. #42244 (Aleksandr).
- 서버 간 DNS 오류가 발생했을 때 재시도 기능을 추가했습니다. #43179 (Anton Kozlov).
- Keeper 개선: 디스크에 공간을 미리 할당하여 예기치 않은 out-of-space 문제를 방지합니다. Keeper의 Raft 로그 파일 최대 크기를 지정하는 설정
max_log_file_size를 도입했습니다. #44370 (Antonio Andelic). - 레플리카가 읽기 전용인 경우 replica delay API 로직의 동작을 최적화합니다. #45148 (mateng915).
- 빈 비밀번호가 잘못된 경우
clickhouse-client에서 비밀번호를 대화식으로 요청하도록 했습니다. #46702를 닫았습니다. #46730 (Nikolay Degterinsky). - Float* 타입이 아닌 컬럼의
Gorilla압축을 의심스러운 설정으로 표시합니다. #45376 (Robert Schulze). postpone_reason컬럼에 머지를 수행 중인 레플리카의 이름을 표시합니다. #45458 (Frank Chen).- part_log에 예외 스택 트레이스를 저장합니다. #45459 (Frank Chen).
regexp_tree딕셔너리가 개선되어 이제 https://github.com/ua-parser/uap-core와 호환됩니다. #45631 (Han Fei).SYSTEM SYNC REPLICA확인을 업데이트하여 #45508 #45648을(를) 해결했습니다. (SmitaRKulkarni).replication_alter_partitions_sync설정 이름을alter_sync로 변경했습니다. #45659 (Antonio Andelic).generateRandom테이블 함수와 엔진은 이제LowCardinality데이터 타입을 지원합니다. 이는 테스트에 유용하며, 예를 들어INSERT INTO table SELECT * FROM generateRandom() LIMIT 1000처럼 작성할 수 있습니다. 이는 #45590를 디버깅하는 데 필요합니다. #45661 (Alexey Milovidov).- 실험적 쿼리 결과 캐시는 이제 더 모듈식으로 구성할 수 있는 설정을 제공합니다. #45679 (Robert Schulze).
- "query result cache"를 "query cache"로 이름 변경했습니다. #45682 (Robert Schulze).
SYSTEM SYNC FILE CACHE명령이 추가되었습니다. 이 명령은sync시스템 호출을 수행합니다. #8921. #45685 (DR).- 새로운 S3 설정
allow_head_object_request를 추가합니다. 이 PR은 https://github.com/ClickHouse/ClickHouse/pull/45288 에서 도입된HeadObject대신GetObjectAttributes요청을 사용하도록 하는 기능을 선택 사항으로 만들며(기본적으로 비활성화됨), 이를 제공합니다. #45701 (Vitaly Baranov). - 연결 이름을 기준으로 연결 설정을 덮어쓸 수 있는 기능을 추가했습니다(이제 각 연결마다 비밀번호를 따로 저장할 필요가 없고, 모든 설정을
~/.clickhouse-client/config.xml에 모아 둘 수 있으며, 각 연결에 대해 서로 다른 history 파일을 사용할 수도 있어 유용합니다). #45715 (Azat Khuzhin). - Arrow 포맷: duration 타입을 지원합니다. #45669를 해결합니다. #45750 (flynn).
- 쿼리 캐시의 로깅을 확장하여 캐싱 동작 분석을 개선합니다. #45751 (Robert Schulze).
- 쿼리 캐시의 서버 수준 설정을 이제 런타임에도 재구성할 수 있게 되었습니다. #45758 (Robert Schulze).
- 테이블 함수의 인수가 named collection으로 지정된 경우 로그에서 비밀번호를 숨깁니다. #45774 (Vitaly Baranov).
- 내부 S3 클라이언트를 개선하여 서로 다른 유형의 URL에 대해 리전과 리다이렉션을 올바르게 유추하도록 했습니다. #45783 (Antonio Andelic).
- generateRandom 함수에서 맵(Map), IPv4 및 IPv6 타입을 지원하도록 했습니다. 주로 테스트에 유용합니다. #45785 (Raúl Marín).
- IP 타입에서 empty/notEmpty 함수를 지원합니다. #45799 (Yakov Olkhovskiy).
- 컬럼
num_processed_files는 두 개의 컬럼으로 분리되었습니다:num_files(BACKUP용)과files_read(RESTORE용). 또한 컬럼processed_files_size는 두 개의 컬럼으로 분리되었습니다:total_size(BACKUP용)와bytes_read(RESTORE용). #45800 (Vitaly Baranov). - MySQL 호환성을 위해
SHOW ENGINES쿼리 지원을 추가했습니다. #45859 (Filatenkov Artur). - 쿼리 난독화기의 동작 방식이 개선되었습니다. #45867 (Raúl Marín).
- 경계값 65535(2149-06-06)에 대한 Date 타입으로의 변환 동작을 개선했습니다. #46042 #45914 (Joanna Hulboj).
DROP TABLE수행 시 참조 종속성을 검사하는 설정check_referential_table_dependencies를 추가했습니다. 이 PR은 #38326을 해결합니다. #45936 (Vitaly Baranov).Null인자를 받는 경우tupleElement가Null을 반환하도록 수정했습니다. #45894 이슈를 해결합니다. #45952 (flynn).- S3 와일드카드와 일치하는 파일이 없을 경우 오류를 반환하도록 했습니다. #45587 이슈를 닫습니다. #45957 (chen).
- 클러스터 상태 데이터를 사용하여 동시 실행 중인 백업/복구 작업을 확인합니다. #45982 (SmitaRKulkarni).
- ClickHouse Client: 대소문자를 올바르게 무시하고 SQL 쿼리 검색에 보다 적합한 알고리즘을 사용하는 퍼지 검색에 대해 "exact" 매칭을 사용합니다. #46000 (Azat Khuzhin).
- 잘못된 CREATE View 구문인
CREATE View X TO Y AS SELECT을(를) 금지했습니다. #4331 문제를 해결했습니다. #46043 (flynn). Log스토리지 계열에서storage_policy설정을 지원합니다. #43421를 해결합니다. #46044 (flynn).- 결과가 비어 있을 때
JSONColumns포맷을 개선했습니다. #46024를 해결했습니다. #46053 (flynn). - SipHash128에 대한 참조 구현을 추가했습니다. #46065 (Salvatore Mesoraca).
- mmap을 사용하여 할당에 걸린 시간과 바이트 수를 기록하는 새로운 메트릭을 추가합니다. #46068 (李扬).
- 현재
leftPad,rightPad,leftPadUTF8,rightPadUTF8와 같은 함수의 두 번째 인수인length는 UInt8|16|32|64|128|256 중 하나여야 합니다. 이는 ClickHouse 사용자에게 지나치게 제한적일 뿐만 아니라,arrayResize,substring등 다른 유사한 함수들과도 일관되지 않습니다. #46103 (李扬). - 디버그 빌드에서 통계 결과가 NaN인 경우
welchTTest함수의 어설션을 수정했습니다. 다른 유사한 함수들과 동작을 통일했습니다. 이전 동작이 불편했기 때문에 예외를 던지는 대신 NaN을 반환하도록studentTTest의 동작을 변경했습니다. 이 변경으로 #41176 및 #42162 이슈가 해결되었습니다. #46141 (Alexey Milovidov). - 큰 정수와 ORDER BY WITH FILL의 사용성을 더욱 편리하게 개선했습니다. 큰 정수(128비트 및 256비트)에 대해 ORDER BY WITH FILL을 사용할 때 시작점과 끝점에 일반 정수를 사용할 수 있도록 허용했습니다. 시작점 또는 끝점이 음수인 큰 정수에 대해 잘못된 결과가 반환되던 문제를 수정했습니다. 이 변경으로 #16733이(가) 해결되었습니다. #46152 (Alexey Milovidov).
system.tables에parts,active_parts,total_marks컬럼을 추가했습니다(관련 이슈). #46161 (attack204).- 함수 "multi[Fuzzy]Match(Any|AnyIndex|AllIndices}"는 이제 vectorscan에서 매우 느리게 실행될 것으로 예상되는 정규식을 거부합니다. #46167 (Robert Schulze).
insert_null_as_default가 활성화되어 있고 컬럼에 기본값이 정의되어 있지 않은 경우, 컬럼 타입의 기본값이 사용됩니다. 또한 이 PR은 LowCardinality 컬럼에서 null 값에 대해 기본값이 사용되도록 수정합니다. #46171 (Kruglov Pavel).- S3 클라이언트에는 명시적으로 구성된 액세스 키를 우선적으로 사용합니다.
use_environment_credentials가true로 설정되어 있고, 사용자가 쿼리 또는 설정을 통해 액세스 키를 제공한 경우에는 환경 변수에서 가져온 키 대신 해당 키가 사용됩니다. #46191 (Antonio Andelic). - MySQL의 SQL 방언과의 호환성을 향상하기 위해 함수 "formatDateTime()"에 대한 별칭 "DATE_FORMAT()"을 추가하고, 함수
formatDateTime에서 치환자 "a", "b", "c", "h", "i", "k", "l", "r", "s", "W"를 지원하도록 확장합니다. ### 사용자 대상 변경 사항에 대한 문서 항목 사용자용 짧은 설명:DATE_FORMAT은formatDateTime의 별칭입니다. 주어진 형식 문자열에 따라 시간 값을 포맷합니다. 형식은 상수 표현식이므로, 하나의 결과 컬럼에 대해 여러 형식을 사용할 수 없습니다. (formatDateTime에 대한 링크를 제공합니다). #46302 (Jake Bamrah). - 병렬 레플리카용(
s3Cluster및MergeTree테이블) 콜백 작업에 대한ProfileEvents및CurrentMetrics를 추가합니다. #46313 (Alexey Milovidov). KeeperMap스토리지 엔진을 사용하는 테이블에서DELETE및UPDATE연산을 지원하도록 했습니다. #46330 (Antonio Andelic).RENAME쿼리를 쿼리 매개변수와 함께 사용할 수 있도록 허용합니다. #45778 문제를 해결합니다. #46407 (Nikolay Degterinsky).- REPLACE 변환기를 사용하는 매개변수화된
SELECT쿼리 관련 문제를 수정합니다. #33002 이슈를 해결합니다. #46420 (Nikolay Degterinsky). - 임시/외부 테이블에 사용되는 내부 데이터베이스를 비동기 메트릭 "NumberOfDatabases"를 계산할 때에서 제외합니다. 이를 통해 시스템 테이블 "system.databases"와의 동작이 일치하도록 합니다. #46435 (Robert Schulze).
distribution_queue테이블에last_exception_time컬럼을 추가했습니다. #46564 (Aleksandr).- 매개변수화된 뷰에서 IN 절에 매개변수 사용을 지원합니다. #46583 (SmitaRKulkarni).
- 서버 시작 시 이름이 지정된 컬렉션을 로드하지 않고, 첫 액세스 시점에 로드하도록 변경했습니다. #46607 (Kseniia Sumarokova).
빌드/테스트/패키징 개선
- LLVM 런타임으로 구현된 GWP-ASan을 도입했습니다. 이 변경으로 #27039가 해결되었습니다. #45226 (Han Fei).
- 테스트를 덜 안정적이고 의도적으로 더 불안정(flaky)하게 만들기 위해, 테스트에서 MergeTree 설정에 무작위성을 추가했습니다. #38983 (Anton Popov).
- PowerPC에서 HDFS 지원을 활성화했고, 이를 통해 다음 기능 테스트 02113_hdfs_assert.sh, 02244_hdfs_cluster.sql, 02368_cancel_write_into_hdfs.sh를 수정하는 데 도움이 됩니다. #44949 (MeenaRenganathan22).
- clickhouse-keeper용 systemd.service 파일을 추가했습니다. #44293를 해결합니다. #45568 (Mikhail f. Shiryaev).
- ClickHouse의 poco 포크를 "contrib/"에서 "base/poco/"로 이동했습니다. #46075 (Robert Schulze).
- 자식 프로세스를 재시작하기 위한
clickhouse-watchdog옵션을 추가했습니다. 실질적인 활용도는 크지 않습니다. #46312 (Alexey Milovidov). - 환경 변수
CLICKHOUSE_DOCKER_RESTART_ON_EXIT가 1로 설정되어 있으면, Docker 컨테이너는 첫 번째 프로세스로 실행하는 대신clickhouse-server를 자식 프로세스로 실행하고, 종료되면 이를 다시 시작합니다. #46391 (Alexey Milovidov). - systemd 서비스 파일을 수정했습니다. #46461 (SuperDJY).
- ClickHouse를 빌드하는 데 필요한 최소 Clang 버전을 12에서 15로 올렸습니다. #46710 (Robert Schulze).
- Intel QPL을 v0.3.0에서 v1.0.0으로 업그레이드했습니다. 또한 libaccel-config를 빌드하고 QPL 라이브러리에 동적으로가 아니라 정적으로 링크했습니다. #45809 (jasperzhu).
버그 수정(공식 안정 버전에서 사용자가 인지할 수 있는 오동작)
StorageRabbitMQ에서 데이터를rabbitmq_flush_interval_ms또는rabbitmq_max_block_size설정에 따라 정확히 플러시합니다. #42389을(를) 해결합니다. #45160을(를) 해결합니다. #44404 (Kseniia Sumarokova).sparkBar함수에서 렌더링할 때PODArray를 사용하여 메모리 사용량을 더 잘 제어할 수 있도록 했습니다. #44467 이슈를 닫았습니다. #44489 (Duc Canh Le).- quantilesExactExclusive, quantilesExactInclusive 함수가 정렬되지 않은 배열 요소를 반환하던 문제를 수정합니다. #45379 (wujunfu).
- OpenTelemetry가 활성화되었을 때
HTTPHandler에서 처리되지 않은 예외가 발생하는 문제를 수정했습니다. #45456 (Frank Chen). - 8자리 숫자를 Date 형식으로 추론하지 않습니다. 잘못된 데이터가 읽히는 문제를 유발할 수 있습니다. #45581 (Kruglov Pavel).
odbc_bridge_use_connection_poolingSETTING이 올바르게 사용되도록 수정했습니다. #45591 (Bharat Nallan).- 캐시에서 콜백이 호출될 때 해당 캐시가 소멸될 수 있습니다. 이를 안전하게 처리하기 위해 멤버 변수를 값으로 캡처합니다. 또한 태스크 스케줄러는 스토리지가 소멸되기 전에 비활성화되므로 이와 관련해서도 안전합니다. #45548 문제를 해결합니다. #45601 (Han Fei).
- 코덱 Delta 또는 DoubleDelta가 코덱 Gorilla와 함께 사용될 때 발생하던 데이터 손상 문제를 수정했습니다. #45615 (Robert Schulze).
- N-gram 블룸 필터 인덱스를 사용할 때 잘못된 읽기가 발생하지 않도록 타입을 올바르게 검사합니다. #45617 (Antonio Andelic).
c-ares와 관련된 몇 가지 세그멘테이션 폴트(segfault)가 보고되었습니다. 이는 제가 이전에 올린 pull request에서 발생한 것입니다. Alexander Tokmakov의 도움을 받아 이를 수정했습니다. #45629 (Arthur Passos).- 중복된 기본 키가 발견되었을 때 키 설명을 수정합니다. 이는 프로젝션에서 발생할 수 있습니다. 자세한 내용은 #45590를 참조하십시오. #45686 (Amos Bird).
- 백업의 압축 방식과 수준을 설정합니다. #45690를 해결합니다. #45737 (Pradeep Chhetri).
select_query_typed.limitOffset대신select_query_typed.limitByOffset를 사용해야 합니다. #45817 (刘陶峰).- experimental analyzer를 사용하는 경우
SELECT number FROM numbers(100) LIMIT 10 OFFSET 10;과 같은 쿼리가 잘못된 결과를 반환합니다(해당 SQL에 대해 빈 결과가 반환됨). 이는 플래너가 불필요한 OFFSET 단계를 추가한 것이 원인입니다. #45822 (刘陶峰). - 하위 호환성을 위해 UInt64에서 IPv4로의 암시적 축소 변환을 허용합니다. 이는 "INSERT ... VALUES ..." 식에 필요합니다. #45865 (Yakov Olkhovskiy).
- 첫 번째 옥텟이 누락된 혼합 IPv4 주소(예:
::.1.2.3)를 처리하는 IPv6 파서의 버그를 수정했습니다. #45871 (Yakov Olkhovskiy). system.processes테이블과SHOW PROCESSLIST쿼리에query_kind컬럼을 추가합니다. 중복 코드를 제거합니다. 다음 버그를 수정합니다: 전역 구성 매개변수max_concurrent_select_queries가INTERSECT또는EXCEPT체인을 사용하는 쿼리에는 적용되지 않았습니다. #45872 (Alexey Milovidov).- 함수
stochasticLinearRegression에서 발생하던 크래시를 수정했습니다. WingFuzz에서 발견한 문제입니다. #45985 (Nikolai Kochetov). - 희소 컬럼이 활성화된 테이블(설정
ratio_of_defaults_for_sparse_serialization으로 제어됨)에서 데이터를 읽는SELECT쿼리 중INTERSECT및EXCEPT수정자를 사용할 때 발생하던 크래시를 수정합니다. #45987 (Anton Popov). - FINAL이 있는 DESC 정렬에서 순차 읽기 최적화를 수정했습니다. #45815을(를) 해결했습니다. #46009 (Vladimir C).
- 컴팩트 파트에서 여러 단계로 중첩된 컬럼 중 존재하지 않는 컬럼을 읽을 때의 동작을 수정합니다. #46045 (Azat Khuzhin).
- system.processes의 elapsed 컬럼의 10배 오차를 수정했습니다. #46047 (Azat Khuzhin).
- 도메인 IP 타입(IPv4, IPv6)을 네이티브 타입으로 교체한 변경 사항 https://github.com/ClickHouse/ClickHouse/pull/43221 에 대한 후속 수정입니다. #46087 (Yakov Olkhovskiy).
- 구성에서 매개변수에 이미 값이 설정된 경우에도 환경 변수 치환이 올바르게 동작하도록 수정합니다. 이 변경으로 #46131 이슈가 해결됩니다. 또한 #9547 이슈가 해결됩니다. #46144 (pufit).
GROUPING SETS에서 잘못된 프리디케이트 푸시다운 동작을 수정합니다. #45947 이슈를 해결합니다. #46151 (flynn).- 상수 키를 사용할 때
fulls_sorting_join에서 파이프라인이 멈출 수 있는 오류를 수정합니다. #46175 (Vladimir C). - 잘못된 결과를 방지하기 위해 포맷팅 과정에서 튜플 함수들을 리터럴로 치환하지 않도록 했습니다. #46232 (Salvatore Mesoraca).
- Arrow 포맷에서 LowCardinality(널 허용)를 읽는 중에 발생할 수 있는 범위 초과 오류를 수정합니다. #46270 (Kruglov Pavel).
CANNOT_PARSE_INPUT_ASSERTION_FAILED예외로 실패하던SYSTEM UNFREEZE쿼리를 수정합니다. #46325 (Aleksei Filatov).- HashTable을 저장하는 FUNCTION의 집계 상태를 역직렬화하는 과정에서 정수 오버플로로 인해 발생할 수 있는 크래시를 수정했습니다. #46349 (Nikolai Kochetov).
VALUES포맷으로 전송된 잘못된 데이터 때문에 비동기 삽입에서LOGICAL_ERROR가 발생할 수 있었던 문제를 수정합니다. #46350 (Anton Popov).ALTER ... MOVE PART ... TO TABLE을(를) 실행하려 할 때 발생하던 LOGICAL_ERROR를 수정했습니다. 이 유형의 쿼리는 사실상 한 번도 지원된 적이 없었습니다. #46359 (Alexander Tokmakov).parallel_distributed_insert_select가 활성화된 상태에서 실행되는 병렬 분산 INSERT SELECT의 s3Cluster 스키마 추론을 수정합니다. #46381 (Kruglov Pavel).arr1과arr2가 동일한Nested컬럼의 필드인ALTER TABLE ... UPDATE nested.arr1 = nested.arr2 ...와 같은 형태의 쿼리 실행 시 발생하던 문제를 수정합니다. #46387 (Anton Popov).- 스케줄러가 작업 스케줄링에 실패할 수 있습니다. 이 경우 전체 MulityPartUpload를 중단해야 하며,
UploadHelper는 이미 스케줄링된 작업이 완료될 때까지 기다려야 합니다. #46451 (Dmitry Novik). - 서로 다른 기본 타입을 사용하는 Merge 엔진에서 PREWHERE 동작을 수정합니다(컬럼의 기본 타입이 다른 경우 발생하던
NOT_FOUND_COLUMN_IN_BLOCK오류 일부를 수정하고, 테이블 간 컬럼 타입이 동일한 경우에는PREWHERE를 허용하며, 타입이 다른 경우에만 이를 금지합니다). #46454 (Azat Khuzhin). ORDER BY에서 상수 값을 사용할 때 발생하던 크래시를 수정했습니다. 이 변경으로 #46466 이슈가 해결됩니다. #46493 (Nikolai Kochetov).- 쿼리 수준에서
disk설정이 지정되고 설정 파일의 MergeTree settings 섹션에storage_policy가 지정되어 있더라도 예외가 발생하지 않도록 변경했습니다. 이 경우disk가 설정 파일에서 지정된 설정을 덮어씁니다. #46533 (Kseniia Sumarokova). - 함수
arrayMap에서 상수LowCardinality인자를 잘못 처리하던 문제를 수정합니다. 이 버그는 릴리스 빌드에서 세그폴트(segfault)를 발생시키거나 디버그 빌드에서 논리 오류Bad cast를 유발할 수 있었습니다. #46569 (Alexey Milovidov). - #46557를 수정했습니다. #46611 (Alexander Gololobov).
- 서버가 1분 30초 이내에 시작되지 못할 경우 clickhouse-server systemd 유닛이 계속해서 재시작되는 문제를 수정합니다(시스템드(systemd) 서비스에서 clickhouse-server를 시작할 때의 타임아웃 로직을 비활성화). #46613 (Azat Khuzhin).
- 비동기 삽입 중에 할당된 메모리 버퍼가 전역 컨텍스트에서 해제되었으나, 해당 사용자와 쿼리에 대한 MemoryTracker 카운터가 올바르게 업데이트되지 않았습니다. 이로 인해 거짓 양성 메모리 부족(OOM) 예외가 발생했습니다. #46622 (Dmitry Novik).
- 향후 analyze 실행에서 필요하므로 table_join의 on_expression을 지우지 않도록 업데이트했습니다. #45185 문제를 해결합니다. #46487 (SmitaRKulkarni).
ClickHouse 23.1 릴리스, 2023-01-26. 발표 자료, 영상
ClickHouse 23.1 릴리스
업그레이드 참고 사항
SYSTEM RESTART DISK쿼리는 이제 아무 동작도 하지 않는(no-op) 쿼리가 되었습니다. #44647 (alesapin).HASHED/SPARSE_HASHEDdictionary에 대한PREALLOCATE옵션은 이제 아무 동작도 하지 않는(no-op) 옵션이 되었습니다. #45388 (Azat Khuzhin). 더 이상 유의미한 이점을 제공하지 않습니다.- Float32 또는 Float64 타입이 아닌 컬럼에서
Gorilla코덱 사용이 금지되었습니다. #45252 (Robert Schulze). 의미가 없었고 일관성 문제를 일으켰습니다. - 병렬 quorum insert는 더 이상 사용되지 않는 구문으로 생성된
*MergeTree테이블에서 올바르게 동작하지 않을 수 있으므로, 이러한 테이블에 대해서는 병렬 quorum insert 지원이 완전히 비활성화됩니다. 이 변경 사항은 새로운 구문으로 생성된 테이블에는 영향을 주지 않습니다. #45430 (Alexander Tokmakov). - AWS S3에서 객체 크기를 가져올 때
HeadObject요청 대신GetObjectAttributes요청을 사용하도록 변경되었습니다. 이 변경 사항은 예를 들어 AWS SDK 업데이트 이후 명시적 리전이 없는 엔드포인트를 처리하는 문제를 수정합니다. #45288 (Vitaly Baranov). AWS S3와 Minio에서 테스트되었지만, 다양한 S3-호환 서비스(GCS, R2, B2)에는 미묘한 비호환성이 있을 수 있음을 유의해야 합니다. 또한 이 변경으로 인해GetObjectAttributes요청을 허용하도록 ACL을 조정해야 할 수도 있습니다. - 타임존 이름에 경로 사용이 금지되었습니다. 예를 들어
/usr/share/zoneinfo/Asia/Aden과 같은 타임존 이름은 허용되지 않으며,Asia/Aden과 같은 IANA 타임존 데이터베이스 이름을 사용해야 합니다. #44225 (Kruglov Pavel). - 등가 조인(equijoin)과 상수 표현식을 결합하는 쿼리(예:
JOIN ON t1.x = t2.x AND 1 = 1)는 결과가 올바르지 않기 때문에 금지됩니다. #44016 (Vladimir C).
신규 기능
- 정규 표현식 트리를 순회하여 키를 추출하는 데 사용하는 딕셔너리(Dictionary) 소스입니다. User-Agent 문자열 파싱에 사용할 수 있습니다. #40878 (Vage Ogannisian). #43858 (Han Fei).
- 매개변수화된 VIEW 기능이 추가되어 이제 View 테이블 엔진에 대한 쿼리 매개변수를 지정할 수 있습니다. #40907을 해결했습니다. #41687 (SmitaRKulkarni).
quantileInterpolatedWeighted/quantilesInterpolatedWeighted함수를 추가합니다. #38252 (Bharat Nallan).- Spark의 "explode" 함수와 유사한
Map타입을 위한 array join 지원 기능. #43239 (李扬). - SQL 표준 바이너리 및 16진수 문자열 리터럴을 지원합니다. #43785 (Mo Xuan).
DateTime을 Joda-Time 스타일로 형식 지정할 수 있도록 지원합니다. Joda-Time 문서를 참조하십시오. #43818 (李扬).formatDateTime에 대한 소수점 이하 초 서식 지정자(%f)를 구현했습니다. #44060 (ltrk2). #44497 (Alexander Gololobov).- 두 날짜 또는 시간 값이 포함된 날짜 사이의 차이를 완전한 단위 수로 계산하는
age함수를 추가했습니다. #41115를 해결합니다. #44421 (Robert Schulze). - 사전용
Null소스를 추가했습니다. #44240 이슈를 해결했습니다. #44502 (mayamika). s3_storage_class설정 옵션으로 S3 스토리지 클래스를 구성할 수 있게 되었습니다. 예를 들어<s3_storage_class>STANDARD/INTELLIGENT_TIERING</s3_storage_class>와 같이 설정합니다. #44443 이슈를 해결합니다. #44707 (chen).- 이름이 지정된 튜플(named tuple)을 파싱하는 동안 JSON 객체에 요소가 누락된 경우 기본값을 삽입합니다. 이 동작을 제어하는 설정
input_format_json_defaults_for_missing_elements_in_named_tuple를 추가합니다. #45142#issuecomment-1380153217을(를) 해결합니다. #45231 (Kruglov Pavel). - ProfileEvents의
ServerStartupMilliseconds에 서버 시작 시간을 기록하도록 했습니다. #43188을(를) 해결했습니다. #45250 (SmitaRKulkarni). - 스트리밍 엔진 Kafka/RabbitMQ/NATS를 리팩터링하고 개선하고, 모든 포맷을 지원하도록 하며, 포맷도 일부 리팩터링합니다: - 접두사/접미사가 있는 행 기반 포맷에서 메시지를 생성하는 문제를 수정합니다. 이제 각 메시지는 모든 구분자를 포함해 완전히 포맷되며, 입력 포맷을 사용해 다시 파싱할 수 있습니다. - Native, Parquet, ORC 등과 같은 블록 기반 포맷을 지원합니다. 각 블록은 개별 메시지로 포맷됩니다. 하나의 메시지에 포함되는 행 수는 블록 크기에 따라 달라지므로
max_block_size설정을 통해 제어할 수 있습니다. - 새로운 엔진 설정kafka_max_rows_per_message/rabbitmq_max_rows_per_message/nats_max_rows_per_message를 추가합니다. 이 설정은 행 기반 포맷에서 하나의 메시지에 포맷되는 행 수를 제어합니다. 기본값: 1. - NATS 테이블 엔진에서 높은 메모리 사용량 문제를 수정합니다. - NATS 프로듀서에서 임의의 바이너리 데이터를 지원합니다(이전에는 끝에 \0이 포함된 문자열에서만 동작했습니다). - 문서에 누락되어 있던 Kafka/RabbitMQ/NATS 엔진 설정을 추가합니다. - Kafka/RabbitMQ/NATS에서의 메시지 생성 및 소비 로직을 리팩터링하고, 이를 WriteBuffers/ReadBuffers의 시맨틱과 분리합니다. - 출력 포맷을 리팩터링합니다: Kafka/RabbitMQ/NATS에서 사용되던 행 단위 콜백을 제거합니다(이제 이 부분에서는 콜백을 사용하지 않습니다).IRowOutputFormat을 직접 사용할 수 있게 하고, 행 끝 및 행 사이 구분자를 명확히 하며, 다시 포맷을 시작할 수 있도록 출력 포맷을 리셋하는 기능을 추가합니다. -formatRow함수에 적절한 구현을 추가합니다(포맷 리팩터링에 따른 보너스 개선입니다). #42777 (Kruglov Pavel). CapnProto포맷에서Nested테이블을Struct의List로 읽기/쓰기할 수 있도록 지원을 추가합니다.Decimal32/64를Int32/64로 읽고 쓸 수 있도록 합니다. #43319를 해결합니다. #43379 (Kruglov Pavel).system.text_log에message_format_string컬럼이 추가되었습니다. 이 컬럼에는 메시지를 포맷하는 데 사용된 패턴이 저장됩니다. #44543 (Alexander Tokmakov). 이를 통해 ClickHouse 로그를 대상으로 다양한 분석을 수행할 수 있습니다.- CSV/TSV/CustomSeparated 입력 포맷에 대해 컬럼 이름(및 타입)을 포함한 헤더를 자동으로 감지하도록 시도합니다.
이 동작을 활성화하는 설정
input_format_tsv/csv/custom_detect_header를 추가합니다(기본적으로 활성화되어 있습니다). #44640 이슈를 해결합니다. #44953 (Kruglov Pavel).
실험적 기능
- 효율적인 텍스트 검색을 위한 새로운 보조 인덱스 유형으로 실험적 역방향 인덱스를 추가합니다. #38667 (larryluogit).
- 실험적 쿼리 결과 캐시를 추가합니다. #43797 (Robert Schulze).
- IO 요청을 위한 확장 가능하고 구성 가능한 스케줄링 서브시스템을 추가합니다 (아직 IO 코드 자체와는 통합되지 않음). #41840 (Sergei Trifonov). 이 기능은 현재 아무 작업도 수행하지 않습니다. 참고하십시오.
Replicated데이터베이스의 장애 레플리카(dead replica) 메타데이터를 제거하는SYSTEM DROP DATABASE REPLICA를 추가합니다. #41794를 해결합니다. #42807 (Alexander Tokmakov).
성능 향상
MergeTree테이블을 시작할 때 비활성 파트를 로드하지 않습니다. #42181 (Anton Popov).- 많은 수의 작은 파일을 읽을 때 스토리지
S3및 테이블 함수s3에서의 읽기 지연 시간이 개선되었습니다. 이제 스토리지S3에서 읽을 때 설정remote_filesystem_read_method및remote_filesystem_read_prefetch가 효과를 발휘합니다. #43726 (Anton Popov). - Parquet/ORC 파일에서 struct 필드를 읽는 작업이 최적화되었습니다. 이제 필요한 필드만 로드됩니다. #44484 (lgbo).
- HTTP 인터페이스를 통한 쿼리에서 2단계 집계 알고리즘이 잘못 비활성화되어 있었습니다. 이를 다시 활성화했으며, 그 결과 성능이 크게 향상되었습니다. #45450 (Nikolai Kochetov).
- StorageFile에 mmap 지원을 추가하여 clickhouse-local 성능을 향상했습니다. #43927 (pufit).
HashedDictionary에 세그먼트(shard) 지원을 추가하여 병렬 로드를 사용할 수 있으며, 세그먼트 수에 거의 비례하여 선형적으로 확장됩니다. #40003 (Azat Khuzhin).- 쿼리 파싱 속도를 향상했습니다. #42284 (Raúl Marín).
expr이LowCardinality컬럼인 경우, OR 체인expr = x1 OR ... OR expr = xN은 항상expr IN (x1, ..., xN)으로 변환됩니다. 이 경우optimize_min_equality_disjunction_chain_lengthSETTING은 무시됩니다. #42889 (Guo Wangyang).- ThreadStatus 관련 코드를 최적화하여 성능을 소폭 향상했습니다. #43586 (Zhiguo Zhou).
- 컬럼 단위 삼항 논리 평가를 자동 벡터화(auto-vectorization)를 통해 최적화했습니다. 이 마이크로벤치마크의 성능 테스트에서 ICX 장비(Intel Xeon Platinum 8380 CPU)에서 최대 21배의 성능 향상을 확인했습니다. #43669 (Zhiguo Zhou).
- 가능하면
system.tables테이블에서 읽기 잠금을 획득하지 않도록 합니다. #43840 (Raúl Marín). - ThreadPool을 최적화합니다. ICX 장비(Intel Xeon Platinum 8380 CPU, 80코어, 160스레드)에서 SSB(Star Schema Benchmark)를 사용해 수행한 성능 실험 결과, 이 변경으로 ThreadPoolImpl::mutex에 대한 락 경합을 **75%**까지 효과적으로 줄여 CPU 활용률을 높이고 전체 성능을 2.4% 향상시킬 수 있음을 보여줍니다. #44308 (Zhiguo Zhou).
- 이제 해시 테이블 크기를 예측하는 최적화는 캐시된 해시 테이블 크기가 충분히 큰 경우에만 적용됩니다(임계값은 경험적으로 산정되어 하드코딩되었습니다). #44455 (Nikita Taranov).
- 원격 파일 시스템에서의 비동기 읽기 성능이 소폭 향상되었습니다. #44868 (Kseniia Sumarokova).
- 다음 연산에 대해 fast path를 추가합니다: -
col like '%%'; -col like '%'; -col not like '%'; -col not like '%'; -match(col, '.*'). #45244 (李扬). - 필터링(WHERE 절)의 happy path 최적화를 소폭 개선했습니다. #45289 (Nikita Taranov).
toUnixTimestamp64*의 단조성 정보를 제공하여 인덱스 분석에서 더 많은 대수적 최적화를 수행할 수 있도록 합니다. #44116 (Nikita Taranov).- 쿼리 처리 시 사용되는 임시 데이터(디스크로 스필링되는 데이터)를 파일 시스템 캐시(캐시 디스크의 공간을 차지함)와 연동되도록 구성할 수 있게 했습니다 #43972 (Vladimir C). 이는 주로 ClickHouse Cloud에서의 성능을 개선하지만, 필요한 설정을 이해하고 있다면 자가 관리형 환경에서도 활용할 수 있습니다.
system.replicas테이블이 레플리카 상태를 병렬로 가져오도록 개선했습니다. #43918 이슈를 닫았습니다. #43998 (Nikolay Degterinsky).- S3로 백업하는 동안의 메모리 사용량을 최적화했습니다. 이제 파일은
WriteBufferFromS3(메모리를 많이 사용할 수 있음)를 사용하지 않고 S3로 직접 복사됩니다. #45188 (Vitaly Baranov). - 비동기 블록 ID에 대한 캐시를 추가합니다. 이는 비동기 insert 중복 제거를 사용할 때 ZooKeeper에 대한 요청 수를 줄여 줍니다. #45106 (Han Fei).
개선 사항
- 인수가 없는
generateRandom에서 삽입 테이블의 구조를 사용하도록 했습니다. #45239 (Kruglov Pavel). JSONExtract함수에서 JSON의 문자열 필드에 저장된 부동소수점 숫자 값을 정수로 암시적으로 변환할 수 있도록 허용합니다. 예:JSONExtract('{"a": "1000.111"}', 'a', 'UInt64')->1000, 이전에는 0을 반환했습니다. #45432 (Anton Popov).- 더 나은 내부 상태 파악을 위해 테이블
system.formats에supports_parallel_parsing및supports_parallel_formatting필드를 추가했습니다. #45499 (Anton Popov). - CustomSeparated/Template 포맷에서 CSV 필드 읽기를 개선합니다. #42352 및 #39620 이슈를 해결합니다. #43332 (Kruglov Pavel).
- 쿼리 소요 시간 측정 방식을 통합합니다. #43455 (Raúl Marín).
- 가상 컬럼이 SELECT 쿼리에 포함되어 있을 때 file/hdfs/s3 테이블 함수에서 삽입 대상 테이블의 구조를 자동으로 사용하는 방식을 개선합니다. 이를 통해
Block structure mismatch또는number of columns mismatch오류가 발생할 수 있는 문제를 해결합니다. #43695 (Kruglov Pavel). - 함수
range에서 부호 있는 인수를 지원합니다. #43333를 수정합니다. #43733 (sanyu). - 중복된 정렬을 제거합니다. 예를 들어, 서브쿼리에서 관련된 ORDER BY 절에 대한 정렬을 제거합니다. 쿼리 플랜을 기반으로 구현되었습니다.
ORDER BY절과 관련하여optimize_duplicate_order_by_and_distinct가 수행하는 것과 유사한 최적화를 수행하지만, 어떤 중복 정렬 단계(ORDER BY 절로 인해 발생한 경우에 한정되지 않음)에도 적용되고 임의의 깊이를 가진 서브쿼리에 적용되므로 더 일반적인 최적화입니다. #42648과 관련 있습니다. #43905 (Igor Nikonov). - BACKUP 시 파일 중복 제거를 비활성화할 수 있는 기능을 추가했습니다(중복 제거 없이 생성된 백업의 경우 전체 RESTORE 대신 ATTACH를 사용할 수 있습니다). 예를 들어
BACKUP foo TO S3(...) SETTINGS deduplicate_files=0(기본값은deduplicate_files=1입니다). #43947 (Azat Khuzhin). - 텍스트 형식에 대한 스키마 추론을 리팩터링하고 개선합니다. 결과 타입을
Nullable로 만들지 여부를 제어하는 새로운 설정schema_inference_make_columns_nullable를 추가합니다(기본적으로 활성화됩니다). #44019 (Kruglov Pavel). PROXYv1프로토콜 지원을 개선했습니다. #44135 (Yakov Olkhovskiy).- 정리 스레드가 수행한 최신 파트 검사 정보를
system.parts테이블에 추가했습니다. #44244 (Dmitry Novik). - 읽기 전용 모드에서 INSERT를 수행할 때 테이블 함수(table function)를 비활성화합니다. #44290 (SmitaRKulkarni).
- CleanupThread의 단일 반복에서 처리할 파트 수를 제한할 수 있도록
simultaneous_parts_removal_limit설정을 추가합니다. #44461 (Dmitry Novik). - 쿼리에서 가상 컬럼만 필요한 경우 ReadBufferFromS3를 초기화하지 마십시오. 이는 #44246에 도움이 될 수 있습니다. #44493 (chen).
- 컬럼 이름 힌트의 중복을 방지합니다. #44130 이슈를 해결합니다. #44519 (Joanna Hulboj).
- 디스크 엔드포인트에서 매크로 치환을 허용합니다. #40951를 해결합니다. #44533 (SmitaRKulkarni).
input_format_json_read_object_as_string설정이 활성화된 경우 스키마 추론이 개선되었습니다. #44546 (Kruglov Pavel).DatabaseReplicated에서 인자를 사용하는ReplicatedMergeTree테이블 생성을 금지할 수 있도록 하는 사용자 수준 설정database_replicated_allow_replicated_engine_arguments를 추가합니다. #44566 (alesapin).- 사용자가
index_granularity에 0(유효하지 않은 값)을 잘못 지정하지 못하도록 합니다. 이로써 #44536 이슈가 해결됩니다. #44578 (Alexey Milovidov). - config.xml의
kerberos섹션에 있는keytab매개변수에서 서비스 keytab 파일의 경로를 설정할 수 있게 되었습니다. #44594 (Roman Vasin). - 이미 작성된 쿼리 일부를 퍼지 검색에 사용하도록 합니다 (
skim라이브러리에 전달하며, 이 라이브러리는 Rust로 작성되어 정적으로 ClickHouse에 링크됩니다). #44600 (Azat Khuzhin). input_format_json_read_objects_as_strings를 기본값으로 활성화하여 JSON Object 타입이 실험적 기능인 동안에도 중첩된 JSON 객체를 읽을 수 있도록 합니다. #44657 (Kruglov Pavel).- 비동기 insert 중복 제거 기능 개선: 사용자가 비동기 insert를 중복으로 수행하는 경우, Keeper에 쿼리를 보내기 전에 메모리에서 먼저 중복 제거를 수행합니다. #44682 (Han Fei).
- 입출력용
Avro포맷은 bool 타입을 ClickHouse bool 타입으로 파싱합니다. #44684 (Kruglov Pavel). - Arrow/Parquet/ORC에서 Bool 타입을 지원하도록 했습니다. #43970 이슈를 해결합니다. #44698 (Kruglov Pavel).
- UUID를 읽을 때 따옴표 범위를 넘어서 과도하게 파싱하지 않도록 합니다. 그렇지 않으면 잘못된 데이터를 정상 데이터로 잘못 파싱하는 결과를 초래할 수 있습니다. #44686 (Raúl Marín).
- Int64 오버플로가 발생하는 경우 UInt64로 추론하고 스키마 추론에서 일부 변환을 수정합니다. #44696 (Kruglov Pavel).
- 이전에는
Replicated데이터베이스 내부의 의존성 해결을 임시방편적으로 처리했으나, 이제는 명시적인 그래프를 사용해 올바르게 수행합니다. #44697 (Nikita Mikhaylov). output_format_pretty_row_numbers가 블록 간에서 카운터를 보존하지 않던 문제를 수정합니다. #44815 이슈를 해결합니다. #44832 (flynn).- 백그라운드 정리 프로세스와 동시에 파트가 병합되는 경우
system.errors에 오류가 보고되지 않도록 합니다. #44874 (Raúl Marín). - Distributed async INSERT의 메트릭을 최적화하고 수정합니다. #44922 (Azat Khuzhin).
- 동시 실행되는 백업 및 복원 작업을 허용하지 않는 설정을 추가하여 #43891를 해결했습니다. 구현: * Context에서 BackupWorker가 생성될 때 읽고 적용되는 서버 수준 설정을 추가했습니다. 이 설정은 동시 백업 및 복원을 허용하지 않습니다. * 기본값은 true입니다. * 백업 또는 복원을 시작하기 전에 다른 백업/복원 작업이 실행 중인지 확인하는 검사를 추가했습니다. 내부 요청의 경우, backup_uuid를 사용해 동일 노드에서 온 것인지 확인합니다. #45072 (SmitaRKulkarni).
- 시스템 로그용
<storage_policy>설정 파라미터를 추가했습니다. #45320 (Stig Bakken).
빌드/테스트/패키징 개선
- ClickHouse 클라이언트/로컬 히스토리에서 퍼지 검색을 위해
skim라이브러리(Rust로 작성됨)를 정적으로 링크했습니다. #44239 (Azat Khuzhin). - Rust 때문에 공유 라이브러리 링크에 대한 지원을 제거했습니다. 실제로 Rust는 제거를 위한 구실일 뿐이며, 어차피 제거하고자 했습니다. #44828 (Alexey Milovidov).
- 패키지에서
adduser도구에 대한 의존성을 제거했습니다. 사용하지 않기 때문입니다. 이를 통해 #44934 이슈를 수정했습니다. #45011 (Alexey Milovidov). SQLite라이브러리를 최신 버전으로 업데이트했습니다. 이는 SQLite 데이터베이스 및 테이블 통합 엔진에 사용됩니다. 또한 거짓 양성 TSan 보고를 수정했습니다. 이를 통해 #45027 이슈를 닫았습니다. #45031 (Alexey Milovidov).- PowerPC에서 WeakHash 충돌 문제를 해결하기 위해 CRC-32를 변경했습니다. #45144 (MeenaRenganathan22).
- aws-c* 서브모듈을 업데이트했습니다. #43020 (Vitaly Baranov).
- 성공(green) 상태인 백포트 PR과 성공(green) 상태인 승인된 PR을 자동으로 머지합니다. #41110 (Mikhail f. Shiryaev).
- ClickHouse CI 상태를 확인할 수 있는 웹사이트를 도입했습니다. 소스.
버그 수정
- 도메인 IP 타입(IPv4, IPv6)을 네이티브 타입으로 교체합니다. #43221 (Yakov Olkhovskiy). 이 변경으로 코드에서 누락되었던 일부 구현이 자동으로 보완됩니다.
- 백업 중 뮤테이션이 종료되더라도 백업 프로세스가 올바르게 동작하도록 수정했습니다. #45351 (Vitaly Baranov).
Invalid number of rows in Chunk예외 메시지를 수정했습니다. #41404. #42126 (Alexander Gololobov).- 정렬 이후 표현식을 실행하는 단계에서 초기화되지 않은 값이 사용될 수 있는 문제를 수정합니다. #43386 및 #43635 이슈를 해결합니다. (Kruglov Pavel).
- 집계 조합기에서 NULL 처리 방식을 개선하고, 거의 사용되지 않는 최적화인
optimize_rewrite_sum_if_to_count_if사용 시 발생할 수 있는 세그멘테이션 폴트/논리 오류를 수정합니다. #43758를 해결합니다. #43813 (Kruglov Pavel). - CREATE USER/ROLE 쿼리의 설정 제약 조건을 수정합니다. #43993 (Nikolay Degterinsky).
- 테이블 메타데이터에서
EPHEMERAL컬럼에 파싱할 수 없는 기본값이 설정되던 버그를 수정했습니다. #44026 (Yakov Olkhovskiy). - 호환성 설정에서 잘못된 버전 값을 파싱하던 동작을 수정했습니다. #44224 (Kruglov Pavel).
datetime에서 interval을 빼는 동작을 더하기와 일치하도록 수정했습니다. #44241 (ltrk2).- 뷰 결과의 최대 크기 제한을 제거합니다. #44261 (lizhuoyu5).
do_not_evict_index_and_mrk_files=1일 때 캐시에서 발생할 수 있는 잠재적인 논리 오류를 수정합니다. #42142를 해결합니다. #44268 (Kseniia Sumarokova).- write-through 캐시에서 캐시 쓰기가 지나치게 일찍 중단될 수 있는 문제를 수정합니다(중단되면 안 되는 상황에서 잘못된 가정으로 인해 캐싱이 중단될 수 있었습니다). #44289 (Kseniia Sumarokova).
- 상수 인자를 사용하는 함수
IN이LowCardinality와 함께 상수 인자로 사용된 경우 발생할 수 있는 충돌을 수정합니다. #44221를 수정합니다. #44346 (Nikolai Kochetov). - 파라메트릭 집계 함수의 복잡한 파라미터(예: 배열)에 대한 지원 문제를 수정했습니다. 이로써 #30975가 해결되었습니다. 이 변경 이전에는 집계 함수
sumMapFiltered를 분산 쿼리에서 사용할 수 없었습니다. #44358 (Alexey Milovidov). - BSON 스키마 추론에서 ObjectId 읽기를 수정했습니다. #44382 (Kruglov Pavel).
- ReplicatedMergeTree에서 머지 작업이 완료되기 전에 임시 파트가 조기에 제거될 수 있는 경쟁 상태를 수정했습니다. 이 문제로 인해
No such file or directory: xxx와 같은 오류가 발생할 수 있었습니다. #43983 이슈를 수정했습니다. #44383 (alesapin). - 클러스터 이름을 지정하지 않은 경우 일부 잘못된
SYSTEM ... ON CLUSTER쿼리가 예기치 않게 동작했습니다. 이 문제가 수정되어, 이제 잘못된 쿼리는 정상적으로SYNTAX_ERROR를 발생시킵니다. #44264를 수정합니다. #44387 (Alexander Tokmakov). - ORC 포맷에서 맵 타입을 읽는 동작을 수정했습니다. #44400 (Kruglov Pavel).
- Parquet/ORC 포맷에서 입력 데이터에 존재하지 않는 컬럼을 읽으려 할 때의 동작을 수정했습니다. 이전에는
INCORRECT_NUMBER_OF_COLUMNS오류가 발생할 수 있었습니다. #44333을(를) 해결합니다. #44405 (Kruglov Pavel). - 이전에는
bar함수가 5/8과 6/8 막대를 모두 표시할 때 동일한 '▋' (U+258B "Left five eighths block") 문자를 사용했습니다. 이번 변경으로 6/8 막대를 표시할 때는 '▊' (U+258A "Left three quarters block") 문자를 사용하도록 동작이 수정되었습니다. #44410 (Alexander Gololobov). - 구성 파일에서 profile settings CONSTRAINT 뒤에 profile settings를 정의하면 해당 제약이 적용되지 않았습니다. #44411 (Konstantin Bogdanov).
- 데이터를 포함한
EXPLAIN AST INSERT쿼리를 실행할 때 발생하던SYNTAX_ERROR를 수정합니다. #44207 이슈를 해결합니다. #44413 (save-my-heart). - CSV 포맷에서 CRLF가 있는 bool 값을 읽는 동작을 수정했습니다. #44401 이슈를 해결합니다. #44442 (Kruglov Pavel).
- LowCardinality 딕셔너리에서 and/or/if/multiIf를 실행하지 않도록 하여 결과 타입이 LowCardinality가 되지 않게 했습니다. 이는 일부 경우
Illegal column ColumnLowCardinality오류로 이어질 수 있습니다. #43603을(를) 수정합니다. #44469 (Kruglov Pavel). max_streams_for_merge_tree_reading설정이 뮤테이션에 올바르게 적용되도록 수정했습니다. #44472 (Anton Popov).- ASTSelectQuery::formatImpl에서 GROUPING SETS 사용 시 발생할 수 있는 잠재적인 널 포인터 역참조 문제를 수정합니다 (#43049). #44479 (Robert Schulze).
- 설정에 따라 테이블 함수 인수,
CAST함수 인수,JSONAsObject스키마 추론의 타입을 검증합니다. #44501 (Kruglov Pavel). - IN 함수에서 LowCardinality와 상수 컬럼을 함께 사용할 때 발생하는 문제를 수정하고, #44503을(를) 종료했습니다. #44506 (Duc Canh Le).
CREATE TABLE구문에서DEFAULT표현식을 정규화하는 과정에서 발생하던 버그를 수정했습니다. 함수in의 두 번째 인수(또는 연산자IN의 오른쪽 인수)가 CREATE 쿼리 실행 중에 평가한 결과 값으로 대체될 수 있었습니다. #44496을(를) 수정했습니다. #44547 (Alexander Tokmakov).- WITH ROLLUP, WITH CUBE 및 WITH TOTALS가 사용되는 경우 프로젝션이 적용되지 않습니다. 이전 버전에서는 프로젝션 사용을 건너뛰는 대신 쿼리가 예외를 발생시켰습니다. 이 변경으로 #44614 및 #42772가 해결되었습니다. #44615 (Alexey Milovidov).
- 함수
get all blocks sorted by time이 비동기 블록을 가져오지 않아 비동기 블록이 정리되지 않았습니다. #44651 (Han Fei). - 서브쿼리, UNION, TOTALS를 사용하는 JOIN에서 발생하는
LOGICAL_ERRORThe top step of the right pipeline should be ExpressionStep오류를 수정합니다. 이 변경으로 #43687 이슈가 해결됩니다. #44673 (Nikolai Kochetov). - Executable 테이블 엔진에서
std::out_of_range예외가 발생하지 않도록 수정했습니다. #44681 (Kruglov Pavel). - AST 상의 quantiles에는
optimize_syntax_fuse_functions를 적용하지 않도록 했습니다. #44712를 해결했습니다. #44713 (Vladimir C). - Merge 테이블과 PREWHERE에서 잘못된 타입 사용으로 발생하던 버그를 수정하고 #43324을(를) 종료했습니다. #44716 (Vladimir C).
- 종료 시 TraceCollector를 소멸하는 과정에서 발생할 수 있는 충돌을 수정합니다. #44757을(를) 수정합니다. #44758 (Nikolai Kochetov).
- 분산 쿼리 처리에서 발생할 수 있는 크래시를 수정합니다.
totals또는extremes가 있는 쿼리가 빈 결과를 반환하고 Distributed 테이블과 로컬 테이블 간에 데이터 타입이 일치하지 않는 경우 크래시가 발생할 수 있었습니다. #44738를 수정합니다. #44760 (Nikolai Kochetov). - 뮤테이션(
min_rows_to_fsync_after_merge/min_compressed_bytes_to_fsync_after_merge)에서 fetch(min_compressed_bytes_to_fsync_after_fetch) 및 작은 파일(ttl.txt, columns.txt)에 대한 fsync 처리를 수정했습니다. #44781 (Azat Khuzhin). - 디스크 간에 파트가 이동되는 상황에서
system.parts또는system.parts_columns테이블을 쿼리할 때 드문 레이스 컨디션이 발생할 수 있는 문제가 있었습니다. #41145에서 도입되었습니다. #44809 (Alexey Milovidov). - 프로젝션 최적화가 활성화된 경우 발생할 수 있는
Context has expired오류를 수정합니다. 런타임에서 컨텍스트를 사용하는dictHas/dictGet같은 특정 FUNCTION을 포함한 쿼리에서 재현됩니다. #44844를 수정합니다. #44850 (Nikolai Kochetov). - 원격 파일 시스템에서
LowCardinality딕셔너리를 읽는 동안 발생할 수 있는Cannot read all data오류를 수정했습니다. #44709를 해결합니다. #44875 (Nikolai Kochetov). - 하드웨어 모니터링 센서를 읽지 못하는 경우, 로그에 전체 예외 메시지를 남기는 대신 해당 상황을 무시하도록 했습니다. #44895 (Raúl Marín).
- 계산된 INSERT 지연 시간이 설정값을 초과하는 경우
max_delay_to_insert값을 사용합니다. #44902와 관련 있습니다. #44916 (Igor Nikonov). UNION을 사용하는 쿼리에서 발생하는Different order of columns in UNION subquery오류를 수정합니다. #44866를 수정합니다. #44920 (Nikolai Kochetov).- INSERT 시 지연 시간이 잘못 계산되어, 올바른 값 대신 항상
max_delay_to_insert설정을 지연 시간으로 사용하는 문제가 발생할 수 있습니다. 간단한 공식max_delay_to_insert * (parts_over_threshold / max_allowed_parts_over_threshold)을 사용하여, 임계값을 초과한 파트 수에 비례해 지연 시간이 증가하도록 했습니다. #44902를 해결합니다. #44954 (Igor Nikonov). - wide part에 경량한 삭제 마스크가 있는 경우 발생하는
ALTER TABLE ... TTL오류를 수정합니다. #44959 (Mingliang Pan). - 도메인 IP 유형(IPv4, IPv6)을 네이티브 유형으로 교체한 변경에 대한 후속 수정입니다. #43221. #45024 (Yakov Olkhovskiy).
- 도메인 IP 타입(IPv4, IPv6)을 네이티브 타입으로 교체한 변경 사항(https://github.com/ClickHouse/ClickHouse/pull/43221)에 대한 후속 수정입니다. #45043 (Yakov Olkhovskiy).
- 파서에서 버퍼 오버플로우가 발생할 수 있는 문제가 있었습니다. 퍼저(fuzzer)에 의해 발견되었습니다. #45047 (Alexey Milovidov).
- FileLog 스토리지에서 발생할 수 있는 cannot-read-all-data 오류를 수정합니다. #45051, #38257 이슈를 해결합니다. #45057 (Kseniia Sumarokova).
- 메모리 효율적인 집계(
distributed_aggregation_memory_efficient설정)은 쿼리에 GROUPING SETS가 포함되어 있을 때 비활성화됩니다. #45058 (Nikita Taranov). update_field가 지정된 경우 업데이트 시RANGE_HASHED딕셔너리가 범위 컬럼을 기본 키의 일부로 포함해 계산하도록 수정합니다. #44588 이슈를 해결합니다. #45061 (Maksim Kita).- 중첩 람다에서
LowCardinality캡처 인자를 사용할 때 발생하는Cannot capture column오류를 수정합니다. 이는 #45028을(를) 수정합니다. #45065 (Nikolai Kochetov). - minmax/count PROJECTION이 사용되는 경우
additional_table_filters에서 추가 필터가 적용되지 않아 잘못된 쿼리 결과가 반환되던 문제를 수정합니다. #45133 (Nikolai Kochetov). histogram함수가 음수 값을 허용하던 버그를 수정했습니다. #45147 (simpleton).- StorageJoin에서 잘못된 컬럼 nullability를 수정하여 #44940를 종료했습니다. #45184 (Vladimir C).
background_fetches_pool_sizeSETTING을 재로드할 때 런타임에서의 증가가 반영되지 않던 문제를 수정합니다. #45189 (Raúl Marín).- 서브쿼리가 서로 다른 타입을 반환하더라도 키에 대해
IN을 사용하는SELECT쿼리가 KV 엔진(예: KeeperMap, EmbeddedRocksDB)에서 올바르게 처리되도록 수정합니다. #45215 (Antonio Andelic). - 일부 경우에 발생하는
SEMI JOIN및join_use_nulls의 논리 오류를 수정하고, #45163과 #45209를 종료했습니다. #45230 (Vladimir C). - S3에서 데이터를 읽는 과정에서 발생하던 heap-use-after-free 문제를 수정했습니다. #45253 (Kruglov Pavel).
- Avro Union 타입이 ['null', Nested type]일 때 발생하던 버그를 수정합니다. #45275.
bytes타입을Float타입으로 잘못 추론하던 버그를 수정합니다. #45276 (flynn). - 스토리지 엔진
Merge를 사용하는 테이블에서 명시적으로 지정한 PREWHERE를 사용할 수 없는 경우 올바른 예외를 발생하도록 했습니다. #45319 (Antonio Andelic). - WSL1 Ubuntu 환경에서 self-extracting ClickHouse 바이너리가
/proc/self/maps에서 32비트 파일의 inode를 보고하고stat에서는 64비트 inode를 보고하는 불일치 때문에 압축 해제에 실패하던 문제를 수정했습니다. #45339 (Yakov Olkhovskiy). - 분산 테이블 시작 시 발생하는 경쟁 상태를 수정했습니다(비동기
INSERT와 관련된 파일을 여러 번 처리할 수 있었던 문제). #45360 (Azat Khuzhin). ListObject요청이 실패한 경우 스토리지S3와 테이블 함수s3에서 데이터를 읽는 동안 발생할 수 있는 잠재적인 크래시를 수정했습니다. #45371 (Anton Popov).- 구조가 올바르지 않은 딕셔너리(예: XML 설정에서 잘못된 타입이 지정된 경우)가 있을 때
SELECT ... FROM system.dictionaries실행 시 발생하던 예외를 수정했습니다. #45399 (Aleksei Filatov). INSERT INTO ... SELECT * FROM s3Cluster쿼리에서 삽입 대상 테이블의 구조를 사용할 때 s3Cluster에 대한 스키마 추론 문제를 수정합니다. #45422 (Kruglov Pavel).- HTTP에서 JSON/BSONEachRow를 파싱할 때 일부 컬럼에 데이터 값 대신 기본값이 사용될 수 있었던 버그를 수정했습니다. #45424 (Kruglov Pavel).
- 텍스트 소스에서 IP 타입을 타입 지정 방식으로 파싱할 때 발생하던 버그(코드 632. DB::Exception: Unexpected data ... after parsed IPv6 value ...)를 수정했습니다. #45425 (Yakov Olkhovskiy).
- close #45297 빈 정규식에 대한 검사 기능을 추가합니다. #45428 (Han Fei).
- 분산 쿼리일 가능성이 높은 쿼리 정지 문제를 수정합니다. #45448 (Azat Khuzhin).
allow_asynchronous_read_from_io_pool_for_merge_tree가 활성화된 상태에서ThreadPool::schedule에서 예외가 발생하는 경우 발생할 수 있는 데드락 문제를 수정했습니다. #45481 (Nikolai Kochetov).- DETACH 이후에도 사용 중인 테이블이 남을 수 있던 문제를 수정했습니다. #45493 (Azat Khuzhin).
- 쿼리가 취소되고 실행 중 병렬 파싱이 사용된 경우 드물게 발생하던 비정상 종료(abort)를 수정합니다. #45498 (Anton Popov).
- 분산 테이블 생성과 해당 테이블에 대한 INSERT 사이에서 발생하던 경쟁 상태를 수정합니다(INSERT 중
CANNOT_LINK오류가 발생할 수 있었습니다). #45502 (Azat Khuzhin). - 캐시 정책 getter에 적절한 기본값(SLRU)을 추가했습니다. #45514 이슈를 닫습니다. #45524 (Kseniia Sumarokova).
- 뮤테이션에서 array join을 허용하지 않도록 변경했습니다. #42637 #44447 (SmitaRKulkarni).
- 별칭이 지정된 테이블 이름과 컬럼 변환기를 함께 사용하는 한정 별표(qualified asterisk)에 대한 수정입니다. #44736을(를) 해결합니다. #44755 (SmitaRKulkarni).