Cloud v24.12 변경 로그
v24.12 릴리스를 기반으로 한 ClickHouse Cloud 서비스의 주요 변경 사항입니다.
하위 호환되지 않는 변경 사항
- 함수
greatest및least가 이제 NULL 입력값을 무시하며, 이전에는 인수 중 하나가 NULL이면 NULL을 반환했습니다. 예를 들어,SELECT greatest(1, 2, NULL)은 이제 2를 반환합니다. 이로써 동작이 PostgreSQL과 호환됩니다. #65519 (kevinyhzou). - 기본적으로 ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY에서 Variant/Dynamic 타입을 허용하지 않습니다. 이는 예기치 않은 결과를 초래할 수 있기 때문입니다. #69731 (Pavel Kruglov).
- 시스템 테이블
generate_series및generateSeries를 제거했습니다. 이들은 다음 이슈에서 실수로 추가되었습니다: #59390. #71091 (Alexey Milovidov). StorageExternalDistributed를 제거했습니다. #70600 이슈를 종료합니다. #71176 (flynn).- 서버 설정 파일(server config, users.xml)의 설정이 이제 클라이언트에도 적용됩니다. 예를 들어
date_time_output_format과 같은 포맷 설정에 유용합니다. #71178 (Michael Kolupaev). - JSON 서브컬럼용 파일에서 이스케이프되지 않은 특수 문자로 인해 발생할 수 있는
No such file or directory오류를 수정했습니다. #71182 (Pavel Kruglov). - 테이블 엔진 Kafka, NATS, RabbitMQ는 이제
SOURCES계층 구조 내에서 각각의 별도 grant 권한으로 관리됩니다. 이러한 엔진 타입으로 테이블을 생성하는 기본값이 아닌 데이터베이스 사용자에게 grant를 추가해야 합니다. #71250 (Christoph Wurm). - 전체 뮤테이션 쿼리(서브쿼리 포함)를 실행하기 전에 검증합니다. 이를 통해 잘못된 쿼리를 실수로 실행하여 유효한 뮤테이션을 차단하는 데드 뮤테이션이 누적되는 것을 방지합니다. #71300 (Christoph Wurm).
- 파일 시스템 캐시 설정
skip_download_if_exceeds_query_cache를filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit으로 이름을 변경했습니다. #71578 (Kseniia Sumarokova). - 혼란을 방지하기 위해 min/max 함수에서 Dynamic/Variant 타입을 사용할 수 없도록 했습니다. #71761 (Pavel Kruglov).
deltaSumTimestamp에서Enum및UInt128,UInt256인자에 대한 지원을 제거했습니다. 또한deltaSumTimestamp의 두 번째("timestamp") 인자에 대한Int8,UInt8,Int16,UInt16지원을 제거했습니다. #71790 (Alexey Milovidov).- ClickHouse를 딕셔너리의 소스로 사용할 때 소스 쿼리 검증을 추가했습니다. #72548 (Alexey Katsman).
새로운 기능
- SYSTEM LOAD PRIMARY KEY 명령을 도입하여, 지정된 테이블의 모든 파트에 대한 기본 인덱스를 로드하거나, 테이블이 지정되지 않은 경우 모든 테이블의 기본 인덱스를 로드합니다. 이는 벤치마크 수행에 유용하며 쿼리 실행 중 불필요한 지연을 방지하는 데 도움이 됩니다. #66252 (ZAWA_ll).
- 지정된 테이블의 모든 파트에 대한 프라이머리 인덱스를 로드하거나, 테이블을 지정하지 않은 경우 모든 테이블에 대해 프라이머리 인덱스를 로드하는
SYSTEM LOAD PRIMARY KEY문이 추가되었습니다. 이는 벤치마크 테스트에 유용하며, 쿼리 실행 시 발생할 수 있는 추가 지연을 방지하는 데 도움이 됩니다. #67733 (ZAWA_ll). - 현재 사용자나 역할에 특정 권한이 부여되었는지와 해당 테이블/컬럼이 메모리에 존재하는지를 확인하는
CHECK GRANT쿼리를 추가했습니다. #68885 (Unalian). - 워크로드 및 리소스 관리를 설명하는 SQL 구문이 추가되었습니다. https://clickhouse.com/docs/en/operations/workload-scheduling. #69187 (Sergei Trifonov).
- Iceberg 데이터 스토리지 포맷은 테이블 스키마를 수정할 수 있는 폭넓은 옵션을 제공합니다. 이 pull request에서는 컬럼 순서, 컬럼 이름 및 단순 타입 확장이 변경된 Iceberg 포맷 테이블을 읽을 수 있도록 구현했습니다. #69445 (Daniil Ivanik).
- 각 인증 방법별로 자체 만료 날짜를 가질 수 있도록 하고, 이를
USER엔터티에서 제거합니다. #70090 (Arthur Passos). - 쿼리 발신 노드에서 클러스터의 다른 노드로 외부 사용자 역할을 전파합니다. 외부 인증 시스템(예: LDAP)에 대한 접근 권한이 발신 노드에만 있을 때 유용합니다. #70332 (Andrey Zvonov).
String에서JSON으로의 ALTER를 지원합니다. 이 PR은 또한 JSON 및 Dynamic 타입의 직렬화를 새로운 버전인 V2로 변경합니다. 이전 버전인 V1은merge_tree_use_v1_object_and_dynamic_serialization설정을 활성화하면 계속 사용할 수 있습니다(업그레이드 중 문제 없이 버전을 롤백할 수 있도록 활용할 수 있습니다). #70442 (Pavel Kruglov).DateTime64를 초 단위 고정 정밀도의Int64값으로 변환하는 함수toUnixTimestamp64Second가 추가되었습니다. 이를 통해 1970년 1월 1일 목요일 00:00:00 UTC 이전인 날짜에 대해서도 음수 값을 반환할 수 있습니다. #70597 (zhanglistar).- 소스 테이블의 프로젝션과 보조 인덱스가 대상 테이블의 프로젝션과 보조 인덱스의 부분집합인 경우에도 ATTACH 작업이 가능하도록 하는 새로운 설정
enforce_index_structure_match_on_partition_manipulation을(를) 추가했습니다. #70602를 해결했습니다. #70603 (zwy991114). castFUNCTION의 출력 결과가 Apache Spark와 달라 Gluten 프로젝트에서 차이가 발생합니다. 자세한 내용은 https://github.com/apache/incubator-gluten/issues/7602를 참조하십시오. 이 PR은 Spark 텍스트 출력 형식 지원 기능을 추가하며, 기본값은 비활성화되어 있습니다. #70957 (zhanglistar).- 사용자 인증용 S3 엔드포인트에 대한 새로운 헤더 유형(
access_header)이 추가되었습니다. 이를 통해 우선순위가 가장 낮은 액세스 헤더를 설정할 수 있으며, 이 값은 다른 소스(예: 테이블 스키마나 네임드 컬렉션)에서 제공되는access_key_id로 덮어쓰여집니다. #71011 (MikhailBurdukov). - settings 계층의 초기 구현입니다. #71145 (Raúl Marín).
- ORDER BY 절에서
fill연산자와 함께 staleness 절을 지원하도록 했습니다. #71151 (Mikhail Artemenko). - 맵(Map)/튜플(Tuple)/오브젝트(Object)를 JSON 문자열로부터 직렬화/역직렬화하여 새 JSON으로 간단히
CAST할 수 있도록 구현했습니다. #71320 (Pavel Kruglov). - 집계 FUNCTION
any에anyRespectNulls,firstValueRespectNulls,anyValueRespectNulls별칭을 추가했습니다. 또한 집계 FUNCTIONanyLast에anyLastRespectNulls와lastValueRespectNulls별칭을 추가했습니다. 이를 통해 예를 들어anyLast_respect_nullsStateIf대신SELECT anyLastRespectNullsStateIf처럼 camelCase와 밑줄(_)을 혼용하는 문법 대신 camelCase만 사용하는 보다 자연스러운 문법을 사용할 수 있습니다. #71403 (Peter Nguyen). date_time_utc구성 매개변수를 추가하여 JSON 로그 형식에서 RFC 3339/ISO8601 형식의 UTC 날짜-시간을 지원하도록 했습니다. #71560 (Ali).- 쿼리 플랜에서 조인에서 어느 테이블을 inner(빌드) 테이블로 사용할지 선택하는 옵션이 추가되었습니다. 이는
query_plan_join_swap_table로 제어되며,auto로 설정할 수 있습니다. 이 모드에서는 ClickHouse가 행 수가 가장 적은 테이블을 선택하도록 시도합니다. #71577 (Vladimir Cherkasov). - 파트의 그래뉼러리티가 상수인 경우 인덱스 그래뉼러리티 값의 메모리 사용량을 최적화했습니다. 파트에 대해 항상 상수 그래뉼러리티를 선택할 수 있는 기능(설정
use_const_adaptive_granularity)이 추가되어, 메모리 사용이 항상 최적화되도록 합니다. 이는 대규모 워크로드(공유 스토리지에 수조 개의 행이 있는 경우)에서 데이터 파트의 메타데이터(인덱스 그래뉼러리티 값) 때문에 메모리 사용량이 지속적으로 증가하는 것을 방지하는 데 도움이 됩니다. #71786 (Anton Popov). allowed_feature_tier를 전역 스위치로 구현하여 모든 실험적/베타 기능을 비활성화할 수 있도록 했습니다. #71841 (Raúl Marín).iceberg[S3;HDFS;Azure]Cluster,deltaLakeCluster,hudiCluster테이블 함수들이 추가되었습니다. #72045 (Mikhail Artemenko).ALTER USER {ADD|MODIFY|DROP SETTING},ALTER USER {ADD|DROP PROFILE}구문을 추가하고, 동일한 구문을ALTER ROLE및ALTER PROFILE에도 추가합니다. #72050 (pufit).arrayPrAUCFUNCTION이 추가되었습니다. Precision-Recall 곡선의 AUC(Area Under the Curve)를 계산합니다. #72073 (Emmanuel).MergeTree테이블의 기본 인덱스에 대한 캐시가 추가되었습니다(테이블 설정use_primary_key_cache로 활성화할 수 있음). 기본 인덱스에 대해 지연 로드(lazy load)와 캐시가 모두 활성화되어 있으면, 기본 인덱스를 항상 메모리에 유지하는 대신 마크 캐시와 유사하게 필요할 때 캐시에 로드합니다. 데이터 파트의 삽입/머지/페치 작업 및 테이블 재시작 시 기본 인덱스를 미리 캐시에 적재하는 기능도 추가되었습니다(설정prewarm_primary_key_cache로 활성화할 수 있음). #72102 (Anton Popov).- 배열 타입에
indexOfAssumeSorted함수를 추가합니다. 비내림차순(오름차순 포함)으로 정렬된 배열에서의 검색을 최적화합니다. #72517 (Eric Kurbanov). - 집계 함수
groupConcat에서 구분자를 선택적 두 번째 인수로 사용할 수 있게 되었습니다. #72540 (Yarik Briukhovetskyi). - 새로운
http_response_headers설정이 추가되어 HTTP 응답 헤더를 사용자 지정할 수 있습니다. 예를 들어, 데이터베이스에 저장된 이미지를 브라우저가 렌더링하도록 할 수 있습니다. 이로써 #59620가 해결되었습니다. #72656 (Alexey Milovidov). - Int64 타입의 Unix 타임스탬프 값을 DateTime64로 변환하는
fromUnixTimestamp64SecondFUNCTION을 추가합니다. #73146 (Robert Schulze).
성능 개선
Nullable컬럼에 대해, 데이터 블록에서 NULL 값 비율이 지정된 임계값을 초과할 경우 함수를 단락(short-circuit) 방식으로 실행할 수 있도록 하는 새로운 설정short_circuit_function_evaluation_for_nulls및short_circuit_function_evaluation_for_nulls_threshold를 추가합니다. 이는 함수가 널이 아닌 값을 가진 행에 대해서만 실행된다는 것을 의미합니다. 이 동작은 인자 중 하나 이상이 NULL인 행에 대해 NULL 값을 반환하는 함수에만 적용됩니다. #60129 (李扬).- 객체 스토리지 디스크에서
clickhouse disks remove --recursive의 메모리 사용량이 감소했습니다. #67323 (Kirill). - 이제
join_algorithm='parallel_hash'의 경우 병렬 처리를 위해 스레드 간에 분산할 때 입력 블록의 컬럼을 복사하지 않습니다. #67782 (Nikita Taranov). - 더 많은 표현식에 대해 JIT 컴파일을 활성화합니다:
abs/bitCount/sign/modulo/pmod/isNull/isNotNull/assumeNotNull/to(U)Int*/toFloat*, 비교 함수(=,<,>,>=,<=), 논리 함수(and,or). #70598 (李扬). - 이제
join_algorithm설정 값이default로 설정되어 있는 경우(적용 가능한 경우)parallel_hash알고리즘이 사용됩니다.parallel_hash를 사용할 수 없을 때는 이전의 두 가지 대안(direct및hash)이 여전히 고려됩니다. #70788 (Nikita Taranov). - 겹치지 않는 파트를 위한
Replacing머지 알고리즘을 최적화했습니다. #70977 (Anton Popov). - metrics 및 system.detached_parts에서 readonly 및 write-once 디스크의 분리된 파트를 나열하지 않습니다. #71086 (Alexey Milovidov).
- 무거운 비동기 메트릭은 기본적으로 계산하지 않습니다. 이 기능은 #40332에서 도입되었지만, 한 명의 고객에게만 필요한 무거운 백그라운드 작업을 두는 것은 바람직하지 않습니다. #71087 (Alexey Milovidov).
- 임계 구역을 축소하여 system.query_metric_log 수집 간격의 성능과 정확도를 향상합니다. #71473 (Pablo Marcos).
- 조인 시 사용되는 해시 테이블 수를 줄이기 위해
WHERE및ON절에서 공통 표현식을 추출하는 옵션을 추가했습니다.optimize_extract_common_expressions = 1로 활성화할 수 있습니다. #71537 (János Benjamin Antal). LowCardinality(String)에서SELECT를 수행할 때 인덱스를 사용할 수 있도록 했습니다. #71598 (Yarik Briukhovetskyi).- 병렬 레플리카와 local plan이 활성화된 상태에서 쿼리를 실행할 때, 워커 노드에서는 인덱스 분석을 수행하지 않습니다. 코디네이터가 자신(쿼리 개시자)에서 수행한 인덱스 분석 결과를 바탕으로 각 워커가 읽을 범위를 결정합니다. #72109 (Igor Nikonov).
- https://github.com/ClickHouse/ClickHouse/pull/57631 에서 Compact 파트에 있는 단일 컬럼의 서브컬럼을 읽는 최적화를 복원합니다. 이 최적화는 실수로 삭제되었습니다. #72285 (Pavel Kruglov).
LowCardinality(String)컬럼 정렬용 비교자에서 호출을 디가상화하여 성능을 향상했습니다. #72337 (Alexander Gololobov).- 일부 단순한 데이터 형식에서 argMin/Max 함수를 최적화했습니다. #72350 (alesapin).
- 메모리 트래커에서 공유 락을 사용하도록 잠금 메커니즘을 최적화하여 락 경합을 줄입니다. #72375 (Jiebin Sun).
- 새 설정
use_async_executor_for_materialized_views가 추가되었습니다. materialized view 쿼리 실행에 비동기 및 (잠재적으로) 멀티스레드 방식을 사용하여 INSERT 중 materialized view 처리 속도를 높일 수 있지만, 메모리 사용량이 더 많아질 수 있습니다. #72497 (alesapin). - 설정
max_size_to_preallocate_for_aggregation,max_size_to_preallocate_for_joins의 기본값이10^12로 추가로 상향되어, 최적화가 더 많은 경우에 적용됩니다. #72555 (Nikita Taranov). - 집계 함수 상태 역직렬화의 성능이 향상되었습니다(
AggregateFunction데이터 타입 및 분산 쿼리에서).RowBinary형식 파싱 성능도 소폭 개선되었습니다. #72818 (Anton Popov).
개선 사항
- 상수 배열과 상수로 캡처된 인자를 사용하는 고차 함수는 상수를 반환합니다. #58400 (Alexey Milovidov).
- 가상 행을 생성하여 읽기 순서 최적화를 수행함으로써, 특히 여러 파트가 있을 때 병합 정렬 중에 읽어야 하는 데이터 양을 줄였습니다. #62125 (Shichao Jin).
- 쿼리 계획 단계 이름(
EXPLAIN PLAN json=1)과 파이프라인 프로세서 이름(EXPLAIN PIPELINE compact=0,graph=1)에 이제 고유 ID가 접미사로 추가됩니다. 이를 통해 프로세서 프로파일러 출력과 OpenTelemetry 트레이스를 EXPLAIN 출력과 대응시킬 수 있습니다. #63518 (qhsong). - Azure Blob Storage에 쓰기 작업을 수행한 후 객체의 존재 여부를 확인하는 옵션이 추가되었습니다. 이 동작은
check_objects_after_upload설정으로 제어됩니다. #64847 (Smita Kulkarni). - HashTable의 destroyElements에서의 use-after-dtor 처리 로직을 수정했습니다. #65279 (cangyin).
clickhouse-local에서 기본적으로Atomic데이터베이스를 사용합니다. #50647의 항목 1과 5를 해결합니다. #44817를 종료합니다. #68024 (Alexey Milovidov).- 쓰기 버퍼는 명시적으로 취소하거나 완료해야 합니다. 예외는 오류를 클라이언트에 알리기 위해 HTTP 프로토콜을 깨뜨립니다. #68800 (Sema Checherinda).
- 실행 중인 DDLWorker 호스트를 보고하기 위해
replica_dir를 생성하고, DDLWorker에서 레플리카를 활성 상태로 표시합니다. #69658 (Tuan Pham Anh). -
DDLQueryStatusSource를 리팩터링합니다: -DDLQueryStatusSource를DistributedQueryStatusSource로 이름을 변경하고 이를 기본 클래스로 만듭니다. -DDLQueryStatusSource로부터 파생된 두 개의 서브클래스DDLOnClusterQueryStatusSource와ReplicatedDatabaseQueryStatusSource를 생성하여 각각 DDL On Cluster 및 복제 데이터베이스(Replicated databases)에서 DDL 작업 상태를 쿼리하도록 합니다. 2.DDLOnClusterQueryStatusSource에서 오프라인 호스트에 대한 대기 중단을 지원합니다. #69660 (Tuan Pham Anh).
- 새로운 취소 로직이 추가되었습니다.
CancellationChecker는 실행 중인 모든 쿼리에 대해 타임아웃을 확인하고, 타임아웃이 발생하면 해당 쿼리를 중지합니다. #69880 (Yarik Briukhovetskyi). allow_experimental_join_condition설정을 제거하여 기본적으로 non-equi 조건이 허용되도록 했습니다. #69910 (Vladimir Cherkasov).- 기본값으로
parallel_replicas_local_plan을 활성화합니다. 쿼리 이니시에이터에서 완전한 로컬 플랜을 구성하면 리소스 소비를 줄이면서 병렬 레플리카 성능을 개선하고, 더 많은 쿼리 최적화를 적용할 수 있습니다. #70171 (Igor Nikonov). - http_handlers(
dynamic_query_handler/predefined_query_handler용)에서 user/password를 설정할 수 있도록 했습니다. #70725 (Azat Khuzhin). - S3Queue 스토리지에서 일부 설정에 대해
ALTER TABLE ... MODIFY/RESET SETTING ...를 지원합니다. #70811 (Kseniia Sumarokova). - 디렉터리 목록을 가져올 때는 비용 효율성이 떨어질 수 있으므로 객체 스토리지 API를 호출하지 마십시오. 대신 파일 이름 목록을 메모리에 저장하십시오. 이 방식의 트레이드오프는 초기 로드 시간이 증가하고 파일 이름을 저장하는 데 필요한 메모리 사용량이 늘어난다는 점입니다. #70823 (Julia Kartseva).
- 데이터를 병렬로 압축할 수 있는
--threads매개변수를clickhouse-compressor에 추가했습니다. #70860 (Alexey Milovidov). - Replxx 클라이언트의 히스토리 크기를 설정할 수 있도록 했습니다. #71014 (Jiří Kozlovský).
prewarm_mark_cache설정이 추가되었으며, 이 설정을 사용하면 테이블의 삽입, 머지, 파트 페치 및 시작 시점에 마크를 mark cache로 미리 로드할 수 있습니다. #71053 (Anton Popov).- Parquet 네이티브 리더에서 Boolean 타입을 지원합니다. #71055 (Arthur Passos).
- S3와 상호작용할 때 "Malformed message"와 같은 더 다양한 오류에 대해 재시도합니다. #71088 (Alexey Milovidov).
- 일부 S3 관련 메시지에 대해 로그 레벨을 낮추었습니다. #71090 (Alexey Milovidov).
- 공백이 포함된 HDFS 파일 이름에 대한 쓰기를 지원합니다. #71105 (exmy).
system.session_log는 상당히 괜찮습니다. 이로써 #51760 이슈가 종료됩니다. #71150 (Alexey Milovidov).- 병렬 레플리카를 사용하는 쿼리에서 RIGHT / FULL 조인을 수정합니다. 이제 RIGHT 조인은 오른쪽 테이블 읽기를 분산하여 병렬 레플리카로 실행할 수 있으며, FULL 조인은 노드 간 병렬화가 불가능하여 각 노드에서 로컬로 실행됩니다. #71162 (Igor Nikonov).
- 복제된 테이블(Replicated Table), 사전 및 뷰(VIEW)의 개수를 제한하기 위한 설정을 추가했습니다. #71179 (Kirill).
- #71227을 수정합니다. #71286 (Arthur Passos).
- 서버/사용자 메모리 사용량을 기반으로 디스크에 자동으로
GROUP BY/ORDER BY를 수행합니다.max_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sort쿼리 SETTING으로 제어됩니다. #71406 (Azat Khuzhin). - 고급 대시보드에 호스트별 대시보드인
Overview (host)및Cloud overview (host)를 추가합니다. #71422 (alesapin). - 이제
translate함수는from인수에 포함된 문자의 수가to인수보다 많을 경우 문자 삭제를 지원합니다. 예를 들어SELECT translate('clickhouse', 'clickhouse', 'CLICK')는 이제CLICK을 반환합니다. #71441 (shuai.xu). - 새로운 함수
parseDateTime64,parseDateTime64OrNull,parseDateTime64OrZero가 추가되었습니다. 기존 함수parseDateTime(및 해당 변형 함수)과 달리DateTime대신DateTime64타입의 값을 반환합니다. #71581 (kevinyhzou). - 메모리에서
index_granularity배열의 크기를 실제 사용량에 맞게 줄여 MergeTree 테이블 엔진 계열의 메모리 사용량을 감소시켰습니다. #71595 (alesapin). - 명령줄 애플리케이션에서 다중 SQL 문에 대해서도 구문 강조 표시가 됩니다. #71622 (Alexey Milovidov).
- 명령줄 애플리케이션은 오류가 발생하면 0이 아닌 종료 코드를 반환합니다. 이전 버전에서는
disks애플리케이션이 오류가 발생해도 0을 반환했고, 다른 애플리케이션들은 오류 코드 256(PARTITION_ALREADY_EXISTS) 및 512(SET_NON_GRANTED_ROLE)에 대해 0을 반환했습니다. #71623 (Alexey Milovidov). Vertical포맷(쿼리를\G로 끝낼 때도 활성화됨)은 다음과 같은 Pretty 포맷의 기능을 제공합니다: - 숫자에서 천 단위 구분 강조 표시 - 사람이 읽기 쉬운 숫자 툴팁 출력. #71630 (Alexey Milovidov).- 설정
filesystem_cache_prefer_bigger_buffer_size를 통해 파일 시스템 캐시의 메모리 버퍼 크기 증가를 비활성화할 수 있습니다. #71640 (Kseniia Sumarokova). - 파일 시스템 캐시의 백그라운드 다운로드 최대 파일 세그먼트 크기를 위한 별도의 설정
background_download_max_file_segment_size를 추가합니다. #71648 (Kseniia Sumarokova). enable_http_compression의 기본값을 0에서 1로 변경합니다. #71591을(를) 해결합니다. #71774 (Peter Nguyen).- Object 타입에서 JSON 타입으로 ALTER를 지원합니다. #71784 (Pavel Kruglov).
- JSON 타입 파싱이 조금 더 향상되었습니다. JSON 경로의 현재 블록에 여러 타입의 값이 포함된 경우, 특수한 best-effort 우선순위에 따라 여러 타입을 적용해 보고 그중 최적의 타입을 선택합니다. #71785 (Pavel Kruglov).
- 이전에는
system.asynchronous_metrics에서 데이터를 읽을 때 동시에 진행 중인 업데이트가 완료될 때까지 대기했습니다. 시스템 부하가 심한 경우 이 과정에 오랜 시간이 걸릴 수 있습니다. 이번 변경으로 이전에 수집된 값은 항상 즉시 읽을 수 있습니다. #71798 (Alexander Gololobov). polling_max_timeout_ms를 10분,polling_backoff_ms를 30초로 설정합니다. #71817 (Kseniia Sumarokova).- 'SELECT - FROM t LIMIT 1'과 같은 쿼리는 실제로 사용되지 않음에도 파트 인덱스를 불필요하게 로드했습니다. #71866 (Alexander Gololobov).
- 이전 호환성 설정에서는 Allow_reorder_prewhere_conditions가 기본적으로 활성화되어 있습니다. #71867 (Raúl Marín).
bitmapTransform함수 사용 시 인수 유형이 올바른 경우system.errors테이블의ILLEGAL_TYPE_OF_ARGUMENT카운터가 증가하지 않도록 했습니다. #71971 (Dmitry Novik).- 딕셔너리 스토리지(Dictionary storage)를 사용하거나 딕셔너리 테이블 FUNCTION, 혹은 딕셔너리 자체에 대해 직접
SELECT를 수행하여 딕셔너리에서 데이터를 조회할 때에는 이제 해당 딕셔너리에 대한SELECT권한 또는dictGet권한만 있으면 충분합니다. 이는 ACL 우회를 방지하기 위한 이전 시도인 https://github.com/ClickHouse/ClickHouse/pull/57362 및 https://github.com/ClickHouse/ClickHouse/pull/65359과 일관되도록 하기 위한 변경이며, 또한 후자의 변경 사항이 이전 버전과도 호환되도록 합니다. #72051 (Nikita Mikhaylov). - 고급 대시보드 HTML 페이지에
system.dashboards테이블의 대시보드를 선택할 수 있는 드롭다운이 추가되었습니다. #72081 (Sergei Trifonov). - 분산
INSERT ... SELECT에 대한 실행 계획을 수립할 때prefer_locahost_replica설정을 따르도록 합니다. #72190 (filimonov). - 해당 문제는 여기에서 설명되어 있습니다. Azure Iceberg Writer는 스펙을 위반하는 방식으로 Iceberg 메타데이터 파일(및 매니페스트 파일)을 생성합니다. 이 PR에서는 v2 리더로 v1 Iceberg 포맷 메타데이터를 읽어 보려는 시도를 추가했습니다(Azure Iceberg Writer가 그런 방식으로 기록하기 때문입니다). 또한 매니페스트 파일에 해당 필드를 생성하지 않았을 때 오류를 발생시키도록 했습니다. #72277 (Daniil Ivanik).
- JSON/Dynamic/Variant 타입을 실험적 기능에서 베타 단계로 승격합니다. #72294 (Pavel Kruglov).
- 이제 쿼리에서
UNION [ALL]을 사용하여CREATE MATERIALIZED VIEW를 생성하는 것이 허용됩니다. 동작은JOIN이 있는 matview와 동일합니다. *SELECT표현식에서 첫 번째 테이블만 INSERT에 대한 트리거로 동작하며- , 나머지 테이블은 모두 무시됩니다. #72347 (alesapin). - 삽입 배치에 하나의 파티션 키 값만 포함된 경우 MergeTree로의 삽입을 더 빠르게 수행하도록 개선했습니다. #72348 (alesapin).
- 새로운 MergeTreeIndexGranularityInternalArraysTotalSize 메트릭을 system.metrics에 추가했습니다. 이 메트릭은 높은 메모리 사용량 문제가 발생하기 쉬운 대규모 데이터셋을 가진 인스턴스를 찾는 데 필요합니다. #72490 (Miсhael Stetsyuk).
Format Null포맷을 사용하는 쿼리에서 이제Null단어의 모든 표기 형태가 인식됩니다. 이전에는 다른 형태(예:NULL)를 사용해도 예외가 발생하지 않았지만, 정작 그런 경우에는Null포맷이 실제로 사용되지는 않았습니다. #72658 (Nikita Taranov).- Enum에 존재하지 않는 Set의 미지 값도 허용합니다. #72662를 수정합니다. #72686 (zhanglistar).
- 비활성 파트의 총 바이트 수를 집계할 수 있도록
system.tables에total_bytes_with_inactive를 추가했습니다. #72690 (Kai Zhu). - MergeTreeSettings를 system.settings_changes에 추가합니다. #72694 (Raúl Marín).
- Enum 데이터 타입에서 문자열 검색 연산자(예: LIKE)를 지원하고 #72661를 수정했습니다. #72732 (zhanglistar).
notEmptyFUNCTION에서 JSON 타입 지원을 추가했습니다. #72741 (Pavel Kruglov).- GCS S3 오류 코드
AuthenticationRequired파싱을 지원합니다. #72753 (Vitaly Baranov). - ifNull 및 coalesce 함수에서 Dynamic 타입을 지원합니다. #72772 (Pavel Kruglov).
JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCount프로파일링 이벤트가 추가되었습니다. #72842 (Vladimir Cherkasov).- toFloat64/touInt32/etc. 함수에서 Dynamic 타입을 지원하도록 했습니다. #72989 (Pavel Kruglov).
버그 수정 (공식 안정 릴리스에서 사용자가 직접 확인할 수 있는 오동작)
ATTACH PART쿼리 중에 중복 제거된 파트가 더 이상attaching_접두사가 붙은 상태로 남는 일이 없습니다. #65636 (Kirill).INFUNCTION에서 dateTime64의 정밀도 손실이 발생하던 버그를 수정했습니다. #67230 (Yarik Briukhovetskyi).ORDER BY ... WITH FILL에서IGNORE/RESPECT NULLS와 함께 함수를 사용할 때 발생할 수 있는 논리 오류를 수정하고, #57609을(를) 종료합니다. #68234 (Vladimir Cherkasov).- 메모리 제한에 도달했을 때
Native포맷을 사용하는 비동기 insert에서 드물게 발생하던 논리적 오류를 수정했습니다. #68965 (Anton Popov). - EPHEMERAL 컬럼에 대한 CREATE TABLE 문에서 COMMENT를 수정했습니다. #70458 (Yakov Olkhovskiy).
- JSONExtract에서 LowCardinality(널 허용)을 사용할 때 발생하던 논리적 오류를 수정했습니다. #70549 (Pavel Kruglov).
- 테이블 이름이 너무 길 때의 동작을 수정합니다. #70810 (Yarik Briukhovetskyi).
- URL 엔진에서 사용자 정의 헤더를 통해 Content-Type을 재정의할 수 있는 기능을 추가했습니다. #70859 (Artem Iurin).
StorageS3Queue에서 "/processed에 이미 존재하기 때문에 영구 노드를 생성할 수 없습니다(Cannot create a persistent node in /processed since it already exists)"라는 논리 오류를 수정합니다. #70984 (Kseniia Sumarokova).- PROJECTION 경량한 삭제에서 rebuild 옵션이 _row_exists 컬럼을 고려하지 않던 버그를 수정했습니다. #71089 (Shichao Jin).
- 예기치 않은 경쟁 상태로 인해
system.query_metric_log에 잘못된 값이 기록되던 문제를 수정합니다. #71124 (Pablo Marcos). quantileExactWeightedInterpolated의 집계 함수 이름이 일치하지 않는 문제를 수정합니다. 이 버그는 https://github.com/ClickHouse/ClickHouse/pull/69619에서 도입되었습니다. cc @Algunenano. #71168 (李扬).- FUNCTION 비교에서 Dynamic 사용 시 발생하던 bad_weak_ptr 예외를 수정했습니다. #71183 (Pavel Kruglov).
- zero-copy 복제를 사용하는 ReplicatedMergeTree에서 해당 blob을 사용 중인 노드가 있을 때 blob을 삭제하지 않습니다. #71186 (Antonio Andelic).
- HTTP 및 Async Inserts를 통해 Native format을 사용할 때 format 설정이 무시되던 문제를 수정했습니다. #71193 (Pavel Kruglov).
use_query_cache = 1설정으로 실행되는 SELECT 쿼리는 시스템 테이블 이름이 리터럴로 사용되더라도 더 이상 거부되지 않습니다. 예를 들어SELECT - FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true;쿼리가 이제 정상적으로 동작합니다. #71254 (Robert Schulze).- 스토리지 구성에서 디스크에 캐시 설정이 없을 때
enable_filesystem_cache=1을 설정하면 메모리 사용량이 증가하던 버그를 수정했습니다. #71261 (Kseniia Sumarokova). - Dynamic 컬럼에서 LowCardinality 딕셔너리를 역직렬화할 때 발생할 수 있는 「Cannot read all data」 오류를 수정합니다. #71299 (Pavel Kruglov).
- 클라이언트에서 parallel output format 정리가 완전히 수행되지 않던 문제를 수정합니다. #71304 (Raúl Marín).
- named collections에서 누락되어 있던 unescaping 처리를 추가했습니다. 이 수정이 없으면 clickhouse-server가 시작되지 않습니다. #71308 (MikhailBurdukov).
- 네이티브 프로토콜에서 비동기 insert 시 빈 블록이 생성되는 문제를 수정합니다. #71312 (Anton Popov).
- 잘못된 와일드카드 권한을 부여할 때 AST 포맷팅이 일관되지 않던 문제를 수정했습니다. #71309. #71332 (pufit).
- JSON 타입 힌트에서 의심스럽거나 실험적인 타입을 검사합니다. #71369 (Pavel Kruglov).
- Variant 컬럼을 사용하는 청크에서 발생하는 "Invalid number of rows in Chunk" 오류를 수정합니다. #71388 (Pavel Kruglov).
- 잘못된 인수(예:
NULL)를 전달하면mongodb테이블 함수가 크래시 나는 문제를 수정합니다. #71426 (Vladimir Cherkasov). - optimize_rewrite_array_exists_to_has에서 발생하던 크래시를 수정했습니다. #71432 (Raúl Marín).
- palin_rewritable 디스크에서 디렉터리 생성이 실패하여 트랜잭션 롤백 중 NoSuchKey 오류가 발생하는 문제를 수정합니다. #71439 (Julia Kartseva).
max_insert_delayed_streams_for_parallel_write설정의 INSERT 시 사용 방식을 수정했습니다. 이전에는 여러 파티션에 데이터를 쓰는 INSERT에서 잘못 동작해 메모리 사용량이 크게 증가할 수 있었습니다. #71474 (Anton Popov).WHERE조건에서arrayJoin이 사용될 수 있는 경우 발생할 수 있었던Argument for function must be constant(FUNCTION 인수는 상수여야 한다) 오류(구 분석기(old analyzer))를 수정합니다. https://github.com/ClickHouse/ClickHouse/pull/65414 이후 도입된 회귀(regression)입니다. #71476 (Nikolai Kochetov).- 컬럼이 0개인 경우(이전 analyzer 사용 시) SortCursor에서 크래시가 발생하지 않도록 했습니다. #71494 (Raúl Marín).
- 초기화되지 않은 orc 데이터로 인해 발생한 date32 값의 범위 초과 문제를 수정했습니다. 자세한 내용은 https://github.com/apache/incubator-gluten/issues/7823를 참조하십시오. #71500 (李扬).
- Dynamic 및 JSON 타입에 대해 wide part에서 컬럼 크기를 계산하는 로직을 수정했습니다. #71526 (Pavel Kruglov).
- materialized view 내부 쿼리에서 CTE와 함께 IN을 사용할 때 발생하던 Analyzer 오류를 수정하여 #65598를 해결했습니다. #71538 (Maksim Kita).
- 범위를 벗어나는 경우 bitShift 함수에서 오류를 던지는 대신 0 또는 기본 문자(default char)를 반환하도록 수정했습니다. #71580 (Pablo Marcos).
- 특정 엔진과 함께 materialized view를 사용할 때 발생하던 서버 비정상 종료 문제를 수정합니다. #71593 (Pervakov Grigorii).
- 상수 배열에 대한 별칭을 포함한 중첩 데이터 구조에 대해
ARRAY JOIN을 수행하면 널 포인터 역참조가 발생했습니다. 이 수정으로 #71677이(가) 해결됩니다. #71678 (Alexey Milovidov). - 빈 튜플을 사용해
ALTER를 수행할 때 발생하던LOGICAL_ERROR를 수정합니다. 이로써 #71647 이슈가 해결됩니다. #71679 (Amos Bird). - NOT IN 연산자가 사용된 경우 파티션 컬럼에 대한 술어에서 상수 Set을 변환하지 않도록 했습니다. #71695 (Eduard Karacharov).
- LowCardinality(Nullable)에서 Dynamic으로의 CAST 연산을 수정했습니다. 이전에는
Bad cast from type DB::ColumnVector<int> to DB::ColumnNullable오류가 발생할 수 있었습니다. #71742 (Pavel Kruglov). - WHERE 절에서 DateTime64 타입 기본 키에
toDayOfWeek를 사용할 때 발생하던 예외를 수정합니다. #71849 (Yakov Olkhovskiy). - 희소 컬럼으로 파싱한 후 기본값을 채우는 로직을 수정했습니다. #71854 (Anton Popov).
- 분산 테이블에서 입력이 ALIAS인 경우 발생하는 GROUPING 함수 오류를 수정하여 #68602를 해결했습니다. #71855 (Vladimir Cherkasov).
WITH TIES절을 사용하는 select SQL 문에서 충분한 수의 행을 반환하지 못할 수 있었던 문제를 수정했습니다. #71886 (wxybear).- arrayWithConstant 평가 중 컬럼이 배열 크기 제한을 초과한 것으로 잘못 판단되어 발생하던 TOO_LARGE_ARRAY_SIZE 예외를 수정합니다. #71894 (Udi).
clickhouse-benchmark가 1초를 초과해 실행되는 쿼리에 대해 잘못된 메트릭을 보고했습니다. #71898 (Alexey Milovidov).- clickhouse-client에서 진행 표시기와 진행 테이블 간의 데이터 레이스를 수정합니다. 이 문제는 FROM INFILE을 사용할 때 발생합니다. INSERT 쿼리 실행 중 키 입력을 가로채서 진행 테이블 표시를 전환할 수 있도록 합니다. #71901 (Julia Kartseva).
- Pretty JSON 형식에서 Dynamic 값의 직렬화 문제를 수정했습니다. #71923 (Pavel Kruglov).
- 24.6 버전에서 발생한 system.s3/azure_queue_log의 rows_processed 컬럼 문제를 수정했습니다. #69975 해결. #71946 (Kseniia Sumarokova).
s3/s3Cluster함수가 불완전한 결과를 반환하거나 예외를 던질 수 있던 문제를 수정했습니다. 이 문제는 s3 URI에서 glob 패턴(예:pattern/*)을 사용하고, 키가pattern/인 비어 있는 객체가 존재하는 경우와 관련이 있었습니다(S3 Console이 이러한 객체를 자동으로 생성함). 또한 설정s3_skip_empty_files의 기본값을false에서true로 변경했습니다. #71947 (Nikita Taranov).- clickhouse-client 구문 하이라이트 기능에서 발생하던 충돌을 수정합니다. #71864를 해결합니다. #71949 (Nikolay Degterinsky).
ORDER BY에서 첫 번째 인자가 상수인 이진 단조 함수(binary monotonic function)를 사용하는MergeTree테이블에서 발생하던Illegal type오류를 수정했습니다. #71941를 해결했습니다. #71966 (Nikolai Kochetov).- 서브쿼리 내에서 사용되는 EXPLAIN AST에는 SELECT 쿼리만 허용합니다. 다른 종류의 쿼리는 논리 오류 'Bad cast from type DB::ASTCreateQuery to DB::ASTSelectWithUnionQuery' 또는
Inconsistent AST formatting이(가) 발생하게 됩니다. #71982 (Pavel Kruglov). clickhouse-client로 레코드를 삽입하면 클라이언트는 서버에서 컬럼 설명을 읽습니다. 하지만 이를 잘못된 순서로 기록하는 버그가 있었으며, 올바른 순서는 [statistics, ttl, settings]입니다. #71991 (Han Fei).format_alter_commands_with_parentheses가 활성화된 경우MOVE PARTITION ... TO TABLE ...ALTER 명령의 서식이 올바르게 적용되도록 수정합니다. #72080 (János Benjamin Antal).- File/S3/URL/HDFS/Azure 엔진에서 CREATE 쿼리에 자동으로 추론된 포맷 이름을 추가합니다. 이전에는 서버를 다시 시작할 때마다 포맷 이름을 재추론했으며, 지정된 데이터 파일이 제거된 경우 서버 시작 시 오류가 발생했습니다. #72108 (Pavel Kruglov).
min_age_to_force_merge_on_partition_only가 이미 하나의 파트로 병합된 동일한 파티션을 반복해서 병합하려다 멈추고, 여러 파트를 가진 파티션은 병합하지 않던 버그를 수정합니다. #72209 (Christoph Wurm).- 희소 컬럼을 처리하는 과정에서 드물게 발생하던
SimpleSquashingChunksTransform크래시를 수정했습니다. #72226 (Vladimir Cherkasov). GraceHashJoin에서 데이터 레이스를 수정하여, 이로 인해 조인 결과에서 일부 행이 누락될 수 있던 버그를 해결했습니다. #72233 (Nikita Taranov).- 구체화된
_block_number컬럼(설정enable_block_number_column이 활성화된 경우)을 사용하는ALTER DELETE쿼리를 수정했습니다. #72261 (Anton Popov). - 예를 들어
ConcurrentHashJoin생성자에서와 같이ColumnDynamic::dumpStructure()를 동시에 호출할 때 발생하던 데이터 레이스를 수정했습니다. #72278 (Nikita Taranov). - 중복된 컬럼이 포함된
ORDER BY ... WITH FILL에서 발생할 수 있던LOGICAL_ERROR를 수정합니다. #72387 (Vladimir Cherkasov). optimize_functions_to_subcolumns적용 후 여러 경우에 일치하지 않는 타입이 발생하던 문제를 수정했습니다. #72394 (Anton Popov).BACKUP DATABASE db EXCEPT TABLES db.table쿼리의 파싱에 실패하던 문제를 수정합니다. #72429 (Konstantin Bogdanov).- 빈 Variant를 생성할 수 없도록 변경했습니다. #72454 (Pavel Kruglov).
system.merges에서result_part_path의 잘못된 형식을 수정합니다. #72567 (Konstantin Bogdanov).- 요소가 하나뿐인 glob의 파싱을 수정합니다. #72572 (Konstantin Bogdanov).
- ARRAY JOIN이 포함된 분산 쿼리에서 팔로워 서버용 쿼리 생성 문제를 수정합니다. #69276을(를) 해결합니다. #72608 (Dmitry Novik).
- DateTime64 in DateTime64가 아무것도 반환하지 않던 버그를 수정했습니다. #72640 (Yarik Briukhovetskyi).
- S3 파일이 생성되는 속도보다 작은 값으로
tracked_files_limit설정이 구성된 S3Queue Unordered 모드에서 발생하는 "No such key" 오류를 수정합니다. #72738 (Kseniia Sumarokova). - 마크 캐시가 큰 경우 삭제하는 데 눈에 띄게 오래 걸릴 수 있습니다. 이 기간에 context mutex를 보유하면 많은 다른 작업이 차단되고, 해제될 때까지 새로운 클라이언트 연결도 설정될 수 없습니다. 또한 동기화를 위해 이 mutex를 계속 보유할 필요는 없으며, shared ptr를 통해 캐시에 대한 로컬 참조만 가지고 있으면 충분합니다. #72749 (Alexander Gololobov).
- PK cache는 한 테스트 인스턴스에서 크기를 심각하게 과소 추정하고 있었습니다. 특히 LowCardinality 컬럼이 딕셔너리 크기를 포함하지 않았습니다. 수정 사항은 캐시 엔트리 크기를 계산할 때 column->allocatedBytes()에 약간의 오버헤드 추정치를 더해 사용하는 것입니다. #72750 (Alexander Gololobov).
- 로컬에 해당 사용자가 없을 때 RemoteQueryExecutor에서 발생하던 예외를 수정합니다. #72759 (Andrey Zvonov).
- 구체화된
_block_number컬럼을 사용하는 뮤테이션을 수정했습니다(enable_block_number_column설정이 활성화된 경우). #72854 (Anton Popov). - 백업에 빈 파일이 포함된 경우 일반 재기록 디스크를 사용할 때 백업/복원이 제대로 동작하지 않던 문제를 수정했습니다. #72858 (Kseniia Sumarokova).
- DistributedAsyncInsertDirectoryQueue에서 INSERT 작업이 적절히 취소되도록 수정했습니다. #72885 (Antonio Andelic).
- 잘못된 데이터를 희소 컬럼으로 파싱하는 과정에서 발생하던 크래시를 수정했습니다(설정
enable_parsing_to_custom_serialization이 활성화된 경우 발생할 수 있음). #72891 (Anton Popov). - 백업 복구 중에 발생할 수 있는 충돌을 수정합니다. #72947 (Kseniia Sumarokova).
parallel_hashJOIN 메서드에서, 쿼리의ON절에 부등식 필터가 포함된 복잡한 조건이 있는 경우 발생할 수 있었던 버그를 수정했습니다. #72993 (Nikita Taranov).- JSON 파싱 시 기본 포맷 설정을 사용하도록 하여 역직렬화 오류를 방지합니다. #73043 (Pavel Kruglov).
- 지원되지 않는 스토리지를 사용하는 트랜잭션에서 발생하던 충돌을 수정했습니다. #73045 (Raúl Marín).
- Tuple 파싱 중 중복된 JSON 키를 검사합니다. 이전에는 이로 인해 파싱 과정에서 논리적 오류
Invalid number of rows in Chunk가 발생할 수 있었습니다. #73082 (Pavel Kruglov).