ClickHouse 릴리스 태그: 24.2.2.15987
하위 호환되지 않는 변경 사항
- 중첩 타입에서 의심스럽거나 실험적인 타입도 유효성 검사를 수행합니다. 이전에는 Array/Tuple/Map과 같은 중첩 타입 내에서는 이러한 타입(JSON 제외)의 유효성을 검사하지 않았습니다. #59385 (Kruglov Pavel).
- 정렬 절
ORDER BY ALL(v23.12에서 도입됨)은ORDER BY *로 대체되었습니다. 이전 구문은all컬럼이 있는 테이블에서 오류를 일으키기 쉬웠습니다. #59450 (Robert Schulze). - 스레드 수와 블록 크기에 대한 기본적인 검사를 추가했습니다. #60138 (Raúl Marín).
- 쿼리 수준 설정인
async_insert와deduplicate_blocks_in_dependent_materialized_views가 동시에 활성화된 경우 들어오는 INSERT 쿼리를 거부합니다. 이 동작은throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert설정으로 제어되며, 기본적으로 활성화되어 있습니다. 이는 https://github.com/ClickHouse/ClickHouse/pull/59699의 후속 변경으로, https://github.com/ClickHouse/ClickHouse/pull/59915의 진행을 막고 있는 문제를 해소하기 위해 필요합니다. #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). - 사용되지 않는 인메모리 데이터 파트는 버전 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도 마찬가지로 금지되며, 이는 비교할 수 없기 때문입니다). 허용하려면allow_suspicious_primary_key를 사용하십시오. #61399 (Azat Khuzhin). - ClickHouse는 일반적으로 UTF-8인 String 데이터 타입에 임의의 바이너리 데이터를 허용합니다. 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는 변경하지 않았습니다(저수준 사용에 더 중점을 두기 때문입니다). #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).
- 뷰/materialized view에서 definer 사용자를 지정할 수 있는 새 구문이 추가되었습니다. 이를 통해 기본 테이블(underlying table)에 대한 명시적인 권한 부여 없이도 뷰에서 SELECT/INSERT를 실행할 수 있습니다. #54901 (pufit).
- 여러 종류의 MergeTree 테이블을 Replicated 엔진으로 자동 변환하는 기능이 구현되었습니다. 테이블의 데이터 디렉터리(
/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/)에 빈convert_to_replicated파일을 생성하면, 다음에 server가 시작될 때 해당 테이블이 자동으로 변환됩니다. #57798 (Kirill). - 테이블 함수
mergeTreeIndex가 추가되었습니다. 이 함수는MergeTree테이블의 인덱스와 마크 파일 내용을 보여줍니다. 내부 검사에 사용할 수 있습니다. 구문:mergeTreeIndex(database, table, [with_marks = true])여기서database.table은MergeTree엔진을 사용하는 기존 테이블입니다. #58140 (Anton Popov). - 스키마 추론 시
file/s3/hdfs/url/azureBlobStorage엔진에서 파일 포맷을 알 수 없는 경우 자동으로 감지하도록 개선했습니다. #50576를 해결합니다. #59092 (Kruglov Pavel). - generate_series를 테이블 함수로 추가했습니다. 이 함수는 자연수 등차수열로 구성된 테이블을 생성합니다. #59390 (divanik).
- 빈 파티션과 관련된 ZooKeeper 노드를 제거하는 쿼리
ALTER TABLE table FORGET PARTITION partition를 추가했습니다. #59507 (Sergei Trifonov). - tar 아카이브 형식의 백업 읽기 및 쓰기를 지원합니다. #59535 (josh-hildred).
- 새 집계 함수 ‘groupArrayIntersect’를 추가했습니다. 관련 이슈: #49862. #59598 (Yarik Briukhovetskyi).
- DNS 문제 디버깅에 유용할 수 있는 system.dns_cache 테이블을 구현했습니다. #59856 (Kirill Nikiforov).
- S3Express 버킷 지원이 추가되었습니다. #59965 (Nikita Taranov).
- 코덱
LZ4HC는 새로운 수준 2를 지원하며, 이는 압축률이 다소 낮아지는 대신 기존 최소 수준인 3보다 더 빠릅니다. 이전 버전에서는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(['db_name', ] 'tables_regexp')와 같은merge테이블 함수의 단일 인수 버전 지원이 추가되었습니다. #60372 (豪肥肥).- 모든 포맷 이름을 Tsv, TSV, tsv, 심지어 rowbinary처럼 대소문자를 구분하지 않도록 했습니다. #60420 (豪肥肥).
- view/materialized view에서 definer 사용자를 지정할 수 있는 새로운 구문이 추가되었습니다. 이를 통해 기본 테이블에 대한 명시적 권한 부여 없이도 view에서 select/insert를 실행할 수 있습니다. #60439 (pufit).
StorageMemory(memory-engine)에min_bytes_to_keep, max_bytes_to_keep, min_rows_to_keep,max_rows_to_keep네 가지 속성을 추가했습니다 - 새로운 변경 사항을 반영하는 테스트를 추가했습니다 -memory.md문서를 업데이트했습니다 - 테이블 매개변수 한계값에 접근할 수 있도록MemorySink에 테이블context속성을 추가했습니다. #60612 (Jake Bamrah).DateTime또는DateTime64타입 값의 밀리초 구성 요소를 반환하는 함수toMillisecond가 추가되었습니다. #60649 (Robert Schulze).- 대기 중인 쿼리 수 제한과 실행 중인 쿼리 수 제한을 분리했습니다.
async_load_databases로 인해 대기하게 되는 쿼리 수를 제한하는 새 서버 설정(server setting)max_waiting_queries를 추가했습니다. 기존의 실행 중인 쿼리 수 제한에는 이제 대기 중인 쿼리가 포함되지 않습니다. #61053 (Sergei Trifonov). ATTACH PARTITION ALL지원이 추가되었습니다. #61107 (Kirill Nikiforov).
성능 개선
- SELECT 절에서 GROUP BY 키에 대한 min/max/any/anyLast 집계 함수를 제거합니다. #52230 (JackyWoo).
- 여러 [널 허용] 컬럼이 포함된 경우 직렬화된 집계 메서드의 성능을 개선했습니다. 이는 추상화의 무결성을 해치지 않는 #51399의 일반화된 버전입니다. #55809 (Amos Bird).
- ALL join의 성능을 개선하기 위해 join 출력의 생성을 지연하도록 했습니다. #58278 (LiuNeng).
- 집계 함수 ArgMin / ArgMax / any / anyLast / anyHeavy 및
ORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1쿼리의 개선 사항입니다. #58640 (Raúl Marín). - 분기 미스를 줄여 bigint 및 big decimal 타입에서 조건부 sum/avg 성능을 최적화했습니다. #59504 (李扬).
- 활성 뮤테이션이 있는 SELECT 쿼리의 성능을 개선했습니다. #59531 (Azat Khuzhin).
- 컬럼 필터 관련 사소한 최적화입니다. 기본 데이터 타입이 숫자가 아닌 필터 컬럼에는
result_size_hint = -1필터링을 적용하지 않도록 했습니다. 일부 경우 피크 메모리 사용량을 기존의 44% 수준까지 줄일 수 있습니다. #59698 (李扬). - 기본 키가 사용하는 메모리 양이 줄어듭니다. #60049 (Alexey Milovidov).
- 기본 키(primary key)와 일부 다른 작업의 메모리 사용량을 개선했습니다. #60050 (Alexey Milovidov).
- 테이블의 프라이머리 키(primary key)는 처음 액세스할 때 메모리에 지연 로드됩니다. 이는 기본적으로 활성화되는 새로운 MergeTree 설정
primary_key_lazy_load로 제어됩니다. 이에 따른 장점은 다음과 같습니다: - 사용되지 않는 테이블에는 로드되지 않습니다; - 메모리가 충분하지 않은 경우 서버 시작 시가 아니라 처음 사용할 때 예외가 발생합니다. 이에 따른 단점도 있습니다: - 프라이머리 키 로드에 따른 지연 시간은 연결을 수락하기 전에 발생하는 것이 아니라 첫 번째 쿼리 시점에 발생합니다; 이로 인해 이론적으로 thundering-herd 문제가 생길 수 있습니다. 이는 #11188을 해결합니다. #60093 (Alexey Milovidov). - 벡터 검색에 유용한 벡터화 함수
dotProduct를 추가했습니다. #60202 (Robert Schulze). - 테이블의 기본 키(primary key)에 대부분 유용하지 않은 컬럼이 포함되어 있다면, 해당 컬럼은 메모리에 유지하지 않습니다. 이는 기본값이
0.9인 새로운 설정primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns으로 제어되며, 의미는 다음과 같습니다. 복합 기본 키(composite primary key)에서 어떤 컬럼의 값이 전체 경우의 최소 0.9에서 변경되면, 그 뒤에 오는 컬럼들은 로드되지 않습니다. #60255 (Alexey Milovidov). - result_type의 내부 타입이 숫자일 때 multiIf 함수를 열 지향 방식으로 실행합니다. #60384 (李扬).
- 그림 1에서 보듯이, ”&&“를 ”&“로 대체하면 SIMD 코드가 생성될 수 있습니다.
그림 1. ’&&‘로 컴파일한 코드(왼쪽)와 ’&‘로 컴파일한 코드(오른쪽). #60498 (Zhiguo Zhou).
- 뮤텍스가 더 빨라졌습니다(거의 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의 일부는 파싱 중에, 수많은 백트래킹 과정까지 포함해 생성되었다가 폐기될 수 있습니다. 이로 인해 파싱 성능이 저하되고, 결과적으로 readonly 사용자가 DoS를 일으킬 수 있게 됩니다. 그러나 가장 큰 문제는 이것이 퍼저의 진행을 가로막는다는 점입니다. #61543 (Alexey Milovidov).
개선 사항
- materialized view에 대해 MODIFY COLUMN 쿼리를 실행할 때 모든 컬럼이 존재하는지 확인할 수 있도록 내부 테이블 구조를 점검합니다. #47427 (sunny).
- 파서의 모든 키워드를 포함한 테이블(table)
system.keywords가 추가되었습니다. 주로 퍼징과 구문 강조를 개선하는 데 필요하며, 이를 위해 사용될 예정입니다. #51808 (Nikita Mikhaylov). - 분석기에서 create parameterized view를 분석하지 않도록 매개변수화된 뷰 지원을 추가했습니다. 기존 매개변수화된 뷰 로직도 리팩터링하여 create parameterized view를 분석하지 않도록 했습니다. #54211 (SmitaRKulkarni).
- Ordinary 데이터베이스 엔진은 더 이상 사용이 권장되지 않습니다. 서버에서 이를 사용 중이면 clickhouse-client에 경고가 표시됩니다. 이로써 #52229가 해결되었습니다. #56942 (shabroo).
- 테이블이 삭제되면 해당 테이블과 관련된 모든 zero-copy 잠금도 함께 삭제되어야 합니다. 이러한 잠금이 들어 있는 디렉터리도 함께 제거되어야 합니다. #57575 (Sema Checherinda).
dictGetOrDefault함수에서 단락 평가를 지원하도록 개선했습니다. #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에서 가상 컬럼(virtual columns)을 사용할 수 있습니다.
_part_offset와 같은 비상수 가상 컬럼에 특히 유용합니다. #59033 (Amos Bird). - 이제 분산 테이블 엔진 설정도 서버 구성 파일에서 지정할 수 있습니다(MergeTree 설정과 유사). 예:
<distributed> <flush_on_detach>false</flush_on_detach> </distributed>. #59291 (Azat Khuzhin). - Keeper 개선 사항:
latest_logs_cache_size_threshold및commit_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). - Intel QPL(
DEFLATE_QPL코덱에 사용됨)을 v1.3.1에서 v1.4.0으로 업데이트했습니다. 또한 폴링 timeout 메커니즘의 버그도 수정했습니다. 일부 경우 timeout이 제대로 작동하지 않으면 timeout 발생 시 IAA와 CPU가 버퍼를 동시에 처리할 수 있음을 확인했습니다. 현재로서는 IAA 코덱 상태가 QPL_STS_BEING_PROCESSED가 아닌지 확인한 뒤, SW 코덱으로 폴백하는 것이 더 안전합니다. #59551 (jasperzhu). - libhdfs3에 위치 지정
pread를 추가했습니다. libhdfs3에서 위치 지정 읽기를 호출하려면 다음과 같이 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로 생성된 명명된 컬렉션의 동작을 통일했습니다. #59710 (Pervakov Grigorii).
- CREATE TABLE에 uuid가 명시적으로 포함된 경우 replica_path에서 uuid를 허용합니다. #59908 (Azat Khuzhin).
system.tables시스템 테이블에 ReplicatedMergeTree 테이블의metadata_version컬럼을 추가했습니다. #59942 (Maksim Kita).- Keeper 개선 사항: 디스크 관련 작업 실패 시 재시도를 추가했습니다. #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에 세그먼트가 2개 이상(num_layers> 1) 있으면 백그라운드 플러시가 모든 세그먼트에서 여러 스레드로 동시에 수행됩니다. #60111 (alesapin). user키를 사용해 구성에서 특정 S3 설정별 사용자를 지정할 수 있도록 지원합니다. #60144 (Antonio Andelic).- GCP가
GATEWAY_TIMEOUTHTTP 오류 코드와 함께Internal Error를 반환하는 경우 S3 파일의 GCP 폴백을 버퍼 복사로 전환합니다. #60164 (Maksim Kita). - “local_blob_storage” 대신 객체 스토리지 유형으로 “local”을 허용합니다. #60165 (Kseniia Sumarokova).
- Variant 값에 대한 비교 연산자를 구현하고, Field를 Variant 컬럼에 올바르게 삽입할 수 있도록 했습니다. 기본적으로 서로 유사한 variant type으로는
Variant타입을 생성할 수 없도록 했습니다(allow_suspicious_variant_types설정으로 허용 가능). #59996을 닫습니다. #59850을 닫습니다. #60198 (Kruglov Pavel). - 가상 컬럼(virtual columns)의 전반적인 사용성이 개선되었습니다. 이제
PREWHERE에서 가상 컬럼을 사용할 수 있으며(_part_offset과 같은 비상수 가상 컬럼에 특히 유용합니다),describe_include_virtual_columns설정이 활성화된 경우DESCRIBE쿼리에서 컬럼 comment로 가상 컬럼에 대한 내장 문서를 확인할 수 있습니다. #60205 (Anton Popov). ULIDStringToDateTime에 단락 평가를 적용했습니다. #60211 (Juan Madurga).- 테이블
system.backups및system.backup_log에query_id컬럼이 추가되었습니다.error컬럼에 오류 스택 트레이스가 추가되었습니다. #60220 (Maksim Kita). DETACH/서버 종료 시 및SYSTEM FLUSH DISTRIBUTED에서 Distributed engine의 대기 중인 INSERT 블록을 병렬로 플러시(병렬 처리는 테이블에 멀티 디스크 정책이 있는 경우에만 작동하며, 현재 Distributed engine의 모든 테이블이 이에 해당합니다). #60225 (Azat Khuzhin).joinRightColumnsSwitchNullability의 filter 설정이 올바르지 않은 문제를 해결했습니다. #59625. #60259 (lgbo).- 머지 시 read-through cache를 강제하는 설정을 추가했습니다. #60308 (Kseniia Sumarokova).
- 이슈 #57598에서는 트랜잭션 처리와 관련해 다른 동작을 언급합니다. 활성 트랜잭션이 없을 때 COMMIT/ROLLBACK을 실행하면 MySQL과 달리 오류로 처리됩니다. #60338 (PapaToemmsn).
distributed_ddl_output_mode설정에none_only_active모드가 새로 추가되었습니다. #60340 (Alexander Tokmakov).- 이제 MySQL 포트를 통한 연결에서는 QuickSight를 즉시 사용할 수 있도록
prefer_column_name_to_alias = 1설정이 자동으로 적용됩니다. 또한mysql_map_string_to_text_in_show_columns및mysql_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). - Advanced dashboard의 여러 선 그래프 색상이 약간 더 개선되었습니다. #60391 (Alexey Milovidov).
- 차트가 서로 위에 중복으로 표시되던 JavaScript 코드의 경쟁 상태 문제를 수정했습니다. #60392 (Alexey Milovidov).
- 사용자가
max_parser_depth설정을 지나치게 큰 값으로 잘못 설정한 경우에도 파서의 스택 오버플로우를 검사합니다. 이로써 #59622가 해결됩니다. #60434 (Alexey Milovidov). substring함수에 새 별칭(alias)byteSlice가 추가되었습니다. #60494 (Robert Schulze).- 혼동을 줄이기 위해 서버 설정
dns_cache_max_size의 이름을dns_cache_max_entries로 변경했습니다. #60500 (Kirill Nikiforov). SHOW INDEX | INDEXES | INDICES | KEYS는 더 이상 기본 키(primary key) 컬럼을 기준으로 정렬하지 않습니다(기존 동작은 직관적이지 않았습니다). #60514 (Robert Schulze).- Keeper 개선 사항: 데이터 손실을 방지하기 위해 시작 시 잘못된 스냅샷이 감지되면 중단합니다. #60537 (Antonio Andelic).
merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_fault_probability설정을 사용해 MergeTree 읽기 split ranges를 겹치는 범위와 겹치지 않는 범위로 나누는 fault injection이 추가되었습니다. #60548 (Maksim Kita).- 이제 Advanced dashboard에서는 스크롤해도 컨트롤이 항상 표시됩니다. 따라서 위로 스크롤하지 않고도 새 차트를 추가할 수 있습니다. #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 객체로부터 이름이 지정된 Tuple을 추론할 때, 모호한 경로에서 예외 대신 String type을 사용할 수 있도록 하는 설정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).
parallel_replicas_allow_in_with_subquery = 1설정을 추가하여 IN에 사용되는 서브쿼리가 병렬 레플리카와 함께 작동할 수 있도록 했습니다. #60950 (Nikolai Kochetov).- DNSResolver가 해석된 IP 집합의 순서를 섞습니다. #60965 (Sema Checherinda).
- 파일 확장자를 기반으로
clickhouse-client및clickhouse-local의 출력 형식 감지를 지원합니다. #61036 (豪肥肥). - 메모리 제한 변경 사항을 주기적으로 확인합니다. #61049 (Han Fei).
- 기본적으로 processors 프로파일링(정렬, 집계 등에 소요된 시간과 입출력 바이트 수)을 활성화합니다. #61096 (Azat Khuzhin).
- 실수로 빠졌던 함수
toUInt128OrZero를 추가했습니다(이 실수는 https://github.com/ClickHouse/ClickHouse/pull/945와 관련이 있습니다). 호환성 별칭FROM_UNIXTIME및DATE_FORMAT은 SQL 호환성 별칭의 기대 동작에 맞게 대소문자를 구분하지 않도록 변경되었습니다(이들은 ClickHouse 네이티브가 아니며 MySQL 호환성을 위해서만 존재합니다). #61114 (Alexey Milovidov). - 접근 검사 관련 개선 사항으로, 대상 사용자에게 해당 권한에 대한 회수 권한이 없는 경우에도 보유하지 않은 권한을 취소할 수 있게 했습니다. 예시: ```sql GRANT SELECT ON . TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit).
- 이전 opt의 오류를 수정했습니다: https://github.com/ClickHouse/ClickHouse/pull/59698: 처음 필터링되는 컬럼의 크기가 최소가 되도록
break를 제거했습니다 cc @jsc0218. #61145 (李扬). Nullable컬럼에서has()함수 수정 (#60214 문제 수정). #61249 (Mikhail Koviazin).- 이제 하위 트리
<include from_zk="/path" merge="true">에 대해 구성 치환에서 속성merge="true"를 지정할 수 있습니다. 이 속성을 지정하면 ClickHouse가 하위 트리를 기존 구성과 머지하며, 그렇지 않으면 기본적으로 새 콘텐츠를 구성에 추가합니다. #61299 (alesapin). - 가상 메모리 매핑용 비동기 메트릭인 VMMaxMapCount 및 VMNumMaps를 추가합니다. #60662를 해결합니다. #61354 (Tuan Pham Anh).
- 임시 데이터를 생성하는 모든 위치(예: 외부 메모리 정렬 및 외부 메모리 GROUP BY)에서
temporary_files_codec설정이 사용되도록 했습니다. 이전에는partial_mergeJOIN 알고리즘에서만 작동했습니다. #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 큐의 세그먼트 모드를 허용하지 않도록 변경했습니다. #61537 (Kseniia Sumarokova).
- 오타를
use_leagcy_max_level에서use_legacy_max_level로 수정했습니다. #61545 (William Schoeffel). - blob_storage_log에서 중복 항목 일부를 제거합니다. #61622 (YenchangChan).
- MySQL 호환성을 위한 alias로
current_user함수를 추가했습니다. #61770 (Yarik Briukhovetskyi). - Azure Blob Storage를 사용할 때 백업 IO에 관리형 아이덴티티를 사용하도록 했습니다. ClickHouse가 존재하지 않는 컨테이너를 생성하려고 시도하지 않도록 하는 설정을 추가했습니다. 이러한 작업에는 스토리지 계정 수준의 권한이 필요합니다. #61785 (Daniel Pozo Escalona).
- 이전 버전에서는 Pretty 형식의 일부 숫자가 충분히 보기 좋게 표시되지 않았습니다. #61794 (Alexey Milovidov).
- Pretty 형식에서는 결과 집합에 값이 하나뿐인 경우 긴 값이 잘리지 않습니다.
SHOW CREATE TABLE쿼리 결과가 그 예입니다. #61795 (Alexey Milovidov). clickhouse-local과 마찬가지로clickhouse-client도--format옵션의 동의어인--output-format옵션을 허용합니다. 이 변경으로 #59848이 해결되었습니다. #61797 (Alexey Milovidov).- stdout이 터미널이고 출력 형식이 지정되지 않은 경우,
clickhouse-client및 유사한 도구는 대화형 모드와 마찬가지로 기본적으로PrettyCompact를 사용합니다.clickhouse-client와clickhouse-local은 입력 및 출력 형식에 대한 명령줄 인수를 통합된 방식으로 처리합니다. 이 변경으로 #61272가 해결되었습니다. #61800 (Alexey Milovidov). - 가독성을 높이기 위해 Pretty 형식에서 숫자 그룹을 밑줄로 구분합니다. 이는 새로운 설정인
output_format_pretty_highlight_digit_groups로 제어됩니다. #61802 (Alexey Milovidov).
버그 수정(공식 안정 릴리스에서 사용자에게 보이는 오작동)
- Decimal 인수에서 발생하던
intDiv버그 수정 #59243 (Yarik Briukhovetskyi). - wingfuzz가 발견한 kql 문제를 수정 #59626 (Yong Wang).
- AsynchronousBoundedReadBuffer의 “Read beyond last offset” 오류를 수정했습니다 #59630 (Vitaly Baranov).
- rabbitmq: ack도 nack도 되지 않는 메시지 문제가 수정되었습니다 #59775 (Kseniia Sumarokova).
- 분석기에서 GROUP BY const 사용 시 const 및 LowCardinality에 대한 함수 실행 문제 수정 #59986 (Azat Khuzhin).
- DateTime64의 scale 변환 문제를 수정했습니다 #60004 (Yarik Briukhovetskyi).
- 작은따옴표가 포함된 SQLite INSERT 수정(백슬래시 대신 따옴표로 작은따옴표를 이스케이프) #60015 (Azat Khuzhin).
- 컬럼 별칭이 제거되는 optimize_uniq_to_count 문제를 수정했습니다 #60026 (Raúl Marín).
- MergeTree에서 finished_mutations_to_keep=0 관련 문제 수정(문서에 따르면 0은 모두 유지해야 함) #60031 (Azat Khuzhin).
- 삭제 시 s3queue 테이블에서 발생할 수 있는 예외를 수정 #60036 (Kseniia Sumarokova).
- 동일한 파트에 대한 PartsSplitter의 잘못된 범위 #60041 (Maksim Kita).
- DDLLogEntry에서 하드코딩된 4096 대신 Context의 max_query_size를 사용하도록 변경했습니다 #60083 (Kruglov Pavel).
- 쿼리 포맷의 불일치를 수정했습니다 #60095 (Alexey Milovidov).
- 서브쿼리에서 explain 포맷의 일관성 문제를 수정했습니다 #60102 (Alexey Milovidov).
- 널 허용(Nullable) 사용 시 발생하는 cosineDistance 충돌 수정 #60150 (Raúl Marín).
- 문자열로 표현된 bool 값을 실제 bool 값으로 형 변환할 수 있도록 허용 #60160 (Robert Schulze).
- system.s3queue_log 문제 수정 #60166 (Kseniia Sumarokova).
- 널 허용 집계 함수 이름을 사용할 때 발생하는 arrayReduce 문제를 수정했습니다 #60188 (Raúl Marín).
- 예비 필터링(PK, 파티션 프루닝) 중 actions 실행 문제 수정 #60196 (Azat Khuzhin).
- s3queue의 민감한 정보 숨김 #60233 (Kseniia Sumarokova).
- “
ORDER BY ALL을ORDER BY *로 대체” 변경 되돌리기 #60248 (Robert Schulze). - Azure Blob Storage : endpoint 및 prefix 문제 수정 #60251 (SmitaRKulkarni).
- HTTP 예외 코드 수정. #60252 (Austin Kothig).
- LRUResource Cache 버그 수정 (Hive cache) #60262 (shanfengp).
- s3queue: 버그 수정(간헐적으로 실패하던 test_storage_s3_queue/test.py::test_shards_distributed도 함께 수정) #60282 (Kseniia Sumarokova).
- IPv6용 해시 함수에서 초기화되지 않은 값 사용과 잘못된 결과를 수정했습니다 #60359 (Kruglov Pavel).
- 병렬 레플리카가 변경된 경우 강제로 다시 분석 #60362 (Raúl Marín).
- 새 disks 구성 옵션에서 plain metadata type을 사용하던 문제를 수정함 #60396 (Kseniia Sumarokova).
- 의미가 없으므로 max_parallel_replicas를 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 수정: commit 로그 대기 시 timeout 추가 #60544 (Antonio Andelic).
system.numbers에서 읽는 행 수를 줄였습니다 #60546 (JackyWoo).- 날짜 타입에는 number 팁을 출력하지 않도록 합니다 #60577 (Raúl Marín).
- filter에서 비결정적 함수를 사용할 때 발생하던 MergeTree 읽기 문제 수정 #60586 (Kruglov Pavel).
- compatibility 설정 값 유형이 잘못되었을 때 발생하는 논리 오류 수정 #60596 (Kruglov Pavel).
- 혼합 x86-64 / ARM 클러스터에서 집계 함수 상태 불일치 문제를 수정 #60610 (Harry Lee).
- fix(prql): panic handler 안정성 개선 #60615 (Maximilian Roos).
Decimal및 날짜 인수에 대한intDiv수정 #60672 (Yarik Briukhovetskyi).- 수정: alter modify 쿼리에서 CTE를 확장 #60682 (Yakov Olkhovskiy).
- non-Atomic/Ordinary 데이터베이스 엔진용 system.parts 수정(예: Memory) #60689 (Azat Khuzhin).
- 매개변수화된 뷰의 메타데이터 파일에서 “잘못된 저장소 정의” 문제 수정 #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).
- 지원되지 않는 멀티파트 업로드 작업에서 사용자 지정 메타데이터 헤더를 설정할 수 없도록 했습니다 #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).
- 복제된 데이터베이스에서의 비동기 RESTORE 수정 #60934 (Antonio Andelic).
- 네이티브 프로토콜을 통해
Log테이블에 비동기 삽입하는 과정에서 발생하던 교착 상태를 수정했습니다 #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 스토리지에서 MATERIALIZED 컬럼 관련 논리 오류 수정 #61320 (vdimir).
- CREATE OR REPLACE DICTIONARY 문제 수정 #61356 (Vitaly Baranov).
- external ON CLUSTER를 사용하는 ATTACH 쿼리를 수정했습니다 #61365 (Nikolay Degterinsky).
- actions DAG split 관련 문제 수정 #61458 (Raúl Marín).
- 실패한 RESTORE를 마무리할 때 발생하던 문제 수정 #61466 (Vitaly Baranov).
- 호환성 설정을 통해 async_insert_use_adaptive_busy_timeout를 올바르게 비활성화 #61468 (Raúl Marín).
- 복원 풀에서 대기열 사용을 허용합니다 #61475 (Nikita Taranov).
- UUID를 사용해 system.parts를 읽을 때 발생하던 버그를 수정했습니다(이슈 61220). #61479 (Dan Wu).
- window view 충돌 수정 #61526 (Alexey Milovidov).
- 네이티브가 아닌 정수 사용 시
repeat문제를 수정했습니다 #61527 (Antonio Andelic). - 클라이언트
-s인수를 수정 #61530 (Mikhail f. Shiryaev). - arrayPartialReverseSort 충돌 수정 #61539 (Raúl Marín).
- 상수 위치에서의 문자열 검색 수정 #61547 (Antonio Andelic).
- datetime64 사용 시 addDays에서 오류가 발생하던 문제 수정 #61561 (Shuai li).
- 중복 제거가 적용된 async insert의
system.part_log문제 수정 #61620 (Antonio Andelic). - system.parts의 non-ready set 문제를 수정했습니다. #61666 (Nikolai Kochetov).