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

v24.2 변경 로그

ClickHouse 릴리스 태그: 24.2.2.15987

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

  • 중첩 타입 내의 의심스럽거나 실험적인 타입을 검증합니다. 이전에는 JSON을 제외하고는 Array/Tuple/Map과 같은 중첩 타입 안에 있는 이러한 타입을 검증하지 않았습니다. #59385 (Kruglov Pavel).
  • 정렬 절 ORDER BY ALL(v23.12에서 도입됨)은 ORDER BY *로 대체되었습니다. 이전 구문은 all 컬럼이 있는 테이블에서 오류를 유발하기 쉬웠습니다. #59450 (Robert Schulze).
  • 스레드 수와 블록 크기에 대한 유효성 검사를 추가합니다. #60138 (Raúl Marín).
  • 쿼리 수준 설정인 async_insertdeduplicate_blocks_in_dependent_materialized_views가 동시에 활성화된 경우 들어오는 INSERT 쿼리를 거부합니다. 이 동작은 throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert 설정에 의해 제어되며, 기본적으로 활성화됩니다. 이는 https://github.com/ClickHouse/ClickHouse/pull/59915를 진행하기 위해 필요한 https://github.com/ClickHouse/ClickHouse/pull/59699의 후속 작업입니다. #60888 (Nikita Mikhaylov).
  • 유틸리티 clickhouse-copier는 GitHub의 별도 저장소로 옮겨졌습니다: https://github.com/ClickHouse/copier. 더 이상 번들에 포함되지 않지만, 여전히 별도로 다운로드하여 사용할 수 있습니다. 다음 이슈를 종료합니다: #60734 다음 이슈를 종료합니다: #60540 다음 이슈를 종료합니다: #60250 다음 이슈를 종료합니다: #52917 다음 이슈를 종료합니다: #51140 다음 이슈를 종료합니다: #47517 다음 이슈를 종료합니다: #47189 다음 이슈를 종료합니다: #46598 다음 이슈를 종료합니다: #40257 다음 이슈를 종료합니다: #36504 다음 이슈를 종료합니다: #35485 다음 이슈를 종료합니다: #33702 다음 이슈를 종료합니다: #26702 ### 사용자 대상 변경 사항에 대한 문서 항목입니다. #61058 (Nikita Mikhaylov).
  • MySQL과의 호환성을 높이기 위해 함수 locate는 이제 기본적으로 (needle, haystack[, start_pos]) 형식의 인수 순서를 사용합니다. 이전 동작인 (haystack, needle, [, start_pos])function_locate_has_mysql_compatible_argument_order = 0을 설정하여 복원할 수 있습니다. #61092 (Robert Schulze).
  • 사용되지 않는 메모리 내(in-memory) 데이터 파트는 23.5 버전부터 사용 중단(deprecated)되었으며, 23.10 버전부터는 더 이상 지원되지 않습니다. 이제 남아 있던 관련 코드가 제거되었습니다. #55186#45409의 후속 작업입니다. 메모리 내 데이터 파트는 23.5 버전 이전에만 사용 가능했고, 또한 MergeTree 테이블에 대해 해당 SETTINGS를 수동으로 지정해 직접 활성화한 경우에만 사용되었기 때문에 메모리 내 데이터 파트를 사용했을 가능성은 낮습니다. 메모리 내 데이터 파트가 있는지 확인하려면 다음 쿼리를 실행하십시오: SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type. 메모리 내 데이터 파트 사용을 비활성화하려면 ALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULT를 실행하십시오. 이전 ClickHouse 릴리스에서 업그레이드하기 전에 먼저 메모리 내 데이터 파트가 없는지 확인하십시오. 메모리 내 데이터 파트가 있다면 먼저 이를 비활성화한 뒤, 메모리 내 데이터 파트가 더 이상 존재하지 않게 될 때까지 기다린 다음 업그레이드를 계속하십시오. #61127 (Alexey Milovidov).
  • 기본적으로 MergeTree 테이블의 ORDER BY 절에서 SimpleAggregateFunction 사용을 금지합니다. 이는 AggregateFunction이 금지된 것과 유사하지만, SimpleAggregateFunction은 비교가 불가능하기 때문에 금지됩니다. 이를 허용하려면 allow_suspicious_primary_key를 사용하십시오. #61399 (Azat Khuzhin).
  • ClickHouse의 String 데이터 타입은 주로 UTF-8 텍스트를 저장하지만, 임의의 이진 데이터도 허용합니다. Parquet/ORC/Arrow의 String은 UTF-8만 지원합니다. 따라서 ClickHouse String 데이터 타입에 대해 Arrow에서 사용할 데이터 타입을 String으로 할지 Binary로 할지 선택할 수 있습니다. 이는 output_format_parquet_string_as_string, output_format_orc_string_as_string, output_format_arrow_string_as_string 설정으로 제어됩니다. 엄밀성과 호환성 측면에서는 Binary가 더 적합하지만, 기본값을 String으로 사용하는 것이 대부분의 경우 사용자 기대에 더 잘 부합합니다. Parquet/ORC/Arrow는 lz4와 zstd를 포함한 다양한 압축 방식을 지원합니다. ClickHouse는 이 모든 압축 방식을 지원합니다. 일부 품질이 낮은 도구는 더 빠른 lz4 압축 방식을 지원하지 못하므로, 기본값을 zstd로 설정합니다. 이는 output_format_parquet_compression_method, output_format_orc_compression_method, output_format_arrow_compression_method 설정으로 제어됩니다. Parquet과 ORC에 대해서는 기본값을 zstd로 변경했지만, Arrow에 대해서는 변경하지 않았습니다(저수준 사용을 위해 Arrow에서는 기본값을 그대로 유지합니다). #61817 (Alexey Milovidov).
  • materialized view 보안 이슈에 대한 수정입니다. 이 이슈로 인해 사용자에게 필요한 권한이 없어도 테이블에 데이터를 삽입할 수 있었습니다. 이 수정을 통해 이제 사용자가 materialized view 에만 아니라 그 아래에 있는 모든 기반 테이블에도 데이터를 삽입할 권한이 있는지 검증합니다. 이는 이전에는 정상적으로 동작하던 일부 쿼리가 이제는 「Not enough privileges」 오류와 함께 실패할 수 있음을 의미합니다. 이 문제를 해결하기 위해, 이 릴리스에서는 뷰에 대한 SQL security 기능을 새로 도입했습니다. https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security. #54901 (pufit)

신규 기능

  • 값의 개수와 해당 오차를 반환하는 Topk/topkweighed 지원 모드가 추가되었습니다. #54508 (UnamedRus).
  • view/materialized view에서 definer 사용자를 지정할 수 있는 새로운 구문이 추가되었습니다. 이를 통해 기저 테이블에 대한 명시적인 권한 부여 없이도 view에서 SELECT/INSERT를 실행할 수 있습니다. #54901 (pufit).
  • 서로 다른 종류의 MergeTree 테이블을 Replicated 엔진으로 자동 변환하는 기능이 추가되었습니다. 테이블의 데이터 디렉터리(/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/)에 빈 convert_to_replicated 파일을 생성하면 다음 서버 시작 시 해당 테이블이 자동으로 변환됩니다. #57798 (Kirill).
  • 테이블 함수 mergeTreeIndex가 추가되었습니다. 이 함수는 MergeTree 테이블의 인덱스와 마크 파일 내용을 나타내며, 내부 구조를 살펴보는 용도로 사용할 수 있습니다. 문법: mergeTreeIndex(database, table, [with_marks = true]) 여기서 database.tableMergeTree 엔진을 사용하는 기존 테이블입니다. #58140 (Anton Popov).
  • file/s3/hdfs/url/azureBlobStorage 엔진에서 스키마 추론 중 파일 포맷이 알려져 있지 않은 경우 자동으로 감지하도록 시도합니다. #50576을(를) 해결합니다. #59092 (Kruglov Pavel).
  • generate_series를 테이블 FUNCTION으로 추가합니다. 이 FUNCTION은 자연수 등차수열을 갖는 테이블을 생성합니다. #59390 (divanik).
  • 빈 파티션과 관련된 ZooKeeper 노드를 제거하는 ALTER TABLE table FORGET PARTITION partition 쿼리가 추가되었습니다. #59507 (Sergei Trifonov).
  • tar 아카이브 형식의 백업 읽기 및 쓰기를 지원합니다. #59535 (josh-hildred).
  • 새로운 집계 FUNCTION 'groupArrayIntersect'가 추가되었습니다. 이전 이슈 #49862의 후속입니다. #59598 (Yarik Briukhovetskyi).
  • DNS 관련 문제를 디버깅하는 데 유용한 system.dns_cache 테이블을 도입했습니다. #59856 (Kirill Nikiforov).
  • S3Express 버킷 지원을 구현했습니다. #59965 (Nikita Taranov).
  • 코덱 LZ4HC는 이전 최소 수준인 3보다 빠르지만 압축률이 낮은 새로운 레벨 2를 지원합니다. 이전 버전에서는 LZ4HC(2) 이하의 설정은 모두 LZ4HC(3)와 동일했습니다. 작성자: Cyan4973. #60090 (Alexey Milovidov).
  • DNS 문제를 디버깅하는 데 유용한 system.dns_cache 테이블이 구현되었습니다. 새로운 서버 설정 dns_cache_max_size가 추가되었습니다. #60257 (Kirill Nikiforov).
  • DateTime 또는 DateTime64 타입의 값에서 밀리초 단위를 반환하는 함수 toMillisecond가 추가되었습니다. #60281 (Shaun Struwig).
  • merge 테이블 FUNCTION에서 merge(['db_name', ] 'tables_regexp') 형태의 단일 인자 버전을 지원합니다. #60372 (豪肥肥).
  • Tsv, TSV, tsv, rowbinary처럼 모든 포맷 이름에서 대소문자를 구분하지 않도록 했습니다. #60420 (豪肥肥).
  • view/materialized view에서 definer USER를 지정할 수 있는 새로운 구문이 추가되었습니다. 이를 통해 기저 테이블에 대한 별도의 권한 부여 없이도 뷰에서 SELECT/INSERT를 실행할 수 있습니다. #60439 (pufit).
  • StorageMemory(memory-engine)에 min_bytes_to_keep, max_bytes_to_keep, min_rows_to_keepmax_rows_to_keep 4개의 속성을 추가합니다 - 새로운 변경 사항을 반영하도록 테스트를 추가합니다 - memory.md 문서를 업데이트합니다 - 테이블 파라미터 경계값에 접근할 수 있도록 MemorySink에 테이블 context 속성을 추가합니다. #60612 (Jake Bamrah).
  • DateTime 또는 DateTime64 타입 값에서 밀리초 부분을 반환하는 toMillisecond 함수가 추가되었습니다. #60649 (Robert Schulze).
  • 대기 중인 쿼리와 실행 중인 쿼리 개수에 대해 별도의 제한을 도입했습니다. 새 서버 설정 max_waiting_queries가 추가되어 async_load_databases로 인해 대기 중인 쿼리 개수를 제한합니다. 기존의 실행 중인 쿼리 개수 제한에는 더 이상 대기 중인 쿼리가 포함되지 않습니다. #61053 (Sergei Trifonov).
  • ATTACH PARTITION ALL 지원을 추가했습니다. #61107 (Kirill Nikiforov).

성능 향상

  • SELECT 절에서 GROUP BY 키에 대한 min/max/any/anyLast 집계 함수를 제거합니다. #52230 (JackyWoo).
  • 여러 [nullable] 컬럼이 포함된 경우 직렬화 집계 방식의 성능을 향상합니다. 이는 추상화의 무결성을 해치지 않는 #51399의 일반화 버전입니다. #55809 (Amos Bird).
  • ALL join의 성능을 개선하기 위해 join 출력에 대해 lazy build를 도입했습니다. #58278 (LiuNeng).
  • 집계 함수 ArgMin / ArgMax / any / anyLast / anyHeavy 및 ORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1 쿼리의 성능이 향상되었습니다. #58640 (Raúl Marín).
  • 분기 예측 실패(branch miss)를 줄여 bigint 및 big decimal 타입에 대한 조건부 sum/avg 집계 연산의 성능을 최적화했습니다. #59504 (李扬).
  • 활성 뮤테이션이 있는 SELECT 쿼리의 성능을 개선합니다. #59531 (Azat Khuzhin).
  • 컬럼 필터에 간단한 최적화를 수행합니다. 기본 데이터 타입이 숫자가 아닌 컬럼에 result_size_hint = -1를 사용하여 필터링하지 않도록 합니다. 일부 경우에는 최대 메모리 사용량을 기존의 44%까지 줄일 수 있습니다. #59698 (李扬).
  • 프라이머리 키가 더 적은 메모리를 사용하도록 개선되었습니다. #60049 (Alexey Milovidov).
  • 프라이머리 키 및 기타 일부 연산의 메모리 사용량을 개선했습니다. #60050 (Alexey Milovidov).
  • 테이블의 기본 키는 최초 접근 시 지연 로드 방식으로 메모리에 적재됩니다. 이는 기본적으로 활성화되어 있는 새로운 MergeTree SETTING primary_key_lazy_load에 의해 제어됩니다. 이 기능에는 몇 가지 장점이 있습니다: - 사용되지 않는 테이블에 대해서는 기본 키가 로드되지 않습니다; - 메모리가 충분하지 않은 경우 서버 시작 시점이 아니라 최초 사용 시 예외가 발생합니다. 한편 다음과 같은 단점도 있습니다: - 연결을 수락하기 전이 아니라 첫 번째 쿼리 실행 시에 기본 키를 로드하는 지연 시간이 발생하며, 이로 인해 이론적으로 thundering-herd 문제가 발생할 수 있습니다. 이 변경으로 #11188가 해결되었습니다. #60093 (Alexey Milovidov).
  • 벡터 검색에 유용한 벡터화 FUNCTION dotProduct를 도입했습니다. #60202 (Robert Schulze).
  • 테이블의 기본 키에 대부분 쓸모없는 컬럼이 포함되어 있는 경우, 해당 컬럼들을 메모리에 유지하지 않도록 할 수 있습니다. 이는 기본값이 0.9인 새로운 설정 primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns으로 제어되며, 이 설정은 다음을 의미합니다. 복합 기본 키에서 어떤 컬럼의 값이 전체 경우의 최소 0.9(90%) 비율 이상에서 변경되는 경우, 그 뒤에 오는 컬럼들은 로드되지 않습니다. #60255 (Alexey Milovidov).
  • result_type의 기저 타입이 숫자인 경우 multiIf 함수를 열 지향 방식으로 실행합니다. #60384 (李扬).
  • 그림 1에서 보듯이, "&&"를 "&"로 대체하면 SIMD 코드가 생성됩니다. image 그림 1. '&&'(왼쪽)과 '&'(오른쪽)을 사용해 컴파일한 코드. #60498 (Zhiguo Zhou).
  • 더 빠른 mutex(거의 2배, 이전에는 ThreadFuzzer로 인해 더 느렸음). #60823 (Azat Khuzhin).
  • 연결 드레이닝을 prepare 단계에서 work 단계로 옮기고, 여러 연결을 병렬로 드레이닝하도록 했습니다. #60845 (lizhuoyu5).
  • 널 허용 숫자형 또는 널 허용 문자열형에 대한 insertManyFrom을 최적화합니다. #60846 (李扬).
  • dotProduct 함수에서 불필요하고 비용이 큰 메모리 복사가 발생하지 않도록 최적화했습니다. #60928 (Robert Schulze).
  • 파일 시스템 캐시와 관련된 연산에서 락 경합으로 인한 성능 저하가 줄어듭니다. #61066 (Alexey Milovidov).
  • ColumnString::replicate를 최적화하고 memcpySmallAllowReadWriteOverflow15Impl가 내장된 memcpy로 최적화되지 않도록 합니다. #61074를 해결합니다. x86-64에서 ColumnString::replicate의 속도가 2.46배 향상되었습니다. #61075 (李扬).
  • 256비트 정수 출력이 30배 빨라졌습니다. #61100 (Raúl Marín).
  • 구문 오류가 있는 쿼리에 정규 표현식을 사용하는 COLUMNS matcher가 포함되어 있을 경우, 정규 표현식이 한 번만 컴파일되는 대신 파서의 백트래킹이 일어날 때마다 매번 컴파일되었습니다. 이는 근본적인 오류였습니다. 컴파일된 정규식 객체는 AST에 저장되었습니다. 그러나 AST에서 문자 A는 「abstract」를 의미하며, 이는 AST가 무거운 객체를 포함해서는 안 된다는 뜻입니다. AST의 일부는 파싱 중에 생성되었다가 폐기될 수 있으며, 이 과정에는 많은 양의 백트래킹이 포함될 수 있습니다. 이로 인해 파싱 단계가 느려지고, 결과적으로 읽기 전용 USER에 의한 DoS를 허용하게 됩니다. 그러나 더 큰 문제는 이것이 퍼저(fuzzer)의 진행을 방해한다는 점입니다. #61543 (Alexey Milovidov).

개선 사항

  • materialized view에서 MODIFY COLUMN 쿼리를 실행할 때는 내부 테이블의 구조를 확인하여 모든 컬럼이 존재하는지 검증합니다. #47427 (sunny).
  • 파서에서 사용되는 모든 키워드를 포함하는 테이블 system.keywords가 추가되었습니다. 이 테이블은 주로 퍼징(fuzzing) 및 구문 강조(syntax highlighting)를 개선하는 데 사용됩니다. #51808 (Nikita Mikhaylov).
  • analyzer가 CREATE PARAMETERIZED VIEW 문을 분석하지 않도록 파라미터화된 VIEW에 대한 지원을 추가했습니다. 또한 기존 파라미터화된 VIEW 로직을 리팩터링하여 CREATE PARAMETERIZED VIEW 문을 분석하지 않도록 했습니다. #54211 (SmitaRKulkarni).
  • 일반 데이터베이스 엔진은 사용이 중단되었습니다. 서버에서 이를 사용 중이면 clickhouse-client에서 경고 메시지가 표시됩니다. 이 변경으로 #52229가 해결되었습니다. #56942 (shabroo).
  • 테이블이 드롭될 때 해당 테이블과 관련된 zero copy 락은 모두 삭제해야 합니다. 이러한 락이 포함된 디렉터리도 함께 제거해야 합니다. #57575 (Sema Checherinda).
  • dictGetOrDefault 함수에 단락(short-circuit) 기능을 추가했습니다. #52098 이슈를 해결했습니다. #57767 (jsc0218).
  • 외부 테이블 구조에서 Enum을 선언할 수 있게 했습니다. #57857 (Duc Canh Le).
  • DEFAULT 또는 MATERIALIZED 식이 있는 컬럼에 대해 ALTER COLUMN MATERIALIZE를 실행하면 이제 올바른 값이 기록됩니다. 기본값이 정의된 기존 파트에는 해당 기본값이, 기본값이 아닌 값이 정의된 기존 파트에는 그 값이 기록됩니다. 이전에는 모든 기존 파트에 기본값이 기록되었습니다. #58023 (Duc Canh Le).
  • 백오프 로직(예: 지수 백오프)을 도입했습니다. 이를 통해 CPU 사용량, 메모리 사용량 및 로그 파일 크기를 줄일 수 있습니다. #58036 (MikhailBurdukov).
  • 머지 대상 파트를 선택할 때 경량한 삭제가 적용된 행을 고려하도록 했습니다. #58223 (Zhuo Qiu).
  • storage_configuration에서 volume_priority를 정의할 수 있게 되었습니다. #58533 (Andrey Zvonov).
  • T64 코덱에 Date32 타입 지원을 추가합니다. #58738 (Hongbin Ma).
  • 이 PR은 HTTP/HTTPS 연결을 모든 경우에 재사용할 수 있도록 합니다. 응답 코드가 3xx 또는 4xx인 경우에도 재사용됩니다. #58845 (Sema Checherinda).
  • 더 많은 시스템 테이블의 컬럼에 대한 주석을 추가했습니다. https://github.com/ClickHouse/ClickHouse/pull/58356 작업의 연속입니다. #59016 (Nikita Mikhaylov).
  • 이제 PREWHERE에서 가상 컬럼을 사용할 수 있습니다. 특히 _part_offset과 같은 상수가 아닌(non-const) 가상 컬럼에 유용합니다. #59033 (Amos Bird).
  • Distributed 테이블 엔진에 대한 설정을 이제 서버 설정 파일에서 지정할 수 있습니다(MergeTree 설정과 유사). 예: <distributed> <flush_on_detach>false</flush_on_detach> </distributed>. #59291 (Azat Khuzhin).
  • Keeper 개선: latest_logs_cache_size_thresholdcommit_logs_cache_size_threshold로 제어되는 일정량의 로그만 메모리에 캐시하도록 했습니다. #59460 (Antonio Andelic).
  • 상수 키를 사용하던 방식에서 변경되어, 이제는 객체 스토리지가 객체 삭제 가능 여부를 결정하는 키를 자체적으로 생성합니다. #59495 (Sema Checherinda).
  • 기본적으로 지수 표기법으로 표현된 부동 소수점 수를 추론하지 않습니다. 이전 동작을 복원하는 input_format_try_infer_exponent_floats 설정을 추가했습니다(기본값은 비활성화입니다). #59476를 해결합니다. #59500 (Kruglov Pavel).
  • ALTER 연산을 괄호로 감쌀 수 있도록 허용합니다. 괄호 출력 여부는 format_alter_operations_with_parentheses 설정으로 제어할 수 있습니다. 기본적으로 서식이 지정된 쿼리에서는, 일부 위치에서 서식이 지정된 ALTER 연산을 메타데이터(예: 뮤테이션)로 저장하기 때문에 괄호가 출력됩니다. 새 구문은 ALTER 연산이 목록으로 끝나는 일부 쿼리를 더 명확하게 해 줍니다. 예를 들어 ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN c 쿼리는 기존 구문으로는 올바르게 파싱할 수 없습니다. 새 구문에서는 ALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c) 쿼리가 명확합니다. 이전 버전은 새 구문을 읽을 수 없으므로, 새 구문을 사용하면 신규 및 구버전 ClickHouse가 단일 클러스터에 혼재된 경우 문제가 발생할 수 있습니다. #59532 (János Benjamin Antal).
  • codec DEFLATE_QPL에서 사용하는 Intel QPL 버전을 v1.3.1에서 v1.4.0으로 업데이트했습니다. 또한 폴링 타임아웃 메커니즘의 버그를 수정했습니다. 일부 상황에서 타임아웃이 제대로 동작하지 않아, 타임아웃이 발생하면 IAA와 CPU가 동시에 버퍼를 처리할 수 있음을 관찰했습니다. 현재로서는 IAA 코덱 상태가 QPL_STS_BEING_PROCESSED가 아님을 반드시 확인한 다음, SW 코덱으로 폴백(fallback)하는 것이 좋습니다. #59551 (jasperzhu).
  • libhdfs3에 위치 기반 pread 기능을 추가했습니다. libhdfs3에서 위치 기반 읽기(positional read)를 호출하려면 다음과 같이 hdfs.h의 hdfsPread 함수를 사용하십시오. tSize hdfsPread(hdfsFS fs, hdfsFile file, void * buffer, tSize length, tOffset position);. #59624 (M1eyu).
  • 사용자가 max_parser_depth 설정을 매우 큰 값으로 잘못 설정한 경우에도 파서에서 스택 오버플로 발생 여부를 검사합니다. 이를 통해 #59622 이슈가 해결됩니다. #59697 (Alexey Milovidov).
  • Kafka 스토리지에서 XML 및 SQL로 생성되는 named collection의 동작을 통일합니다. #59710 (Pervakov Grigorii).
  • CREATE TABLE에서 명시적으로 uuid를 지정한 경우 replica_pathuuid를 허용합니다. #59908 (Azat Khuzhin).
  • system.tables 시스템 테이블에 ReplicatedMergeTree 테이블용 metadata_version 컬럼을 추가합니다. #59942 (Maksim Kita).
  • Keeper 개선: Disk 관련 작업 실패 시 재시도를 추가했습니다. #59980 (Antonio Andelic).
  • 새 구성 설정 backups.remove_backup_files_after_failure를 추가합니다: <clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>. #60002 (Vitaly Baranov).
  • RESTORE 명령 실행 시 백업에서 테이블 메타데이터를 읽을 때 여러 스레드를 사용하도록 했습니다. #60040 (Vitaly Baranov).
  • 이제 StorageBuffer의 세그먼트가 1개보다 많으면 (num_layers > 1), 백그라운드 플러시는 여러 스레드에서 모든 세그먼트에 대해 동시에 수행됩니다. #60111 (alesapin).
  • config에서 user 키를 사용하여 특정 S3 설정에 대한 사용자를 지정할 수 있게 되었습니다. #60144 (Antonio Andelic).
  • GCP가 GATEWAY_TIMEOUT HTTP 오류 코드와 함께 Internal Error를 반환하는 경우, S3 파일 GCP 폴백을 버퍼 복사 방식으로 대체했습니다. #60164 (Maksim Kita).
  • 객체 스토리지 유형에서 "local_blob_storage" 대신 "local"을 사용할 수 있도록 허용합니다. #60165 (Kseniia Sumarokova).
  • Variant 값에 대한 비교 연산자를 구현하고, Variant 컬럼에 Field를 올바르게 삽입하도록 했습니다. 기본적으로 유사한 variant 타입들로 Variant 타입을 생성하는 것은 허용되지 않으며(SETTING allow_suspicious_variant_types를 통해 예외적으로 허용할 수 있습니다). #59996를 종료합니다. #59850를 종료합니다. #60198 (Kruglov Pavel).
  • 가상 컬럼의 전반적인 사용성이 개선되었습니다. 이제 _part_offset과 같은 비상수 가상 컬럼도 PREWHERE에서 사용할 수 있습니다. 또한 describe_include_virtual_columns 설정을 활성화하면 DESCRIBE 쿼리에서 컬럼 주석으로 가상 컬럼에 대한 내장 문서를 확인할 수 있습니다. #60205 (Anton Popov).
  • ULIDStringToDateTime에 단락 실행(short-circuit execution)을 적용했습니다. #60211 (Juan Madurga).
  • system.backupssystem.backup_log 테이블에 query_id 컬럼을 추가했습니다. error 컬럼에 오류 스택 트레이스를 추가했습니다. #60220 (Maksim Kita).
  • DETACH/서버 종료 시 및 SYSTEM FLUSH DISTRIBUTED 실행 시 Distributed 엔진의 대기 중인 INSERT 블록을 병렬로 flush합니다 (병렬 처리는 테이블에 다중 디스크 정책이 설정된 경우에만 동작하며, 이는 현재 Distributed 엔진의 다른 동작과 동일합니다). #60225 (Azat Khuzhin).
  • joinRightColumnsSwitchNullability에서 필터 설정이 잘못되어 있는 문제를 수정합니다. #59625. #60259 (lgbo).
  • 머지 시 read-through 캐시를 강제 사용하도록 하는 설정을 추가했습니다. #60308 (Kseniia Sumarokova).
  • 이슈 #57598에서는 트랜잭션 처리와 관련된 상이한 동작이 언급됩니다. 활성 트랜잭션이 없는 상태에서 COMMIT/ROLLBACK을 실행하면 MySQL의 동작과 달리 오류가 발생합니다. #60338 (PapaToemmsn).
  • distributed_ddl_output_mode 설정에 none_only_active 모드를 추가했습니다. #60340 (Alexander Tokmakov).
  • MySQL 포트를 통한 연결은 이제 QuickSight를 기본적으로(out-of-the-box) 지원하기 위해 prefer_column_name_to_alias = 1 설정이 자동으로 적용됩니다. 또한 mysql_map_string_to_text_in_show_columnsmysql_map_fixed_string_to_text_in_show_columns 설정이 이제 기본값으로 활성화되며, 이들 역시 MySQL 연결에만 영향을 줍니다. 이를 통해 더 많은 BI 도구와의 호환성이 향상됩니다. #60365 (Robert Schulze).
  • 출력 포맷이 Pretty 형식으로 설정되어 있고 블록이 값이 100만을 초과하는 단일 숫자 값 하나로만 구성되는 경우, 테이블 오른쪽에 사람이 읽기 쉬운 숫자가 함께 출력됩니다. 예: ┌──────count()─┐ │ 233765663884 │ -- 233.77 billion └──────────────┘. #60379 (rogeryk).
  • clickhouse-server용 HTTP 리디렉션 핸들러를 구성할 수 있습니다. 예를 들어 /를 Play UI로 리디렉션하도록 설정할 수 있습니다. #60390 (Alexey Milovidov).
  • 고급 대시보드의 여러 선으로 구성된 그래프 색상이 소폭 개선되었습니다. #60391 (Alexey Milovidov).
  • JavaScript 코드의 경쟁 상태(race condition)를 수정하여 차트가 서로 겹쳐 중복으로 표시되던 문제를 해결했습니다. #60392 (Alexey Milovidov).
  • 사용자가 max_parser_depth 설정을 지나치게 큰 값으로 잘못 설정했더라도 파서에서 스택 오버플로를 확인하도록 했습니다. 이로써 #59622가 해결되었습니다. #60434 (Alexey Milovidov).
  • 함수 substring에 새로운 별칭 byteSlice가 추가되었습니다. #60494 (Robert Schulze).
  • 모호성을 줄이기 위해 서버 설정 이름을 dns_cache_max_size에서 dns_cache_max_entries로 변경했습니다. #60500 (Kirill Nikiforov).
  • SHOW INDEX | INDEXES | INDICES | KEYS가 더 이상 기본 키 컬럼 순서로 정렬하지 않습니다(이전 동작은 직관적이지 않았습니다). #60514 (Robert Schulze).
  • Keeper 개선: 데이터 손실을 방지하기 위해 유효하지 않은 스냅샷이 탐지되면 시작 과정에서 중단되도록 했습니다. #60537 (Antonio Andelic).
  • merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_fault_probability SETTING을 사용하여 MergeTree 읽기 분할 범위에 교차 및 비교차 장애 주입 기능을 추가했습니다. #60548 (Maksim Kita).
  • Advanced 대시보드에서는 이제 스크롤해도 컨트롤이 항상 표시됩니다. 이를 통해 위로 다시 스크롤하지 않고도 새 차트를 추가할 수 있습니다. #60692 (Alexey Milovidov).
  • String 타입과 Enum은 배열, UNION 쿼리, 조건식 등과 같은 동일한 문맥에서 사용할 수 있습니다. 이로써 #60726이(가) 해결되었습니다. #60727 (Alexey Milovidov).
  • tzdata를 2024a 버전으로 업데이트했습니다. #60768 (Raúl Marín).
  • Filesystem 데이터베이스에서 포맷 확장자가 없는 파일을 지원합니다. #60795 (Kruglov Pavel).
  • Keeper 개선: Keeper 설정에 leadership_expiry_ms 지원이 추가되었습니다. #60806 (Brokenice0415).
  • input_format_try_infer_exponent_floats 설정과 관계없이 JSON 형식에서 항상 지수 표기 숫자를 자동으로 추론합니다. JSON 객체에서 named Tuples를 추론하는 동안 예외를 발생시키는 대신 모호한 경로에 대해 String 타입을 사용할 수 있도록 하는 설정 input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects를 추가했습니다. #60808 (Kruglov Pavel).
  • SMJ에서 null을 최댓값/최솟값으로 처리하도록 하는 플래그를 추가합니다. 이를 통해 Apache Spark와 같은 다른 SQL 시스템과의 동작 방식이 호환되도록 합니다. #60896 (loudongfeng).
  • ClickHouse 버전이 Docker 레이블에 추가되었습니다. #54224 이슈를 해결합니다. #60949 (Nikolay Monkov).
  • IN 연산자에서 서브쿼리가 병렬 레플리카와 함께 동작하도록 허용하는 설정인 parallel_replicas_allow_in_with_subquery = 1을(를) 추가합니다. #60950 (Nikolai Kochetov).
  • DNSResolver가 해석된 IP Set의 순서를 무작위로 섞습니다. #60965 (Sema Checherinda).
  • clickhouse-clientclickhouse-local에서 파일 확장자를 기준으로 출력 포맷을 자동 감지하도록 지원합니다. #61036 (豪肥肥).
  • 메모리 제한 업데이트를 주기적으로 검사하도록 했습니다. #61049 (Han Fei).
  • 프로세서 프로파일링(정렬, 집계 등의 연산에 소요된 시간과 입력·출력 바이트 수)을 기본적으로 활성화합니다. #61096 (Azat Khuzhin).
  • 실수로 누락되었던 함수 toUInt128OrZero를 추가했습니다(이 누락은 https://github.com/ClickHouse/ClickHouse/pull/945와 관련된 실수였습니다). 호환성 별칭인 FROM_UNIXTIMEDATE_FORMAT(이들은 ClickHouse 고유 함수가 아니며 MySQL 호환성을 위해서만 존재함)은 SQL 호환성 별칭에 대해 기대되는 대로 대소문자를 구분하지 않도록 변경되었습니다. #61114 (Alexey Milovidov).
  • 액세스 검사 로직이 개선되어, 대상 사용자에게 실제로 해당 권한이 부여되어 있지 않더라도 권한을 회수할 수 있습니다. 예: ```sql GRANT SELECT ON . TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit).
  • 이전 최적화에서 발생한 오류를 수정합니다: https://github.com/ClickHouse/ClickHouse/pull/59698: 첫 번째로 필터링된 컬럼이 최소 크기를 갖도록 하기 위해 break를 제거합니다 cc @jsc0218. #61145 (李扬).
  • Nullable 컬럼에서 has() 함수가 동작하지 않던 문제를 수정했습니다(#60214 문제 해결). #61249 (Mikhail Koviazin).
  • 이제 서브트리 <include from_zk="/path" merge="true">에 대한 구성 치환(config substitutions)에서 merge="true" 속성을 지정할 수 있습니다. 이 속성을 지정하면 ClickHouse는 기존 구성과 해당 서브트리를 병합하며, 지정하지 않으면 기본 동작으로 구성이 끝에 새 내용을 추가합니다. #61299 (alesapin).
  • 가상 메모리 매핑용 비동기 메트릭인 VMMaxMapCount와 VMNumMaps를 추가합니다. #60662 이슈를 해결합니다. #61354 (Tuan Pham Anh).
  • 이제 외부 메모리 정렬과 외부 메모리 GROUP BY와 같이 임시 데이터를 생성하는 모든 경우에 temporary_files_codec 설정을 사용할 수 있습니다. 이전에는 partial_merge JOIN 알고리즘에서만 동작했습니다. #61456 (Maksim Kita).
  • 중복된 검사인 containing_part.empty()를 제거합니다. 해당 검사는 이미 여기에서 수행됩니다: https://github.com/ClickHouse/ClickHouse/blob/1296dac3c7e47670872c15e3f5e58f869e0bd2f2/src/Storages/MergeTree/MergeTreeData.cpp#L6141. #61467 (William Schoeffel).
  • 쿼리 파싱 복잡도를 제한할 수 있는 새로운 설정 max_parser_backtracks가 추가되었습니다. #61502 (Alexey Milovidov).
  • 파일 시스템 캐시를 동적으로 리사이즈할 때 경합이 감소했습니다. #61524 (Kseniia Sumarokova).
  • 재작성될 예정이므로 StorageS3 큐의 sharded 모드를 허용하지 않습니다. #61537 (Kseniia Sumarokova).
  • 오타를 수정했습니다(use_leagcy_max_leveluse_legacy_max_level). #61545 (William Schoeffel).
  • blob_storage_log의 중복 항목 일부를 제거했습니다. #61622 (YenchangChan).
  • MySQL과의 호환성을 위한 별칭 함수 current_user를 추가했습니다. #61770 (Yarik Briukhovetskyi).
  • Azure Blob Storage를 사용할 때 백업 IO용으로 관리 ID를 사용하도록 했습니다. 스토리지 계정 수준 권한이 필요한 존재하지 않는 컨테이너를 ClickHouse가 생성하려고 시도하지 않도록 하는 설정을 추가했습니다. #61785 (Daniel Pozo Escalona).
  • 이전 버전에서는 Pretty 형식에서 일부 숫자가 충분히 보기 좋게 표시되지 않았습니다. #61794 (Alexey Milovidov).
  • SHOW CREATE TABLE 쿼리 결과처럼 결과 집합에 값이 하나만 있는 경우, Pretty 포맷에서는 긴 값이 잘리지 않습니다. #61795 (Alexey Milovidov).
  • clickhouse-local과 마찬가지로 clickhouse-client--format 옵션과 동일하게 사용할 수 있는 옵션으로 --output-format 옵션을 지원합니다. 이를 통해 #59848가 해결되었습니다. #61797 (Alexey Milovidov).
  • stdout이 터미널이고 출력 형식이 지정되지 않은 경우, clickhouse-client 및 유사한 도구는 인터랙티브 모드와 마찬가지로 기본적으로 PrettyCompact를 사용합니다. clickhouse-clientclickhouse-local은 입력 및 출력 형식에 대한 커맨드라인 인자를 일관된 방식으로 처리합니다. 이 변경으로 #61272가 해결되었습니다. #61800 (Alexey Milovidov).
  • 읽기 편의성을 높이기 위해 Pretty 포맷에서 숫자 그룹을 밑줄로 구분하도록 했습니다. 이는 새 설정인 output_format_pretty_highlight_digit_groups로 제어됩니다. #61802 (Alexey Milovidov).

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

  • intDiv 함수에서 10진수 인자를 사용할 때 발생하던 버그를 수정했습니다 #59243 (Yarik Briukhovetskyi).
  • wingfuzz에서 발견한 kql 문제를 수정했습니다 #59626 (Yong Wang).
  • AsynchronousBoundedReadBuffer의 "Read beyond last offset" 오류를 수정했습니다 #59630 (Vitaly Baranov).
  • rabbitmq: ack도 nack도 되지 않은 메시지가 발생하는 문제를 수정했습니다 #59775 (Kseniia Sumarokova).
  • analyzer에서 GROUP BY const를 사용할 때 const 및 LowCardinality 열에 대한 함수 실행을 수정했습니다 #59986 (Azat Khuzhin).
  • DateTime64 스케일 변환 문제를 수정했습니다. #60004 (Yarik Briukhovetskyi).
  • SQLite용 INSERT에서 작은따옴표 처리 방식을 수정했습니다(백슬래시 대신 작은따옴표로 작은따옴표를 이스케이프하도록 변경) #60015 (Azat Khuzhin).
  • optimize_uniq_to_count에서 컬럼 별칭이 제거되던 동작을 수정했습니다 #60026 (Raúl Marín).
  • 문서에서 0은 모든 항목을 유지하는 값이라고 설명하는 것에 맞추어, MergeTree에서 finished_mutations_to_keep=0의 동작을 수정했습니다. #60031 (Azat Khuzhin).
  • s3queue 테이블 DROP 시 발생할 수 있었던 예외를 수정 #60036 (Kseniia Sumarokova).
  • 동일한 파트에 대해 잘못된 범위를 사용하던 PartsSplitter 버그 #60041 (Maksim Kita).
  • DDLLogEntry에서 하드코딩된 4096 대신 컨텍스트에서 가져온 max_query_size를 사용합니다 #60083 (Kruglov Pavel).
  • 쿼리 서식의 일관성 문제를 수정했습니다 #60095 (Alexey Milovidov).
  • 서브쿼리에서 EXPLAIN 결과의 일관되지 않은 포맷을 수정 #60102 (Alexey Milovidov).
  • cosineDistance에서 널 허용 값 처리 시 발생하던 크래시를 수정했습니다 #60150 (Raúl Marín).
  • 문자열로 표현된 bool 값을 실제 bool 값으로 캐스팅할 수 있도록 허용합니다 #60160 (Robert Schulze).
  • system.s3queue_log를 수정했습니다 #60166 (Kseniia Sumarokova).
  • 널 허용 집계 FUNCTION 이름을 사용하는 arrayReduce의 동작을 수정 #60188 (Raúl Marín).
  • 예비 필터링(PK, 파티션 프루닝) 단계에서의 동작 실행을 수정했습니다 #60196 (Azat Khuzhin).
  • s3queue 관련 민감한 정보 숨김 #60233 (Kseniia Sumarokova).
  • Revert "ORDER BY ALLORDER BY *로 교체한 변경을 되돌림" #60248 (Robert Schulze).
  • Azure Blob Storage : endpoint 및 prefix 관련 문제를 수정했습니다 #60251 (SmitaRKulkarni).
  • HTTP 예외 코드를 수정했습니다. #60252 (Austin Kothig).
  • LRUResource Cache(Hive cache) 버그를 수정합니다 #60262 (shanfengp).
  • s3queue: 버그 수정(불안정한(flaky) 테스트 test_storage_s3_queue/test.py::test_shards_distributed도 함께 수정) #60282 (Kseniia Sumarokova).
  • IPv6 해시 함수에서 초기화되지 않은 값 사용 문제와 잘못된 결과를 수정합니다 #60359 (Kruglov Pavel).
  • 병렬 레플리카가 변경된 경우 재분석을 강제로 수행합니다 #60362 (Raúl Marín).
  • 새로운 디스크 구성 옵션에서 plain 메타데이터 타입의 사용을 수정했습니다 #60396 (Kseniia Sumarokova).
  • max_parallel_replicas 값을 0으로 설정할 수 없도록 했습니다. 0으로 설정하는 것은 의미가 없기 때문입니다. #60430 (Kruglov Pavel).
  • mapContainsKeyLike에서 호환되지 않는 타입으로 인해 발생하는 논리 오류 'Cannot capture column because it has incompatible type'를 수정했습니다 #60451 (Kruglov Pavel).
  • null 인자를 사용하는 경우 OptimizeDateOrDateTimeConverterWithPreimageVisitor 관련 문제를 수정했습니다 #60453 (Raúl Marín).
  • CREATE TABLE 시 스칼라 서브쿼리가 계산되지 않도록 개선했습니다. #60464 (Nikolai Kochetov).
  • #59674를 병합했습니다. #60470 (Alexey Milovidov).
  • s3Cluster에서 키를 올바르게 확인하도록 수정했습니다. #60477 (Antonio Andelic).
  • 오류로 인해 많은 행이 건너뛰어질 때 병렬 파싱에서 발생하던 교착 상태를 수정했습니다 #60516 (Kruglov Pavel).
  • kql 복합 연산자에 대한 max_query_size 수정: #60534 (Yong Wang).
  • Keeper 수정: 커밋 로그를 기다리는 동안 타임아웃을 추가합니다 #60544 (Antonio Andelic).
  • system.numbers에서 읽어야 하는 행 수를 줄였습니다 #60546 (JackyWoo).
  • 날짜 타입에 숫자 관련 힌트를 출력하지 않습니다 #60577 (Raúl Marín).
  • 필터에서 비결정적 함수를 사용해 MergeTree에서 데이터를 읽을 때의 동작을 수정했습니다. #60586 (Kruglov Pavel).
  • 호환성 설정 값 유형이 잘못되었을 때 발생하는 논리 오류를 수정합니다 #60596 (Kruglov Pavel).
  • 혼합 x86-64 / ARM 클러스터에서 집계 FUNCTION 상태의 불일치 문제를 수정했습니다 #60610 (Harry Lee).
  • fix(prql): 강화된 패닉 핸들러 #60615 (Maximilian Roos).
  • decimal 및 date 인자 처리에 대한 intDiv를 수정 #60672 (Yarik Briukhovetskyi).
  • 수정: ALTER MODIFY 쿼리에서 CTE를 전개하도록 수정 #60682 (Yakov Olkhovskiy).
  • Atomic/Ordinary가 아닌 데이터베이스 엔진(예: Memory)에서의 system.parts 동작을 수정했습니다 #60689 (Azat Khuzhin).
  • 매개변수화된 뷰에서 발생하는 "Invalid storage definition in metadata file" 오류를 수정했습니다 #60708 (Azat Khuzhin).
  • CompressionCodecMultiple의 버퍼 오버플로를 수정했습니다 #60731 (Alexey Milovidov).
  • SQL/JSON의 의미 없는 데이터를 제거했습니다. #60738 (Alexey Milovidov).
  • 집계 함수 quantileGK에서 잘못된 sanitize 검사 로직 제거 #60740 (李扬).
  • streams를 1로 설정하여 insert-select 및 insert_deduplication_token 관련 버그를 수정했습니다 #60745 (Jordi Villar).
  • 지원되지 않는 multipart 업로드 작업에서 사용자 정의 메타데이터 헤더를 설정할 수 없도록 했습니다 #60748 (Francisco J. Jurado Moreno).
  • toStartOfInterval 함수 수정 #60763 (Andrey Zvonov).
  • arrayEnumerateRanked에서 발생하던 크래시를 수정했습니다. #60764 (Raúl Marín).
  • INSERT SELECT JOIN에서 input()을 사용할 때 발생하던 크래시를 수정했습니다. #60765 (Kruglov Pavel).
  • 서브쿼리에서 서로 다른 allow_experimental_analyzer 값이 설정되었을 때 발생하던 크래시를 수정했습니다 #60770 (Dmitry Novik).
  • S3에서 데이터 읽기 시 재귀 호출 제거 #60849 (Antonio Andelic).
  • HashedDictionaryParallelLoader에서 오류 발생 시 중단될 수 있던 문제를 수정했습니다. #60926 (vdimir).
  • Replicated 데이터베이스에서의 비동기 RESTORE를 수정했습니다 #60934 (Antonio Andelic).
  • 네이티브 프로토콜을 통해 Log 테이블에 비동기 insert를 수행할 때 발생하던 교착 상태를 수정합니다 #61055 (Anton Popov).
  • RangeHashedDictionary용 dictGetOrDefault에서 기본 인수의 지연 실행 동작을 수정했습니다 #61196 (Kruglov Pavel).
  • groupArraySorted의 여러 버그 수정 #61203 (Raúl Marín).
  • 독립 실행형 바이너리에서 Keeper 재구성 문제를 수정했습니다 #61233 (Antonio Andelic).
  • S3 엔진에서 session_token의 사용을 수정합니다. #61234 (Kruglov Pavel).
  • 집계 함수 uniqExact에서 잘못된 결과가 나올 수 있던 문제를 수정함 #61257 (Anton Popov).
  • show database의 버그를 수정했습니다 #61269 (Raúl Marín).
  • RabbitMQ storage에서 MATERIALIZED 컬럼과 관련된 논리 오류를 수정합니다 #61320 (vdimir).
  • CREATE OR REPLACE DICTIONARY 문을 수정했습니다 #61356 (Vitaly Baranov).
  • 외부 ON CLUSTER를 사용하는 ATTACH 쿼리를 수정했습니다. #61365 (Nikolay Degterinsky).
  • actions DAG 분할 관련 문제 수정 #61458 (Raúl Marín).
  • 실패한 RESTORE 작업의 완료 처리 문제를 수정했습니다 #61466 (Vitaly Baranov).
  • 호환성 설정 사용 시 async_insert_use_adaptive_busy_timeout이 올바르게 비활성화되도록 수정했습니다 #61468 (Raúl Marín).
  • 복구 풀(restore pool)에서 작업 대기열(queuing)을 허용합니다 #61475 (Nikita Taranov).
  • UUID를 사용하여 system.parts를 읽을 때 발생하던 버그를 수정했습니다(이슈 61220). #61479 (Dan Wu).
  • window VIEW에서 발생하던 충돌 문제를 수정했습니다 #61526 (Alexey Milovidov).
  • native가 아닌 정수형에서 repeat 함수를 수정합니다 #61527 (Antonio Andelic).
  • 클라이언트 -s 인자를 수정했습니다 #61530 (Mikhail f. Shiryaev).
  • arrayPartialReverseSort 함수에서 발생하던 충돌을 수정했습니다 #61539 (Raúl Marín).
  • 상수 위치 인수를 사용하는 문자열 검색을 수정했습니다 #61547 (Antonio Andelic).
  • datetime64 타입과 함께 사용할 때 오류가 발생하던 addDays를 수정했습니다 #61561 (Shuai li).
  • 비동기 insert의 중복 제거와 관련된 system.part_log 동작을 수정했습니다. #61620 (Antonio Andelic).
  • system.parts의 Non-ready Set 문제를 수정합니다. #61666 (Nikolai Kochetov).