Cloud용 v24.5 변경 로그
v24.5 릴리스를 기반으로 한 ClickHouse Cloud 서비스 관련 변경 사항입니다.
하위 호환성이 깨지는 변경 사항
-
duration 값이 마이크로초 단위 해상도임을 반영하기 위해 system.zookeeper 테이블의 컬럼 이름을 duration_ms에서 duration_microseconds로 변경합니다. #60774 (Duc Canh Le).
-
max_parallel_replicas를 0으로 설정하지 못하도록 합니다. 0으로 설정하는 것은 의미가 없으며, 예기치 않은 논리적 오류로 이어질 수 있습니다. GitHub 이슈 #60140을 해결합니다. #61201 (Kruglov Pavel).
-
INSERT WATCH 쿼리 지원을 제거합니다(실험적 LIVE VIEW 기능의 일부였습니다). #62382 (Alexey Milovidov).
-
함수 neighbor, runningAccumulate, runningDifferenceStartingWithFirstValue, runningDifference 사용이 더 이상 권장되지 않습니다(오류 발생 가능성이 높기 때문입니다). 대신 적절한 윈도우 함수(window function)를 사용해야 합니다. 다시 활성화하려면 allow_deprecated_error_prone_window_functions=1로 설정하십시오. #63132 (Nikita Taranov).
호환되지 않는 변경 사항
-
새로운 ClickHouse 버전에서는 함수 geoDistance, greatCircleDistance, greatCircleAngle 이(가) 내부 계산과 반환 타입에 대해, 모든 인수가 Float64 인 경우 64비트 배정밀도 부동소수점 데이터 타입을 사용합니다. 이로써 이슈 #58476이 해결됩니다. 이전 버전에서는 이 함수가 항상 Float32 를 사용했습니다.
geo_distance_returns_float64_on_float64_arguments를false로 설정하거나compatibility를 24.2 이하로 설정하여 기존 동작으로 전환할 수 있습니다. #61848 (Alexey Milovidov). -
system.columns 에 대한 쿼리는 컬럼 수가 많고, 많은 데이터베이스나 테이블에 SHOW TABLES 권한이 부여되지 않은 경우 더 빠르게 동작합니다. 이전 버전에서는 특정 컬럼에 대해 해당 테이블에 SHOW TABLES 권한을 부여하지 않고, 개별 컬럼에만 SHOW COLUMNS 권한을 부여한 경우에도 system.columns 테이블에 해당 컬럼이 표시되었지만, 새 버전에서는 해당 테이블 전체를 건너뜁니다. 쿼리를 느리게 만들던 trace 로그 메시지 「Access granted」와 「Access denied」를 제거했습니다. #63439 (Alexey Milovidov).
-
largestTriangleThreeBuckets 에서 발생하던 비정상 종료(crash)를 수정했습니다. 이로 인해 이 함수의 동작이 변경되어, 제공된 시계열에서 NaN 값을 무시하도록 되었습니다. 따라서 결과 집합이 이전 버전과 달라질 수 있습니다. #62646 (Raúl Marín).
새로운 기능
-
새 분석기는 신규 서비스에서 기본적으로 활성화됩니다.
-
drop table a,b,c;처럼 여러 테이블을 한꺼번에 삭제하는 기능을 지원합니다. #58705 (zhongyuankai). -
이제
input_format_tsv_crlf_end_of_lineSETTING을 사용하면 TSV 형식에서 CRLF를 파싱할 수 있습니다. Closes #56257. #59747 (Shaun Struwig). -
이제 Table 엔진에 대한 GRANT가 가능해졌으며, 기존 사용자의 동작 방식에는 영향이 없습니다. #60117 (jsc0218).
-
application/x-www-form-urlencoded 형식으로 단일 레코드를 읽기/쓰기를 위한 Form Format을 추가합니다. #60199 (Shaun Struwig).
-
CROSS JOIN에서 압축을 사용할 수 있게 되었습니다. #60459 (p1rattttt).
-
생략된 필드에 대해 NULL 값을 강제로 사용하도록 하는 새로운 설정
input_format_force_null_for_omitted_fields가 추가되었습니다. #60887 (Constantine Peresypkin). -
좌측 및 우측 테이블 모두의 컬럼이 포함된 부등식 조건을 사용하는 조인을 지원합니다(예:
t1.y < t2.y). 활성화하려면SET allow_experimental_join_condition = 1로 설정합니다. #60920 (lgbo). -
새로운 함수 getClientHTTPHeader를 추가합니다. 이를 통해 이슈 #54665가 해결됩니다. @lingtaolf와 공동 작성했습니다. #61820 (Alexey Milovidov).
-
편의를 위해
SELECT * FROM numbers()는 제한이 없는SELECT * FROM system.numbers와 동일하게 동작합니다. #61969 (YenchangChan). -
이제 ALTER MODIFY SETTING을 통해 memory 테이블의 설정을 수정할 수 있습니다. ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;. #62039 (zhongyuankai).
-
Analyzer에서 재귀 CTE를 지원합니다. #62074 (Maksim Kita).
-
이전에는 S3 storage와 S3 table function에서 아카이브 파일에서 데이터를 조회하는 기능을 지원하지 않았습니다. S3에 있는 아카이브 내부의 파일들을 순회할 수 있는 솔루션을 추가했습니다. #62259 (Daniil Ivanik).
-
조건부 함수에서 clamp 함수 지원. #62377 (skyoct).
-
npy 출력 형식을 추가합니다. #62430 (豪肥肥).
-
Analyzer에서 QUALIFY 절을 지원합니다. #47819 이슈를 종료합니다. #62619 (Maksim Kita).
-
HTTP 인터페이스에 role 쿼리 매개변수가 추가되었습니다. 이 매개변수는 SQL 문이 실행되기 전에 role을 적용한다는 점에서
SET ROLE x와 유사하게 동작합니다. 이를 통해 HTTP 인터페이스에서 여러 SQL 문을 허용하지 않아SET ROLE x와 실제 SQL 문을 동시에 전송할 수 없었던 제한을 극복할 수 있습니다. 이 방식으로 여러 role을 설정하는 것도 가능합니다(예:?role=x&role=y), 이는SET ROLE x, y와 동일하게 동작합니다. #62669 (Serge Klochkov). -
SYSTEM UNLOAD PRIMARY KEY가 추가되었습니다. #62738 (Pablo Marcos).
-
SQL 함수 generateUUIDv7, generateUUIDv7ThreadMonotonic, generateUUIDv7NonMonotonic(단조 증가 특성과 성능 간의 서로 다른 절충을 제공함)을 추가하여, 무작위 요소가 결합된 타임스탬프 기반 UUID 버전 7을 생성할 수 있도록 했습니다. 또한 UUID에서 바이트를 추출하는 새 함수 UUIDToNum과 UUID 버전 7에서 타임스탬프 요소를 추출하는 새 함수 UUIDv7ToDateTime도 추가했습니다. #62852 (Alexey Petrunyaka).
-
이제 Raw를 TSVRaw의 동의어로 사용할 수 있습니다. #63394 (Unalian).
-
크기가 제한을 초과하는 경우 임시 파일에서 CROSS JOIN을 수행할 수 있도록 했습니다. #63432 (p1rattttt).
성능 향상
-
INSERT 시 새로 생성된 프로젝션 블록을 병합하지 않습니다. #59405 (Nikita Taranov).
-
SELECT 수행 시 뮤테이션으로 인한 오버헤드를 줄였습니다(v2). #60856 (Azat Khuzhin).
-
동치 집합을 사용하여 JOIN 필터 푸시다운을 개선했습니다. #61216 (Maksim Kita).
-
단일 값에 대한 최적화를 위한 새로운 analyzer 패스를 추가했습니다. #61564 (LiuNeng).
-
문자열 함수 XXXUTF8을, 입력 문자열이 모두 ASCII 문자일 경우 ASCII 방식으로 처리합니다. apache/doris#29799에서 영감을 받았습니다. 전체 속도가 1.07배~1.62배 향상되었습니다. 일부 경우에는 피크 메모리 사용량도 감소했습니다. #61632 (李扬).
-
빠른 Parquet 인코더(output_format_parquet_use_custom_encoder)를 기본값으로 활성화했습니다. #62088 (Michael Kolupaev).
-
필요한 필드를 모두 읽은 후 나머지 필드를 모두 건너뛰도록 하여 JSONEachRowRowInputFormat을 개선했습니다. #62210 (lgbo).
-
함수 splitByChar 및 splitByRegexp의 속도가 크게 향상되었습니다. #62392 (李扬).
-
file/s3/hdfs/url/... 테이블 함수에서 파일로부터의 단순 INSERT SELECT를 개선했습니다. 병렬 파싱에 사용되는 스레드 수를 제어하기 위한 별도의 max_parsing_threads 설정을 추가했습니다. #62404 (Kruglov Pavel).
-
설정 azure_allow_parallel_part_upload로 제어되는 AzureBlobStorage에 대한 병렬 쓰기 버퍼를 지원합니다. #62534 (SmitaRKulkarni).
-
함수 to_utc_timestamp 및 from_utc_timestamp가 이제 약 2배 더 빨라졌습니다. #62583 (KevinyhZou).
-
입력값 대부분이 파싱 불가능한 경우, 함수 parseDateTimeOrNull, parseDateTimeOrZero, parseDateTimeInJodaSyntaxOrNull 및 parseDateTimeInJodaSyntaxOrZero가 이제 훨씬 더 빠르게(10배~1000배) 실행됩니다. #62634 (LiuNeng).
-
실패 시 IP당 하나의 레코드만 유지하도록 HostResolver 동작을 변경했습니다. #62652 (Anton Ivashkin).
-
컬럼이 많을 때 머지 시 메모리 사용량을 제어하고 정렬 속도를 2배 높이기 위한 새로운 설정 configurationprefer_merge_sort_block_bytes를 추가했습니다. #62904 (LiuNeng).
-
QueryPlan이, JOIN 이후 필터가 항상 기본값만 필터링하는 경우 OUTER JOIN을 INNER JOIN으로 변환하도록 최적화했습니다. 이 최적화는 기본적으로 활성화되어 있으며, 설정 query_plan_convert_outer_join_to_inner_join으로 제어할 수 있습니다. #62907 (Maksim Kita).
-
optimize_rewrite_sum_if_to_count_if를 기본값으로 활성화했습니다. #62929 (Raúl Marín).
-
새로운 analyzer에 대해 마이크로 최적화를 적용했습니다. #63429 (Raúl Marín).
-
DateTime이 DateTime64와 비교되는 경우에도 인덱스 분석이 동작합니다. 이는 #63441을 해결합니다. #63443 (Alexey Milovidov).
-
불필요한 데이터를 제거하여 Set 타입 인덱스의 속도를 약 1.5배 향상했습니다. #64098 (Alexey Milovidov).
개선 사항
-
optimize_monotonous_functions_in_order_by설정을 제거했으며, 이제 이 설정을 지정해도 아무 동작도 하지 않습니다. #63004 (Raúl Marín). -
이제 맵은 키로 Float32, Float64, Array(T), Map(K,V), Tuple(T1, T2, ...)를 사용할 수 있습니다. #54537 이슈를 해결합니다. #59318 (李扬).
-
S3와 유사하게 AzureBlobStorage용 비동기 WriteBuffer를 추가합니다. #59929 (SmitaRKulkarni).
-
경계를 유지하면서 컬럼 너비를 변경할 수 있는 여러 줄 문자열. #59940 (Volodyachan).
-
RabbitMQ가 손상된 메시지를 nack 처리하도록 합니다. #45350을(를) 종료합니다. #60312 (Kseniia Sumarokova).
-
함수 toStartOfInterval(..., INTERVAL ... WEEK)이 고려하는 주(week)의 첫째 날을 결정하는 설정 first_day_of_week를 추가합니다. 이 설정을 통해 기본적으로 일요일을 주의 첫째 날로 사용하는 함수 toStartOfWeek과의 동작을 일관되게 맞출 수 있습니다. #60598 (Jordi Villar).
-
INSERT 시 할당된 블록 내 원래 행 번호를 저장하는 지속형 가상 컬럼 _block_offset 이 추가되었습니다. 컬럼 _block_offset 의 지속성은 enable_block_offset_column 을 설정하여 활성화할 수 있습니다. 파트의 최소 블록 번호 또는 mutation 버전을 포함하는 가상 컬럼 _part_data_version 이 추가되었습니다. 지속형 가상 컬럼 _block_number 는 더 이상 실험적 기능으로 간주되지 않습니다. #60676 (Anton Popov).
-
date_diff와age함수는 이제 마이크로초 단위 정밀도 대신 나노초 단위 정밀도로 결과를 계산합니다. 또한 이제 단위 매개변수의 가능한 값으로 나노초(nanosecond, nanoseconds, ns)를 허용합니다. #61409 (Austin Kothig). -
이제 머지를 수행할 때 wide 파트에 대해서는 마크가 로드되지 않습니다. #61551 (Anton Popov).
-
기본값으로
output_format_pretty_row_numbers를 활성화했습니다. 사용성이 향상됩니다. #61791 (Alexey Milovidov). -
프로그레스 바는 system.zeros, system.zeros_mt에서 LIMIT가 포함된 단순 쿼리에 대해 동작하며(이미 system.numbers 및 system.numbers_mt에서는 동작함), generateRandom 테이블 함수에서도 동작합니다. 또한, 전체 레코드 수가 max_rows_to_read 제한보다 큰 경우 더 일찍 예외를 발생시킵니다. 이로써 #58183이 해결됩니다. #61823 (Alexey Milovidov).
-
TRUNCATE ALL TABLES 명령어를 추가했습니다. #61862 (豪肥肥).
-
input_format_json_throw_on_bad_escape_sequence설정을 추가했습니다. 이 설정을 비활성화하면 JSON 입력 포맷에서 잘못된 이스케이프 시퀀스를 그대로 저장하도록 허용합니다. #61889 (Kruglov Pavel). -
경고 메시지에서 관사를 "a"에서 "the"로 수정했습니다. Atomic 엔진은 하나뿐이기 때문에 "to a new Atomic engine"이 아니라 "to the new Atomic engine"이어야 합니다. #61952 (shabroo).
-
쿼럼 insert 트랜잭션을 롤백할 때 발생하는 논리 오류를 수정합니다. #61953 (Han Fei).
-
Apache Arrow 스키마로부터 널 허용 컬럼 타입을 자동으로 추론합니다. #61984 (Maksim Kita).
-
집계 시 집계 상태의 병렬 머지를 취소할 수 있도록 했습니다. 예: uniqExact. #61992 (Maksim Kita).
-
INVALIDATE_QUERY를 사용하는 딕셔너리 소스는 시작 시 중복 로드되지 않습니다. #62050 (vdimir).
-
이제 ReplicatedMergeTree에 대한 OPTIMIZE FINAL은 현재 활성 상태인 머지 작업이 완료될 때까지 대기한 다음, 최종 머지 작업을 다시 스케줄링합니다. 이를 통해 일반적인 MergeTree의 동작과 더 잘 맞춰집니다. #62067 (Nikita Taranov).
-
Hive 텍스트 파일에서 데이터를 읽을 때 텍스트 파일의 첫 번째 줄을 사용하여 입력 필드 개수를 결정합니다. 그런데 첫 번째 줄의 필드 개수가 정의된 Hive 테이블과 일치하지 않는 경우가 있을 수 있습니다. 예를 들어 Hive 테이블이
test_tbl(a Int32, b Int32, c Int32)처럼 3개의 컬럼을 갖도록 정의되어 있지만 텍스트 파일의 첫 번째 줄에는 필드가 2개만 있는 경우입니다. 이 상황에서는 입력 필드 개수가 2로 재조정되고, 이후 텍스트 파일의 다음 줄에 필드가 3개 있는 경우 세 번째 필드는 읽히지 않고 기본값 0으로 설정되는데, 이는 올바르지 않습니다. #62086 (KevinyhZou). -
클라이언트에서 입력할 때 구문 하이라이팅이 이제 구문 수준에서 동작합니다(이전에는 렉서 수준에서 동작했습니다). #62123 (Alexey Milovidov).
-
기본 키가 포함된 불리언 표현식 뒤에 불필요한 = 1 또는 = 0이 추가될 때 기본 인덱스가 사용되지 않던 문제를 수정합니다. 예를 들어
SELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1및SELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0쿼리는 기본 인덱스를 사용할 수 있음에도 두 경우 모두 전체 테이블 스캔을 수행합니다. #62142 (josh-hildred). -
lightweight_deletes_sync설정이 추가되었습니다(기본값: 2 - 모든 레플리카를 동기적으로 기다립니다). 이 설정은mutations_sync설정과 유사하지만, 경량한 삭제의 동작에만 영향을 줍니다. #62195 (Anton Popov). -
사용자 지정 설정 값 파싱 시 불리언과 정수를 구분하도록 했습니다: SET custom_a = true; SET custom_b = 1;. #62206 (Vitaly Baranov).
-
AWS Private Link Interface 엔드포인트를 통한 S3 액세스를 지원합니다. #60021, #31074, #53761 이슈를 해결합니다. #62208 (Arthur Passos).
-
클라이언트는 서버로 헤더 'Keep-Alive: timeout=X'를 전송해야 합니다. 클라이언트가 해당 헤더가 포함된 서버의 응답을 받으면 서버에서 제공한 값을 사용해야 합니다. 또한 연결 종료 레이스 컨디션을 피하기 위해, 거의 만료되기 직전인 연결은 사용하지 않는 것이 좋습니다. #62249 (Sema Checherinda).
-
date_trunc 함수에 나노초, 마이크로초, 밀리초 단위를 추가했습니다. #62335 (Misz606).
-
쿼리 캐시는 이제 system 테이블(system., information_schema., INFORMATION_SCHEMA.*)에 대한 쿼리 결과를 더 이상 캐시하지 않습니다. #62376 (Robert Schulze).
-
MOVE PARTITION TO TABLE 쿼리는 파트 개수 제한을 초과하지 않도록 지연되거나 TOO_MANY_PARTS 예외를 발생시킬 수 있습니다. INSERT 쿼리와 동일한 설정과 제한이 적용됩니다(설정 목록: max_parts_in_total, parts_to_delay_insert, parts_to_throw_insert, inactive_parts_to_throw_insert, inactive_parts_to_delay_insert, max_avg_part_size_for_too_many_parts, min_delay_to_insert_ms 및 max_delay_to_insert 설정). #62420 (Sergei Trifonov).
-
transform이 항상 첫 번째로 일치하는 항목을 반환하도록 변경했습니다. #62518 (Raúl Marín). -
RESTORE를 실행하는 동안 테이블의 DEFAULT 표현식을 평가하지 않도록 변경했습니다. #62601 (Vitaly Baranov).
-
HTTP 요청에서 서로 다른 인증 방식과 함께 QUOTA 키를 사용할 수 있도록 허용합니다. #62842 (Kseniia Sumarokova).
-
사용자의 valid_until 값에 도달하면 세션을 종료합니다. #63046 (Konstantin Bogdanov).