도입 버전: v20.5.0실행 중인 ClickHouse 서버 바이너리에 대해 컴파일러가 생성한 build ID를 반환합니다.
분산 테이블의 Context에서 실행하면, 이 함수는 각 세그먼트에 해당하는 값을 갖는 일반 컬럼을 생성합니다.
그렇지 않으면 상수 값을 반환합니다.구문
도입 버전: v22.9.0외부 catboost 모델을 평가합니다. CatBoost는 Yandex가 기계 학습용으로 개발한 오픈소스 그래디언트 부스팅 라이브러리입니다.
catboost 모델의 경로와 모델 인수(피처)를 받습니다.사전 요구 사항
catboost 평가 라이브러리 빌드
catboost 모델을 평가하기 전에 libcatboostmodel.<so|dylib> 라이브러리를 사용할 수 있도록 준비해야 합니다. 컴파일 방법은 CatBoost documentation을 참조하십시오.다음으로, ClickHouse 구성에서 libcatboostmodel.<so|dylib>의 경로를 지정합니다:
보안 및 격리를 위해 모델 평가는 server process가 아니라 clickhouse-library-bridge process에서 실행됩니다.
catboostEvaluate()를 처음 실행할 때 server가 아직 실행 중이 아니라면 library bridge process를 시작합니다. 두 프로세스는
HTTP 인터페이스를 사용해 통신합니다. 기본적으로 포트 9012를 사용합니다. 다음과 같이 다른 포트를 지정할 수 있으며, 포트
9012가 이미 다른 서비스에 할당되어 있는 경우 유용합니다.
도입 버전: v26.2.0색상을 OKLab 지각 색 공간에서 sRGB 색 공간으로 변환합니다.입력 색상은 OKLab 색 공간으로 지정합니다. 입력 값이 일반적인
OKLab 범위를 벗어나면 결과는 구현에 따라 달라집니다.OKLab는 세 가지 구성 요소를 사용합니다:
L: 지각적 밝기(일반적으로 범위는 [0..1])
a: 녹색-빨간색 대립 축
b: 파란색-노란색 대립 축
a 및 b 구성 요소는 이론적으로 범위 제한이 없지만, 실제로는 -0.4에서 0.4 사이입니다.
OKLab는 계산 비용을 낮게 유지하면서도
지각적으로 균일하도록 설계되었습니다.이 변환은 colorSRGBToOKLAB의 역변환이 되도록 의도되었으며,
다음 단계로 구성됩니다:
OKLab에서 선형 sRGB로 변환합니다.
2) 선형 sRGB에서 감마 인코딩된 sRGB로 변환합니다.
WITH initializeAggregation('sumState', number) AS one_row_sum_stateSELECT number, finalizeAggregation(one_row_sum_state) AS one_row_sum, runningAccumulate(one_row_sum_state) AS cumulative_sumFROM numbers(5);
도입 버전: v25.11.0기하 객체의 x 및 y 좌표를 서로 바꿉니다. 이 작업은 위도와 경도를 맞바꾸는 것으로, 서로 다른 좌표계 간 변환하거나 좌표 순서를 바로잡는 데 유용합니다.Point에서는 x 및 y 좌표를 서로 바꿉니다. 복합 기하 객체(LineString, Polygon, MultiPolygon, Ring, MultiLineString)에서는 각 좌표 쌍에 이 변환을 재귀적으로 적용합니다.이 함수는 개별 Geometry 타입(Point, Ring, Polygon, MultiPolygon, LineString, MultiLineString)과 Geometry variant type을 모두 지원합니다.구문
flipCoordinates(geometry)
인수
geometry — 변환할 도형입니다. 지원되는 타입: Point (Tuple(Float64, Float64)), Ring (Array(Point)), Polygon (Array(Ring)), MultiPolygon (Array(Polygon)), LineString (Array(Point)), MultiLineString (Array(LineString)), 또는 Geometry (이들 타입 중 하나를 포함하는 Variant)입니다.
도입 버전: v20.10.0주어진 숫자에 대해, 이 함수는 접미사(천, 백만, 십억 등)가 붙은 반올림된 값을 문자열로 반환합니다.이 함수는 모든 숫자형을 입력으로 받을 수 있지만, 내부적으로는 이를 Float64로 형변환합니다.
큰 값에서는 결과가 다소 부정확할 수 있습니다.구문
도입 버전: v1.1.0크기(바이트 수)가 주어지면, 이 함수는 접미사(KiB, MiB 등)가 포함된 읽기 쉬운 반올림된 크기를 문자열로 반환합니다.이 함수의 반대 연산은 parseReadableSize, parseReadableSizeOrZero, parseReadableSizeOrNull입니다.
이 함수는 모든 숫자 유형을 입력으로 받을 수 있지만, 내부적으로는 이를 Float64로 변환합니다. 값이 큰 경우 결과가 최적이지 않을 수 있습니다.구문
도입 버전: v20.12.0초 단위의 시간 인터벌(delta)이 주어지면, 이 함수는 year/month/day/hour/minute/second/millisecond/microsecond/nanosecond 단위로 이루어진 시간 차이를 문자열로 반환합니다.이 함수는 입력으로 모든 숫자 유형을 받을 수 있지만, 내부적으로는 이를 Float64로 CAST합니다. 값이 큰 경우 결과가 다소 부정확할 수 있습니다.구문
maximum_unit — 선택 사항입니다. 표시할 최대 단위입니다. 허용되는 값: nanoseconds, microseconds, milliseconds, seconds, minutes, hours, days, months, years. 기본값은 years입니다. const String
minimum_unit — 선택 사항입니다. 표시할 최소 단위입니다. 이보다 작은 모든 단위는 버려집니다. 허용되는 값: nanoseconds, microseconds, milliseconds, seconds, minutes, hours, days, months, years. 명시적으로 지정한 값이 maximum_unit보다 크면 예외가 발생합니다. 기본값은 maximum_unit이 seconds 이상이면 seconds이고, 그렇지 않으면 nanoseconds입니다. const String
도입 버전: v26.2.0주어진 쿼리 문자열을 파싱하고 여기에 무작위 AST 뮤테이션(fuzzing)을 적용합니다. 퍼징된 쿼리를 문자열로 반환합니다. 결정적이지 않으므로 호출할 때마다 다른 결과가 생성될 수 있습니다. allow_fuzz_query_functions = 1이 필요합니다.구문
도입 버전: v25.1.0이전 카운터 값부터 순차적인 숫자를 생성해 반환합니다.
이 함수는 문자열 인수인 시리즈 식별자와 선택적 시작 값을 받습니다.
서버는 Keeper를 사용하도록 구성되어 있어야 합니다.
시리즈는 Keeper 노드의 경로 아래에 저장되며, 이 경로는 서버 구성의 series_keeper_path에서 설정할 수 있습니다.구문
도입 버전: v24.5.0HTTP 헤더의 값을 가져옵니다.
해당 헤더가 없거나 현재 요청이 HTTP 인터페이스를 통해 수행되지 않는 경우, 이 함수는 빈 문자열을 반환합니다.
일부 HTTP 헤더(예: Authentication, X-ClickHouse-*)는 제한됩니다.
설정 allow_get_client_http_header이 필요합니다이 함수를 사용하려면 설정 allow_get_client_http_header이 활성화되어 있어야 합니다.
Cookie와 같은 일부 헤더에는 민감한 정보가 포함될 수 있으므로, 보안상의 이유로 이 설정은 기본적으로 활성화되어 있지 않습니다.
이 함수에서는 HTTP 헤더의 대소문자를 구분합니다.
이 함수가 분산 쿼리에서 사용되면, initiator 노드에서만 비어 있지 않은 결과를 반환합니다.구문
도입 버전: v20.1.0서버 설정 파일에서 매크로의 값을 반환합니다.
매크로는 설정 파일의 <macros> 섹션에 정의되며, 호스트명이 복잡하더라도 서버를 알기 쉬운 이름으로 구분하는 데 사용할 수 있습니다.
이 함수가 분산 테이블에서 실행되면 각 세그먼트에 해당하는 값을 가진 일반 컬럼을 생성합니다.구문
도입 버전: v26.5.0ClickHouse SQL 쿼리 문자열을 파싱하여 구문 강조에 사용할 강조 범위의 배열을 반환합니다.
각 범위는 시작 위치(바이트 단위), 끝 위치, 강조 유형으로 구성된 named tuple입니다.
강조 유형은 해당 조각의 구문상 역할(키워드, 식별자, 함수 등)을 나타내며
UI에서 색상을 지정하는 데 사용할 수 있습니다. LIKE 및 REGEXP 문자열 패턴 내부에서는 메타문자와
이스케이프 문자가 별도로 강조 표시됩니다.구문
도입 버전: v20.5.0이 함수가 실행된 호스트명을 반환합니다.
함수가 원격 server(분산 처리)에서 실행되면 원격 server의 이름을 반환합니다.
함수가 분산 테이블에서 실행되면 각 세그먼트와 관련된 값을 갖는 일반 컬럼을 생성합니다.
그렇지 않으면 상수 값을 생성합니다.구문
도입 버전: v1.1.0이 함수는 전달된 인수를 그대로 반환하므로 디버깅과 테스트에 유용합니다. 이 함수를 사용하면 인덱스 사용을 우회하여 전체 스캔 성능을 확인할 수 있습니다. 쿼리 분석기는 사용할 인덱스를 찾을 때 identity 함수 내부의 내용은 무시하며, 상수 폴딩도 비활성화합니다.구문
도입 버전: v1.1.0이 함수는 디버깅과 내부 검사를 위한 함수입니다.
이 함수는 인수를 무시하고 항상 1을 반환합니다.
인수는 평가되지 않습니다.인덱스 분석 중에는 이 함수의 인수가 indexHint로 감싸져 있지 않은 것으로 간주됩니다.
따라서 해당 조건에 따라 인덱스 범위의 데이터를 선택하면서도, 그 조건으로 추가 필터링은 하지 않을 수 있습니다.
ClickHouse의 인덱스는 희소하므로, indexHint를 사용하면 동일한 조건을 직접 지정할 때보다 더 많은 데이터가 반환됩니다.
설명
다음을 실행하면:
SELECT * FROM test WHERE key = 123;
ClickHouse는 두 가지 작업을 수행합니다:
인덱스를 사용해 key = 123을 포함할 수 있는 그래뉼(약 8192개 행의 블록)을 찾습니다
해당 그래뉼을 읽은 다음 각 행을 필터링하여 key = 123인 행만 반환합니다
따라서 디스크에서 8,192개 행을 읽더라도, 실제로 반환되는 것은 조건에 일치하는 1개 행뿐입니다.indexHint를 사용해 다음을 실행하면:
SELECT * FROM test WHERE indexHint(key = 123);
ClickHouse는 한 가지 작업만 수행합니다:
인덱스를 사용해 key = 123을 포함할 수 있는 그래뉼을 찾고, 필터링 없이 해당 그래뉼의 모든 행을 반환합니다.
key = 456, key = 789인 행 등을 포함해 8,192개 행 전체를 반환합니다. (같은 그래뉼에 저장된 모든 데이터가 반환됩니다.)
indexHint()는 성능 향상을 위한 기능이 아닙니다. ClickHouse 인덱스가 어떻게 동작하는지 디버깅하고 이해하기 위한 기능입니다:
내 조건은 어떤 그래뉼을 선택하는가?
해당 그래뉼에는 몇 개의 행이 있는가?
인덱스가 효과적으로 사용되고 있는가?
참고: indexHint 함수를 사용해 쿼리를 최적화할 수는 없습니다. indexHint 함수는 쿼리 분석에 추가 정보를 제공하지 않으므로 쿼리를 최적화하지 않습니다. indexHint 함수 안에 표현식을 넣는 것이 indexHint 함수 없이 사용하는 것보다 어떤 면에서도 더 낫지 않습니다. indexHint 함수는 내부 검사와 디버깅 목적으로만 사용할 수 있으며 성능을 개선하지 않습니다. ClickHouse 기여자가 아닌 사람이 indexHint를 사용하는 경우, 실수일 가능성이 높으므로 제거해야 합니다.구문
indexHint(expression)
인수
expression — 인덱스 범위 선택에 사용할 임의의 표현식입니다. Expression
도입 버전: v1.1.0현재 초기 쿼리의 ID를 반환합니다.
쿼리의 다른 매개변수는 system.query_log의 initial_query_id 필드에서 추출할 수 있습니다.queryID 함수와 달리, initialQueryID는 서로 다른 세그먼트에서도 동일한 결과를 반환합니다.구문
CREATE TABLE tmp (str String) ENGINE = Log;INSERT INTO tmp (*) VALUES ('a');SELECT count(DISTINCT t) FROM (SELECT initialQueryID() AS t FROM remote('127.0.0.{1..3}', currentDatabase(), 'tmp') GROUP BY queryID());
도입 버전: v25.4.0초기 쿼리의 시작 시간을 반환합니다.
initialQueryStartTime은 서로 다른 세그먼트에서도 동일한 결과를 반환합니다.구문
initialQueryStartTime()
별칭: initial_query_start_time인수
None.
반환 값현재 쿼리를 발생시킨 초기 쿼리의 시작 시간을 반환합니다. DateTime예시사용 예시
Query
CREATE TABLE tmp (str String) ENGINE = Log;INSERT INTO tmp (*) VALUES ('a');SELECT count(DISTINCT t) FROM (SELECT initialQueryStartTime() AS t FROM remote('127.0.0.{1..3}', currentDatabase(), 'tmp') GROUP BY queryID());
도입 버전: v20.6.0단일 값을 기반으로 집계 함수의 결과를 계산합니다.
이 함수는 combinator -State를 사용해 집계 함수를 초기화할 때 사용할 수 있습니다.
집계 함수의 상태를 생성해 AggregateFunction 타입의 컬럼에 삽입하거나, 초기화된 집계를 기본값으로 사용할 수 있습니다.구문
도입 버전: v20.3.0인수가 상수 표현식인지 여부를 반환합니다.
상수 표현식은 쿼리 분석 단계, 즉 실행 전에 결과를 알 수 있는 표현식입니다.
예를 들어, 리터럴로 이루어진 표현식은 상수 표현식입니다.
이 함수는 주로 개발, 디버깅 및 시연 목적으로 사용됩니다.구문
join_storage_table_name — 검색을 수행할 위치를 나타내는 식별자입니다. 이 식별자는 기본 데이터베이스에서 검색됩니다(구성 파일의 매개변수 default_database 참조). 기본 데이터베이스를 재정의하려면 USE database_name 쿼리를 사용하거나 database_name.table_name처럼 마침표로 데이터베이스와 테이블을 지정하십시오. String
value_column — 필요한 데이터를 포함하는 테이블 컬럼 이름입니다. const String
join_storage_table_name — 검색을 수행할 위치를 나타내는 식별자입니다. 이 식별자는 기본 데이터베이스에서 검색됩니다(config 파일의 default_database 매개변수 참조). 기본 데이터베이스를 변경하려면 USE database_name 쿼리를 사용하거나 database_name.table_name처럼 점으로 데이터베이스와 테이블을 지정하십시오. String
value_column — 필요한 데이터가 들어 있는 테이블 컬럼의 이름입니다. const String
DROP TABLE IF EXISTS test;CREATE TABLE test (s LowCardinality(String)) ENGINE = Memory;-- 두 개의 파트 생성:INSERT INTO test VALUES ('ab'), ('cd'), ('ab'), ('ab'), ('df');INSERT INTO test VALUES ('ef'), ('cd'), ('ab'), ('cd'), ('ef');SELECT s, lowCardinalityIndices(s) FROM test;
Response
┌─s──┬─lowCardinalityIndices(s)─┐│ ab │ 1 ││ cd │ 2 ││ ab │ 1 ││ ab │ 1 ││ df │ 3 │└────┴──────────────────────────┘┌─s──┬─lowCardinalityIndices(s)─┐│ ef │ 1 ││ cd │ 2 ││ ab │ 3 ││ cd │ 2 ││ ef │ 1 │└────┴──────────────────────────┘
도입 버전: v18.12.0LowCardinality 컬럼의 딕셔너리 값을 반환합니다.
블록 크기가 딕셔너리 크기보다 작거나 크면 결과는 잘리거나 기본값으로 채워집니다.
LowCardinality는 파트별 딕셔너리를 사용하므로, 이 함수는 파트에 따라 서로 다른 딕셔너리 값을 반환할 수 있습니다.구문
DROP TABLE IF EXISTS test;CREATE TABLE test (s LowCardinality(String)) ENGINE = Memory;-- 두 개의 파트 생성:INSERT INTO test VALUES ('ab'), ('cd'), ('ab'), ('ab'), ('df');INSERT INTO test VALUES ('ef'), ('cd'), ('ab'), ('cd'), ('ef');SELECT s, lowCardinalityKeys(s) FROM test;
Response
┌─s──┬─lowCardinalityKeys(s)─┐│ ef │ ││ cd │ ef ││ ab │ cd ││ cd │ ab ││ ef │ │└────┴───────────────────────┘┌─s──┬─lowCardinalityKeys(s)─┐│ ab │ ││ cd │ ab ││ ab │ cd ││ ab │ df ││ df │ │└────┴───────────────────────┘
도입 버전: v1.1.0상수를 단일 값을 포함하는 일반 컬럼으로 변환합니다.
일반 컬럼과 상수는 메모리에서 서로 다르게 표현됩니다.
함수는 일반 인수와 상수 인수에 대해 보통 서로 다른 코드를 실행하지만, 일반적으로 결과는 동일해야 합니다.
이 함수는 이러한 동작을 디버깅하는 데 사용할 수 있습니다.구문
-- 아래 예시에서 `countMatches` 함수는 두 번째 인수로 상수를 기대합니다.-- `materialize` 함수를 사용하면 상수를 전체 컬럼으로 변환하여 이 동작을 디버깅할 수 있으며,-- 상수가 아닌 인수에 대해 함수가 오류를 발생시키는지 확인할 수 있습니다.SELECT countMatches('foobarfoo', 'foo');SELECT countMatches('foobarfoo', materialize('foo'));
Response
2Code: 44. DB::Exception: Received from localhost:9000. DB::Exception: Illegal type of argument #2 'pattern' of function countMatches, expected constant String, got String
도입 버전: v23.10.0두 표본에서 연속형 메트릭의 평균을 비교하는 A/B 테스트에 필요한 최소 표본 크기를 계산합니다.이 문서에 설명된 공식을 사용합니다.
처치군과 대조군의 크기가 같다고 가정합니다.
한 그룹에 필요한 표본 크기를 반환합니다(즉, 전체 실험에 필요한 표본 크기는 반환 값의 2배입니다).
또한 처치군과 대조군에서 테스트 메트릭의 분산이 같다고 가정합니다.구문
mde — 기준값 대비 백분율로 나타낸 최소 검출 가능 효과(MDE)입니다(예: 기준값이 112.25이고 MDE가 0.03이면 예상 변화는 112.25 ± 112.25*0.03입니다). (U)Int* 또는 Float*
power — 검정에 필요한 통계적 검정력입니다(1 - 제2종 오류 확률). (U)Int* 또는 Float*
alpha — 검정에 필요한 유의수준입니다(제1종 오류 확률). (U)Int* 또는 Float*
반환 값3개의 요소 minimum_sample_size, detect_range_lower, detect_range_upper로 구성된 named Tuple을 반환합니다. 각각은 필요한 표본 크기, 반환된 표본 크기로는 검출할 수 없는 값 범위의 하한(baseline * (1 - mde)로 계산), 그리고 반환된 표본 크기로는 검출할 수 없는 값 범위의 상한(baseline * (1 + mde)로 계산)을 의미합니다(Float64). Tuple(Float64, Float64, Float64)예시minSampleSizeContinuous
Query
SELECT minSampleSizeContinuous(112.25, 21.1, 0.03, 0.80, 0.05) AS sample_size
도입 버전: v22.6.0두 표본의 전환율(비율)을 비교하는 A/B 테스트에 필요한 최소 표본 크기를 계산합니다.이 문서에 설명된 공식을 사용합니다. 처치군과 대조군의 크기가 같다고 가정합니다. 한 그룹에 필요한 표본 크기를 반환합니다(즉, 전체 실험에 필요한 표본 크기는 반환 값의 2배입니다).구문
반환 값3개의 요소 minimum_sample_size, detect_range_lower, detect_range_upper를 포함하는 named Tuple을 반환합니다. 각각은 순서대로 필요한 표본 크기, 반환된 필요 표본 크기에서 검출되지 않는 값 범위의 하한으로 baseline - mde로 계산한 값, 반환된 필요 표본 크기에서 검출되지 않는 값 범위의 상한으로 baseline + mde로 계산한 값입니다. Tuple(Float64, Float64, Float64)예시minSampleSizeConversion
Query
SELECT minSampleSizeConversion(0.25, 0.03, 0.80, 0.05) AS sample_size
도입 버전: v20.1.0현재 행을 기준으로 지정된 오프셋에 있는 컬럼의 값을 반환합니다.
이 함수는 사용 중단되었으며 오류를 일으키기 쉽습니다. 사용자가 기대하는 논리적 순서와 데이터 블록의 물리적 순서가 일치하지 않을 수 있는데, 이 함수는 물리적 순서를 기준으로 동작하기 때문입니다.
대신 적절한 윈도우 함수를 사용하는 것이 좋습니다.이 함수는 allow_deprecated_error_prone_window_functions = 1을 설정하면 활성화할 수 있습니다.구문
도입 버전: v21.2.0리터럴과 리터럴의 연속을 플레이스홀더 ?로 대체하지만, 복잡한 별칭(alias)(공백을 포함하거나, 3자리 이상의 숫자를 포함하거나, UUID처럼 길이가 36바이트 이상인 경우)은 대체하지 않습니다.
이렇게 하면 복잡한 쿼리 로그를 더 효과적으로 분석할 수 있습니다.구문
SELECT normalizeQuery('SELECT 1 AS aComplexName123'), normalizeQueryKeepNames('SELECT 1 AS aComplexName123')
Response
┌─normalizeQuery('SELECT 1 AS aComplexName123')─┬─normalizeQueryKeepNames('SELECT 1 AS aComplexName123')─┐│ SELECT ? AS `?` │ SELECT ? AS aComplexName123 │└───────────────────────────────────────────────┴────────────────────────────────────────────────────────┘
도입 버전: v21.2.0normalizedQueryHash와 마찬가지로, 유사한 쿼리에 대해 리터럴 값은 제외한 동일한 64비트 해시 값을 반환합니다. 다만 해싱 전에 복잡한 별칭(공백을 포함하거나, 2자리를 초과하는 숫자를 포함하거나, UUID처럼 길이가 36바이트 이상인 경우)을 플레이스홀더로 대체하지는 않습니다.
쿼리 로그를 분석할 때 유용할 수 있습니다.구문
SELECT normalizedQueryHash('SELECT 1 AS `xyz123`') != normalizedQueryHash('SELECT 1 AS `abc123`') AS normalizedQueryHash;SELECT normalizedQueryHashKeepNames('SELECT 1 AS `xyz123`') != normalizedQueryHashKeepNames('SELECT 1 AS `abc123`') AS normalizedQueryHashKeepNames;
도입 버전: v26.4.0식별자를 무작위 단어로, 리터럴을 무작위 값으로 대체하면서 SQL 쿼리 구조는 유지한 채 난독화합니다.이 함수는 로깅하거나 디버깅을 위해 쿼리를 공유하기 전에 쿼리를 익명화할 때 유용합니다.
같은 입력 쿼리라도 서로 다른 행에서는 서로 다른 난독화 결과가 생성되므로,
여러 쿼리를 다룰 때 프라이버시를 유지하는 데 도움이 됩니다.선택적 tag 매개변수는 동일한 함수 호출이
쿼리에서 여러 번 사용될 때 공통 하위 표현식 제거가 일어나지 않도록 합니다. 이렇게 하면 각 호출마다 서로 다른 난독화 결과가 생성됩니다.기능:
도입 버전: v26.4.0지정된 seed를 사용해 결정론적 결과가 나오도록 SQL 쿼리를 난독화합니다.obfuscateQuery()와 달리, 이 함수는 동일한 seed가 주어지면 항상 동일한 결과를 생성합니다.
여러 번 실행하더라도 일관된 난독화가 필요하거나, 테스트 또는 디버깅 목적으로
동일하게 난독화된 쿼리를 재현하려는 경우에 유용합니다.기능:
DROP TABLE IF EXISTS tab;CREATE TABLE tab( i int, j int)ENGINE = MergeTreePARTITION BY iORDER BY tuple();INSERT INTO tab VALUES (1, 1), (1, 2), (1, 3), (2, 4), (2, 5), (2, 6);SELECT i, j, partitionId(i), _partition_id FROM tab ORDER BY i, j;
도입 버전: v21.9.0현재 쿼리의 ID를 반환합니다.
쿼리의 다른 매개변수는 system.query_log 테이블의 query_id 필드에서 확인할 수 있습니다.initialQueryID 함수와 달리, queryID는 세그먼트마다 다른 결과를 반환할 수 있습니다.구문
CREATE TABLE tmp (str String) ENGINE = Log;INSERT INTO tmp (*) VALUES ('a');SELECT count(DISTINCT t) FROM (SELECT queryID() AS t FROM remote('127.0.0.{1..3}', currentDatabase(), 'tmp') GROUP BY queryID());
grouping — 선택 사항입니다. 그룹화 키입니다. grouping 값이 바뀌면 함수 상태가 재설정됩니다. 같음 연산자가 정의된 지원 데이터 타입이라면 무엇이든 사용할 수 있습니다. Any
반환 값각 행의 누적 결과를 반환합니다. Any예시initializeAggregation을 사용하는 사용 예시
Query
WITH initializeAggregation('sumState', number) AS one_row_sum_stateSELECT number, finalizeAggregation(one_row_sum_state) AS one_row_sum, runningAccumulate(one_row_sum_state) AS cumulative_sumFROM numbers(5);
도입 버전: v21.3.0동시에 실행 중인 이벤트 수를 계산합니다.
각 이벤트에는 시작 시간과 종료 시간이 있습니다.
시작 시간은 이벤트에 포함되지만 종료 시간은 포함되지 않습니다.
시작 시간과 종료 시간이 있는 컬럼은 동일한 데이터 타입이어야 합니다.
이 함수는 각 이벤트의 시작 시간마다 활성(동시 실행) 상태인 이벤트의 총수를 계산합니다.
요구 사항이벤트는 시작 시간을 기준으로 오름차순으로 정렬되어 있어야 합니다.
이 요구 사항을 충족하지 않으면 함수에서 예외가 발생합니다.
각 데이터 블록은 개별적으로 처리됩니다.
서로 다른 데이터 블록에 있는 이벤트가 서로 겹치면 올바르게 처리되지 않습니다.
함수의 결과는 처리되는 데이터 블록과 블록 내 데이터 순서에 따라 달라집니다.
runningDifference() 계산 시의 행 순서는 사용자에게 반환되는 행 순서와 다를 수 있습니다.
이를 방지하려면 ORDER BY가 포함된 서브쿼리를 만들고, 해당 서브쿼리 바깥에서 함수를 호출할 수 있습니다.
블록 크기가 결과에 영향을 준다는 점에 유의하십시오.
runningDifference의 내부 상태는 새 블록마다 재설정됩니다.구문
SELECT EventID, EventTime, runningDifference(EventTime) AS deltaFROM( SELECT EventID, EventTime FROM events WHERE EventDate = '2025-11-24' ORDER BY EventTime ASC LIMIT 5);
도입 버전: v1.1.0데이터 블록에서 연속된 행 값 사이의 차이를 계산하지만, runningDifference와 달리 첫 번째 행에는 0이 아니라 실제 값을 반환합니다.
사용 중단 예정현재 처리 중인 데이터 블록 내에서의 차이만 반환합니다.
이러한 오류 발생 가능성이 높은 동작 때문에 이 함수는 더 이상 권장되지 않습니다.
대신 윈도우 함수를 사용하는 것이 좋습니다.이 함수 사용을 허용하려면 SETTING allow_deprecated_error_prone_window_functions를 사용할 수 있습니다.
도입 버전: v1.1.0지정된 초 수만큼 쿼리 실행을 일시 중지합니다.
이 함수는 주로 테스트 및 디버깅 목적으로 사용됩니다.sleep() 함수는 쿼리 성능과 시스템 응답성에 부정적인 영향을 줄 수 있으므로, 일반적으로 프로덕션 환경에서는 사용하지 않는 것이 좋습니다.
하지만 다음과 같은 시나리오에서는 유용할 수 있습니다:
테스트: ClickHouse를 테스트하거나 벤치마크할 때, 특정 조건에서 시스템이 어떻게 동작하는지 관찰하기 위해 지연을 시뮬레이션하거나 일시 중지를 추가할 수 있습니다.
디버깅: 특정 시점의 시스템 상태나 쿼리 실행 상태를 확인해야 하는 경우, sleep()을 사용해 일시 중지를 추가하면 관련 정보를 점검하거나 수집할 수 있습니다.
시뮬레이션: 경우에 따라 네트워크 지연 시간이나 외부 시스템 의존성과 같이 지연 또는 일시 중지가 발생하는 실제 환경 시나리오를 시뮬레이션할 수 있습니다.
sleep() 함수는 ClickHouse 시스템의 전반적인 성능과 응답성에 영향을 줄 수 있으므로, 꼭 필요한 경우에만 신중하게 사용하는 것이 중요합니다.
보안상의 이유로 이 함수는 기본 사용자 프로필에서만 실행할 수 있습니다(allow_sleep이 활성화된 경우).구문
sleep(seconds)
인수
seconds — 쿼리 실행을 최대 3초 동안 일시 중지할 초 단위 시간입니다. 소수 단위 초를 지정하려면 부동소수점 값을 사용할 수 있습니다. const UInt* 또는 const Float*
도입 버전: v1.1.0결과 집합(result set)의 각 행마다 지정한 초 수만큼 쿼리 실행을 일시 중지합니다.sleepEachRow() 함수는 sleep() 함수와 마찬가지로 주로 테스트 및 디버깅 용도로 사용됩니다.
이 함수를 사용하면 각 행을 처리할 때 지연을 시뮬레이션하거나 일시 중지를 넣을 수 있으므로, 다음과 같은 상황에서 유용합니다:
테스트: 특정 조건에서 ClickHouse의 성능을 테스트하거나 벤치마크할 때 sleepEachRow()를 사용해 처리되는 각 행마다 지연을 시뮬레이션하거나 일시 중지를 넣을 수 있습니다.
디버깅: 처리되는 각 행마다 시스템 상태나 쿼리 실행 과정을 확인해야 하는 경우 sleepEachRow()를 사용해 일시 중지를 넣어 관련 정보를 점검하거나 수집할 수 있습니다.
시뮬레이션: 경우에 따라 외부 시스템 또는 네트워크 지연 시간과 관련된 상황처럼, 각 행을 처리할 때마다 지연이나 일시 중지가 발생하는 실제 환경을 시뮬레이션하고자 할 수 있습니다.
sleep() 함수와 마찬가지로 sleepEachRow()도 신중하게, 꼭 필요한 경우에만 사용해야 합니다. 특히 큰 결과 집합을 처리할 때는 ClickHouse 시스템의 전반적인 성능과 응답성에 상당한 영향을 줄 수 있습니다.
구문
sleepEachRow(seconds)
인수
seconds — 결과 집합의 각 행마다 쿼리 실행을 최대 3초 동안 일시 중지할 시간(초)입니다. 소수점 이하 초를 지정하려면 부동소수점 값도 사용할 수 있습니다. const UInt* 또는 const Float*
도입 버전: v23.8.0ClickHouse 테이블 구조를 Protobuf 형식 스키마로 변환합니다.이 함수는 ClickHouse 테이블 구조 정의를 받아 proto3 구문의 Protocol Buffers(Protobuf) 스키마 정의로 변환합니다. 이는 데이터 교환을 위해 ClickHouse 테이블 구조와 일치하는 Protobuf 스키마를 생성할 때 유용합니다.구문
SELECT throwIf(number = 3, 'Too many') FROM numbers(10);
Response
↙ Progress: 0.00 rows, 0.00 B (0.00 rows/s., 0.00 B/s.) Received exception from server (version 19.14.1):Code: 395. DB::Exception: Received from localhost:9000. DB::Exception: Too many.
도입 버전: v1.1.0일부 요소를 다른 요소에 명시적으로 매핑하도록 정의한 규칙에 따라 값을 변환합니다.이 함수에는 두 가지 변형이 있습니다.
transform(x, array_from, array_to, default) - 일치하는 요소가 없을 때 기본값을 사용하여 매핑 배열로 x를 변환합니다
transform(x, array_from, array_to) - 동일하게 변환하지만 일치하는 값을 찾지 못하면 원래 x를 반환합니다
이 함수는 array_from에서 x를 찾고, 동일한 인덱스에 있는 array_to의 해당 요소를 반환합니다.
array_from에서 x를 찾지 못하면 default 값(4개 매개변수 버전) 또는 원래 x(3개 매개변수 버전)를 반환합니다.
array_from에 일치하는 요소가 여러 개 있으면 첫 번째 일치 항목에 해당하는 요소를 반환합니다.요구 사항:
array_from과 array_to의 요소 수는 같아야 합니다
4개 매개변수 버전: transform(T, Array(T), Array(U), U) -> U 여기서 T와 U는 서로 다르더라도 호환되는 타입일 수 있습니다
3개 매개변수 버전: transform(T, Array(T), Array(T)) -> T 여기서 모든 타입은 동일해야 합니다
반환 값x가 array_from의 요소와 일치하면 array_to의 대응 값을 반환하고, 그렇지 않으면 default(제공된 경우) 또는 x(default가 제공되지 않은 경우)를 반환합니다. Any예시transform(T, Array(T), Array(U), U) -> U
Query
SELECTtransform(SearchEngineID, [2, 3], ['Yandex', 'Google'], 'Other') AS title,count() AS cFROM test.hitsWHERE SearchEngineID != 0GROUP BY titleORDER BY c DESC
Response
┌─title─────┬──────c─┐│ Yandex │ 498635 ││ Google │ 229872 ││ Other │ 104472 │└───────────┴────────┘
transform(T, Array(T), Array(T)) -> T
Query
SELECTtransform(domain(Referer), ['yandex.ru', 'google.ru', 'vkontakte.ru'], ['www.yandex', 'example.com', 'vk.com']) AS s, count() AS cFROM test.hitsGROUP BY domain(Referer)ORDER BY count() DESCLIMIT 10
반환 값교집합 결과를 포함하는 새로운 uniqThetaSketch입니다. UInt64예시사용 예시
Query
SELECT finalizeAggregation(uniqThetaIntersect(a, b)) AS a_intersect_b, finalizeAggregation(a) AS a_cardinality, finalizeAggregation(b) AS b_cardinalityFROM(SELECT arrayReduce('uniqThetaState', [1, 2]) AS a, arrayReduce('uniqThetaState', [2, 3, 4]) AS b);
반환 값a_not_b 결과를 포함하는 새 uniqThetaSketch를 반환합니다. UInt64예시사용 예시
Query
SELECT finalizeAggregation(uniqThetaNot(a, b)) AS a_not_b, finalizeAggregation(a) AS a_cardinality, finalizeAggregation(b) AS b_cardinalityFROM(SELECT arrayReduce('uniqThetaState', [2, 3, 4]) AS a, arrayReduce('uniqThetaState', [1, 2]) AS b);
반환 값합집합 결과를 포함하는 새로운 uniqThetaSketch를 반환합니다. UInt64예시사용 예시
Query
SELECT finalizeAggregation(uniqThetaUnion(a, b)) AS a_union_b, finalizeAggregation(a) AS a_cardinality, finalizeAggregation(b) AS b_cardinalityFROM(SELECT arrayReduce('uniqThetaState', [1, 2]) AS a, arrayReduce('uniqThetaState', [2, 3, 4]) AS b);
반환 값각 행의 variant 타입 이름을 나타내는 Enum 컬럼을 반환합니다. Enum예시사용 예시
Query
CREATE TABLE test (v Variant(UInt64, String, Array(UInt64))) ENGINE = Memory;INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]);SELECT variantType(v) FROM test;
도입 버전: v1.1.0ClickHouse의 현재 버전을 major_version.minor_version.patch_version.number_of_commits_since_the_previous_stable_release 형식의 문자열로 반환합니다.
분산 테이블에서 실행되면 이 함수는 각 세그먼트에 해당하는 값을 갖는 일반 컬럼을 생성합니다.
그렇지 않으면 상수 값을 반환합니다.구문