하위 호환되지 않는 변경 사항
- Parquet 출력 형식은 Date 및 DateTime 컬럼을 원시 숫자로 기록하는 대신 Parquet에서 지원하는 날짜/시간 타입으로 변환합니다. DateTime은 DateTime64(3)로 변경되며(이전: UInt32),
output_format_parquet_datetime_as_uint32설정을 사용하면 이전 동작으로 되돌릴 수 있습니다. Date는 Date32로 변경됩니다(이전: UInt16). #70950 (Michael Kolupaev). - 기본적으로 ORDER BY 및 비교 함수
less/greater/equal/etc에서는 JSON/Object/AggregateFunction과 같은 비교 가능 타입의 사용을 허용하지 않습니다. #73276 (Pavel Kruglov). JSONEachRowWithProgress는 진행 상황이 발생할 때마다 이를 기록합니다. 이전 버전에서는 결과의 각 블록 뒤에만 진행 상황이 표시되었기 때문에 사실상 쓸모가 없었습니다. 진행 상황 표시 방식이 변경되어 이제 0 값은 표시되지 않습니다. 진행 상황이 자주 발생하더라도 전송된다는 점에 유의하십시오. 이로 인해 상당한 양의 트래픽이 발생할 수 있습니다. 출력이 압축된 경우에는 진행 상황이 플러시되지 않는다는 점에도 유의하십시오. 이 변경으로 #70800이 해결되었습니다. #73834 (Alexey Milovidov).mysql딕셔너리 소스는 더 이상SHOW TABLE STATUS쿼리를 수행하지 않습니다. 최신 MySQL 버전에서는 InnoDB 테이블에 대해 이 쿼리가 아무런 유의미한 정보를 제공하지 않기 때문입니다. 이로써 #72636이 해결되었습니다. 이 변경은 하위 호환성에는 문제가 없지만, 알아차릴 수 있도록 이 범주에 포함했습니다. #73914 (Alexey Milovidov).Merge테이블은 각 테이블의 컬럼 union을 사용하고 공통 타입을 도출하여 기반 테이블의 구조를 통합합니다. 이로써 #64864가 해결됩니다. 이로써 #35307가 해결됩니다. 경우에 따라 이 변경은 이전 버전과 호환되지 않을 수 있습니다. 예를 들어 테이블 간 공통 타입은 없지만 여전히 첫 번째 테이블의 타입으로 변환할 수 있는 경우가 여기에 해당하며, UInt64와 Int64 또는 임의의 숫자 타입과 String 조합이 그런 사례입니다. 이전 동작으로 되돌리려면merge_table_max_tables_to_look_for_schema_inference를1로 설정하거나compatibility를24.12이하로 설정하십시오. #73956 (Alexey Milovidov).CHECK TABLE쿼리를 실행하려면 이제 별도의CHECK권한이 필요합니다. 이전 버전에서는 이러한 쿼리를 실행하는 데SHOW TABLES권한만 있으면 충분했습니다. 하지만CHECK TABLE쿼리는 부하가 클 수 있고,SELECT쿼리에 일반적으로 적용되는 쿼리 복잡도 제한도 적용되지 않습니다. 이로 인해 DoS 가능성이 있었습니다. #74471 (Alexey Milovidov).allow_materialized_view_with_bad_select가false인 경우, materialized view의 모든 컬럼이 대상 테이블과 일치하는지 확인합니다. #74481 (Christoph Wurm).- 이제
h3ToGeo()함수는 결과를(lat, lon)순서로 반환합니다(이는 기하 함수의 표준 순서입니다). 기존 결과 순서인(lon, lat)를 유지하려는 경우h3togeo_lon_lat_result_order = truesetting을 설정할 수 있습니다. #74719 (Manish Gill). JSONCompactEachRowWithProgress및JSONCompactStringsEachRowWithProgress포맷을 추가했습니다. #69989의 후속 작업입니다.JSONCompactWithNames및JSONCompactWithNamesAndTypes는 더 이상 “합계”를 출력하지 않습니다. 이는 구현상의 실수였던 것으로 보입니다. #75037 (Alexey Milovidov).- ALTER 명령 목록을 명확하게 만들기 위해
format_alter_operations_with_parentheses의 기본값을 true로 변경합니다(https://github.com/ClickHouse/ClickHouse/pull/59532 참조). 이 변경으로 24.3 이전 클러스터와의 복제가 깨집니다. 이전 릴리스를 사용하는 클러스터를 업그레이드하는 경우 server 구성에서 이 설정을 끄거나 먼저 24.3으로 업그레이드하십시오. #75302 (Raúl Marín). - 복제된 데이터베이스에서는 TRUNCATE DATABASE를 허용하지 않습니다. #76651 (Bharat Nallan).
- 분석기가 비활성화되어 있으면
compatibility설정과 관계없이 기본적으로 병렬 레플리카가 비활성화됩니다.parallel_replicas_only_with_analyzer를false로 명시적으로 설정하면 이 동작은 계속 변경할 수 있습니다. #77115 (Igor Nikonov). - 이제 float 값에 대한 설정으로는
NaN또는inf를 더 이상 사용할 수 없습니다. #77546 (Yarik Briukhovetskyi). - 음수 date/datetime 인수와 함께
dateTrunc를 사용하는 경우를 수정합니다. #77622 (Yarik Briukhovetskyi). - 기존 MongoDB 통합이 제거되었습니다. 서버 설정
use_legacy_mongodb_integration은 사용 중단되었으며 이제 아무 작업도 수행하지 않습니다. #77895 (Robert Schulze). - 파티션 키 또는 정렬 키에 사용된 컬럼의 경우 집계를 건너뛰도록 SummingMergeTree 검증을 개선했습니다. #78022 (Pervakov Grigorii).
새로운 기능
- 역직렬화된 스키핑 인덱스 그래뉼을 위한 인메모리 캐시가 추가되었습니다. 이에 따라 스키핑 인덱스를 사용하는 반복 쿼리가 더 빨라집니다. 새 캐시의 크기는 서버 설정
skipping_index_cache_size및skipping_index_cache_max_entries로 제어됩니다. 이 캐시를 도입한 주된 배경은 벡터 유사성 인덱스였으며, 이제 해당 인덱스가 훨씬 더 빨라졌습니다. #70102 (Robert Schulze). - OS 페이지 캐시에 의존하는 대신 프로세스 내 메모리에 데이터를 캐시할 수 있는 사용자 공간 페이지 캐시의 새로운 구현입니다. 로컬 파일 시스템 캐시가 없는 원격 가상 파일 시스템에 데이터가 저장된 경우 유용합니다. #70509 (Michael Kolupaev).
- 특정 timestamp를 기준으로 Iceberg 테이블을 쿼리할 수 있는 설정을 추가했습니다. #71072 (Brett Hoerner).
- Iceberg에서 시간 관련 변환 파티션 작업에 대한 Iceberg 테이블의 파티션 프루닝을 구현했습니다. #72044 (Daniil Ivanik).
enable_minmax_index_for_all_numeric_columns설정(숫자 컬럼용)과enable_minmax_index_for_all_string_columns설정(문자열 컬럼용)을 사용해 MergeTree가 관리하는 컬럼에 기본적으로 최소-최대(스키핑) 인덱스를 생성할 수 있는 기능이 추가되었습니다. 현재 두 설정은 모두 비활성화되어 있으므로 아직 동작 변화는 없습니다. #72090 (Smita Kulkarni).- 패턴에서 가장 긴 이벤트 연쇄와 일치하는 이벤트의 타임스탬프를 반환하는 집계 함수 sequenceMatchEvents가 추가되었습니다. #72349 (UnamedRus).
SELECT및VIEWSQL 문에서 이제 별칭을 지원합니다. 예:SELECT b FROM (SELECT number, number*2 FROM numbers(2)) AS x (a, b);. 이로써 TPC-H 쿼리 15를 수정하지 않고 실행할 수 있습니다. #72480 (Yarik Briukhovetskyi).- 동일한 쿼리에서 여러 grace JOIN이 합산된 메모리 사용량을 모니터링하고, MEMORY_LIMIT_EXCEEDED를 방지하기 위해 필요에 따라 외부 스토리지로 스필하도록 하는 새로운 설정
enable_adaptive_memory_spill_scheduler이 추가되었습니다. #72728 (lgbo). arrayNormalizedGini함수가 추가되었습니다. #72823 (flynn).- 낮은 카디널리티 Decimal 데이터 타입 지원 및 #72256 수정. #72833 (zhanglistar).
min_age_to_force_merge_seconds와min_age_to_force_merge_on_partition_only가 둘 다 활성화된 경우, 파트 병합은 최대 바이트 제한을 무시합니다. #73656 (Kai Zhu).- Apache Arrow/Parquet/ORC의 HALF_FLOAT 값을 읽을 수 있도록 지원합니다(이 값은 Float32로 읽힙니다). 이 변경으로 #72960이 해결되었습니다. IEEE-754 half float는 BFloat16과 같지 않다는 점에 유의하십시오. #73835가 해결되었습니다. #73836 (Alexey Milovidov).
system.trace_log테이블에는 심볼 정보가 해석된 스택 트레이스를 담는 두 개의 새로운 컬럼인symbols와lines가 추가됩니다. 이를 통해 프로파일 정보의 수집 및 내보내기를 쉽게 수행할 수 있습니다. 이는trace_log내부의 서버 구성 값symbolize로 제어되며, 기본적으로 활성화되어 있습니다. #73896 (Alexey Milovidov).- 테이블에서 자동 증가 번호를 생성하는 데 사용할 수 있는 새 함수
generateSerialID를 추가했습니다. kazalika가 진행한 #64310의 후속 작업입니다. 이로써 #62485가 해결됩니다. #73950 (Alexey Milovidov). - 구문
query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryN이 추가되었습니다. 즉, 서브쿼리{query1, query2, ... queryN}는 서로 병렬로 실행될 수 있으며, 이렇게 실행하는 것이 권장됩니다. #73983 (Vitaly Baranov). - 이제 Play UI에는 쿼리 실행 중 진행 표시줄이 표시됩니다. 쿼리를 취소할 수도 있습니다. 전체 레코드 수와 속도에 관한 추가 정보를 표시합니다. 데이터가 도착하는 즉시 테이블을 점진적으로 렌더링할 수 있습니다. HTTP 압축을 활성화했습니다. 테이블 렌더링 속도가 더 빨라졌습니다. 테이블 헤더가 상단에 고정됩니다. 셀을 선택하고 화살표 키로 셀 사이를 이동할 수 있습니다. 선택한 셀의 윤곽선 때문에 셀이 더 작아지는 문제를 수정했습니다. 이제 셀은 마우스를 올렸을 때는 확장되지 않고, 선택했을 때만 확장됩니다. 들어오는 데이터 렌더링을 언제 중지할지는 서버 측이 아니라 클라이언트에서 결정됩니다. 숫자에 자릿수 구분을 강조 표시합니다. 전체 디자인을 새로 고쳐 더 강렬해졌습니다. 서버 연결 가능 여부와 자격 증명의 정확성을 확인하고, 서버 버전과 가동 시간을 표시합니다. Safari를 포함해 어떤 글꼴에서든 클라우드 아이콘이 윤곽선 형태로 표시됩니다. 중첩된 데이터 타입 내부의 큰 정수가 더 잘 렌더링됩니다. inf/nan을 올바르게 표시합니다. 마우스를 컬럼 헤더 위에 올리면 데이터 타입을 표시합니다. #74204 (Alexey Milovidov).
- 설정
add_minmax_index_for_numeric_columns(숫자 컬럼용) 및add_minmax_index_for_string_columns(문자열 컬럼용)을 사용해 MergeTree가 관리하는 컬럼에 기본적으로 min-max(스키핑) 인덱스를 생성하는 기능이 추가되었습니다. 현재는 두 설정이 모두 비활성화되어 있으므로 아직 동작에는 변화가 없습니다. #74266 (Smita Kulkarni). script_query_number및script_line_number필드를system.query_log, 네이티브 프로토콜의 ClientInfo, 그리고 서버 로그에 추가했습니다. 이 변경으로 #67542가 해결되었습니다. 앞서 #68133에서 이 기능을 먼저 제안한 pinsvin00에게 제보를 표합니다. #74477 (Alexey Milovidov).- DateTime64 값 간뿐만 아니라 DateTime과의 뺄셈도 가능하도록 DateTime64에 대한 마이너스 연산자 지원을 추가했습니다. #74482 (Li Yin).
- AzureBlobStorage용 DeltaLake 테이블 엔진을 지원합니다. #68043를 수정했습니다. #74541 (Smita Kulkarni).
- clickhouse client 연결의 원본 IP 주소를 설정할 수 있도록 bind_host 설정을 추가했습니다. #74741 (Todd Yocum).
- 제출한 직후
SELECT쿼리를 실행할 때 완료되지 않은(백그라운드 프로세스에서 아직 구체화되지 않은) 뮤테이션을 즉시 적용할 수 있는 기능이 추가되었습니다. 이 기능은apply_mutations_on_fly를 설정하여 활성화할 수 있습니다. #74877 (Anton Popov). toStartOfInterval의 datetime 인수가 음수일 때 이전에 예상과 다르게 처리되던 일부 경우를 수정했습니다. 이를 위해 toStartOfIntervalAllowNegative라는 새 함수를 구현했으며, 이 함수는 거의 동일하게 동작하지만 Date32/DateTime64만 반환합니다. #74933 (Yarik Briukhovetskyi).- 새로운 함수
initialQueryStartTime가 추가되었습니다. 이 함수는 현재 쿼리의 시작 시간을 반환합니다. 분산 쿼리 실행 중에는 이 값이 모든 세그먼트에서 동일합니다. #75087 (Roman Lomonosov). - system.tables에 parametrized_view_parameters를 추가했습니다. https://github.com/clickhouse/clickhouse/issues/66756 이슈를 해결했습니다. #75112 (NamNguyenHoai).
- 데이터베이스 comment를 변경할 수 있도록 합니다. #73351을 종료합니다. ### 사용자 대상 변경 사항에 대한 문서 항목입니다. #75622 (NamNguyenHoai).
- 데이터베이스 계층 없이 테이블을 ATTACH하는 기능이 추가되었습니다(UUID 꼼수 방지). #75788 (Azat Khuzhin).
- 동시에 실행되는 쿼리 간 CPU 슬롯 분배 방식을 제어하는
concurrent_threads_scheduler서버 설정이 추가되었습니다. 이 설정은round_robin(이전 동작) 또는fair_round_robin으로 지정할 수 있으며, INSERT와 SELECT 간의 CPU 분배가 불공정한 문제를 해결하기 위한 것입니다. #75949 (Sergei Trifonov). - 라이선스 문제로 인해 v24.10에서 제거되었던 QPL 코덱을 복원했습니다. #76021 (Konstantin Bogdanov).
- 함수
arraySymmetricDifference가 추가되었습니다. 이 함수는 여러 배열 인수에서 모든 인수에 공통으로 포함되지 않는 모든 요소를 반환합니다. 예시:SELECT arraySymmetricDifference([1, 2], [2, 3])는[1, 3]을 반환합니다. (issue #61673). #76231 (Filipp Abapolov). estimatecompressionratio집계 함수가 추가되었습니다. #70801을 참조하세요. #76661 (Tariq Almawash).FilterTransformPassedRows및FilterTransformPassedBytesprofile events는 쿼리 실행 중 필터링된 행 수와 바이트 수를 보여줍니다. #76662 (Onkar Deshpande).- 블록체인 구현, 특히 EVM 기반 시스템에서 널리 사용되는
keccak256해시 함수를 추가했습니다. #76669 (Arnaud Briche). - SCRAM SHA256 및 Postgres wire 인증 업데이트. #76839 (scanhex12).
- 이 기능을 통해 클라이언트 요청의 헤더 중 외부 HTTP 인증기로 전달할 헤더 목록을 정의할 수 있습니다. #77054 (inv2004).
IcebergMetadataFilesCache를 지원하여 manifest 파일/목록과 metadata.json을 하나의 캐시에 저장합니다. #77156 (Han Fei).arrayLevenshteinDistance,arrayLevenshteinDistanceWeighted,arraySimilarity함수를 추가했습니다. #77187 (Mikhail f. Shiryaev).- 새로운 함수 3개를 추가했습니다. 사양(https://iceberg.apache.org/spec/#truncate-transform-details)에 따른
icebergTruncate,toYearNumSinceEpoch,toMonthNumSinceEpoch입니다.Icebergengine의 파티션 프루닝에서truncatetransform을 지원합니다. #77403 (alesapin). - 과거 특정 시점의 Iceberg 테이블 상태를 쿼리할 수 있습니다. #77439 (Daniil Ivanik).
- 워크로드용 CPU 슬롯 스케줄링이 추가되었습니다. 자세한 내용은 https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling 를 참조하십시오. #77595 (Sergei Trifonov).
- 이제
hasAll()함수에서 tokenbf_v1, ngrambf_v1 전문 검색 스킵 인덱스를 활용할 수 있게 되었습니다. #77662 (UnamedRus). JSON데이터 타입은 프로덕션 환경에서 사용할 수 있습니다. https://jsonbench.com/을 참조하십시오.Dynamic및Varaint데이터 타입도 프로덕션 환경에서 사용할 수 있습니다. #77785 (Alexey Milovidov).- 역직렬화된 벡터 유사성 인덱스를 위한 인메모리 캐시가 추가되었습니다. 이를 통해 반복 실행되는 근사 최근접 이웃(ANN) 검색 쿼리를 더 빠르게 처리할 수 있습니다. 새 캐시의 크기는 서버 설정
vector_similarity_index_cache_size및vector_similarity_index_cache_max_entries로 제어됩니다. 이 기능은 이전 릴리스의 스키핑 인덱스 캐시 기능을 대체합니다. #77905 (Shankar Iyer). - sparseGrams 및 sparseGramsHashes 함수의 UTF8 버전이 추가되었습니다. 작성자: scanhex12. #78176 (Pervakov Grigorii).
toInterval함수를 추가했습니다. 이 함수는 2개의 인수(value 및 unit)를 받아 값을 특정Interval타입으로 변환합니다. #78723 (Andrew Davis).
실험적 기능
- 새로운 설정
enable_replacing_merge_with_cleanup_for_min_age_to_force_merge를 통해 설정 가능한 timeout 이후 전체 파티션에 대한 자동 정리 머지를 허용합니다. #76440 (Christoph Wurm). - AWS S3 및 로컬 파일 시스템의 DeltaLake 테이블에 대해 Unity Catalog 지원을 추가합니다. #76988 (alesapin).
- Iceberg 테이블용 AWS Glue 서비스 카탈로그와의 실험적 통합을 도입합니다. #77257 (alesapin).
성능 개선
- 사용하지 않는 컬럼을 읽지 않도록 lazy projection을 사용해 성능을 최적화했습니다. #55518 (Xiaozhe Yu).
- 행을 비교할 때는 불일치할 가능성이 가장 높은 컬럼부터 먼저 비교를 시작합니다. #63780 (UnamedRus).
- RowBinary 입력 형식을 최적화합니다. #63805를 해결합니다. #65059 (Pavel Kruglov).
- 일부 저수준 최적화를 적용해 문자열 역직렬화 속도를 높였습니다. #65948 (Nikita Taranov).
- 코드 일부 위치에
preserve_most속성을 적용했습니다. #67778 (Nikita Taranov). - 반복되는 조건을 사용해 쿼리 성능을 개선할 수 있도록 쿼리 조건 캐시를 구현합니다. 조건을 충족하지 않는 데이터 부분의 범위는 메모리에 임시 인덱스로 저장됩니다. 이후 쿼리에서는 이 인덱스를 사용합니다. 해결 #67768 ### 사용자에게 표시되는 변경 사항에 대한 문서 항목입니다. #69236 (zhongyuankai).
- 원격 IO 지연 시간을 숨겨 전체 성능을 개선하는
NativeORCBlockInputFormat용 비동기 IO 프리페치를 지원합니다. 테스트에서는 속도 향상 폭이 최대 1.47배에 달했습니다. #70534 (李扬). - 키를 기준으로 오른쪽 조인 테이블을 재배치해 grace hash join 성능을 개선했습니다. #72237 (kevinyhzou).
materialize ttl이ttl_only_drop_parts설정을 다시 따르도록 했습니다. TTL을 다시 계산하는 데 필요한 컬럼만 읽고, 파트를 빈 파트로 교체하는 방식으로 삭제합니다. #72751 (Andrey Zvonov).arrayROCAUC및arrayAUCPR이 전체 곡선의 일부 면적을 계산할 수 있도록 지원하여, 대규모 데이터셋에서 계산을 병렬화할 수 있게 했습니다. #72904 (Emmanuel).- 유휴 스레드가 너무 많이 생성되는 것을 방지합니다. #72920 (Guo Wangyang).
parallel_hash조인 알고리즘의 probe 단계에서 hash를 기준으로 왼쪽 테이블 블록을 분할하던 처리가 제거되었습니다. #73089 (Nikita Taranov).- 테이블 함수에 중괄호 확장만 있으면 blob storage 키를 나열하지 않습니다. #73333을 해결합니다. #73518 (Konstantin Bogdanov).
- 산술 계산에서 #70502의 테스트에 따라 Int256 및 UInt256을 clang 내장 i256으로 대체했습니다. #73658 (李扬).
- 모든 인수 타입이 숫자형인 함수에 대해 빠른 경로를 추가합니다. https://github.com/ClickHouse/ClickHouse/pull/72258의 성능 문제를 수정합니다. #73820 (李扬).
- 함수가 아닌 컬럼에는
maskedExecute를 적용하지 않도록 하고, 단락 평가 실행 성능을 개선했습니다. #73965 (lgbo). - 성능 향상을 위해 Kafka/NATS/RabbitMQ/FileLog의 헤더 감지를 비활성화했습니다. #74006 (Azat Khuzhin).
- 로그 래퍼를 값으로 사용하고 힙에는 할당하지 않도록 했습니다. #74034 (Mikhail Artemenko).
- grouping sets를 사용한 집계 후 더 높은 병렬성으로 파이프라인을 실행합니다. #74082 (Nikita Taranov).
MergeTreeReadPool의 임계 구역을 축소했습니다. #74202 (Guo Wangyang).- 함수
indexHint를 최적화했습니다. 이제indexHint함수의 인수로만 사용되는 컬럼은 테이블에서 읽어 오지 않습니다. #74314 (Anton Popov). - 병렬 레플리카 성능 개선. 이제 쿼리 initiator에서 병렬 레플리카 프로토콜과 관련 없는 패킷의 역직렬화는 항상 파이프라인 스레드에서 이루어집니다. 이전에는 파이프라인 스케줄링을 담당하는 스레드에서 처리될 수 있었으며, 이로 인해 initiator의 응답성이 떨어지고 파이프라인 실행이 지연될 수 있었습니다. #74398 (Igor Nikonov).
LowCardinality컬럼의 메모리 내 크기 계산을 바로잡았습니다. #74688 (Nikita Taranov).- S3의 Wide 파트에서 JSON 컬럼 전체를 읽는 성능을 개선합니다. 이는 subcolumn 프리픽스 역직렬화를 위한 프리페치, 역직렬화된 프리픽스 캐시, 그리고 subcolumn 프리픽스의 병렬 역직렬화를 추가하여 구현했습니다.
SELECT data FROM table와 같은 쿼리에서는 S3의 JSON 컬럼 읽기 성능이 4배 향상되며,SELECT data FROM table LIMIT 10과 같은 쿼리에서는 약 10배 향상됩니다. #74827 (Pavel Kruglov). - 성능 향상을 위해 async inserts에 사용되는 메모리를 미리 할당합니다. #74945 (Ilya Golshtein).
- 옵티마이저가 join 양측을 스왑하는 경우
ConcurrentHashJoin의 이중 사전 할당 문제가 수정되었습니다. #75149 (Nikita Taranov). max_rows_in_join = max_bytes_in_join = 0일 때parallel_hash에서 발생하던 불필요한 경합을 수정했습니다. #75155 (Nikita Taranov).- 일부 join 시나리오에서 성능을 소폭 개선했습니다: 출력 행 수를 미리 계산하고 이를 위해 메모리를 예약합니다. #75376 (Alexander Gololobov).
plain_rewritable메타데이터 파일은 크기가 작아 큰 기본 버퍼가 필요하지 않습니다. 지정된 경로를 수용할 수 있도록 적절한 크기의 쓰기 버퍼를 사용해, 많은 수의 활성 파트에서 메모리 활용도를 개선합니다. ### 사용자 대상 변경 사항에 대한 문서 항목. #75758 (Julia Kartseva).- 일부 경우(예: 비어 있는 배열 컬럼) 데이터 파트에 빈 파일이 포함될 수 있습니다. 테이블이 메타데이터 스토리지와 객체 스토리지가 분리된 디스크에 저장된 경우, 빈 blob을 ObjectStorage에 쓰는 작업은 건너뛰고 이러한 파일에 대해서는 메타데이터만 저장할 수 있습니다. #75860 (Alexander Gololobov).
- 동시성 제어로 인해 INSERT와 SELECT 간 CPU가 불공정하게 분배될 수 있음이 확인되었습니다. 모든 CPU 슬롯이 INSERT에 무조건적으로(경합 없이) 할당되고
max_threads= 1로 설정되면, 높은max_threads값을 사용하는 SELECT는 실제로 단일 스레드만 사용하게 되어 성능이 크게 저하될 수 있습니다. #75941 (Sergei Trifonov). - 불필요한 NULL 맵 할당을 피하기 위해 wrapInNullable에 간단한 최적화를 적용했습니다. #76489 (李扬).
- Decimal32/Decimal64/DateTime64에서 min/max 성능을 개선했습니다. #76570 (李扬).
- 파트 제거 시 캐시의 데이터를 적극적으로 제거합니다. 데이터 양이 적으면 캐시가 최대 크기까지 커지지 않도록 합니다. #76641 (Alexey Milovidov).
- 이제 쿼리 컴파일(설정
compile_expressions)에서 머신 유형을 고려합니다. 이에 따라 이러한 쿼리의 속도가 크게 향상됩니다. #76753 (Robert Schulze). - arraySort를 최적화했습니다. #76850 (李扬).
col->insertFrom()호출의 가상 함수 디스패치를 제거해 JOIN 결과 생성 속도를 높였습니다. #77350 (Alexander Gololobov).- 동일한 파트의 마크를 머지한 뒤 한 번에 쿼리 조건 캐시에 기록해 잠금 사용량을 줄였습니다. #77377 (zhongyuankai).
- 단일 널 허용 컬럼 또는 카디널리티가 낮은 컬럼에 대한 ORDER BY를 최적화합니다. #77789 (李扬).
- 캐시가 머지 작업과 같이 수동적으로 사용되는 경우
filesystem_cache_prefer_bigger_buffer_size를 비활성화합니다. #77898 (Kseniia Sumarokova). - Iceberg에 단순
count()최적화를 구현했습니다. 이제count()를 사용하고 필터가 없는 쿼리는 더 빠르게 실행됩니다. #77639를 해결했습니다. #78090 (alesapin). - 컬럼의 lower_bound 및 uppert_bound 값을 기반으로 Iceberg 데이터 프루닝을 지원합니다. #77638 문제를 수정했습니다. #78242 (alesapin).
- NativeReader의 메모리 사용량을 최적화했습니다. #78442 (Azat Khuzhin).
- 사소한 최적화:
CAST가 필요한 경우count(if())를 countIf로 재작성하지 않습니다. #78564를 해결합니다. #78565 (李扬).
개선 사항
multiRead를 사용할 수 있는 곳에서는 단일get요청 사용을 없애 Keeper 요청량을 줄였습니다. 레플리카 수가 증가하면 이러한 요청이 Keeper에 상당한 부하를 줄 수 있었습니다. #56862 (Nikolay Degterinsky).- MySQL용 이름이 지정된 컬렉션에 SSL 인증 지원을 추가했습니다. #59111을 해결합니다. #59452 (Nikolay Degterinsky).
ConstantNode에서Field대신ColumnPtr를 저장하도록 하여 새로운 분석기 인프라의 성능을 개선했습니다. #62245와 관련이 있습니다. #63198 (Dmitry Novik).- 서버에 과부하가 걸리면 쿼리를 거부합니다. 판단은 대기 시간(
OSCPUWaitMicroseconds)과 활성 시간(OSCPUVirtualTimeMicroseconds)의 비율을 기준으로 합니다. 이 비율이min_os_cpu_wait_time_ratio_to_throw와max_os_cpu_wait_time_ratio_to_throw사이이면 일정 확률로 쿼리가 거부됩니다(이 둘은 쿼리 수준 설정입니다). #63206 (Alexey Katsman). - 메모리 사용량을 줄이기 위해 블록을 가능한 한 일찍 삭제합니다. #65647 (lgbo).
processors_profile_log테이블의 기본 구성에 이제 30일 TTL이 적용됩니다. #66139 (Ilya Yatsishin).- DateTime64 데이터 형식의 컬럼에
bloom_filter인덱스를 생성할 수 있게 했습니다. #66416 (Yutong Xiao). - 지연 시간 버킷을 도입하고 이를 사용해 S3 요청의 첫 바이트 읽기/쓰기 시간과 연결 시간을 추적합니다. 이렇게 하면 이후 수집된 데이터를 사용해 대략적인 백분위수를 계산하고 타임아웃을 조정할 수 있습니다. #69783 (Alexey Katsman).
Executable스토리지에 전달되는 쿼리는 이제 더 이상 단일 스레드로만 실행되지 않습니다. #70084 (yawnt).- 추적 가능성을 높이기 위해 OpenTelemetry 스팬 로그 테이블에 HTTP 헤더를 추가했습니다. #70516 (jonymohajanGmail).
- orc 파일을 항상
GMT시간대가 아닌 사용자 지정 시간대로 쓸 수 있도록 지원합니다. #70615 (kevinyhzou). - 병렬 레플리카가 활성화된 경우 테이블 함수를 해당
-Cluster버전으로 대체합니다. #65024를 수정했습니다. #70659 (Konstantin Bogdanov). - 클라우드 간에 백업을 작성할 때 IO scheduling 설정을 따르도록 개선했습니다. #71093 (János Benjamin Antal).
- 해당 딕셔너리에 대한 요청이 지연되지 않도록, MySQL 및 Postgres 딕셔너리 레플리카와의 연결을 백그라운드에서 다시 설정합니다. #71101 (Yakov Olkhovskiy).
- system.asynchronous_metrics에 메트릭 별칭을 추가했습니다. #71164 (megao).
- 갱신 가능 구체화 뷰의 갱신 작업이 이제
system.query_log에 기록됩니다. #71333 (Michael Kolupaev). - Parquet 블룸 필터와 최소/최대 인덱스를 함께 평가합니다. 이는 데이터가 [1, 2, 4, 5]일 때
x = 3 or x > 5를 올바르게 지원하는 데 필요합니다. #71383 (Arthur Passos). - 대화형 메트릭 관련 개선 사항. 병렬 레플리카의 메트릭이 완전히 표시되지 않던 문제를 수정했습니다. 메트릭은 가장 최근에 업데이트된 순서로, 그다음 이름의 사전순으로 표시합니다. 오래된 메트릭은 표시하지 않습니다. #71631 (Julia Kartseva).
- 과거에는 어떤 이유에서인지, 쿼리
ALTER TABLE MOVE PARTITION TO TABLE에서 전용ALTER_MOVE_PARTITION대신SELECT및ALTER DELETE권한을 확인했습니다. 이 PR에서는 이 접근 권한 유형을 사용하도록 변경했습니다. 호환성을 위해SELECT및ALTER DELETE권한이 부여된 경우 이 권한도 암묵적으로 부여되지만, 이 동작은 향후 릴리스에서 제거될 예정입니다. #16403을 해결합니다. #71632 (pufit). - 기본적으로
use_hive_partitioning설정이 활성화되도록 합니다. #71636 (Yarik Briukhovetskyi). - 정렬 순서가 깨지도록 두는 대신, 정렬 키의 컬럼을 구체화하려고 하면 예외를 발생시킵니다. 다만 #71777은 해결하지 않습니다. #71891 (Peter Nguyen).
- 해시 조인 알고리즘이 활성화된 경우, 더 범용적인 조인 계획 알고리즘을 사용할 수 있도록 했습니다. #71926 (János Benjamin Antal).
EXPLAIN QUERY TREE에서 시크릿을 숨기도록 했습니다. #72025 (Yakov Olkhovskiy).- 데이터베이스와 테이블의 메타데이터 파일 저장에 구성 가능한 디스크를 사용할 수 있도록 허용합니다. 디스크 이름은
database_disk.disk구성 매개변수로 설정할 수 있습니다. #72027 (Tuan Pham Anh). - 네이티브 리더가 Parquet의 정수 논리 타입을 지원합니다. #72105 (Arthur Passos).
- 기본적으로 JSON 출력 형식을 보기 좋게 표시하도록 합니다. 이를 제어하는 새로운 설정
output_format_json_pretty_print을 추가했으며, 기본적으로 활성화됩니다. #72148 (Pavel Kruglov). default사용자 계정에 비밀번호가 필요한 경우 브라우저에서 대화형으로 자격 증명 입력을 요청합니다. 이전 버전에서는 서버가 HTTP 403을 반환했지만, 이제는 HTTP 401을 반환합니다. #72198 (Alexey Milovidov).- 이 PR은 접근 유형
CREATE_USER,ALTER_USER,DROP_USER,CREATE_ROLE,ALTER_ROLE,DROP_ROLE를 전역 권한에서 매개변수화된 권한으로 전환합니다. 즉, 이제 접근 관리 권한 부여를 더 세밀하게 설정할 수 있습니다. #72246 (pufit). - 클러스터 구성에서 세그먼트 이름을 사용할 수 있도록 허용합니다. #72276 (MikhailBurdukov).
- 매개변수가 서로 다른 JSON 타입 간 CAST 및 ALTER를 지원합니다. #72303 (Pavel Kruglov).
system.mutations에latest_fail_error_code_name컬럼을 추가합니다. 이 컬럼은 멈춘 뮤테이션 관련 새 메트릭을 도입하고, 이를 사용해 클라우드에서 발생한 오류를 그래프로 시각화하며, 선택적으로는 노이즈가 더 적은 새 알림을 추가하는 데 필요합니다. #72398 (Miсhael Stetsyuk).- 파티션 ATTACH 시 할당되는 메모리 양을 줄였습니다. #72583 (Konstantin Morozov).
max_bytes_before_external_sort제한이 전체 쿼리 메모리 사용량에 따라 결정되도록 변경했습니다(이전에는 하나의 정렬 스레드에서 사용하는 정렬 block의 바이트 수를 의미했지만, 이제는max_bytes_before_external_group_by와 같은 의미로 모든 스레드를 포함한 전체 쿼리 메모리의 총 제한을 의미합니다). 또한 디스크상의 block 크기를 제어하는 설정min_external_sort_block_bytes를 추가했습니다. #72598 (Azat Khuzhin).- trace collector의 메모리 제한을 무시합니다. #72606 (Azat Khuzhin).
- MergeTree 정렬 키와 스킵 인덱스에서 서브컬럼을 지원합니다. #72644 (Pavel Kruglov).
- server settings
dictionaries_lazy_load와wait_dictionaries_load_at_startup가system.server_settings에 추가되었습니다. #72664 (Christoph Wurm). BACKUP/RESTORE쿼리의 일부로 지정할 수 있는 설정 목록에max_backup_bandwidth를 추가합니다. #72665 (Christoph Wurm).- 병렬 레플리카는 과거 레플리카 가용성 정보를 사용해 레플리카 선택을 개선했지만, connection을 사용할 수 없을 때 레플리카의 오류 횟수를 갱신하지 않았습니다. 이 PR은 connection을 사용할 수 없을 때도 레플리카의 오류 횟수를 갱신하도록 변경합니다. #72666 (zoomxi).
- 복제된 클러스터에서 생성되는 로그 양을 최소화하는 데 도움이 되도록, ReplicatedMergeTree 엔진에서 새로 생긴 복제된 파트의 로그 레벨을 낮췄습니다. #72876 (mor-akamai).
- 많은 새 기능을 위해서는 더 나은 코드 캡슐화(Iceberg 메타데이터와 관련된 부분)와 더 나은 코드 추상화가 필요합니다. #72941 (Daniil Ivanik).
- JSON 컬럼 값의 동등 비교를 지원합니다. #72991 (Pavel Kruglov).
- JSON 서브컬럼이 포함된 식별자의 포맷을 개선해 불필요한 백쿼트를 피하도록 했습니다. #73085 (Pavel Kruglov).
PREWHERE조건을Test수준에서 기록합니다. #73116 (Vladimir Cherkasov).- 암시적 ENGINE과 엔진 설정 및 쿼리 설정의 혼용을 지원합니다. #73120 (Raúl Marín).
optimize_on_insert가 활성화되어 있으면 파트를 수준 1로 기록합니다. 이렇게 하면 새로 기록된 파트에 대해FINAL을 사용하는 쿼리에서 여러 최적화를 활용할 수 있습니다. #73132 (Anton Popov).WHERE a<b AND b<c AND c<5와 같은 쿼리의 경우, 필터링을 더 효과적으로 수행할 수 있도록 새로운 비교 조건(a<5 and b<5)을 생성할 수 있습니다. #73164 (Shichao Jin).- 논리합에서 공통 표현식 추출을 개선했습니다. 모든 논리합 항목에 공통 하위 표현식이 없더라도 결과 필터 표현식을 단순화할 수 있도록 했습니다. #71537의 후속 작업입니다. #73271 (Dmitry Novik).
- Storage
S3(Azure)Queue에서는 설정 없이 생성된 테이블에도 설정을 추가할 수 있습니다. #73283 (Kseniia Sumarokova). - Clickhouse-client는 쿼리 입력을 끝낼 때 Ctrl+D를 지원합니다. 세미콜론을 입력한 뒤 Enter를 누르는 대신 Ctrl+D를 사용할 수 있습니다. 또한 단일 줄 모드에서는 Ctrl+D가 Enter처럼 동작합니다. #73293 (Xiaozhe Yu).
least_greatest_legacy_null_behavior설정(기본값:false)을 도입했습니다. 이 설정은 함수least와greatest가NULL인수를 처리할 때NULL을 무조건 반환할지(true인 경우), 아니면 이를 무시할지(false인 경우)를 제어합니다. #73344 (Robert Schulze).- ObjectStorageQueueMetadata의 정리 스레드에서 Keeper의 다중 요청을 사용하도록 했습니다. #73357 (Antonio Andelic).
- 새로운 MongoDB driver가 이제 기본값으로 사용됩니다. 레거시 driver를 계속 사용하려는 사용자는 server setting
use_legacy_mongodb_integration을 true로 설정할 수 있습니다. #73359 (Robert Schulze). - ClickHouse가 cgroup에서 실행되더라도 시스템 부하, 프로세스 스케줄링, 메모리 등과 관련된 시스템 전체 비동기 메트릭은 계속 수집합니다. 이러한 메트릭은 호스트에서 ClickHouse만 리소스를 많이 사용하는 프로세스인 경우 유용한 신호를 제공할 수 있습니다. #73369 (Nikita Taranov).
- S3Queue 스토리지에서 24.6 이전에 생성된 기존 순서형 테이블을 버킷이 포함된 새 구조로 이전할 수 있게 했습니다. #73467 (Kseniia Sumarokova).
- 기존
system.s3queue와 유사하게system.azure_queue를 추가했습니다. #73477 (Kseniia Sumarokova). - 수정자와 함께 collation 로캘을 사용할 때 오류가 발생하던 회귀 문제를 수정했습니다. 예시로,
SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shifted가 이제 올바르게 동작합니다. #73544 (Robert Schulze). - Nullable(JSON) 유형을 지원합니다. #73556 (Pavel Kruglov).
- 함수
parseDateTime64(및 해당 변형)는 이제 1970년 이전 또는 2106년 이후의 입력 날짜에 대해서도 올바른 결과를 반환합니다. 예시:SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS'). #73594 (zhanglistar). - 사용자가 제기한 clickhouse-disks의 사용성 문제 일부를 해결했습니다. #67136을 해결합니다. #73616 (Daniil Ivanik).
- S3(Azure)Queue 스토리지에서 커밋 설정을 변경할 수 있도록 했습니다. (커밋 설정: max_processed_files_before_commit, max_processed_rows_before_commit, max_processed_bytes_before_commit, max_processing_time_sec_before_commit). #73635 (Kseniia Sumarokova).
- S3(Azure)Queue 스토리지에서 소스 간 진행 상황을 집계해 commit limit 설정과 비교합니다. #73641 (Kseniia Sumarokova).
BACKUP/RESTORE쿼리에서 주요 설정을 지원합니다. #73650 (Vitaly Baranov).- Parquet 출력 시
output_format_compression_level설정을 읽도록 했습니다. #73651 (Arthur Passos). - 지원되지 않는 유형으로 처리하는 대신 arrow fixed_size_list를
Array로 읽도록 추가했습니다. #73654 (Julian Meyers). - 이 PR에는 두 가지 백업 엔진이 추가되었습니다:
Memory(현재 사용자 세션 내에 백업을 유지함),Null(어디에도 백업을 유지하지 않음):. #73690 (Vitaly Baranov). concurrent_threads_soft_limit_num및concurrent_threads_soft_limit_num_ratio_to_cores는 server를 다시 시작하지 않아도 변경할 수 있습니다. #73713 (Sergei Trifonov).- formatReadable 함수에 확장된 숫자 타입(Decimal, 대형 정수) 지원을 추가했습니다. #73765 (Raúl Marín).
- tuple 컬럼의 필드에 대해 컬럼을 구분하지 않는 컬럼 매칭을 준수합니다. https://github.com/apache/incubator-gluten/issues/8324 이슈를 해결합니다. #73780 (李扬).
- Postgres wire 프로토콜에 대한 TLS를 지원합니다. #73812 (scanhex12).
- 기본적으로
LowCardinality(UUID)를 허용합니다. 이는 ClickHouse Cloud 고객들 사이에서 실용적인 것으로 확인되었습니다. #73826 (Alexey Milovidov). - 설치 중 표시되는 메시지 개선. #73827 (Alexey Milovidov).
- ClickHouse Cloud 비밀번호 재설정 메시지 개선. #73831 (Alexey Milovidov).
- 파일에 내용을 추가할 수 없는 File 테이블의 오류 메시지를 개선했습니다. #73832 (Alexey Milovidov).
- 사용자가 터미널에서 바이너리 형식(예: Native, Parquet, Avro)으로 출력을 실수로 요청한 경우 확인을 요청합니다. 이로써 #59524가 해결됩니다. #73833 (Alexey Milovidov).
BFloat16데이터 타입은 이제 운영 환경에서 사용할 수 있습니다. #73840 (Alexey Milovidov).- 터미널에서 Pretty 및 Vertical 형식의 후행 공백을 강조 표시해 더 명확하게 확인할 수 있습니다. 이는
output_format_pretty_highlight_trailing_spaces설정으로 제어됩니다. 초기 구현은 Braden Burns가 #72996에서 수행했습니다. #71590을 닫습니다. #73847 (Alexey Milovidov). clickhouse-client와clickhouse-local는 stdin이 파일에서 리디렉션되면 stdin의 압축을 자동으로 감지합니다. 이로써 #70865가 해결되었습니다. #73848 (Alexey Milovidov).- 기본적으로 Pretty 형식에서 너무 긴 컬럼 이름을 잘라 표시합니다. 이는
output_format_pretty_max_column_name_width_cut_to및output_format_pretty_max_column_name_width_min_chars_to_cut설정으로 제어합니다. 이는 tanmaydatta가 #66502에서 진행한 작업의 연장선입니다. 이 변경으로 #65968이 해결되었습니다. #73851 (Alexey Milovidov). Pretty포맷을 더 깔끔하게 표시합니다. 이전 블록이 출력된 뒤 시간이 많이 지나지 않았으면 블록을 합칩니다. 이는 새로운 설정output_format_pretty_squash_consecutive_ms(기본값 50 ms)와output_format_pretty_squash_max_wait_ms(기본값 1000 ms)로 제어됩니다. #49537의 후속 작업입니다. 이 변경으로 #49153을 해결합니다. #73852 (Alexey Milovidov).- SQLite 타입 매핑 수정(
integer타입은int64로, 부동소수점 타입은float64로). #73853 (Joanna Hulboj). - 현재 병합 중인 소스 파트 개수에 대한 메트릭을 추가합니다. 이로써 #70809가 해결됩니다. #73868 (Alexey Milovidov).
- 출력 대상이 터미널인 경우
Vertical포맷에서 컬럼을 강조 표시합니다. 이는output_format_pretty_color설정으로 비활성화할 수 있습니다. #73898 (Alexey Milovidov). - MySQL 호환성이 더욱 개선되어 이제
mysqlsh(Oracle의 강력한 MySQL CLI)에서 ClickHouse에 연결할 수 있게 되었습니다. 이는 테스트를 원활하게 수행하는 데 필요합니다. #73912 (Alexey Milovidov). - 출력 레코드 수가 N =
output_format_pretty_max_rows보다 많으면, 처음 N개 행만 표시하는 대신 출력 테이블의 중간 부분을 생략하고 앞의 N/2개 행과 뒤의 N/2개 행을 표시합니다. #64200의 후속 작업입니다. 이로써 #59502가 해결됩니다. #73929 (Alexey Milovidov). - 함수
isIPv4String은 올바른 IPv4 주소 뒤에 0 바이트가 오는 경우 true를 반환했지만, 이 경우에는 false를 반환해야 했습니다. #65387의 후속 내용입니다. #73946 (Alexey Milovidov). - MySQL wire 프로토콜의 오류 코드가 MySQL과 호환되도록 개선했습니다. #56831의 후속 작업입니다. #50957를 닫습니다. #73948 (Alexey Milovidov).
- 연산자
IN,NOT IN에서 enum 리터럴을 enum 유형에 대해 검증하고, 리터럴이 유효한 enum 값이 아니면 예외를 발생시키는 설정validate_enum_literals_in_opearators를 추가했습니다. #73985 (Vladimir Cherkasov). - Storage
S3(Azure)Queue에서 모든 파일을 하나의 Keeper 트랜잭션으로 커밋합니다(커밋 설정으로 정의된 단일 batch 내에서). #73991 (Kseniia Sumarokova). - 실행형 UDF 및 Dictionaries의 헤더 감지를 비활성화합니다(Function ‘X’: 잘못된 결과를 초래할 수 있으며, Y개 행이 예상되지만 실제로는 Y-1개 행이 반환될 수 있음). #73992 (Azat Khuzhin).
EXPLAIN PLAN.에distributed옵션이 추가되었습니다. 이제EXPLAIN distributed=1 ...을 사용하면 원격 계획이ReadFromParallelRemote*단계에 추가됩니다. #73994 (Nikolai Kochetov).- Dynamic 인수를 사용하는 not/xor에 올바른 반환 유형을 적용합니다. #74013 (Pavel Kruglov).
- 테이블 생성 후에도
add_implicit_sign_column_constraint_for_collapsing_engine를 변경할 수 있습니다. #74014 (Christoph Wurm). - materialized view의 SELECT 쿼리에서 서브컬럼을 지원합니다. #74030 (Pavel Kruglov).
- Pretty 형식은 테이블 셀 안에 여러 줄 필드를 렌더링할 수 있어 가독성이 향상됩니다. 이 기능은 기본적으로 활성화되어 있으며,
output_format_pretty_multiline_fields설정으로 제어할 수 있습니다. Volodyachan이 #64094에서 진행한 작업을 이어받았습니다. 이로써 #56912가 해결되었습니다. #74032 (Alexey Milovidov). - 쿼리 계획 수준에서
MergingAggregated단계의predicate-push-down최적화를 지원합니다. 새로운 분석기를 사용할 때 일부 쿼리의 성능이 향상됩니다. #74073 (Nikolai Kochetov). - 이제
clickhouse-client에서 사용자 지정 프롬프트를 설정하는 간단한 방법이 3가지 있습니다. 1. 명령줄 매개변수--prompt를 통해, 2. 설정 파일에서 설정<prompt>[...]</prompt>를 통해, 3. 그리고 역시 설정 파일에서 연결별 설정<connections_credentials><prompt>[...]</prompt></connection_credentials>를 통해 설정할 수 있습니다. #74168 (Christoph Wurm). - prometheus remote write 응답의 성공 상태 코드를 200/OK에서 204/NoContent로 변경합니다. #74170 (Michael Dempsey).
- 브라우저의 JavaScript에서 X-ClickHouse HTTP headers를 사용할 수 있도록 노출합니다. 애플리케이션 작성이 더 편리해집니다. #74180 (Alexey Milovidov).
JSONEachRowWithProgress포맷에는 메타데이터가 포함된 이벤트와 합계 및 극값도 포함됩니다. 또한rows_before_limit_at_least와rows_before_aggregation도 포함됩니다. 이 포맷은 부분 결과가 반환된 뒤 예외가 도착하더라도 해당 예외를 올바르게 출력합니다. 이제 진행 정보에는 경과 나노초도 포함됩니다. 마지막에는 최종 진행 이벤트가 하나 출력됩니다. 쿼리 런타임 중 진행 정보는interactive_delay설정값보다 더 자주 출력되지 않습니다. #74181 (Alexey Milovidov).- Play UI에서 모래시계가 부드럽게 회전하도록 개선했습니다. #74182 (Alexey Milovidov).
- HTTP 응답이 압축되어 있더라도 패킷은 도착하는 즉시 전송합니다. 이렇게 하면 브라우저가 진행 패킷과 압축된 데이터를 받을 수 있습니다. #74201 (Alexey Milovidov).
- 서버를 재시작하지 않고 실행 중에
max_remote_read_network_bandwidth_for_serve및max_remote_write_network_bandwidth_for_server를 다시 로드할 수 있는 기능을 추가했습니다. #74206 (Kai Zhu). - ClickHouse Client에서 포트 9440으로 연결할 때 보안 연결을 자동으로 감지합니다. #74212 (Christoph Wurm).
- http_handlers에서 password 없이 username만으로 사용자를 인증할 수 있도록 개선했습니다. #74221 (Azat Khuzhin).
- 대체 쿼리 언어인 PRQL 및 KQL 지원은 실험 기능으로 표시되었습니다. 이를 사용하려면 설정
allow_experimental_prql_dialect = 1및allow_experimental_kusto_dialect = 1을 지정하십시오. #74224 (Robert Schulze). - 더 많은 집계 함수에서 기본 Enum 유형 반환을 지원합니다. #74272 (Raúl Marín).
- 이제
OPTIMIZE TABLE에서 기존 키워드FINAL대신 키워드FORCE를 지정할 수 있습니다. #74342 (Robert Schulze). - 머지 중 스킵 인덱스 생성이 억제되도록 하는 MergeTree 설정
materialize_skip_indexes_on_merge가 추가되었습니다. 이를 통해 스킵 인덱스를 언제 생성할지(ALTER TABLE [..] MATERIALIZE INDEX [...]를 통해) 명시적으로 제어할 수 있습니다. 이는 스킵 인덱스 생성 비용이 큰 경우(예: 벡터 유사성 인덱스) 유용할 수 있습니다. #74401 (Robert Schulze). - 기본 표현식과 구체화된 표현식에서 서브컬럼을 지원합니다. #74403 (Pavel Kruglov).
- Storage(S3/Azure)Queue에서 Keeper 요청을 최적화했습니다. #74410 (Kseniia Sumarokova).
- 서버 종료에 지나치게 오래 걸릴 때 알림을 발생시키는 데 필요한 IsServerShuttingDown 메트릭을 추가했습니다. #74429 (Miсhael Stetsyuk).
- EXPLAIN에 Iceberg 테이블 이름이 추가되었습니다. #74485 (alekseev-maksim).
- 기본값으로 최대
1000개의 병렬 레플리카를 사용합니다. #74504 (Konstantin Bogdanov). - 이전 분석기에서 RECURSIVE CTE를 사용할 때 표시되는 오류 메시지를 개선했습니다. #74523 (Raúl Marín).
- Storage(S3/Azure)Queue에서 Keeper 요청을 최적화했습니다. #74538 (Kseniia Sumarokova).
- S3 disk에서 읽을 때 HTTP 세션 재사용을 개선 (#72401). #74548 (Julian Maicher).
system.errors에 자세한 오류 메시지를 표시합니다. #74574 (Vitaly Baranov).- 모든 타입의 복제된 작업에 백오프 로직을 활성화했습니다. 이를 통해 CPU 사용량, 메모리 사용량, 로그 파일 크기를 줄일 수 있습니다.
max_postpone_time_for_failed_replicated_fetches_ms,max_postpone_time_for_failed_replicated_merges_ms,max_postpone_time_for_failed_replicated_tasks_ms라는 새로운 설정을 추가했으며, 이 설정은max_postpone_time_for_failed_mutations_ms와 유사합니다. #74576 (MikhailBurdukov). parallel_hash조인 알고리즘의max_joined_block_size_rows설정 계산이 더 정확해졌습니다.hash알고리즘과 비교했을 때 메모리 사용량 증가를 방지하는 데 도움이 됩니다. #74630 (Nikita Taranov).- libhdfs3의
dfs.client.use.datanode.hostname구성 옵션 지원이 추가되었습니다. #74635 (Mikhail Tiukavkin). - 잘못된 동작 수정: 코덱 ‘snappy’는 압축 수준 설정을 지원하지 않습니다. #74659 (Arthur Passos).
- clickhouse-keeper와의 클라이언트 통신에 비밀번호 사용을 허용합니다. 서버와 클라이언트에 적절한 SSL 구성을 지정한 경우 이 기능의 유용성은 크지 않지만, 일부 상황에서는 여전히 도움이 될 수 있습니다. 비밀번호는 16자를 초과할 수 없습니다. 이는 Keeper Auth 모델과는 관련이 없습니다. #74673 (alesapin).
- 백업 생성 시 blob 경로를 사용해 체크섬을 계산할 수 있도록 했습니다. #74729 (Vitaly Baranov).
- 양쪽 파트 모두에서 JOIN 키가 PK의 접두사인 경우, JOIN에 동적 세그먼트 분할을 사용합니다. 이 최적화는
query_plan_join_shard_by_pk_ranges설정으로 활성화할 수 있으며, 기본적으로는 비활성화되어 있습니다. #74733 (Nikolai Kochetov). - 구성 리로더용 오류 코드를 추가합니다. #74746 (Garrett Thomas).
- MySQL 및 PostgreSQL 테이블 함수와 엔진에서 IPv6 주소를 지원하도록 추가되었습니다. #74796 (Mikhail Koviazin).
- 이제 Gorilla 코덱의 매개변수는 항상 .sql 파일에 있는 테이블 메타데이터에 저장됩니다. 이로써 #70072가 해결됩니다. #74814 (Nikita Mikhaylov).
divideDecimal에 단락 최적화를 적용했습니다. #74280를 해결합니다. #74843 (Kevin Mingtarja).- Keeper에서 대규모 multi 요청의 성능을 개선했습니다. #74849 (Antonio Andelic).
- 이제 시작 스크립트 안에서 Users를 지정할 수 있습니다. #74894 (pufit).
- ALTER TABLE FETCH PARTITION에서 파트를 병렬로 가져올 수 있습니다(스레드 풀 크기는
max_fetch_partition_thread_pool_size로 제어됩니다). #74978 (Azat Khuzhin). system.query_cache에 Query id 컬럼을 추가했습니다(이슈 #68205). #74982 (NamNguyenHoai).- SSH protocol을 다시 활성화했습니다. 일부 치명적인 취약점을 수정하여 더 이상 사용자 지정 pager를 사용하거나
server-logs-file을 지정할 수 없도록 했습니다. 기본적으로 환경 변수를 통해 클라이언트 옵션을 전달하는 기능을 비활성화했습니다(여전히 config.xml의ssh-server.enable_client_options_passing을 통해 사용할 수 있습니다). progress 테이블, 쿼리 취소, 자동 완성, profile events 진행 상황, stdin, 그리고send_logs_level옵션을 지원합니다. 이 변경으로 다음 이슈가 해결되었습니다: #74340. #74989 (Nikita Mikhaylov). - 쿼리 해석 중 예외가 발생할 경우, 사용자 지정 포맷을 사용해 예외가 올바르게 포맷되도록 수정했습니다. 이전 버전에서는 쿼리에 지정된 포맷이 아니라 기본 포맷으로 예외가 포맷되었습니다. 이로써 #55422가 해결되었습니다. #74994 (Alexey Milovidov).
- 파싱을 개선했습니다(시퀀스 ID 파싱: manifest 파일의 시퀀스 식별자를 파싱하는 기능을 추가했으며, Avro 메타데이터 파싱: 향후 개선 사항을 쉽게 확장할 수 있도록 Avro 메타데이터 parser를 재설계했습니다). #75010 (Daniil Ivanik).
KILL QUERY및 타임아웃(max_execution_time)을 사용해ALTER TABLE ... FREEZE ...쿼리를 취소할 수 있게 되었습니다. #75016 (Kirill).SimpleAggregateFunction에서groupUniqArrayArrayMap을 지원하도록 추가했습니다. #75034 (Miel Donkers).- Postgres wire 프로토콜에서 prepared statement를 지원합니다. #75035 (scanhex12).
Iceberg데이터베이스 엔진에서 catalog 자격 증명 설정을 숨깁니다. #74559를 해결합니다. #75080 (Kseniia Sumarokova).- BuzzHouse에 빠져 있던 몇 가지 기능이 추가되었습니다:
ILIKE및REGEXP연산자,<=>,IS NOT DISTINCT FROM. #75168 (Pedro Ferreira). - 설정
min_chunk_bytes_for_parallel_parsing은 이제 0으로 설정할 수 없습니다. 이 변경으로 다음 문제가 수정됩니다: #71110. #75239 (Nikita Mikhaylov). intExp2/intExp10: 정의되지 않은 동작을 명시합니다. 너무 작은 인수에는 0을 반환하고, 너무 큰 인수에는18446744073709551615를 반환하며,nan이면 예외를 발생시킵니다. #75312 (Vitaly Baranov).DatabaseIceberg에서 catalog 구성의s3.endpoint를 네이티브로 지원하도록 했습니다. #74558를 해결했습니다. #75375 (Kseniia Sumarokova).- 권한이 충분하지 않은 사용자가
SYSTEM DROP REPLICA를 실행할 때 조용히 실패하지 않도록 했습니다. #75377 (Bharat Nallan). - 시스템 로그 중 하나에서라도 플러시가 실패한 횟수에 대한 ProfileEvent를 추가했습니다. #75466 (Alexey Milovidov).
- 복호화 및 압축 해제 시 확인 로직과 로깅을 추가합니다. #75471 (Vitaly Baranov).
parseTimeDelta함수에 마이크로 기호(U+00B5) 지원이 추가되었습니다. 이제 마이크로 기호(U+00B5)와 그리스 문자 뮤(U+03BC) 모두 마이크로초를 나타내는 유효한 표기로 인식되므로, ClickHouse의 동작이 Go 구현과 일치합니다(time.go 참조 및 time/format.go). #75472 (Vitaly Orlov).- 클라이언트 측 코드(예:
INSERT데이터 파싱 및 쿼리 출력 포맷팅)에 서버의users.xml및 사용자 profile의 설정을 적용할지 제어하는 클라이언트 설정(apply_settings_from_server)으로 서버 설정(send_settings_to_client)을 대체합니다. 그렇지 않으면 클라이언트 명령줄, session, 그리고 쿼리의 설정만 사용됩니다. 이는 네이티브 클라이언트에만 적용되며(예: HTTP에는 적용되지 않음), 쿼리 처리의 대부분(서버에서 수행됨)에는 적용되지 않습니다. #75478 (Michael Kolupaev). - Keeper 개선 사항: 성능 향상을 위해 인메모리 스토리지에 커밋할 때 digest 계산을 비활성화합니다.
keeper_server.digest_enabled_on_commit구성으로 다시 활성화할 수 있습니다. 요청을 전처리할 때는 여전히 digest를 계산합니다. #75490 (Antonio Andelic). - 가능한 경우 JOIN ON의 필터 표현식을 푸시다운할 수 있도록 개선했습니다. #75536 (Vladimir Cherkasov).
- 구문 오류 시 오류 메시지가 개선되었습니다. 이전에는 쿼리가 너무 크고 길이 제한을 초과한 token이 매우 긴 문자열 리터럴인 경우, 원인 설명 메시지가 그 매우 긴 token의 두 예시 사이에 묻혀 버렸습니다. 오류 메시지에서 UTF-8이 포함된 쿼리가 잘못 잘리던 문제를 수정했습니다. 쿼리 조각에 따옴표가 과도하게 붙던 문제를 수정했습니다. 이로써 #75473이 해결되었습니다. #75561 (Alexey Milovidov).
- 스토리지
S3(Azure)Queue에 프로파일 이벤트를 추가했습니다. #75618 (Kseniia Sumarokova). - 호환성 확보를 위해 server에서 client로 설정을 전송하는 기능(
send_settings_to_client=false)을 비활성화했습니다(이 기능은 추후 사용성 향상을 위해 client setting으로 다시 구현될 예정입니다). #75648 (Michael Kolupaev). - 백그라운드 스레드가 주기적으로 읽어오는 여러 소스의 정보를 바탕으로 내부 메모리 트래커를 보정할 수 있도록 구성
memory_worker_correct_memory_tracker를 추가했습니다. #75714 (Antonio Andelic). - PrometheusRemoteReadProtocol에서 분석기를 사용하도록 변경했습니다. #75729 (Dmitry Novik).
- 게이지/카운터 메트릭 유형을 지원합니다. 그러나 일부 메트릭(예: Keeper에 대한 요청의 응답 시간)에는 이들만으로는 충분하지 않으므로, 히스토그램 메트릭 유형 지원이 필요합니다. 인터페이스는 Prometheus 클라이언트와 매우 유사하며, 값에 해당하는 버킷의 카운터를 증가시키려면
observe(value)만 호출하면 됩니다. 히스토그램 메트릭은 system.histogram_metrics를 통해 노출됩니다. #75736 (Miсhael Stetsyuk). - 컬럼
normalized_query_hash를system.processes에 추가합니다. 참고:normalizedQueryHash함수로 실시간으로 쉽게 계산할 수 있지만, 이후 변경 사항에 대비하기 위해 필요합니다. #75756 (Alexey Milovidov). Merge테이블이 더 이상 존재하지 않는 데이터베이스를 대상으로 생성된 경우에도system.tables를 쿼리해도 예외가 발생하지 않습니다. 복잡한 작업 수행은 허용되지 않으므로Hive테이블에서getTotalRows메서드를 제거합니다. #75772 (Alexey Milovidov).- 이제 Web UI에서 대화형 데이터베이스 탐색이 가능합니다. #75777 (Alexey Milovidov).
- 스토리지 정책에서 읽기 전용 디스크와 읽기-쓰기 디스크를 함께 조합할 수 있도록 지원합니다(여러 볼륨 또는 여러 디스크로 구성 가능). 이를 통해 전체 볼륨에서 데이터를 읽을 수 있으며, 삽입은 쓰기 가능한 디스크를 우선적으로 사용합니다(즉, Copy-on-Write 스토리지 정책). #75862 (Azat Khuzhin).
- system.opentelemetry_span_log의 기본 ORDER BY에서 trace_id를 삭제했습니다. #75907 (Azat Khuzhin).
- 이제 암호화(XML 속성
encrypted_by)를 모든 설정 파일(config.xml, users.xml, 중첩 설정 파일)에 적용할 수 있습니다. 이전에는 최상위 config.xml 파일에만 적용되었습니다. #75911 (Mikhail Gorshkov). - Backup의 start_time/end_time 값을 마이크로초 단위로 저장합니다. #75929 (Aleksandr Musorin).
- RSS로 보정되지 않은 내부 전역 메모리 추적기의 값을 나타내는
MemoryTrackingUncorrected메트릭을 추가했습니다. #75935 (Antonio Andelic). - MergeTree에서 컬럼과 인덱스 크기를 필요할 때 계산합니다. #75938 (Pavel Kruglov).
- 출력 컬럼이 왼쪽 테이블에 속한 경우 join을 IN 서브쿼리로 변환하는 기능은 먼저 고유성 보장 단계가 필요하므로, 해당 단계가 나중에 추가되기 전까지는 기본적으로 비활성화됩니다. #75942 (Shichao Jin).
workload설정에 알 수 없는 값이 지정된 쿼리에 대해, 무제한 액세스를 허용할지(기본값) 또는RESOURCE_ACCESS_DENIED오류를 발생시킬지를 선택할 수 있는 서버 설정throw_on_unknown_workload이 추가되었습니다. 이 설정은 모든 쿼리가 워크로드 스케줄링을 사용하도록 강제하는 데 유용합니다. #75999 (Sergei Trifonov).- 새로운 Experimental Kafka 테이블 엔진이 Keeper 기능 플래그를 완전히 따르도록 했습니다. #76004 (János Benjamin Antal).
- 불필요한 경우 ARRAY JOIN에서 서브컬럼을 getSubcolumn으로 재작성하지 않습니다. #76018 (Pavel Kruglov).
- 테이블 로드 중 coordination 오류가 발생하면 재시도합니다. #76020 (Alexander Tokmakov).
system.warnings테이블을 개선하고, 추가·업데이트·제거할 수 있는 동적 경고 메시지 몇 가지를 도입했습니다. #76029 (Bharat Nallan).- SYSTEM FLUSH LOGS에서 개별 로그를 플러시할 수 있도록 지원합니다. #76132 (Raúl Marín).
/binaryserver 페이지가 개선되었습니다. Morton 곡선 대신 Hilbert 곡선을 사용합니다. 정사각형 안에 512 MB 분량의 주소를 표시해 정사각형이 더 잘 채워지도록 했습니다(이전 버전에서는 주소가 정사각형의 절반만 채웠습니다). 함수 이름보다 라이브러리 이름에 더 가까운 주소를 기준으로 색을 표시합니다. 영역 밖으로도 조금 더 스크롤할 수 있습니다. #76192 (Alexey Milovidov).- 이 PR에서는 모든
DROP작업이 순서상 먼저 와야 하므로ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES쿼리를 실행할 수 없게 됩니다. #76242 (pufit). - SYNC REPLICA 관련 다양한 개선 사항(더 명확한 오류 메시지, 개선된 테스트, 무결성 검사). #76307 (Azat Khuzhin).
- TOO_MANY_SIMULTANEOUS_QUERIES 오류가 발생하면 ON CLUSTER 쿼리를 재시도합니다. #76352 (Patrick Galbraith).
output_format_pretty_max_rows의 기본값을 10000에서 1000으로 변경했습니다. 사용성 측면에서 이 편이 더 낫다고 생각합니다. #76407 (Alexey Milovidov).- 읽기 전용 MergeTree 테이블의 갱신을 지원합니다. #76467 (Alexey Milovidov).
- S3로 멀티파트 복사하는 중 Access Denied로 백업이 실패할 때 올바른 폴백을 사용합니다. 서로 다른 자격 증명을 사용하는 버킷 간에 백업을 수행하면 멀티파트 복사에서 Access Denied 오류가 발생할 수 있습니다. #76515 (Antonio Andelic).
- ClickHouse 서버 종료 속도 개선(2.5초 지연 제거). #76550 (Azat Khuzhin).
- system.errors에 query_id를 추가했습니다. 관련 티켓: #75815. #76581 (Vladimir Baikov).
- librdkafka를 버전 2.8.0으로 업그레이드하고 Kafka 테이블의 종료 시퀀스를 개선하여 테이블 삭제 및 server 재시작 시 발생하는 지연을 줄였습니다. 이제
engine=Kafka는 테이블이 삭제될 때 더 이상 consumer group에서 명시적으로 탈퇴하지 않습니다. 대신 consumer는 비활성 상태가session_timeout_ms(기본값: 45초) 동안 이어진 후 자동으로 제거될 때까지 그룹에 남아 있습니다. #76621 (filimonov). - S3 요청 설정에 대한 유효성 검사를 수정했습니다. #76658 (Vitaly Baranov).
- ReadBufferFromS3 및 기타 원격 읽기 버퍼의 과도한 할당을 방지하고, 메모리 사용량을 절반으로 줄였습니다. #76692 (Sema Checherinda).
- View에서 JSON 타입과 서브컬럼 읽기를 지원합니다. #76903 (Pavel Kruglov).
- UInt128을 IPv6로 변환하는 지원이 추가되었습니다. 이를 통해 IPv6에서
bitAnd연산과 산술 연산을 수행한 뒤 다시 IPv6로 변환할 수 있습니다. #76752를 해결합니다. 또한 IPv6에 대한bitAnd연산 결과도 다시 IPv6로 변환할 수 있습니다. 참조: https://github.com/ClickHouse/ClickHouse/pull/57707. #76928 (Muzammil Abdul Rehman). server_settings또는settings와 같은 시스템 테이블에는 유용한default값 컬럼이 있습니다.merge_tree_settings와replicated_merge_tree_settings에서만 해당 컬럼이 활성화되어 있지 않습니다. #76942 (Diego Nieto).- 기본적으로 Variant 유형 내부의 텍스트 형식에서는 특수 Bool 값을 파싱하지 않습니다. 이 기능은 설정
allow_special_bool_values_inside_variant를 사용해 활성화할 수 있습니다. #76974 (Pavel Kruglov). - 세션 수준과 서버 수준에서 낮은 우선순위 쿼리의 작업별 대기 시간을 설정할 수 있도록 지원합니다. #77013 (VicoWu).
CurrentMetrics::QueryPreempted와 동일한 로직의ProfileEvents::QueryPreempted가 추가되었습니다. #77015 (VicoWu).- 이전에는 복제된 데이터베이스가 쿼리에 지정된 자격 증명을 로그에 출력할 수 있었습니다. 이 문제는 수정되었습니다. 이로써 다음 이슈가 해결되었습니다: #77123. #77133 (Nikita Mikhaylov).
- zstd를 1.5.5에서 1.5.7로 업데이트했으며, 이 버전에는 상당한 성능 개선이 포함되어 있습니다. #77137 (Pradeep Chhetri).
- plain_rewritable 디스크에서 ALTER TABLE DROP PARTITION을 허용합니다. #77138 (Julia Kartseva).
- zero-copy 복제의 경우, 머지/뮤테이션 실행 전에 part 크기와 관계없이 최대 500ms까지 무작위로 대기하는 기능이 추가되었습니다. #77165 (Alexey Katsman).
TRUNCATE를INTO OUTFILE과 함께 사용할 때 원자적 이름 변경을 지원합니다. #70323를 해결합니다. #77181 (Onkar Deshpande).- Postgres의 CHARACTER, CHAR 및 BPCHAR에는 FixedString을 사용합니다. #77304 (Pablo Marcos).
- 스토리지/테이블 함수 설정
iceberg_metadata_file_path으로 Iceberg에서 읽을 메타데이터 파일을 명시적으로 지정할 수 있게 했습니다. #47412을 수정했습니다. #77318 (alesapin). - 데이터베이스의 메타데이터 파일을 저장하기 위한 원격 디스크 사용을 지원합니다. #77365 (Tuan Pham Anh).
- JSON 데이터 타입 값 비교를 구현했습니다. 이제 JSON 객체는 맵과 마찬가지로 비교할 수 있습니다. #77397 (Pavel Kruglov).
- 변경이 취소되었습니다. #77399 (Yarik Briukhovetskyi).
- Backup/복원 설정
allow_s3_native_copy가 이제 3가지 값을 지원합니다: -False- S3 네이티브 복사를 사용하지 않습니다; -True(이전 기본값) - ClickHouse가 먼저 S3 네이티브 복사를 시도하고, 실패하면 읽기+쓰기 방식으로 폴백합니다; -'auto'(새 기본값) - ClickHouse가 먼저 원본과 대상의 자격 증명을 비교합니다. 자격 증명이 같으면 S3 네이티브 복사를 시도한 뒤 읽기+쓰기 방식으로 폴백할 수 있습니다. 자격 증명이 다르면 곧바로 읽기+쓰기 방식을 사용합니다. #77401 (Vitaly Baranov). - plain_rewritable 디스크에서 ALTER TABLE … ATTACH|DETACH|MOVE|REPLACE PARTITION을 지원합니다. #77406 (Julia Kartseva).
- 스키핑 인덱스 캐시가 롤백되었습니다. #77447 (Nikita Mikhaylov).
- Wide 파트의 JSON 컬럼 프리페치 중 메모리 사용량을 줄였습니다. #77640 (Pavel Kruglov).
- DeltaLake 테이블 엔진의 delta kernel에서 AWS 세션 토큰과 환경 자격 증명 사용을 지원합니다. #77661 (Kseniia Sumarokova).
additional_table_filters설정 내에서 쿌리 매개변수를 지원합니다. 이 변경 후에는 다음 쿼리가 성공적으로 실행됩니다:. #77680 (wxybear).- 사용자 정의 함수(UDF)는 이제 XML 정의의 새 태그를 통해 결정적(deterministic)으로 지정할 수 있습니다. 또한 이제 쿼리 캐시는 쿼리 내에서 호출된 UDF가 결정적인지 확인하며, 그럴 경우 쿼리 결과를 캐시합니다. (이슈 #59988). #77769 (Jimmy Aguilar Mena).
- Buffer 테이블 엔진 매개변수에 대한 유효성 검사가 추가되었습니다. #77840 (Pervakov Grigorii).
- hdfs pread를 활성화하거나 비활성화하는 구성
enable_hdfs_pread를 추가했습니다. #77885 (kevinyhzou). - ZooKeeper ‘multi’ 읽기 및 쓰기 요청 수에 대한 profile events를 추가했습니다. #77888 (JackyWoo).
- disable_insertion_and_mutation이 켜져 있어도 임시 테이블(temp table) 생성 및 삽입을 허용합니다. #77901 (Xu Jia).
- max_insert_delayed_streams_for_parallel_write 값을 100으로 낮췄습니다. #77919 (Azat Khuzhin).
max_merge_delayed_streams_for_parallel_write를 사용해 머지 작업이 병렬로 플러시할 수 있는 컬럼 수를 설정하는 기능을 추가했습니다(이를 통해 S3에 대한 수직 병합의 메모리 사용량을 약 25배 줄일 수 있습니다). #77922 (Azat Khuzhin).- ‘yyy’와 같은 Joda 문법의 연도 파싱 문제를 수정했습니다. #77973 (李扬).
- MergeTree 테이블의 파트를 ATTACH할 때는 해당 block 순서대로 수행되며, 이는 ReplacingMergeTree와 같은 특수한 머지 알고리즘에서 중요합니다. 이로써 #71009가 해결됩니다. #77976 (Alexey Milovidov).
- 이제 쿼리 마스킹 규칙은 일치가 발생하면 LOGICAL_ERROR를 발생시킬 수 있습니다. 이를 통해 미리 정의한 비밀번호가 로그 어디에서든 노출되고 있는지 확인하는 데 도움이 됩니다. #78094 (Nikita Mikhaylov).
- MySQL과의 호환성을 개선하기 위해
information_schema.tables에index_length_column컬럼이 추가되었습니다. #78119 (Paweł Zakrzewski). - 새로운 메트릭 2개(
TotalMergeFailures및NonAbortedMergeFailures)를 도입했습니다. 이 메트릭은 짧은 시간 동안 머지 실패가 지나치게 많이 발생하는 경우를 감지하는 데 필요합니다. #78150 (Miсhael Stetsyuk). - path 스타일에서 key를 지정하지 않았을 때 발생하던 잘못된 S3 URI 파싱 문제를 수정했습니다. #78185 (Arthur Passos).
BlockActiveTime,BlockDiscardTime,BlockWriteTime,BlockQueueTime,BlockReadTime비동기 메트릭의 잘못된 값을 수정했습니다(변경 전에는 1초가 0.001로 잘못 보고됨). #78211 (filimonov).- StorageS3(Azure)Queue에서 materialized view로 푸시하는 중 발생하는 오류에 대해
loading_retries제한을 따르도록 수정했습니다. 이전에는 이러한 오류가 무기한으로 재시도되었습니다. #78313 (Kseniia Sumarokova). - StorageDeltaLake의 delta-kernel-rs 구현에서 성능 및 진행률 표시줄을 개선했습니다. #78368 (Kseniia Sumarokova).
- 벡터 유사성 인덱스는 메인 메모리를 최대 2배까지 과다 할당할 수 있었습니다. 이 수정으로 메모리 할당 전략을 개선해 메모리 사용량을 줄이고 벡터 유사성 인덱스 캐시의 효율을 높였습니다. (이슈 #78056). #78394 (Shankar Iyer).
- 스키마 유형을 지정하는
schema_type설정이system.metric_log테이블에 도입되었습니다. 허용되는 스키마는 세 가지입니다:wide— 현재 스키마로, 각 메트릭/이벤트가 별도의 컬럼에 저장됩니다(개별 컬럼 읽기에 가장 효율적임),transposed—system.asynchronous_metric_log와 유사하게 메트릭/이벤트를 행으로 저장하는 방식, 그리고 가장 흥미로운transposed_with_wide_view—transposed스키마로 기본 테이블을 생성하되, 쿼리를 기본 테이블로 변환하는wide스키마의 VIEW도 함께 도입합니다.transposed_with_wide_view에서는 VIEW의 subsecond 해상도가 지원되지 않으며,event_time_microseconds는 하위 호환성을 위한 alias일 뿐입니다. #78412 (alesapin). - 런타임 디스크에서
include,from_env,from_zk를 지원합니다. #78177을 해결합니다. #78470 (Kseniia Sumarokova). - Iceberg 테이블 함수와 엔진에서 루트 metadata.json 파일을 찾을 수 있는 여러 편리한 방법을 추가했습니다. #78455를 종료합니다. #78475 (Daniil Ivanik).
- Delta Lake에서 파티션 프루닝을 지원합니다. #78486 (Kseniia Sumarokova).
- ClickHouse에서 SSH 프로토콜의 password 기반 인증을 지원합니다. #78586 (Nikita Mikhaylov).
- 장시간 실행되는 뮤테이션에 대해
system.warnings테이블에 동적으로 경고를 추가했습니다. #78658 (Bharat Nallan). - CPU에 심각한 과부하가 걸리면 연결을 끊습니다. 판단은 대기 시간(
OSCPUWaitMicroseconds)과 사용 시간(OSCPUVirtualTimeMicroseconds)의 비율을 기준으로 합니다. 이 비율이min_os_cpu_wait_time_ratio_to_drop_connection와max_os_cpu_wait_time_ratio_to_drop_connection사이이면, 일정 확률로 쿼리가 중단됩니다. #78778 (Alexey Katsman). - Hive 파티셔닝에서 빈 값을 허용합니다. #78816 (Arthur Passos).
BFloat16의IN절 타입 강제 변환 문제를 수정했습니다(즉, 이제SELECT toBFloat16(1) IN [1, 2, 3];는1을 반환합니다). #78754를 해결했습니다. #78839 (Raufs Dunamalijevs).- MergeTree에서
disk=이 설정된 경우 다른 디스크의 파트는 확인하지 않습니다. #78855 (Azat Khuzhin). system.query_log의used_data_type_families에 있는 데이터 타입을 표준화했습니다. #78972 (Kseniia Sumarokova).
버그 수정(공식 안정 릴리스에서 사용자에게 보이는 오작동)
- keeper-client로 SEQUENTIAL 노드를 생성할 수 없던 문제를 수정했습니다. #64177 (Duc Canh Le).
- 상위 스코프의 식별자 해석 문제를 수정했습니다. WITH 절에서 표현식에 별칭을 사용하는 것을 허용했습니다. #58994를 수정했습니다. #62946를 수정했습니다. #63239를 수정했습니다. #65233를 수정했습니다. #71659를 수정했습니다. #71828를 수정했습니다. #68749를 수정했습니다. #66143 (Dmitry Novik).
- PositionImpl::vectorVector의 잘못된 문자 수 계산을 수정했습니다. #71003 (思维).
- negate 함수의 단조성 문제를 수정했습니다. 이전 버전에서는
x가 기본 키(primary key)인 경우 쿼리select * from a where -x = -42;가 잘못된 결과를 반환할 수 있습니다. #71440 (Michael Kolupaev). - 액세스 엔터티에 대한
RESTORE작업은 부분적으로 취소된 권한이 처리되지 않아 필요 이상으로 많은 권한이 필요했습니다. 이 PR은 이 문제를 수정합니다. #71853를 종료합니다. #71958 (pufit). ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE이후 일시 중지가 발생하지 않도록 합니다. 백그라운드 작업 스케줄링에 사용할 올바른 설정을 가져옵니다. #72024 (Aleksei Filatov).- arrayIntersect에서 빈 tuple 처리 문제를 수정했습니다. 이로써 #72578 문제가 해결됩니다. #72581 (Amos Bird).
- 일부 입력 및 출력 형식(예: Parquet, Arrow)에서 빈 튜플 처리 문제를 수정했습니다. #72616 (Michael Kolupaev).
- 와일드카드 데이터베이스/테이블을 대상으로 하는 컬럼 수준의 GRANT SELECT/INSERT 문은 이제 오류를 반환합니다. #72646 (Johann Gan).
- 대상 액세스 엔터티에 암시적으로 부여된 권한 때문에 사용자가
REVOKE ALL ON *.*를 실행할 수 없던 문제를 수정했습니다. #72872 (pufit). - 비동기 분산 INSERT에서 대기 중인 배치를 처리하는 중
No such file or directory등의 이유로 멈추는 문제를 수정했습니다. #72939 (Azat Khuzhin). - Azure SAS 토큰 지원이 추가되었습니다. #72959 (Azat Khuzhin).
- formatDateTime 스칼라 함수에서 양수 시간대 포맷팅 문제를 수정했습니다. #73091 (ollidraese).
- PROXYv1를 통해 연결되고
auth_use_forwarded_address가 설정된 경우 소스 포트가 올바르게 반영되도록 수정했습니다 - 이전에는 프록시 포트가 잘못 사용되었습니다.currentQueryID()함수를 추가했습니다. #73095 (Yakov Olkhovskiy). - TCPHandler에서 NativeWriter로 포맷 설정을 전달하여
output_format_native_write_json_as_string과 같은 설정이 올바르게 적용되도록 수정했습니다. #73179 (Pavel Kruglov). - 잘못된 접두사로 인해 JSON 하위 객체 서브컬럼을 읽지 못하던 문제를 수정했습니다. #73182 (Pavel Kruglov).
- StorageObjectStorageQueue에서 발생하던 충돌을 수정했습니다. #73274 (Kseniia Sumarokova).
- 서버 종료 중 갱신 가능 구체화 뷰에서 드물게 발생하던 충돌을 수정했습니다. #73323 (Michael Kolupaev).
- 함수
formatDateTime의%f플레이스홀더는 이제 무조건 6자리의 (소수점 이하 초) 숫자를 생성합니다. 이로써 동작이 MySQLDATE_FORMAT함수와 호환됩니다. 이전 동작은 설정formatdatetime_f_prints_scale_number_of_digits = 1을 사용해 복원할 수 있습니다. #73324 (ollidraese). - 암시적 Date → DateTime 변환에 포화 동작을 적용하여 인덱스 분석 중 datetime 변환을 개선했습니다. 이를 통해 datetime 범위 제한으로 인해 발생할 수 있는 인덱스 분석의 부정확성을 해결합니다. 이 변경은 #73307을 수정합니다. 또한 기본값인
date_time_overflow_behavior = 'ignore'일 때의 명시적toDateTime변환도 수정합니다. #73326 (Amos Bird). s3스토리지와 테이블 함수에서 읽을 때_etag컬럼 기준 필터링 문제가 수정되었습니다. #73353 (Anton Popov).JOIN ON표현식에서IN (subquery)를 사용할 때, 기존 분석기에서 발생하던Not-ready Set is passed as the second argument for function 'in'오류를 수정했습니다. #73382 (Nikolai Kochetov).- Dynamic 및 JSON 컬럼의 squashin 준비 로직을 수정했습니다. 이전에는 일부 경우 타입/경로 제한에 도달하지 않았더라도 새로운 타입이 shared variant/shared data에 삽입될 수 있었습니다. #73388 (Pavel Kruglov).
- 과도하게 큰 메모리 할당을 방지하기 위해 타입 바이너리 디코딩 중 손상된 크기 값을 확인합니다. #73390 (Pavel Kruglov).
- 병렬 레플리카가 활성화된 단일 레플리카 클러스터에서 읽는 경우 발생하던 논리적 오류를 수정했습니다. #73403 (Michael Kolupaev).
- ZooKeeper 및 이전 버전의 Keeper에서 발생하던 ObjectStorageQueue 문제를 수정했습니다. #73420 (Antonio Andelic).
- 기본적으로 hive 파티셔닝이 활성화되도록 하는 데 필요한 수정 사항을 구현했습니다. #73479 (Yarik Briukhovetskyi).
- 벡터 유사도 인덱스 생성 시 발생하는 데이터 레이스를 수정했습니다. #73517 (Antonio Andelic).
- 딕셔너리 소스에 잘못된 데이터를 가진 함수가 포함된 경우 발생하던 segfault를 수정했습니다. #73535 (Yarik Briukhovetskyi).
- S3(Azure)Queue 스토리지에서 실패한 삽입에 대한 재시도 문제를 수정했습니다. #70951을 종료합니다. #73546 (Kseniia Sumarokova).
LowCardinality요소를 가진 튜플에서 설정optimize_functions_to_subcolumns가 활성화된 경우 일부 상황에서 발생할 수 있는tupleElement함수 오류를 수정했습니다. #73548 (Anton Popov).- 범위 지정이 뒤따르는 enum glob 파싱 문제를 수정했습니다. #73473. #73569 (Konstantin Bogdanov).
- 비복제 테이블의 서브쿼리에서 parallel_replicas_for_non_replicated_merge_tree가 무시되던 문제를 수정했습니다. #73584 (Igor Nikonov).
- 작업을 스케줄링할 수 없을 때 발생하는
std::logical_error수정 사항입니다. 스트레스 테스트 중 발견되었습니다. 예시 stacktrace:2024.12.19 02:05:46.171833 [ 18190 ] {01f0daba-d3cc-4898-9e0e-c2c263306427} <Fatal> : Logical error: 'std::exception. Code: 1001, type: std::__1::future_error, e.what() = The associated promise has been destructed prior to the associated state becoming ready. (version 25.1.1.18724), Stack trace:.#73629 (Alexander Gololobov). - 분산 쿼리에서 잘못된 처리 단계로 인한 논리적 오류를 방지하기 위해
EXPLAIN SYNTAX에서는 쿌리를 해석하지 않도록 변경했습니다. #65205를 수정했습니다. #73634 (Dmitry Novik). - Dynamic 컬럼에서 발생할 수 있는 데이터 불일치 문제를 수정했습니다. 발생할 수 있는 논리 오류
Nested columns sizes are inconsistent with local_discriminators column size를 수정했습니다. #73644 (Pavel Kruglov). FINAL및SAMPLE이 포함된 쿼리에서 발생하던NOT_FOUND_COLUMN_IN_BLOCK문제를 수정했습니다.CollapsingMergeTree에서FINAL을 사용하는 SELECT의 잘못된 결과를 수정하고FINAL최적화를 활성화했습니다. #73682 (Anton Popov).- LIMIT BY COLUMNS에서 발생하는 충돌을 수정했습니다. #73686 (Raúl Marín).
- 일반 프로젝션 사용이 강제된 경우, 쿼리가 정의된 프로젝션과 정확히 동일함에도 프로젝션이 선택되지 않아 오류가 발생하던 버그를 수정했습니다. #73700 (Shichao Jin).
- Dynamic/Object 구조 역직렬화 문제를 수정했습니다. 이로 인해 CANNOT_READ_ALL_DATA 예외가 발생할 수 있었습니다. #73767 (Pavel Kruglov).
- 백업에서 파트를 복원할 때
metadata_version.txt는 건너뜁니다. #73768 (Vitaly Baranov). - #73737 문제를 수정했습니다. #73775 (zhanglistar).
- #72078를 수정했습니다 ( S3 Express Support 지원이 중단된 문제 ). #73777 (Sameer Tamsekar).
- CollapsingMergeTree 테이블에서 sign column 값이 잘못된 행의 머지를 허용합니다. #73864 (Christoph Wurm).
- 다음 오류를 수정했습니다.
Row 1: ────── hostname: c-test-wy-37-server-nlkyjyb-0.c-test-wy-37-server-headless.ns-test-wy-37.svc.cluster.local type: ExceptionWhileProcessing event_date: 2024-12-23 event_time: 2024-12-23 16:21:19 event_time_microseconds: 2024-12-23 16:21:19.824624 query_start_time: 2024-12-23 16:21:19 query_start_time_microseconds: 2024-12-23 16:21:19.747142 query_duration_ms: 77 read_rows: 1 read_bytes: 134 written_rows: 0 written_bytes: 0 result_rows: 0 result_bytes: 0 memory_usage: 7824 current_database: default query: CREATE DATABASE db0 formatted_query: normalized_query_hash: 7820917191074023511 -- 7.82 quintillion query_kind: Create databases: ['db0'] tables: [] columns: [] partitions: [] projections: [] views: [] exception_code: 170 exception: Code: 170. DB::Exception: Bad get: has Null, requested Int64: While executing DDLOnClusterQueryStatus. (BAD_GET) (version 25.1.1.19134 (official build)) stack_trace: 0. ./build_docker/./src/Common/Exception.cpp:107: DB::Exception::Exception(DB::Exception::MessageMasked&&, int, bool) @ 0x000000000da5e53b 1. DB::Exception::Exception(PreformattedMessage&&, int) @ 0x00000000088aca4c 2. DB::Exception::Exception<std::basic_string_view<char, std::char_traits<char>>, std::basic_string_view<char, std::char_traits<char>>>(int, FormatStringHelperImpl<std::type_identity<std::basic_string_view<char, std::char_traits<char>>>::type, std::type_identity<std::basic_string_view<char, std::char_traits<char>>>::type>, std::basic_string_view<char, std::char_traits<char>>&&, std::basic_string_view<char, std::char_traits<char>>&&) @ 0x00000000088bae8b 3. auto& DB::Field::safeGet<long>() & @ 0x0000000008a3c748 4. ./src/Core/Field.h:484: DB::ColumnVector<long>::insert(DB::Field const&) @ 0x0000000012e44c0f 5. ./build_docker/./src/Interpreters/DDLOnClusterQueryStatusSource.cpp:53: DB::DDLOnClusterQueryStatusSource::generateChunkWithUnfinishedHosts() const @ 0x0000000012a40214 6. ./build_docker/./src/Interpreters/DDLOnClusterQueryStatusSource.cpp:104: DB::DDLOnClusterQueryStatusSource::handleTimeoutExceeded() @ 0x0000000012a41640 7. ./build_docker/./src/Interpreters/DDLOnClusterQueryStatusSource.cpp:109: DB::DDLOnClusterQueryStatusSource::stopWaitingOfflineHosts() @ 0x0000000012a41be9 8. ./build_docker/./src/Interpreters/DistributedQueryStatusSource.cpp:182: DB::DistributedQueryStatusSource::generate() @ 0x0000000011feb3bf 9. ./build_docker/./src/Processors/ISource.cpp:139: DB::ISource::tryGenerate() @ 0x0000000014148f5b 10. ./build_docker/./src/Processors/ISource.cpp:108: DB::ISource::work() @ 0x0000000014148c47 11. ./build_docker/./src/Processors/Executors/ExecutionThreadContext.cpp:49: DB::ExecutionThreadContext::executeTask() @ 0x0000000014164fc7 12. ./build_docker/./src/Processors/Executors/PipelineExecutor.cpp:290: DB::PipelineExecutor::executeStepImpl(unsigned long, std::atomic<bool>*) @ 0x00000000141577e5. #73876 (Tuan Pham Anh). - 중첩된 튜플에 명시적인 이름 (‘keys’, ‘values’)이 없는
Map을 생성할 수 있어map()타입 비교가 간헐적으로 실패하던 문제를 수정했습니다. #73878 (Yakov Olkhovskiy). - GROUP BY ALL 절을 해석할 때 윈도우 함수를 무시합니다. #73501을 수정했습니다. #73916 (Dmitry Novik).
- 클라이언트-서버 통신에서 Native 형식 설정이 올바르게 전달되도록 수정했습니다. #73924 (Pavel Kruglov).
- 암시적 권한 문제를 수정했습니다(이전에는 와일드카드처럼 동작했습니다). #73932 (Azat Khuzhin).
- 중첩된 맵 생성 시 높은 메모리 사용량 문제를 수정했습니다. #73982 (Pavel Kruglov).
- 빈 키가 포함된 중첩 JSON 파싱 문제를 수정합니다. #73993 (Pavel Kruglov).
- 수정: 다른 별칭에서 참조되고 역순으로 선택되는 경우, 별칭이 프로젝션에 추가되지 않을 수 있던 문제를 수정했습니다. #74033 (Yakov Olkhovskiy).
- plain_rewritable 메타데이터를 사용하는 디스크는 여러 server 인스턴스 간에 공유할 수 있습니다. 한 인스턴스가 메타데이터 객체를 읽는 동안 다른 인스턴스가 이를 수정하는 상황이 예상됩니다. Azure Storage에서 plain_rewritable를 초기화하는 동안 발생하는 객체를 찾을 수 없음 오류는 S3에 구현된 동작과 유사하게 무시됩니다. #74059 (Julia Kartseva).
- enum 타입과 빈 테이블에서
any및anyLast의 동작을 수정했습니다. #74061 (Joanna Hulboj). - 사용자가 Kafka 테이블 엔진에서 키워드 인수를 지정할 때 발생하던 문제를 수정했습니다. #74064 (Yarik Briukhovetskyi).
- “s3queue_” 접두사가 있는 형식과 없는 형식 사이에서 Storage
S3Queue설정을 변경할 때 발생하던 문제를 수정했습니다. #74075 (Kseniia Sumarokova). - 설정
allow_push_predicate_ast_for_distributed_subqueries를 추가했습니다. 이를 통해 분석기에서 분산 쿼리에 대한 AST 기반 프레디케이트 푸시다운을 사용할 수 있습니다. 이는 쿼리 계획 직렬화를 사용하는 분산 쿼리가 지원될 때까지 적용하는 임시 해결책입니다. #66878 #69472 #65638 #68030 #73718을 해결합니다. #74085 (Nikolai Kochetov). - #73095 이후 forwarded_for 필드에 포트가 포함될 수 있어, 포트가 포함된 호스트 이름을 해석할 수 없게 되는 문제를 수정했습니다. #74116 (Yakov Olkhovskiy).
ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...)의 잘못된 포맷을 수정했습니다. #74126 (Han Fei).- 이슈 #66112 수정. #74128 (Anton Ivashkin).
- 이제
CREATE TABLE에서Loop를 테이블 엔진으로 더 이상 사용할 수 없습니다. 이 조합은 이전에 segfault를 유발했습니다. #74137 (Yarik Briukhovetskyi). - postgresql 및 sqlite 테이블 함수에서 SQL 인젝션을 방지하기 위한 보안 취약점을 수정했습니다. #74144 (Pablo Marcos).
- 압축된 Memory 엔진 테이블에서 서브컬럼을 읽을 때 발생하던 크래시를 수정했습니다. #74009. #74161 (Nikita Taranov).
- system.detached_tables에 대한 쿼리 수행 중 발생하던 무한 루프를 수정했습니다. #74190 (Konstantin Morozov).
- 파일을 Failed로 설정하는 과정에서 s3queue의 논리 오류를 수정했습니다. #74216 (Kseniia Sumarokova).
- 일부 스토리지에서 지원되지 않는 타입을 검사합니다. #74218 (Pavel Kruglov).
- macOS의 PostgreSQL 인터페이스에서
INSERT INTO SELECT쿼리 수행 중 발생하던 충돌을 수정했습니다(이슈 #72938). #74231 (Artem Yurov). - 기준 백업에서
RESTORE할 때의 네이티브 복사 설정(allow_s3_native_copy/allow_azure_native_copy)을 수정합니다. #74286 (Azat Khuzhin). - 데이터베이스에서 분리된 테이블 수가 max_block_size의 배수일 때 발생하던 문제를 수정했습니다. #74289 (Konstantin Morozov).
- 원본과 대상의 자격 증명이 서로 다른 경우 ObjectStorage(즉, S3)를 통한 복사 문제를 수정했습니다. #74331 (Azat Khuzhin).
- 복제된 데이터베이스의 초기화되지 않은 max_log_ptr를 수정했습니다. #74336 (Konstantin Morozov).
- GCS의 네이티브 복사에서 “JSON API의 “Rewrite 메서드 사용” 감지 문제를 수정했습니다. #74338 (Azat Khuzhin).
- 인터벌을 삽입할 때 발생하던 비정상 종료를 수정했습니다(이슈 #74299). #74478 (NamNguyenHoai).
- 집계 프로젝션에서
count(nullable)를 사용할 때 프로젝션 분석이 잘못되던 문제를 수정했습니다. 이로써 #74495가 해결됩니다. 또한 이 PR에서는 프로젝션이 사용되는 이유 또는 사용되지 않는 이유를 더 명확히 하기 위해 프로젝션 분석 관련 로그도 일부 추가했습니다. #74498 (Amos Bird). BackgroundMergesAndMutationsPoolSize의 잘못된 계산을 수정했습니다(실제 값의 2배로 계산되던 문제). #74509 (alesapin).- 클러스터 디스커버리를 활성화했을 때 Keeper watch가 누수되던 버그를 수정했습니다. #74521 (RinChanNOW).
- 상수 JSON 리터럴 포맷팅을 수정했습니다. 이전에는 쿼리를 다른 서버로 전송할 때 구문 오류가 발생할 수 있었습니다. #74533 (Pavel Kruglov).
- UBSan에서 보고한 mem alignment 문제를 수정했습니다 #74512. #74534 (Arthur Passos).
- 테이블 생성 중 발생하는 KeeperMap 동시 정리 문제를 수정했습니다. #74568 (Antonio Andelic).
- 올바른 쿼리 결과를 보존하기 위해
EXCEPT또는INTERSECT가 포함된 경우 서브쿼리에서 사용되지 않는 프로젝션 컬럼을 제거하지 않도록 수정했습니다. #73930을 수정했습니다. #66465를 수정했습니다. #74577 (Dmitry Novik). - 암시적 프로젝션이 활성화된 상태에서 상수 파티션 표현식을 사용할 때 손상되던 CREATE 쿼리를 수정했습니다. 이로써 #74596 문제가 해결됩니다. #74634 (Amos Bird).
Tuple컬럼이 있고 희소 직렬화가 활성화된 테이블 간INSERT SELECT쿼리에서 발생하던 문제를 수정했습니다. #74698 (Anton Popov).right함수가 상수 음수 offset에서 잘못 동작합니다. #74701 (Daniil Ivanik).- 클라이언트 측의 잘못된 압축 해제로 인해 gzip 압축된 데이터 삽입이 때때로 실패하던 문제를 수정했습니다. #74707 (siyuan).
- INSERT가 예외로 종료된 후에도 연결이 손상된 상태로 남지 않도록 수정했습니다. #74740 (Azat Khuzhin).
- 중간 상태로 남아 있는 연결을 재사용하지 않도록 수정했습니다. #74749 (Azat Khuzhin).
- 와일드카드 권한 부여를 사용하는 부분적 권한 회수는 예상보다 더 많은 권한을 제거할 수 있었습니다. #74263을 해결합니다. #74751 (pufit).
- 유형 이름이 대문자가 아닐 때 JSON 타입 선언을 파싱하는 중 발생하던 충돌을 수정했습니다. #74784 (Pavel Kruglov).
- Keeper 수정: 디스크에서 로그 항목을 읽는 오류를 수정했습니다. #74785 (Antonio Andelic).
- SYSTEM REFRESH/START/STOP VIEW의 권한 부여 검사 로직을 수정했습니다. 이제 특정 뷰에 대한 쿼리를 실행할 때
*.*에 대한 이 권한은 필요하지 않으며, 해당 뷰에 대한 권한만 있으면 됩니다. #74789 (Alexander Tokmakov). hasColumnInTable함수가 alias 컬럼을 고려하지 않던 문제를 수정해, alias 컬럼에서도 작동하도록 했습니다. #74841 (Bharat Nallan).- Keeper: 연결이 수립되기 전에 종료된 경우 발생하던 logical_error를 수정했습니다. #74844 (Michael Kolupaev).
AzureBlobStorage를 사용하는 테이블이 있을 때 서버가 시작되지 않던 문제를 수정했습니다. 이제 테이블은 Azure에 요청을 보내지 않고 로드됩니다. #74880 (Alexey Katsman).- BACKUP 및 RESTORE 작업 시
query_log에used_privileges및missing_privileges필드가 누락되던 문제를 수정했습니다. #74887 (Alexey Katsman). - Azure Blob Storage에서 빈 컬럼이 있는 테이블의 데이터 파트를 머지하는 중 발생하던 FILE_DOESNT_EXIST 오류를 수정했습니다. #74892 (Julia Kartseva).
- 임시 테이블을 조인할 때 프로젝션 컬럼 이름을 수정하고, #68872를 해결했습니다. #74897 (Vladimir Cherkasov).
- HDFS select 요청 중 SASL 오류가 발생하면 HDFS krb 티켓을 갱신합니다. #74930 (inv2004).
- startup_scripts의 복제된 데이터베이스 관련 쿼리를 수정했습니다. #74942 (Azat Khuzhin).
- null-safe 비교를 사용할 때 JOIN ON 절에서 표현식 유형에 대한 별칭 처리와 관련된 문제를 수정했습니다. #74970 (Vladimir Cherkasov).
- remove 작업이 실패한 경우 part의 state를 deleting에서 outdated로 되돌립니다. #74985 (Sema Checherinda).
- 이전 버전에서는 스칼라 서브쿼리가 있을 때 HTTP 헤더가 기록되기 전, 즉 데이터 포맷을 초기화하는 단계에서 서브쿼리 처리 중 누적된 진행 상황을 기록하기 시작했습니다. 이로 인해 X-ClickHouse-QueryId, X-ClickHouse-Format, Content-Type과 같은 HTTP 헤더가 손실되었습니다. #74991 (Alexey Milovidov).
database_replicated_allow_replicated_engine_arguments=0일 때의CREATE TABLE AS...쿼리를 수정했습니다. #75000 (Bharat Nallan).- INSERT 예외 발생 후 클라이언트의 연결이 비정상 상태로 남는 문제를 수정했습니다. #75030 (Azat Khuzhin).
- PSQL 복제 중 처리되지 않은 예외로 발생하던 충돌을 수정했습니다. #75062 (Azat Khuzhin).
- Sasl로 인해 모든 RPC 호출이 실패할 수 있는데, 이번 수정으로 krb5 ticker가 만료된 경우 호출을 다시 시도할 수 있게 되었습니다. #75063 (inv2004).
- 설정
optimize_function_to_subcolumns이 활성화된Array,Map,Nullable(..)컬럼에서 인덱스(프라이머리 및 세컨더리) 사용이 수정되었습니다. 이전에는 이러한 컬럼의 인덱스가 무시될 수 있었습니다. #75081 (Anton Popov). - 내부 테이블이 있는 구체화된 뷰(materialized view)를 생성할 때는 평탄화된 컬럼을 사용할 수 없으므로
flatten_nested를 비활성화했습니다. #75085 (Christoph Wurm). - forwarded_for 필드의 일부 IPv6 주소(예: ::ffff:1.1.1.1)가 잘못 해석되어 예외가 발생하고 클라이언트 연결이 끊어지던 문제를 수정했습니다. #75133 (Yakov Olkhovskiy).
- 널 허용 LowCardinality 데이터 타입의 nullsafe JOIN 처리를 수정했습니다. 이전에는
IS NOT DISTINCT FROM,<=>,a IS NULL AND b IS NULL OR a == b와 같은 nullsafe 비교를 사용하는JOIN ON절이 LowCardinality 컬럼에서 올바르게 동작하지 않았습니다. #75143 (Vladimir Cherkasov). - 새 분석기에서 사용되지 않는 보간이 포함된 쿼리 문제를 수정했습니다. #75173 (János Benjamin Antal).
- CTE와 함께 삽입할 때 발생하던 충돌 버그를 수정했습니다. #75188 (Shichao Jin).
- Keeper 수정: 로그 롤백 시 손상된 changelog에 기록하지 않도록 했습니다. #75197 (Antonio Andelic).
- 적절한 경우
BFloat16을 상위 타입으로 사용합니다. 이로써 #74404가 해결됩니다. #75236 (Nikita Mikhaylov). - any_join_distinct_right_table_keys 및 OR 연산이 포함된 JOIN ON에서 JOIN 결과에 예기치 않은 기본값이 나타나는 문제를 수정했습니다. #75262 (Vladimir Cherkasov).
- azureblobstorage 테이블 엔진의 자격 증명을 마스킹합니다. #75319 (Garrett Thomas).
- ClickHouse가 PostgreSQL, MySQL 또는 SQLite와 같은 외부 데이터베이스에 filter pushdown을 잘못 수행하던 문제를 수정했습니다. 이로써 #71423 문제가 해결되었습니다. #75320 (Nikita Mikhaylov).
- Protobuf 형식으로 출력하는 중이거나
SYSTEM DROP FORMAT SCHEMA CACHE쿼리를 병렬로 실행하는 중 발생할 수 있는 Protobuf 스키마 캐시 크래시를 수정했습니다. #75357 (Pavel Kruglov). - 병렬 레플리카 사용 시
HAVING의 필터가 푸시다운되면서 발생할 수 있는 논리적 오류 또는 초기화되지 않은 메모리 문제를 수정했습니다. #75363 (Vladimir Cherkasov). icebergS3,icebergAzure테이블 함수 및 테이블 엔진에서 민감한 정보를 숨기도록 했습니다. #75378 (Kseniia Sumarokova).TRIM함수에서 계산 결과가 빈 문자열인 trim 문자를 이제 올바르게 처리합니다. 예시:SELECT TRIM(LEADING concat('') FROM 'foo')(Issue #69922). #75399 (Manish Gill).- IOutputFormat의 데이터 레이스를 수정했습니다. #75448 (Pavel Kruglov).
- 분산 테이블에 대한 JOIN에서 Array 유형의 JSON 서브컬럼을 사용할 때 발생할 수 있는 오류
Elements ... and ... of Nested data structure ... (Array columns) have different array sizes를 수정했습니다. #75512 (Pavel Kruglov). - 잘못된 결과 버퍼 크기 계산을 수정했습니다. #70031을 해결했습니다. #75548 (Konstantin Bogdanov).
- allow_feature_tier와 compatibility MergeTree setting 사이의 상호작용 문제를 수정했습니다. #75635 (Raúl Marín).
- 파일 재처리가 다시 시도된 경우 system.s3queue_log의 processed_rows 값이 잘못 기록되던 문제를 수정했습니다. #75666 (Kseniia Sumarokova).
- materialized view가 URL 엔진에 쓰는 중 연결 문제가 발생할 때
materialized_views_ignore_errors설정을 따르도록 수정했습니다. #75679 (Christoph Wurm). MergeTree테이블에서 타입이 다른 컬럼 간에 여러 개의 비동기RENAME쿼리(alter_sync = 0)를 수행한 후 읽는 과정에서 드물게 발생하던 크래시를 수정했습니다. #75693 (Anton Popov).- 일부
UNION ALL쿼리에서 발생하던Block structure mismatch in QueryPipeline stream오류를 수정했습니다. #75715 (Nikolai Kochetov). - 해당 프로젝션의 PK 컬럼에
alter modify를 수행하면 프로젝션을 다시 빌드하도록 했습니다. 이전에는 프로젝션 PK에 사용된 컬럼에alter modify를 수행한 뒤select를 실행하면CANNOT_READ_ALL_DATA오류가 발생할 수 있었습니다. #75720 (Pavel Kruglov). - 분석기 사용 시 스칼라 서브쿼리에서
ARRAY JOIN의 잘못된 결과를 수정했습니다. #75732 (Nikolai Kochetov). DistinctSortedStreamTransform의 null 포인터 역참조 문제를 수정했습니다. #75734 (Nikita Taranov).allow_suspicious_ttl_expressions의 동작을 수정했습니다. #75771 (Aleksei Filatov).- 함수
translate에서 초기화되지 않은 메모리를 읽는 문제를 수정했습니다. 이로써 #75592가 해결되었습니다. #75794 (Alexey Milovidov). - Native 형식에서 JSON을 문자열로 포맷팅할 때 포맷 설정이 전파되도록 수정했습니다. #75832 (Pavel Kruglov).
- 설정 변경 이력에 v24.12에서 병렬 해시가 조인 알고리즘의 기본값으로 활성화되었음을 기록했습니다. 이는 v24.12보다 이전 호환성 수준으로 구성된 경우 ClickHouse가 계속 비병렬 해시를 사용해 조인을 수행함을 의미합니다. #75870 (Robert Schulze).
- 암묵적으로 추가된 min-max 인덱스가 있는 테이블을 새 테이블로 복사할 수 없었던 버그를 수정했습니다(이슈 #75677). #75877 (Smita Kulkarni).
clickhouse-library-bridge는 파일 시스템에서 임의의 라이브러리를 열 수 있으므로, 격리된 환경 내부에서만 실행하는 것이 안전합니다.clickhouse-server근처에서 실행될 때 발생할 수 있는 취약점을 방지하기 위해, 라이브러리 경로를 구성에 지정된 위치로 제한합니다. 이 취약점은 Arseniy Dugin이 ClickHouse Bug Bounty Program을 통해 발견했습니다. #75954 (Alexey Milovidov).- 일부 메타데이터에 JSON 직렬화를 사용했는데, 이는 실수였습니다. JSON은 문자열 리터럴 내부의 바이너리 데이터(0 바이트 포함)를 지원하지 않기 때문입니다. SQL 쿼리에는 바이너리 데이터와 유효하지 않은 UTF-8이 포함될 수 있으므로, 메타데이터 파일도 이를 지원해야 합니다. 한편, ClickHouse의
JSONEachRow및 유사한 포맷은 바이너리 데이터를 완벽하게 roundtrip할 수 있도록 JSON 표준에서 일부 벗어나는 방식으로 이 문제를 우회합니다. 자세한 배경은 여기에서 확인할 수 있습니다: https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790. 해결책은Poco::JSON라이브러리를 ClickHouse의 JSON 포맷 직렬화와 일관되게 만드는 것입니다. 이 변경으로 #73668이 해결됩니다. #75963 (Alexey Milovidov). Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED)오류를 DETACH PART 중 수정했습니다. #76039 (Aleksei Filatov).- 스토리지
S3Queue의 commit 제한 검사 로직을 수정했습니다. #76104 (Kseniia Sumarokova). - 자동 인덱스(
add_minmax_index_for_numeric_columns/add_minmax_index_for_string_columns)가 적용된 MergeTree 테이블을 ATTACH할 때 발생하던 문제를 수정했습니다. #76139 (Azat Khuzhin). - 작업의 부모 스레드에서 스택 트레이스(
enable_job_stack_trace설정)가 출력되지 않던 문제를 수정했습니다. 또한enable_job_stack_trace설정이 스레드에 올바르게 전파되지 않아 스택 트레이스 내용이 이 설정을 항상 준수하지 않던 문제를 수정했습니다. #76191 (Yakov Olkhovskiy). - big-endian 아키텍처에서 FixedString 사용 시 reinterpretAs 문제를 수정했습니다. #76253 (Azat Khuzhin).
- UUID와 테이블 이름 간 경쟁 상태로 인해 발생하는 각종 버그를 수정했습니다(예를 들어
RENAME과RESTART REPLICA사이의 경쟁 상태가 해결됩니다.SYSTEM RESTART REPLICA와 동시에RENAME이 수행되면 잘못된 레플리카가 재시작되거나, 테이블 중 하나가Table X is being restarted상태로 남을 수 있습니다). #76308 (Azat Khuzhin). - 시그널 핸들러에서 할당을 제거했습니다. #76446 (Nikita Taranov).
- eviction 중 발생하는 예기치 않은 오류에 대한 동적 파일 시스템 캐시 크기 조정 처리 문제를 수정했습니다. #76466 (Kseniia Sumarokova).
- 병렬 hash에서
used_flag초기화 문제를 수정했습니다. 이 문제로 서버가 충돌할 수 있었습니다. #76580 (Nikita Taranov). - 프로젝션 내에서
defaultProfiles()함수를 호출할 때 발생하던 논리 오류를 수정했습니다. #76627 (pufit). - 브라우저의 Web UI에서 대화형 basic auth를 요청하지 않도록 수정했습니다. #76319을 해결했습니다. #76637 (Alexey Milovidov).
- 분산 테이블에서 불리언 리터럴을 조회할 때 발생하던 THERE_IS_NO_COLUMN 예외를 수정했습니다. #76656 (Yakov Olkhovskiy).
- 테이블 디렉터리 내부의 하위 경로를 선택하는 방식이 더욱 정교해졌습니다. #76681 (Daniil Ivanik).
- PK에 하위 컬럼이 있는 테이블을 변경한 뒤 발생하는 오류
Not found column in block를 수정했습니다. https://github.com/ClickHouse/ClickHouse/pull/72644 이후에는 https://github.com/ClickHouse/ClickHouse/pull/74403도 필요합니다. #76686 (Nikolai Kochetov). - NULL 단락 평가 관련 성능 테스트를 추가하고 버그를 수정했습니다. #76708 (李扬).
- 최종화하기 전에 출력 쓰기 버퍼를 플러시합니다. 일부 출력 형식의 최종화 과정에서 발생하던
LOGICAL_ERROR를 수정했습니다. 예:JSONEachRowWithProgressRowOutputFormat. #76726 (Antonio Andelic). - MongoDB 바이너리 UUID 지원이 추가되었습니다(#74452) - 테이블 함수를 사용할 때 MongoDB에 대한 WHERE pushdown 문제가 수정되었습니다(#72210) - MongoDB의 바이너리 UUID가 ClickHouse의 UUID로만 파싱될 수 있도록 MongoDB-ClickHouse 유형 매핑이 변경되었습니다. 이를 통해 향후 모호성과 예기치 않은 동작을 방지할 수 있습니다. - 하위 호환성을 유지하면서 OID 매핑 문제가 수정되었습니다. #76762 (Kirill Nikiforov).
- JSON 서브컬럼 프리픽스를 병렬로 역직렬화할 때의 예외 처리 수정. #76809 (Pavel Kruglov).
- 음의 정수에서 lgamma 함수가 동작하는 방식을 수정했습니다. #76840 (Ilya Kataev).
- 명시적으로 정의된 기본 키에 대한 역방향 키 분석을 수정했습니다. #76654와 유사합니다. #76846 (Amos Bird).
- JSON 포맷에서 Bool 값의 pretty print 출력 문제를 수정했습니다. #76905 (Pavel Kruglov).
- async inserts 중 오류 발생 시 잘못된 JSON 컬럼 롤백으로 인해 발생할 수 있는 비정상 종료 문제를 수정했습니다. #76908 (Pavel Kruglov).
- 이전에는
multi_if가 계획 단계와 실제 실행 단계에서 서로 다른 타입의 컬럼을 반환할 수 있었습니다. 이로 인해 C++ 관점에서 코드가 정의되지 않은 동작을 유발했습니다. #76914 (Nikita Taranov). - MergeTree에서 상수 널 허용 키의 잘못된 직렬화를 수정했습니다. 이 수정으로 #76939가 해결됩니다. #76985 (Amos Bird).
BFloat16값 정렬 문제를 수정했습니다. 이로써 #75487이 해결되었습니다. 이로써 #75669이 해결되었습니다. #77000 (Alexey Milovidov).- part 일관성 검사에서 임시 서브컬럼을 건너뛰도록 검사 로직을 추가해, Variant 서브컬럼이 있는 JSON 관련 오동작을 수정했습니다. #72187. #77034 (Smita Kulkarni).
- 타입 불일치가 있는 경우 Values 형식의 템플릿을 파싱할 때 발생하던 충돌을 수정했습니다. #77071 (Pavel Kruglov).
- 기본 키에 하위 컬럼이 포함된 EmbeddedRocksDB 테이블은 생성할 수 없도록 변경했습니다. 이전에는 이러한 테이블을 생성할 수 있었지만
SELECT쿼리가 실패했습니다. #77074 (Pavel Kruglov). - 프레디케이트를 원격으로 푸시다운할 때 리터럴 타입이 제대로 반영되지 않아 발생하던 분산 쿼리의 잘못된 비교를 수정했습니다. #77093 (Duc Canh Le).
- 예외 발생 시 Kafka 테이블 생성 중 발생하던 충돌을 수정했습니다. #77121 (Pavel Kruglov).
- Kafka 및 RabbitMQ 엔진에서 새 JSON 및 서브컬럼을 지원합니다. #77122 (Pavel Kruglov).
- MacOS에서 예외 스택 언와인딩 문제를 수정했습니다. #77126 (Eduard Karacharov).
- getSubcolumn 함수에서 ‘null’ 서브컬럼을 읽는 문제를 수정했습니다. #77163 (Pavel Kruglov).
- 분석기에서 리터럴이 포함된 표현식을 사용하는 스킵 인덱스가 작동하지 않던 문제를 수정하고, 인덱스 분석 중 불필요한 CAST를 제거했습니다. #77229 (Pavel Kruglov).
- 배열 및 지원되지 않는 함수와 관련된 블룸 필터 인덱스를 수정했습니다. #77271 (Pavel Kruglov).
- 테이블 수 제한은 최초 CREATE 쿼리에서만 확인해야 합니다. #77274 (Nikolay Degterinsky).
SELECT toBFloat16(-0.0) == toBFloat16(0.0)는 이제 이전의false대신 올바르게true를 반환합니다. 이로써 동작이Float32및Float64와 일관되게 되었습니다. #77290 (Shankar Iyer).- 초기화되지 않은 key_index 변수를 잘못 참조할 가능성이 있는 문제를 수정합니다. 이로 인해 debug builds에서는 충돌이 발생할 수 있습니다(이 초기화되지 않은 참조는 이후 코드에서 오류를 발생시킬 가능성이 높으므로 release builds에서는 문제가 발생하지 않습니다.) ### 사용자 대상 변경 사항에 대한 문서 항목입니다. #77305 (wxybear).
- 되돌렸습니다. #77307 (Nikolai Kochetov).
- Bool 값인 파티션의 이름을 수정했습니다. 이 문제는 https://github.com/ClickHouse/ClickHouse/pull/74533에서 발생했습니다. #77319 (Pavel Kruglov).
- 널 허용 요소를 포함한 Tuple과 String 간 비교를 수정했습니다. 예를 들어, 변경 전에는 Tuple
(1, null)과 String'(1,null)'을 비교하면 오류가 발생했습니다. 또 다른 예로,a가 널 허용 컬럼인 Tuple(1, a)와 String'(1, 2)'간 비교에서도 같은 문제가 있었습니다. 이번 변경으로 이러한 문제가 해결되었습니다. #77323 (Alexey Katsman). - ObjectStorageQueueSource의 충돌을 수정했습니다. 이 문제는 https://github.com/ClickHouse/ClickHouse/pull/76358에서 발생했습니다. #77325 (Pavel Kruglov).
close_session쿼리 매개변수가 적용되지 않아 명명된 세션이session_timeout이후에만 종료되던 버그를 수정했습니다. #77336 (Alexey Katsman).input()사용 시async_insert문제를 수정했습니다. #77340 (Azat Khuzhin).- 수정: 플래너가 정렬 컬럼을 제거할 때
WITH FILL에서NOT_FOUND_COLUMN_IN_BLOCK오류가 발생할 수 있던 문제를 수정했습니다. 또한INTERPOLATE표현식에 대해 계산된 DAG가 일관되지 않아 발생하던 유사한 문제도 수정했습니다. #77343 (Yakov Olkhovskiy). - 되돌림. #77390 (Vladimir Cherkasov).
- attached 상태인 mv가 없는 경우 nats server에서 메시지를 수신하지 못하던 문제가 수정되었습니다. #77392 (Dmitry Novikov).
merge테이블 함수를 통해 빈FileLog에서 읽을 때 발생하던 논리적 오류를 수정하고 #75575를 해결했습니다. #77441 (Vladimir Cherkasov).- 유효하지 않은 AST 노드에 별칭(alias)을 설정할 때 발생하던 여러
LOGICAL_ERROR를 수정했습니다. #77445 (Raúl Marín). - 파일 시스템 캐시 구현에서 file segment 쓰기 중 발생하는 오류 처리 문제를 수정했습니다. #77471 (Kseniia Sumarokova).
- DatabaseIceberg가 catalog에서 제공하는 올바른 메타데이터 파일을 사용하도록 수정했습니다. #75187을 해결합니다. #77486 (Kseniia Sumarokova).
- shared variant의 Dynamic 직렬화에 기본 포맷 설정을 사용합니다. #77572 (Pavel Kruglov).
- ‘스칼라 서브쿼리 실행에서 toAST() 사용 방지’를 되돌렸습니다. #77584 (Raúl Marín).
- 로컬 디스크에 테이블 데이터 경로가 존재하는지 확인하는 로직을 수정했습니다. #77608 (Tuan Pham Anh).
- 이제 쿼리 캐시는 UDF를 비결정적인 것으로 간주합니다. 따라서 UDF가 포함된 쿼리 결과는 더 이상 캐시되지 않습니다. 이전에는 사용자가 비결정적 UDF를 정의할 수 있었고, 그 결과가 잘못 캐시되는 경우가 있었습니다(issue #77553). #77633 (Jimmy Aguilar Mena).
- 일부 타입에서 상수 값을 원격으로 전송하던 문제를 수정했습니다. #77634 (Pavel Kruglov).
enable_filesystem_cache_log설정이 활성화된 경우에만 작동하던 system.filesystem_cache_log 문제를 수정했습니다. #77650 (Kseniia Sumarokova).- 프로젝션 내에서
defaultRoles()함수를 호출할 때 발생하는 논리적 오류를 수정합니다. #76627의 후속 조치입니다. #77667 (pufit). - StorageS3(Azure)Queue에서 만료된 Context 때문에 발생하는 충돌을 수정했습니다. #77720 (Kseniia Sumarokova).
arrayResize함수의 두 번째 인수로는 이제Nullable유형을 사용할 수 없습니다. 이전에는 두 번째 인수로Nullable을 사용하면 오류가 발생하거나 잘못된 결과가 나오는 등 문제가 생길 수 있었습니다. (issue #48398). #77724 (Manish Gill).- RabbitMQ, Nats, Redis, AzureQueue 테이블 엔진에서 자격 증명이 숨겨지도록 했습니다. #77755 (Kseniia Sumarokova).
- ArgMin/ArgMax의 NaN 비교에서 발생하는 정의되지 않은 동작을 수정했습니다. #77756 (Raúl Marín).
- 작업이 기록할 블록을 생성하지 않더라도 머지와 뮤테이션이 취소되었는지 정기적으로 확인합니다. #77766 (János Benjamin Antal).
- 되돌렸습니다. #77843 (Vladimir Cherkasov).
NOT_FOUND_COLUMN_IN_BLOCK오류 발생 시 일어날 수 있는 크래시를 수정했습니다. #77854 (Vladimir Cherkasov).- 데이터를 채우는 과정에서
StorageSystemObjectStorageQueueSettings에 발생하던 충돌을 수정했습니다. #77878 (Bharat Nallan). - SSH 서버에서 이력의 퍼지 검색을 비활성화합니다(skim이 필요하기 때문입니다). #78002 (Azat Khuzhin).
- 인덱스가 없는 컬럼에 대한 벡터 검색 쿼리가, 테이블 내 다른 벡터 컬럼에 벡터 유사성 인덱스가 정의되어 있는 경우 잘못된 결과를 반환하던 버그를 수정했습니다. (이슈 #77978). #78069 (Shankar Iyer).
The requested output format {} is binary... Do you want to output it anyway? [y/N]프롬프트 문구를 수정했습니다. #78095 (Azat Khuzhin).- origin 인수가 0인
toStartOfInterval에서 발생하던 버그를 수정했습니다. #78096 (Yarik Briukhovetskyi). - HTTP 인터페이스에서 비어 있는
session_id쿼리 매개변수를 지정하지 못하도록 변경했습니다. #78098 (Alexey Katsman). - ALTER 쿼리 직후에 RENAME 쿼리가 실행되면서 발생할 수 있었던 Replicated 데이터베이스의 메타데이터 재정의 문제를 수정했습니다. #78107 (Nikolay Degterinsky).
- NATS engine에서 발생하는 충돌을 수정했습니다. #78108 (Dmitry Novikov).
- SSH용 내장 클라이언트에서
history_file을 생성하려고 하지 않도록 수정했습니다. #78112 (Azat Khuzhin). - RENAME DATABASE 또는 DROP TABLE 쿼리 후 system.detached_tables에 잘못된 정보가 표시되던 문제를 수정했습니다. #78126 (Nikolay Degterinsky).
- https://github.com/ClickHouse/ClickHouse/pull/77274 이후 Database Replicated에서 테이블 수가 너무 많은 경우에 대한 검사 수정입니다. 또한 RMT 또는 KeeperMap 사용 시 ZooKeeper에 추적되지 않는 노드가 생성되지 않도록 스토리지를 생성하기 전에 검사를 수행합니다. #78127 (Nikolay Degterinsky).
- S3Queue 메타데이터가 동시에 초기화될 때 발생할 수 있는 크래시를 수정했습니다. #78131 (Azat Khuzhin).
groupArray*함수는 이제max_size인수의 Int 유형 0 값에 대해, UInt와 마찬가지로 이를 사용해 실행을 시도하는 대신 BAD_ARGUMENTS 오류를 발생시킵니다. #78140 (Eduard Karacharov).- 로컬 테이블이 분리되기 전에 제거된 경우
recoverLostReplica에서 충돌이 발생하지 않도록 수정했습니다. #78173 (Raúl Marín). - system.s3_queue_settings에서 “alterable” 컬럼이 항상
false를 반환하던 문제를 수정했습니다. #78187 (Kseniia Sumarokova). - Azure access signature가 사용자에게 노출되거나 로그에 남지 않도록 마스킹합니다. #78189 (Kseniia Sumarokova).
- Wide 파트에서 프리픽스가 있는 하위 스트림의 프리페치 문제를 수정했습니다. #78205 (Pavel Kruglov).
- 키 배열의 유형이
LowCardinality(Nullable)인 경우mapFromArrays에서 발생하던 충돌 및 잘못된 결과를 수정했습니다. #78240 (Eduard Karacharov). - delta-kernel의 인증 옵션을 수정했습니다. #78255 (Kseniia Sumarokova).
- 레플리카에서
disable_insertion_and_mutation이 true이면 RefreshMV 작업을 예약하지 않습니다. 작업은 일종의 삽입 작업이므로disable_insertion_and_mutation이 true이면 실패합니다. #78277 (Xu Jia). - Merge 엔진의 기반 테이블 액세스를 검증합니다. #78339 (Pervakov Grigorii).
- FINAL 수정자가
Distributed엔진 테이블에서 누락될 수 있습니다. #78428 (Yakov Olkhovskiy). Bitmapmin은 비트맵이empty(uint64_max when input type >= 8bits)인 경우 uint32_max를 반환하며, 이는 비어 있는roaring_bitmap의minimum()동작과 일치합니다. #78444 (wxybear).- 충돌이 발생할 수 있으므로 “코드의 일부 위치에 preserve_most 속성 적용” 변경을 되돌립니다. #78449 (Azat Khuzhin).
- INFILE 스키마 추론에 삽입용 컬럼을 사용합니다. #78490 (Pervakov Grigorii).
distributed_aggregation_memory_efficient가 활성화된 경우 논리적 오류가 발생할 수 있으므로,FROM을 읽은 직후의 병렬 쿼리 처리를 비활성화합니다. #76934를 해결합니다. #78500 (flynn).max_streams_to_max_threads_ratio설정을 적용한 뒤 계획된 스트림 수가 0개가 되더라도 읽기용 스트림을 최소 1개는 설정하도록 했습니다. #78505 (Eduard Karacharov).- S3Queue 스토리지에서 “Cannot unregister: table uuid is not registered” 논리 오류를 수정했습니다. #78285를 해결합니다. #78541 (Kseniia Sumarokova).
- 이제 ClickHouse는 cgroups v1과 v2가 모두 활성화된 시스템에서 자체 cgroup v2를 확인할 수 있습니다. #78566 (Grigory Korolev).
- 테이블 수준 설정과 함께 사용할 때 ObjectStorage 클러스터 테이블 함수가 실패하던 문제를 수정했습니다. #78587 (Daniil Ivanik).
- 트랜잭션에 대한 강화된 검사는 ReplicatedMergeTree의
INSERT에서 지원되지 않습니다. #78633 (Azat Khuzhin). - ATTACH 시 쿼리 설정을 적용합니다. #78637 (Raúl Marín).
iceberg_metadata_file_path에 잘못된 경로를 지정했을 때 발생하는 충돌을 수정했습니다. #78688 (alesapin).- DeltaLake 테이블 엔진의 delta-kernel 구현에서, 읽기 스키마가 테이블 스키마와 다르고 파티션 컬럼도 동시에 존재할 때 컬럼을 찾을 수 없는 오류가 발생하던 문제를 수정했습니다. #78690 (Kseniia Sumarokova).
- 이 업데이트는 동일한 이름을 사용하는 두 세션이 있을 때, 이전 세션의 타임아웃이 만료되기 전에 새 세션이 생성되면 새 이름 지정 세션이 이전 세션에 예약된 시각에 의도치 않게 종료되던 버그를 수정합니다. #78698 (Alexey Katsman).
- CHECK TABLE 실행 중에 테이블 종료가 차단되지 않도록 했습니다. #78782 (Raúl Marín).
- Keeper 수정: 모든 경우에 ephemeral 개수를 올바르게 수정했습니다. #78799 (Antonio Andelic).
view()외의 테이블 함수를 사용할 때StorageDistributed에서 발생하던 잘못된 CAST 문제를 수정했습니다. #78464를 해결합니다. #78828 (Konstantin Bogdanov).tupleElement(*, 1)의 포맷팅을 수정했습니다. #78639을 해결합니다. #78832 (Konstantin Bogdanov).ssd_cache유형의 Dictionaries에서는 이제block_size및write_buffer_size매개변수에 0 또는 음수 값을 허용하지 않습니다(이슈 #78314). #78854 (Elmi Ahmadov).- 비정상 종료 후 ALTER가 수행된 경우 REFRESHABLE MV에서 발생하는 충돌을 수정했습니다. #78858 (Azat Khuzhin).
- CSV 형식에서 잘못된 DateTime 값 파싱 문제를 수정했습니다. #78919 (Pavel Kruglov).
빌드/테스트/패키징 개선 사항
- 내부 의존성인 LLVM이 16에서 18로 업데이트되었습니다. #66053 (Nikita Mikhaylov).
- 삭제된 nats 통합 테스트를 복원하고 오류를 수정했습니다. - nats 엔진의 일부 race condition을 수정했습니다 - 연결이 끊어진 경우 nats로 데이터를 스트리밍할 때 발생하던 데이터 손실을 수정했습니다 - nats로부터의 스트리밍이 끝날 때 마지막 데이터 청크 수신이 멈추는 문제를 수정했습니다 - nats_max_reconnect는 deprecated 상태이며 아무런 효과가 없습니다. 재연결은 nats_reconnect_wait timeout을 두고 영구적으로 수행됩니다. #69772 (Dmitry Novikov).
- contrib openssl의 asm 파일이 생성되지 않는 문제를 수정했습니다. #72622 (RinChanNOW).
- 테스트 03210_variant_with_aggregate_function_type의 안정성을 개선했습니다. #74012 (Anton Ivashkin).
- ARM 및 Intel Mac 모두에서 HDFS를 빌드할 수 있도록 지원합니다. #74244 (Yan Xin).
- 범용 설치 스크립트가 macOS에서도 설치를 제안하도록 했습니다. #74339 (Alexey Milovidov).
- Kerberos가 활성화되지 않았을 때 빌드가 실패하던 문제를 수정했습니다. #74771 (flynn).
- 내장 LLVM을 19로 업데이트했습니다. #75148 (Konstantin Bogdanov).
- 잠재적으로 호환성이 깨질 수 있음: 기본값을 한층 더 엄격하게 제한하는 개선 사항입니다. 현재 기본값도 이미 안전합니다. 포트를 명시적으로 공개하려면 사용자가 옵션을 지정해야 합니다. 다만
default사용자에 대해CLICKHOUSE_PASSWORD로 password를 설정하지 않았거나CLICKHOUSE_USER환경 변수로 username을 변경하지 않은 경우에는, 추가적인 보호 수준으로 로컬 시스템에서만 접근할 수 있어야 합니다. #75259 (Mikhail f. Shiryaev). - 통합 테스트에서는 병렬 테스트의 단일 Batch 실행에 1시간의 timeout이 적용됩니다. 이 timeout에 도달하면 일부 logs를 남기지 못한 채
pytest가 종료됩니다. 내부pytesttimeout은 session의 결과를 출력하고 외부 timeout 신호가 trigger되지 않도록 55분으로 설정되어 있습니다. #75532를 종료합니다. #75533 (Ilya Yatsishin). - 모든
clickhouse-server관련 작업을 함수로 만들고,entrypoint.sh에서 기본 바이너리를 실행할 때만 수행되도록 했습니다. 오랫동안 미뤄졌던 개선 사항이 #50724에서 제안되었습니다.users.xml에서 값을 가져올 수 있도록clickhouse-extract-from-config에--users스위치를 추가했습니다. #75643 (Mikhail f. Shiryaev). - 스트레스 테스트에서 gdb를 통해 스택트레이스를 수집하는 동안 server가 종료되지 않으면,
Possible deadlock on shutdown (see gdb.log)감지의 오탐을 줄이기 위해 추가 대기 시간이 적용됩니다. 이 지연은 테스트가 성공적으로 완료되지 않은 경우에만 추가됩니다. #75668 (Ilya Yatsishin). - 삭제된 nats 통합 테스트를 복원하고 오류를 수정했습니다. - nats 엔진의 일부 경쟁 상태를 수정했습니다 - 연결이 끊어진 경우 데이터를 nats로 스트리밍할 때 발생하던 데이터 유실을 수정했습니다 - nats에서의 스트리밍이 종료될 때 마지막 데이터 청크 수신이 멈추던 문제를 수정했습니다 - nats_max_reconnect는 Deprecated 상태이며 효과가 없고, 재연결은 nats_reconnect_wait timeout으로 영구적으로 수행됩니다. #75850 (Dmitry Novikov).
- Darwin용 크로스 컴파일 시 ICU와 GRPC를 활성화합니다. #75922 (Raúl Marín).
- 프로세스 그룹을 종료하는 동안
sleep으로 인해 splitting test의 출력이 달라지는 문제를 수정했습니다. #76090 (Mikhail f. Shiryaev). - 스크립트가 자주 강제 종료되므로 실행이 끝날 때
docker-compose로그를 수집하지 마십시오. 대신 백그라운드에서 수집하십시오. #76140 (Mikhail f. Shiryaev). - Kafka 스토리지 관련 테스트를 몇 개의 파일로 분리했습니다. #69452를 해결했습니다. #76208 (Mikhail f. Shiryaev).
clickhouse-odbc-bridge및clickhouse-library-bridge가 별도 리포지토리인 https://github.com/ClickHouse/odbc-bridge/로 이동되었습니다. #76225 (Alexey Milovidov).- 바이너리에서 약 20MB의 사용되지 않는 코드를 제거했습니다. #76226 (Alexey Milovidov).
block()도입에 따라 필요한 최소 CMake 버전을 3.25로 높였습니다. #76316 (Konstantin Bogdanov).- fmt를 11.1.3으로 업데이트했습니다. #76547 (Raúl Marín).
lz4를1.10.0으로 업데이트했습니다. #76571 (Konstantin Bogdanov).curl을8.12.1로 업데이트했습니다. #76572 (Konstantin Bogdanov).libcpuid를0.7.1로 업데이트했습니다. #76573 (Konstantin Bogdanov).- pytest 결과를 파싱하기 위해 기계가 읽을 수 있는 포맷을 사용합니다. #76910 (Mikhail f. Shiryaev).
- Rust 크로스 컴파일을 수정하고 Rust를 완전히 비활성화할 수 있게 했습니다. #76921 (Raúl Marín).
- 프로젝트를 빌드하려면 clang 19가 필요합니다. #76945 (Raúl Marín).
- 이 테스트는 직렬 모드에서 10초 이상 실행되어 빠른 테스트로 사용하기에는 너무 오래 걸립니다. #76948 (Mikhail f. Shiryaev).
sccache를0.10.0으로 업데이트했습니다. #77580 (Konstantin Bogdanov).- Rust에서 CPU 타깃 기능을 반영하고 모든 크레이트에 LTO를 활성화합니다. #78590 (Raúl Marín).
minizip-ng를4.0.9로 업데이트했습니다. #78917 (Konstantin Bogdanov).