Cloud용 v24.10 변경 로그
v24.10 릴리스를 기준으로 한 ClickHouse Cloud 서비스 관련 변경 사항입니다.
하위 호환성이 없는 변경
- 서브쿼리가 괄호 안에 있는
UNION체인의 쿼리에서FORMAT앞에SETTINGS를 작성할 수 있도록 허용합니다. 이는 #39712를 해결합니다. 쿼리에 연속해서 두 번SETTINGS절이 지정된 경우의 동작을 변경합니다. 가장 가까운SETTINGS절이 해당 서브쿼리에 우선 적용됩니다. 이전 버전에서는 가장 바깥쪽SETTINGS절이 안쪽 절보다 우선 적용될 수 있었습니다. #60197#68614 (Alexey Milovidov). - Dynamic 타입을 재구현했습니다. 이제 Dynamic 데이터 타입의 제한에 도달하면 새로운 타입은
String으로 캐스팅되지 않고, 바이너리로 인코딩된 데이터 타입과 함께 특수한 이진 형식의 데이터 구조에 저장됩니다. 이제까지 Dynamic 컬럼에 한 번이라도 삽입된 모든 타입은 서브컬럼으로 읽을 수 있습니다. #68132 (Pavel Kruglov). a[b].c와 같은 표현식이 명명된 튜플(named tuple)에서 지원되며,expr().name과 같은 임의 표현식에서의 명명된 첨자(named subscript)도 지원됩니다. 이는 JSON을 처리하는 데 유용합니다. #54965를 해결합니다. 이전 버전에서는expr().name형태의 표현식이tupleElement(expr(), name)으로 파싱되었으며, 쿼리 분석기는 해당 튜플 요소가 아니라 컬럼name을 찾으려고 했습니다. 새 버전에서는 이것이tupleElement(expr(), 'name')으로 변경되었습니다. 대부분의 경우 이전 버전은 제대로 동작하지 않았지만, 이 변경으로 인해 비호환성이 발생할 수 있는 매우 이례적인 시나리오를 상정할 수 있습니다. 예를 들어 튜플 요소의 이름과 다른 이름을 가진 컬럼이나 별칭에 튜플 요소 이름을 저장한 경우입니다:SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a. 이러한 쿼리를 사용했을 가능성은 매우 낮지만, 여전히 이 변경을 잠재적으로 하위 호환성이 없는 변경으로 표시해야 합니다. #68435 (Alexey Milovidov).print_pretty_type_names설정이 활성화된 경우,SHOW CREATE TABLESQL 문,formatQuery함수,clickhouse-client및clickhouse-local의 대화형 모드에서Tuple데이터 타입을 Pretty 형식으로 출력합니다. 이전 버전에서는 이 설정이DESCRIBE쿼리와toTypeName에만 적용되었습니다. #65753를 해결합니다. #68492 (Alexey Milovidov).- 이제
[PRE]WHERE절의 필터 조건 재정렬이 기본적으로 허용됩니다.allow_reorder_prewhere_conditions를false로 설정하면 비활성화할 수 있습니다. #70657 (Nikita Taranov). mapKeys/mapValues에서LowCardinality타입을 유지하여optimize_functions_to_subcolumns최적화를 수정합니다(이전에는Invalid column type for ColumnUnique::insertRangeFrom. Expected String, got LowCardinality(String)오류가 발생할 수 있었습니다). #70716 (Azat Khuzhin).
새 기능
- 갱신 가능 구체화 뷰는 이제 프로덕션 환경에서 사용할 수 있습니다. #70550 (Michael Kolupaev). 갱신 가능 구체화 뷰는 이제 복제 데이터베이스(Replicated database)에서도 지원됩니다. #60669 (Michael Kolupaev).
- 함수
toStartOfInterval()에는 이제 TimescaleDB의time_bucket()함수와 PostgreSQL의date_bin()함수를 각각 에뮬레이션하는 새로운 오버로드가 추가되었습니다(#55619). 이 오버로드를 사용하면 날짜나 타임스탬프 값을 고정된 기준 시각(0000-01-01 00:00:00.000) 대신 임의의 기준 시각으로부터 주어진 구간의 배수에 맞춰 맞출 수 있습니다. 예를 들어,SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30'));은2023-01-01 14:44:30을 반환하는데, 이는 기준 시각2023-01-01 14:35:30부터 시작하는 1분 간격 구간의 배수에 해당합니다. #56738 (Yarik Briukhovetskyi). - MongoDB 통합이 리팩터링되었습니다. 사용이 중단된 Poco::MongoDB에서 새로운 드라이버 mongocxx로 마이그레이션하고, 사용이 중단된 기존 프로토콜에 대한 지원을 제거했으며, URI를 통한 연결을 지원하고, 모든 MongoDB 타입을 지원합니다. 또한 WHERE 및 ORDER BY SQL 문이 MongoDB 측에서 실행되도록 지원하며, MongoDB에서 지원하지 않는 표현식 사용을 제한했습니다. #63279 (Kirill Nikiforov).
- clickhouse-client에 새로운
--progress-table옵션이 추가되어, 쿼리 실행 중에 변화하는 메트릭을 표 형태로 출력합니다. 새로운--enable-progress-table-toggle옵션은--progress-table옵션과 연동되며, Control+Space 키 조합을 눌러 진행 상황 표의 렌더링을 토글합니다. #63689 (Maria Khristenko). - 이제 와일드카드 접두사를 사용하는 테이블들에 대해 접근 권한을 부여할 수 있습니다.
GRANT SELECT ON db.table_pefix_* TO user. #65311 (pufit). - ClickHouse가 메타데이터, 데이터, 진행 상황(progress), 합계(totals), 통계(statistics)를 포함해 각 행을 줄바꿈(newline)으로 구분된 JSON 객체로 출력하는 JSONCompactWithProgress 포맷을 도입했습니다. #66205 (Alexey Korepanov).
- 개별 쿼리에 대해
system.events테이블의 메모리 및 메트릭 값 이력을 포함하고 이를 주기적으로 디스크에 플러시하는system.query_metric_log를 추가했습니다. #66532 (Pablo Marcos). input_format_json_empty_as_defaultSETTING을 추가하여, 이 설정을 활성화하면 JSON 입력에서 비어 있는 필드를 기본값으로 처리합니다. #59339를 해결합니다. #66782 (Alexis Arnaud).- 문자열의 일부를 다른 문자열로 대체하는
overlay및overlayUTF8함수가 추가되었습니다. 예:SELECT overlay('Hello New York', 'Jersey', 11)은Hello New Jersey를 반환합니다. #66933 (李扬). - 새 명령 추가: 파티션 내 경량한 삭제
DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr;``` VM-114-29-tos :) select * from ads_app_poster_ip_source_channel_di_replicated_local;. #67805 (sunny). Interval데이터 타입 값에 대한 비교를 구현하여, 이제 비교 시 최소 상위 타입(least supertype)으로 변환되도록 했습니다. #68057 (Yarik Briukhovetskyi).create_if_not_existssetting을 추가하여 CREATE SQL 문에서 기본적으로 IF NOT EXISTS 동작을 하도록 했습니다. #68164 (Peter Nguyen).- Azure 및 로컬 환경에서 Iceberg 테이블을 읽을 수 있게 했습니다. #68210 (Daniil Ivanik).
- JSON 컬럼의 타입별 내용을 더 잘 파악할 수 있도록
distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes집계 함수를 추가했습니다. #68463 (Pavel Kruglov). - 이제 쿼리 캐시 항목을 태그별로 삭제할 수 있습니다. 예를 들어
SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc'로 생성된 쿼리 캐시 항목은 이제SYSTEM DROP QUERY CACHE TAG 'abc'로 삭제할 수 있습니다(또는 전체 쿼리 캐시를 비우는SYSTEM DROP QUERY CACHE를 사용할 수 있습니다). #68477 (Michał Tabaszewski). - 간단한 SELECT 쿼리는 암시적 SELECT를 사용하여 계산기 스타일의 식으로도 작성할 수 있습니다. 예:
ch "1 + 2". 이는 새로운 설정인implicit_select로 제어됩니다. #68502 (Alexey Milovidov). - 형식 변환을 간편하게 수행하기 위한 기능으로
clickhouse local에서--copy모드를 지원합니다. #68503. #68583 (Denis Hananein). - 문자열의 RIPEMD-160 암호화 해시를 계산하는
ripeMD160함수를 추가했습니다. 예를 들어SELECT hex(ripeMD160('The quick brown fox jumps over the lazy dog'))은37F332F68DB77BD9D7EDD4969571AD671CF9DD3B를 반환합니다. #68639 (Dergousov Maxim). - URL 테이블 엔진에 가상 컬럼 _headers를 추가했습니다. #65026 이슈를 해결합니다. #68867 (flynn).
- 사용 가능한 프로젝션을 추적할 수 있도록
system.projections테이블을 추가했습니다. #68901 (Jordi Villar). arrayUnion함수를 지원하도록 추가했습니다. #68989 (Peter Nguyen).- Spark와의 호환성(arrays_zip)을 위해 새로운 함수
arrayZipUnaligned를 추가했습니다. 이 함수는 기존arrayZip를 기반으로 정렬이 맞지 않는 배열(unaligned arrays)도 허용합니다. ``` sql SELECT arrayZipUnaligned([1], [1, 2, 3]). #69030 (李扬). - 집계 함수
quantileExactWeightedInterpolated를 지원합니다. 이 함수는quantileExactWeighted를 기반으로 한 보간(interpolated) 버전입니다. 이미quantileExactInterpolatedWeighted가 있는데 왜 새로운quantileExactWeightedInterpolated가 필요한지 궁금해할 수 있습니다. 그 이유는 새 함수가 기존 것보다 더 정확하기 때문입니다. 참고로 이 기능은 Apache Gluten에서 Spark와의 호환성을 위해 도입되었습니다. #69619 (李扬). - arrayElementOrNull 함수를 지원합니다. 배열 인덱스가 범위를 벗어나거나 맵에서 키를 찾지 못한 경우 null을 반환합니다. #69646 (李扬).
- Dynamic 타입의 내부 타입에서 실행하는 방식으로 대부분의 함수에서 Dynamic 타입을 지원합니다. #69691 (Pavel Kruglov).
- 함수
arrayAUC에 인수scale(기본값:true)를 추가하여 정규화 단계를 생략할 수 있도록 했습니다(이슈 #69609). #69717 (gabrielmcg44). - 문자열의 RIPEMD-160 암호화 해시를 계산하는
RIPEMD160함수를 다시 추가했습니다. 예를 들어SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))은37F332F68DB77BD9D7EDD4969571AD671CF9DD3B를 반환합니다. #70087 (Dergousov Maxim). - ETag + 파일 경로의 해시를 캐시 키로 사용하여 객체 스토리지 테이블 엔진과 데이터 레이크에서 읽기용 파일을 캐시할 수 있도록 허용합니다. #70135 (Kseniia Sumarokova).
- HDFS에 있는 Iceberg 테이블 읽기를 지원합니다. #70268 (flynn).
input_format_binary_read_json_as_string/output_format_binary_write_json_as_string설정을 사용하면 RowBinary 형식에서 JSON 타입을 이진 문자열로 읽고 쓸 수 있습니다. #70288 (Pavel Kruglov).- Native 형식에서 JSON 컬럼을 하나의 String 컬럼으로 직렬화/역직렬화할 수 있도록 합니다. 출력에는
output_format_native_write_json_as_string설정을 사용합니다. 입력 시에는 컬럼 데이터 앞에 직렬화 버전1을 사용합니다. #70312 (Pavel Kruglov). - 이제 표준 CTE 구문인
with insert를 지원합니다. 이전에는insert ... with ...만 지원했습니다. #70593 (Shichao Jin).