메인 콘텐츠로 건너뛰기
v24.6 릴리스의 ClickHouse Cloud 서비스 관련 주요 변경 사항입니다.

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

  • 스토리지 S3QueueOrdered 모드에서 병렬 처리 방식을 개편했습니다. s3queue_processing_threads_num 또는 s3queue_total_shards_num 설정을 사용한 경우, 이 변경은 Ordered 모드에서 하위 호환되지 않습니다. s3queue_total_shards_num 설정은 삭제되었습니다. 이전에는 s3queue_allow_experimental_sharded_mode를 사용할 때만 허용되었으며, 이 설정은 이제 사용 중단 예정입니다. 새로운 설정 s3queue_buckets가 추가되었습니다. #64349 (Kseniia Sumarokova).
  • 새로운 함수 snowflakeIDToDateTime, snowflakeIDToDateTime64, dateTimeToSnowflakeID, dateTime64ToSnowflakeID가 추가되었습니다. 기존 함수 snowflakeToDateTime, snowflakeToDateTime64, dateTimeToSnowflake, dateTime64ToSnowflake와 달리, 새 함수는 generateSnowflakeID 함수와 호환됩니다. 즉, generateSnowflakeID로 생성된 Snowflake ID를 입력으로 받아 generateSnowflakeID와 동일한 타입(즉, UInt64)의 Snowflake ID를 반환합니다. 또한 새 함수는 generateSnowflakeID와 마찬가지로 기본적으로 UNIX epoch(즉, 1970-01-01)를 사용합니다. 필요한 경우 다른 epoch를 전달할 수도 있습니다. 예를 들어 Twitter/X의 epoch인 2010-11-04, 즉 UNIX epoch로부터 1288834974657 msec를 사용할 수 있습니다. 기존 변환 함수는 사용 중단 예정이며 전환 기간 후 제거될 예정입니다. 계속 사용해야 하는 경우 allow_deprecated_snowflake_conversion_functions 설정을 활성화하십시오. #64948 (Robert Schulze).

새 기능

  • 빈 튜플을 지원합니다. #55061 (Amos Bird).
  • Hilbert Curve 인코딩 및 디코딩 함수를 추가했습니다. #60156 (Artem Mustafin).
  • hilbertEncode에 대한 인덱스 분석 지원을 추가했습니다. #64662 (Artem Mustafin).
  • readWKTLineString 함수를 사용해 WKT 포맷의 LINESTRING 지오메트리를 읽는 기능을 추가했습니다. #62519 (Nikita Mikhaylov).
  • Twitter 스타일 Snowflake ID를 생성하는 새 SQL 함수 generateSnowflakeID를 추가했습니다. #63577 (Danila Puzov).
  • = 연산자를 사용해 IPv4IPv6 타입을 비교하는 기능을 추가했습니다. #64292 (Francisco J. Jurado Moreno).
  • 바이너리 수학 함수(pow, atan2, max2, min2, hypot)에서 Decimal 인수를 지원합니다. #64582 (Mikhail Gorshkov).
  • SQL 함수 parseReadableSize를 추가했습니다(OrNullOrZero 변형 포함). #64742 (Francisco J. Jurado Moreno).
  • 파일 계열 스토리지(s3/file/hdfs/url/azureBlobStorage)에 _time 가상 컬럼을 추가했습니다. #64947 (Ilya Golshtein).
  • 새 함수 base64URLEncode, base64URLDecode, tryBase64URLDecode를 도입했습니다. #64991 (Mikhail Gorshkov).
  • 두 UTF8 문자열 사이의 편집 거리를 계산하는 새 함수 editDistanceUTF8를 추가했습니다. #65269 (LiuNeng).
  • 사용자 지정 HTTP 핸들러에서 사용자 지정 응답 헤더를 지원하기 위해 http_response_headers 구성을 추가했습니다. #63562 (Grigorii).
  • 쿼리 결과를 무한 루프로 반환할 수 있도록 새 테이블 함수 loop를 추가했습니다. #63452 (Sariel). 테스트에 유용합니다.
  • system.query_logused_privilegesmissing_privileges라는 두 개의 추가 컬럼을 도입했습니다. used_privileges에는 쿼리 실행 중 확인된 권한이 채워지며, missing_privileges에는 누락된 필수 권한이 포함됩니다. #64597 (Alexey Katsman).
  • 활성화하면 긴 테이블(기본값 50행)의 끝에 컬럼 이름을 표시하는 설정 output_format_pretty_display_footer_column_names를 추가했습니다. 최소 행 수 임계값은 output_format_pretty_display_footer_column_names_min_rows로 제어합니다. #65144 (Shaun Struwig).

성능 개선

  • #60459(24.5)로 도입된 cross join의 성능 회귀를 수정했습니다. #65243 (Nikita Taranov).
  • io_uring 재제출에 대한 가시성을 개선했습니다. profile 이벤트 IOUringSQEsResubmits의 이름을 IOUringSQEsResubmitsAsync로 변경하고, 새 profile 이벤트 IOUringSQEsResubmitsSync를 추가했습니다. #63699 (Tomer Shafir).
  • 모든 함수가 적절한 크기의 컬럼으로 호출되는지 확인하는 assertion을 도입했습니다. #63723 (Raúl Marín).
  • PRIMARY KEY로 정해진 순서를 위반하지 않으면서, 크기 최적화를 위해 삽입 시 행 순서를 다시 조정하는 기능이 추가되었습니다. 이 기능은 설정 optimize_row_order로 제어되며, 기본적으로는 비활성화되어 있습니다. #63578 (Igor Markelov).
  • Parquet 바이너리 데이터를 ClickHouse 컬럼으로 직접 읽어들일 수 있는 네이티브 Parquet 리더를 추가했습니다. 이 기능은 input_format_parquet_use_native_reader 설정으로 제어되며(기본값은 비활성화), #60361 (ZhiHong Zhang)에서 확인할 수 있습니다.
  • 쿼리 필터가 MergeTree 테이블에서 정확한 범위를 선택할 수 있는 경우, 부분적인 trivial count 최적화를 지원합니다. #60463 (Amos Bird).
  • 여러 스레드의 청크를 하나의 transform에서 수집해 멀티스레드 INSERT의 최대 메모리 사용량을 줄였습니다. #61047 (Yarik Briukhovetskyi).
  • 추가 버퍼를 할당하지 않고 고정 메모리 할당을 사용해 Azure 객체 스토리지 사용 시 메모리 사용량을 줄였습니다. #63160 (SmitaRKulkarni).
  • ColumnNullable::size의 가상 함수 호출 횟수를 줄였습니다. #60556 (HappenLee).
  • 정규식 인수가 단일 문자일 때 splitByRegexp의 속도를 개선했습니다. #62696 (Robert Schulze).
  • 사용된 최소 및 최대 키를 추적해 8비트 및 16비트 키의 집계 속도를 향상했습니다. 이를 통해 검증이 필요한 셀 수를 줄일 수 있습니다. #62746 (Jiebin Sun).
  • LowCardinality가 왼쪽에 있고 오른쪽이 상수 집합인 경우 IN 연산자를 최적화했습니다. #64060 (Zhiguo Zhou).
  • 해시 테이블을 초기화하고 제거할 때 ConcurrentHashJoin 내부에서 스레드 풀을 사용합니다. #64241 (Nikita Taranov).
  • 희소 컬럼이 있는 테이블에서 수직 병합을 최적화했습니다. #64311 (Anton Popov).
  • 수직 병합 중 원격 파일 시스템에 있는 데이터의 프리페치를 활성화했습니다. 원격 파일 시스템에 데이터가 저장된 테이블에서 수직 병합의 지연 시간을 줄입니다. #64314 (Anton Popov).
  • 성능 향상을 위해 ColumnSparse::filter에서 isDefault의 중복 호출을 줄였습니다. #64426 (Jiebin Sun).
  • 여러 개의 비동기 getChildren 요청을 사용해 find_super_nodesfind_big_family keeper-client 명령의 속도를 개선했습니다. #64628 (Alexander Gololobov).
  • 널 허용 숫자형 인수에 대한 least/greatest 함수를 개선했습니다. #64668 (KevinyhZou).
  • 쿼리 계획에서 연속된 두 개의 필터링 단계를 병합할 수 있도록 합니다. 이렇게 하면 필터 조건을 상위 단계에서 아래로 푸시다운할 수 있을 때 filter-push-down 최적화가 개선됩니다. #64760 (Nikolai Kochetov).
  • vertical final 구현에서 문제가 있는 최적화를 제거하고, vertical final 알고리즘을 기본값으로 다시 활성화합니다. #64783 (Duc Canh Le).
  • 필터 표현식에서 ALIAS 노드를 제거했습니다. 이를 통해 PREWHERE를 사용하는 쿼리(새 분석기 사용 시)의 성능이 약간 향상됩니다. #64793 (Nikolai Kochetov).
  • OpenSSL session 캐싱을 다시 활성화합니다. #65111 (Robert Schulze).
  • 삽입 시 스킵 인덱스와 통계가 머티리얼라이즈되지 않도록 하는 설정(materialize_skip_indexes_on_insertmaterialize_statistics_on_insert)이 추가되었습니다. #64391 (Anton Popov).
  • 할당된 메모리 크기를 기준으로 row group 크기를 계산해 단일 스레드 모드에서 Parquet writer의 피크 메모리를 줄입니다. #64424 (LiuNeng).
  • 희소 컬럼의 이터레이터를 개선해 size 호출 횟수를 줄였습니다. #64497 (Jiebin Sun).
  • Azure blob storage로 백업할 때 서버 측 복사를 사용하도록 조건을 업데이트했습니다. #64518 (SmitaRKulkarni).
  • 스킵 인덱스가 많은 테이블의 수직 병합 메모리 사용량을 최적화했습니다. #64580 (Anton Popov).

개선 사항

  • ClickHouse가 CSV 형식에서 튜플을 처리하고 해석하던 기존 동작으로 되돌렸습니다. 이번 변경으로 ClickHouse/ClickHouse#60994가 사실상 되돌려졌으며, output_format_csv_serialize_tuple_into_separate_columns, input_format_csv_deserialize_separate_columns_into_tuple, input_format_csv_try_infer_strings_from_quoted_tuples의 일부 설정에서만 사용할 수 있습니다. #65170 (Nikita Mikhaylov).
  • 시스템 테이블(system tables)에 대해 실행한 SHOW CREATE TABLE은 이제 각 테이블에 고유한 매우 유용한 comment를 표시하며, 이를 통해 해당 테이블이 왜 필요한지 설명합니다. #63788 (Nikita Mikhaylov).
  • 함수 round(), roundBankers(), floor(), ceil(), trunc()의 두 번째 인수인 scale은 이제 상수일 필요가 없습니다. #64798 (Mikhail Gorshkov).
  • 리소스가 포화된 서비스에서 스레드를 스케줄링할 때 MergeTree 인덱스 분석 중 발생할 수 있는 교착 상태를 방지합니다. #59427 (Sean Haynes).
  • S3 프록시 지원 및 터널링과 관련된 몇 가지 사소한 코너 케이스가 수정되었습니다. #63427 (Arthur Passos).
  • plain_rewritable 메타데이터 저장소에서 생성되거나 삭제된 디렉터리 수와 로컬-원격 간 인메모리 맵의 항목 수를 추적하는 메트릭을 추가했습니다. #64175 (Julia Kartseva).
  • 이제 쿼리 캐시는 동일한 쿼리라도 설정이 다르면 서로 다른 쿼리로 간주합니다. 이에 따라 서로 다른 설정(예: limit 또는 additional_table_filters)이 쿼리 결과에 영향을 미치는 경우에도 안정성이 향상됩니다. #64205 (Robert Schulze).
  • 객체 스토리지에서 비표준 오류 코드 QpsLimitExceeded를 재시도 가능한 오류로 처리하도록 지원합니다. #64225 (Sema Checherinda).
  • 평균 출력 블록 바이트 수를 제어하는 새로운 설정 input_format_parquet_prefer_block_bytes를 추가하고, input_format_parquet_max_block_size의 기본값을 65409로 변경했습니다. #64427 (LiuNeng).
  • 사용자 구성의 설정값은 객체 스토리지 기반 MergeTree의 머지 및 뮤테이션에 영향을 주지 않습니다. #64456 (alesapin).
  • 객체 스토리지에서 비표준 오류 코드 TotalQpsLimitExceeded를 재시도 가능한 오류로 처리할 수 있도록 지원합니다. #64520 (Sema Checherinda).
  • 오픈소스 및 ClickHouse Cloud 버전의 Advanced Dashboard에 ‘최대 동시 네트워크 연결 수’ 차트를 추가했습니다. #64610 (Thom O’Connor).
  • zeros_mtgenerateRandom의 진행 상황 보고를 개선했습니다. #64804 (Raúl Marín).
  • 현재 샘플링이 활성 상태인지 표시하는 비동기 메트릭 jemalloc.profile.active가 추가되었습니다. 이는 prof.active 외에 추가된 활성화 메커니즘이며, 호출한 스레드에서 샘플링이 수행되려면 두 항목이 모두 활성 상태여야 합니다. #64842 (Unalian).
  • allow_experimental_join_condition을 중요 항목으로 표시한 것을 제거했습니다. 이 표시는 버전이 혼재된 클러스터에서 분산 쿼리가 성공적으로 실행되지 못하게 했을 수 있습니다. #65008 (Nikita Mikhaylov).
  • s3_max_get_rpss3_max_put_rps 디스크 설정에 정의된 초당 요청 수 제한과, 디스크에서 스로틀링 한도에 도달하지 않고 현재 전송할 수 있는 요청 수를 반영하는 서버 비동기 메트릭 DiskGetObjectThrottler*DiskGetObjectThrottler*가 추가되었습니다. 이 메트릭은 제한이 구성된 각 디스크에 대해 정의됩니다. #65050 (Sergei Trifonov).
  • bcrypt_hash로 사용자 생성 시 유효성 검사를 추가했습니다. #65242 (Raúl Marín).
  • PREWHERE 적용 중/후에 읽은 행 수에 대한 profile events를 추가했습니다. #64198 (Nikita Taranov).
  • 병렬 레플리카 사용 시 EXPLAIN PLAN에 쿼리를 출력합니다. #64298 (vdimir).
  • allow_deprecated_functionsallow_deprecated_error_prone_window_functions로 이름 변경했습니다. #64358 (Raúl Marín).
  • file 테이블 함수에서 파일 디스크립터에도 max_read_buffer_size 설정을 적용합니다. #64532 (Azat Khuzhin).
  • 지원되지 않는 스토리지에서는 materialized view에서도 트랜잭션을 비활성화합니다. #64918 (alesapin).
  • 기존 분석기에서는 QUALIFY 절 사용을 금지합니다. 기존 분석기는 QUALIFY를 무시했기 때문에, 뮤테이션에서 데이터가 예기치 않게 삭제될 수 있었습니다. #65356 (Dmitry Novik).

버그 수정(공식 안정 릴리스에서 사용자에게 보이는 오작동)

  • ‘set’ 스킵 인덱스가 IN 및 indexHint() 사용 시 동작하지 않던 문제를 수정했습니다. #62083 (Michael Kolupaev).
  • 적응형 세분화 수준을 사용하지 않는 테이블에서 FINAL이 포함된 쿼리가 잘못된 결과를 반환하던 문제를 수정했습니다. #62432 (Duc Canh Le).
  • 매개변수화된 뷰(parameterized view) 값 할당 중 함수 실행을 지원합니다. #63502 (SmitaRKulkarni).
  • Parquet 메모리 추적 문제를 수정했습니다. #63584 (Michael Kolupaev).
  • 분산 쿼리 결과에서 데이터가 누락되는 드문 경우를 수정했습니다. #63691 (vdimir).
  • Tuple(Map(LowCardinality(String), String), …) 유형 컬럼의 읽기 문제를 수정했습니다. #63956 (Anton Popov).
  • 한정자 없는 COLUMNS 매처의 해석(resolve) 문제를 수정했습니다. 입력 컬럼 순서를 유지하고, 알 수 없는 식별자는 사용할 수 없도록 했습니다. #63962 (Dmitry Novik).
  • 서로 다른 유형(표현식과 함수)의 순환 별칭에서 발생하던 Cyclic aliases 오류를 수정했습니다. #63993 (Nikolai Kochetov).
  • 이 수정으로 쿼리 파이프라인의 각 개별 뷰마다 올바른 정의자가 설정된, 적절히 재정의된 Context를 사용합니다. #64079 (pufit).
  • 분석기 수정: INTERPOLATE 사용 시 발생하던 “컬럼을 찾을 수 없음” 오류를 수정했습니다. #64096 (Yakov Olkhovskiy).
  • MaterializedView로 CREATE TABLE을 수행할 때 발생하는 LOGICAL_ERROR를 방지합니다. #64174 (Raúl Marín).
  • 이제 쿼리 캐시는 서로 다른 데이터베이스에 대해 실행된 동일한 두 쿼리를 서로 다른 것으로 간주합니다. 이전 동작에서는 테이블 읽기 권한이 없어도 이를 우회할 수 있었습니다. #64199 (Robert Schulze).
  • StatusFile의 ~WriteBufferFromFileDescriptor에서 처리되지 않은 예외로 인해 발생할 수 있는 비정상 종료 문제를 수정했습니다. #64206 (Kruglov Pavel).
  • ARRAY JOIN이 포함된 분산 쿼리의 중복 별칭 오류를 수정했습니다. #64226 (Nikolai Kochetov).
  • 문자열에서 정수로 accurateCast할 때 발생하는 예기치 않은 문제를 수정합니다. #64255 (wudidapaopao).
  • OR 그룹에 상호 배타적인 항이 포함된 경우 CNF 단순화 문제를 수정했습니다. #64256 (Eduard Karacharov).
  • 쿼리 트리 크기 검증을 수정했습니다. #64377 (Dmitry Novik).
  • 논리 오류 수정: PREWHERE를 사용하는 Buffer 테이블의 잘못된 형변환. #64388 (Nikolai Kochetov).
  • 기본 표현식이 있는 테이블의 CREATE TABLE AS 쿼리 문제를 수정했습니다. #64455 (Anton Popov).
  • ORDER BY … NULLS FIRST / LAST를 사용하는, 키가 널 허용인 테이블에서 optimize_read_in_order 동작 문제를 수정했습니다. #64483 (Eduard Karacharov).
  • GLOBAL IN..에 별칭을 사용한 쿼리에서 발생하던 「Expression nodes list expected 1 projection names」 및 「Unknown expression or identifier」 오류를 수정했습니다. #64517 (Nikolai Kochetov).
  • GROUP BY 키에 상수 CTE를 포함한 분산 쿼리에서 발생하던 Cannot find column 오류를 수정했습니다. #64519 (Nikolai Kochetov).
  • 포매터가 홀수 개의 문자를 생성하고 마지막 문자가 0인 경우 formatDateTimeInJodaSyntax 함수의 출력이 올바르게 수정되었습니다. 예를 들어 SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D')는 이전에는 15를 반환했지만, 이제는 올바르게 150을 반환합니다. #64614 (LiuNeng).
  • -If combinator를 이미 사용하는 경우 집계를 재작성하지 않습니다. #64638 (Dmitry Novik).
  • 작은 버퍼(즉, —max_read_buffer_size 1)에서 float 타입 추론 문제를 수정했습니다. #64641 (Azat Khuzhin).
  • 표현식이 포함된 TTL이 작동하지 않을 수 있는 버그를 수정했습니다. #64694 (alesapin).
  • true로 항상 평가되는 WHERE 및 PREWHERE 표현식이 제거되도록 수정했습니다(새 분석기 기준). #64695 (Nikolai Kochetov).
  • startsWith, endsWith, match, multiSearchAny의 결과로 필터링할 때 토큰 기반 텍스트 인덱스(ngrambf , full_text)에서 데이터 파트가 과도하게 제외되던 문제를 수정했습니다. #64720 (Eduard Karacharov).
  • UTF8::computeWidth 함수에서 ANSI CSI 이스케이프를 잘못 처리하던 동작을 수정합니다. #64756 (Shaun Struwig).
  • 서브쿼리 전반에 걸쳐 ORDER BY / LIMIT BY가 잘못 제거되던 문제를 수정했습니다. #64766 (Raúl Marín).
  • 혼합 join 조건에 포함된 Set의 서브쿼리가 있는 비등가 join을 수정했습니다. #64775 (lgbo).
  • plain_rewritable 디스크를 사용하는 로컬 캐시에서 발생하던 충돌을 수정했습니다. #64778 (Julia Kartseva).
  • Nested 컬럼에 대한 ARRAY JOIN이 있는 분산 쿼리에서 컬럼을 찾을 수 없는 문제를 수정했습니다. #64755를 수정했습니다. #64801 (Nikolai Kochetov).
  • slru 캐시 정책에서 발생하던 메모리 누수를 수정했습니다. #64803 (Kseniia Sumarokova).
  • 여러 유형의 쿼리에서 메모리 추적이 잘못될 수 있던 문제를 수정했습니다: S3에서 데이터를 읽는 쿼리, HTTP protocol로 실행되는 쿼리, 비동기 삽입. #64844 (Anton Popov).
  • materialized view에 원본 테이블과 다른 타입의 컬럼이 있을 때, PREWHERE를 사용해 materialized view를 읽는 쿼리에서 발생하던 Block structure mismatch 오류를 수정합니다. #64611을 해결합니다. #64855 (Nikolai Kochetov).
  • 테이블에 서브쿼리가 포함된 TTL + Replicated 데이터베이스 + 병렬 레플리카 + 분석기 조합이 있을 때 드물게 발생하던 크래시를 수정했습니다. 매우 드문 경우이지만, 서브쿼리가 포함된 TTL은 사용하지 마십시오. #64858 (alesapin).
  • ClickHouse/ClickHouse#54211에서 매개변수화된 VIEW에 대해 제대로 동작하지 않던 ALTER MODIFY COMMENT 쿼리를 수정했습니다. #65031 (Nikolay Degterinsky).
  • cluster_secure_connection 매개변수가 활성화된 경우 DatabaseReplicated의 host_id를 수정했습니다. 이전에는 이 매개변수가 활성화되어 있어도 DatabaseReplicated가 생성한 클러스터 내부의 모든 연결이 보안 연결로 설정되지 않았습니다. #65054 (Nikolay Degterinsky).
  • StorageMerge의 PREWHERE optimization 이후 발생하던 “Set이 준비되지 않음” 오류를 수정했습니다. #65057 (Nikolai Kochetov).
  • File과 유사한 스토리지에서 finalize된 버퍼에 쓰지 않도록 수정했습니다. #65063 (Kruglov Pavel).
  • 순환 별칭이 있을 때 쿼리 실행 시간이 무한정 길어질 수 있는 문제를 수정했습니다. #64849를 수정했습니다. #65081 (Nikolai Kochetov).
  • INTERPOLATE (별칭) (새 분석기)를 사용하는 원격 쿼리에서 발생하는 Unknown expression identifier 오류를 수정했습니다. #64636을 해결했습니다. #65090 (Nikolai Kochetov).
  • 산술 연산이 집계 밖으로 이동되던 문제를 수정했습니다. 새 분석기에서는 최적화가 한 번만 적용되었습니다. #65104 (Dmitry Novik).
  • 새 분석기에서 집계 함수 이름이 재작성되는 문제를 수정했습니다. #65110 (Dmitry Novik).
  • 클라이언트 소켓에서 요청 본문의 (일부)를 읽는 중 수신 타임아웃이 발생하면 200 OK가 아니라 5xx로 응답합니다. #65118 (Julian Maicher).
  • 헤지드 요청에서 발생할 수 있는 비정상 종료 문제를 수정했습니다. #65206 (Azat Khuzhin).
  • Hashed 및 Hashed_Array 딕셔너리의 단락 평가(short circuit evaluation) 버그를 수정했습니다. 이 버그로 인해 초기화되지 않은 값을 읽어 다양한 오류가 발생할 수 있었습니다. #65256 (jsc0218).
  • 이 PR은 IN 연산자의 유형 변환 과정에서 상수(IN 연산자의 두 번째 매개변수)의 유형이 항상 보이도록 합니다. 그렇지 않으면 유형 정보가 손실되어 일부 변환이 실패할 수 있으며, DateTime에서 Date로 변환하는 경우가 그 예입니다. 수정 (#64487). #65315 (pn).
마지막 수정일 2026년 6월 10일