목차
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 표현식의 비결정적 함수 검사 로직을 수정했습니다. 이전에는 일부 경우 비결정적 함수를 포함한 TTL 표현식을 생성할 수 있었고, 이로 인해 이후 정의되지 않은 동작이 발생할 수 있었습니다. 이 변경으로 #37250을 수정했습니다. 기본적으로 테이블의 어떤 컬럼에도 의존하지 않는 TTL 표현식은 허용되지 않습니다.
SET allow_suspicious_ttl_expressions = 1또는SET compatibility = '23.11'로 다시 허용할 수 있습니다. #37286을 종료했습니다. #51858 (Alexey Milovidov). - MergeTree setting
clean_deleted_rows``는 더 이상 사용을 권장하지 않으며, 이제 아무런 효과가 없습니다.OPTIMIZE의CLEANUP키워드는 기본적으로 허용되지 않습니다(allow_experimental_replacing_merge_with_cleanup` setting으로 다시 활성화할 수 있습니다). #58267 (Alexander Tokmakov). 이 변경으로 #57930을 수정했습니다. 이 변경으로 #54988을 종료했습니다. 이 변경으로 #54570을 종료했습니다. 이 변경으로 #50346을 종료했습니다. 이 변경으로 #47579을 종료했습니다. 이 기능은 바람직하지 않아 제거해야 합니다. 다른 대안이 없으므로 가능한 한 빨리 제거해야 합니다. #57932 (Alexey Milovidov).
새 기능
- #33919에서 요청된 갱신 가능 구체화 뷰를 구현했습니다. #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가 추가되었습니다. 이 명령을 사용하면 경량한 삭제로 기록된 마스크의 적용을 강제하고, 삭제된 것으로 표시된 행을 디스크에서 제거할 수 있습니다. #57433 (Anton Popov). /binary핸들러는 ClickHouse 바이너리 내부의 심볼을 시각화해 보여주는 뷰어를 엽니다. #58211 (Alexey Milovidov).- Sqids(https://sqids.org/)를 생성하는 새 SQL 함수
sqid가 추가되었습니다. 예시:SELECT sqid(125, 126). #57512 (Robert Schulze). - FFT를 사용해 시계열의 주기를 감지하는 새 함수
seriesPeriodDetectFFT를 추가했습니다. #57574 (Bhavna Jindal). - Keeper가 트래픽을 받을 준비가 되었는지 확인하는 HTTP endpoint를 추가했습니다. #55876 (Konstantin Bogdanov).
- 스키마 추론에 ‘union’ 모드를 추가했습니다. 이 모드에서는 결과 table 스키마가 모든 파일 스키마의 합집합이 되므로 각 파일에서 스키마를 추론합니다. 스키마 추론 모드는
schema_inference_mode설정으로 제어되며, 가능한 값은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_256함수를 추가합니다. #57645 (Bharat Nallan).FORMAT_BYTES를formatReadableSize의 별칭으로 추가했습니다. #57592 (Bharat Nallan).s3테이블 함수에 선택적 세션 토큰을 전달할 수 있도록 지원합니다. #57850 (Shani Elharrar).- 새로운 설정
http_make_head_request가 도입되었습니다. 이 설정을 끄면 URL 테이블 엔진이 파일 크기를 확인하기 위해 HEAD 요청을 보내지 않습니다. 이는 비효율적이거나 잘못 구성되었거나 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 테이블의 기본 키(primary key) 분석이 가상 컬럼
_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). - 해시 JOIN은
max_joined_block_size_rows설정을 따르며,ALL JOIN에 대해 큰 블록을 생성하지 않습니다. #56996 (vdimir). - 집계용 메모리를 더 일찍 해제합니다. 이렇게 하면 불필요한 external aggregation을 피할 수 있습니다. #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_final설정을 자동으로 도출합니다. #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는 서버 수준으로 이동되었습니다. -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 체인에 대한 최적화를 추가했습니다. 이 최적화는 실험적 분석기가 활성화된 경우에만 사용할 수 있습니다. #58214 (Kevin Mingtarja).
개선 사항
- Keeper에서 소프트 메모리 제한을 지원합니다. 메모리 사용량이 최대값에 가까우면 요청을 거부합니다. #57271 (Han Fei). #57699 (Han Fei).
- 분산 테이블에 대한 삽입이 업데이트된 클러스터 구성을 올바르게 처리하도록 개선했습니다. 클러스터 노드 목록이 동적으로 업데이트되면 분산 테이블의 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에 연결할 때 읽기 전용 플래그를 지원하도록 추가했습니다(#53749 수정). #57479 (Mikhail Koviazin).
- “No such file or directory”로 인해 분산 전송이 멈출 수 있는 문제를 수정했습니다(디스크에서 Batch를 복구하는 중).
system.distribution_queue의error_count와 관련된 잠재적 문제를 수정했습니다(distributed_directory_monitor_max_sleep_time_ms가 5분을 초과하는 경우). async INSERT 실패를 추적하기 위한 profile 이벤트DistributedAsyncInsertionFailures를 도입했습니다. #57480 (Azat Khuzhin). MaterializedPostgreSQL에서 PostgreSQL 생성 컬럼과 컬럼 기본값을 지원합니다(실험적 기능). #40449를 해결했습니다. #57568 (Kseniia Sumarokova).- 서버를 재시작하지 않고도 일부 파일 시스템 캐시 구성 설정 변경을 적용할 수 있습니다. #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로 변환하는 기능과 바이너리 산술 연산을 허용합니다. #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). - 호환 가능한 모든 프레디케이트를 재귀적으로 가져올 수 있도록 외부 데이터베이스용 쿌리 변환을 수정하고 개선했습니다. #57888 (flynn).
- 파일 시스템 캐시 크기를 동적으로 다시 로드할 수 있도록 지원합니다. #57866를 해결합니다. #57897 (Kseniia Sumarokova).
- SIGRTMIN이 차단된 스레드에 대해
system.stack_trace를 올바르게 지원합니다(이러한 스레드는 Apache rdkafka와 같은 품질이 낮은 외부 라이브러리에서 발생할 수 있습니다). #57907 (Azat Khuzhin). 또한 불필요하게storage_system_stack_trace_pipe_read_timeout_ms를 기다리지 않도록, 차단되지 않은 경우에만 스레드에 시그널을 보냅니다. #58136 (Azat Khuzhin). - quorum 삽입 검사 시 Keeper 장애를 허용합니다. #57986 (Raúl Marín).
- system.asynchronous_metrics에 최대 RSS(피크 RSS) (
MemoryResidentMax) 메트릭을 추가했습니다. #58095 (Azat Khuzhin). - 이 PR을 통해 기본값이 아닌 경우에도 Region을 명시하지 않고 S3 스타일 링크(
https://및s3://)를 사용할 수 있습니다. 또한 사용자가 잘못된 Region을 지정한 경우 올바른 Region도 찾아냅니다. #58148 (Yarik Briukhovetskyi). clickhouse-format --obfuscate는 설정, MergeTreeSettings, 시간대를 인식하고 해당 이름을 변경하지 않고 유지합니다. #58179 (Alexey Milovidov).ZipArchiveWriter에 명시적finalize()함수를 추가했습니다.ZipArchiveWriter의 지나치게 복잡한 코드를 단순화했습니다. 이 변경으로 #58074가 해결되었습니다. #58202 (Vitaly Baranov).- 동일한 경로를 사용하는 cache가 동일한 cache 객체를 사용하도록 했습니다. 이 동작은 이전부터 있었지만 23.4에서 깨졌습니다. 동일한 경로를 사용하는 이러한 cache들의 cache 설정 집합이 서로 다르면 허용되지 않으며, 예외가 발생합니다. #58264 (Kseniia Sumarokova).
- 병렬 레플리카(실험적 기능): 더 간편한 설정 #57542 (Igor Nikonov).
- 병렬 레플리카(실험적 기능): announcement 응답 처리 방식 개선 #57749 (Igor Nikonov).
- 병렬 레플리카(실험적 기능):
ParallelReplicasReadingCoordinator에서min_number_of_marks를 더 충실히 반영합니다 #57763 (Nikita Taranov). - 병렬 레플리카(실험적 기능): IN (서브쿼리)에서는 병렬 레플리카를 비활성화합니다 #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 빠른 테스트는 이제 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).
dictionary테이블 함수를 통한 딕셔너리 ACL 우회 방지 #57362 (Salvatore Mesoraca).- 퍼저가 발견한 “non-ready set” 오류의 또 다른 경우를 수정했습니다. #57423 (Nikolai Kochetov).
- PostgreSQL
array_ndims사용 시 발생하던 여러 문제를 수정했습니다. #57436 (Ryan Jacobs). - 쓰기 잠금 timeout 후 RWLock 불일치 수정 #57454 (Vitaly Baranov). 쓰기 잠금 timeout 후 RWLock 불일치 재수정 #57733 (Vitaly Baranov).
- 수정: view chain으로 푸시를 구성할 때 임시 컬럼을 제외하지 않도록 수정 #57461 (Yakov Olkhovskiy).
- MaterializedPostgreSQL (실험 기능 관련 이슈): 이슈 #41922 수정, #41923 테스트 추가 #57515 (Kseniia Sumarokova).
- 복제된 액세스 엔터티 관리 시 grant/revoke 쿼리에서 ON CLUSTER 절을 무시합니다. #57538 (MikhailBurdukov).
- clickhouse-local 충돌을 수정했습니다 #57553 (Nikolay Degterinsky).
- 해시 조인 수정. #57564 (vdimir).
- PostgreSQL 소스의 잠재적 오류 수정 #57567 (Kseniia Sumarokova).
- 중첩된 LowCardinality에 대한 Hash JOIN의 타입 보정 문제를 수정했습니다. #57614 (vdimir).
system.stack_trace에서 병렬 읽기가 발생하지 않도록 올바르게 제한하여 멈춤 현상을 방지합니다. #57641 (Azat Khuzhin).- 희소 컬럼을
any(...) RESPECT NULL로 집계할 때 발생하는 오류를 수정했습니다 #57710 (Azat Khuzhin). - 단항 연산자 파싱 문제 수정 #57713 (Nikolay Degterinsky).
- 실험적 테이블 엔진
MaterializedPostgreSQL의 의존성 로딩 문제를 수정했습니다. #57754 (Kseniia Sumarokova). - 연결이 끊긴 노드에 대한 BACKUP/RESTORE ON CLUSTER의 재시도 문제를 수정했습니다 #57764 (Vitaly Baranov).
- 부분적으로 구체화된 프로젝션에서 외부 집계 결과 수정 #57790 (Anton Popov).
*Mapcombinator를 사용하는 집계 함수의 머지 수정 #57795 (Anton Popov).- 버그가 있어
system.kafka_consumers를 비활성화했습니다. #57822 (Azat Khuzhin). - Merge JOIN에서 LowCardinality 키 지원 문제를 수정했습니다. #57827 (vdimir).
- 샘플 블록과 관련된
InterpreterCreateQuery수정입니다. #57855 (Maksim Kita). - PostgreSQL의 이름이 지정된 컬렉션에서
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).
- 리터럴 alias의 오분류 수정 #57988 (Chen768959).
- Keeper의 잘못된 전처리 문제를 수정했습니다 #58069 (Antonio Andelic).
UTF32Encoding과 관련된Poco라이브러리의 정수 오버플로우 문제를 수정했습니다 #58073 (Andrey Fedotov).- 큰 정수 값을 갖는 스칼라 서브쿼리가 있을 때 발생하던 병렬 레플리카(실험적 기능) 문제를 수정했습니다 #58118 (Alexey Milovidov).
- 범위를 벗어나는
DateTime값에 대한accurateCastOrNull문제를 수정했습니다 #58139 (Andrey Zvonov). - MergeTree의 wide part에서 서브컬럼을 읽는 중 발생할 수 있는
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. 프레젠테이션, 동영상
하위 호환되지 않는 변경 사항
- 기본
default사용자에 대해 ClickHouse 서버 설정 파일에서access_management(SQL 쿼리를 통한 사용자 관리)와named_collection_control(SQL 쿼리를 통한 명명된 컬렉션 관리)이 기본적으로 활성화되었습니다. 이로써 #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이 없는 시/월도 parse할 수 있습니다. 예를 들어 이제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가 해결되었습니다.Decimal인수와 함께 이 함수를 materialized view 또는 프로젝션 내부에서 사용한 경우 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). - 시스템 테이블(system table)
blob_storage_log를 추가했습니다. 이를 통해 S3 및 기타 객체 스토리지에 기록되는 모든 데이터에 대한 감사 추적이 가능합니다. #52918 (vdimir). - 통계를 사용해 prewhere 조건의 순서를 더 적절하게 정합니다. #53240 (Han Fei).
- Keeper 프로토콜에 압축(Compression) 지원이 추가되었습니다. ClickHouse 측에서는
zookeeper섹션 내의use_compression플래그를 사용하여 이를 활성화할 수 있습니다. 압축은 ClickHouse Keeper에서만 지원되며 Apache ZooKeeper에서는 지원되지 않으므로 유의하십시오. #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와 유사한fromDaysSinceYearZero함수가 추가되었습니다. 예를 들어SELECT fromDaysSinceYearZero(739136)는2023-09-08을 반환합니다. #56088 (Joanna Hulboj). - ClickHouse를 사용하지 않고도 백업을 확인하고 백업에서 정보를 추출할 수 있는 외부 Python 도구가 추가되었습니다. #56268 (Vitaly Baranov).
preferred_optimize_projection_name라는 새로운 설정을 추가했습니다. 이 값을 비어 있지 않은 문자열로 설정하면, 가능할 경우 모든 후보 중에서 선택하는 대신 지정된 프로젝션을 사용합니다. #56309 (Yarik Briukhovetskyi).- leader 역할을 넘기거나 내려놓기 위한 4-letter 명령을 추가했습니다 (https://github.com/ClickHouse/ClickHouse/issues/56352). #56354 (Pradeep Chhetri). #56620 (Pradeep Chhetri).
- 입력 배열에서 k개의 요소를 샘플로 반환하는 새로운 SQL 함수
arrayRandomSample(arr, 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). fileCluster테이블 함수를 추가했습니다. 공유 파일 시스템(NFS 등)을user_files디렉터리에 마운트한 경우 유용합니다. #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를 Experimental 상태에서 해제하고
allow_experimental_alter_materialized_view_structure설정을 지원 중단 예정으로 지정합니다. #15206를 수정합니다. #57311 (alesapin). join_algorithm설정이 지정된 순서를 따르도록 개선했습니다 #51745 (vdimir).- Protobuf 형식에 well-known Protobuf 타입 지원을 추가했습니다. #56741 (János Benjamin Antal).
성능 개선
- S3와 상호 작용할 때 적응형 timeout을 사용합니다. 첫 번째 시도는 짧은 전송 및 수신 timeout으로 수행됩니다. #56314 (Sema Checherinda).
max_concurrent_queries의 기본값을 100에서 1000으로 높였습니다. 이는 연결된 클라이언트가 매우 많고 이들이 데이터를 천천히 보내거나 받는 상황에서 서버가 CPU에 의해 제한되지 않거나, CPU 코어 수가 100개를 초과하는 경우에 적절합니다. 또한 동시성 제어를 기본적으로 활성화하고, 전체 쿼리 처리 스레드 수를 CPU 코어 수의 2배로 설정합니다. 이는 동시 쿼리가 매우 많은 시나리오에서 성능을 개선합니다. #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). - 이제 원격 테이블에서도 데이터가 페이지 캐시(page cache)에 있을 때는 동기식으로 읽습니다(로컬 테이블에서와 동일한 방식입니다). 이 방식은 더 빠르고, 스레드 풀(thread pool) 내부 동기화가 필요 없으며, 로컬 FS에서
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).- 집계가 포함되고 stream 수가 많은 쿼리는 실행 계획을 구성하는 동안 메모리를 더 적게 사용합니다. #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).- 실험 단계의 전문 인덱스에서 포스팅 리스트가 이제 압축되어 크기가 10~30% 감소합니다. #56226 (Harry Lee).
- 백업 처리에서
BackupEntriesCollector를 병렬화했습니다. #56312 (Kseniia Sumarokova).
개선 사항
- 새로운
MergeTree설정add_implicit_sign_column_constraint_for_collapsing_engine이 추가되었습니다(기본적으로 비활성화됨). 이 설정을 활성화하면CollapsingMergeTree테이블에 암시적 CHECK 제약 조건이 추가되어Sign컬럼 값이 -1 또는 1만 되도록 제한됩니다. #56701. #56986 (Kevin Mingtarja). - 재시작하지 않고도 스토리지 구성에 새 디스크를 추가할 수 있습니다. #56367 (Duc Canh Le).
- 동일한 alter 쿼리에서 인덱스를 생성하고 구체화하는 기능을 지원하며, 동일한 쿼리에서 “modify TTL” 및 “materialize TTL”도 지원합니다. #55651을 해결했습니다. #56331 (flynn).
- 무작위 변형이 가해진 원본 JSON 문자열 버전을 포함하는 행을 반환하는 새 테이블 함수
fuzzJSON을 추가했습니다. #56490 (Julia Kartseva). Merge엔진은 기반 테이블의 행 정책에 따라 레코드를 필터링하므로Merge테이블에 별도의 행 정책을 만들 필요가 없습니다. #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). - 새 인코딩을 지원하는 release-13.0.0으로 Arrow 라이브러리를 업데이트했습니다. #44505를 해결합니다. #54800 (Kruglov Pavel).
- DDL 엔트리의 호스트 목록에서 로컬 IP 주소를 찾을 때 모든 네트워크 인터페이스를 가져오기 위해 수행하던 비용이 큰 시스템 호출을 제거해 ON CLUSTER 쿼리 성능을 개선했습니다. #54909 (Duc Canh Le).
- 스레드를 쿼리 또는 사용자에 연결하기 전에 할당된 메모리 계산이 올바르게 이루어지도록 수정했습니다. #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에서 비상수 쿼리 문자열을 처리하는 방식이 수정되었습니다. 또한 쿼리를 parse할 수 없을 때 예외를 발생시키는 대신 NULL을 반환하는 두 함수의OrNull변형도 추가되었습니다. #56327 (Robert Schulze). - 내부 테이블이 삭제된 materialized view도 백업 실패 없이 백업할 수 있도록 허용합니다. #56387 (Kseniia Sumarokova).
system.replicas에 대한 쿼리는 특정 컬럼을 조회할 때 ZooKeeper로 요청을 보냅니다. 테이블이 수천 개에 달하면 이러한 요청이 ZooKeeper에 상당한 부하를 줄 수 있습니다.system.replicas에 대한 동시 쿼리가 여러 개 있으면 동일한 요청이 여러 번 반복됩니다. 이번 변경은 동시 쿼리의 요청을 “중복 제거”하는 것입니다. #56420 (Alexander Gololobov).- 외부 데이터베이스를 쿼리할 때 사용하는 MySQL 호환 쿼리로의 변환을 수정했습니다. #56456 (flynn).
KeeperMap엔진을 사용한 테이블 백업 및 복원 지원이 추가되었습니다. #56460 (Antonio Andelic).- CompleteMultipartUpload의 404 응답은 다시 확인해야 합니다. 클라이언트에서 timeout 또는 기타 네트워크 오류가 발생했더라도 작업은 server에서 수행되었을 수 있습니다. 이후 CompleteMultipartUpload를 다시 시도하면 404 응답을 받습니다. 객체 키가 존재하면 해당 작업은 성공한 것으로 간주됩니다. #56475 (Sema Checherinda).
- 기본적으로 HTTP OPTIONS 메서드를 활성화합니다. 이렇게 하면 웹 브라우저에서 ClickHouse에 요청하기가 더 간편해집니다. #56483 (Alexey Milovidov).
dns_max_consecutive_failures의 값이 #46550에서 실수로 변경되어, 이를 되돌린 뒤 더 적절한 값으로 조정했습니다. 또한 HTTP keep-alive timeout도 프로덕션 환경에 맞는 합리적인 값으로 늘렸습니다. #56485 (Alexey Milovidov).- 기준 백업을 지연 로드하도록 합니다(필요해질 때까지 기준 백업은 로드되지 않습니다). 또한 백업 관련 로그 메시지와 profile events도 일부 추가합니다. #56516 (Vitaly Baranov).
- 설정
query_cache_store_results_of_queries_with_nondeterministic_functions(값은false또는true)은 Obsolete로 표시되었습니다. 이 설정은 3개의 값을 갖는 enum인query_cache_nondeterministic_function_handling설정으로 대체되었으며, 이 설정은 쿼리 캐시가 비결정적 함수를 포함한 쿼리를 어떻게 처리할지 제어합니다. a) 예외를 발생시킵니다(기본 동작), b) 비결정적 쿼리 결과도 그대로 저장합니다, 또는 c) 무시합니다. 즉, 예외를 발생시키지 않고 결과도 캐시에 저장하지 않습니다. #56519 (Robert Schulze). - JOIN ON 절에서
is null검사와의 등가 조건을 재작성합니다. 실험적 분석기 전용 기능입니다. #56538 (vdimir). - 함수
concat가 이제 임의의 인수 타입을 지원합니다(기존에는 String 및 FixedString 인수만 지원). 이에 따라 MySQL의concat구현과 더 유사하게 동작합니다. 예를 들어, 이제SELECT concat('ab', 42)는ab42를 반환합니다. #56540 (Serge Klochkov). - config의 ‘named_collection’ 섹션 또는 SQL로 생성한 이름이 지정된 컬렉션에서 캐시 구성을 가져올 수 있게 했습니다. #56541 (Kseniia Sumarokova).
- PostgreSQL 데이터베이스 엔진: postgres 연결에 실패한 경우 오래된 테이블을 제거하는 동작이 지나치게 공격적이지 않도록 개선했습니다. #56609 (jsc0218).
- URL이 올바르지 않을 때 PG에 연결하는 데 시간이 너무 오래 걸려, 관련 쿼리가 그 상태로 멈춰 있다가 취소되었습니다. #56648 (jsc0218).
- Keeper 개선: Keeper에서 압축 로그를 기본적으로 비활성화합니다. #56763 (Antonio Andelic).
- 구성 옵션
wait_dictionaries_load_at_startup을 추가합니다. #56782 (Vitaly Baranov). - 이전 ClickHouse 버전에는 잠재적인 취약점이 있었습니다. 사용자가 연결한 후 “interserver secret” 방식으로 인증을 시도했지만 실패한 경우, 서버는 연결을 즉시 종료하지 않고 클라이언트에서 남아 있는 패킷을 계속 수신하면서 이를 무시했습니다. 이러한 패킷은 무시되지만 여전히 파싱되며, 다른 알려진 취약점이 있는 압축 방식(compression method)을 사용할 경우 인증 없이도 해당 취약점이 악용될 수 있습니다. 이 문제는 https://twitter.com/malacupa가 ClickHouse Bug Bounty Program을 통해 발견했습니다. #56794 (Alexey Milovidov).
- part를 가져오는 작업은 해당 part가 원격 레플리카에 완전히 커밋될 때까지 대기합니다. PreActive 상태의 part는 전송하지 않는 것이 바람직합니다. zero-copy의 경우 이는 필수 제약 사항입니다. #56808 (Sema Checherinda).
- 실험적
MaterializedPostgreSQL사용 시 발생할 수 있는 PostgreSQL 논리적 복제 변환 오류를 해결했습니다. #53721 (takakawa). - 사용자 수준 설정
alter_move_to_space_execute_async를 구현하여ALTER TABLE ... MOVE PARTITION|PART TO DISK|VOLUME쿼리를 비동기적으로 실행할 수 있게 했습니다. 백그라운드 실행 풀의 크기는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 스레드 풀에 유용합니다. #56958 (Alexey Milovidov).
- 구성 파일에 PostgreSQL 테이블 엔진 관련 설정을 추가했습니다. 해당 설정에 대한 검사를 추가했습니다. 새로 추가된 설정 관련 문서도 보강했습니다. #56959 (Peignon Melvyn).
- 이제 함수
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). - server의 종료 코드는 예외 코드에 해당합니다. 예를 들어, 메모리 제한으로 인해 server를 시작할 수 없으면 241 = MEMORY_LIMIT_EXCEEDED 코드로 종료됩니다. 이전 버전에서는 예외 발생 시 종료 코드가 항상 70 = Poco::Util::ExitCode::EXIT_SOFTWARE였습니다. #57153 (Alexey Milovidov).
functionalC++ 헤더에 있는 스택 프레임은 디맹글링하거나 심볼화하지 않습니다. #57201 (Mike Kot).- HTTP server 페이지
/dashboard에서 이제 여러 개의 선이 있는 차트를 지원합니다. #57236 (Sergei Trifonov). max_memory_usage_in_client명령줄 옵션은 접미사(K, M, G 등)가 붙은 문자열 값을 지원합니다. #56879를 해결합니다. #57273 (Yarik Briukhovetskyi).- Intel QPL(
DEFLATE_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).
- 큰 트랜슬레이션 유닛이 없는지 자동으로 검사하는 기능을 추가했습니다. #56559 (Alexey Milovidov).
- 단일 바이너리 배포판의 크기를 줄였습니다. 이로써 #55181이 해결되었습니다. #56617 (Alexey Milovidov).
- 각 빌드 후 모든 트랜슬레이션 유닛과 바이너리 파일의 크기 정보가 ClickHouse Cloud의 CI 데이터베이스로 전송됩니다. 이로써 #56107이 해결되었습니다. #56636 (Alexey Milovidov).
- “Apache Arrow” 라이브러리의 일부 파일은 빌드 캐시와 관계없이 항상 다시 빌드되고 있었습니다(Arrow 형식 파싱처럼 비필수 기능에만 사용됨). 이를 수정했습니다. #56657 (Alexey Milovidov).
- 버전 관련 자동 생성 소스 파일에 의존하는 트랜슬레이션 유닛이 다시 컴파일되지 않도록 했습니다. #56660 (Alexey Milovidov).
- 링커 호출의 tracing 데이터가 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).
버그 수정(공식 안정 릴리스에서 사용자에게 드러나는 오동작)
- 실험적 분석기 수정 - 삽입 대상 테이블을 참조하는 하위 쿼리가 포함된 SELECT로 삽입할 때는 삽입 블록만 처리하도록 수정했습니다. #50857 (Yakov Olkhovskiy).
str_to_map함수의 버그를 수정했습니다. #56423 (Arthur Passos).- Keeper
reconfig: 리더 역할을 넘기거나 인수하기 전에 타임아웃 추가 #53481 (Mike Kot). - 그레이스 해시 조인과 필터 푸시다운에서 잘못된 헤더 수정 #53922 (vdimir).
- 테이블 함수 기반 테이블인 경우 시스템 테이블에서 SELECT할 수 있습니다. #55540 (MikhailBurdukov).
- RFC: 분산 쿼리에서 LIMIT BY 사용 시 “source stream에서 컬럼 X를 찾을 수 없음” 오류 수정 #55836 (Azat Khuzhin).
- 백그라운드에서 클라이언트를 실행할 때 ‘Cannot read from file:’ 오류가 발생하던 문제를 수정했습니다 #55976 (Kruglov Pavel).
- 잘못된 send_logs_level 설정으로 인해 clickhouse-local이 종료되는 문제 수정 #55994 (Kruglov Pavel).
- 매개변수화된 뷰에서 EXPLAIN AST 관련 버그 수정 #56004 (SmitaRKulkarni).
- 시작 시 테이블 로딩 중 발생하는 충돌을 수정했습니다 #56232 (Nikolay Degterinsky).
- 명시적 쿼리를 사용하는 ClickHouse 소스 Dictionaries를 수정했습니다 #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 (李扬).
- 메모리 할당 실패와 관련된 드문 경쟁 상태 문제를 수정했습니다 #56303 (alesapin).
flatten_nested및data_type_default_nullable사용 시 발생하던 백업 복원 문제 수정 #56306 (Kseniia Sumarokova).- Object(JSON) 유형의 컬럼을 추가할 때 발생하던 충돌을 수정했습니다 #56307 (Nikita Mikhaylov).
- filterPushDown 충돌 수정 #56380 (vdimir).
- 구체화된 뷰와 삭제된 원본 테이블이 있는 경우 백업에서 복원할 때 발생하던 문제 수정 #56383 (Kseniia Sumarokova).
- Kerberos 초기화 중 발생하던 segfault 수정 #56401 (Nikolay Degterinsky).
- T64에서 발생한 버퍼 오버플로우를 수정했습니다 #56434 (Alexey Milovidov).
- FINAL에서 널 허용 기본 키(primary key) 수정 (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).
- 비어 있는 이름이 지정된 컬렉션 문제 수정 #56494 (Nikolay Degterinsky).
- 프로젝션 분석 관련 두 가지 경우를 수정했습니다. #56502 (Amos Bird).
- 쿼리 캐시에서 별칭 처리 문제 수정 #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으로 삽입할 때 발생하던 ‘mutex lock failed: Invalid argument’ 문제를 수정했습니다 #56710 (Kruglov Pavel).
- optimistic 경로의 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).- 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).
- 널 허용 MATERIALIZED 컬럼이 있는 ALTER UPDATE 후 발생하던 segfault 수정 #57147 (Nikolay Degterinsky).
- 부분적으로 구체화된 일반 프로젝션에서 잘못된 JOIN 실행 계획 최적화를 수정했습니다 #57196 (Amos Bird).
- 컬럼 설명을 비교할 때는 comment를 무시합니다 #57259 (Antonio Andelic).
- 모든 경우에서
ReadonlyReplica메트릭을 수정 #57267 (Antonio Andelic). - 백그라운드 머지가 cache 내 임시 데이터 저장소를 올바르게 사용하도록 수정했습니다 #57275 (vdimir).
- changelog 및 스냅샷 관련 Keeper 수정 #57299 (Antonio Andelic).
- 호스트명이 변경된 경우 완료된 ON CLUSTER 작업을 무시 #57339 (Alexander Tokmakov).
- MergeTree 뮤테이션이 원본 파트의 인덱스 세분화 수준을 재사용합니다 #57352 (Maksim Kita).
- FS 캐시: 백그라운드 다운로드 제한 추가 #57424 (Kseniia Sumarokova).
ClickHouse 릴리스 23.10, 2023-11-02. 프레젠테이션, 동영상
하위 호환되지 않는 변경 사항
- 손상된 데이터 파트를 자동으로 제거하는 옵션이 더 이상 제공되지 않습니다. 이로써 #55174가 해결되었습니다. #55184 (Alexey Milovidov). #55557 (Jihyuk Bok).
- 더 이상 사용되지 않는 인메모리 데이터 파트는 write-ahead log에서 더 이상 읽을 수 없습니다. 이전에 인메모리 파트를 구성했다면 업그레이드 전에 제거해야 합니다. #55186 (Alexey Milovidov).
- Meilisearch와의 통합을 제거했습니다. 이유: 기존 0.18 버전에서만 호환되었기 때문입니다. 최신 Meilisearch 버전에서는 프로토콜이 변경되어 더 이상 작동하지 않습니다. 참고: 이 기능을 다시 복구하는 데 도움을 주시면 감사하겠습니다. #55189 (Alexey Milovidov).
- directory monitor 개념의 이름을 background INSERT로 변경했습니다. 모든
*directory_monitor*설정이distributed_background_insert*로 이름이 변경되었습니다. 하위 호환성은 유지됩니다 (기존 설정이 alias로 추가되었기 때문입니다). #55978 (Azat Khuzhin). - 클라이언트 측에 설정된
send_timeout을 서버 측의receive_timeout으로 해석하지 않으며, 반대의 경우도 마찬가지입니다. #56035 (Azat Khuzhin). - 단위가 서로 다른 시간 인터벌을 비교하면 예외가 발생합니다. 이로써 #55942가 해결되었습니다. 이전에는 단위와 무관하게 내부 숫자값을 비교하는 동작에 간헐적으로 의존했을 수 있습니다. #56090 (Alexey Milovidov).
- 실험적
S3Queue테이블 엔진을 완전히 재작성했습니다. ZooKeeper에 정보를 저장하는 방식을 변경해 ZooKeeper 요청 수를 줄였고, 상태가 바뀌지 않을 것이 확실한 경우에는 ZooKeeper 상태 캐싱을 추가했으며, S3 폴링 프로세스를 덜 공격적으로 동작하도록 개선했습니다. 또한 추적된 파일에 대한 TTL 및 max set 유지 방식을 변경했으며, 이제 이는 백그라운드 프로세스로 처리됩니다.system.s3queue및system.s3queue_log테이블도 추가했습니다. 이로써 #54998가 해결되었습니다. #54422 (Kseniia Sumarokova). - HTTP endpoint의 임의 경로는 더 이상
/queryendpoint에 대한 요청으로 해석되지 않습니다. #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).- 네이티브 프로토콜을 통해 외부 데이터를 사용하는 비동기 삽입을 지원합니다. 이전에는 데이터가 쿼리에 인라인된 경우에만 작동했습니다. #54730 (Anton Popov).
- 시각화를 위해 데이터를 다운샘플링하는 Largest-Triangle-Three-Buckets 알고리즘을 사용하는 집계 함수
lttb가 추가되었습니다. #53145 (Sinan). CHECK TABLE쿼리의 성능과 사용성이 개선되었습니다(진행 상황 업데이트를 전송하고, 취소할 수 있습니다).CHECK TABLE ... PART 'part_name'를 사용해 특정 파트를 검사할 수 있도록 지원합니다. #53404 (vdimir).- 함수
jsonMergePatch가 추가되었습니다. JSON 데이터를 문자열로 다룰 때 이 함수는 이러한 문자열(JSON 객체)을 병합해, 단일 JSON 객체를 포함하는 하나의 문자열로 만들 수 있게 합니다. #54364 (Memo). - Kusto Query Language 방언 지원의 두 번째 부분입니다. 1단계 구현이 병합되었습니다. #42510 (larryluogit).
- 입력 배열에서 k개의 요소를 표본 추출해 반환하는 새로운 SQL 함수
arrayRandomSample(arr, k)가 추가되었습니다. 이전에는 이와 비슷한 기능을 더 불편한 구문으로만 구현할 수 있었습니다. 예: “SELECT arrayReduce(‘groupArraySample(3)’, range(10))”. #54391 (itayisraelov). -ArgMin/-ArgMax집계 조합자를 도입해 최솟값/최댓값에 대해서만 집계할 수 있게 했습니다. 사용 사례 중 하나는 #54818에서 확인할 수 있습니다. 이 PR에서는 조합자도 전용 폴더로 재구성했습니다. #54947 (Amos Bird).SYSTEM DROP SCHEMA FORMAT CACHE [FOR Protobuf]를 사용해 Protobuf 형식용 캐시를 삭제할 수 있습니다. #55064 (Aleksandr Musorin).- 외부 HTTP Basic 인증기를 추가했습니다. #55199 (Aleksei Filatov).
- 부호 없는 정수의 바이트를 역순으로 바꾸는 함수
byteSwap이 추가되었습니다. 이는 IPv4처럼 내부적으로 부호 없는 정수로 표현되는 타입의 값을 뒤집는 데 특히 유용합니다. #55211 (Priyansh Agrawal). - SQL 쿼리 문자열의 포맷된 버전(여러 줄로 표시될 수 있음)을 반환하는 함수
formatQuery가 추가되었습니다. 또한 동일한 기능을 수행하지만 반환되는 문자열에 줄바꿈이 포함되지 않는 함수formatQuerySingleLine도 추가되었습니다. #55239 (Salvatore Mesoraca). - ELF 실행 파일/라이브러리/객체 파일에서 디버그 심볼을 읽는
DWARF입력 형식이 추가되었습니다. #55450 (Michael Kolupaev). - RabbitMQ, NATS 및 FileLog 엔진에서 파싱되지 않은 레코드와 오류를 저장할 수 있게 되었습니다. ClickHouse가 새 레코드를 파싱하지 못할 때 채워지는 가상 컬럼
_error와_raw_message(NATS 및 RabbitMQ용),_raw_record(FileLog용)를 추가했습니다. 이 동작은kafka_handle_error_mode와 유사하게 NATS의 경우 스토리지 설정nats_handle_error_mode, RabbitMQ의 경우rabbitmq_handle_error_mode, FileLog의 경우handle_error_mode로 제어됩니다.default로 설정하면 ClickHouse가 레코드를 파싱하지 못할 때 예외가 발생하고,stream으로 설정하면 오류와 원시 레코드가 가상 컬럼에 저장됩니다. #36035를 해결합니다. #55477 (Kruglov Pavel). - Keeper 클라이언트 개선: 특정 경로 아래의 모든 자식 노드 수를 반환하는
get_all_children_number command명령을 추가했습니다. #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).
성능 개선
- 병렬 스트림 처리를 가능하게 하기 위해 윈도우 함수를 평가한 후에도 스트림 수를 유지하는 옵션
query_plan_preserve_num_streams_after_window_functions을 추가했습니다. #50771 (frinkr). - 데이터가 작을 경우 더 많은 스트림을 해제합니다. #53867 (Jiebin Sun).
- 직렬화 전에 RoaringBitmaps를 최적화합니다. #55044 (UnamedRus).
- 역방향 인덱스의 포스팅 리스트는 이제 내부 비트맵에 가능한 한 가장 작은 표현 방식을 사용하도록 최적화되었습니다. 데이터의 반복성에 따라 역방향 인덱스의 공간 사용량이 크게 줄어들 수 있습니다. #55069 (Harry Lee).
- Context 잠금 경합을 해결하여 짧게 실행되는 다수의 동시 쿼리에서 성능이 크게 향상되었습니다. #55121 (Maksim Kita).
- 역색인 생성 성능을 30% 개선했습니다. 이는
std::unordered_map을absl::flat_hash_map으로 대체하여 달성했습니다. #55210 (Harry Lee). - 행 그룹 수준의 ORC filter push down을 지원합니다. #55330 (李扬).
- 임시 파일이 많은 경우 외부 집계 성능을 개선했습니다. #55489 (Maksim Kita).
- 마크를 반복해서 로드하지 않도록, 보조 인덱스용 마크 캐시의 기본 크기를 적절하게 설정했습니다. #55654 (Alexey Milovidov).
- 스킵 인덱스를 읽을 때 인덱스 그래뉼을 불필요하게 재구성하지 않도록 합니다. 이는 #55653를 해결합니다. #55683 (Amos Bird).
- 실행 중 set 내 CAST 함수를 캐시해, set 요소의 타입이 컬럼 타입과 정확히 일치하지 않을 때
IN함수의 성능을 개선했습니다. #55712 (Duc Canh Le). ColumnVector::insertMany및ColumnVector::insertManyFrom의 성능이 향상되었습니다. #55714 (frinkr).- 다음 행의 키 위치를 예측해 비교 횟수를 줄임으로써 맵 첨자 연산을 최적화했습니다. #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).
- 실험적 역방향 인덱스는 일치하는 항목이 너무 많은 토큰(즉, 포스팅 리스트의 행 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_watchesSet을 순회하지 않도록 합니다. #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, Date32, DateTime64, Integer 또는 Float를 Date, Date32, DateTime 또는 DateTime64로 변환할 때 오버플로우 동작을 제어하는 설정
date_time_overflow_behavior가 도입되었습니다. 가능한 값은ignore,throw,saturate입니다. #55696 (Andrey Zvonov). ALTER TABLE ... ACTION PARTITION [ID] {parameter_name:ParameterType}에 대한 쿼리 매개변수 지원을 추가했습니다. #49516을 병합했습니다. #49449를 종료했습니다. #55604 (alesapin).- EXPLAIN에서 processor ID를 더 깔끔하게 출력합니다. #48852 (Vlad Seliverstov).
- lifetime 필드가 있는 direct 딕셔너리를 생성하려고 하면 생성 시 거부됩니다(direct 딕셔너리에서는 lifetime이 의미가 없기 때문입니다). 수정: #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).
- 현재 프로젝션 분석은 쿼리 계획(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_include_virtual_columns설정이 추가되어, 테이블의 가상 컬럼을DESCRIBE쿼리 결과에 포함할 수 있게 되었습니다.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). - 결과 행 수가 0이고 예외가 발생한 경우, Clickhouse-client는 “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_columns2개가 추가되었습니다. #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_json함수와의 호환성을 유지할 수 있으며, gluten에도 유용합니다. #55956 (李扬). - 함수
(add|sub)Date가 이제 문자열로 표현된 날짜 인수를 지원합니다. 예: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). queued.min.messages의 구성 값 최대 한도를 설정해 Kafka에서 데이터 가져오기를 시작할 때 발생하는 문제를 방지했습니다. #56121 (Stas Morozov).- SQL 함수
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).
버그 수정(공식 안정 릴리스에서 사용자에게 드러나는 오동작)
- mutation에서 역인덱스 파일의 하드링크 생성을 수행하지 않습니다 #47663 (cangyin).
- alternation이 포함된 pattern으로 인해
match함수(regex)에서 잘못된 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의 ctor에서 예외가 발생할 경우 적절히 정리되도록 수정 #55103 (Alexander Gololobov).
- LDAP에 할당된 Role 업데이트 시 발생하는 데드락 수정 #55119 (Julian Maicher).
- 내부 예외에 대해서는 오류 통계를 업데이트하지 않도록 변경 #55128 (Robert Schulze).
- 백업에서 발생하는 교착 상태 수정 #55132 (alesapin).
- 스토리지 Iceberg 파일 가져오기 오류 수정 #55144 (Kseniia Sumarokova).
- set의 추가 컬럼에 대한 파티션 프루닝을 수정했습니다. #55172 (Amos Bird).
- 테이블에 적응형 세분화 수준이 적용된 경우 ALTER UPDATE 쿼리에서 스킵 인덱스가 다시 계산되도록 수정 #55202 (Duc Canh Le).
- fs cache의 백그라운드 다운로드 문제 수정 #55252 (Kseniia Sumarokova).
- 버퍼 마무리 처리가 누락된 경우 압축기에서 발생할 수 있는 메모리 누수를 방지합니다 #55262 (Azat Khuzhin).
- 희소 컬럼에서 함수 실행 문제 수정 #55275 (Azat Khuzhin).
- SummingMergeTree에서 SELECT FINAL 실행 시 Nested가 잘못 머지되던 문제 수정 #55276 (Azat Khuzhin).
- S3 기반의 복제된 MergeTree에서 zero-copy 없이 분리된 파티션을 삭제할 수 없던 버그를 수정했습니다 #55309 (alesapin).
- MergeSortingPartialResultTransform의 크래시 문제를 수정했습니다(
remerge후 청크가 0개가 되는 경우) #55335 (Azat Khuzhin). - 공유 예외를 throw하는 과정에서 발생한 오류로 인해 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 interface의 불리언 값 표현 수정 #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 핸들러에서 쿼리 매개변수가 작동하지 않던 문제를 수정했습니다 #55521 (Konstantin Bogdanov).
- Values 형식에서 처리되지 않은 데이터 검사 문제 수정 #55527 (Azat Khuzhin).
- MS SQL Server와 연동되는 odbc에서 발생하던 ‘Invalid cursor state’ 문제를 수정했습니다 #55558 (vdimir).
- 최대 실행 시간과 ‘break’ 오버플로우 모드 문제 수정 #55577 (Alexander Gololobov).
- 순환 별칭으로 인해 QueryNormalizer에서 발생하던 충돌을 수정했습니다 #55602 (vdimir).
- 잘못된 최적화를 비활성화하고 테스트를 추가함 #55609 (Alexey Milovidov).
- 병합 #52352 #55621 (Alexey Milovidov).
- Decimal 정렬이 잘못되는 문제를 방지하기 위한 테스트를 추가했습니다 #55662 (Amos Bird).
- 글롭 패턴이 없는 URL을 사용하는 S3 및 Azure Cluster 함수의 진행률 표시줄 수정 #55666 (Kruglov Pavel).
- 쿼리에서 OR 필터 사용 시 가상 컬럼(virtual columns) 필터링 문제 수정(재제출) #55678 (Azat Khuzhin).
- Iceberg 스토리지 관련 수정 및 개선 #55695 (Kruglov Pavel).
- CreatingSetsTransform의 데이터 레이스 문제 수정 (v2) #55786 (Azat Khuzhin).
- precise_float_parsing이 true이면 유효하지 않은 문자열을 float로 파싱할 때 예외를 발생시킵니다 #55861 (李扬).
- CTE에 상태를 유지하는 함수가 포함된 경우 프레디케이트 pushdown을 비활성화합니다 #55871 (Raúl Marín).
FORMAT을 쿼리에서 제거하던 문제를 해결하기 위해 normalize ASTSelectWithUnionQuery를 수정했습니다 #55887 (flynn).- Native ORC 입력 형식에서 발생할 수 있는 세그폴트 수정 시도 #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에서 스키마 레지스트리의 스키마를 가져오는 문제를 수정했습니다 #55991 (Kruglov Pavel).
- Buffer 테이블에서 ALTER와 삽입이 동시에 수행될 때 발생하던 ‘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).
- 설정이 변경된 경우 JSON->JSONEachRow 폴백의 스키마 캐시 수정 #56172 (Kruglov Pavel).
- odbc-bridge에 오류 핸들러 추가 #56185 (Yakov Olkhovskiy).
ClickHouse 릴리스 23.9, 2023-09-28. 프레젠테이션, 동영상
하위 호환되지 않는 변경 사항
- 기본 Prometheus 핸들러에서
status_info구성 옵션과 Dictionaries 상태를 제거했습니다. #54090 (Alexey Milovidov). - 실험적 파트 메타데이터 캐시가 코드베이스에서 제거되었습니다. #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를 사용하면 experimental JSON 타입 없이도 JSON 객체로부터 이름이 지정된 Tuple을 추론할 수 있습니다. 이전에는 experimental JSON 타입이 없으면 JSON 객체를String또는Map으로만 추론할 수 있었지만, 이제는 이름이 지정된 Tuple로도 추론할 수 있습니다. 이렇게 생성된 Tuple 타입에는 스키마 추론 중 데이터 샘플에서 읽은 객체의 모든 키가 포함됩니다. 이는 희소 객체가 없는 구조화된 JSON 데이터를 읽을 때 유용합니다. 이 설정은 기본적으로 활성화되어 있습니다. 2) 설정input_format_json_read_arrays_as_strings를 사용하면 JSON array를String타입 컬럼으로 파싱할 수 있습니다. 이는 서로 다른 타입의 값을 포함하는 배열을 읽는 데 도움이 될 수 있습니다. 3) 설정input_format_json_infer_incomplete_types_as_strings를 사용하면 샘플 데이터에서 타입을 알 수 없는 JSON 키(null/[]/{})에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)이 이제 상수가 아닌 시간대 인수를 지원하게 되었습니다. #53680 (Yarik Briukhovetskyi). ALTER TABLE MODIFY COMMENT지원이 추가되었습니다. 참고: 오래전에 외부 기여자가 이와 비슷한 기능을 추가한 적이 있었지만, 전혀 작동하지 않아 사용자에게 혼란만 주었습니다. 이 변경으로 #36377이 해결되었습니다. #51304 (Alexey Milovidov). 참고: 이 명령은 레플리카 간에 전파되지 않으므로 테이블의 레플리카마다 서로 다른 주석이 있을 수 있습니다.- 새로운 데이터 압축 코덱으로
GCD, 즉 “최대공약수”를 추가했습니다. 이 코덱은 모든 컬럼 값의 GCD를 계산한 다음 각 값을 GCD로 나눕니다. GCD 코덱은 데이터 준비 코덱(Delta 및 DoubleDelta와 유사)으로, 단독으로는 사용할 수 없습니다. 이 코덱은 정수, decimal, date/time 유형의 데이터에 사용할 수 있습니다. GCD 코덱의 적절한 사용 사례는 컬럼 값이 GCD의 배수만큼 변하는(증가/감소하는) 경우입니다. 예를 들어 24 - 28 - 16 - 24 - 8 - 24 (GCD = 4라고 가정)와 같습니다. #53149 (Alexander Nam). - 새로운 타입 별칭 2개인
DECIMAL(P)(DECIMAL(P, 0)의 축약 표기)와DECIMAL(DECIMAL(10, 0)의 축약 표기)이 추가되었습니다. 이로써 ClickHouse는 MySQL의 SQL 방언과의 호환성이 더욱 높아졌습니다. #53328 (Val Doroshchuk). - 모든
BACKUP및RESTORE작업을 추적하는 새 시스템 Log 테이블backup_log가 추가되었습니다. #53638 (Victor Krasnov). - 포맷 설정
output_format_markdown_escape_special_characters가 추가되었습니다(기본값: false). 이 설정은Markdown출력 형식에서!,#,$등의 특수 문자를 이스케이프할지(즉, 앞에 백슬래시를 붙일지 여부)를 제어합니다. #53860 (irenjj). - 함수
decodeHTMLComponent가 추가되었습니다. #54097 (Bharat Nallan). - query_log 테이블에
peak_threads_usage컬럼을 추가했습니다. #54335 (Alexey Gerasimchuck). - clickhouse-client에
SHOW FUNCTIONS지원이 추가되었습니다. #54337 (Julia Kartseva). - MySQL과의 호환성을 위해 별칭
TO_DAYS를 가진 함수toDaysSinceYearZero가 추가되었습니다. 이 함수는0001-01-01부터 경과한 일 수를 반환합니다(프로렙틱 그레고리력 기준). #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로 변환됩니다. 예시:'s3://clickhouse-public-datasets/hits.csv'는'https://clickhouse-public-datasets.s3.amazonaws.com/hits.csv'로 변환됩니다. #54931 (Yarik Briukhovetskyi). - Tuple/맵/배열처럼 깊게 중첩된 타입을 보기 좋게 출력하는 새로운 설정
print_pretty_type_names를 추가했습니다. #55095 (Kruglov Pavel).
성능 개선
- 기본적으로 프리페치를 활성화해 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가 있는 하위 쿼리(subquery)에서 선택된 경우
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).- json 요소를
std::stringstream으로 serialization하는 대신, 이 PR에서는 serialization 결과를ColumnString에 직접 넣도록 시도합니다. #54613 (lgbo). - 테이블이 뷰를 통해 접근되는 경우, MergeTree 테이블에서 해당 순서로 데이터를 읽기 위한 ORDER BY 최적화를 활성화했습니다. #54628 (Vitaly Baranov).
GeneratorJSONPath를 재사용하고 여러 shared pointer를 제거해 JSON SQL 함수의 성능을 개선했습니다. #54735 (lgbo).- Keeper는 성능 향상을 위해 플러시 요청을 배치로 묶어 처리하려고 합니다. #53049 (Antonio Andelic).
- 이제
INFILE 'glob_expression'사용 시clickhouse-client가 파일을 병렬로 처리합니다. #54218을 해결합니다. #54533 (Max K.). IN함수 오른쪽의 컬럼 타입과 프라이머리 키 컬럼 타입이 서로 달라도IN함수에서 프라이머리 키(primary key)를 사용할 수 있도록 허용합니다. 예시:SELECT id FROM test_table WHERE id IN (SELECT '5'). #48936을 해결합니다. #54544 (Maksim Kita).- 해시 조인은 사용 가능한 최대 메모리(
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). - 분산 테이블에서 병렬 레플리카를 사용할 때는 모든 레플리카에서 읽지 않습니다. #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.tables에 디스크에 저장된 데이터의 대략적인 크기를 나타내는 새 필드data_length가 추가되었습니다. Amazon QuickSight에서 생성한 쿼리를 실행하는 데 필요합니다. #55037 (Robert Schulze). - MySQL interface에 prepared statements의 최소한의 구현이 추가되어, Tableau Online에서 MySQL 커넥터를 통해 ClickHouse에 연결할 수 있을 정도의 기능만 제공됩니다. #54115 (Serge Klochkov). 참고: prepared statements 구현은 매우 제한적이며, 아직 인수 바인딩은 지원하지 않습니다. 이 Tableau Online 사용 사례에서는 해당 기능이 필요하지 않기 때문입니다. Tableau Online을 충분히 테스트한 후 문제가 발견되면, 필요에 따라 후속 작업으로 구현할 예정입니다.
regexp_tree사전에 대소문자 비구분(case-insensitive) 및 dot-all 매칭 모드 지원이 추가되었습니다. #50906 (Johann Gan).- Keeper 개선:
createIfNotExistsKeeper 명령이 추가되었습니다. #48855 (Konstantin Bogdanov). - 정수 유형 추론을 더욱 정확하게 개선하고, #51236를 수정했습니다. #53003 (Chen768959).
- MaterializedMySQL의 문자열 리터럴에서 문자 집합을 확인해 해석하는 기능이 도입되었습니다. #53220 (Val Doroshchuk).
- 극히 드문 상황에서 거의 사용되지 않는
EmbeddedRocksDB테이블 엔진의 미묘한 문제를 수정했습니다. 간혹DROP TABLE실행 후 NFS에서EmbeddedRocksDB테이블 엔진이 파일을 제대로 닫지 못하는 경우가 있었습니다. #53502 (Mingliang Pan). RESTORE TABLE ON CLUSTER는 각 호스트에서 동일한 UUID를 가진 복제된 테이블을 생성해야 합니다. 그렇지 않으면 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). - cache의 count 사용을 수정하고 아카이브에서 읽을 때 진행률 표시줄을 개선했습니다. #54271 (Kruglov Pavel).
- SSO를 통한 S3 자격 증명 지원이 추가되었습니다. SSO에 사용할 프로필을 정의하려면
AWS_PROFILE환경 변수를 설정하세요. #54347 (Antonio Andelic). - 입력 형식에서 중첩 타입인 Array/Tuple/맵의 기본값으로 NULL을 지원합니다. #51100을 해결합니다. #54351 (Kruglov Pavel).
- Arrow/Parquet 포맷의 일부 특수한 청크 구성도 읽을 수 있도록 지원합니다. #54370 (Arthur Passos).
- MySQL 호환성을 위해
stddevPop함수에STDalias를 추가했습니다. #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).
- 동일한 입력값에 대해 함수를 두 번 호출했을 때 결과가 항상 같은지 여부를 나타내는 필드
is_deterministic가 시스템 테이블system.functions에 추가되었습니다. #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뷰에서 대문자 alias를 실제 대문자 컬럼으로 대체했습니다. #54773 (Serge Klochkov). - 이제
now,randomString,dictGet와 같은 비결정적 함수를 포함한 쿼리의 결과를 캐시하려고 하면 쿼리 캐시에서 오류를 반환합니다. 이전 동작(결과를 아무 알림 없이 캐시하지 않음)에 비해 혼란과 당혹감을 줄일 수 있습니다. #54801 (Robert Schulze). file/s3/url/… 스토리지에서는 materialized/ephemeral/alias 같은 특수 컬럼을 허용하지 않도록 했고, 파일에서 ephemeral 컬럼에 삽입하는 문제를 수정했습니다. #53477을 해결했습니다. #54803 (Kruglov Pavel).- 백업용 메타데이터 수집을 더 세부적으로 구성할 수 있도록 개선했습니다. #54804 (Vitaly Baranov).
clickhouse-local’s 로그 파일(--server_logs_file플래그로 활성화한 경우)은 이제clickhouse-server와 마찬가지로 각 줄 앞에 timestamp, 스레드 ID 등이 붙습니다. #54807 (Michael Kolupaev).system.merge_tree_settings테이블의is_obsolete필드 - 이제 사용 중단된 MergeTree 설정에는 값 1이 설정됩니다. 이전에는 설명에서만 해당 설정이 더 이상 사용되지 않음을 나타냈습니다. #54837 (Robert Schulze).- 인터벌 리터럴 사용 시 복수형도 사용할 수 있게 했습니다.
INTERVAL 2 HOURS는INTERVAL 2 HOUR와 동일하게 처리되어야 합니다. #54860 (Jordi Villar). NullablePK를 사용하는 프로젝션을 항상 생성할 수 있게 합니다. 이로써 #54814 문제가 해결됩니다. #54895 (Amos Bird).- connection reset 오류 발생 후 Backup의 S3 작업을 재시도합니다. #54900 (Vitaly Baranov).
- 설정의 최대값이 최소값보다 작을 때 예외 메시지가 정확해지도록 개선했습니다. #54925 (János Benjamin Antal).
LIKE,match및 기타 정규식 일치 함수가 이제 비UTF-8 부분 문자열을 포함한 패턴에 대해서도, binary 매칭으로 폴백하여 일치 여부를 확인할 수 있습니다. 예시: BOM을 감지하기 위해string LIKE '\xFE\xFF%'를 사용할 수 있습니다. 이 변경으로 #54486가 해결되었습니다. #54942 (Alexey Milovidov).ContextLockWaitMicrosecondsprofile 이벤트가 추가되었습니다. #55029 (Maksim Kita).- Keeper가 로그 레벨을 동적으로 조정합니다. #50372 (helifu).
- MySQL과의 호환성을 위해
timestamp함수를 추가했습니다. #54275를 해결합니다. #54639 (Nikolay Degterinsky).
빌드/테스트/패키징 개선
- ClickHouse의 공식 빌드와 지속적 통합 빌드에 사용되는 컴파일러를 Clang 16에서 17로 올렸습니다. #53831 (Robert Schulze).
- lookup에 사용되는 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에 더 유리하고 Turbo64는 그사이 GPL-3로 변경되었으며, 2. GitHub 스타 수가 더 많아 aklomp-base64가 장기적으로 더 안정적일 것으로 보이고, 3. aklomp-base64의 API가 약간 더 깔끔하며(다소 주관적일 수 있음), 4. aklomp-base64는 버그(예: 스레드 안전하지 않은 초기화)를 우회하기 위한 별도 해킹이 필요하지 않습니다. 참고: aklomp-base64는 패딩되지 않은 base64 값을 거부하는 반면, Turbo-Base64는 가능한 범위에서 이를 디코딩합니다. RFC-4648은 패딩이 필수인지 여부를 명확히 규정하지 않지만, 맥락에 따라 이는 유의해야 할 동작 변경일 수 있습니다. #54119 (Mikhail Koviazin).
버그 수정(공식 안정 릴리스에서 사용자에게 보이는 오작동)
- zero-copy 복제에서 REPLACE/MOVE PARTITION 문제 수정(참고: “zero-copy 복제”는 실험적 기능입니다) #54193 (Alexander Tokmakov).
- 하드링크 사용 시 zero-copy 잠금 문제를 수정했습니다(참고: “zero-copy 복제”는 실험적 기능입니다) #54859 (Alexander Tokmakov).
- zero-copy 가비지 문제 수정(참고: “zero-copy 복제”는 실험적 기능입니다) #54550 (Alexander Tokmakov).
- HTTP retry timeout이 밀리초 단위로 전달되도록 수정했습니다(이전에는 잘못 전달되었습니다). #54438 (Duc Canh Le).
- OUTFILE에서
CapnProto/Protobuf사용 시 오해의 소지가 있는 오류 메시지를 수정했습니다 #52870 (Kruglov Pavel). - LIMIT 사용 시 병렬 레플리카의 요약 보고 문제 수정 #53050 (Raúl Marín).
- S3에서/로 BACKUP을 수행할 때(native copy를 사용하지 않은 경우) 발생하던 스로틀링 문제와 일부 다른 부분의 문제도 수정했습니다 #53336 (Azat Khuzhin).
- 전체 디렉터리 복사 중 IO 스로틀링 문제 수정 #53338 (Azat Khuzhin).
- 수정: prewhere 조건의 actions로 이동하는 과정에서 컬럼이 손실될 수 있는 문제를 수정했습니다 #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). - 여러 join 재작성기 v2 간 이름 충돌 수정 #54240 (Tao Wang).
- join 후
system.errors에서 발생하는 예기치 않은 오류 수정 #54306 (vdimir). isZeroOrNull(NULL)관련 문제 수정 #54316 (flynn).- 수정:
prefer_localhost_replica= 1일 때 분산에서 병렬 레플리카 관련 문제 수정 #54334 (Igor Nikonov). - 수직 병합, Replacing MergeTree 및 optimize cleanup의 논리 오류 수정 #54368 (alesapin).
s3테이블 함수에서 발생할 수 있는URI contains invalid characters오류를 해결했습니다 #54373 (Kruglov Pavel).- AST 최적화 과정에서
arrayExists함수에 발생하던 segfault 수정 #54379 (Nikolay Degterinsky). analysisOfVariance함수에서 덧셈 전에 오버플로우를 확인하도록 개선 #54385 (Antonio Andelic).- removeSharedRecursive의 버그를 재현하고 수정 #54430 (Sema Checherinda).
- PREWHERE 및 FINAL에서 SimpleAggregateFunction 사용 시 발생할 수 있는 잘못된 결과 수정 #54436 (Azat Khuzhin).
- 분석기를 사용하지 않는 경우 indexHint로 파트를 필터링할 때의 문제 수정 #54449 (Azat Khuzhin).
- 정규화된 상태의 집계 프로젝션 수정 #54480 (Amos Bird).
clickhouse-local: 다중 쿼리 매개변수를 위한 기능 #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의 snapshot 설치 문제 수정 #54572 (Antonio Andelic).
ColumnUnique의 경쟁 상태 문제 수정 #54575 (Nikita Taranov).- Annoy/Usearch 인덱스: 기본값을 사용해 구축하는 동안 발생하는 LOGICAL_ERROR 수정 #54600 (Robert Schulze).
ColumnDecimal의 직렬화 문제 수정 #54601 (Nikita Taranov).- 공백이 포함된 컬럼 이름에 대해 *Cluster 함수의 스키마 추론을 수정 #54635 (Kruglov Pavel).
- 기본값과 명시적 삽입 컬럼이 있는 경우 삽입 대상 테이블의 구조를 사용하도록 수정 #54655 (Kruglov Pavel).
- 수정: alternation을 포함할 수 있는 정규식 매칭을 키 조건으로 사용하지 않도록 수정했습니다. #54696 (Yakov Olkhovskiy).
- 수직 병합 및 정리 시 ReplacingMergeTree 문제 수정 #54706 (SmitaRKulkarni).
- ORDER BY 이후 가상 컬럼 값이 잘못되는 문제를 수정했습니다 #54811 (Michael Kolupaev).
- 분석기를 사용하지 않는 경우 indexHint를 사용한 파트 필터링 수정 #54825 #54449 (Azat Khuzhin).
- 종료 중 발생하는 Keeper 세그폴트 수정 #54841 (Antonio Andelic).
- MaterializedPostgreSQL에서
Invalid number of rows in Chunk오류를 수정했습니다 #54844 (Kseniia Sumarokova). - 사용 중단된 포맷 설정을 별도 섹션으로 분리 #54855 (Kruglov Pavel).
- 파티션 키(partition key)가 수정될 때
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 재시도 없이 삽입 쿼럼 처리 #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).event_time_microseconds컬럼이 있으면 중복되므로,system.text_log의microseconds컬럼과system.metric_log의milliseconds컬럼이 제거됩니다. #53601 (Alexey Milovidov).- 메타데이터 캐시 기능은 더 이상 사용을 권장하지 않습니다. 이 기능은 Experimental 상태이며 실제로 사용된 적도 없습니다. 또한 위험합니다: #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을 추가했습니다. 이 컬럼에는 메모리 할당 주소가 포함됩니다. 할당되었지만 해제되지 않은 메모리에 대한 플레임 그래프를 생성할 수 있는 함수flameGraph를 추가했습니다. #38391을 재작업한 내용입니다. #45322 (Nikolai Kochetov).- 테이블 함수
azureBlobStorageCluster가 추가되었습니다. 지원되는 기능은 테이블 함수s3Cluster와 매우 유사합니다. #50795 (SmitaRKulkarni). - 이슈 #50808에서
cluster,clusterAllReplicas,remote,remoteSecure를 테이블 이름 없이 사용할 수 있게 했습니다. #50848 (Yangkuan Liu). - Kafka 컨슈머를 모니터링하는 시스템 테이블. #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를 추가했습니다. 테이블 구조에서 자동 생성된 스키마를 사용하면 외부 포맷 스키마 없이도 CapnProto/Protobuf 포맷으로 데이터를 입력/출력할 수 있습니다(설정format_capn_proto_use_autogenerated_schema/format_protobuf_use_autogenerated_schema로 제어). 또한 설정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). SYSTEM STOP/START PULLING REPLICATION LOG쿼리가 추가되었습니다(ReplicatedMergeTree테스트를 위해). #52881 (Alexander Tokmakov).- initiator에서 뮤테이션 중 상수 비결정적 함수의 실행을 허용합니다. #53129 (Anton Popov).
- 데이터를 전혀 읽지 않으면서
system.one처럼UInt8타입이고 값이0인dummy컬럼을 가진 단일 행을 항상 반환하는 입력 형식One을 추가했습니다. 이를_file/_path가상 컬럼과 함께 사용하면 데이터를 읽지 않고도 file/s3/url/hdfs/etc 테이블 함수의 파일 목록을 나열할 수 있습니다. #53209 (Kruglov Pavel). tupleConcat함수를 추가했습니다. #52759를 종료합니다. #53239 (Nikolay Degterinsky).TRUNCATE DATABASE연산을 지원합니다. #53261 (Bharat Nallan).- 프라이머리 키 처리에 사용되는 스레드 수를 제한하는
max_threads_for_indexes설정이 추가되었습니다. #53313 (jorisgio). - SipHash keyed 함수를 다시 추가했습니다. #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]. 나눗셈과 곱셈은 원소별 곱셈과 인수의 스칼라 곱 사이에서 혼동이 발생할 수 있어 구현되지 않았습니다. #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 조건과 각 컬럼의 최솟값/최댓값을 바탕으로 row group(파일의 청크)을 건너뜁니다. 특히 파일이 특정 컬럼을 기준으로 대체로 정렬되어 있으면, 해당 컬럼의 짧은 범위를 필터링하는 쿼리는 훨씬 더 빨라집니다. #52951 (Michael Kolupaev).
- Parquet에서 작은 row group을 함께 배칭해 읽기 성능을 최적화합니다. #53069을 해결합니다. #53281 (Kruglov Pavel).
- 대부분의 입력 형식에서 파일의 count 연산을 최적화합니다. #44334을 해결합니다. #53637 (Kruglov Pavel).
url/file/hdfs테이블 함수에서 읽기 전에 파일/경로 기준으로 필터링할 수 있습니다. #53529 (Kruglov Pavel).- AArch64, PowerPC, SystemZ, RISC-V용 JIT 컴파일을 활성화했습니다. #38217 (Maksim Kita).
countDistinctIf를count_distinct_implementation으로 재작성할 수 있도록 settingrewrite_count_distinct_if_with_count_distinct_implementation을 추가했습니다. #30642를 해결합니다. #46051 (flynn).- 머지 전에 수행되는 변환을 병렬화하여
uniq및uniqExact집계 함수 상태의 머지 속도를 높였습니다. #50748 (Jiebin Sun). - 가변 길이 키를 대량으로 사용할 때 널 허용 문자열 키의 집계 성능을 최적화했습니다. #51399 (LiuNeng).
- preimage를 사용하는 시간 filter 최적화를 위해 분석기에 패스를 추가했습니다. ICX 장치(Intel Xeon Platinum 8380 CPU, 80코어, 160스레드)에서 SSB로 수행한 성능 실험에 따르면, experimental analyzer가 활성화되었을 때 이 변경으로 기하평균 QPS가 8.5% 개선될 수 있습니다. #52091 (Zhiguo Zhou).
uniqExact(COUNT DISTINCT) 함수에서 모든 해시 Set이 단일 레벨일 때 머지를 최적화했습니다. #52973 (Jiebin Sun).Join테이블 엔진: 모든 컬럼이 포함된 해시 조인 데이터 구조를 복제하지 않도록 변경했습니다. #53046 (Duc Canh Le).- 성능 향상을 위해 “apache arrow” 라이브러리 없이 네이티브
ORC입력 형식을 구현했습니다. #53324 (李扬). - 대시보드는 서버에 데이터를 압축하도록 요청하며, 이는 느린 인터넷 연결에서 넓은 시간 범위의 데이터를 다룰 때 유용합니다. 예를 들어, 86,400개의 포인트가 있는 차트 하나는 압축하지 않으면 1.5 MB이고,
br로 압축하면 60 KB가 될 수 있습니다. #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에 데이터가 있을 때의 동작(none, log 또는 throw)을 제어할 수 있도록
stderr_reaction구성/설정을 추가했습니다. 이를 통해 외부 명령 디버깅이 더 쉬워집니다. #43210 (Amos Bird). system part_log와 머지 테이블에partition컬럼을 추가했습니다. #48990 (Jianfei Hu).- 이제 (인덱스) 비압축/mark, mmap 및 쿼리 캐시의 크기를 서버를 재시작하지 않고도 런타임에 동적으로 설정할 수 있습니다. #51446 (Robert Schulze).
- 딕셔너리를 복합 키로 생성하면 자동으로 “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가 포함된 connection string이 항상 기본 endpoint로 시작하는 것은 아니므로,azureBlobStorage테이블 함수의 connection string 검사 로직을 업데이트했습니다. 또한 URL에 Azure의 Container를 추가한 후 연결 URL에sastoken이 포함되도록 수정했습니다. #51141 (SmitaRKulkarni).full_sorting_mergeJOIN 알고리즘의 집합 필터링 설명을 수정했습니다. #51329 (Tanay Tummalapalli).max_block_size가 매우 클 때Aggregator의 메모리 사용량을 수정했습니다. #51566 (Nikita Taranov).SYSTEM SYNC FILESYSTEM CACHE명령을 추가했습니다. 이 명령은 파일 시스템 캐시의 메모리 내 상태를 디스크에 저장된 내용과 비교하고, 필요하면 메모리 내 상태를 바로잡습니다. 이는 디스크상의 데이터에 수동으로 개입하는 경우에만 필요하며, 이러한 작업은 강력히 권장되지 않습니다. #51622 (Kseniia Sumarokova).- 기존 S3 storage 구성의 프록시 리졸버와 하위 호환성을 유지하면서 CH용 범용 프록시 리졸버를 구현하려는 시도. #51749 (Arthur Passos).
- file/s3/hdfs/url/azureBlobStorage 테이블 함수에서 Tuple 서브컬럼을 읽을 수 있도록 지원합니다. #51806 (Kruglov Pavel).
- 함수
arrayIntersect는 이제 첫 번째 인수의 순서에 맞춰 값을 반환합니다. #27622를 해결했습니다. #51850 (Yarik Briukhovetskyi). - 지정된 액세스 스토리지에서 액세스 엔터티를 생성/삭제하거나, 액세스 엔터티를 한 액세스 스토리지에서 다른 액세스 스토리지로 이동할 수 있는 새로운 쿼리를 추가했습니다. #51912 (pufit).
- Replicated 데이터베이스 엔진에서는
ALTER TABLE FREEZE쿼리가 복제되지 않도록 변경했습니다. #52064 (Mike Kot). - 예기치 않게 종료될 때 시스템 테이블을 플러시할 수 있도록 개선되었습니다. #52174 (Alexey Gerasimchuck).
- 사전 서명 URL에서
s3테이블 함수가 작동하지 않던 문제를 수정했습니다. close #50846. #52310 (chen). system.events및system.metrics테이블에서name컬럼을event및metric의 별칭으로 추가했습니다. #51257을 해결했습니다. #52315 (chen).- 더 나은 SQL 호환성을 위해 파서에
CREATE UNIQUE INDEX구문을 no-op로 지원하는 기능이 추가되었습니다.UNIQUE인덱스는 지원되지 않습니다. 쿼리에서UNIQUE키워드를 무시하려면create_index_ignore_unique = 1로 설정하십시오. #52320 (Ilya Yatsishin). - 일부 Kafka 엔진 설정(topic, consumer, client_id 등)에서 사전 정의된 매크로(
{database}및{table}) 지원을 추가했습니다. #52386 (Yury Bogomolov). - 백업/복원 중에는 파일 시스템 캐시가 업데이트되지 않도록 합니다. 백업/복원 중에는 파일 시스템 캐시를 업데이트하지 않아야 합니다. 이는 실질적인 이점 없이 프로세스만 느려지게 하는 것으로 보입니다(
BACKUP명령이 대량의 데이터를 읽을 수 있는데, 그 모든 데이터를 파일 시스템 캐시에 넣었다가 곧바로 제거하는 것은 의미가 없기 때문입니다). #52402 (Vitaly Baranov). - S3 endpoint 구성에서 루트 경로를 사용할 수 있으며, 필요하면 ’/‘가 자동으로 추가됩니다. #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). xml다음으로 clickhouse-client에서 기본yaml및yml설정을 검색합니다. #52767 (Alexey Milovidov).- 루트가 non-‘clickhouse’인 구성에 병합할 때 루트 노드 이름이 다른 구성은 예외를 발생시키지 않고 그대로 건너뛰었습니다. #52770 (Yakov Olkhovskiy).
- 이제 샘플링 메모리 프로파일러로 추적할 메모리 할당의 최소 크기(
memory_profiler_sample_min_allocation_size)와 최대 크기(memory_profiler_sample_max_allocation_size)를 지정할 수 있습니다. #52779 (alesapin). precise_float_parsing설정을 추가하여 부동소수점 파싱 방식을 빠름/정밀 간에 전환할 수 있게 했습니다. #52791 (Andrey Zvonov).clickhouse-keeper(심볼릭 링크)에 대해clickhouse-keeper(실행형)와 동일한 기본 경로를 사용합니다. #52861 (Vitaly Baranov).remote테이블 함수의 오류 메시지를 개선했습니다. #40220을 해결했습니다. #52959 (jiyoungyoooo).RESTORE쿼리의SETTINGS절에서 사용자 지정 스토리지 정책을 지정할 수 있도록 지원이 추가되었습니다. #52970 (Victor Krasnov).- 백업 작업 시 S3 요청의 속도를 제한하는 기능이 추가되었습니다(
BACKUP및RESTORE명령이 이제s3_max_[get/put]_[rps/burst]를 따릅니다). #52974 (Daniel Pozo Escalona). - 복제된 사용자 정의 함수 또는 복제된 스토리지를 사용하는 액세스 제어 엔터티를 관리할 때 쿼리에서 ON CLUSTER 절을 무시하는 설정이 추가되었습니다. #52975 (Aleksei Filatov).
- JOIN 단계의 EXPLAIN actions. #53006 (Maksim Kita).
- 빈 needle에 대해서는
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).
- 스키마 추론 중 파일 이름 관련 진단 정보를 추가했습니다. 글롭 패턴으로 여러 파일을 처리할 때 유용합니다. #53135 (Alexey Milovidov).
- 두 번째 connection에서 session을 생성할 수 없는 경우, 클라이언트는 기본 connection을 사용해 제안을 로드합니다. #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개 미만이어도 초당 수만 건의 쿼리를 처리할 수 있습니다. #53285 (Alexey Milovidov).- 동시에 실행되는 백그라운드 파티션 optimize 머지의 수를 제한합니다. #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또는 서버 종료 시 분산 테이블을 플러시하지 않도록 설정하는 기능이 추가되었습니다. #53501 (Azat Khuzhin).- 이제
domainRFC함수에서 대괄호로 묶인 IPv6를 지원합니다. #53506 (Chen768959). - 백업에 사용되는 S3 CopyObject 요청에 대해 더 긴 timeout을 사용합니다. #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) [인덱스] mark/비압축 캐시의 size_ratio(즉, 보호 큐의 상대적 크기)를 설정하고, (2) 인덱스 mark 캐시와 인덱스 비압축 캐시의 캐시 정책을 설정할 수 있습니다. #53657 (Robert Schulze).
- TCPHandler의 쿼리 패킷에 클라이언트 정보 검증을 추가했습니다. #53673 (Alexey Gerasimchuck).
- Microsoft Azure와 상호 작용하는 중 네트워크 오류가 발생하면 파트 로딩을 다시 시도합니다. #53750 (SmitaRKulkarni).
- 예외에 대한 스택트레이스가 제공되며, 구체화된 뷰(Materialized View) 예외가 전파됩니다. #53766 (Ilya Golshtein).
- 호스트명이나 포트를 지정하지 않으면 Keeper 클라이언트가 ClickHouse의 config.xml에서 connection string을 찾으려고 시도합니다. #53769 (pufit).
- MergeTree 테이블 엔진 계열에서 데이터 파트 잠금을 유지한 시간을 마이크로초 단위로 보여주는 프로파일 이벤트
PartsLockMicroseconds를 추가했습니다. #53797 (alesapin). - Keeper에서 RAFT의 재연결 한도를 구성 가능하게 했습니다. 이 구성은 현재 connection이 끊어진 경우 Keeper가 peer와의 connection을 더 빠르게 다시 설정하는 데 도움이 될 수 있습니다. #53817 (Pengyuan Bian).
- MySQL과의 호환성을 높이기 위해 테이블 정의에서 foreign key를 무시하도록 하여, 사용자가 foreign key 부분의 SQL을 재작성할 필요가 없게 했습니다. ref #53380. #53864 (jsc0218).
빌드/테스트/패키징 개선
- ClickHouse 실행 파일의 심볼이 동적 링커에 노출되지 않도록 했습니다. #43933 문제를 해결할 수 있습니다. #47475 (Alexey Milovidov).
- clickhouse-server 패키지에
clickhouse-keeper-client심볼릭 링크를 추가했습니다. #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).
- 함수
arrayAUC에서 무거운 C++ 템플릿 사용을 제거했습니다. #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의 후속 작업입니다.
init.d start시 ENV 매개변수가 메인 프로세스에 올바르게 전달되는지 확인하는 테스트를 추가하는 등, install_check.py를 소폭 개선했습니다. #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가 2개 이상인 경우 빌드 중 (실험적) Annoy 인덱스를 재설정하지 않습니다 #51325 (Tian Xinhui).
- RESTORE 중 임시 디렉터리 사용 문제를 수정했습니다 #51493 (Azat Khuzhin).
- Nullable(IPv4)의 이항 산술 연산 수정 #51642 (Yakov Olkhovskiy).
- 딕셔너리 속성에서 IPv4 및 IPv6 데이터 타입을 지원합니다 #51756 (Yakov Olkhovskiy).
- compress 마크 체크섬 수정 #51777 (SmitaRKulkarni).
- CSV best effort parsing에서 쉼표를 datetime의 일부로 잘못 파싱하는 문제 수정 #51950 (Kruglov Pavel).
- 실행형 UDF에 매개변수가 있어도 예외를 발생시키지 않음 #51961 (Nikita Taranov).
ALTER DELETE쿼리에서 스킵 인덱스 및 프로젝션이 다시 계산되지 않던 문제를 수정했습니다 #52530 (Anton Popov).- MaterializedMySQL: ReadBuffer::read의 무한 루프 문제 수정 #52621 (Val Doroshchuk).
clickhouse방언에서만 제안을 로드합니다 #52628 (János Benjamin Antal).- 필요할 때 ares 채널을 초기화하고 해제합니다. #52634 (Arthur Passos).
- OR 표현식이 포함된 가상 컬럼 필터링 문제 수정 #52653 (Azat Khuzhin).
- 희소 컬럼 인수가 1개인
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 기반 server 구현을 수정했습니다. #52833 (Andy Fiddaman).
- regexp 분석기가 이름이 있는 캡처 그룹을 인식하도록 개선 #52840 (Han Fei).
- clickhouse-local에서
~PushingAsyncPipelineExecutor의 assert 발생 가능성 수정 #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 cache에서 빈 key prefix 디렉터리를 삭제할 때 드물게 발생하는 race condition 수정 #53055 (Kseniia Sumarokova).
- ZstdDeflatingWriteBuffer가 때때로 출력이 잘려 나가는 문제를 수정했습니다 #53064 (Michael Kolupaev).
- 비동기 플러시 쿼리의 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).
- 실험적 session_log 테이블: session_log에 대한 새 테스트를 추가하고 로그인과 로그아웃 사이의 불일치를 수정했습니다. #53255 (Alexey Gerasimchuck). 로그인 성공 처리와 로그아웃 사이의 불일치를 수정했습니다. #53302 (Alexey Gerasimchuck).
- DateTime에 1초 미만 인터벌을 추가할 때 발생하던 문제 수정 #53309 (Michael Kolupaev).
- 딕셔너리의 “Context has expired” 오류 수정 #53342 (Alexey Milovidov).
- 일반 프로젝션 AST 포맷의 오류 수정 #53347 (Amos Bird).
- Scalar 실행 시 table function에서 use_structure_from_insertion_table_in_table_functions 사용을 금지합니다 #53348 (flynn).
- system.table SELECT 쿼리에서 lazy 데이터베이스 로딩 문제 수정 #53372 (SmitaRKulkarni).
- MaterializedMySQL의 system.data_skipping_indices 문제를 수정했습니다 #53381 (Filipp Ozinov).
- TSV file 세그먼테이션 엔진에서 단일 캐리지 리턴 처리 문제 수정 #53407 (Kruglov Pavel).
Context has expired오류를 제대로 수정 #53433 (Michael Kolupaev).- IN의 오른쪽 피연산자에 서브쿼리(subquery)가 있는 경우
timeout_overflow_mode문제를 수정했습니다 #53439 (Duc Canh Le). - #53152의 예기치 않은 동작을 수정했습니다 #53440 (Zhiguo Zhou).
- 경로가 모두 숫자일 때 발생하는 JSON_QUERY 함수 parse 오류 수정 #53470 (KevinyhZou).
- 병렬 FINAL을 사용하는 쿼리에서 잘못된 컬럼 순서를 수정했습니다. #53489 (Nikolai Kochetov).
do_not_merge_across_partitions_select_final이 적용된 ReplacingMergeTree에서 SELECT할 때 발생하던 버그를 수정했습니다 #53511 (Vasily Nemkov).- 종료 시 먼저 async insert 큐를 플러시하도록 변경 #53547 (joelynch).
- 희소 컬럼에 대한 join 중 발생하던 크래시 수정 #53548 (vdimir).
- 잘못된 인수를 받는 함수에 대한 Set 스키핑 인덱스의 잠재적 UB 수정 #53559 (Azat Khuzhin).
- 역인덱스에서 발생할 수 있는 UB를 수정했습니다(실험적 기능) #53560 (Azat Khuzhin).
- 수정: interpolate 표현식이 SELECT 표현식에서 동일한 이름의 별칭으로 지정된 항목 대신 소스 컬럼을 사용하는 문제를 수정했습니다. #53572 (Yakov Olkhovskiy).
- EXPLAIN PLAN index=1에서 삭제된 그래뉼 수를 바로잡았습니다 #53616 (wangxiaobo).
DelayedSource에서 합계와 극값이 올바르게 처리되도록 수정했습니다 #53644 (Antonio Andelic).- mutation 파이프라인에서 prepared set cache가 중단되던 문제 #53645 (Nikolai Kochetov).
- UPDATE 및 DELETE 쿼리의 프레디케이트에서 JSON 유형의 서브컬럼을 사용하는 뮤테이션 관련 버그를 수정했습니다. #53677 (VanDarkholme7).
- full_sorting_merge join의 filter pushdown 문제 수정 #53699 (vdimir).
NULL::LowCardinality(Nullable(...)) NOT IN관련 버그 수정 시도 #53706 (Andrey Zvonov).- 수정: 희소 컬럼에서 정렬된 DISTINCT #53711 (Igor Nikonov).
transform: 여러 행이 있는 기본 컬럼을 올바르게 처리 #53742 (Salvatore Mesoraca).- parseDateTime에서 발생하는 퍼저 충돌 수정 #53764 (Robert Schulze).
- MaterializedPostgreSQL: getCreateTableQueryImpl의 미처리 예외 수정 #53832 (Kseniia Sumarokova).
- PostgreSQL 엔진 사용 중 발생할 수 있는 세그폴트를 수정했습니다 #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전달 활성화). 이로 인해 downgrade 이후에는 기존 분산 DDL 항목을 처리할 수 없습니다(다만 일반적으로는 처리되지 않은 이런 항목이 없어야 합니다). #52128 (Azat Khuzhin). - 일반 메타데이터를 확인하는 것과 같은 방식으로 프로젝션 메타데이터도 확인합니다. 이 변경으로 인해 유효하지 않은 프로젝션이 있는 테이블이 있으면 서버가 시작되지 않을 수 있습니다. 예를 들어 PK에 위치 기반 컬럼을 생성하는 프로젝션(예:
projection p (select * order by 1, 4))이 이에 해당합니다. 이는 테이블 PK에서는 허용되지 않으며 삽입/머지 중 충돌을 일으킬 수 있습니다. 업데이트 전에 이러한 프로젝션을 삭제하십시오. #52353을 수정합니다. #52361 (Nikolai Kochetov). - 버그로 인해 실험적 기능
hashid가 제거되었습니다. 구현 품질은 처음부터 의문스러웠고, 실험 단계를 벗어나지 못했습니다. 이로써 #52406이 종료되었습니다. #52449 (Alexey Milovidov).
새 기능
- 여러 데이터베이스를 하나로 결합하는
Overlay데이터베이스 엔진이 추가되었습니다. 파일 시스템의 디렉터리를 포맷과 구조가 자동으로 감지되는, 암시적으로 사용 가능한 테이블 집합으로 표현하는Filesystem데이터베이스 엔진이 추가되었습니다. 새로운S3데이터베이스 엔진을 사용하면 prefix를 테이블 집합으로 표현하여 S3 storage와 읽기 전용으로 상호작용할 수 있습니다. 새로운HDFS데이터베이스 엔진을 사용하면 HDFS storage와도 같은 방식으로 상호작용할 수 있습니다. #48821 (alekseygolub). - Keeper에서 스냅샷과 로그를 저장할 수 있도록 외부 디스크 지원을 추가했습니다. #50098 (Antonio Andelic).
- 다중 디렉터리를 선택하는
{}글롭 패턴 지원이 추가되었습니다. #50559 (Andrey Zvonov). - Kafka Connector는 URL 인코딩된 자격 증명을 사용하는 기본 인증을 통해 스키마 레지스트리에서 Avro 스키마를 가져올 수 있습니다. #49664 (Ilya Golshtein).
- 두 배열 사이의 Jaccard 유사도를 계산하는 함수
arrayJaccardIndex를 추가했습니다. #50076 (FFFFFFFHHHHHHH). system.settings및 유사한 테이블에is_obsolete컬럼을 추가합니다. #50819를 해결합니다. #50826 (flynn).- 설정 파일에서 암호화된 요소를 지원하도록 구현했습니다. 설정 파일의 리프 요소에 암호화된 텍스트를 사용할 수 있는 기능이 추가되었습니다. 텍스트는
<encryption_codecs>섹션의 암호화 코덱을 사용해 암호화됩니다. #50986 (Roman Vasin). - 이제 Grace Hash Join 알고리즘은 FULL 및 RIGHT JOIN에도 사용할 수 있습니다. #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 빈 통계를 표시하는 시스템 테이블(system table)
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). - 각 컬럼 앞에 해당 컬럼의 기본값 사용 여부를 나타내는 플래그 바이트를 추가하는
RowBinaryWithDefaults포맷을 추가했습니다. #50854를 해결합니다. #51695 (Kruglov Pavel). default_temporary_table_engine설정이 추가되었습니다.default_table_engine와 동일하지만 임시 테이블에 적용됩니다. #51292. #51708 (velavokr).- 각 단어의 첫 글자를 대문자로, 나머지 글자를 소문자로 변환하는 새로운
initcap/initcapUTF8함수를 추가했습니다. #51735 (Dmitry Kardymon). - 이제 CREATE TABLE에서 컬럼 정의 내
PRIMARY KEY구문을 지원합니다. 컬럼은 정의된 순서대로 프라이머리 인덱스에 추가됩니다. #51881 (Ilya Yatsishin). - 구성 파일(
log및errorlog태그)이나 명령줄 인수(--log-file및--errorlog-file)에서 로그 파일 및 오류 로그 파일 이름에 날짜/시간 포맷 지정자를 사용할 수 있도록 개선되었습니다. #51945 (Victor Krasnov). - HTTP 헤더에 피크 메모리 사용량 통계를 추가했습니다. #51946 (Dmitry Kardymon).
- 문자열의 부분 수열을 매칭하는 새로운
hasSubsequence함수(+CaseInsensitive및UTF8버전)가 추가되었습니다. #52050 (Dmitry Kardymon). - PostgreSQL 호환성을 위해
array_agg를groupArray의 별칭으로 추가했습니다. #52100을 해결했습니다. ### 사용자 대상 변경 사항에 대한 문서 항목입니다. #52135 (flynn). any_value를any집계 함수의 호환성 별칭으로 추가했습니다. #52140을 해결합니다. #52147 (flynn).- BigQuery와의 호환성을 위해 집계 함수
array_concat_agg를 추가했습니다. 이는groupArrayArray의 별칭(alias)입니다. #52139를 해결했습니다. #52149 (flynn). OCTET_LENGTH를length의 별칭으로 추가합니다. #52153를 해결합니다. #52176 (FFFFFFFHHHHHHH).- 여러 줄 문자열에서 첫 번째 줄을 추출하는
firstLine함수를 추가했습니다. 이 변경으로 #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의 별칭(alias)을 추가했습니다. 이제curdate/current_date이름으로도 사용할 수 있습니다. 또한now의 별칭(current_timestamp)도 추가했습니다. #52106 (Lloyd-Pottiger). - async insert에서
async_deduplication_token을 지원합니다. #52136 (Han Fei). - URL 엔진에서 URI의 경로 디코딩/인코딩을 비활성화할 수 있는 새로운 설정
disable_url_encoding을 추가했습니다. #52337 (Kruglov Pavel).
성능 개선
- 기본적으로 희소 serialization 포맷을 자동으로 선택하도록 활성화합니다. 성능이 향상됩니다. 이 포맷은 버전 22.1부터 지원됩니다. 이 변경 이후에는 22.1보다 오래된 버전으로 다운그레이드하지 못할 수 있습니다. 다운그레이드하려면
ratio_of_defaults_for_sparse_serialization=0.9375를 설정해야 할 수 있습니다. 55153. MergeTree 테이블에ratio_of_defaults_for_sparse_serialization = 1설정을 지정하면 희소 serialization 포맷 사용을 끌 수 있습니다. #49631 (Alexey Milovidov). - 기본값으로
move_all_conditions_to_prewhere및enable_multiple_prewhere_read_steps설정을 활성화했습니다. #46365 (Alexander Gololobov). - allocator를 튜닝해 일부 쿼리 성능을 개선합니다. #46416 (Azat Khuzhin).
- 이제
MergeTreePrefetchedReadPool에서도MergeTreeReadPool과 마찬가지로 고정 크기 작업을 사용합니다. 또한 이제 S3 요청에는 연결 풀을 사용합니다. #49732 (Nikita Taranov). - join 오른쪽에 대한 pushdown을 더 확대했습니다. #50532 (Nikita Taranov).
- 해시 테이블의 크기를 미리 확보해 grace_hash 조인을 개선합니다(재제출). #50875 (lgbo).
OpenedFileCache에서 lock을 기다리며 발생하는 지연이 때때로 눈에 띌 수 있었습니다. 경합을 피하기 위해 이를 여러 개의 하위 맵(각각 자체 lock 포함)으로 세분화했습니다. #51341 (Nikita Taranov).- 기본 키 컬럼이 포함된 조건을 PREWHERE 체인의 끝으로 이동합니다. 이는 PK 컬럼이 포함된 조건이 PK 분석에 사용될 가능성이 높아 PREWHERE 필터링에는 추가적인 효과가 크지 않기 때문입니다. #51958 (Alexander Gololobov).
- SipHash를 인라인화해 String 타입의
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). - 기본 키(primary key)를 무효화하던 잘못된 projection 분석을 수정했습니다. 이 문제는
query_plan_optimize_primary_key = 1, query_plan_optimize_projection = 1일 때만 발생합니다. 이 변경으로 #48823가 해결되었습니다. 이 변경으로 #51173가 해결되었습니다. #52308 (Amos Bird). FileCache::loadMetadata의 시스템 호출 수를 줄여, 파일 시스템 캐시가 구성된 경우 서버 시작 속도가 빨라집니다. #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를 도입했습니다. 또한 테이블과 서버 간 핸들러 종료 순서의 불일치를 수정했습니다. 이제 서버는 먼저 테이블을 종료한 후 서버 간 핸들러를 종료합니다. #51851 (alesapin). OFFSET없이도 SQL 표준FETCH를 사용할 수 있습니다. https://antonz.org/sql-fetch/를 참조하십시오. #51293 (Alexey Milovidov).- config의 새
http_forbid_headers섹션을 사용해 URL/S3 테이블 함수의 HTTP headers를 필터링할 수 있습니다. 정확히 일치하는 필터와 정규식 필터를 모두 지원합니다. #51038 (Nikolay Degterinsky). - 의미가 없는
16 EiB여유 공간 관련 메시지가 로그에 표시되지 않도록 했습니다. 이로써 #49320이 해결되었습니다. #49342 (Alexey Milovidov). sleepEachRow함수의 제한을 적절히 검사합니다.function_sleep_max_microseconds_per_block설정을 추가합니다. 이는 범용 쿼리 퍼저에 필요합니다. #49343 (Alexey Milovidov).geoHash함수의 두 가지 문제를 해결했습니다. #50066 (李扬).- async insert의 플러시 쿼리를
system.query_log에 기록합니다. #51160 (Raúl Marín). - 함수
date_diff와age가 이제 밀리초/마이크로초 단위를 지원하고, 마이크로초 정밀도로 동작합니다. #51291 (Dmitry Kardymon). - clickhouse-keeper-client의 경로 파싱을 개선했습니다. #51359 (Azat Khuzhin).
- ClickHouse에 의존하는 서드파티 제품(Gluten: Spark SQL 성능을 두 배로 높이는 플러그인)에 버그가 있었습니다. 이 수정으로 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 설정에 rull 파일 이름용 placeholder
%a를 추가했습니다. #51603 (Kruglov Pavel). system.parts_columns에modification_time컬럼이 추가되었습니다. #51685 (Azat Khuzhin).- 단일 필드 파싱에 실패한 경우 기본값을 삽입할 수 있는 새로운 설정
input_format_csv_use_default_on_bad_values이 CSV 형식에 추가되었습니다. #51716 (KevinyhZou). - 예기치 않은 크래시 발생 후 crash log를 디스크에 플러시하는 기능을 추가했습니다. #51720 (Alexey Gerasimchuck).
- 인증과 무관한 오류가 dashboard 페이지에 표시되지 않던 문제를 수정했습니다. 또한 ‘겹치는’ chart 동작도 수정했습니다. #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비트 전체 범위를 사용할 수 있습니다. 타사 클라이언트는 이에 맞춰 var-int 처리 코드를 업데이트하는 것이 좋습니다. #51905 (Robert Schulze).
- 인증서가 변경되면 수동으로 SYSTEM RELOAD CONFIG를 실행할 필요 없이 업데이트됩니다. #52030 (Mike Kot).
TYPE가 지정되지 않은ADD INDEX쿼리를 무시할 수 있는allow_create_index_without_type설정이 추가되었습니다. 표준 SQL 쿼리는 table 스키마를 변경하지 않아도 성공합니다. #52056 (Ilya Yatsishin).- 서버 시작 시점부터 로그 메시지가
system.text_log에 기록됩니다. #52113 (Dmitry Kardymon). - HTTP 엔드포인트에 여러 IP 주소가 있고 그중 첫 번째 주소에 연결할 수 없는 경우 timeout 예외가 발생하던 문제가 있었습니다. 확인된 모든 엔드포인트를 처리할 수 있도록 session 생성 방식을 개선했습니다. #52116 (Aleksei Filatov).
- 이제 Avro 입력 형식은 단일 유형만 포함된 경우에도 Union을 지원합니다. #52131을 종료합니다. #52137 (flynn).
- 암시적 프로젝션(현재는
min_max_count프로젝션만 해당)을 비활성화하는 설정optimize_use_implicit_projections이 추가되었습니다. #52152 (Amos Bird). - 함수
hasToken을 사용해 무한 루프를 유발할 수 있었습니다. 이제 이 문제는 제거되었습니다. 이로써 #52156가 해결되었습니다. #52160 (Alexey Milovidov). - ZK 상위 경로를 낙관적으로 생성합니다. #52195 (Raúl Marín).
- #50582를 수정했습니다. 일부 순차 읽기와 상수 처리 시
Not found column ... in block오류가 발생하는 문제를 방지했습니다. #52259 (Chen768959). - S2 Geo 프리미티브의 유효성 문제를 ClickHouse 측에서 가능한 한 조기에 확인합니다. 이로써 #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).
실험적 기능
- 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에서 큰따옴표로 묶은 comment를 지원합니다. #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).
session_timezone설정(버전 23.6에서 새로 추가됨)이 experimental로 강등되었습니다. #52445 (Alexey Milovidov).keeper_server.enable_reconfiguration설정으로 활성화할 수 있는 증분 재구성과 함께 ClickHouse Keeper에서 ZooKeeperreconfig명령을 지원합니다. 서버 추가, 서버 제거, 서버 우선순위 변경을 지원합니다. #49450 (Mike Kot). 이 기능은 아직 완전하지 않은 것으로 보입니다.
빌드/테스트/패키징 개선
- Linux RISC-V 64용 Experimental ClickHouse 빌드를 CI에 추가합니다. #31398 (Alexey Milovidov).
- 분석기가 활성화된 상태에서의 통합 테스트 검사를 추가합니다. #50926 #52210 (Dmitry Novik).
- Rust용 재현 가능한 빌드를 지원합니다. #52395 (Azat Khuzhin).
- Cargo 의존성을 업데이트합니다. #51721 (Raúl Marín).
CHColumnToArrowColumn::fillArrowArrayWithArrayColumnData함수가 널 허용 배열에서도 동작하도록 개선했습니다. 이러한 배열은 ClickHouse에서는 불가능하지만 Gluten에는 필요합니다. #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 관련 프로젝션 수정 #49709 (Amos Bird).
- 조인 사용 시 optimize_skip_unused_shards 문제 수정 #51037 (Azat Khuzhin).
- 소수점 이하 자릿수가 있는 음수 datetime64에서 formatDateTime()을 수정했습니다 #51290 (Dmitry Kardymon).
hasToken*함수가 완전히 잘못 구현되어 있었습니다. #43358에 대한 테스트를 추가했습니다 #51378 (Alexey Milovidov).- 정렬 전에 함수를 이동하는 최적화 관련 문제를 수정했습니다. #51481 (Nikolai Kochetov).
- FINAL에서 Pipe::unitePipes의 Block 구조 불일치를 수정했습니다 #51492 (Nikita Taranov).
- 모든 세그먼트의 가중치가 0인 클러스터에서 발생하던 SIGSEGV를 수정했습니다(
INSERT INTO FUNCTION clusterAllReplicas()수정 포함). #51545 (Azat Khuzhin). - 헤지드 요청의 시간 초과 문제 수정 #51582 (Azat Khuzhin).
- NULL이 포함된 ANTI join의 논리적 오류 수정 #51601 (vdimir).
- ‘IN’ 조건을 PREWHERE로 옮기는 문제 수정 #51610 (Alexander Gololobov).
- ASOF/ANTI join에는 PredicateExpressionsOptimizer를 적용하지 않도록 변경했습니다 #51633 (vdimir).
- 머지 알고리즘 사용 시 ReplicatedMergeTree의 중복 제거 async insert 문제 수정 #51676 (Antonio Andelic).
- 빈 컬럼에서
parseSipHashKey를 읽는 문제 수정 #51804 (Nikita Taranov). - 잘못된 EmbeddedRocksdb 테이블 생성 시 발생하는 segfault를 수정했습니다 #51847 (Duc Canh Le).
- MongoDB 테이블에 대한 삽입 문제를 수정했습니다 #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).
- 윈도우 함수의 ORDER BY 튜플 수정 #52145 (Alexey Milovidov).
- 집계 표현식에 단조 함수가 포함된 경우 잘못된 프로젝션 분석을 수정했습니다 #52151 (Amos Bird).
groupArrayMoving함수 오류 수정 #52161 (Alexey Milovidov).- 범위 딕셔너리에 대한 Direct JOIN 비활성화 #52187 (Duc Canh Le).
- sticky 뮤테이션 테스트 수정(및 매우 드물게 발생하는 레이스 컨디션 수정) #52197 (alesapin).
- Web 디스크의 레이스 컨디션 수정 #52211 (Kseniia Sumarokova).
- 서버에서 알 수 없는 패킷을 받을 때 Connection::setAsyncCallback에서 발생하는 데이터 레이스를 수정했습니다 #52219 (Kruglov Pavel).
- 시작 시 임시 데이터가 삭제되는 문제를 수정하고 테스트를 추가했습니다 #52275 (vdimir).
- 널 허용 컬럼 개수를 셀 때 minmax_count 프로젝션을 사용하지 않도록 수정했습니다 #52297 (Amos Bird).
- MergeTree/ReplicatedMergeTree에서 로그 엔트리에 서버 시간대를 사용하도록 수정했습니다 #52325 (Azat Khuzhin).
- CTE 및 여러 번 사용하는 경우의 매개변수화된 뷰 문제를 수정했습니다 #52328 (SmitaRKulkarni).
- 시간 인터벌용 표현식 템플릿을 비활성화합니다 #52335 (Alexander Tokmakov).
- Keeper의
apply_snapshot수정 #52358 (Antonio Andelic). - build-osx.md 업데이트 #52377 (AlexBykovski).
- 빈 needle과 컬럼 haystack에서 발생하던
countSubstrings멈춤 문제를 수정했습니다 #52409 (Sergei Trifonov). - Merge 테이블이 있는 일반 프로젝션 문제 수정 #52432 (Amos Bird).
- Aggregator에서 발생할 수 있는 이중 해제 문제를 수정했습니다 #52439 (Nikita Taranov).
- Buffer engine에 삽입할 때 발생하던 문제를 해결했습니다 #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).
- 발생 가능한 오류 “연결을 정리할 수 없습니다: 먼저 취소하십시오” 수정 #52585 (Kruglov Pavel).
ClickHouse 릴리스 23.6, 2023-06-29. 프레젠테이션, 영상
하위 호환되지 않는 변경 사항
- fs cache에서
do_not_evict_index_and_mark_files기능을 삭제했습니다. 이 기능은 오히려 문제만 악화시켰습니다. #51253 (Kseniia Sumarokova). - experimental 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” 등의 대신 connection string으로 호출할 수 있습니다. #50689 (Alexey Gerasimchuck).
session_timezone설정이 추가되었습니다. 명시적으로 지정하지 않으면 세션의 기본 시간대로 사용됩니다. #44149 (Andrey Zvonov).- 이제 코덱 DEFLATE_QPL은 설정 “allow_experimental_codecs” 대신 서버 설정 “enable_deflate_qpl_codec”(기본값: false)으로 제어됩니다. 이에 따라 DEFLATE_QPL은 더 이상 Experimental이 아닙니다. #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을 통해서도 filter push down이 가능해졌습니다. #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을 머지했습니다. 블록이 이미 정렬되어 있으면 sort 중 블록 순열을 수행하지 않도록 했습니다. #50697 (Alexey Milovidov, Maksim Kita).
- system.zookeeper 테이블의 읽기 속도를 높이기 위해 ZooKeeper에 여러 list 요청을 병렬로 보내도록 했습니다. #51042 (Alexander Gololobov).
- 시간대용 DateTime lookup 테이블의 초기화를 가속화했습니다. 이로 인해 특히 debug build에서 부담이 컸던 clickhouse-client의 시작/연결 시간이 줄어들 것으로 예상됩니다. #51347 (Alexander Gololobov).
- 동기식 HEAD 요청으로 인해 데이터 레이크가 느려지던 문제를 수정했습니다. (파일 수가 많을 때 Iceberg/DeltaLake/Hudi가 느려지던 문제와 관련이 있습니다.) #50976 (Kseniia Sumarokova).
- 오른쪽 GLOBAL JOIN 테이블의 모든 컬럼을 읽지 않도록 했습니다. #50721 (Nikolai Kochetov).
실험적 기능
- 분석기에서 병렬 레플리카를 지원합니다. #50441 (Raúl Marín).
- zero-copy 복제 시 레플리카 간 부하를 더 고르게 분산할 수 있도록, 대규모 머지/뮤테이션 실행 전에 임의의 대기 시간을 추가합니다. #51282 (alesapin).
- 세그먼트가 하나뿐이고 기반 테이블이
ReplicatedMergeTree인 경우,Replicated데이터베이스를 통해ALTER PARTITION쿼리와 뮤테이션을 복제하지 않습니다. #51049 (Alexander Tokmakov).
개선 사항
- “too many parts”의 임계값을 최신 환경에 맞게 완화합니다. 오래 실행되는 삽입 쿼리에서 백프레셔를 다시 적용합니다. #50856 (Alexey Milovidov).
- CIDR ::ffff:0:0/96(IPv4 매핑 주소)에서 IPv6를 IPv4 주소로 CAST할 수 있도록 허용했습니다. #49759 (Yakov Olkhovskiy).
- MongoDB 5.1 이상 버전을 지원하도록 MongoDB 프로토콜을 업데이트했습니다. 이전 프로토콜(<3.6)을 사용하는 버전에 대한 지원도 유지됩니다. #45621, #49879를 해결했습니다. #50061 (Nikolay Degterinsky).
- 스키마 추론에서 읽는 바이트 수를 제한하는
input_format_max_bytes_to_read_for_schema_inference설정이 추가되었습니다. #50577가 해결되었습니다. #50592 (Kruglov Pavel). - 스키마 추론에서
input_format_null_as_default설정이 적용되도록 개선했습니다. #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).
- 공백 또는
\t를 필드 구분 기호로 사용하는 CSV를 지원하고, 이러한 구분 기호는 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). - 시스템 테이블(system table) zookeeper_connection의 connected_time은 연결이 설정된 시각(표준 포맷)을 나타내며, 설정된 연결 세션의 지속 시간을 초 단위로 표시하는 session_uptime_elapsed_seconds가 추가되었습니다. #51026 (郭小龙).
- 소스 데이터의 청크 크기를 활용하고 각 스레드에서 총 크기를 점진적으로 집계하도록 하여 file/S3/hdfs/url 테이블 함수의 진행률 표시줄을 개선했습니다. *Cluster 함수의 진행률 표시줄도 수정했습니다. 이로써 #47250이 해결되었습니다. #51088 (Kruglov Pavel).
- Progress 바를 더 정확하게 표시할 수 있도록 TCP 프로토콜의 Progress 패킷에 total_bytes_to_read를 추가했습니다. #51158 (Kruglov Pavel).
- 파일 시스템 캐시가 있는 디스크에서 데이터 파트 검사가 개선되었습니다. #51164 (Anton Popov).
- fs cache에서 current_elements_num이 때때로 올바르지 않게 표시되던 문제를 수정했습니다. #51242 (Kseniia Sumarokova).
빌드/테스트/패키징 개선
- standalone Keeper 바이너리에 내장 keeper-client를 추가했습니다. #50964 (pufit).
- 이제 실제 LZ4 버전을 사용합니다. #50621 (Nikita Taranov).
- ClickHouse 서버는 치명적 오류가 발생하면 변경된 설정 목록을 출력합니다. 이로써 #51137이 해결됩니다. #51138 (Alexey Milovidov).
- clang-17로 ClickHouse를 빌드할 수 있도록 했습니다. #51300 (Alexey Milovidov).
- SQLancer 검사로 유발되던 버그가 수정되어 이제 이 검사는 안정으로 간주됩니다. 이제 SQLancer 검사 실패는 failed check 상태로 보고됩니다. #51340 (Ilya Yatsishin).
- Dockerfile의 큰
RUN을 더 작은 조건부 구문으로 분리했습니다. 필요한 도구는 동일한RUN레이어에서 필요할 때 설치한 뒤 제거합니다. OS는 시작 시 한 번만 업그레이드합니다. 서명된 리포지토리를 확인할 때는 최신 방식을 사용합니다. 오래된 docker 버전에서의 문제를 해결하기 위해 기본 리포지토리를 ubuntu:20.04로 낮췄습니다. 또한 golang 취약점에 대응하기 위해 golang 버전도 업그레이드했습니다. #51504 (Mikhail f. Shiryaev).
버그 수정 (공식 안정 릴리스에서 사용자에게 드러나는 오동작)
- 실행형 Dictionaries의 로딩 상태가 올바르게 보고되도록 수정 #48775 (Anton Kozlov).
- skip 인덱스와 프로젝션의 mutation이 올바르게 수행되도록 수정 #50104 (Amos Bird).
- 이동 중인 파트 정리 #50489 (vdimir).
- 집계 함수에서 IP 타입 해싱의 이전 버전 호환성 문제 수정 #50551 (Yakov Olkhovskiy).
- TRUNCATE 후 Log 계열 테이블이 행 수를 잘못 반환하던 문제 수정 #50585 (flynn).
uniqExact병렬 병합 관련 버그 수정 #50590 (Nikita Taranov).- 최근 grace 해시 조인 관련 변경 사항 되돌리기 #50699 (vdimir).
- 쿼리 캐시:
ColumnConst에서ColumnVector<char8_t>로 잘못 캐스트되는 문제 수정 시도 #50704 (Robert Schulze). - 알 수 없는 작업이 포함된 로그가 Keeper에 저장되지 않도록 수정 #50751 (Antonio Andelic).
- SummingMergeTree의 DateTime64 지원 #50797 (Jordi Villar).
- 비상수 시간대용 호환성 설정을 추가했습니다 #50834 (Robert Schulze).
- cache 엔트리에서 LDAP 매개변수의 해시 처리를 수정합니다 #50865 (Julian Maicher).
- Parquet 포맷에서 예외를 발생시키는 대신 String에서 큰 정수를 파싱하는 방식으로 폴백 #50873 (Kruglov Pavel).
- 백업을 생성하는 동안 잠금 파일을 지나치게 자주 확인하던 문제를 수정했습니다 #50889 (Vitaly Baranov).
- read-in-order가 활성화된 경우에는 projection을 적용하지 않도록 했습니다. #50923 (Nikolai Kochetov).
- Azure blob storage iterator의 경쟁 조건을 수정했습니다 #50936 (SmitaRKulkarni).
CreatingSets에서sort_description이 잘못 전파되는 문제를 수정했습니다 #50955 (Nikita Taranov).- Iceberg v2의 선택적 메타데이터 파싱 수정 #50974 (Kseniia Sumarokova).
- MaterializedMySQL: 빈 테이블 재정의 시 괄호 유지 #50977 (Val Doroshchuk).
- BackupCoordinationStageSync::setError()에서 발생하는 충돌 수정 #51012 (Vitaly Baranov).
- ColumnLowCardinality 딕셔너리의 copy-on-write에서 발생하던 미묘한 오류 수정 #51064 (Michael Kolupaev).
- 안전한 IV 생성 #51086 (Salvatore Mesoraca).
- 서브쿼리가 있는 SELECT에서 비효율적으로 작동하던 쿼리 캐시 수정 #51132 (Robert Schulze).
- 상수와의 널 허용 비교에서 Set 인덱스 문제를 수정했습니다. #51205 (Nikolai Kochetov).
- s3 및 s3Cluster 함수 충돌을 수정했습니다 #51209 (Nikolay Degterinsky).
- 컴파일된 표현식과 관련된 충돌을 수정했습니다 #51231 (LiuNeng).
- URL을 전환할 때 StorageURL의 use-after-free 문제 수정 #51260 (Michael Kolupaev).
- 매개변수화된 뷰 검사 업데이트 #51272 (SmitaRKulkarni).
- 동일한 파일이 백업에 중복 기록되는 문제를 수정했습니다 #51299 (Vitaly Baranov).
- ActionsDAG에서 발생한 퍼저 실패를 수정했습니다 #51301 (Alexey Milovidov).
- 함수
transform에서 불필요한 코드를 제거했습니다 #51350 (Alexey Milovidov).
ClickHouse 릴리스 23.5, 2023-06-08. 발표 자료, 동영상
업그레이드 참고 사항
- 기본적으로 마크와 프라이머리 키(primary key)를 압축합니다. 이로 인해 콜드 쿼리 시간이 크게 줄어듭니다. 업그레이드 참고 사항: 압축된 마크와 프라이머리 키 지원은 버전 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”가 제거되었습니다. 데이터 포맷은 계속 지원되지만, 관련 설정은 no-op이며 대신 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설정은 obsolete 상태이며 아무 동작도 하지 않습니다. #49719 (Alexey Milovidov). joinGet을 비결정적으로 표시했습니다(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 Client가 추가되었으며,
clickhouse keeper-client로 이용할 수 있습니다 #47414 (pufit). urlCluster테이블 함수를 추가합니다. 코드 중복을 줄이기 위해 모든 *Cluster 테이블 함수를 리팩터링합니다. 가능한 모든 *Cluster 함수 시그니처와 이름이 지정된 컬렉션에서 스키마 추론이 작동하도록 개선합니다. #38499를 해결합니다. #45427 (attack204), Pavel Kruglov.- 이제 쿼리 캐시는 프로덕션 워크로드에 사용할 수 있습니다. #47977 (Robert Schulze). 이제 쿼리 캐시는 합계와 extremes 수정자를 사용하는 쿼리도 지원합니다. #48853 (Robert Schulze). 하위 호환성을 위해
allow_experimental_query_cache설정을 obsolete 상태로 지정했습니다. 이 설정은 https://github.com/ClickHouse/ClickHouse/pull/47977 에서 제거되었습니다. #49934 (Timur Solodovnikov). - 지리 공간 데이터 타입(
Point,Ring,Polygon, andMultiPolygon)은 프로덕션 환경에서 사용할 수 있습니다. #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테이블(table)이 추가되었습니다. #45245 (mateng915). - 무작위 테이블 구조를 생성하는 새 함수
generateRandomStructure가 추가되었습니다. 이 함수는 테이블 함수generateRandom와 함께 사용할 수 있습니다. #47409 (Kruglov Pavel). ELSE브랜치 없이도CASE를 사용할 수 있도록 허용하고, 더 많은 타입을 처리할 수 있도록transform을 확장했습니다. 또한 Decimal 타입이 다른 숫자 타입과 함께 사용될 때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_ratio설정을 도입했습니다. 이 한도에 도달하면 ClickHouse는 새로운 머지 또는 뮤테이션 작업을 예약하지 않습니다. 또한 백그라운드 작업의 현재 메모리 사용량을 관찰할 수 있도록MergesMutationsMemoryTracking메트릭을 도입했습니다. #46089을 다시 제출했습니다. #48774를 닫습니다. #48787 (Dmitry Novik). - 함수
dotProduct가 배열에서도 작동합니다. #49050 (FFFFFFFHHHHHHH). - MySQL과의 호환성 향상을 위해
SHOW INDEX문을 지원합니다. #49158 (Robert Schulze). - 테이블 함수
url에 가상 컬럼_file및_path지원을 추가했습니다. - 테이블 함수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).- 이제 “—query” (또는 “-q”)가 없으면 clickhouse-client는 “—multiquery” 뒤에 오는 쿼리를 허용합니다. 예시: clickhouse-client —multiquery “select 1; select 2;”. #49870 (Alexey Gerasimchuk).
- 레플리카로부터 Hello 패킷을 수신하기 위한 별도의
handshake_timeout을 추가했습니다. #48854를 해결합니다. #49948 (Kruglov Pavel). - 지정한 횟수만큼 공백을 반복하는 함수 “space”가 추가되었습니다. #50103 (Robert Schulze).
- —input_format_csv_trim_whitespaces 옵션이 추가됐습니다. #50215 (Alexey Gerasimchuk).
dictGetAll함수가 regexp 트리 딕셔너리에서 여러 일치 항목의 값을 배열로 반환할 수 있도록 지원합니다. #50254를 해결합니다. #50255 (Johann Gan).- 날짜 또는 시간이 포함된 날짜를 가장 가까운 토요일 또는 일요일로 올림할 수 있는
toLastDayOfWeek함수를 추가했습니다. #50315 (Victor Krasnov). ignore_data_skipping_indices를 지정해 스킵 인덱스를 무시할 수 있는 기능. #50329 (Boris Kuschel).- 메모리 정보와 사용자별 ProfileEvents를 표시하는
system.user_processes테이블과SHOW USER PROCESSES쿼리를 추가했습니다. #50492 (János Benjamin Antal). - 테이블, 데이터베이스, 테이블 함수, 딕셔너리의 시크릿을 표시하기 위한 서버 및 포맷 설정
display_secrets_in_show_and_select를 추가했습니다. 어떤 사용자가 시크릿을 볼 수 있는지 제어하는 권한displaySecretsInShowAndSelect도 추가했습니다. #46528 (Mike Kot). - DATABASE에 속한 모든 테이블에 대해 ROW POLICY를 설정할 수 있도록 했습니다. #47640 (Ilya Golshtein).
성능 개선
- 기본적으로 마크와 프라이머리 키(primary key)를 압축합니다. 이렇게 하면 콜드 쿼리 시간이 크게 줄어듭니다. 업그레이드 참고 사항: 압축된 마크와 프라이머리 키 지원은 버전 22.9에 추가되었습니다. 압축된 마크 또는 프라이머리 키를 활성화했거나, 압축된 마크 또는 프라이머리 키가 기본적으로 활성화되는 버전 23.5 이상을 설치한 경우 버전 22.8 이하로는 다운그레이드할 수 없습니다. 서버 설정 파일의
<merge_tree>섹션에서compress_marks및compress_primary_key설정을 지정해 압축된 마크 또는 프라이머리 키를 명시적으로 비활성화할 수도 있습니다. #42587 (Alexey Milovidov). - 새로운 설정 s3_max_inflight_parts_for_one_file은 파일 하나당 멀티파트 업로드 요청으로 동시에 로드할 수 있는 파트 수의 한도를 설정합니다. #49961 (Sema Checherinda).
- 여러 파일에서 읽을 때 각 파일별 병렬 파싱 스레드 수를 줄였습니다. #42192을 해결했습니다. #46661 (SmitaRKulkarni).
- 일반 읽기보다 더 적은 그래뉼을 읽는 경우에만 집계 프로젝션을 사용합니다. 이는 쿼리가 프로젝션이 아니라 테이블의 PK를 사용하는 경우에 도움이 됩니다. #49150을 수정했습니다. #49417 (Nikolai Kochetov).
- 삽입된 데이터가 없으면
ANY해시 조인에 블록을 저장하지 않습니다. #48633 (vdimir). - JIT 컴파일 시 집계 조합자
-If관련 문제를 수정하고, 집계 함수에 JIT 컴파일을 활성화합니다. #48120을 해결합니다. #49083 (Igor Nikonov). - 원격 테이블에서 읽을 때는 작업 스틸링이 가능하도록 전체 part를 읽는 대신 더 작은 작업을 사용합니다 * 작업 크기는 읽을 컬럼의 크기에 따라 결정됩니다 * S3에서 읽을 때는 항상 1MB 버퍼를 사용합니다 * 캐시 세그먼트 경계를 1MB에 맞춰 정렬해 작은 작업에서도 충분한 크기를 유지하도록 합니다. 또한 조각화를 방지하는 데도 도움이 됩니다. #49287 (Nikita Taranov).
- 다음 설정이 도입되었습니다: - 백그라운드 작업에 사용되는 메모리 양을 제한하는
merge_max_block_size_bytes- 수직 병합을 활성화하기 위한 추가 조건을 제공하는vertical_merge_algorithm_min_bytes_to_activate#49313 (Nikita Mikhaylov). - 로컬 파일 시스템에서 읽을 때 사용하는 읽기 버퍼의 기본 크기가 다소 더 적절한 값으로 변경되었습니다. 또한 새로운 설정 2개인
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).- 적절한 경우
LowCardinality를 적용해system.query_log및system.query_thread_log테이블을 최적화했습니다. 이들 테이블에 대한 쿼리가 더 빨라집니다. #49530 (Alexey Milovidov). - 로컬
Parquet파일을 읽을 때 성능이 더 향상되었습니다(병렬 읽기). #49539 (Michael Kolupaev). - 특정 시나리오에서
RIGHT/FULL JOIN의 성능이 최대 2배까지 향상되었습니다. 특히 작은 왼쪽 table과 큰 오른쪽 table을 join할 때 효과적입니다. #49585 (lgbo). - Rust에서 LTO를 활성화해 BLAKE3의 성능을 11% 개선했습니다. #49600 (Azat Khuzhin). 이제 C++와 대등한 수준입니다.
system.opentelemetry_span_log의 구조를 최적화합니다. 적절한 곳에는LowCardinality를 사용합니다. 이 테이블은 전반적으로 썩 잘 설계된 것은 아닙니다(일반적인 속성에도 Map 데이터 타입을 사용함). 하지만 약간은 나아질 것입니다. #49647 (Alexey Milovidov).grace_hash조인에서 해시 테이블 크기를 미리 예약하도록 했습니다. #49816 (lgbo).uniqExactIf상태의 병렬 머지. #49885를 해결했습니다. #50285 (flynn).- Keeper 개선: Keeper에
CheckNotExists요청을 추가해 복제된 테이블의 성능을 향상했습니다. #48897 (Antonio Andelic). - Keeper 성능 개선: 처리 중 동일한 요청을 두 번 직렬화하지 않도록 했습니다. 큰 요청에 대한 역직렬화 결과를 캐시합니다. 새로운 coordination 설정
min_request_size_for_cache로 제어됩니다. #49004 (Antonio Andelic). - 머지할 파트를 선택할 때, 머지할 항목이 없는 파티션이 많은 경우 발생하는
ListZooKeeper 요청 수를 줄였습니다. #49637 (Alexander Tokmakov). - FS cache의 잠금 처리를 개선했습니다 #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)을 선택합니다. 또한 최신 upstream qpl에 맞춰 ClickHouse의 qpl 빌드용 cmakefile을 재구성했습니다. #49811 (jasperzhu).- 순수 병렬 레플리카에서 조인을 수행할 수 있도록 초기 지원을 추가했습니다. #49544 (Raúl Marín).
- “zero-copy 복제”에서
Outdated파트 제거 작업의 병렬성을 높였습니다. #49630 (Alexander Tokmakov). - 병렬 레플리카: 1)
parallel_replicas_for_non_replicated_merge_tree설정이 비활성화된 비복제 스토리지에서 병렬 레플리카를 사용할 때 발생하던NOT_FOUND_COLUMN_IN_BLOCK오류를 수정했습니다. 2) 이제allow_experimental_parallel_reading_from_replicas는 0, 1, 2의 3가지 값을 가질 수 있습니다. 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설정과 동일한 의미를 가지며, 특정 테이블에 비동기 삽입을 활성화합니다. 참고:clickhouse-client에서 실행한 삽입 쿼리에는 적용되지 않으므로, 이 경우에는 쿼리 수준 설정을 사용하십시오. #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테이블 함수의 별칭일 뿐이며 새로운 기능을 추가하지는 않습니다. #47815 (Kuba Kaflik). - S3에서 엄격한 파트 크기를 사용할 수 있는 기능 추가(CloudFlare R2 S3 Storage와의 호환성). #48492 (Azat Khuzhin).
Replicated데이터베이스 레플리카 정보가 포함된 새 컬럼database_shard_name,database_replica_name,is_active가system.clusters에 추가되었습니다.SYSTEM DROP DATABASE REPLICA쿼리에 선택적FROM SHARD절이 추가되었습니다. #48548 (Alexander Tokmakov).- 복제된 테이블(Replicated Table)의 메타데이터가 어느 (보조) zookeeper 클러스터에 저장되는지 나타내기 위해 system.replicas에 새 컬럼
zookeeper_name을 추가했습니다. #48549 (cangyin). IN연산자에서Date와Date32비교를 지원합니다. #48736을 해결했습니다. #48806 (flynn).HDFS에서 소거 코딩 지원, 작성자: @M1eyu2018, @tomscut. #48833 (M1eyu).- 보조 ZooKeeper 클러스터에서 SYSTEM DROP REPLICA를 구현했으며, 이로써 #48931이 해결될 수 있습니다. #48932 (wangxiaobo).
- MongoDB에 배열 데이터 타입을 추가했습니다. #48598를 닫았습니다. #48983 (Nikolay Degterinsky).
- 테이블에
Interval데이터 타입을 저장할 수 있게 되었습니다. #49085 (larryluogit). - 명시적인 윈도우 프레임 정의 없이
ntile윈도 함수를 사용할 수 있도록 했습니다:ntile(3) OVER (ORDER BY a), #46763를 해결했습니다. #49093 (vdimir). - 테이블(table)에 미완료된 뮤테이션이 이미 많이 있는 경우, 뮤테이션을 생성하는
ALTER쿼리(ALTER UPDATE,ALTER DELETE,ALTER MODIFY COLUMN, …)를 지연하거나 예외를 발생시키기 위한 설정(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).
- 함수 문서를 더 세분화된 항목으로 나눴습니다. #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). - 이제
OUTFILE을 통해 사용할 때 Parquet writer는 적절한 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인 객체를 읽을 수 있도록 합니다. (빈 파일은 백업되지 않으므로 메타데이터 파일에 blob이 0개인 상태가 될 수 있습니다.) #49480을 해결합니다. #49519 (Kseniia Sumarokova).
ThreadGroup가 분리된 뒤 스레드의 MemoryTracker를total_memory_tracker에 연결합니다. #49527 (Dmitry Novik).- 쿼리에서 쿼리 매개변수가 여러 번 사용되는 경우 매개변수화된 뷰를 수정했습니다. #49556 (Azat Khuzhin).
- 쿼리의 Context에서 마지막으로 전송된 ProfileEvents 스냅샷에 할당된 메모리를 해제합니다. 후속 작업 #47564. #49561 (Dmitry Novik).
- 함수 “makeDate”는 이제 MySQL과 호환되는 오버로드(연도 및 연중 일수 인수)를 지원합니다. #49603 (Robert Schulze).
RegExpTreeDictionary에서dictionary테이블 함수를 지원합니다. #49666 (Han Fei).- 가중치 기반 공정 IO 스케줄링 정책을 추가했습니다. 서버를 재시작하지 않고도 런타임 중에 IO 스케줄링 계층을 업데이트할 수 있는 동적 리소스 관리자를 추가했습니다. #49671 (Sergei Trifonov).
- 멀티파트 업로드 후 GCS에 compose 요청을 추가했습니다. 이제 멀티파트 업로드로 업로드된 객체에 대해서도 copy 작업을 사용할 수 있습니다. 파트 크기가 서로 다른 객체에서는 compose 요청이 실패할 수 있으므로
s3_strict_upload_part_size를 특정 값으로 설정하는 것이 좋습니다. #49693 (Antonio Andelic). extractKeyValuePairs함수의 경우: “best-effort” parsing 로직을 개선해key_value_delimiter를 값의 유효한 일부로 허용합니다. 또한 분기 처리가 단순해지고, 약간의 성능 향상도 기대할 수 있습니다. #49760 (Arthur Passos).- system.processors_profile_log에
initial_query_idfield 추가 #49777 (helifu). - 이제 시스템 로그 테이블에 사용자 정의 sorting key를 지정할 수 있습니다. #49778 (helifu).
- 계산에 어떤 파티션이 사용되는지 나타내기 위해
system.query_log에 새 필드partitions가 추가되었습니다. #49779 (helifu). ReplicatedMergeTree용enable_the_endpoint_id_with_zookeeper_name_prefix설정이 추가되었습니다(기본적으로 비활성화됨). 이 설정을 활성화하면 테이블의 interserver 통신 endpoint에 ZooKeeper cluster 이름이 추가됩니다. 이를 통해 동일한 경로를 사용하지만 auxiliary ZooKeepers가 다른 복제된 테이블이 있을 때 발생하는Duplicate interserver IO endpoint오류를 방지할 수 있습니다. #49780 (helifu).clickhouse-local에 쿼리 매개변수 지원을 추가합니다. #46561를 해결합니다. #49785 (Nikolay Degterinsky).- 기본적으로 YAML에서 딕셔너리와 함수를 로드할 수 있도록 했습니다. 이전 버전에서는
*.xml파일을 사용하도록 되어 있었기 때문에 설정 파일에서dictionaries_config또는user_defined_executable_functions_config를 수정해야 했습니다. #49812 (Alexey Milovidov). - 이제 Kafka 테이블 엔진은 alias 컬럼을 지원합니다. #49824 (Aleksandr Musorin).
extractKeyValuePairs에서 생성되는 쌍의 최대 개수를 제한하는 설정을 추가했습니다. 이는 메모리 사용량이 지나치게 커지는 것을 방지하기 위한 안전장치입니다. #49836 (Arthur Passos).IN연산자의 인수가 단일 요소 튜플인 (드문) 경우에 대한 지원을 추가했습니다. #49844 (MikhailBurdukov).bitHammingDistance함수는String및FixedString데이터 타입을 지원합니다. #48827을 해결합니다. #49858 (flynn).- OS X의 클라이언트에서 timeout을 재설정할 때 발생하는 오류를 수정했습니다. #49863 (alekar).
bitCount함수에 UInt128, Int128, UInt256, Int256와 같은 대형 정수 지원이 추가되었습니다. 이를 통해 AI 애플리케이션에서 대형 비트 마스크에 대한 해밍 거리를 계산할 수 있습니다. #49867 (Alexey Milovidov).- 암호화된 디스크에서 key ID 대신 지문을 사용할 수 있습니다. 이를 통해 암호화된 디스크 구성이 간소화됩니다. #49882 (Vitaly Baranov).
- PostgreSQL에 UUID 데이터 타입을 추가했습니다. #49739를 해결했습니다. #49894 (Nikolay Degterinsky).
- 함수
toUnixTimestamp가 이제Date및Date32인수를 지원합니다. #49989 (Victor Krasnov). - Dictionaries는 server 메모리만 사용량으로 계산합니다. #49995 (Azat Khuzhin).
- server에서 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). - Keeper에 클러스터 노드를 등록할 수 있도록
my_hostname설정을 통해 FQDN을 전달하는 기능을 지원합니다. 다중 컴퓨트 그룹을 지원하기 위해 invisible 설정을 추가했습니다. 클러스터로 동작하는 컴퓨트 그룹은 다른 컴퓨트 그룹에서는 보이지 않습니다. #50186 (Yangkuan Liu). LIMIT n을 지정할 수 있는데도 PostgreSQL이 모든 데이터를 읽는 문제를 수정했습니다. #50187 (Kseniia Sumarokova).- 서브쿼리를 포함한 쿼리에 대한 새 프로파일 이벤트(
QueriesWithSubqueries/SelectQueriesWithSubqueries/InsertQueriesWithSubqueries)를 추가했습니다. #50204 (Azat Khuzhin). - 구성 파일을 통해 권한이 부여된 역할을 지정할 수 있도록 users.xml 파일에 roles 필드를 추가했습니다. #50278 (pufit).
- AsynchronousMetrics에서
CGroupCpuCfsPeriod및CGroupCpuCfsQuota를 보고하도록 했습니다. - server 시작 시 cgroup v2 메모리 제한을 준수합니다. #50379 (alekar). - SIGQUIT용 시그널 handler를 추가하여 SIGINT와 동일하게 동작하도록 했습니다. #50298를 해결합니다. #50435 (Nikolay Degterinsky).
- 객체 크기가 커서 JSON 파싱이 실패할 경우, 디버깅할 수 있도록 마지막 위치를 출력합니다. #50474 (Valentin Alexeev).
- 고정 크기가 아닌 Decimal을 지원합니다. #49130을 해결합니다. #50586 (Kruglov Pavel).
빌드/테스트/패키징 개선
- 새롭고 개선된
keeper-bench입니다. 모든 항목은 YAML/XML 파일에서 사용자 지정할 수 있습니다: - 요청 생성기 - 각 요청 생성기 유형마다 고유한 필드 집합을 지정할 수 있습니다 -multi키 아래에 동일하게 정의하기만 하면 다중 요청을 생성할 수 있습니다 - 분포를 제어하기 위해 multi 내의 각 요청 또는 하위 요청마다weight필드를 정의할 수 있습니다 - 테스트 실행 전에 설정해야 하는 트리를 정의할 수 있습니다 - 호스트를 정의할 때 모든 timeout을 사용자 지정할 수 있으며, 각 호스트에 대해 생성할 session 수도 제어할 수 있습니다 -min_value및max_value필드로 정의된 정수는 난수 생성기입니다. #48547 (Antonio Andelic). - Io_uring은 macOS에서 지원되지 않으므로, 간헐적인 실패를 피하려면 로컬에서 테스트를 실행할 때 선택하지 마십시오. #49250 (Frank Chen).
- 테스트용 명명된 장애 주입을 지원합니다. #49361 (Han Fei).
- AWS Lambda와 같이
prctl(프로세스 제어) syscall을 사용할 수 없는 OS에서도 ClickHouse를 실행할 수 있게 했습니다. #49538 (Alexey Milovidov). - qpl에서 contrib/isa-l과 isa-l 간의 빌드 충돌 문제를 해결했습니다 49296. #49584 (jasperzhu).
- 이제 Utilities는 기본으로 빌드되지 않고, 명시적으로 요청한 경우에만 빌드됩니다(“-DENABLE_UTILS=1”). 이에 따라 일반적인 개발 빌드의 링크 시간이 줄어듭니다. #49620 (Robert Schulze).
- 향후 실수로 삭제되는 일을 방지하기 위해 idxd-config의 빌드 설명을 별도의 CMake 파일로 분리했습니다. #49651 (jasperzhu).
- master에 분석기가 활성화된 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).
- 이전 실패 시 백업/복원 동시성 검사 #48726 (SmitaRKulkarni).
- 존재하지 않는 ZK 경로에 테이블을 ATTACH할 때 ReadonlyReplica 메트릭이 증가하지 않던 문제를 수정했습니다 #48954 (wangxiaobo).
- 일부 위치에서 포착되지 않은 예외로 인해
terminate가 호출될 수 있는 문제를 수정했습니다 #49112 (Kruglov Pavel). - 여러 StorageJoin이 포함된 쿼리에서 발생하는 key not found 오류 수정 #49137 (vdimir).
- 널 허용 기본 키 사용 시 잘못된 쿼리 결과가 반환되던 문제 수정 #49172 (Duc Canh Le).
- big endian 머신에서 reinterpretAs*() 문제 수정 #49198 (Suzy Wang).
- (실험적 zero-copy 복제) zero-copy 파트를 더 원자적으로 잠그도록 개선 #49211 (alesapin).
- 오래된 파트 로딩 시 발생하는 경쟁 상태 수정 #49223 (Alexander Tokmakov).
- 모든 키 값이 NULL인 경우 및 그룹에서 롤업을 사용할 때 잘못된 결과가 반환되던 문제 수정 #49282 (Shuai li).
- 세그먼트가 있는 HASHED 딕셔너리의 load_factor 계산 수정 #49319 (Azat Khuzhin).
- alias 컬럼에 압축 코덱을 설정할 수 없도록 변경 #49363 (Timur Solodovnikov).
- 기존 part 디렉터리 제거 버그 수정 #49365 (alesapin).
- HMAC를 사용할 때 GCS가 정상적으로 동작하도록 수정 #49390 (Antonio Andelic).
- remote()에서 읽을 때 서브쿼리 Set이 생성되지 않던 fuzz 버그를 수정했습니다 #49425 (Alexander Gololobov).
shutdown_wait_unfinished_queries의 동작을 반대로 변경 #49427 (Konstantin Bogdanov).- (Experimental zero-copy 복제) zero-copy 관련 또 다른 버그를 수정했습니다 #49473 (alesapin).
- postgres 데이터베이스 설정 문제 수정 #49481 (Mal Curtis).
s3Cluster인수를 올바르게 처리하도록 수정했습니다 #49490 (Antonio Andelic).- TraceCollector 소멸자에서 발생하던 버그를 수정했습니다. #49508 (Yakov Olkhovskiy).
- 짧은 seek 시 AsynchronousReadIndirectBufferFromRemoteFS가 오작동하던 문제를 수정했습니다 #49525 (Michael Kolupaev).
- Dictionaries의 로딩 순서 수정 #49560 (Alexander Tokmakov).
- Object(‘json’) 컬럼의 데이터 타입 변경을 허용하지 않습니다 #49563 (Nikolay Degterinsky).
- 스트레스 테스트 수정(논리 오류: 7134 >= 11030이어야 함) #49623 (Kseniia Sumarokova).
- DISTINCT 관련 버그를 수정했습니다 #49628 (Alexey Milovidov).
- 수정: 정렬되지 않은 컬럼에 0값이 있을 때 DISTINCT의 순서 처리 문제 수정 #49636 (Igor Nikonov).
- 퍼저로 실행한 UBSan이 발견한 큰 정수 관련 일회성 오류를 수정했습니다 #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(홀수 개수)에서 발생하는 msan 문제를 수정했습니다 #49750 (Robert Schulze).
- 집계 함수 kolmogorovSmirnovTest 수정 #49768 (FFFFFFFHHHHHHH).
- 네이티브 프로토콜의 설정 별칭 수정 #49776 (Azat Khuzhin).
- 단일 인수의 튜플 배열에서
arrayMap문제 수정 #49789 (Anton Popov). - 쿼리별 IO/BACKUP 스로틀링 설정 수정 #49797 (Azat Khuzhin).
- profile 정의에서 NULL 설정 문제 수정 #49831 (Vitaly Baranov).
- 프로젝션과
aggregate_functions_null_for_empty설정(query_plan_optimize_projection관련)에서 발생하던 버그를 수정했습니다 #49873 (Amos Bird). - 재시작 후 분산 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).- fibers 관련 두 번째 시도에서 SpanHolder::finish()의 assert 수정 #50034 (Kruglov Pavel).
- DDL OpenTelemetry 컨텍스트 직렬화에 올바른 이스케이프 처리를 추가 #50045 (Azat Khuzhin).
- 손상된 프로젝션 파트가 보고되는 문제 수정 #50052 (Amos Bird).
- JIT 컴파일의 not equals NaN 문제 수정 #50056 (Maksim Kita).
- 인수가 없는 복제된 데이터베이스에서 발생하던 충돌 수정 #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 절에서 중첩된 분산 SELECT 문제를 수정했습니다 #50234 (Azat Khuzhin).
- keyed siphash에서 msan 문제 수정 #50245 (Robert Schulze).
- 논블로킹 모드에서 Poco 소켓의 버그를 수정하고, 실제 논블로킹 소켓을 사용하도록 했습니다 #50252 (Kruglov Pavel).
- 백업 항목의 체크섬 계산을 수정했습니다 #50264 (Vitaly Baranov).
- 비교 함수 NaN 수정 #50287 (Maksim Kita).
- JIT 집계의 널 허용 키 수정 #50291 (Maksim Kita).
- 빈 Arrow 또는 Parquet 출력을 작성할 때 clickhouse-local이 충돌하는 문제 수정 #50328 (Michael Kolupaev).
- Pool::Entry::disconnect() 호출 시 발생하는 크래시 수정 #50334 (Val Doroshchuk).
- 디렉터리 잠금을 더 오래 유지해 part를 fetch하는 동작을 개선했습니다 #50339 (SmitaRKulkarni).
- 두 인수가 모두 상수인 bitShift* 함수 수정 #50343 (Kruglov Pavel).
- 요청 전처리 중 예외가 발생할 때 Keeper에서 교착 상태가 발생하던 문제를 수정했습니다. #50387 (frinkr).
- const 정수 값 해싱을 수정했습니다 #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).
- 잘못된 상수 폴딩을 수정 #50536 (Alexey Milovidov).
- 스트레스 테스트의 논리 오류 수정(추가할 공간이 부족함 …) #50583 (Kseniia Sumarokova).
- values 테이블 함수에서 Null 값이 LowCardinality(Nullable)로 변환되는 문제를 수정했습니다 #50637 (Kruglov Pavel).
- 잘못된 RegExpTreeDictionary 최적화를 되돌립니다 #50642 (Johann Gan).
ClickHouse 릴리스 23.4, 2023-04-26. 발표, 동영상
하위 호환되지 않는 변경 사항
- 이제 formatDateTime() 함수의 Formatter ‘%M’은 분이 아니라 월 이름을 출력합니다. 이로써 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 (凌涛).
새 기능
- 새로운 집계 함수
quantileGK/quantilesGK를 지원합니다. Spark의 approx_percentile과 유사합니다. 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-range만 대기합니다(머지와 뮤테이션은 무시됨).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에 저장되며, 모니터링 시 비영속적인ReplicatedDataLossprofile event 대신 사용할 수 있습니다. #48526 (Sergei Trifonov).- 호환성 지원을 위해
soundex함수를 추가했습니다. #39880을 해결합니다. #48567 (FriendLey). - JSONExtract에서
Map타입을 지원합니다. #48629 (李扬). - 줄바꿈 구분 기호와 4칸 들여쓰기를 사용해 가독성 좋은 JSON을 출력하는
PrettyJSONEachRow포맷을 추가했습니다. #48898 (Kruglov Pavel). - Parquet 파일 메타데이터를 읽을 수 있는
ParquetMetadata입력 형식을 추가했습니다. #48911 (Kruglov Pavel). - 문자열에서 키-값 쌍을 추출하는
extractKeyValuePairs함수를 추가했습니다. 입력 문자열에는 노이즈가 포함될 수 있으며(즉, 로그 파일처럼 키-값 쌍 포맷을 100% 정확히 따를 필요는 없음), 알고리즘은 함수에 전달된 인수와 일치하는 키-값 쌍을 찾습니다. 현재 이 함수는 다음 인수를 받습니다:data_column(필수),key_value_pair_delimiter(기본값은:),pair_delimiters(기본값은\space \, \;),quoting_character(기본값은 큰따옴표). #43606 (Arthur Passos). - 이제 replaceOne(), replaceAll(), replaceRegexpOne(), replaceRegexpAll() 함수를 상수가 아닌 pattern 및 replacement 인수로 호출할 수 있습니다. #46589 (Robert Schulze).
- 유형이
Map인 컬럼을 처리하기 위한 함수mapConcat,mapSort,mapExists를 추가했습니다. #48071 (Anton Popov).
성능 개선
- 이제
Parquet포맷의 파일을 훨씬 더 빠르게 읽을 수 있습니다. IO와 디코딩이 병렬화되었고(max_threads설정으로 제어), 필요한 데이터 범위만 읽습니다. #47964 (Michael Kolupaev). - 다음과 같이
IN(subquery)을 사용하는 뮤테이션을 실행할 때ALTER TABLE t UPDATE col='new value' WHERE id IN (SELECT id FROM huge_table), 테이블t에 여러 파트가 있으면 각 파트마다 subquerySELECT id FROM huge_table용 Set이 메모리에 생성됩니다. 파트 수가 많으면 메모리와 CPU를 많이 소모해 OOM으로 이어질 수 있습니다. 이를 해결하기 위해, 현재 뮤테이션 작업이 생성 중인 Set을 잠시 저장하는 단기 캐시를 도입했습니다. 동일한 뮤테이션의 다른 작업이 동시에 실행되면 캐시에서 해당 Set을 찾아 생성이 끝날 때까지 기다린 뒤 재사용할 수 있습니다. #46835 (Alexander Gololobov). ALTER TABLE쿼리를 적용할 때는 필요한 경우에만 의존성을 확인합니다. #48062 (Raúl Marín).- 함수
mapUpdate를 최적화했습니다. #48118 (Anton Popov). - 이제 로컬 레플리카로 보내는 내부 쿼리는 명시적으로 전송되며, 해당 데이터는 loopback interface를 통해 수신됩니다.
prefer_localhost_replica설정은 병렬 레플리카에는 적용되지 않습니다. 이는 더 나은 스케줄링을 위해 필요하며, 코드도 더 단순해집니다. 즉, initiator는 읽기 프로세스 조정과 결과 병합만 담당하고, 모든 보조 쿼리가 데이터를 읽는 동안 요청에 계속 응답합니다. 참고: loopback interface를 사용하는 방식은 성능상 아주 유리하지는 않지만, 그렇지 않으면 일부 레플리카가 작업을 받지 못해 쿼리 실행이 오히려 더 느려지고 사용 가능한 리소스를 모두 활용하지 못할 수 있습니다. 또한 coordinator 초기화는 이제 더 지연되어 수행됩니다. 모든 들어오는 요청에는 읽기 알고리즘 정보가 포함되며, 첫 번째 요청이 도착했을 때 이 정보를 사용해 coordinator를 초기화합니다. 어떤 레플리카든 다른 알고리즘으로 읽기를 시도하면 예외가 발생하고 쿼리가 중단됩니다. #48246 (Nikita Mikhaylov). - 스킵 인덱스 분석에만 사용되고 설정(
use_skip_indexes=0)으로 비활성화된 경우에는 subquery가 있는IN절의 오른쪽에 대한 Set을 생성하지 않습니다. 이전에는 이것이 쿼리 성능에 영향을 줄 수 있었습니다. #48299 (Anton Popov). FROM file(...)에서 읽은 직후 쿼리 처리가 병렬화됩니다. #38755와 관련된 변경입니다. #48525 (Igor Nikonov). 이제 모든 데이터 소스에서 읽은 직후에도 쿼리 처리가 병렬화됩니다. 영향을 받는 데이터 소스는 주로 단순한 스토리지나url,file같은 테이블 함수 기반의 외부 스토리지입니다. #48727 (Igor Nikonov). 이 동작은parallelize_output_from_storages설정으로 제어되며, 기본적으로는 활성화되어 있지 않습니다.- ThreadPool 뮤텍스의 경합을 줄였습니다(매우 많은 수의 작은 job에서 성능이 향상될 수 있습니다). #48750 (Sergei Trifonov).
- 여러
ALTER DELETE뮤테이션의 메모리 사용량을 줄였습니다. #48522 (Nikolai Kochetov). skip_unavailable_shards설정이 활성화된 경우 불필요한 connection 시도를 제거했습니다. #48771 (Azat Khuzhin).
실험적 기능
- 쿼리 캐시의 엔트리가 이제
max_block_size크기에 맞게 합쳐진 뒤 압축됩니다. #45912 (Robert Schulze). - 이제 쿼리 캐시에서 사용자별 쿼터를 정의할 수 있습니다. #48284 (Robert Schulze).
- 병렬 레플리카 관련 일부 수정 사항입니다. #48433 (Nikita Mikhaylov).
- 암호화된 디스크에서 zero-copy 복제(실험적 기능)를 구현했습니다. #48741 (Vitaly Baranov).
개선 사항
connect_timeout_with_failover_ms의 기본값을 1000ms로 늘렸습니다(https://github.com/ClickHouse/ClickHouse/pull/47229에 비동기 연결이 추가되었기 때문입니다). #5188을 종료합니다. #49009 (Kruglov Pavel).- 데이터 레이크 관련 여러 개선 사항: - 파티션되지 않은 데이터에서도
Iceberg가 작동하도록 했습니다. -Iceberg포맷 버전 v2를 지원합니다(이전에는 v1만 지원했습니다). -DeltaLake/Hudi의 파티션된 데이터 읽기를 지원합니다. - Delta의 체크포인트 파일을 사용해DeltaLake메타데이터를 더 빠르게 읽을 수 있도록 했습니다. - 잘못된Hudi읽기 동작을 수정했습니다. 이전에는 읽을 데이터를 잘못 선택해 작은 테이블만 올바르게 읽을 수 있었습니다. - 변경된 데이터의 업데이트를 이러한 엔진이 반영하도록 했습니다(이전에는 상태가 테이블 생성 시점에 설정되었습니다). - Spark를 사용해Iceberg/DeltaLake/Hudi에 대한 적절한 테스트를 수행하도록 했습니다. #47307 (Kseniia Sumarokova). - 소켓에 대한 비동기 연결과 소켓에 대한 비동기 쓰기를 추가했습니다. 세그먼트 전반에서 연결 생성과 쿼리/외부 테이블 전송이 비동기로 이루어지도록 했습니다. fiber를 사용해 코드를 리팩터링했습니다. #46931을 해결했습니다. 이 PR 이후에는
connect_timeout_with_failover_ms의 기본값을 늘릴 수 있게 됩니다 (https://github.com/ClickHouse/ClickHouse/issues/5188). #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를 활성화하여 전체 provider chain이 기본적으로 구성되도록 했습니다. #47397 (Antonio Andelic). - 현재 JSON_VALUE 함수는 Spark의 get_json_object 함수와 유사하며, ‘$.key’와 같은 경로를 사용해 JSON 문자열에서 값을 가져올 수 있습니다. 다만 몇 가지 차이점이 있습니다 - 1. Spark의 get_json_object는 해당 경로가 존재하지 않으면 null을 반환하지만, JSON_VALUE는 빈 문자열을 반환합니다; - 2. Spark의 get_json_object는 JSON 객체/배열 값과 같은 복합 유형의 값을 반환할 수 있지만, JSON_VALUE는 빈 문자열을 반환합니다. #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 field는 위치에 따라 매칭됩니다. #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 a, b, c, FROM table와 같이 SELECT 쿼리의 표현식 목록에서 끝에 오는 쉼표를 허용합니다. #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 임시 버퍼가 이제 가상 파일 시스템 캐시의 데이터를 제거하는 방식으로 동작할 수 있습니다. #48664 (Vladimir C).
CREATE AS SELECT에서도 스키마 추론이 작동하도록 개선했습니다. #47599를 해결했습니다. #48679 (flynn).- 하나의
MUTATE_PART엔트리당 뮤테이션 명령 수를 제한할 수 있는ReplicatedMergeTree용replicated_max_mutations_in_one_entry설정이 추가되었습니다(기본값은 10000). #48731 (Alexander Tokmakov). - AggregateFunction 타입에서 사용되지 않는 arena 바이트를
read_bytes에 포함해 계산하지 않습니다. #48745 (Raúl Marín). - MySQL 딕셔너리 소스 + 명명된 컬렉션에서 일부 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_namealias를 추가했습니다. #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).
- 로그 메시지의 profile events를 추가해 심각도별 로그 메시지 수를 쉽게 확인할 수 있게 했습니다. #49042 (Alexey Milovidov).
- 이전 버전에서는 DOS 또는 macOS Classic 줄바꿈 문자가 있는 경우, 병렬 parsing 사용 여부에 따라
LineAsString포맷이 일관되지 않게 동작했습니다. 이로써 #49039가 해결되었습니다. #49052 (Alexey Milovidov). - 파싱되지 않은 쿼리 매개변수에 대한 예외 메시지에 매개변수 이름도 표시됩니다. #48878을 재구현했습니다. #48772를 닫았습니다. #49061 (Alexey Milovidov).
빌드/테스트/패키징 개선
- 시간대(time zone)를 업데이트했습니다. 다음 항목이 업데이트되었습니다: 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).
- 새 분석기 인프라를 활성화한 상태로 실행되는 CI를 추가했습니다. #48719 (Dmitry Novik).
버그 수정(공식 안정 릴리스에서 사용자가 확인할 수 있는 오동작)
- 백그라운드 스레드에서 푸시되는 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).
sparkbar함수의 오버플로우 문제를 수정했습니다 #48121 (Vladimir C).- S3의 레이스 컨디션 수정 #48190 (Anton Popov).
- 동작이 일관되지 않아 집계 함수의 JIT를 비활성화했습니다 #48195 (Alexey Milovidov).
- alter 포맷 수정(사소한 변경) #48289 (Natasha Murashkina).
- RabbitMQ의 CPU 사용량 문제 수정(#44404 이후 23.2에서 악화되었음) #48311 (Kseniia Sumarokova).
- Merge over Distributed에 대한 EXPLAIN PIPELINE에서 발생하던 충돌 수정 #48320 (Azat Khuzhin).
- LowCardinality를 Arrow 딕셔너리로 직렬화할 때 발생하는 문제 수정 #48361 (Kruglov Pavel).
- TemporaryFileStream에서 캐시 file segment용 downloader 재설정 #48386 (Vladimir C).
- DROP/REPLACE PARTITION 시
SYSTEM SYNC REPLICA가 멈출 수 있던 문제를 수정했습니다 #48391 (Azat Khuzhin). - 딕셔너리에 의존하는 분산 테이블을 로드할 때 발생하는 시작 시 오류를 수정했습니다 #48419 (MikhailBurdukov).
- 시스템 테이블 이름을 자동으로 변경할 때는 종속성을 확인하지 않음 #48431 (Raúl Marín).
- KeeperMap 스토리지에서 영향을 받은 행만 업데이트 #48435 (Antonio Andelic).
- VFS cache에서 발생할 수 있는 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 mode로 인해 비밀번호 입력이 꼬이는 문제를 수정했습니다 #48528 (Michael Kolupaev).
- IP 및 UUID 타입의 키에 대한 중첩 맵 수정 #48556 (Yakov Olkhovskiy).
- 해시 Dictionaries의 병렬 로더에서 발생하던 처리되지 않은 예외를 수정했습니다 #48571 (Azat Khuzhin).
groupArray집계 함수가 널 허용 타입에서 빈 결과에 대해서도 올바르게 작동합니다 #48593 (lgbo).- ACL에서 스키마
auth로 노드가 생성되지 않는 경우가 간헐적으로 발생하던 Keeper 버그를 수정했습니다. #48595 (Aleksei Filatov). - UInt에서 IPv4 비교 연산자를 사용할 수 있도록 허용 #48611 (Yakov Olkhovskiy).
- cache에서 발생할 수 있는 오류 수정 #48636 (Kseniia Sumarokova).
- 빈 데이터로 수행한 async inserts는 더 이상 예외를 발생시키지 않습니다. #48663 (Anton Popov).
- RENAME TABLE 실패 시 테이블 의존성 수정 #48683 (Azat Khuzhin).
- 기본 키(primary key)에 중복된 컬럼이 있는 경우(프로젝션에서만 가능), 이전 버전에서는 버그 #48838로 이어질 수 있었습니다 (Amos Bird).
- send_thread/receive_thread를 join하는 동안 ZooKeeper에서 발생하던 경쟁 상태를 수정했습니다 #48849 (Alexander Gololobov).
- zero-copy 복제에서 무시 처리된 분리된 파트를 삭제하려고 할 때 발생하는 예기치 않은 파트 이름 오류를 수정했습니다 #48862 (Michael Lex).
Date32Parquet/Arrow 컬럼을Date32가 아닌 컬럼으로 읽을 때 발생하던 문제를 수정했습니다 #48864 (Kruglov Pavel).- row policy와 점(.)이 포함된 컬럼이 있는 테이블을 조회할 때 발생하는
UNKNOWN_IDENTIFIER오류 수정 #48976 (Kruglov Pavel). - 빈 널 허용 문자열에 대한 집계 문제 수정 #48999 (LiuNeng).
ClickHouse 릴리스 23.3 LTS, 2023-03-30. 발표, 동영상
업그레이드 참고 사항
- 경량한 DELETE가 프로덕션 환경에서 사용할 수 있는 상태가 되었으며 기본적으로 활성화됩니다. 이제 MergeTree 테이블에 대한
DELETE쿼리를 기본적으로 사용할 수 있습니다. *domain*RFC및netloc함수의 동작이 약간 변경되었습니다. 표준 준수 수준을 높이기 위해 URL authority에서 허용되는 기호 집합을 완화했습니다. #46841 (Azat Khuzhin).- 컬럼에 DEFAULT/EPHEMERAL/ALIAS/MATERIALIZED SQL 문을 사용하는 KafkaEngine 기반 테이블의 생성을 금지했습니다. #47138 (Aleksandr Musorin).
- “asynchronous connection drain” 기능이 제거되었습니다. 관련 설정과 메트릭도 함께 제거되었습니다. 내부 기능이었으므로, 해당 기능을 알지 못했던 사용자에게는 이번 제거가 영향을 주지 않습니다. #47486 (Alexander Tokmakov).
arraySum/Min/Max/Avg/Product,arrayCumSum/CumSumNonNegative,arrayDifference, 배열 생성, IN 연산자, 쿼리 매개변수,groupArrayMovingSum, 통계 함수,min/max/any/argMin/argMax, PostgreSQL wire 프로토콜, MySQL 테이블 엔진 및 함수,sumMap,mapAdd,mapSubtract,arrayIntersect에서 256비트 Decimal 데이터 타입(38자리 초과)을 지원합니다.arrayIntersect에는 큰 정수 지원도 추가되었습니다. 모멘트를 포함하는 통계 집계 함수(corr또는 여러TTest등)는 내부 표현으로Float64를 사용합니다(이 변경 전에는Decimal128을 사용했지만 의미가 없었습니다). 또한 분산이 무한대인 경우 이러한 함수는inf대신nan을 반환할 수 있습니다. 일부 함수는Decimal256데이터 타입을 허용하면서도 이전 버전에서는Decimal128을 반환했는데, 이제 이 문제가 수정되었습니다. 이 변경으로 #47569가 해결됩니다. 이 변경으로 #44864가 해결됩니다. 이 변경으로 #28335가 해결됩니다. #47594 (Alexey Milovidov).- backup_threads/restore_threads를 사용자 설정이 아닌 서버 설정으로 변경했습니다. #47881 (Azat Khuzhin).
- 상수이거나 비결정적인 보조 인덱스는 허용되지 않습니다. #46839 (Anton Popov).
새 기능
parallel_replicas_custom_key및parallel_replicas_custom_key_filter_type설정을 사용해 레플리카에서 작업을 분할하는 새로운 모드를 추가했습니다. 클러스터가 단일 세그먼트와 여러 레플리카로 구성된 경우, 최대max_parallel_replicas개까지 무작위로 선택해 세그먼트로 취급합니다. 각 세그먼트에 대해서는 해당 필터를 시작 노드에서 쿼리에 추가한 뒤 세그먼트로 전송합니다. 클러스터가 여러 세그먼트로 구성된 경우에는 임의의 키를 정의할 수 있다는 점만 제외하면sample_key와 동일하게 동작합니다. #45108 (Antonio Andelic).- 취소 시 부분 결과를 표시하는 옵션: 취소된 쿼리(예: Ctrl-C로 취소된 경우)가 부분 결과를 반환할 수 있도록 하는 쿼리 설정
partial_result_on_first_cancel이 추가되었습니다. #45689 (Alexey Perevyshin). - 임시 테이블에서 임의의 테이블 엔진을 지원하도록 추가했습니다(Replicated 및 KeeperMap 엔진 제외). #31497을 해결했습니다. #46071 (Roman Vasin).
- Keeper의 중앙 집중식 스토리지를 사용해 사용자 정의 SQL 함수의 복제를 지원하도록 했습니다. #46085 (Aleksei Filatov).
- 서버 구성을 담는
system.server_settings(system.settings와 유사)가 구현되었습니다. #46550 (pufit). UNDROP TABLE쿼리를 지원합니다. #46811을 해결합니다. #47241 (chen).- 이름이 지정된 컬렉션에 대해 별도의 권한 부여를 허용합니다(예:
SHOW/CREATE/ALTER/DROP named collection접근 권한을 한 번에 모두에게 부여하는 대신 특정 컬렉션에만 부여할 수 있습니다). #40894를 해결했습니다. 새 접근 유형NAMED_COLLECTION_CONTROL을 추가했습니다. 이 유형은 사용자 config에 명시적으로 추가하지 않는 한 user default에 기본으로 부여되지 않으며(GRANT ALL을 수행하려면 필요함), 또한 23.2와 달리 user default가 전체 접근 권한을 가지기 위해show_named_collections를 수동으로 지정할 필요도 더 이상 없습니다. #46241 (Kseniia Sumarokova). - 중첩된 사용자 지정 디스크를 사용할 수 있도록 했습니다. 이전에는 사용자 지정 디스크에서 평면 디스크 구조만 지원했습니다. #47106 (Kseniia Sumarokova).
- 호환성을 위해
WIDTH_BUCKETalias를 제공하는 함수widthBucket을 도입했습니다. #42974. #46790 (avoiderboi). - 지정된 포맷 문자열에 따라 새 함수
parseDateTime/parseDateTimeInJodaSyntax를 추가했습니다.parseDateTime은 MySQL 문법으로 String을 DateTime으로 파싱하고,parseDateTimeInJodaSyntax는 Joda 문법으로 파싱합니다. #46815 (李扬). - 테이블 함수
null의 기본 structure로dummy UInt8을 사용합니다. #46930을 종료합니다. #47006 (flynn). parseDateTimeBestEffort함수에서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 호환성을 위해
INSTR를positionCaseInsensitive의 별칭으로 추가했습니다. #47529를 종료했습니다. #47535 (flynn). toDecimalString함수가 추가되어 숫자를 고정된 precision의 문자열로 변환할 수 있게 되었습니다. #47838 (Andrey Zvonov).- MergeTree 설정
max_number_of_mutations_for_replica를 추가했습니다. 이 설정은 레플리카당 파트 뮤테이션 수를 지정된 값으로 제한합니다. 0은 레플리카당 뮤테이션 수에 제한이 없음을 의미합니다(다만 실행은 여전히 다른 설정에 의해 제약될 수 있습니다). #48047 (Vladimir C). - 한 쌍의 배열로 맵을 생성할 수 있는 맵 관련 함수
mapFromArrays를 추가했습니다. #31125 (李扬). - Parquet/ORC/Arrow 출력 형식에서 압축을 제어할 수 있게 하고, 더 많은 압축 입력 형식을 지원합니다. 이로써 #13541이 해결되었습니다. #47114 (Kruglov Pavel).
- 네이티브 프로토콜에 SSL 사용자 인증서 기반 authentication을 추가합니다. #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_threads는 서버 시작 시 코어 수에 맞춰 설정됩니다(max_threads와 동일한 알고리즘 사용). 이로써 CPU 수가 많은 서버에서final실행의 동시성이 향상됩니다. #47915 (Nikita Taranov). - CLICKHOUSE 소스를 사용하는 DIRECT 딕셔너리의 읽기 파이프라인을 여러 스레드에서 실행할 수 있도록 했습니다. 활성화하려면
CREATE DICTIONARY구문의 소스SETTINGS섹션에서dictionary_use_async_executor=1을 설정하십시오. #47986 (Vladimir C). - 단일 널 허용 키 집계의 성능을 최적화했습니다. #45772 (LiuNeng).
hasTokenOrNull,hasTokenCaseInsensitive및hasTokenCaseInsensitiveOrNull에서 소문자tokenbf_v1인덱스를 활용하도록 구현했습니다. #46252 (ltrk2).- SIMD를 사용해 처음 두 문자를 검색하도록
position및LIKE함수를 최적화했습니다. #46289 (Jiebin Sun). system.detached_parts에 대한 쿼리는 매우 커질 수 있으므로 이를 최적화했습니다. 블록 크기 제한을 고려해 여러 소스를 추가했습니다. 각 블록에서는 IO 스레드 풀을 사용해 파트 크기를 계산하며, 즉 syscall을 병렬로 수행합니다. #46624 (Sema Checherinda).- ReplicatedMergeTree 테이블의
max_replicated_merges_in_queue기본값이 16에서 1000으로 증가했습니다. 이로써 ClickHouse Cloud에서 공유 스토리지를 사용하는 클러스터처럼 레플리카 수가 매우 많은 클러스터에서 백그라운드 머지 작업을 더 빠르게 수행할 수 있습니다. #47050 (Alexey Milovidov). - 파티션 목록을 가져올 때
DISTINCT대신GROUP BY를 사용하도록clickhouse-copier를 업데이트했습니다. 대용량 테이블에서는 이 변경으로 조회 시간이 500초 이상에서 1초 미만으로 줄었습니다. #47386 (Clayton McClure). ASOF JOIN에서 발생하던 성능 저하를 개선했습니다. #47544 (Ongkong).- Keeper에서 배칭을 한층 더 강화했습니다. 읽기 요청 시 배치가 분할되지 않도록 하여 성능을 개선했습니다. #47978 (Antonio Andelic).
- 컬럼마다 DEFAULT 표현식이 서로 다른 Merge에 대해 PREWHERE를 허용합니다. #46831 (Azat Khuzhin).
실험적 기능
- 병렬 레플리카: 로컬 레플리카를 더 효율적으로 활용해 전체 성능을 개선하고, 기본적으로 복제되지 않은 MergeTree에 대해서는 병렬 레플리카를 사용한 읽기를 금지합니다. #47858 (Nikita Mikhaylov).
- 실험적 분석기가 활성화된 경우,
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를 통해 레플리카 세트에 연결할 수 있으며, MongoDB 딕셔너리에서readPreference옵션도 지원합니다. 예시 URI: mongodb://db0.example.com:27017,db1.example.com:27017,db2.example.com:27017/?replicaSet=myRepl&readPreference=primary. #46524 (artem-yadr).- 이 개선 사항은 사용자에게는 눈에 띄지 않아야 합니다. 쿼리 계획(query plan)을 기반으로 projection 분석을 다시 구현했습니다. 이전 버전과 새 버전 간에 전환할 수 있도록 설정
query_plan_optimize_projection=1을 추가했습니다. #44963를 수정했습니다. #46537 (Nikolai Kochetov). - 기본적으로 출력 형식에서 v1 대신 Parquet 포맷 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 node exists를 system.errors에 기록하지 않도록 했습니다. #46820 (Raúl Marín).
clickhouse-local에서 열 수 있는 파일 수 제한을 늘렸습니다. CPU 코어 수가 매우 많은 서버에서도webtable을 읽을 수 있습니다. 열린 파일 수가 너무 많더라도 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).- 한 볼륨/디스크에서 다른 볼륨/디스크로 part를 이동할 수 없는 경우의 예외 메시지를 개선했습니다. #47032 (alesapin).
JSONType함수에서Bool유형을 지원합니다. 이전에는 bool 값에 대해 실수로Null유형이 반환되었습니다. #47046 (Anton Popov).- 미리 정의된 HTTP 쿼리를 구성하려면
_request_body매개변수를 사용하십시오. #47086 (Constantine Peresypkin). - 내장 UI의 SQL Editor에서 Enter를 누르면 자동으로 들여쓰기됩니다. #47113 (Alexey Korepanov).
- ‘sudo’를 사용한 자체 추출 시, 추출된 파일의 uid와 gid를 현재 실행 중인 사용자로 설정하려고 시도합니다. #47116 (Yakov Olkhovskiy).
- 이전에는
repeat함수의 두 번째 인수로 부호 없는 정수 타입만 허용되어 -1과 같은 값은 받을 수 없었습니다. 이 동작은 Spark 함수와 달랐습니다. 이번 업데이트에서는repeat함수가 Spark 함수와 동일하게 동작하도록 수정되었습니다. 이제 음의 정수를 포함해 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). runningDifference함수가 big int 타입을 지원하도록 했습니다. #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수정자가 추가되었습니다. 이 수정자를 사용하면 쿼리는 복제 큐가 빌 때까지 대기합니다(https://github.com/ClickHouse/ClickHouse/pull/45648 이전의 동작과 동일). #47659 (Alexander Tokmakov).- 일부 OpenTelemetry 스팬 logs의 명칭을 개선했습니다. #47667 (Frank Chen).
- 집계 함수 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및WriteBufferFromS3RequestsErrorsprofile events가 추가되었습니다. #47885 (Antonio Andelic).- ClickHouse 설치에
--link및--noninteractive(-y) 옵션이 추가되었습니다. #47750이 해결되었습니다. #47887 (Nikolay Degterinsky). - 사용할 수 없는 종속 테이블이 있는 materialized view에 ATTACH할 때
UNKNOWN_TABLE예외가 발생하던 문제를 수정했습니다. 이는 백업에서 상태를 복원하려는 경우에 유용할 수 있습니다. #47975 (MikhailBurdukov). - 암호화된 디스크 구성에 (선택 사항인) 경로가 추가되지 않았을 때의 문제를 수정했습니다. #47981 (Kseniia Sumarokova).
- 매개변수화된 뷰(parameterized views)에서 CTE를 지원하도록 구현했습니다. 스칼라 서브쿼리를 평가하는 동안 쿼리 매개변수를 사용할 수 있도록 업데이트했습니다. #48065 (SmitaRKulkarni).
- 큰 정수
(U)Int128/(U)Int256, 모든 키 유형을 지원하는Map, 그리고 모든 정밀도의DateTime64(3과 6만 해당하지 않음)를 지원합니다. #48119 (Kruglov Pavel). - 행 입력 형식에서 알 수 없는 enum 값과 관련된 오류를 건너뛸 수 있도록 했습니다. #48133 (Alexey Milovidov).
빌드/테스트/패키징 개선
- ClickHouse가 이제
C++23으로 빌드됩니다. #47424 (Robert Schulze). - AST 퍼저에서
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 심볼을 찾을 수 없어 server 시작 중 발생하던 오류를 수정했습니다. #47008 (Robert Schulze).
- clang 16 지원을 준비했습니다. #47027 (Amos Bird).
- ARM에서 ClickHouse가 오래된 glibc로도 실행될 수 있는지 확인하는 CI 검사를 추가했습니다. #47063 (Robert Schulze).
NDEBUGmacro의 잘못된 사용을 방지하기 위한 스타일 검사를 추가했습니다. #47699 (Alexey Milovidov).- 빌드 속도를 조금 개선했습니다. #47714 (Alexey Milovidov).
vectorscan을 5.4.9로 올렸습니다. #47955 (Robert Schulze).- Apache Arrow의 치명적 로깅이 프로세스를 중단시키지 않는다는 점을 검증하는 단위 테스트를 추가했습니다. 이 테스트는 ClickHouse/arrow#16의 변경 사항을 다룹니다. #47958 (Arthur Passos).
- 네이티브 macOS 디버그 server 빌드가 다시 시작될 수 있도록 복원했습니다. #48050 (Robert Schulze). 참고: 이 변경은 개발에만 해당하며, ClickHouse 공식 빌드는 크로스 컴파일로 수행됩니다.
버그 수정(공식 안정 릴리스에서 사용자에게 드러나는 오동작)
- 포맷 파서 재설정을 수정하고,
Kafka의 잘못된 메시지 처리 테스트를 추가했습니다 #45693 (Kruglov Pavel). - Keeper의 데이터 크기 계산을 수정 #46086 (Antonio Andelic).
ReplicatedMergeTree테이블과Atomic데이터베이스에서DROP TABLE쿼리 자동 재시도와 관련된 버그를 수정했습니다. 드물게는 DROP 도중 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 읽기 버퍼에서 파일 크기를 가져오기 위해 초기 범위를 사용하도록 했습니다. 이 변경이 없으면 일부 원격 파일을 처리할 수 없었습니다. #46824 (Antonio Andelic).
- URL 테이블 사용 시 잘못 표시되던 진행률 표시줄을 수정했습니다 #46830 (Antonio Andelic).
maxIntersections함수의 MSan 리포트 수정 #46847 (Alexey Milovidov).Map데이터 타입에서 발생하던 버그를 수정했습니다 #46856 (Alexey Milovidov).- LIKE 패턴에 따옴표로 묶인 인용 불가능한 문자가 포함된 경우 일부 LIKE 검색에서 잘못된 결과가 반환되던 문제를 수정했습니다 #46875 (Robert Schulze).
- 수정 - Filling Transform이 빈 블록을 처리할 때 WITH FILL이 abort를 일으키던 문제 수정 #46897 (Yakov Olkhovskiy).
- JSON 문자열에서 날짜 및 정수 추론 수정 #46972 (Kruglov Pavel).
- fetch 시 zero-copy 복제에서 디스크 선택 버그 수정 #47010 (alesapin).
- systemd 서비스 정의의 오타를 바로잡았습니다 #47051 (Palash Goel).
- CROSS JOIN 및 algorithm = auto 사용 시 발생하던 NOT_IMPLEMENTED 오류를 수정했습니다 #47068 (Vladimir C).
- ‘part_type’가 ‘InMemory’ 모드(실험 기능)로 구성되었을 때 ‘ReplicatedMergeTree’ 테이블에 서로 유사한 두 데이터를 삽입하지 못하던 문제를 수정했습니다. #47121 (liding1992).
- 외부 딕셔너리 / library-bridge: “알 수 없는 라이브러리 메서드 ‘extDict_libClone’” 오류 수정 #47136 (alex filatov).
- limit이 적용된 grace hash join의 경쟁 상태를 수정했습니다 #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_not_symbols에서 의도한 대로 동작하도록 find_first_symbols를 수정했습니다 #47304 (Arthur Passos).
- CSV에서 큰 숫자 추론 문제를 수정했습니다 #47410 (Kruglov Pavel).
- 별칭이 포함된 표현식에서는 논리 표현식 최적화기를 비활성화합니다. #47451 (Nikolai Kochetov).
decodeURLComponent오류 수정 #47457 (Alexey Milovidov).- projection이 포함된 explain 그래프를 수정했습니다 #47473 (flynn).
- 쿼리 매개변수 수정 #47488 (Alexey Milovidov).
- 매개변수화된 뷰: 버그 수정. #47495 (SmitaRKulkarni).
- 데이터 포맷 퍼저 및 이에 따른 수정. #47519 (Alexey Milovidov).
DateTime64단조성 검사 수정 #47526 (Antonio Andelic).- 널 허용 Nullable LowCardinality 컬럼의 “블록 구조 불일치” 문제를 수정했습니다 #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).- 이동 중 zero-copy 잠금 대기 문제 수정 #47631 (alesapin).
- 파티션별 집계 문제 수정 #47634 (Nikita Taranov).
BSONEachRow포맷에서 Tuple를 배열로 직렬화할 때 발생하는 버그 수정 #47690 (Kruglov Pavel).polygonsSymDifferenceCartesian에서 발생하는 충돌을 수정했습니다 #47702 (pufit).- 스토리지
File에서zlib및gzip압축 파일을 읽는 문제를 수정했습니다 #47796 (Anton Popov). - PostgreSQL의 빈 쿼리 감지를 개선했습니다(pgx golang driver용) #47854 (Azat Khuzhin).
- LowCardinality 타입에서 DateTime 단조성 검사 문제 수정 #47860 (Antonio Andelic).
- RESTORE ASYNC에는 backup_threads가 아니라 restore_threads를 사용합니다 #47861 (Azat Khuzhin).
- 프로젝션이 포함된 ReplicatedMergeTree의 DROP COLUMN 문제 수정 #47883 (Antonio Andelic).
- 복제된 데이터베이스 복구 관련 수정 #47901 (Alexander Tokmakov).
- HTTP의 지나치게 상세한 경고 메시지에 대한 핫픽스 #47903 (Alexander Tokmakov).
catboostEvaluate에서 발생하는 “Field value too long” 오류 수정 #47970 (Robert Schulze).- 수정 #36971: Watchdog: 하위 프로세스가 종료되면 0이 아닌 종료 코드로 종료되도록 수정 #47973 (Коренберг Марк).
- “인덱스 파일
cidx가 비정상적으로 김” 문제 수정 #48010 (SmitaRKulkarni). - 속성(replica-identity)을 가져오기 위한 MaterializedPostgreSQL 쿼리를 수정했습니다 #48015 (Solomatov Sergei).
- parseDateTime(): UB(부호 있는 정수 오버플로우) 문제 수정 #48019 (Robert Schulze).
- 스키마를 재사용하지 않도록 Avro의 Record에 고유한 이름을 사용합니다 #48057 (Kruglov Pavel).
- Keeper에서 TCP/HTTP socket timeout을 올바르게 설정 #48108 (Antonio Andelic).
Avro포맷에서 null 포인터에 대해 멤버 호출이 발생할 수 있는 문제를 수정했습니다 #48184 (Kruglov Pavel).
ClickHouse 릴리스 23.2, 2023-02-23. 발표 자료, 영상
하위 호환되지 않는 변경 사항
- 함수 “toDayOfWeek()“(별칭: “DAYOFWEEK”)에 주 시작 요일이 월요일인지 일요일인지, 그리고 계산을 0부터 시작할지 1부터 시작할지를 나타내는 mode 인수를 추가했습니다. 다른 date time 함수와의 일관성을 위해 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 절보다 먼저 지정되면 설정이 formatting에도 적용됩니다. #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 closes #44587. #44680 (FFFFFFFHHHHHHH). - 배열을 무작위로 섞는 arrayShuffle 함수를 도입했습니다. #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). - SipHash에서 사용자 정의 키/시드를 사용할 수 있는 새 함수 2개를 추가했습니다. #45513 (Salvatore Mesoraca).
- 테이블 함수
format에서 3개 인수를 받는 버전을 허용합니다. 해결 #45808. #45873 (FFFFFFFHHHHHHH). JodaTime포맷에 ‘x’,‘w’,‘S’ 지원을 추가했습니다. https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html을 참조하십시오. #46073 (zk_kiger).- 윈도 함수
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 (李扬). - 최상위 JSON 배열의 요소 수를 반환하는 새 함수
JSONArrayLength가 추가되었습니다. 입력 JSON 문자열이 유효하지 않으면 이 함수는 NULL을 반환합니다. #46631 (李扬).
성능 개선
- 도입된 로직은 PREWHERE 조건이 여러 조건의 conjunction(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 포맷의 파트에서 수직 병합 알고리즘을 사용할 수 있게 했습니다. 이를 통해 ClickHouse 서버가 백그라운드 작업에 훨씬 더 적은 메모리를 사용할 수 있습니다. 이로써 #46084가 해결됩니다. #45681 #46282 (Anton Popov).
- 배치 리더를 사용해
Parquet리더를 최적화했습니다. #45878 (LiuNeng). - 비동기 Linux io_uring 서브시스템 기반의 새
local_filesystem_read_method메서드io_uring을 추가하여, 기본pread메서드와 비교했을 때 거의 전반적으로 읽기 성능을 개선했습니다. #38456 (Saulius Valatka). - 논리적으로 동일한 경우, 인수로
if표현식을 사용하는 집계 함수를 재작성합니다. 예를 들어avg(if(cond, col, null))는 avgIf(cond, col)로 재작성할 수 있습니다. 이는 성능 향상에 도움이 됩니다. #44730 (李扬). - AVX-512 명령어를 활용해 lower/upper 함수의 성능을 개선했습니다. #37894 (yaqi-zhao).
- 코어가 >=32개이고 SMT가 비활성화된 시스템에서 ClickHouse가 코어의 절반만 사용하도록 하던 제한을 제거했습니다(BIOS에서 Hyper Threading을 비활성화한 경우). #44973 (Robert Schulze).
- 열 지향 방식으로
multiIf함수를 실행해 성능을 개선하고 속도를 2.3배 높였습니다. #45296 (李扬). - needle이 비어 있을 때
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 벤치마크를 사용하되, 컬럼 타입을 널 비허용에서 널 허용으로 변경하고 각 쿼리의 QPS를 성능 지표로 측정했습니다. #45962 (Zhiguo Zhou).
_part및_partition_id가상 컬럼의 타입을LowCardinality(String)으로 변경합니다. #45964를 해결합니다. #45975 (flynn).- scale이 변경되지 않을 때 Decimal 변환 성능을 개선했습니다. #46095 (Alexey Milovidov).
- 데이터를 읽을 때 프리페치를 늘릴 수 있도록 했습니다. #46168 (Kseniia Sumarokova).
arrayExists(x -> x = 1, arr)를has(arr, 1)로 재작성해 성능을 1.34배 향상했습니다. #46188 (李扬).- 비원격 디스크에서 수직 병합 시 과도하게 큰 메모리 사용량 문제를 수정했습니다. 원격 디스크에서는
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, 단항 산술 함수, 비교 함수에 대한 avx512 지원을 추가했습니다. #37870 (zhao zhou). - 최대 성능 향상을 위해 마크 분배와 읽기 전반의 coordination 관련 코드를 다시 작성했습니다. 이로써 #34527가 해결되었습니다. #43772 (Nikita Mikhaylov).
- 쿼리(서브쿼리)에서 중복된 DISTINCT 절을 제거합니다. 쿼리 계획(query plan) 상단에 구현되었습니다. DISTINCT 절과 관련해서는
optimize_duplicate_order_by_and_distinct와 유사한 최적화를 수행합니다.query_plan_remove_redundant_distinct설정으로 활성화할 수 있습니다. #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 (李扬). - 메모리 바운드 병합과 쿼리 계획(query plan) 상단의 순서 기반 집계가 상호 작용하는 방식을 개선했습니다. 이전에는 실제로 필요하지 않은 일부 경우 AIO에 대해 명시적 정렬로 되돌아갔습니다. #45892 (Nikita Taranov).
- 동시에 실행되는 머지는 기본적으로 round-robin 방식으로 스케줄링되어 공정하고 기아가 발생하지 않는 동작을 보장합니다. 이전에는 과부하가 심한 세그먼트에서 엄격한 우선순위 스케줄링을 사용했기 때문에, 작은 머지로 인해 큰 머지가 기아 상태에 빠질 수 있었습니다. 스케줄링 알고리즘(
round_robin또는shortest_task_first)을 선택할 수 있도록background_merges_mutations_scheduling_policy서버 구성 옵션이 추가되었습니다. #46247 (Sergei Trifonov).
개선
- ZooKeeper 세션이 손실될 경우 기본적으로 INSERT 재시도를 활성화합니다. 이미 프로덕션 환경에서 사용 중입니다. #46308 (Alexey Milovidov).
- 이름이 지정된 Tuple에 대해 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 개선: 예기치 않은 디스크 공간 부족 문제를 방지하기 위해 디스크 공간을 미리 할당하도록 개선했습니다. Keeper의 Raft 로그 파일 최대 크기를 지정하는 설정
max_log_file_size를 도입했습니다. #44370 (Antonio Andelic). - 읽기 전용인 레플리카의 지연 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).
- “쿼리 결과 캐시”를 “쿼리 캐시”로 이름을 변경했습니다. #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에 간단히 넣을 수 있으며, 연결별로 서로 다른 이력 파일을 사용할 수도 있어 유용합니다). #45715 (Azat Khuzhin). - Arrow 형식: duration 유형을 지원합니다. #45669을 해결합니다. #45750 (flynn).
- 쿼리 캐시의 로깅을 확장해 캐싱 동작에 대한 문제 조사를 개선했습니다. #45751 (Robert Schulze).
- 쿼리 캐시의 서버 수준 설정은 이제 런타임에 재구성할 수 있습니다. #45758 (Robert Schulze).
- 테이블 함수의 인수가 명명된 컬렉션으로 지정된 경우 로그에서 비밀번호를 숨깁니다. #45774 (Vitaly Baranov).
- 다양한 URL 유형에 대해 리전과 리디렉션을 올바르게 판별하도록 내부 S3 클라이언트를 개선합니다. #45783 (Antonio Andelic).
- generateRandom에 맵, IPv4 및 IPv6 타입 지원이 추가되었습니다. 주로 테스트용으로 유용합니다. #45785 (Raúl Marín).
- IP 타입에서 empty/notEmpty를 지원합니다. #45799 (Yakov Olkhovskiy).
- 컬럼
num_processed_files가 두 개의 컬럼으로 나뉘었습니다: BACKUP에는num_files, RESTORE에는files_read가 사용됩니다. 컬럼processed_files_size도 두 개의 컬럼으로 나뉘었습니다: BACKUP에는total_size, RESTORE에는bytes_read가 사용됩니다. #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: 퍼지 검색에 “exact” 매칭을 사용하도록 변경했습니다. 이 방식은 대소문자를 올바르게 무시하고 SQL 쿼리 매칭에 더 적합한 알고리즘을 사용합니다. #46000 (Azat Khuzhin).
- 잘못된 View 생성 구문
CREATE View X TO Y AS SELECT을 금지합니다. #4331을 해결합니다. #46043 (flynn). - Storage
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일 때 debug build에서
welchTTest함수의 assertion을 수정했습니다. 다른 유사한 함수와 동작을 일관되게 맞췄습니다. 기존 동작이 불편했기 때문에studentTTest는 예외를 발생시키는 대신 NaN을 반환하도록 변경했습니다. 이로써 #41176 문제가 해결되었습니다. 이로써 #42162 문제가 해결되었습니다. #46141 (Alexey Milovidov). - 큰 정수와 ORDER BY WITH FILL을 더 편리하게 사용할 수 있습니다. 큰 정수(128비트 및 256비트)를 ORDER BY할 때 WITH FILL의 시작점과 끝점에 일반 정수를 사용할 수 있도록 했습니다. 시작점이나 끝점이 음수인 큰 정수에서 잘못된 결과가 나오던 문제를 수정했습니다. 이 변경으로 #16733 문제가 해결되었습니다. #46152 (Alexey Milovidov).
- issue 관련으로
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로 설정되어 있고 사용자가 쿼리 또는 config를 통해 액세스 키를 제공한 경우, 환경 변수의 키 대신 해당 키가 사용됩니다. #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).
last_exception_time컬럼이 distribution_queue 테이블에 추가되었습니다. #46564 (Aleksandr).- 매개변수화된 뷰에서 매개변수를 사용하는 IN 절을 지원합니다. #46583 (SmitaRKulkarni).
- 서버 시작 시 이름이 지정된 컬렉션을 로드하지 않고(대신 처음 접근할 때 로드합니다). #46607 (Kseniia Sumarokova).
빌드/테스트/패키징 개선
- LLVM 런타임으로 구현된 GWP-ASan을 도입했습니다. 이 변경으로 #27039가 해결됩니다. #45226 (Han Fei).
- 테스트에서 MergeTree 설정에 무작위화를 추가해 테스트를 덜 안정적이고 더 flaky하게 만들었습니다. #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 2로 업그레이드했습니다. 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_pooling설정이 올바르게 사용되도록 수정했습니다. #45591 (Bharat Nallan).- 캐시의 콜백이 호출될 때 이 캐시가 소멸될 수 있습니다. 이를 안전하게 처리하기 위해 멤버를 값으로 캡처합니다. 또한 storage가 소멸되기 전에 비활성화되므로 작업 스케줄링 측면에서도 안전합니다. #45548을 해결했습니다. #45601 (Han Fei).
- 코덱 Delta 또는 DoubleDelta를 코덱 Gorilla와 함께 사용할 때 발생하던 데이터 손상을 수정했습니다. #45615 (Robert Schulze).
- N-그램 블룸 필터 인덱스 사용 시 잘못된 읽기를 방지하도록 타입을 올바르게 확인합니다. #45617 (Antonio Andelic).
c-ares관련 세그폴트가 몇 건 보고되었습니다. 이 문제는 제가 이전에 올린 pull request에서 발생한 것이었습니다. Alexander Tokmakov의 도움을 받아 이를 수정했습니다. #45629 (Arthur Passos).- 중복된 기본 키를 만나는 경우 키 설명을 수정했습니다. 이는 프로젝션에서 발생할 수 있습니다. 자세한 내용은 #45590을 참조하십시오. #45686 (Amos Bird).
- 백업의 압축 방식과 압축 수준을 설정합니다. #45690을 해결했습니다. #45737 (Pradeep Chhetri).
select_query_typed.limitOffset대신select_query_typed.limitByOffset를 사용하십시오. #45817 (刘陶峰).- 실험적 분석기를 사용할 때
SELECT number FROM numbers(100) LIMIT 10 OFFSET 10;같은 쿼리에서 잘못된 결과가 반환됩니다(이 SQL에서는 빈 결과가 반환됨). 이는 플래너가 불필요한 OFFSET step을 추가하기 때문에 발생합니다. #45822 (刘陶峰). - 하위 호환성 -
INSERT ... VALUES ...표현식에 필요했던 UInt64에서 IPv4로의 암시적 축소 변환을 허용합니다. #45865 (Yakov Olkhovskiy). - 첫 번째 옥텟이 빠진 혼합 ip4 주소(예:
::.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). - 활성화된 희소 컬럼이 있는 테이블에서 데이터를 읽는
INTERSECT및EXCEPT수정자가 포함된SELECT쿼리에서 발생하는 충돌을 수정했습니다(설정ratio_of_defaults_for_sparse_serialization로 제어됨). #45987 (Anton Popov). - FINAL 사용 시 DESC 정렬에서 read in order 최적화를 수정하고, #45815를 해결했습니다. #46009 (Vladimir C).
- compact 파트에서 여러 단계의 존재하지 않는 중첩 컬럼을 읽는 문제를 수정했습니다. #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). - 잘못된 결과를 방지하기 위해 포맷팅 중 tuple 함수를 리터럴로 재작성하지 않도록 했습니다. #46232 (Salvatore Mesoraca).
- Arrow 형식에서 LowCardinality(Nullable)를 읽는 중 발생할 수 있는 범위 초과 오류를 수정했습니다. #46270 (Kruglov Pavel).
CANNOT_PARSE_INPUT_ASSERTION_FAILED예외로 인해SYSTEM UNFREEZE쿼리가 실패하던 문제를 수정했습니다. #46325 (Aleksei Filatov).- HashTable을 저장하는 함수의 집계 상태를 역직렬화하는 과정에서 정수 오버플로우로 인해 발생할 수 있는 크래시 가능성을 수정했습니다. #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).- config의 MergeTree 설정 섹션에
storage_policy가 지정되어 있고 쿼리 수준에서disk설정이 지정된 경우에도 예외를 발생시키지 않습니다.disk가 config의 설정을 재정의합니다. #46533 (Kseniia Sumarokova). - 함수
arrayMap에서 상수LowCardinality인수의 잘못된 처리 문제를 수정했습니다. 이 버그는 릴리스 빌드에서는 segfault를, 디버그 빌드에서는 논리 오류Bad cast를 발생시킬 수 있었습니다. #46569 (Alexey Milovidov). - #46557를 수정했습니다. #46611 (Alexander Gololobov).
- 서버가 1분 30초 내에 시작되지 않으면
clickhouse-serversystemd 유닛이 무한히 재시작되던 문제를 수정했습니다(systemd 서비스에서clickhouse-server시작 시 timeout 로직 비활성화). #46613 (Azat Khuzhin). - asynchronous inserts 중에 할당된 메모리 버퍼가 전역 Context에서 해제되었고, 해당 사용자와 쿼리의 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_HASHED딕셔너리의PREALLOCATE옵션은 no-op이 됩니다. #45388 (Azat Khuzhin). 이제 더 이상 유의미한 이점을 제공하지 않습니다.Float32또는Float64가 아닌 유형의 컬럼에서는Gorilla코덱 사용이 금지됩니다. #45252 (Robert Schulze). 실질적인 의미가 없었고 불일치를 초래했습니다.- Deprecated 구문으로 생성된
*MergeTree테이블에서는 병렬 quorum 삽입이 잘못 동작할 수 있습니다. 따라서 이러한 테이블에 대한 병렬 quorum 삽입 지원은 완전히 비활성화됩니다. 이는 새 구문으로 생성된 테이블에는 영향을 주지 않습니다. #45430 (Alexander Tokmakov). - AWS S3에서 객체 크기를 가져올 때
HeadObject요청 대신GetObjectAttributes요청을 사용합니다. 예를 들어, 이 변경은 AWS SDK 업데이트 이후 명시적인 Region이 없는 엔드포인트 처리 문제를 해결합니다. #45288 (Vitaly Baranov). AWS S3와 Minio는 테스트되었지만, 다양한 S3-compatible 서비스(GCS, R2, B2)에서는 미세한 비호환성이 있을 수 있다는 점에 유의하십시오. 또한 이 변경으로 인해GetObjectAttributes요청을 허용하도록 ACL을 조정해야 할 수도 있습니다. - 시간대 이름에 경로를 포함하는 것은 금지됩니다. 예를 들어
/usr/share/zoneinfo/Asia/Aden과 같은 시간대 이름은 허용되지 않으며,Asia/Aden과 같은 IANA 시간대 데이터베이스 이름을 사용해야 합니다. #44225 (Kruglov Pavel). - 잘못된 결과를 초래할 수 있으므로 등가 join과 상수 표현식을 함께 사용하는 쿼리(예:
JOIN ON t1.x = t2.x AND 1 = 1)는 금지됩니다. #44016 (Vladimir C).
새 기능
- 정규식 트리를 순회해 키를 추출하는 데 사용하는 딕셔너리 소스입니다. User-Agent 파싱에 사용할 수 있습니다. #40878 (Vage Ogannisian). #43858 (Han Fei).
- 매개변수화된 뷰 기능이 추가되어 이제 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). - server 시작 시간을 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 producer에서 임의의 binary 데이터를 지원합니다(이전에는 끝에 \0이 포함된 문자열에서만 작동했습니다). - 문서에 누락되어 있던 Kafka/RabbitMQ/NATS 엔진 설정을 추가했습니다. - Kafka/RabbitMQ/NATS의 producing 및 consuming을 리팩터링하고 WriteBuffers/ReadBuffers의 의미 체계와 분리했습니다. - 출력 형식을 리팩터링했습니다. Kafka/RabbitMQ/NATS에서 각 행마다 사용되던 callbacks를 제거하고(이제는 여기에서 callbacks를 사용하지 않음), 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데이터베이스에서 비정상 레플리카의 메타데이터를 제거하는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에 세그먼트 분할 지원을 추가했습니다(세그먼트 수에 비례해 거의 선형적으로 스케일링됨). #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_length설정은 무시됩니다. #42889 (Guo Wangyang).- ThreadStatus 관련 코드를 최적화해 성능을 소폭 개선했습니다. #43586 (Zhiguo Zhou).
- 자동 벡터화를 구현해 컬럼별 삼항 논리 평가를 최적화했습니다. 이 마이크로벤치마크의 성능 테스트에서 ICX 장치(Intel Xeon Platinum 8380 CPU)에서 최대 21배의 성능 향상을 확인했습니다. #43669 (Zhiguo Zhou).
- 가능하면
system.tables테이블에서 읽기 잠금을 획득하지 않도록 개선했습니다. #43840 (Raúl Marín). - 스레드 풀을 최적화합니다. 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 절)의 일반적인 처리 경로 최적화를 소폭 개선했습니다. #45289 (Nikita Taranov).
- 인덱스 분석에서 더 많은 대수적 최적화를 수행할 수 있도록
toUnixTimestamp64*에 단조성 정보를 추가합니다. #44116 (Nikita Taranov). - 쿼리 처리 시 임시 데이터의 구성(디스크로 스필)이 파일 시스템 캐시와 연동되어 캐시 디스크의 공간을 사용하도록 허용했습니다 #43972 (Vladimir C). 이는 주로 ClickHouse Cloud의 개선 사항이지만, 사용 방법을 알고 있다면 자가 관리형 환경에서도 활용할 수 있습니다.
system.replicas테이블이 레플리카 상태를 병렬로 가져오도록 했습니다. #43918을 해결합니다. #43998 (Nikolay Degterinsky).- S3로 백업할 때 메모리 사용량을 최적화했습니다. 이제 S3로 전송되는 파일은
WriteBufferFromS3를 거치지 않고 직접 복사되므로(기존에는 많은 메모리를 사용할 수 있었습니다). #45188 (Vitaly Baranov). - async block ID용 캐시를 추가했습니다. 이를 통해 async inserts 중복 제거를 활성화할 때 ZooKeeper에 대한 요청 수를 줄일 수 있습니다. #45106 (Han Fei).
개선
- 인수 없이 generateRandom에서 삽입 대상 테이블의 구조를 사용하도록 했습니다. #45239 (Kruglov Pavel).
JSONExtract함수에서 JSON 문자열 field에 저장된 부동소수점 수를 정수로 암묵적으로 변환할 수 있습니다. 예: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). - 삽입 작업 시 읽기 전용 모드에서는 테이블 함수를 비활성화합니다. #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). - 이미 작성한 쿼리의 일부를 퍼지 검색에 활용합니다(Rust로 작성되어 ClickHouse에 정적으로 링크된
skim라이브러리로 전달). #44600 (Azat Khuzhin). - JSON Object 유형이 아직 실험적이므로 중첩된 JSON 객체를 읽을 수 있도록
input_format_json_read_objects_as_strings가 기본적으로 활성화되었습니다. #44657 (Kruglov Pavel). - async inserts의 중복 제거 개선: 사용자가 중복된 async inserts를 수행할 때 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). - 분산 async INSERT 관련 메트릭을 최적화하고 수정했습니다. #44922 (Azat Khuzhin).
- 동시 백업 및 복원을 금지하는 설정이 추가되어 #43891이 해결되었습니다. 구현: * Context에서 BackupWorker를 생성할 때 읽어 설정하는 서버 수준의 동시 백업 및 복원 금지 설정이 추가되었습니다. * 이 설정의 기본값은 true입니다. * 백업 또는 복원을 시작하기 전에 다른 백업/복원이 실행 중인지 확인하는 검사가 추가되었습니다. 내부 요청의 경우
backup_uuid를 사용해 요청이 동일 노드에서 왔는지 확인합니다. #45072 (SmitaRKulkarni). - 시스템 로그에
<storage_policy>구성 매개변수를 추가했습니다. #45320 (Stig Bakken).
빌드/테스트/패키징 개선
- clickhouse client/로컬 이력의 퍼지 검색을 위해
skim라이브러리(Rust로 작성됨)를 정적으로 링크하도록 했습니다. #44239 (Azat Khuzhin). - Rust 때문에 공유 링크 지원을 제거했습니다. 사실 Rust는 이를 제거하기 위한 구실에 불과했고, 어차피 제거할 예정이었습니다. #44828 (Alexey Milovidov).
- 사용하지 않으므로 패키지에서
adduser도구 의존성을 제거했습니다. 이 변경으로 #44934가 수정되었습니다. #45011 (Alexey Milovidov). SQLite라이브러리를 최신 버전으로 업데이트했습니다. 이 라이브러리는 SQLite 데이터베이스 및 테이블 integration 엔진에 사용됩니다. 또한 TSan의 오탐(false positive) 보고도 수정했습니다. 이로써 #45027이 해결되었습니다. #45031 (Alexey Milovidov).- PowerPC의 WeakHash 충돌 문제를 해결하기 위해 CRC-32를 변경했습니다. #45144 (MeenaRenganathan22).
- aws-c* 서브모듈을 업데이트했습니다. #43020 (Vitaly Baranov).
- 통과한 백포트 PR과 승인되어 통과한 PR을 자동으로 머지합니다. #41110 (Mikhail f. Shiryaev).
- ClickHouse CI 상태를 보여주는 웹사이트를 도입했습니다. Source.
버그 수정
- 도메인 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사용 시 발생할 수 있는 segfault/논리 오류 수정. #43758을 해결합니다. #43813 (Kruglov Pavel). - CREATE USER/ROLE 쿼리의 설정 제약 조건 문제를 수정했습니다. #43993 (Nikolay Degterinsky).
- 테이블 메타데이터에서
EPHEMERAL컬럼의 파싱할 수 없는 기본값(default value)과 관련된 버그를 수정했습니다. #44026 (Yakov Olkhovskiy). - 호환성 설정의 잘못된 버전에 대한 파싱을 수정했습니다. #44224 (Kruglov Pavel).
- datetime의 인터벌 뺄셈이 덧셈과 일치하도록 조정했습니다. #44241 (ltrk2).
- 뷰 결과의 최대 크기 제한을 제거했습니다. #44261 (lizhuoyu5).
do_not_evict_index_and_mrk_files=1일 때 캐시에서 발생할 수 있는 논리적 오류를 수정했습니다. #42142를 해결합니다. #44268 (Kseniia Sumarokova).- write-through cache에서 캐시 쓰기가 지나치게 일찍 중단될 수 있는 문제를 수정했습니다(중단되지 않아야 하는 상황에서도 잘못된 가정 때문에 캐싱이 중단될 수 있었습니다). #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 포맷에서 맵(Map) 타입을 읽는 문제를 수정했습니다. #44400 (Kruglov Pavel).
- Parquet/ORC 포맷에서 입력 데이터에 없는 컬럼을 읽을 때 발생하던 문제를 수정했습니다. 이전에는 이로 인해
INCORRECT_NUMBER_OF_COLUMNS오류가 발생할 수 있었습니다. #44333을 해결했습니다. #44405 (Kruglov Pavel). - 이전에는
bar함수가 5/8 막대와 6/8 막대를 모두 표시할 때 동일한 ’▋’ (U+258B “왼쪽 8분의 5 블록”) 문자를 사용했습니다. 이번 변경에서는 6/8 막대를 표시할 때 ’▊’ (U+258A “왼쪽 4분의 3 블록”) 문자를 사용하도록 이 동작을 수정했습니다. #44410 (Alexander Gololobov). - 설정 파일에서 프로필 설정 제약 조건 뒤에 프로필 설정을 배치하면 제약 조건이 무효화되었습니다. #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).
- LowCardinality 및 const 컬럼에서 IN 함수 문제를 수정하고 #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의 분위수에
optimize_syntax_fuse_functions가 적용되지 않도록 하고 #44712를 닫았습니다. #44713 (Vladimir C). - Merge 테이블과 PREWHERE의 잘못된 유형 관련 버그를 수정하고, #43324를 해결했습니다. #44716 (Vladimir C).
- 종료 중(TraceCollector를 소멸하는 동안) 발생할 수 있는 크래시를 수정합니다. #44757를 해결합니다. #44758 (Nikolai Kochetov).
- 분산 쿼리 처리에서 발생할 수 있는 충돌 문제를 수정했습니다. 합계 또는 극값이 포함된 쿼리가 빈 결과를 반환하고 분산 테이블과 로컬 테이블의 타입이 일치하지 않는 경우 충돌이 발생할 수 있었습니다. #44738를 수정했습니다. #44760 (Nikolai Kochetov).
- 뮤테이션에서 fetch 작업(
min_compressed_bytes_to_fsync_after_fetch) 및 작은 파일(ttl.txt, columns.txt)에 대한 fsync(min_rows_to_fsync_after_merge/min_compressed_bytes_to_fsync_after_merge) 문제를 수정했습니다. #44781 (Azat Khuzhin). - 디스크 간에 파트가 이동하는 동안
system.parts또는system.parts_columns테이블을 쿼리할 때 드물게 경쟁 상태가 발생할 수 있었습니다. #41145에서 도입되었습니다. #44809 (Alexey Milovidov). - 프로젝션 최적화가 활성화된 경우 발생할 수 있는
Context has expired오류를 수정했습니다. 런타임에서 Context를 사용하는dictHas/dictGet같은 특정 함수가 포함된 쿼리에서 재현할 수 있습니다. #44844를 수정합니다. #44850 (Nikolai Kochetov). - remote fs에서
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).
- 파서에서 버퍼 오버플로우가 발생할 가능성이 있었습니다. 퍼저로 발견되었습니다. #45047 (Alexey Milovidov).
- 스토리지 FileLog에서 발생할 수 있는 cannot-read-all-data 오류를 수정했습니다. 이 수정으로 #45051, #38257 문제가 해결됩니다. #45057 (Kseniia Sumarokova).
- 쿼리에 grouping sets가 포함된 경우 메모리 효율적 집계(설정
distributed_aggregation_memory_efficient)가 비활성화됩니다. #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). - StoreageJoin에서 잘못된 컬럼 NULL 허용 여부를 수정하고, #44940을 해결했습니다. #45184 (Vladimir C).
background_fetches_pool_size설정을 다시 로드할 때 발생하던 문제를 수정했습니다(런타임 중 증가). #45189 (Raúl Marín).- 서브쿼리가 다른 유형을 반환할 때 키에
IN을 사용하는 KV 엔진(예: KeeperMap, EmbeddedRocksDB)의SELECT쿼리를 올바르게 처리합니다. #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 유형]인 경우 발생하는 버그를 수정했으며, #45275를 해결했습니다.
bytes유형을Float로 잘못 추론하는 버그도 수정했습니다. #45276 (flynn). - 스토리지 엔진
Merge를 사용하는 테이블에서 명시적 PREWHERE를 사용할 수 없는 경우 올바른 예외를 발생시킵니다. #45319 (Antonio Andelic). - WSL1 Ubuntu에서 자체 압축 해제형 ClickHouse가 불일치로 인해 압축 해제에 실패합니다. 구체적으로는 /proc/self/maps는 32비트 파일의 inode를 보고하는 반면, stat은 64비트 inode를 보고합니다. #45339 (Yakov Olkhovskiy).
- 분산 테이블 시작 시의 경쟁 상태를 수정했습니다(async INSERT 처리 파일이 여러 번 처리될 수 있던 문제). #45360 (Azat Khuzhin).
ListObject요청이 실패했을 때 스토리지S3및 테이블 함수s3를 읽는 중 발생할 수 있는 충돌을 수정했습니다. #45371 (Anton Popov).- 구조가 잘못된 딕셔너리(예: XML config에 잘못된 유형이 지정된 경우)가 있을 때
SELECT ... FROM system.dictionaries에서 발생하는 예외를 수정했습니다. #45399 (Aleksei Filatov). INSERT INTO ... SELECT * FROM s3Cluster쿼리에서 삽입 대상 테이블의 구조를 사용할 때 발생하던 s3Cluster 스키마 추론 문제를 수정했습니다. #45422 (Kruglov Pavel).- HTTP 사용 시 JSON/BSONEachRow 파싱에서 발생하던 버그를 수정했습니다. 이 버그로 인해 일부 컬럼에서 데이터의 값 대신 기본값이 사용될 수 있었습니다. #45424 (Kruglov Pavel).
- 텍스트 소스에서 IP 타입을 타입에 맞게 파싱하는 과정에서 발생하던 버그(Code: 632. DB::Exception: Unexpected data … after parsed IPv6 value …)를 수정했습니다. #45425 (Yakov Olkhovskiy).
- close #45297 빈 정규식 검사 추가. #45428 (Han Fei).
- 발생할 수 있는 (아마 분산) 쿼리 멈춤 현상을 수정했습니다. #45448 (Azat Khuzhin).
ThreadPool::schedule에서 예외가 발생할 경우,allow_asynchronous_read_from_io_pool_for_merge_tree가 활성화된 상태에서 발생할 수 있는 교착 상태를 해결했습니다. #45481 (Nikolai Kochetov).- DETACH 후 테이블이 사용 중인 것으로 남아 있을 수 있는 문제를 수정했습니다. #45493 (Azat Khuzhin).
- 쿼리가 취소되었고 실행 중 병렬 파싱이 사용된 경우 드물게 발생하던 비정상 종료 문제를 수정했습니다. #45498 (Anton Popov).
- 분산 테이블 생성과 해당 테이블에 대한 INSERT 사이에서 발생하는 경쟁 상태를 수정했습니다(테이블에 INSERT하는 중 CANNOT_LINK가 발생할 수 있었습니다). #45502 (Azat Khuzhin).
- cache policy getter에 올바른 기본값(SLRU)을 추가했습니다. #45514를 해결합니다. #45524 (Kseniia Sumarokova).
- 뮤테이션에서 array join 사용을 금지 #42637 #44447 (SmitaRKulkarni).
- alias 테이블 이름 및 컬럼 변환자와 함께 사용할 때의 한정된 *에 대한 수정입니다. #44736을 해결합니다. #44755 (SmitaRKulkarni).