본문으로 바로가기
본문으로 바로가기

Tuple 함수

참고

아래 문서는 system.functions 시스템 테이블을 기반으로 생성됩니다.

flattenTuple

도입 버전: v22.6

이름이 지정된 중첩된 tuple을 평탄화합니다. 반환되는 tuple의 요소는 입력 tuple의 경로입니다.

구문

flattenTuple(input)

인수

반환 값

원래 입력에서의 경로를 요소로 갖는 출력 튜플을 반환합니다. Tuple(T)

예제

사용 예제

CREATE TABLE tab(t Tuple(a UInt32, b Tuple(c String, d UInt32))) ENGINE = MergeTree ORDER BY tuple();
INSERT INTO tab VALUES ((3, ('c', 4)));

SELECT flattenTuple(t) FROM tab;
┌─flattenTuple(t)┐
│ (3, 'c', 4)    │
└────────────────┘

tuple

도입된 버전: v

입력 인수를 그룹화하여 튜플(tuple)을 반환합니다.

타입이 각각 T1, T2, ...인 컬럼 C1, C2, ...에 대해, 컬럼 이름이 고유하며 따옴표 없는 식별자로 취급될 수 있는 경우에는 이 컬럼들을 포함하는 명명된 Tuple(C1 T1, C2 T2, ...) 타입의 튜플을 반환하고, 그렇지 않은 경우 Tuple(T1, T2, ...)가 반환됩니다. 이 함수를 실행하는 데 추가 비용은 들지 않습니다. 튜플은 일반적으로 IN 연산자 인수로 사용되는 중간 값이거나, 람다 함수의 형식 매개변수 목록을 만들 때 사용됩니다. 튜플은 테이블에 기록할 수 없습니다.

이 함수는 연산자 (x, y, ...)를 구현합니다.

구문

인수

  • 없음.

반환값

예시

일반적인 예

SELECT tuple(1, 2)
(1,2)

tupleConcat

도입 버전: v23.8

인수로 전달된 튜플을 결합합니다.

구문

tupleConcat(tuple1[, tuple2, [...]])

인수

  • tupleN — Tuple 타입의 임의 개수 인수입니다. Tuple(T)

반환 값

입력 튜플들의 모든 요소를 포함하는 튜플을 반환합니다. Tuple(T)

예시

사용 예시

SELECT tupleConcat((1, 2), ('a',), (true, false))
(1, 2, 'a', true, false)

tupleDivide

도입 버전: v21.11

동일한 크기의 두 튜플에서 각 대응 요소를 서로 나눈 결과를 계산합니다.

참고

0으로 나누는 경우 inf를 반환합니다.

구문

tupleDivide(t1, t2)

인수

반환 값

나눗셈 결과가 저장된 튜플을 반환합니다. Tuple((U)Int*) 또는 Tuple(Float*) 또는 Tuple(Decimal)

예제

기본 사용법

SELECT tupleDivide((1, 2), (2, 3))
(0.5, 0.6666666666666666)

tupleDivideByNumber

도입된 버전: v21.11

모든 요소를 하나의 숫자로 나눈 결과를 포함하는 tuple을 반환합니다.

참고

0으로 나누는 경우 inf를 반환합니다.

구문

tupleDivideByNumber(tuple, number)

인수

반환 값

나뉜 요소를 포함하는 튜플을 반환합니다. Tuple((U)Int*) 또는 Tuple(Float*) 또는 Tuple(Decimal)

예제

기본 사용 예

SELECT tupleDivideByNumber((1, 2), 0.5)
(2, 4)

tupleElement

도입 버전: v1.1

튜플에서 인덱스 또는 이름으로 요소를 추출합니다.

인덱스로 접근하는 경우 1부터 시작하는 숫자 인덱스를 사용합니다. 이름으로 접근하는 경우 요소 이름을 문자열로 제공할 수 있습니다(이름이 있는 튜플에서만 동작합니다).

음수 인덱스도 지원됩니다. 이 경우 끝에서부터 번호를 매겨 해당 요소를 선택합니다. 예를 들어 tuple.-1은 튜플의 마지막 요소입니다.

선택적인 세 번째 인자는 접근한 요소가 존재하지 않을 때 예외를 발생시키는 대신 반환할 기본값을 지정합니다. 모든 인자는 상수여야 합니다.

이 함수는 런타임 오버헤드가 없으며 연산자 x.indexx.name을 구현합니다.

구문

tupleElement(tuple, index|name[, default_value])

인수

  • tuple — 튜플 또는 튜플의 배열입니다. Tuple(T) 또는 Array(Tuple(T))
  • index — 1부터 시작하는 컬럼 인덱스입니다. const UInt8/16/32/64
  • name — 요소 이름입니다. const String
  • default_value — 인덱스가 범위를 벗어나거나 요소가 존재하지 않을 때 반환되는 기본값입니다. Any

반환 값

지정된 인덱스 또는 이름의 요소를 반환합니다. Any

예시

인덱스로 접근

SELECT tupleElement((1, 'hello'), 2)
hello

음수 인덱스

SELECT tupleElement((1, 'hello'), -1)
hello

테이블과 Named Tuple

CREATE TABLE example (values Tuple(name String, age UInt32)) ENGINE = Memory;
INSERT INTO example VALUES (('Alice', 30));
SELECT tupleElement(values, 'name') FROM example;
Alice

기본값이 있는 경우

SELECT tupleElement((1, 2), 5, 'not_found')
not_found

연산자 문법

SELECT (1, 'hello').2
hello

tupleHammingDistance

도입 버전: v21.1

동일한 크기의 두 튜플 사이의 해밍 거리를 반환합니다.

참고

결과 타입은 입력 튜플의 요소 개수에 따라 산술 함수의 경우와 동일한 방식으로 결정됩니다.

SELECT
    toTypeName(tupleHammingDistance(tuple(0), tuple(0))) AS t1,
    toTypeName(tupleHammingDistance((0, 0), (0, 0))) AS t2,
    toTypeName(tupleHammingDistance((0, 0, 0), (0, 0, 0))) AS t3,
    toTypeName(tupleHammingDistance((0, 0, 0, 0), (0, 0, 0, 0))) AS t4,
    toTypeName(tupleHammingDistance((0, 0, 0, 0, 0), (0, 0, 0, 0, 0))) AS t5
┌─t1────┬─t2─────┬─t3─────┬─t4─────┬─t5─────┐
│ UInt8 │ UInt16 │ UInt32 │ UInt64 │ UInt64 │
└───────┴────────┴────────┴────────┴────────┘

문법

tupleHammingDistance(t1, t2)

인수

반환값

해밍 거리(Hamming distance)를 반환합니다. UInt8/16/32/64

예시

사용 예시

SELECT tupleHammingDistance((1, 2, 3), (3, 2, 1))
2

MinHash로 유사 문자열을 탐지하기

SELECT tupleHammingDistance(wordShingleMinHash(string), wordShingleMinHashCaseInsensitive(string)) FROM (SELECT 'ClickHouse is a column-oriented database management system for online analytical processing of queries.' AS string)
2

tupleIntDiv

도입된 버전: v23.8

분자 튜플과 분모 튜플에 대해 정수 나눗셈을 수행합니다. 몫으로 이루어진 튜플을 반환합니다. 두 튜플 중 하나에 정수가 아닌 요소가 포함된 경우, 각 비정수 분자 또는 제수를 가장 가까운 정수로 반올림하여 결과를 계산합니다. 0으로 나누면 오류가 발생합니다.

Syntax

tupleIntDiv(tuple_num, tuple_div)

인수

반환 값

몫 값의 튜플을 반환합니다. Tuple((U)Int*) 또는 Tuple(Float*) 또는 Tuple(Decimal)

예제

기본 사용법

SELECT tupleIntDiv((15, 10, 5), (5, 5, 5))
(3, 2, 1)

소수 사용 시

SELECT tupleIntDiv((15, 10, 5), (5.5, 5.5, 5.5))
(2, 1, 0)

tupleIntDivByNumber

도입: v23.8

분자 tuple을 주어진 분모로 정수 나눗셈을 수행한 후, 몫으로 이루어진 tuple을 반환합니다. 입력 매개변수 중 하나라도 정수가 아닌 요소를 포함하면, 각 비정수 분자 또는 분모를 가장 가까운 정수로 반올림한 값으로 결과를 계산합니다. 0으로 나누기를 수행하면 오류가 발생합니다.

구문

tupleIntDivByNumber(tuple_num, div)

인수

반환 값

각 요소의 몫으로 이루어진 튜플을 반환합니다. Tuple((U)Int*) 또는 Tuple(Float*) 또는 Tuple(Decimal)

예시

기본 사용법

SELECT tupleIntDivByNumber((15, 10, 5), 5)
(3, 2, 1)

소수 포함

SELECT tupleIntDivByNumber((15.2, 10.7, 5.5), 5.8)
(2, 1, 0)

tupleIntDivOrZero

도입 버전: v23.8

tupleIntDiv와 마찬가지로 분자 튜플과 분모 튜플에 대해 정수 나눗셈을 수행하고, 몫의 튜플을 반환합니다. 0으로 나누는 경우 예외를 발생시키는 대신 몫을 0으로 반환합니다. 두 튜플 중 하나에 정수가 아닌 요소가 포함되어 있으면, 정수가 아닌 각 분자 또는 제수를 가장 가까운 정수로 반올림한 후 결과를 계산합니다.

문법

tupleIntDivOrZero(tuple_num, tuple_div)

인수

반환 값

몫 튜플을 반환합니다. 분모가 0인 경우 해당 몫은 0을 반환합니다. Tuple((U)Int*) 또는 Tuple(Float*) 또는 Tuple(Decimal)

예시

분모가 0인 경우

SELECT tupleIntDivOrZero((5, 10, 15), (0, 0, 0))
(0, 0, 0)

tupleIntDivOrZeroByNumber

도입된 버전: v23.8

tupleIntDivByNumber와 마찬가지로, 주어진 분모로 분자 튜플에 대해 정수 나눗셈을 수행하고, 몫으로 이루어진 튜플을 반환합니다. 분모가 0인 경우에도 오류를 발생시키지 않고, 대신 몫을 0으로 반환합니다. 튜플이나 분모에 정수가 아닌 요소가 포함되어 있으면, 각 비정수 분자 또는 분모를 가장 가까운 정수로 반올림하여 결과를 계산합니다.

문법

tupleIntDivOrZeroByNumber(tuple_num, div)

인수(Arguments)

반환 값(Returned value)

제수가 0인 경우 해당 위치의 몫을 0으로 한 몫들의 튜플을 반환합니다. Tuple((U)Int*) 또는 Tuple(Float*) 또는 Tuple(Decimal)

예시(Examples)

기본 사용법(Basic usage)

SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 5)
(3, 2, 1)

제수가 0인 경우

SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 0)
(0, 0, 0)

tupleMinus

도입 버전: v21.11

동일한 크기의 두 튜플에서 각 위치에 있는 요소들 간의 차이를 계산합니다.

문법

tupleMinus(t1, t2)

별칭(Aliases): vectorDifference

인수(Arguments)

반환 값(Returned value)

뺄셈 결과를 담은 튜플을 반환합니다. Tuple((U)Int*) 또는 Tuple(Float*) 또는 Tuple(Decimal)

예시(Examples)

기본 사용법(Basic usage)

SELECT tupleMinus((1, 2), (2, 3))
(-1, -1)

tupleModulo

도입 버전: v23.8

두 튜플의 나눗셈 연산에서 각 요소의 나머지(모듈로)를 튜플로 반환합니다.

구문

tupleModulo(tuple_num, tuple_mod)

인수

반환 값

나눗셈의 나머지 값으로 구성된 튜플을 반환합니다. 0으로 나누면 오류가 발생합니다. Tuple((U)Int*) 또는 Tuple(Float*) 또는 Tuple(Decimal)

예시

기본 사용 예

SELECT tupleModulo((15, 10, 5), (5, 3, 2))
(0, 1, 1)

tupleModuloByNumber

도입 버전: v23.8

튜플의 각 요소를 주어진 나누는 수로 나눈 나머지들로 구성된 튜플을 반환합니다.

구문

tupleModuloByNumber(tuple_num, div)

인수

반환 값

나눗셈의 나머지 값들로 구성된 튜플을 반환합니다. 0으로 나누는 경우 오류가 발생합니다. Tuple((U)Int*) 또는 Tuple(Float*) 또는 Tuple(Decimal)

예시

기본 사용법

SELECT tupleModuloByNumber((15, 10, 5), 2)
(1, 0, 1)

tupleMultiply

도입 버전: v21.11

동일한 크기의 두 튜플에서 같은 위치에 있는 요소들을 서로 곱한 값을 계산합니다.

구문

tupleMultiply(t1, t2)

인자

반환 값

곱셈 결과가 들어 있는 튜플을 반환합니다. Tuple((U)Int*) 또는 Tuple(Float*) 또는 Tuple(Decimal)

예시

기본 사용법

SELECT tupleMultiply((1, 2), (2, 3))
(2, 6)

tupleMultiplyByNumber

도입 버전: v21.11

모든 요소를 하나의 숫자와 곱한 결과를 담은 튜플을 반환합니다.

구문

tupleMultiplyByNumber(tuple, number)

인수

반환 값

각 요소에 곱셈을 적용한 튜플을 반환합니다. Tuple((U)Int*) 또는 Tuple(Float*) 또는 Tuple(Decimal)

예시

기본 사용법

SELECT tupleMultiplyByNumber((1, 2), -2.1)
(-2.1, -4.2)

tupleNames

도입 버전: v

튜플을 컬럼 이름 배열로 변환합니다. Tuple(a T, b T, ...) 형식의 튜플에 대해, 튜플에서 이름이 지정된 컬럼을 나타내는 문자열 배열을 반환합니다. 튜플 요소에 명시적인 이름이 없는 경우, 해당 인덱스 번호가 컬럼 이름으로 대신 사용됩니다.

구문

인수

  • 없음.

반환 값

예제

일반적인 예

SELECT tupleNames(tuple(1 as a, 2 as b))
['a','b']

tupleNegate

도입 버전: v21.11

튜플 요소들의 부호를 반전합니다.

구문

tupleNegate(t)

인수

반환 값

부호가 반전된 결과를 포함하는 Tuple을 반환합니다. Tuple((U)Int*) 또는 Tuple(Float*) 또는 Tuple(Decimal)

예제

기본 사용법

SELECT tupleNegate((1, 2))
(-1, -2)

tuplePlus

도입 버전: v21.11

동일한 크기의 두 튜플에서 각 위치에 대응하는 요소의 합을 계산합니다.

구문

tuplePlus(t1, t2)

별칭: vectorSum

인수

반환값

각 입력 튜플 인자의 동일한 위치에 있는 요소들의 합을 포함하는 튜플을 반환합니다. Tuple((U)Int*) 또는 Tuple(Float*) 또는 Tuple(Decimal)

예시

기본 사용법

SELECT tuplePlus((1, 2), (2, 3))
(3, 5)

tupleToNameValuePairs

도입 버전: v21.9

튜플을 (name, value) 쌍으로 이루어진 배열로 변환합니다. 예를 들어, 튜플 Tuple(n1 T1, n2 T2, ...)Array(Tuple('n1', T1), Tuple('n2', T2), ...) 로 변환됩니다. 튜플의 모든 값은 동일한 타입이어야 합니다.

구문

tupleToNameValuePairs(tuple)

인수

반환 값

(name, value) 쌍으로 구성된 배열을 반환합니다. Array(Tuple(String, T))

예제

이름이 지정된 튜플

SELECT tupleToNameValuePairs(tuple(1593 AS user_ID, 2502 AS session_ID))
[('1', 1593), ('2', 2502)]

이름 없는 튜플

SELECT tupleToNameValuePairs(tuple(3, 2, 1))
[('1', 3), ('2', 2), ('3', 1)]

untuple

호출 위치에서 tuple 요소를 구문 수준에서 치환합니다.

결과 컬럼 이름은 구현에 따라 달라지며 변경될 수 있습니다. untuple 이후에 특정 컬럼 이름을 가정하지 마십시오.

구문

untuple(x)

EXCEPT 표현식을 사용하여 쿼리 결과에서 특정 컬럼을 제외할 수 있습니다.

인수

  • xtuple 함수, 컬럼, 또는 요소들로 구성된 tuple입니다. Tuple.

반환 값

  • 없음.

예시

입력 테이블:

┌─key─┬─v1─┬─v2─┬─v3─┬─v4─┬─v5─┬─v6────────┐
│   1 │ 10 │ 20 │ 40 │ 30 │ 15 │ (33,'ab') │
│   2 │ 25 │ 65 │ 70 │ 40 │  6 │ (44,'cd') │
│   3 │ 57 │ 30 │ 20 │ 10 │  5 │ (55,'ef') │
│   4 │ 55 │ 12 │  7 │ 80 │ 90 │ (66,'gh') │
│   5 │ 30 │ 50 │ 70 │ 25 │ 55 │ (77,'kl') │
└─────┴────┴────┴────┴────┴────┴───────────┘

Tuple 타입 컬럼을 untuple 함수의 매개변수로 사용하는 예제:

쿼리:

SELECT untuple(v6) FROM kv;

결과:

┌─_ut_1─┬─_ut_2─┐
│    33 │ ab    │
│    44 │ cd    │
│    55 │ ef    │
│    66 │ gh    │
│    77 │ kl    │
└───────┴───────┘

EXCEPT 표현식 사용 예:

쿼리:

SELECT untuple((* EXCEPT (v2, v3),)) FROM kv;

결과:

┌─key─┬─v1─┬─v4─┬─v5─┬─v6────────┐
│   1 │ 10 │ 30 │ 15 │ (33,'ab') │
│   2 │ 25 │ 40 │  6 │ (44,'cd') │
│   3 │ 57 │ 10 │  5 │ (55,'ef') │
│   4 │ 55 │ 80 │ 90 │ (66,'gh') │
│   5 │ 30 │ 25 │ 55 │ (77,'kl') │
└─────┴────┴────┴────┴───────────┘

거리 함수

지원되는 모든 함수는 거리 함수 문서에 자세히 설명되어 있습니다.