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

Cloud용 v25.10 변경 로그

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

데이터 포맷 및 스키마 변경

  • 기본 schema_inference_make_columns_nullable 설정이 모든 값을 널 허용으로 만드는 대신, Parquet/ORC/Arrow 메타데이터에 포함된 컬럼의 널 허용(Nullable) 여부 정보를 반영하도록 변경되었습니다. 텍스트 포맷은 변경되지 않았습니다. #71499 (Michael Kolupaev).

쿼리 및 함수 변경

  • 쿼리 결과 캐시는 이제 log_comment 설정을 무시하므로, 쿼리에서 log_comment만 변경해도 캐시 미스가 발생하지 않습니다. 일부 사용자가 log_comment를 변경하여 의도적으로 캐시를 분할해 사용했을 가능성이 있습니다. 이 변경으로 해당 동작이 바뀌므로 이전 버전과 호환되지 않습니다. 이 목적에는 query_cache_tag 설정을 사용하십시오. #79878 (filimonov).
  • 이전 버전에서는 테이블 함수의 이름이 연산자 구현 함수와 동일한 경우, 쿼리 포맷팅이 일관되지 않게 처리되었습니다. #81601를 해결합니다. #81977를 해결합니다. #82834를 해결합니다. #82835를 해결합니다. 이제 EXPLAIN SYNTAX 쿼리는 연산자를 포맷팅하지 않습니다. 이 새로운 동작은 구문을 설명하는 목적을 더 잘 반영합니다. clickhouse-format, formatQuery 등도 쿼리에 함수 형태로 포함된 경우에는 함수들을 연산자로 포맷팅하지 않습니다. #82825 (Alexey Milovidov).
  • IPv4/IPv6에 대한 의미 없는 이진 연산을 비활성화했습니다. IPv4/IPv6와 비정수 타입 간의 덧셈/뺄셈이 비활성화됩니다. 이전에는 부동 소수점 타입과의 연산을 허용했고, 다른 일부 타입(예: DateTime)에 대해서는 논리적 오류를 발생시켰습니다. #86336 (Raúl Marín).
  • 기존 함수 hasToken과의 일관성을 높이기 위해 searchAnysearchAll 함수를 각각 hasAnyTokenshasAllTokens로 이름을 변경했습니다. #88109 (Robert Schulze).

데이터 타입 변경

  • JOIN 키에서 Dynamic 타입 사용을 금지합니다. Dynamic 타입을 Dynamic이 아닌 타입과 비교하면 예기치 않은 결과가 발생할 수 있습니다. Dynamic 컬럼을 필요한 타입으로 캐스팅하는 것이 좋습니다. #86358 (Pavel Kruglov).

스토리지 및 인덱스 변경 사항

  • allow_dynamic_metadata_for_data_lakes 설정이 사용 중단(deprecate)되었습니다. 이제 모든 Iceberg 테이블은 각 쿼리를 실행하기 전에 스토리지에서 최신 테이블 스키마를 가져오도록 시도합니다. #86366 (Daniil Ivanik).
  • 역색인 텍스트 인덱스가 RAM에 담을 수 없는 데이터셋에도 확장 가능하도록 처음부터 재설계되었습니다. #86485 (Anton Popov).
  • storage_metadata_write_full_object_key 서버 설정이 기본값으로 활성화되며, 더 이상 비활성화할 수 없습니다. #87335 (Sema Checherinda).
  • 파일 시스템 캐시에서 cache_hits_threshold가 제거되었습니다. cache_hits_threshold는 SLRU 캐시 정책이 도입되기 전에 추가된 것으로, 이제 둘 모두를 지원할 필요는 없습니다. #88344 (Kseniia Sumarokova).

설정 및 구성 변경

  • 삽입 속도가 낮을 때 ZooKeeper에 저장되는 znode 수를 줄이기 위해 replicated_deduplication_window_seconds 값을 1주에서 1시간으로 줄였습니다. #87414 (Sema Checherinda).
  • 설정 이름 query_plan_use_new_logical_join_stepquery_plan_use_logical_join_step으로 변경했습니다. #87679 (Vladimir Cherkasov).
  • 새로운 구문을 통해 tokenizer 파라미터를 더 표현력 있게 지정할 수 있습니다. #87997 (Elmi Ahmadov).
  • min_free_disk_ratio_to_perform_insertmin_free_disk_bytes_to_perform_insert 설정의 동작 방식에 두 가지 작은 변경 사항이 있습니다. 첫째, 삽입을 거부해야 하는지 판단할 때 사용 가능한 바이트 수 대신 예약되지 않은(unreserved) 바이트 수를 사용합니다. 백그라운드 머지와 뮤테이션을 위한 예약 용량이 설정된 임계값에 비해 작다면 이는 아마도 크게 중요하지 않을 수 있지만, 보다 올바른 방식으로 보입니다. 둘째, 이러한 설정을 system 테이블에는 적용하지 않습니다. 그 이유는 query_log와 같은 테이블은 계속 업데이트되도록 유지하고자 하기 때문입니다. 이는 디버깅에 큰 도움이 됩니다. system 테이블에 기록되는 데이터는 일반적으로 실제 데이터에 비해 작기 때문에, 합리적인 min_free_disk_ratio_to_perform_insert 임계값을 사용하면 훨씬 더 오랫동안 계속 동작할 수 있어야 합니다. #88468 (c-end).

Keeper changes

  • Keeper 내부 복제를 위한 비동기 모드를 활성화합니다. Keeper는 이전과 동일한 동작을 유지하면서 성능이 향상될 수 있습니다. 23.9보다 이전 버전에서 업데이트하는 경우, 먼저 23.9+로 업데이트한 다음 25.10+로 다시 업데이트해야 합니다. 업데이트 전에 keeper_server.coordination_settings.async_replication을 0으로 설정하고, 업데이트가 완료된 후 다시 활성화할 수도 있습니다. #88515 (Antonio Andelic).

새 기능

Functions

  • n그램을 기반으로 Naive Bayes를 사용하여 텍스트를 분류하는 naiveBayesClassifier 함수를 추가했습니다. #78700 (Nihal Z. Miaji).
  • 한 배열에서 다른 배열을 Set처럼 빼는 arrayExcept 함수를 추가했습니다. #82368 (Joanna Hulboj).
  • 진법 간 숫자를 변환하는 새로운 conv 함수를 추가했습니다. 현재 2-36 범위의 진법을 지원합니다. #83058 (hp).
  • studentTTestOneSample 집계 함수를 추가했습니다. #85436 (Dylan).
  • 문자열이 ASCII 문자만 포함하는지 확인하는 isValidASCII 함수를 추가했습니다. #85377 이슈를 해결합니다. #85786 (rajat mohan).
  • 집계 함수 timeSeriesChangesToGridtimeSeriesResetsToGrid를 추가했습니다. 시작 타임스탬프, 종료 타임스탬프, step, look back 윈도우에 대한 파라미터와 타임스탬프 및 값에 대한 두 개의 인수를 받는다는 점에서 timeSeriesRateToGrid와 유사하게 동작하지만, 윈도우당 최소 2개가 아니라 1개의 샘플만 필요로 합니다. PromQL changes/resets를 계산하여, 파라미터로 정의된 타임 그리드의 각 타임스탬프에 대해 지정된 윈도우 내에서 샘플 값이 변경되거나 감소하는 횟수를 셉니다. 반환 타입은 Array(Nullable(Float64))입니다. #86010 (Stephen Chi).
  • 히스토그램 버킷의 상한과 누적 값을 인수로 받아, 분위수 위치가 속한 버킷의 상한과 하한 사이에서 선형 보간을 수행하는 집계 함수 quantilePrometheusHistogram을 추가했습니다. 기존 히스토그램에 대해 PromQL histogram_quantile() 함수와 유사하게 동작합니다. #86294 (Stephen Chi).
  • startsWithendsWith 함수의 최적화된 대소문자 구분 없는(케이스 인센서티브) 변형을 추가했습니다: startsWithCaseInsensitive, endsWithCaseInsensitive, startsWithCaseInsensitiveUTF8, endsWithCaseInsensitiveUTF8. #87374 (Guang Zhao).

System tables

  • 데이터베이스 레플리카 정보를 제공하는 새 system 테이블 database_replicas를 추가합니다. #83408 (Konstantin Morozov).
  • system.aggregated_zookeeper_log 테이블을 추가합니다. 이 테이블은 세션 ID, 부모 경로, 연산 유형별로 그룹화된 ZooKeeper 연산의 통계(예: 연산 횟수, 평균 지연 시간, 오류)를 포함하며, 주기적으로 디스크에 기록됩니다. #85102 (Miсhael Stetsyuk).
  • SELECT SQL 문에서 Iceberg 메타데이터 파일을 조회할 수 있는 system 테이블 iceberg_metadata_log를 추가합니다. #86152 (scanhex12).
  • system.warnings 테이블에 CPU 및 메모리 관련 경고를 추가합니다. #86838 (Bharat Nallan).
  • Delta Lake 메타데이터 파일용 system 테이블을 추가합니다. #87263 (scanhex12).

Table engines and storage

  • 테이블 엔진 Alias를 지원합니다. #76569 (RinChanNOW).
  • 이제 NATS 엔진에 대해 새로운 설정인 nats_streamnats_consumer를 지정하여 NATS JetStream을 사용해 메시지를 수신할 수 있습니다. #84799 (Dmitry Novikov).
  • 디스크 구성을 지원하는 Iceberg 및 Delta Lake 테이블을 사용할 수 있습니다. 이를 통해 기존 디스크에 사용자 테이블을 지정할 수 있습니다. Iceberg에서 사용할 수 있는 디스크를 지정하는 설정 allowed_disks_for_table_engines가 추가되었습니다. 예시: CREATE TABLE test ENGINE = Iceberg('path/inside/disk') SETTING datalake_disk_name = '<some_user_disk>'; ### 사용자 대상 변경 사항에 대한 문서 항목입니다. #86778 (scanhex12).
  • 파트를 wide part로 생성하기 위한 최소 레벨을 지정할 수 있는 새로운 테이블 설정 min_level_for_wide_part가 추가되었습니다. #88179 (Christoph Wurm).

Iceberg 및 데이터 레이크

  • ClickHouse에서 Apache Paimon에 대한 쿼리 실행을 지원합니다. 이 통합을 통해 ClickHouse 사용자는 Paimon의 데이터 레이크 스토리지에 저장된 데이터를 직접 조회하고 상호 작용할 수 있습니다. #84423 (JIaQi).
  • Iceberg 테이블 엔진에서 ALTER UPDATE 명령을 지원합니다. #86059 (scanhex12).

인덱스와 통계

  • 긴 부분 문자열을 찾는 데 유용한 새로운 sparse_gram 블룸 필터 인덱스를 추가했습니다. #79985 (scanhex12).
  • MergeTree 테이블에서 모든 해당 컬럼에 대해 통계를 자동으로 생성하는 기능을 추가했습니다. 생성할 통계 유형을 쉼표로 구분해 저장하는 테이블 수준 설정 auto_statistics_types를 추가했습니다(예: auto_statistics_types = 'minmax, uniq, countmin'). #87241 (Anton Popov).

SQL 및 쿼리 기능

  • LIMIT BY ALL 구문을 지원합니다. GROUP BY ALL, ORDER BY ALL과 유사하게, LIMIT BY ALLSELECT 절의 비집계 표현식 전체를 자동으로 확장해 LIMIT BY 키로 사용합니다. 예를 들어, SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALLSELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name과 동일합니다. 이 기능은 선택된 비집계 컬럼 전체를 기준으로 제한해야 할 때 컬럼을 명시적으로 나열하지 않고도 쿼리를 단순화합니다. #59152 이슈를 해결합니다. #84079 (Surya Kant Ranjan).
  • 쿼리 설정에서 설정 이름만 단독으로 사용된 경우 1과 동일하게 취급합니다(예: SELECT ... SETTINGS use_query_cacheuse_query_cache = 1과 동일합니다). #85800 (thraeka).
  • 임시 테이블과 동일한 구문으로 임시 VIEW를 생성할 수 있습니다. #86432 (Aly Kafoury).
  • 음수 LIMIT 및 음수 OFFSET을 지원합니다. #28913 이슈를 해결합니다. #88411 (Nihal Z. Miaji).

클라이언트 및 CLI 기능

  • --login을 사용해 Cloud 자격 증명으로 ClickHouse Cloud 인스턴스에 액세스합니다. #82753 (Krishna Mannem).
  • 세미콜론이 새 줄이 아니라 마지막 줄에 오도록 쿼리를 서식 지정하는 --semicolons_inline 옵션을 추가합니다. #88018 (Jan Rada).

서버 구성 및 워크로드 관리

  • 새로운 구성 옵션인 logger.startupLevellogger.shutdownLevel을 사용하면 각각 ClickHouse 시작 및 종료 시 로그 레벨을 재정의할 수 있습니다. #85967 (Lennard Eijsackers).
  • 서버 구성의 「resources_and_workloads」 섹션을 사용하여 SQL에서 WORKLOADRESOURCE 정의를 제공할 수 있는 기능이 추가되었습니다. #87430 (Sergei Trifonov).

시스템 명령어

  • SYSTEM RECONNECT ZOOKEEPER 명령어가 추가되어 Zookeeper 연결을 강제로 끊었다가 다시 재연결할 수 있습니다(https://github.com/ClickHouse/ClickHouse/issues/87317). #87318 (Pradeep Chhetri).
  • 설정 max_named_collection_num_to_warnmax_named_collection_num_to_throw를 통해 named collection의 개수를 제한합니다. 새로운 메트릭 NamedCollection과 오류 TOO_MANY_NAMED_COLLECTIONS가 추가되었습니다. #87343 (Pablo Marcos).

Keeper

  • Keeper 클라이언트에 cp-cprmv-mvr 명령의 재귀(recursive) 버전을 추가했습니다. #88570 (Mikhail Artemenko).

실험적 기능

  • searchAllsearchAny 함수가 이제 텍스트 컬럼이 아닌 컬럼에서도 동작합니다. 이러한 경우 기본 토크나이저를 사용합니다. #87722 (Jimmy Aguilar Mena).
  • 비트 슬라이스(bit-sliced) 형식으로 벡터를 저장하는 QBit 데이터 타입과, 정밀도와 속도 간의 트레이드오프를 파라미터로 제어할 수 있는 근사 벡터 검색(approximate vector search)을 가능하게 하는 L2DistanceTransposed 함수를 구현했습니다. #87922 (Raufs Dunamalijevs).

성능 향상

쿼리 실행 및 최적화

  • Query Condition Cache(QCC)를 인덱스 분석과의 적용 순서 및 통합 방식을 리팩터링하여 쿼리 성능을 개선했습니다. 이제 QCC 필터링이 기본 키 및 스킵 인덱스 분석보다 먼저 적용되어 불필요한 인덱스 계산이 줄어듭니다. 인덱스 분석은 여러 개의 범위 필터를 지원하도록 확장되었으며, 필터링 결과는 QCC에 다시 저장됩니다. 이는 인덱스 분석이 실행 시간의 상당 부분을 차지하는 쿼리, 특히 스킵 인덱스(예: 벡터 인덱스나 역인덱스)에 크게 의존하는 쿼리를 상당히 빠르게 합니다. #82380 (Amos Bird).
  • 작은 쿼리를 더 빠르게 실행하기 위한 여러 가지 마이크로 최적화를 적용했습니다. #83096 (Raúl Marín).
  • 네이티브 프로토콜에서 로그와 프로파일 이벤트를 압축하도록 변경했습니다. 100개 이상의 레플리카가 있는 클러스터에서 비압축 프로파일 이벤트는 초당 1~10 MB를 사용하며, 느린 인터넷 연결에서는 진행 표시줄이 느리게 동작합니다. 이 변경으로 #82533 이슈가 해결되었습니다. #83586 (Alexey Milovidov).
  • func(primary_column) = 'xx', column in (xxx)와 같은 조건에 대한 PREWHERE 최적화를 개선했습니다. #85529 (李扬).
  • uuid로 필터링하는 system.tables에 대해 전체 스캔을 피하도록 했습니다(로그나 ZooKeeper 경로에서 UUID만 있는 경우에 유용할 수 있습니다). #88379 (Azat Khuzhin).

JOIN 최적화

  • 분리된 논리합(disjunction) JOIN 프레디케이트에 대한 푸시다운 로직을 제공합니다. 예를 들어 TPC-H Q7에서 두 테이블 n1, n2에 대한 조건 (n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE') 의 경우, 각 테이블에 대해 n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY' (n1용), n2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE' (n2용)와 같은 개별 부분 필터를 추출합니다. #84735 (Yarik Briukhovetskyi).
  • JOIN 재작성 기능을 구현했습니다. 1. 매치된 행 또는 매치되지 않은 행에 대해 필터 조건이 항상 false인 경우, LEFT ANY JOINRIGHT ANY JOINSEMI/ANTI JOIN 으로 변환합니다. 이 최적화는 새 설정 query_plan_convert_any_join_to_semi_or_anti_join 으로 제어합니다. 2. 한쪽에서 매치되지 않은 행에 대해 필터 조건이 항상 false인 경우, FULL ALL JOINLEFT ALL 또는 RIGHT ALL JOIN 으로 변환합니다. #86028 (Dmitry Novik).
  • 많은 미매칭 행이 존재하는 LEFT/RIGHT JOIN 의 경우 HashJoin 성능을 소폭 최적화했습니다. #86312 (Nikita Taranov).
  • JOIN 순서 재조정이 이제 통계를 사용합니다. allow_statistics_optimize = 1query_plan_optimize_join_order_limit = 10 으로 설정하여 기능을 활성화할 수 있습니다. #86822 (Han Fei).
  • JOIN 최적화 중 런타임 해시 테이블 통계 재계산을 건너뜁니다. 새로운 프로파일 이벤트 JoinOptimizeMicrosecondsQueryPlanOptimizeMicroseconds 를 추가했습니다. #87683 (Vladimir Cherkasov).
  • 일부 경우 더 나은 JOIN 성능을 위해 AddedColumns::appendFromBlock 을 인라인화했습니다. #88455 (Nikita Taranov).

문자열 및 함수 최적화

  • StringZilla 라이브러리를 사용하고, 가능한 경우 SIMD CPU 명령어를 활용하여 대소문자를 구분하는 문자열 검색(예: WHERE URL LIKE '%google%'와 같은 필터링 연산)의 성능을 향상했습니다. #84161 (Raúl Marín).
  • 새로운 기본 설정인 optimize_rewrite_like_perfect_affix를 사용하여 접두사 또는 접미사가 있는 LIKE 연산의 성능을 향상했습니다. #85920 (Guang Zhao).
  • tokens, hasAllTokens, hasAnyTokens 함수의 성능을 개선했습니다. #88416 (Anton Popov).

MergeTree 및 스토리지 최적화

  • MergeTree 테이블의 최상위 String 컬럼에 대해 선택적인 .size 서브컬럼 직렬화를 추가하여 압축을 개선하고 효율적인 서브컬럼 액세스를 가능하게 합니다. 직렬화 버전 제어 및 빈 문자열에 대한 표현식 최적화를 위한 새로운 MergeTree 설정을 도입합니다. #82850 (Amos Bird).
  • 테이블에 SimpleAggregateFunction(anyLast) 타입의 컬럼이 있을 때, AggregatingMergeTree 테이블에서 FINAL과 함께 SELECT를 수행할 경우 메모리 할당 및 메모리 복사를 줄입니다. #84428 (Duc Canh Le).
  • 경량한 삭제 실행 이후의 수직 병합 성능이 개선되었습니다. #86169 (Anton Popov).
  • 테이블에 많은 파트가 있는 빠른 쿼리의 성능을 개선했습니다 (MarkRangesdeque 대신 devector를 사용하도록 최적화). #86933 (Azat Khuzhin).
  • 조인 모드에서 패치 파트를 적용하는 성능이 개선되었습니다. #87094 (Anton Popov).
  • MergeTreeLazy 리더에서 마크를 캐시에 저장하도록 하고, 직접 IO를 피하도록 했습니다. #87989 (Nikita Taranov).
  • is_deleted 컬럼이 있는 ReplacingMergeTree 테이블에서 FINAL 절을 사용하는 SELECT 쿼리는, 기존 두 가지 최적화로 인한 병렬화 향상 덕분에 더 빠르게 실행됩니다. 1) 테이블의 파티션 중 단일 part만 있는 파티션에 대해 do_not_merge_across_partitions_select_final 최적화를 적용합니다. 2) 테이블의 나머지 선택된 범위를 교차/비교차(intersecting / non-intersecting)로 분할하고, FINAL 병합 변환을 통과해야 하는 범위를 교차 범위로만 제한합니다. #88090 (Shankar Iyer).

집계 및 GROUP BY 최적화

인덱스 및 텍스트 검색 최적화

  • 대부분이 자주 나타나지 않는 토큰으로 이루어진 문서에 대한 텍스트 인덱스 생성 성능을 개선했습니다. #87546 (Anton Popov).

데이터 레이크 최적화

  • Iceberg 데이터를 순차적으로 읽도록 최적화했습니다. #88454 (scanhex12).

내부 최적화

개선 사항

쿼리 최적화 및 실행

  • mannWhitneyUTest는 두 샘플이 모두 동일한 값만 포함하는 경우 더 이상 예외를 발생시키지 않습니다. 이제 SciPy와 일치하는 올바른 결과를 반환합니다. 이로써 다음 이슈가 해결되었습니다: #79814. #80009 (DeanNeaht).
  • 실험적인 조인 순서 최적화 기능이 추가되어, query_plan_optimize_join_order_limit 설정을 통해 제어하면서 성능 향상을 위해 JOIN 순서를 자동으로 재정렬할 수 있습니다. 조인 순서 최적화는 현재 제한적인 STATISTICS 지원만 제공하며, 주로 스토리지 엔진의 행 수 추정에 의존합니다. 보다 정교한 STATISTICS 수집 및 카디널리티 추정 기능은 향후 릴리스에서 추가될 예정입니다. 업그레이드 후 JOIN 쿼리에서 문제가 발생하는 경우, SET query_plan_use_new_logical_join_step = 0으로 설정하여 새 구현을 일시적으로 비활성화한 뒤, 조사를 위해 문제를 보고하면 됩니다. USING 절에서 식별자 해석에 대한 참고 사항: OUTER JOIN ... USING 절에서 통합(코얼레스) 컬럼을 해석하는 방식을 더 일관되게 변경했습니다. 이전에는 OUTER JOIN에서 USING 컬럼과 한정된 컬럼(a, t1.a, t2.a)을 모두 선택할 때, USING 컬럼이 잘못 t1.a로 해석되어 오른쪽 테이블에서 왼쪽과 매칭되지 않는 행에 대해 0/NULL이 표시되는 문제가 있었습니다. 이제 USING 절의 식별자는 항상 통합(코얼레스) 컬럼으로 해석되고, 한정된 식별자는 쿼리에 어떤 다른 식별자가 존재하는지와 관계없이 비(非) 통합 컬럼으로 해석됩니다. 예시는 다음과 같습니다: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- 이전: a=0, t1.a=0, t2.a=2 (잘못됨 - 'a'가 t1.a로 해석됨) -- 이후: a=2, t1.a=0, t2.a=2 (올바름 - 'a'가 통합된 값). #80848 (Vladimir Cherkasov).
  • 데이터 읽기 시 스킵 인덱스를 사용해 데이터 파트를 필터링함으로써 불필요한 인덱스 읽기를 줄이도록 지원합니다. 새 설정 use_skip_indexes_on_data_read로 제어되며(기본값 비활성화), #75774를 해결합니다. 또한 #81021과(와) 공유되는 일부 공통 기반 코드를 포함합니다. #81526 (Amos Bird).
  • Rewrite 디스크 객체 스토리지 트랜잭션은 메타데이터 트랜잭션이 커밋되면 기존 원격 블롭을 제거합니다. #81787 (Sema Checherinda).
  • S3 재시도 전략을 구성 가능하도록 하고, config XML 파일을 변경하면 S3 디스크 설정을 핫 리로드할 수 있도록 했습니다. #82642 (RinChanNOW).
  • 최적화 전후에 결과 타입의 LowCardinality 여부가 달라지는 경우, 중복된 동등 비교(equal) 표현식을 처리하는 최적화 패스를 수정했습니다. #82651 (Yakov Olkhovskiy).
  • 특수 컬럼을 사용하여 oneof의 일부가 존재하는지 여부를 나타낼 수 있습니다. #82885 (Ilya Golshtein).
  • 이제 새로운 Kafka 테이블 엔진에서 잘못된 설정을 지정한 경우 사용자에게 더 명확한 안내가 제공됩니다. #83701 (János Benjamin Antal).
  • HTTP 클라이언트가 Expect: 100-continue 헤더와 함께 X-ClickHouse-100-Continue: defer 헤더를 설정하면, ClickHouse는 QUOTA 검증이 통과된 이후까지 클라이언트에 100 Continue 응답을 보내지 않으므로, 어차피 폐기될 요청 본문을 전송하느라 네트워크 대역폭이 낭비되는 것을 방지합니다. 이는 쿼리를 URL 쿼리 문자열로 전송하고 데이터를 요청 본문으로 전송하는 INSERT 쿼리에 특히 해당합니다. 전체 본문을 보내지 않고 요청을 중단하면 HTTP/1.1에서 연결을 재사용할 수 없게 되지만, 새로운 연결을 여는 데 따른 추가 지연 시간은 일반적으로 대량의 데이터를 포함한 INSERT 수행 전체 시간에 비하면 무시할 수 있는 수준입니다. #84304 (c-end).
  • 더 이상 Time 타입에 대해 시간대를 지정할 수 없습니다. #84689 (Yarik Briukhovetskyi).
  • 여러 개의 시스템 테이블 쿼리를 실행하는 대신 system.completions를 사용하면 클라이언트 자동 완성 기능이 더 빠르고 일관되게 동작합니다. #84694 (|2ustam).
  • best_effort 형식으로 Time[64]를 파싱하는 관련 로직을 단순화하고 일부 버그가 발생하지 않도록 했습니다. #84730 (Yarik Briukhovetskyi).
  • 실행 시 오른쪽 서브트리에서 블룸 필터를 생성하고 이 필터를 왼쪽 서브트리의 스캔에 전달하여 일부 JOIN 쿼리의 실행 속도를 높입니다. 이는 SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'와 같은 쿼리에 유용할 수 있습니다. #84772 (Alexander Gololobov).
  • materialized view를 생성할 때 TO 뒤에 쿼리 매개변수를 사용할 수 있습니다. 예를 들면 다음과 같습니다: CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table. #84899 (Diskein).
  • S3 스토리지를 사용하는 DATABASE ENGINE = Backup에서 로그에 S3 자격 증명이 노출되지 않도록 마스킹합니다. #85336 (Kenny Sun).
  • jemalloc을 더 최신 버전으로 업데이트합니다. jemalloc의 내부 도구를 기반으로 메모리 할당 프로파일링을 개선합니다. 전역 jemalloc 프로파일러는 이제 설정 jemalloc_enable_global_profiler를 사용하여 활성화할 수 있습니다. 샘플링된 전역 메모리 할당 및 해제 정보는 설정 jemalloc_collect_global_profile_samples_in_trace_log을 활성화하면 JemallocSample 유형으로 system.trace_log에 저장할 수 있습니다. jemalloc 프로파일링은 이제 설정 jemalloc_enable_profiler를 사용하여 쿼리별로 독립적으로 활성화할 수 있습니다. system.trace_log에 샘플을 저장할지 여부는 설정 jemalloc_collect_profile_samples_in_trace_log를 사용하여 쿼리별로 제어할 수 있습니다. #85438 (Antonio Andelic).
  • deltaLakeAzureCluster 함수(클러스터에서 사용하는 deltaLakeAzure와 유사)와 deltaLakeS3Cluster(deltaLakeCluster의 별칭) 함수를 추가했습니다. #85358 이슈를 해결했습니다. #85547 (Smita Kulkarni).
  • InterpreterSystemQuery::dropReplicaImpl을 InterpreterSystemQuery::dropStorageReplica로 이름을 변경했습니다. - InterpreterSystemQuery::dropDatabaseReplica에서: - 데이터베이스 단위로 또는 전체 레플리카를 삭제할 때, 해당 데이터베이스의 각 테이블에 대해서도 레플리카를 삭제합니다. - 「WITH TABLES」가 지정되면, 각 storage에 대한 레플리카를 삭제합니다. - 그렇지 않으면 로직은 변경되지 않으며, 데이터베이스에 대해서만 DatabaseReplicated::dropReplica를 호출합니다. - Keeper 경로로 데이터베이스 레플리카를 삭제하는 경우: - 「WITH TABLES」가 지정되면: - 데이터베이스를 Atomic으로 복원합니다. - Keeper에 있는 statement를 기반으로 RMT 테이블을 복원합니다. - 데이터베이스를 삭제합니다(복원된 테이블도 함께 삭제됩니다). - 그렇지 않으면, 지정된 Keeper 경로에 대해서만 DatabaseReplicated::dropReplica를 호출합니다. #85637 (Tuan Pham Anh).
  • materialize 함수가 포함될 때 TTL 형식이 일관되지 않던 문제를 수정합니다. #82828 이슈를 해결합니다. #85749 (Alexey Milovidov).
  • 백업과 동일한 방식으로 일반 복사 작업에서도 azure_max_single_part_copy_size 설정을 적용합니다. #85767 (Ilya Golshtein).
  • S3 객체 스토리지에서 재시도 가능한 오류가 발생할 때 S3 클라이언트 스레드의 속도를 늦춥니다. 이에 따라 이전 설정인 backup_slow_all_threads_after_retryable_s3_error를 S3 디스크에도 확장하고, 보다 일반적인 이름인 s3_slow_all_threads_after_retryable_error로 변경합니다. #85918 (Julia Kartseva).
  • 설정 allow_experimental_variant/dynamic/json 및 enable_variant/dynamic/json을 사용 중단(폐기)된 것으로 표시했습니다. 이제 세 가지 타입 모두 조건 없이 활성화됩니다. #85934 (Pavel Kruglov).
  • S3(Azure)Queue 테이블 엔진을 개선하여 ZooKeeper 연결이 끊기더라도 중복이 발생하지 않고 계속 동작할 수 있도록 했습니다. 이를 위해 S3Queue 설정 use_persistent_processing_nodes를 활성화해야 합니다(ALTER TABLE MODIFY SETTING으로 변경 가능). #85995 (Kseniia Sumarokova).
  • Iceberg 테이블 상태는 더 이상 스토리지 객체에 저장되지 않습니다. 이로 인해 ClickHouse에서 Iceberg를 동시 쿼리 환경에서도 사용할 수 있게 되었습니다. #86062 (Daniil Ivanik).
  • query_condition_cache_selectivity_threshold 설정(기본값: 1.0)이 추가되어, 선택도가 낮은 프레디케이트의 스캔 결과를 query condition cache에 삽입하지 않도록 했습니다. 이를 통해 캐시 적중률이 다소 떨어지는 대신, query condition cache의 메모리 사용량을 줄일 수 있습니다. #86076 (zhongyuankai).
  • http_handlers에서 스키마와 host:port를 포함한 전체 URL 문자열(full_url 지시어)을 기준으로 필터링하는 기능을 지원합니다. #86155 (Azat Khuzhin).
  • Delta Lake 쓰기를 위한 실험적 설정 allow_experimental_delta_lake_writes를 추가했으며, 기본값은 비활성화되어 있습니다. #86180 (Kseniia Sumarokova).
  • init.d 스크립트에서 systemd 감지 로직을 수정하여 "Install packages" 체크를 올바르게 수행합니다. #86187 (Azat Khuzhin).
  • 새로운 startup_scripts_failure_reason 차원 메트릭을 추가합니다. 이 메트릭은 시작 스크립트가 실패하게 되는 서로 다른 오류 유형을 구분하는 데 필요합니다. 특히 알림 목적을 위해, 일시적 오류(예: MEMORY_LIMIT_EXCEEDED 또는 KEEPER_EXCEPTION)와 비일시적 오류를 구분해야 합니다. #86202 (Miсhael Stetsyuk).
  • Iceberg 쓰기 시 여러 데이터 파일을 생성합니다. #86275 (scanhex12).
  • Iceberg 쓰기 시 파티션 타입을 더 다양하게 지원합니다. 이로써 #86206이(가) 해결됩니다. #86298 (scanhex12).
  • Iceberg 테이블의 파티션에서 identity() 함수를 생략할 수 있도록 했습니다. #86314 (scanhex12).
  • 특정 채널에만 JSON 로깅을 활성화할 수 있는 기능이 추가되었습니다. 이 기능을 사용하려면 logger.formatting.channelsyslog/console/errorlog/log 중 하나로 설정합니다. #86331 (Azat Khuzhin).
  • Delta Lake에 삽입되는 데이터 파일에 대해 행/바이트 수 제한을 추가합니다. delta_lake_insert_max_rows_in_data_filedelta_lake_insert_max_bytes_in_data_file 설정으로 제어됩니다. #86357 (Kseniia Sumarokova).
  • WHERE에서 네이티브 숫자를 직접 사용할 수 있도록 허용합니다. 이 숫자들은 이미 논리 함수의 인수로 사용할 수 있습니다. 이를 통해 filter-push-down 및 move-to-prewhere 최적화가 단순화됩니다. #86390 (Nikolai Kochetov).
  • 메타데이터가 손상된 Catalog에 대해 SYSTEM DROP REPLICA를 실행했을 때 발생하던 오류를 수정했습니다. #86391 (Nikita Mikhaylov).
  • Azure에서 디스크 액세스 검사(skip_access_check=0)에 대해 추가 재시도를 수행하도록 했습니다. 액세스 프로비저닝에 상당한 시간이 걸릴 수 있기 때문입니다. #86419 (Alexander Tokmakov).
  • 설정 evaluation_time의 이름을 promql_evaluation_time으로 변경합니다. #86459 (Vitaly Baranov).
  • Iceberg DROP 시 파일을 삭제하도록 하는 설정입니다. #86211 이슈를 해결합니다. #86501 (scanhex12).
  • Iceberg 쓰기 시 메모리 사용량을 줄였습니다. #86544 (scanhex12).
  • today() FUNCTION의 대소문자를 구분하지 않도록 하여 NOW()와 같은 다른 날짜/시간 관련 FUNCTION과 일관되게 했습니다. #86561 (Kaviraj Kanagaraj).
  • timeSeries*() 함수에서 staleness 윈도우의 구간을 좌측 개방(left-open), 우측 폐쇄(right-closed)로 변경합니다. #86588 (Vitaly Baranov).
  • FailedInternal*Query 프로파일링 이벤트를 추가했습니다. #86627 (Shane Andrade).
  • use_persistent_processing_nodes = 1인 경우의 processing 노드와 유사하게, S3Queue ordered 모드에서의 버킷 락을 지속 모드로 변경합니다. 테스트에 Keeper 오류 주입을 추가합니다. #86628 (Kseniia Sumarokova).
  • 구성 파일을 통해 추가될 때 이름에 점(.)이 포함된 사용자에 대한 처리 방식을 수정했습니다. #86633 (Mikhail Koviazin).
  • 쿼리의 메모리 사용량을 위한 비동기 메트릭(QueriesMemoryUsageQueriesPeakMemoryUsage)을 추가했습니다. #86669 (Azat Khuzhin).
  • clickhouse-benchmark --precise 플래그를 사용하면 QPS 및 기타 구간별 메트릭을 더 정밀하게 보고할 수 있습니다. 이 플래그는 쿼리 실행 시간이 보고 간격 --delay D와 비슷한 경우에도 일관된 QPS를 유지하는 데 도움이 됩니다. #86684 (Sergei Trifonov).
  • 일부 Linux 스레드(merge/mutate, 쿼리, materialized view, zookeeper 클라이언트)에 더 높거나 낮은 우선순위를 부여할 수 있도록 nice 값을 구성 가능하도록 했습니다. #86703 (Miсhael Stetsyuk).
  • 경쟁 상태(race condition)로 인해 multipart 업로드에서 원래 예외가 손실될 때 발생하는, 오해의 소지가 있는 「specified upload does not exist」 오류를 수정합니다. #86725 (Julia Kartseva).
  • EXPLAIN 쿼리에서 쿼리 플랜 설명을 제한합니다. EXPLAIN이 아닌 쿼리에는 이 설명을 계산하지 않습니다. 새 설정 query_plan_max_step_description_length가 추가되었습니다. #86741 (Nikolai Kochetov).
  • query_profiler_real_time_period_ns/query_profiler_cpu_time_period_ns와 같은 쿼리 프로파일러에서 발생하는 CANNOT&#95;CREATE&#95;TIMER 문제를 완화할 수 있도록, 보류 중인 시그널을 튜닝할 수 있는 기능을 추가했습니다. 또한 자체 진단을 위해 /proc/self/status에서 SigQ를 수집하도록 했습니다 (ProcessSignalQueueSizeProcessSignalQueueLimit에 근접하면 CANNOT_CREATE_TIMER 오류가 발생할 가능성이 높습니다). #86760 (Azat Khuzhin).
  • 데이터 레이크용 분산 insert/select. #86783 (scanhex12).
  • Keeper에서 RemoveRecursive 요청 처리 성능을 향상했습니다. #86789 (Antonio Andelic).
  • JSON 타입으로 출력할 때 PrettyJSONEachRow에서 불필요한 공백을 제거했습니다. #86819 (Pavel Kruglov).
  • 레플리카 중복 제거 윈도우를 최대 10,000까지 확장했습니다. #86820 (Sema Checherinda).
  • 이제 일반 재기록 가능 디스크에서 디렉터리를 제거할 때 prefix.path에 대한 blob 크기를 기록합니다. #86908 (alesapin).
  • yesterday() FUNCTION을 대소문자를 구분하지 않고 사용할 수 있도록 하고, today() FUNCTION과 동작을 일치시켰습니다. #86914 (Kaviraj Kanagaraj).
  • .xml 기반 성능 테스트를 ClickHouse Cloud를 포함한 원격 ClickHouse 인스턴스에서 실행할 수 있도록 지원합니다. 사용 예시: tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user <username> --password <password> --host <hostname> --port <port> --secure. #86995 (Raufs Dunamalijevs).
  • 상당한 양(>16MiB)의 메모리를 할당하는 것으로 알려진 정렬, 비동기 INSERT, file log 등의 일부 연산에서 메모리 제한을 준수하도록 했습니다. #87035 (Azat Khuzhin).
  • 쿼리에서 boolean이 아닌 설정 값이 적용되지 않는 문제를 방지합니다. #85800의 개선 사항입니다. #87084 (thraeka).
  • 형식 이름에 대한 힌트를 지원합니다. #86761 이슈를 해결합니다. #87092 (flynn).
  • 원격 레플리카에서는 프로젝션이 없으면 인덱스 분석을 수행하지 않습니다. #87096 (zoomxi).
  • network_compression_method 설정이 지원되는 일반 코덱이 아닌 값으로 되어 있으면 예외를 발생시킵니다. #87097 (Robert Schulze).
  • 시스템 테이블 system.query_cache는 이제 모든 쿼리 결과 캐시 엔트리를 반환하며, 이전에는 공유 엔트리 또는 동일한 USER와 역할에 대한 비공유 엔트리만 반환했습니다. 비공유 엔트리는 쿼리 결과를 노출하지 않도록 설계되어 있고, system.query_cache쿼리 문자열을 반환하므로 이는 문제가 되지 않습니다. 이로써 시스템 테이블의 동작이 system.query_log와 더 유사해졌습니다. #87104 (Robert Schulze).
  • arrowFlight() 테이블 함수에 인증 및 SSL 지원을 추가했습니다. #87120 (Vitaly Baranov).
  • AWS에서 지원하는 Intelligent Tiering을 지정할 수 있도록 storage_class_name이라는 새 매개변수를 S3 테이블 엔진과 s3 테이블 함수에 추가했습니다. 키-값 형식과 위치 기반(사용 중단 예정) 형식 모두를 지원합니다. #87122 (alesapin).
  • ytsaurus 테이블에서 utf8 인코딩을 비활성화할 수 있도록 했습니다. #87150 (MikhailBurdukov).
  • 데이터 레이크 디스크용 Azure 지원을 추가했습니다. #87173 (scanhex12).
  • 딕셔너리 압축을 제어하기 위한 새 dictionary_block_frontcoding_compression 텍스트 인덱스 파라미터를 추가합니다. 기본값은 front-coding 압축을 사용하도록 설정되어 있습니다. #87175 (Elmi Ahmadov).
  • parseDateTime 함수에 대해 단락 평가를 활성화합니다. #87184 (Pavel Kruglov).
  • alter table ... materialize statistics all를 지원하여 테이블의 모든 통계를 구체화할 수 있도록 했습니다. #87197 (Han Fei).
  • s3_slow_all_threads_after_retryable_error 설정이 기본적으로 비활성화되도록 했습니다. #87198 (Nikita Mikhaylov).
  • 새로운 system.aggregated_zookeeper_log 테이블을 추가합니다. 이 테이블에는 세션 ID, 상위 경로, 연산 유형별로 그룹화된 ZooKeeper 연산의 통계(예: 연산 수, 평균 지연 시간, 오류)가 포함되며, 주기적으로 디스크에 기록됩니다. #87208 (Miсhael Stetsyuk).
  • 테이블 함수 arrowflight의 이름을 arrowFlight로 변경합니다. #87249 (Vitaly Baranov).
  • clickhouse-benchmark에서 CLI 플래그에 _ 대신 -를 사용할 수 있도록 변경했습니다. #87251 (Ahmed Gouda).
  • 세션 설정을 추가하여 INSERT 시 구체화에서 제외할 skip 인덱스 목록을 지정할 수 있도록 했습니다 (exclude_materialize_skip_indexes_on_insert). 머지 작업 동안 구체화에서 제외할 skip 인덱스 목록을 지정하는 MergeTree 테이블 설정을 추가했습니다 (exclude_materialize_skip_indexes_on_merge). #87252 (George Larionov).
  • 시그널 처리 중 system.crash_log로의 플러시(flush)를 동기적으로 수행하도록 했습니다. #87253 (Miсhael Stetsyuk).
  • system.parts_columns 테이블에 새 컬럼 statistics를 추가합니다. #87259 (Han Fei).
  • ORDER BY 절이 없는 최상위 SELECT 쿼리에 ORDER BY rand()를 주입하는 설정 inject_random_order_for_select_without_order_by가 추가되었습니다. #87261 (Rui Zhang).
  • Iceberg 쓰기에서 다른 포맷(ORC, Avro)을 지원합니다. 이를 통해 #86179 이슈가 해결되었습니다. #87277 (scanhex12).
  • join_keys의 개수와 right_table_keys의 개수가 같지 않음을 정확하게 알리도록 joinGet 오류 메시지를 개선했습니다. #87279 (Isak Ellmer).
  • min_insert_block_size_rows_for_materialized_viewsmin_insert_block_size_bytes_for_materialized_views 설정에 따라 모든 스레드에서 오는 데이터를 materialized view에 삽입하기 전에 먼저 병합합니다. 이전에는 parallel_view_processing이 활성화된 경우, 특정 materialized view에 삽입하는 각 스레드가 데이터를 독립적으로 병합하여 생성되는 파트 수가 더 많아질 수 있었습니다. #87280 (Antonio Andelic).
  • 이 패치는 쓰기 트랜잭션 중 임의의 Keeper 노드의 상태(stat)를 확인할 수 있는 기능을 추가합니다. 이는 ABA 문제를 감지하는 데 도움이 됩니다. #87282 (Mikhail Artemenko).
  • 부하가 큰 ytsaurus 요청을 고부하용 프록시로 리디렉션합니다. #87342 (MikhailBurdukov).
  • 이 패치는 디스크 트랜잭션의 메타데이터에 대해 모든 워크로드에서 unlink/rename/removeRecursive/removeDirectory 등 연산의 롤백과 하드링크 개수 처리를 수정하고, 인터페이스를 보다 범용적이고 단순하게 만들어 다른 메타 스토어에서도 재사용할 수 있도록 합니다. #87358 (Mikhail Artemenko).
  • Keeper에서 TCP_NODELAY를 비활성화할 수 있는 keeper_server.tcp_nodelay 구성 파라미터가 추가되었습니다. #87363 (Copilot).
  • clickhouse-benchmarks에서 --connection을 지원합니다. 이는 clickhouse-client에서 지원하는 것과 동일하며, 명령줄 인수로 사용자/비밀번호를 명시적으로 지정하지 않기 위해 클라이언트 config.xml/config.yamlconnections_credentials 경로 아래에 미리 정의된 연결 정보를 지정할 수 있습니다. clickhouse-benchmark--accept-invalid-certificate 지원을 추가합니다. #87370 (Azat Khuzhin).
  • 이제 Iceberg 테이블에도 max_insert_threads 설정이 적용됩니다. #87407 (alesapin).
  • PrometheusMetricsWriter에 히스토그램 및 차원 메트릭을 추가합니다. 이렇게 하면 PrometheusRequestHandler가 모든 필수 메트릭을 포함하게 되어 Cloud 환경에서 신뢰성이 높고 오버헤드가 낮은 메트릭 수집에 사용할 수 있습니다. #87521 (Miсhael Stetsyuk).
  • hasToken FUNCTION은 이제 빈 토큰에 대해 일치 항목을 0개 반환합니다(이전에는 예외를 던졌습니다). #87564 (Jimmy Aguilar Mena).
  • ArrayMap (mapKeysmapValues) 값에 대한 텍스트 인덱스 지원을 추가했습니다. 지원되는 함수는 mapContainsKeyhas입니다. #87602 (Elmi Ahmadov).
  • 만료된 전역 ZooKeeper 세션 수를 나타내는 새 ZooKeeperSessionExpired 메트릭을 추가했습니다. #87613 (Miсhael Stetsyuk).
  • 서버 측(네이티브)에서 백업 대상지로 복사할 때는 백업 전용 설정(예: backup_slow_all_threads_after_retryable_s3_error)이 적용된 S3 스토리지 클라이언트를 사용합니다. s3_slow_all_threads_after_retryable_error 설정은 더 이상 사용되지 않습니다. #87660 (Julia Kartseva).
  • 실험적 기능인 make_distributed_plan을 사용할 때 쿼리 플랜 직렬화 과정에서 설정 max_joined_block_size_rowsmax_joined_block_size_bytes가 잘못 처리되던 문제를 수정합니다. #87675 (Vladimir Cherkasov).
  • enable_http_compression 설정이 이제 기본값으로 활성화되었습니다. 이는 클라이언트가 HTTP 압축을 지원하면 서버가 이를 사용하게 됨을 의미합니다. 그러나 이 변경에는 몇 가지 단점이 있습니다. 클라이언트가 bzip2와 같이 지나치게 무거운 압축 방식을 요청할 수 있는데, 이는 비합리적이며 서버의 리소스 사용량을 증가시킵니다(다만 큰 결과를 전송할 때만 눈에 띕니다). 클라이언트가 gzip을 요청할 수도 있는데, 이는 그리 나쁜 선택은 아니지만 zstd에 비해 최적의 선택은 아닙니다. #71591 이슈를 종료합니다. #87703 (Alexey Milovidov).
  • ClickHouse가 연결할 수 있는 [Zoo]Keeper 호스트 목록을 확인할 수 있는 새로운 설정 keeper_hosts가 추가되었습니다. #87718 (Nikita Mikhaylov).
  • ALTER TABLE REWRITE PARTS를 추가합니다. 이 명령은 테이블의 파트들을 처음부터 다시 작성하여 모든 새 설정을 사용합니다(예: use_const_adaptive_granularity와 같이 일부 설정은 새로 생성되는 파트에만 적용되기 때문입니다). #87774 (Azat Khuzhin).
  • 과거 기록 분석을 보다 쉽게 할 수 있도록 시스템 대시보드에 fromto 값을 추가했습니다. #87823 (Mikhail f. Shiryaev).
  • Iceberg SELECT에서 성능 추적을 위한 정보를 추가했습니다. #87903 (Daniil Ivanik).
  • joined_block_split_single_row라는 새로운 설정을 추가하여, 키당 일치하는 항목이 많은 해시 조인(hash join)에서 메모리 사용량을 줄입니다. 이 설정을 사용하면 왼쪽 테이블의 단일 행에 대한 일치 결과 내부에서도 해시 조인 결과를 청크로 분할할 수 있으며, 이는 왼쪽 테이블의 하나의 행이 오른쪽 테이블의 수천 또는 수백만 개의 행과 일치하는 경우에 특히 유용합니다. 이전에는 모든 일치 결과를 메모리에 한 번에 구체화해야 했습니다. 이로 인해 최대 메모리 사용량은 줄어들지만 CPU 사용량은 증가할 수 있습니다. #87913 (Vladimir Cherkasov).
  • 파일시스템 캐시 개선: 여러 스레드가 캐시 공간을 동시에 예약할 때 캐시 우선순위 이터레이터를 재사용하도록 했습니다. #87914 (Kseniia Sumarokova).
  • Keeper 요청 크기를 제한할 수 있는 기능을 추가했습니다 (ZooKeeperjute.maxbuffer와 동일한 max_request_size 설정으로, 이전 버전과의 호환성을 위해 기본값은 OFF이며, 향후 릴리스에서 기본값이 설정될 예정입니다). #87952 (Azat Khuzhin).
  • clickhouse-benchmark에서 기본적으로 오류 메시지에 스택 트레이스를 포함하지 않도록 수정했습니다. #87954 (Ahmed Gouda).
  • 마크가 캐시에 있을 때는 스레드 풀 비동기 마크 로딩(load_marks_asynchronously=1)을 사용하지 마십시오(스레드 풀이 과부하 상태일 수 있고, 마크가 이미 캐시에 있더라도 쿼리에 추가 오버헤드 비용이 발생할 수 있기 때문입니다). #87967 (Azat Khuzhin).
  • Ytsaurus: 컬럼의 부분집합만 포함하는 테이블, table function 및 dictionary를 생성할 수 있도록 했습니다. #87982 (MikhailBurdukov).
  • 이제 system.zookeeper_connection_log가 기본값으로 활성화되며, Keeper 세션에 대한 정보를 얻는 데 사용할 수 있습니다. #88011 (János Benjamin Antal).
  • 중복된 외부 테이블이 전달될 때 TCP와 HTTP 동작이 일관되게 동작하도록 수정했습니다. HTTP에서는 임시 테이블을 여러 번 전달할 수 있습니다. #88032 (Sema Checherinda).
  • Arrow/ORC/Parquet를 읽을 때 사용하던 커스텀 MemoryPool들을 제거합니다. https://github.com/ClickHouse/ClickHouse/pull/84082 이후에는 모든 메모리 할당을 추적하므로, 이 구성 요소는 더 이상 필요하지 않은 것으로 보입니다. #88035 (Nikita Mikhaylov).
  • 인자 없이 Replicated 데이터베이스를 생성할 수 있도록 허용합니다. #88044 (Pervakov Grigorii).
  • clickhouse-keeper의 TLS 포트에 대한 연결을 지원하도록 하고, 플래그 이름은 clickhouse-client와 동일하게 유지했습니다. #88065 (Pradeep Chhetri).
  • 메모리 한도 초과로 인해 백그라운드 머지가 거부된 횟수를 추적하기 위한 새로운 프로파일 이벤트를 추가했습니다. #88084 (Grant Holly).
  • 새로운 시퀀스에 대해 사용자 지정 시작값을 설정할 수 있도록 generateSerialID 함수에 선택적 start_value 매개변수를 추가했습니다. #88085 (Manuel).
  • CREATE/ALTER TABLE 구문에서 컬럼 기본값 표현식을 검증하는 analyzer를 활성화합니다. #88087 (Max Justus Spransy).
  • 내부 쿼리 계획 개선: CROSS JOINJoinStepLogical 사용. #88151 (Vladimir Cherkasov).
  • 연산자 IS NOT DISTINCT FROM (<=>)가 완전히 지원됩니다. #88155 (simonmichal).
  • 글로벌 샘플링 프로파일러를 기본적으로 활성화합니다. CPU 시간과 실제 시간 기준으로 10초마다 모든 스레드의 스택 트레이스를 수집합니다. #88209 (Alexander Tokmakov).
  • Alias 엔진을 사용하는 테이블에서 EXCHANGE TABLES 연산 지원이 수정되었습니다. 이제 해당 엔진은 대상 테이블을 상수 storage id 대신 데이터베이스 이름과 테이블 이름으로 저장하여, 테이블 교환 이후에도 대상 테이블을 올바르게 해석할 수 있습니다. #88233 (Kai Zhu).
  • 임시 파일 작성기(writer)용 버퍼 크기를 제어하기 위한 temporary_files_buffer_size 설정을 추가합니다. * LowCardinality 컬럼에 대해 scatter 연산(예: Grace hash join에서 사용)을 최적화하여 메모리 사용을 개선합니다. #88237 (Vladimir Cherkasov).
  • 병렬 레플리카 환경에서 텍스트 인덱스를 직접 읽는 기능을 추가했습니다. 객체 스토리지에서 텍스트 인덱스를 읽을 때의 성능을 개선했습니다. #88262 (Anton Popov).
  • 이제 generateSerialID FUNCTION이 시리즈 이름을 나타내는 non-constant(비상수) 인자도 지원합니다. #83750 이슈를 해결합니다. #88270 (Alexey Milovidov).
  • 분산 처리를 위한 Datalakes 카탈로그용 데이터베이스. #88273 (scanhex12).
  • 복사 및 컨테이너 생성 기능에서 발생하는 'Content-Length' 문제에 대한 수정 사항을 포함하도록 Azure SDK를 업데이트합니다. #88278 (Smita Kulkarni).
  • MySQL과의 호환성을 위해 lag 함수가 대소문자를 구분하지 않도록 변경했습니다. #88322 (Lonny Kapelushnik).
  • keeper_server.coordination_settings.check_node_acl_on_remove 설정을 추가합니다. 이 설정을 활성화하면 각 노드를 삭제하기 전에 해당 노드와 상위 노드의 ACL이 모두 검증됩니다. 비활성화된 경우에는 상위 노드의 ACL만 검증됩니다. #88513 (Antonio Andelic).
  • Vertical 포맷을 사용할 때 JSON 컬럼이 이제 가독성이 좋게 포매팅되어 출력됩니다. #81794 이슈를 종료합니다. #88524 (Frank Rosner).
  • clickhouse-client 파일(예: 쿼리 이력)을 홈 디렉터리의 루트가 아니라 XDG Base Directories 명세에서 정의하는 경로에 저장합니다. ~/.clickhouse-client-history 파일이 이미 존재하면 계속 해당 파일을 사용합니다. #88538 (Konstantin Bogdanov).
  • GLOBAL IN으로 인한 메모리 누수 문제를 수정합니다(https://github.com/ClickHouse/ClickHouse/issues/88615). #88617 (pranav mehta).
  • String 타입 입력을 허용하도록 hasAny/hasAllTokens에 오버로드를 추가했습니다. #88679 (George Larionov).
  • 이 패치 적용 후에는 휴리스틱 to_remove_small_parts_at_right가 머지 범위 점수를 계산하기 전에 실행됩니다. 이전에는 머지 셀렉터가 범위가 넓은 머지를 선택한 뒤 그 끝부분을 필터링했습니다. 수정: #85374. #88736 (Mikhail Artemenko).
  • 부팅 시 자동 시작되도록 clickhouse-keeper의 postinstall 스크립트에 단계를 추가했습니다. #88746 (YenchangChan).
  • Web UI에서 자격 증명 검증을 모든 키 입력 시마다가 아니라 붙여넣기 시점에만 수행하도록 변경했습니다. 이를 통해 잘못 구성된 LDAP 서버에서 발생하는 문제를 방지합니다. #85777을(를) 해결했습니다. #88769 (Alexey Milovidov).
  • 제한 조건 위반 시 예외 메시지의 길이를 제한합니다. 이전 버전에서는 매우 긴 문자열이 삽입될 경우 매우 긴 예외 메시지가 생성되어 query_log에 기록되는 문제가 있을 수 있었습니다. #87032를 해결합니다. #88801 (Alexey Milovidov).

버그 수정(공식 안정 버전에서 사용자에게 노출되는 오동작)

  • 복제 데이터베이스와 내부적으로 복제되는 테이블에서는 alter 쿼리의 결과를 이니시에이터 노드에서만 검증합니다. 이를 통해 이미 커밋된 alter 쿼리가 다른 노드에서 멈춰 버리던 상황이 해결됩니다. #83849 (János Benjamin Antal).
  • BackgroundSchedulePool에서 각 유형의 태스크 수를 제한합니다. 한 유형의 태스크가 모든 슬롯을 차지하여 다른 태스크가 실행되지 못하는 상황을 방지합니다. 또한 태스크가 서로를 기다리다가 교착 상태에 빠지는 상황도 방지합니다. 이는 background_schedule_pool_max_parallel_tasks_per_type_ratio 서버 설정으로 제어됩니다. #84008 (Alexander Tokmakov).
  • GeoParquet로 인해 발생하던 클라이언트 프로토콜 오류를 수정했습니다. #84020 (Michael Kolupaev).
  • initiator 노드의 서브쿼리에서 shardNum()과 같은 호스트 종속 함수를 올바르게 해석하지 못하던 문제를 수정합니다. #84409 (Eduard Karacharov).
  • 데이터베이스 레플리카를 복구할 때 테이블이 올바르게 종료되도록 했습니다. 테이블이 제대로 종료되지 않으면 데이터베이스 레플리카 복구 중 일부 테이블 엔진에서 LOGICAL_ERROR가 발생할 수 있었습니다. #84744 (Antonio Andelic).
  • 데이터베이스 이름에 대한 오타 교정 힌트를 생성할 때 액세스 권한을 확인하도록 했습니다. #85371 (Dmitry Novik).
  • parseDateTime64BestEffort, change{Year,Month,Day}, makeDateTime64와 같은 여러 날짜/시간 관련 함수에서 epoch 이전 날짜의 소수 초 부분을 잘못 처리하던 문제를 수정했습니다. 이전에는 초 단위에서 소수 초를 더하는 대신 빼고 있었습니다. 예를 들어 parseDateTime64BestEffort('1969-01-01 00:00:00.468') 호출 결과가 1969-01-01 00:00:00.468가 아니라 1968-12-31 23:59:59.532를 반환하고 있었습니다. #85396 (xiaohuanlin).
    1. hive 컬럼에 LowCardinality 적용 2. 가상 컬럼보다 먼저 hive 컬럼을 채움(https://github.com/ClickHouse/ClickHouse/pull/81040에 필요) 3. hive에 대해 빈 포맷 사용 시 LOGICAL_ERROR 발생 #85528 4. hive 파티션 컬럼만 존재하는지 확인하는 검사 로직 수정 5. 모든 hive 컬럼이 스키마에 지정되어 있는지 검증 6. hive와 함께 사용하는 parallel_replicas_cluster에 대한 부분적 수정 7. hive utils의 extractkeyValuePairs에서 순서가 있는 컨테이너 사용(https://github.com/ClickHouse/ClickHouse/pull/81040에 필요). #85538 (Arthur Passos).
  • 배열 매핑을 사용할 때 오류가 발생하곤 했던 IN 함수 첫 번째 인자의 불필요한 최적화를 방지하도록 했습니다. #85546 (Yakov Olkhovskiy).
  • iceberg 소스 ID와 Parquet 이름 간의 매핑이 Parquet 파일이 작성될 때 스키마에 맞게 조정되지 않았습니다. 이 PR은 현재 스키마가 아니라 각 iceberg 데이터 파일에 해당하는 스키마를 처리합니다. #85829 (Daniil Ivanik).
  • 파일 크기를 읽는 동작을 파일을 여는 동작과 분리하도록 수정했습니다. 이는 5.10 릴리스 이전의 Linux 커널 버그에 대응해 도입된 https://github.com/ClickHouse/ClickHouse/pull/33372와 관련이 있습니다. #85837 (Konstantin Bogdanov).
  • ClickHouse Keeper는 이제 커널 수준에서 IPv6가 비활성화된 시스템(예: ipv6.disable=1이 설정된 RHEL)에서도 더 이상 시작에 실패하지 않습니다. 초기 IPv6 리스너를 시작하는 데 실패하면 IPv4 리스너로 폴백을 시도합니다. #85901 (jskong1124).
  • 이 PR은 #77990 이슈를 닫습니다. globalJoin에서 병렬 레플리카를 위한 TableFunctionRemote 지원을 추가했습니다. #85929 (zoomxi).
  • OrcSchemaReader::initializeIfNeeded()에서 null 포인터 문제를 수정합니다. 이 PR은 다음 이슈를 해결합니다: #85292. #85951 (yanglongwei).
  • FROM 절에서 상관 서브쿼리가 외부 쿼리의 컬럼을 사용하는 경우에만 허용되도록 검사 로직을 추가했습니다. #85469를 수정했습니다. #85402를 수정했습니다. #85966 (Dmitry Novik).
  • 다른 컬럼의 구체화된 표현식에서 사용되는 서브컬럼을 포함하는 컬럼에 대한 ALTER UPDATE 동작을 수정했습니다. 이전에는 표현식에 서브컬럼이 포함된 구체화된 컬럼이 정상적으로 업데이트되지 않았습니다. #85985 (Pavel Kruglov).
  • 기본 키(PK)나 파티션 표현식에 서브컬럼이 사용되고 있는 컬럼은 변경할 수 없도록 했습니다. #86005 (Pavel Kruglov).
  • 같은 ALTER 문 내에서 컬럼 상태가 변경될 때 ALTER COLUMN IF EXISTS 명령이 실패하던 문제를 수정했습니다. 이제 DROP COLUMN IF EXISTS, MODIFY COLUMN IF EXISTS, COMMENT COLUMN IF EXISTS, RENAME COLUMN IF EXISTS와 같은 명령이, 동일한 ALTER 문 내에서 이전 명령에 의해 컬럼이 삭제되는 경우를 올바르게 처리합니다. #86046 (xiaohuanlin).
  • DeltaLake 스토리지에서 기본이 아닌 컬럼 매핑 모드일 때 서브컬럼을 읽지 못하던 문제를 수정했습니다. #86064 (Kseniia Sumarokova).
  • JSON 내부에서 Enum 힌트가 있는 path에 대해 잘못된 기본값이 사용되던 문제를 수정합니다. #86065 (Pavel Kruglov).
  • 입력값을 정제하여 DataLake hive catalog URL을 파싱합니다. #86018 이슈를 해결합니다. #86092 (rajat mohan).
  • 파일 시스템 캐시 동적 리사이즈 중 발생하던 논리 오류를 수정합니다. #86122 이슈를 종료합니다. https://github.com/ClickHouse/clickhouse-core-incidents/issues/473 이슈를 종료합니다. #86130 (Kseniia Sumarokova).
  • DatabaseReplicatedSettings의 logs_to_keepNonZeroUInt64를 사용하도록 했습니다. #86142 (Tuan Pham Anh).
  • 테이블(예: ReplacingMergeTree)이 index_granularity_bytes = 0 설정으로 생성된 경우, skip 인덱스가 있는 FINAL 쿼리에서 예외가 발생했습니다. 이제 이 예외가 수정되었습니다. #86147 (Shankar Iyer).
  • UB(정의되지 않은 동작)을 제거하고 Iceberg 파티션 식 파싱 과정에서 발생하던 문제를 수정합니다. #86166 (Daniil Ivanik).
  • 지원 범위를 벗어난 날짜 값에 대해 Date/DateTime/DateTime64 타입을 추론하는 동작을 수정합니다. #86184 (Pavel Kruglov).
  • 하나의 INSERT에서 const 블록과 non-const 블록이 함께 사용될 때 발생하던 크래시를 수정했습니다. #86230 (Azat Khuzhin).
  • SQL에서 디스크를 생성할 때 /etc/metrika.xml에 정의된 include 지시문을 기본적으로 처리합니다. #86232 (alekar).
  • String에서 JSON으로 캐스팅할 때 accurateCastOrNull/accurateCastOrDefault의 동작을 수정합니다. #86240 (Pavel Kruglov).
  • Iceberg 엔진에서 경로에 '/'가 없는 디렉터리를 지원합니다. #86249 (scanhex12).
  • replaceRegex에서 FixedString 타입의 haystack과 빈 needle을 사용할 때 발생하던 크래시를 수정합니다. #86270 (Raúl Marín).
  • ALTER UPDATE Nullable(JSON) 실행 시 발생하던 충돌을 수정했습니다. #86281 (Pavel Kruglov).
  • system.tables에서 누락되어 있던 컬럼 정의자를 수정했습니다. #86295 (Raúl Marín).
  • LowCardinality(널 허용(T))에서 Dynamic으로의 형 변환을 수정합니다. #86365 (Pavel Kruglov).
  • DeltaLake에 대한 쓰기 작업 시 발생하던 논리 오류를 수정했습니다. 이 변경으로 #86175이(가) 종료됩니다. #86367 (Kseniia Sumarokova).
  • plain_rewritable 디스크에 대해 Azure Blob Storage에서 빈 blob을 읽을 때 발생하던 416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resource 오류를 수정합니다. #86400 (Julia Kartseva).
  • GROUP BY에서 널 허용(JSON) 처리 오류를 수정했습니다. #86410 (Pavel Kruglov).
  • Materialized View(MV) 관련 버그를 수정했습니다. 동일한 이름으로 MV를 CREATE한 뒤 DROP하고 다시 CREATE하는 경우, MV가 동작하지 않을 수 있었습니다. #86413 (Alexander Tokmakov).
  • *cluster functions에서 읽을 때 모든 레플리카를 사용할 수 없는 경우 실패하도록 했습니다. #86414 (Julian Maicher).
  • Buffer 테이블로 인해 발생하던 MergesMutationsMemoryTracking 누수를 수정하고, Kafka(및 기타 소스)에서의 스트리밍을 위한 query_views_log 동작을 수정했습니다. #86422 (Azat Khuzhin).
  • 별칭 스토리지의 참조 테이블을 드롭한 이후 SHOW TABLES 결과가 잘못 표시되던 문제를 수정합니다. #86433 (RinChanNOW).
  • send_chunk_header가 활성화된 상태에서 HTTP 프로토콜을 통해 UDF를 호출할 때 누락되던 청크 헤더가 전송되도록 수정했습니다. #86469 (Vladimir Cherkasov).
  • jemalloc 프로파일 플러시가 활성화된 경우 발생할 수 있는 잠재적인 교착 상태를 수정했습니다. #86473 (Azat Khuzhin).
  • DeltaLake 테이블 엔진에서 서브컬럼 읽기 기능을 수정합니다. #86204를 해결합니다. #86477 (Kseniia Sumarokova).
  • DDL 작업을 처리할 때 충돌이 발생하지 않도록 loopback host ID를 올바르게 처리하도록 수정:. #86479 (Tuan Pham Anh).
  • numeric/decimal 컬럼이 있는 PostgreSQL 데이터베이스 엔진 테이블의 detach/attach 동작을 수정합니다. #86480 (Julian Maicher).
  • getSubcolumnType에서 초기화되지 않은 메모리를 사용하는 버그를 수정했습니다. #86498 (Raúl Marín).
  • 이제 searchAnysearchAll 함수가 빈 needle 인자로 호출될 때 true(즉, 「모든 항목과 일치(matches everything)」)를 반환합니다. 이전에는 false를 반환했습니다(issue #86300). #86500 (Elmi Ahmadov).
  • 첫 번째 버킷에 값이 없을 때 timeSeriesResampleToGridWithStaleness() 함수가 올바르게 동작하도록 수정했습니다. #86507 (Vitaly Baranov).
  • merge_tree_min_read_task_size가 0으로 설정되어 있을 때 발생하던 크래시를 수정합니다. #86527 (yanglongwei).
  • 데이터를 읽을 때 각 데이터 파일의 포맷을 테이블 인수가 아니라 Iceberg 메타데이터에서 가져오도록 했습니다. #86529 (Daniil Ivanik).
  • AggregateFunction(quantileDD) 컬럼에 일부 유효한 사용자 제출 데이터가 병합 과정에서 무한 재귀를 일으켜 크래시가 발생하던 문제를 수정합니다. #86560 (Raphaël Thériault).
  • 크기가 0인 파트 파일이 포함된 쿼리에서 Backup 데이터베이스 엔진이 예외를 발생시키던 문제를 수정합니다. #86563 (Max Justus Spransy).
  • send_chunk_header가 활성화된 상태에서 UDF가 HTTP 프로토콜을 통해 호출될 때 청크 헤더가 누락되던 문제를 수정합니다. #86606 (Vladimir Cherkasov).
  • Keeper 세션 만료로 인해 발생한 S3Queue 논리 오류 「Expected current processor to be equal to 」를 수정했습니다. #86615 (Kseniia Sumarokova).
  • INSERT 및 프루닝(pruning) 시 Nullable 관련 버그를 수정했습니다. 이 변경으로 #86407이 해결됩니다. #86630 (scanhex12).
  • Iceberg 메타데이터 캐시가 비활성화된 경우 파일 시스템 캐시를 비활성화하지 마십시오. #86635 (Daniil Ivanik).
  • Parquet 리더 v3에서 발생하던 'Deadlock in Parquet::ReadManager (single-threaded)' 오류를 수정했습니다. #86644 (Michael Kolupaev).
  • ArrowFlight의 listen_host에서 IPv6 지원을 수정했습니다. #86664 (Vitaly Baranov).
  • ArrowFlight 핸들러의 종료(shutdown) 동작을 수정합니다. 이 PR은 #86596을(를) 해결합니다. #86665 (Vitaly Baranov).
  • describe_compact_output=1 설정 시 분산 쿼리가 올바르게 동작하지 않던 문제를 수정합니다. #86676 (Azat Khuzhin).
  • 윈도우 정의 파싱 및 쿼리 매개변수 적용을 수정합니다. #86720 (Azat Khuzhin).
  • PARTITION BY를 사용하지만 파티션 와일드카드를 사용하지 않고 테이블을 생성할 때 발생하던 예외 Partition strategy wildcard can not be used without a '_partition_id' wildcard.를 수정합니다. 이 동작은 25.8 이전 버전에서는 정상적으로 동작했습니다. https://github.com/ClickHouse/clickhouse-private/issues/37567 이슈를 해결합니다. #86748 (Kseniia Sumarokova).
  • 병렬 쿼리가 하나의 잠금을 획득하려고 할 때 발생하는 LogicalError를 수정합니다. #86751 (Pervakov Grigorii).
  • RowBinary 입력 형식에서 공유 JSON 데이터에 NULL이 기록되던 문제를 수정하고, ColumnObject에 대한 추가 검증을 도입했습니다. #86812 (Pavel Kruglov).
  • cluster table function으로 생성된 테이블에서 JSON/Dynamic 타입을 지원합니다. #86821 (Pavel Kruglov).
  • 비어 있는 TupleLIMIT을 사용하는 경우의 permutation 동작을 수정합니다. #86828 (Pavel Kruglov).
  • persistent processing 노드에 대해 전용 Keeper 노드를 사용하지 않습니다. https://github.com/ClickHouse/ClickHouse/pull/85995에 대한 수정입니다. #86406을(를) 해결합니다. #86841 (Kseniia Sumarokova).
  • TimeSeries 엔진 테이블로 인해 Replicated Database에서 새 레플리카를 생성하지 못하던 문제를 수정합니다. #86845 (Nikolay Degterinsky).
  • 일부 Keeper 노드가 누락된 작업이 있는 경우 system.distributed_ddl_queue 쿼리 동작을 수정합니다. #86848 (Antonio Andelic).
  • 압축 해제된 블록 끝으로 seek할 때의 동작을 수정합니다. #86906 (Pavel Kruglov).
  • Iceberg Iterator를 비동기 실행하는 동안 발생하는 예외를 처리합니다. #86932 (Daniil Ivanik).
  • 전처리된 대용량 XML 구성 저장 문제를 수정합니다. #86934 (c-end).
  • system.iceberg_metadata_log 테이블에서 date 필드가 채워지는 방식을 수정합니다. #86961 (Daniil Ivanik).
  • WHERE 절이 있는 TTL이 무한히 재계산되던 문제를 수정했습니다. #86965 (Anton Popov).
  • 쿼리에서 CTE로 계산된 FUNCTION 결과가 비결정적으로 평가되던 문제를 수정합니다. #86967 (Yakov Olkhovskiy).
  • 기본 키 컬럼에서 pointInPolygon 함수를 사용할 때 EXPLAIN에서 발생하던 LOGICAL_ERROR를 수정했습니다. #86971 (Michael Kolupaev).
  • ROLLUPCUBE 수정자를 사용할 때 uniqExact FUNCTION이 잘못된 결과를 반환할 수 있던 문제를 수정했습니다. #87014 (Nikita Taranov).
  • 이름에 퍼센트 인코딩된 시퀀스가 포함된 데이터 레이크 테이블을 수정합니다. #86626를 해결합니다. #87020 (Anton Ivashkin).
  • parallel_replicas_for_cluster_functions SETTING이 1로 설정된 경우 url() 테이블 FUNCTION에서 테이블 스키마를 해석하는 동작을 수정합니다. #87029 (Konstantin Bogdanov).
  • PREWHERE의 출력을 여러 단계로 나눈 후 올바르게 캐스팅되도록 수정했습니다. #87040 (Antonio Andelic).
  • ON CLUSTER 절을 사용하는 경량 업데이트를 수정했습니다. #87043 (Anton Popov).
  • 일부 집계 함수 상태와 String 인수 간의 호환성 문제를 수정합니다. #87049 (Pavel Kruglov).
  • optimize_functions_to_subcolumns가 활성화된 OUTER JOIN에서 널 허용 컬럼(nullable column)에 대한 IS NULL 동작이 잘못 처리되던 문제를 수정했습니다. #78625 이슈를 닫습니다. #87058 (Vladimir Cherkasov).
  • OpenAI의 모델 이름이 전파되지 않던 문제를 수정합니다. #87100 (Kaushik Iska).
  • EmbeddedRocksDB: 경로는 반드시 user_files 디렉터리 내부에 있어야 합니다. #87109 (Raúl Marín).
  • 25.1 이전에 생성된 KeeperMap 테이블에서 DROP 쿼리 실행 후에도 ZooKeeper에 데이터가 남아 있는 문제를 수정합니다. #87112 (Nikolay Degterinsky).
  • Parquet를 읽을 때 맵과 배열 필드 ID 처리 방식을 수정했습니다. #87136 (scanhex12).
  • 지연 구체화에서 배열 크기 서브컬럼이 있는 배열을 읽는 동작을 수정합니다. #87139 (Pavel Kruglov).
  • max_temporary_data_on_disk_size 제한 추적에서 임시 데이터 할당 해제량을 부정확하게 계산하던 문제를 수정하고, #87118 이슈를 해결했습니다. #87140 (JIaQi).
  • 이제 checkHeaders 함수가 제공된 헤더를 올바르게 검증하고 금지된 헤더를 거부합니다. 원 작성자: Michael Anastasakis (@michael-anastasakis). #87172 (Raúl Marín).
  • 모든 숫자형 타입에 대해 toDatetoDate32의 동작을 동일하게 합니다. int16에서 Date32로 캐스팅할 때 발생하던 Date32 언더플로우(underflow) 검사 문제를 수정합니다. #87176 (Pervakov Grigorii).
  • Dynamic 인수를 사용하는 CASE 함수를 수정하였습니다. #87177 (Pavel Kruglov).
  • 특히 LEFT/INNER 조인 뒤에 RIGHT 조인이 있는, 여러 조인을 포함한 쿼리에서 parallel replicas 기능을 사용할 때 발생하던 논리적 오류를 수정합니다. #87178 (Igor Nikonov).
  • 스키마 추론 캐시에서 input_format_try_infer_variants SETTING이 올바르게 반영되도록 수정했습니다. #87180 (Pavel Kruglov).
  • pathStartsWith가 접두사(prefix) 하위의 경로만 일치하도록 수정했습니다. #87181 (Raúl Marín).
  • CSV에서 값이 빈 문자열일 때 빈 배열을 읽는 문제를 수정합니다. #87182 (Pavel Kruglov).
  • 상관관계가 없는 EXISTS에서 잘못된 결과를 반환할 수 있던 문제를 수정했습니다. 이 문제는 https://github.com/ClickHouse/ClickHouse/pull/85481 에서 도입된 execute_exists_as_scalar_subquery=1 설정 때문에 발생했으며 25.8에 영향을 줍니다. #86415를 수정합니다. #87207 (Nikolai Kochetov).
  • _row_number 가상 컬럼과 Iceberg positioned delete 기능에서 발생하던 논리 오류를 수정했습니다. #87220 (Michael Kolupaev).
  • const 블록과 non-const 블록이 혼합된 경우 JOIN에서 발생하던 "Too large size passed to allocator" LOGICAL_ERROR를 수정했습니다. #87231 (Azat Khuzhin).
  • iceberg_metadata_log가 설정되지 않았는데 사용자가 디버그용 iceberg 메타데이터 정보를 가져오려고 하면 오류를 발생시키도록 하여, nullptr 접근 문제를 수정합니다. #87250 (Daniil Ivanik).
  • 다른 MergeTree 테이블을 읽는 서브쿼리를 사용하는 경량 업데이트의 문제를 수정했습니다. #87285 (Anton Popov).
  • ROW POLICY가 있는 경우 동작하지 않던 move-to-prewhere 최적화를 수정했습니다. #85118의 후속 작업입니다. #69777를 종료했습니다. #83748를 종료했습니다. #87303 (Nikolai Kochetov).
  • 데이터 파트에 존재하지 않는, 기본 표현식(default expression)을 가진 컬럼에 패치를 적용하는 기능을 수정했습니다. #87347 (Anton Popov).
  • EmbeddedRocksDB 업그레이드 문제를 수정했습니다. #87392 (Raúl Marín).
  • 객체 스토리지에 있는 텍스트 인덱스를 직접 읽는 기능을 수정했습니다. #87399 (Anton Popov).
  • 존재하지 않는 엔진에 대한 권한이 생성되지 않도록 했습니다. #87419 (Jitendra).
  • s3_plain_rewritable에 대해서는 not found 오류만 무시하도록 했습니다(이는 여러 가지 문제로 이어질 수 있습니다). #87426 (Azat Khuzhin).
  • YTSaurus 소스를 사용하는 *range_hashed 레이아웃 딕셔너리를 수정했습니다. #87490 (MikhailBurdukov).
  • 빈 튜플 배열 생성 문제를 수정했습니다. #87520 (Pavel Kruglov).
  • 임시 테이블 생성 시 허용되지 않는 컬럼이 있는지 확인합니다. #87524 (Pavel Kruglov).
  • Hive 파티션 컬럼을 포맷 헤더에 포함하지 않도록 했습니다. #87515를 수정했습니다. #87528 (Arthur Passos).
  • 텍스트 포맷을 사용할 때 DeltaLake에서 포맷 기반 읽기 준비가 제대로 이루어지지 않던 문제를 수정했습니다. #87529 (Pavel Kruglov).
  • Buffer 테이블에서 SELECT 및 INSERT 시 액세스 검증을 수정합니다. #87545 (pufit).
  • S3 테이블에 대해 데이터 스키핑 인덱스를 생성할 수 없도록 했습니다. #87554 (Bharat Nallan).
  • 비동기 로깅(async logging)에서 추적된 메모리가 누수되어 10시간 동안 약 100GiB 수준의 큰 편차가 발생할 수 있는 문제와, text_log에서 거의 동일한 수준의 편차가 발생할 수 있는 문제를 방지합니다. #87584 (Azat Khuzhin).
  • materialized view가 비동기적으로 삭제된 뒤 백그라운드 정리가 완료되기 전에 서버를 재시작한 경우, View 또는 materialized view의 SELECT 설정 때문에 전역 서버 설정이 덮어써질 수 있던 버그를 수정했습니다. #87603 (Alexander Tokmakov).
  • 메모리 과부하 경고를 산출할 때, 가능하다면 사용자 공간 페이지 캐시 바이트를 제외합니다. #87610 (Bharat Nallan).
  • CSV 역직렬화 과정에서 잘못된 타입 순서로 인해 LOGICAL_ERROR가 발생하던 버그를 수정했습니다. #87622 (Yarik Briukhovetskyi).
  • 실행 가능한 딕셔너리에 대해 command_read_timeout가 부적절하게 처리되던 문제를 수정했습니다. #87627 (Azat Khuzhin).
  • 새 분석기를 사용할 때 교체된 컬럼에 대해 필터링하는 경우 WHERE 절에서 잘못 동작하던 SELECT * REPLACE의 동작을 수정했습니다. #87630 (xiaohuanlin).
  • Distributed 위에서 Merge를 사용할 때의 2단계 집계 동작을 수정했습니다. #87687 (c-end).
  • HashJoin 알고리즘에서 오른쪽 행 목록이 사용되지 않을 때 출력 블록이 잘못 생성되던 문제를 수정합니다. #87401을(를) 해결합니다. #87699 (Dmitry Novik).
  • 인덱스 분석을 적용한 결과 읽을 데이터가 없을 때 병렬 레플리카 읽기 모드가 잘못 선택될 수 있습니다. #87653 이슈를 해결합니다. #87700 (zoomxi).
  • Glue에서 timestamptimestamptz 컬럼 처리 방식을 수정했습니다. #87733 (Andrey Zvonov).
  • 이 변경으로 #86587 이슈가 해결되었습니다. #87761 (scanhex12).
  • PostgreSQL 인터페이스에서 불리언(Boolean) 값이 기록되는 방식을 수정합니다. #87762 (Artem Yurov).
  • CTE가 포함된 INSERT SELECT 쿼리에서 「알 수 없는 테이블」 오류가 발생하던 문제를 수정합니다. #85368. #87789 (Guang Zhao).
  • Nullable 안에 포함될 수 없는 Variants에서 NULL 맵 서브컬럼을 읽는 동작을 수정했습니다. #87798 (Pavel Kruglov).
  • 클러스터의 보조 노드에서 데이터베이스를 완전히 삭제하지 못했을 때의 오류 처리를 수정했습니다. #87802 (Tuan Pham Anh).
  • 여러 개의 skip 인덱스 관련 버그를 수정했습니다. #87817 (Raúl Marín).
  • AzureBlobStorage에서 먼저 네이티브 복사를 시도하고, 'Unauthroized' 오류가 발생하면 읽기 및 쓰기 방식으로 동작하도록 업데이트했습니다(AzureBlobStorage에서 소스와 대상의 스토리지 계정이 서로 다른 경우 'Unauthorized' 오류가 발생합니다). 또한 구성에서 endpoint가 정의되어 있을 때 "use_native_copy"가 적용되지 않던 문제를 수정했습니다. #87826 (Smita Kulkarni).
  • ArrowStream 파일에 고유하지 않은 딕셔너리가 있으면 ClickHouse가 비정상 종료됩니다. #87863 (Ilya Golshtein).
  • 마지막 블록이 비어 있을 때 프로젝션이 있는 머지 작업을 수정했습니다. #87928 (Raúl Marín).
  • 인수 타입이 GROUP BY에서 허용되지 않을 때 injective 함수를 GROUP BY에서 제거하지 않도록 했습니다. #87958 (Pavel Kruglov).
  • 쿼리에서 session_timezone 설정을 사용할 때 datetime 기반 키에 대해 그래뉼/파티션 제거가 올바르게 수행되지 않던 문제를 수정했습니다. #87987 (Eduard Karacharov).
  • PostgreSQL 인터페이스에서 쿼리 실행 후 영향을 받은 행의 수를 반환합니다. #87990 (Artem Yurov).
  • 잘못된 결과가 발생할 수 있어 PASTE JOIN에서 필터 푸시다운 사용을 제한합니다. #88078 (Yarik Briukhovetskyi).
  • https://github.com/ClickHouse/ClickHouse/pull/84503에서 도입된 권한(grants) 검사에서 평가를 수행하기 전에 URI 정규화를 적용하도록 했습니다. #88089 (pufit).
  • 새로운 분석기에서 ARRAY JOIN COLUMNS()가 어느 컬럼과도 일치하지 않을 때 발생했던 논리 오류를 수정했습니다. #88091 (xiaohuanlin).
  • "High ClickHouse memory usage" 경고에서 페이지 캐시를 제외하도록 수정했습니다. #88092 (Azat Khuzhin).
  • TTL이 설정된 컬럼을 가진 MergeTree 테이블에서 발생할 수 있었던 데이터 손상 문제를 수정했습니다. #88095 (Anton Popov).
  • 빈 튜플 인수로 호출될 때 mortonEncodehilbertEncode 함수가 충돌하던 문제를 수정했습니다. #88110 (xiaohuanlin).
  • 이제 클러스터에 비활성 레플리카가 있는 경우 ON CLUSTER 쿼리에 소요되는 시간이 줄어듭니다. #88153 (alesapin).
  • 이제 DDL worker가 레플리카 Set에서 더 이상 사용되지 않는 호스트를 정리합니다. 이를 통해 ZooKeeper에 저장되는 메타데이터 양이 줄어듭니다. #88154 (alesapin).
  • 오류가 발생한 경우 디렉터리 이동 작업이 올바르게 롤백되도록 했습니다. 루트 객체만이 아니라 실행 중에 변경된 모든 prefix.path 객체를 다시 기록하도록 했습니다. #88198 (Mikhail Artemenko).
  • ColumnLowCardinality에서 is_shared 플래그 전파를 수정했습니다. 이로 인해 해시 값이 이미 사전에 계산되어 ReverseIndex에 캐시된 이후 컬럼에 새 값이 삽입되는 경우 GROUP BY 결과가 잘못될 수 있었습니다. #88213 (Nikita Taranov).
  • 워크로드 설정 max_cpu_share의 동작을 수정했습니다. 이제 max_cpus 워크로드 설정을 별도로 지정하지 않아도 이를 사용할 수 있습니다. #88217 (Neerav).
  • 서브쿼리를 사용하는 매우 대량의 뮤테이션이 준비 단계에서 멈춰 버리던 버그를 수정했습니다. 이제 이러한 뮤테이션을 SYSTEM STOP MERGES로 중지할 수 있습니다. #88241 (alesapin).
  • 이제 상관 서브쿼리를 객체 스토리지와 함께 사용할 수 있습니다. #88290 (alesapin).
  • system.projectionssystem.data_skipping_indices에 액세스하는 동안 DataLake 데이터베이스를 초기화하려는 시도를 방지합니다. #88330 (Azat Khuzhin).
  • 이제 데이터 레이크 카탈로그는 show_data_lake_catalogs_in_system_tables 설정을 명시적으로 활성화한 경우에만 시스템 인트로스펙션 테이블에 표시됩니다. #88341 (alesapin).
  • DatabaseReplicated가 interserver_http_host 설정을 따르도록 수정했습니다. #88378 (xiaohuanlin).
  • 위치 인수는 이제 프로젝션을 정의하는 단계에서 명시적으로 비활성화되며, 내부 쿼리 처리 단계에서는 의미가 없기 때문입니다. 이로써 #48604가 해결되었습니다. #88380 (Amos Bird).
  • countMatches FUNCTION의 제곱 시간 복잡도 문제를 수정했습니다. #88400을(를) 해결합니다. #88401 (Alexey Milovidov).
  • KeeperMap 테이블에 대한 ALTER COLUMN ... COMMENT 명령이 복제되어 Replicated 데이터베이스 메타데이터에 커밋되고 모든 레플리카로 전파되도록 합니다. #88077을(를) 해결합니다. #88408 (Eduard Karacharov).
  • Database Replicated에서 Materialized Views 간의 잘못된 순환 의존성으로 인해 새 레플리카를 데이터베이스에 추가할 수 없던 문제를 수정합니다. #88423 (Nikolay Degterinsky).
  • group_by_overflow_modeany로 설정된 경우 희소 컬럼의 집계 동작을 수정합니다. #88440 (Eduard Karacharov).
  • 여러 개의 FULL JOIN USING 절과 함께 query_plan_use_logical_join_step=0을 사용할 때 발생하던 「column not found」 오류를 수정합니다. 이 변경으로 #88103 이슈를 해결합니다. #88473 (Vladimir Cherkasov).
  • 노드 수가 10개를 초과하는 대규모 클러스터에서는 복구 시 다음 오류와 함께 실패할 확률이 높습니다: [941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again. num_hosts 노드는 여러 호스트에 의해 동시에 덮어써집니다. 이 수정에서는 재시도 횟수를 제어하는 설정을 동적으로 조정할 수 있도록 했습니다. #87721 이슈를 해결합니다. #88484 (Mikhail f. Shiryaev).
  • 이 PR은 23.8 및 그 이전 버전과의 호환성을 유지하기 위한 것입니다. 호환성 문제는 다음 PR에서 도입되었습니다: https://github.com/ClickHouse/ClickHouse/pull/54240
  • 큰 값을 DateTime으로 변환하는 동안 accurateCast 오류 메시지에서 UBSAN 정수 오버플로가 발생하는 문제를 수정합니다. #88520 (xiaohuanlin).
  • 튜플 타입용 coalescing MergeTree를 수정합니다. 이로써 #88469가 해결됩니다. #88526 (scanhex12).
  • iceberg_format_version=1에 대해 삭제를 허용하지 않습니다. 이로써 #88444가 해결됩니다. #88532 (scanhex12).
  • 이 패치는 임의 깊이의 폴더에 대한 plain-rewritable 디스크의 이동 연산을 수정합니다. #88586 (Mikhail Artemenko).
  • *cluster 함수에서 SQL SECURITY DEFINER가 올바르게 동작하지 않던 문제를 해결했습니다. #88588 (Julian Maicher).
  • 기저 const PREWHERE 컬럼의 동시 뮤테이션으로 인해 발생할 수 있는 잠재적인 크래시를 수정합니다. #88605 (Azat Khuzhin).
  • 텍스트 인덱스에서 데이터를 읽는 동작을 수정하고 쿼리 조건 캐시를 활성화했습니다(use_skip_indexes_on_data_readuse_query_condition_cache 설정이 활성화된 경우). #88660 (Anton Popov).
  • Poco::Net::HTTPChunkedStreamBuf::readFromDevice에서 Poco::TimeoutException 예외가 발생하면 프로세스가 SIGABRT로 비정상 종료됩니다. #88668 (Miсhael Stetsyuk).
  • 구성 재로딩 후 ClickHouse가 처음으로 연결되는 경우 system.zookeeper_connection_log에 로그가 추가되지 않던 문제를 수정합니다. #88728 (Antonio Andelic).
  • 시간대 사용 시 date_time_overflow_behavior = 'saturate' 설정으로 DateTime64를 Date로 변환하는 과정에서 범위를 벗어난 값에서 잘못된 결과가 반환되던 버그를 수정했습니다. #88737 (Manuel).
  • 캐시가 활성화된 S3 테이블 엔진에서 발생하는 "having zero bytes error"를 수정하기 위한 N번째 시도입니다. #88740 (Kseniia Sumarokova).
  • loop table function에 대한 SELECT 시 접근 권한 검증을 수정합니다. #88802 (pufit).
  • 비동기 로깅이 실패할 때 예외를 처리하여 프로그램이 비정상 종료되지 않도록 합니다. #88814 (Raúl Marín).