데이터 타입

데이터 타입 (Data types)

Trino에는 아래에 설명된 내장 데이터 타입 집합이 있어요. 추가 타입은 플러그인이 제공할 수 있어요.

출처: 문서

본문

Trino에는 아래에 설명된 내장 데이터 타입 집합이 있고, 추가 타입은 플러그인이 제공할 수 있어요.

Trino 타입 지원과 매핑 (Trino type support and mapping)

데이터 소스에 대한 커넥터가 이 페이지에 설명된 모든 Trino 데이터 타입을 지원할 필요는 없어요. 데이터 소스에서 Trino와 유사한 데이터 타입이 사용된다면, 커넥터는 필요에 따라 Trino 타입과 원격 데이터 타입을 서로 매핑할 수 있어요.

커넥터와 데이터 소스에 따라 타입 매핑은 다음과 같이 양방향으로 적용될 수 있어요.

  • 데이터 소스 → Trino 매핑: Trino가 데이터 소스의 컬럼을 읽는 모든 연산(예: SELECT 문장)에 적용돼요. 기반 소스 데이터 타입을 Trino 데이터 타입으로 표현해야 하거든요.
  • Trino → 데이터 소스 매핑: Trino의 컬럼이나 표현식을 기반 데이터 소스와 호환되는 데이터 타입이나 표현식으로 변환해야 하는 모든 연산에 적용돼요. 예를 들어 CREATE TABLE AS 문장은 Trino 타입을 지정하고, 그 타입들이 원격 데이터 소스의 타입으로 매핑돼요. WHERE 같은 프레디킷도 프레디킷이 원격 데이터 소스의 유효한 문법으로 변환되도록 이러한 매핑을 사용해요.

데이터 타입 지원과 매핑은 커넥터에 따라 다르며, 자세한 내용은 커넥터 문서를 참고하세요.

Boolean

  • BOOLEAN

    truefalse boolean 값을 담아요.

정수 (Integer)

정수는 다음 형식의 숫자 리터럴로 표현할 수 있어요.

  • 십진 정수. 예: -7, 0, 3.
  • 0X 또는 0x와 값으로 구성된 16진수 정수. 예: 십진 100x0A, 십진 170x11.
  • 0O 또는 0o와 값으로 구성된 8진수 정수. 예: 십진 320o40, 십진 90o11.
  • 0B 또는 0b와 값으로 구성된 2진수 정수. 예: 십진 90b1001, 십진 420b101010.

리터럴 값 안의 밑줄 문자는 무시되며 가독성을 높이는 데 사용할 수 있어요. 예를 들어 십진 정수 123_456123456과 같아요. 앞의 밑줄, 뒤의 밑줄, 연속된 밑줄은 허용되지 않아요.

정수는 다음 데이터 타입이 지원해요.

  • TINYINT

    최소값 -2^7 또는 -0x80, 최대값 2^7 - 1 또는 0x7F인 8비트 부호 2의 보수(two's complement) 정수.

  • SMALLINT

    최소값 -2^15 또는 -0x8000, 최대값 2^15 - 1 또는 0x7FFF인 16비트 부호 2의 보수 정수.

  • INTEGER 또는 INT

    최소값 -2^31 또는 -0x80000000, 최대값 2^31 - 1 또는 0x7FFFFFFF인 32비트 부호 2의 보수 정수. 이 타입에는 INTEGERINT 이름을 모두 쓸 수 있어요.

  • BIGINT

    최소값 -2^63 또는 -0x8000000000000000, 최대값 2^63 - 1 또는 0x7FFFFFFFFFFFFFFF인 64비트 부호 2의 보수 정수.

부동소수점 (Floating-point)

고정 정밀도의 부동소수점 수는 1.03e1 같은 과학적 표기법으로 숫자 리터럴로 표현할 수 있고 DOUBLE 데이터 타입으로 캐스팅돼요. 리터럴 값 안의 밑줄 문자는 무시되며 가독성을 높이는 데 사용할 수 있어요. 예를 들어 123_456.789e4123456.789e4와 같아요. 앞의 밑줄, 뒤의 밑줄, 연속된 밑줄, 소수점(.) 옆의 밑줄은 허용되지 않아요.

  • REAL

    IEEE Standard 754(이진 부동소수점 산술)를 구현하는 32비트 부정확, 가변 정밀도 실수.

    예시 리터럴: REAL '10.3', REAL '10.3e0', REAL '1.03e1'

  • DOUBLE

    IEEE Standard 754를 구현하는 64비트 부정확, 가변 정밀도 실수.

    예시 리터럴: DOUBLE '10.3', DOUBLE '1.03e1', 10.3e0, 1.03e1

  • NUMBER

    최소 50자리 십진수의, 정밀도가 지정되지 않은 부동소수점 십진수. 1e-100 또는 더 작은 양수, 1e100 또는 더 큰 값을 지원해요.

    SELECT NUMBER '3.1415926535897932384626433832795028841971693993751'
    -- 3.1415926535897932384626433832795028841971693993751 (정밀도 손실 없음)
    
    SELECT NUMBER '12345678901234567890123456789012345678901234567890e30'
    -- 1.234567890123456789012345678901234567890123456789E+79 (정밀도 손실 없음)
    

    NUMBER 타입은 부동소수점 타입과 유사한 의미론으로 특수값 Infinity, -Infinity, NaN을 지원해요.

    SELECT NUMBER 'Infinity';
    -- Infinity
    
    SELECT NUMBER '-Infinity';
    -- -Infinity
    
    SELECT NUMBER 'NaN';
    -- NaN
    

    0으로 나누면 "Division by zero" 오류가 발생해요.

    SELECT NUMBER '1' / NUMBER '0';
    -- ERROR: Division by zero
    

    NaN은 자기 자신을 포함해 어떤 값과도 같지 않아요.

    SELECT NUMBER 'NaN' = NUMBER 'NaN';
    -- false
    

    정렬 순서는 -Infinity < 모든 유한 값 < Infinity < NaN 규칙을 따라요.

    예시 리터럴: NUMBER '10.3', NUMBER '1234567890', NUMBER '1e3', NUMBER 'Infinity', NUMBER 'NaN'

정확한 숫자 (Exact numeric)

정확한 숫자 값은 1.1 같은 숫자 리터럴로 표현할 수 있고, DECIMAL 데이터 타입이 지원해요.

리터럴 값 안의 밑줄 문자는 무시되며 가독성을 높이는 데 사용할 수 있어요. 예를 들어 십진 123_456.789_123123456.789123과 같아요. 앞의 밑줄, 뒤의 밑줄, 연속된 밑줄, 소수점(.) 옆의 밑줄은 허용되지 않아요.

리터럴 값의 앞자리 0은 허용되며 무시돼요. 예를 들어 000123.456123.456과 같아요.

  • DECIMAL

    정확한 십진수. 최대 38자리 정밀도를 지원하지만 18자리까지가 성능이 가장 좋아요.

    decimal 타입은 두 리터럴 파라미터를 받아요.

    • precision — 총 자릿수
    • scale — 소수부의 자릿수. 선택 사항이며 기본값은 0.

    예시 타입 정의: DECIMAL(10,3), DECIMAL(20)

    예시 리터럴: DECIMAL '10.3', DECIMAL '1234567890', 1.1

문자열 (String)

  • VARCHAR

    선택적 최대 길이를 가진 가변 길이 문자 데이터.

    예시 타입 정의: varchar, varchar(20)

    SQL 문장은 단순 리터럴과 유니코드 사용을 지원해요.

    • 리터럴 문자열: 'Hello winter !'
    • 기본 이스케이프 문자가 있는 유니코드 문자열: U&'Hello winter \2603 !'
    • 커스텀 이스케이프 문자가 있는 유니코드 문자열: U&'Hello winter #2603 !' UESCAPE '#'

    유니코드 문자열은 U& 접두사로 시작하며, 4자리 유니코드 문자 사용 앞에 이스케이프 문자가 필요해요. 위 예시에서 \2603#2603은 눈사람 문자를 나타내요. 6자리 긴 유니코드 코드는 코드 앞에 플러스 기호를 사용해야 해요. 예를 들어 활짝 웃는 얼굴 이모지에는 \+01F600을 사용해야 해요.

    문자열 리터럴의 작은따옴표는 또 다른 작은따옴표로 이스케이프할 수 있어요: 'I am big, it''s the pictures that got small!'

메서드 (Methods)

VARCHAR 값에 사용할 수 있는 인스턴스 메서드는 다음과 같아요. 각각 새 값을 반환하며, 수신자(receiver)는 절대 수정되지 않아요. 관련된 일반 함수는 각 항목에서 연결돼요.

  • string.length() → bigint

    string의 유니코드 코드 포인트 수를 반환해요. 관련: length().

    SELECT 'Hello, World!'.length();
    -- 13
    
  • string.lower() → varchar

    모든 문자를 소문자로 변환한 string을 반환해요. 관련: lower().

    SELECT 'HELLO'.lower();
    -- hello
    
  • string.upper() → varchar

    모든 문자를 대문자로 변환한 string을 반환해요. 관련: upper().

    SELECT 'hello'.upper();
    -- HELLO
    
  • string.replace(search) → varchar

    부분 문자열 search의 모든 발생을 제거한 string을 반환해요. 관련: replace().

    SELECT 'a.b.c'.replace('.');
    -- abc
    
  • string.replace(search, replacement) → varchar

    부분 문자열 search의 모든 발생을 replacement로 교체한 string을 반환해요. 관련: replace().

    SELECT 'a.b.c'.replace('.', '-');
    -- a-b-c
    
  • string.reverse() → varchar

    코드 포인트 순서를 뒤집은 string을 반환해요. 관련: reverse().

    SELECT 'Trino'.reverse();
    -- onirT
    
  • string.split(delimiter)

    delimiter의 각 발생에서 string을 분할해 조각을 배열로 반환해요. 관련: split().

    SELECT 'a,b,c'.split(',');
    -- [a, b, c]
    
  • string.split(delimiter, limit)

    delimiterstring을 최대 limit개 조각으로 분할하며, 마지막 조각은 분할되지 않은 나머지를 담아요. 관련: split().

    SELECT 'a,b,c'.split(',', 2);
    -- [a, b,c]
    
  • string.ends_with(suffix) → boolean

    stringsuffix로 끝나면 true, 그렇지 않으면 false를 반환해요. 관련: ends_with().

    SELECT 'apple'.ends_with('ple');
    -- true
    
  • string.starts_with(prefix) → boolean

    stringprefix로 시작하면 true, 그렇지 않으면 false를 반환해요. 관련: starts_with().

    SELECT 'apple'.starts_with('app');
    -- true
    
  • string.strpos(substring) → bigint

    string에서 substring 첫 발생의 1 기반 인덱스를 반환하거나, 발생하지 않으면 0을 반환해요. 관련: strpos().

    SELECT 'hello'.strpos('l');
    -- 3
    
  • string.strpos(substring, instance) → bigint

    string에서 substringinstance번째 발생의 1 기반 인덱스를 반환하거나, 발생 수가 instance보다 적으면 0을 반환해요. 관련: strpos().

    SELECT 'hello'.strpos('l', 2);
    -- 4
    
  • string.substring(start) → varchar

    1 기반 인덱스 start부터 끝까지의 string 부분을 반환해요. 관련: substring().

    SELECT 'Trino'.substring(2);
    -- rino
    
  • string.substring(start, length) → varchar

    1 기반 인덱스 start에서 시작하는 stringlength 코드 포인트를 반환해요. 관련: substring().

    SELECT 'Trino'.substring(2, 2);
    -- ri
    
  • string.translate(from, to) → varchar

    from에 나타나는 각 문자를 to의 같은 위치 문자로 교체하고, to가 더 짧으면 제거한 string을 반환해요. 관련: translate().

    SELECT 'abcd'.translate('ac', 'xy');
    -- xbyd
    
  • string.trim() → varchar

    양끝에서 공백을 제거한 string을 반환해요. 관련: trim().

    SELECT '  hi  '.trim();
    -- hi
    
  • string.trim(chars) → varchar

    양끝에서 chars의 어떤 문자든 제거한 string을 반환해요. 관련: trim().

    SELECT '##hi##'.trim('#');
    -- hi
    
  • string.ltrim() → varchar

    시작에서 공백을 제거한 string을 반환해요. 관련: ltrim().

  • string.ltrim(chars) → varchar

    시작에서 chars의 어떤 문자든 제거한 string을 반환해요. 관련: ltrim().

  • string.rtrim() → varchar

    끝에서 공백을 제거한 string을 반환해요. 관련: rtrim().

  • string.rtrim(chars) → varchar

    끝에서 chars의 어떤 문자든 제거한 string을 반환해요. 관련: rtrim().

  • string.lpad(size, padstring) → varchar

    size 코드 포인트 길이가 될 때까지 왼쪽에 padstring 사본을 채우거나, 이미 더 길면 size로 잘라낸 string을 반환해요. 관련: lpad().

    SELECT '7'.lpad(3, '0');
    -- 007
    
  • string.rpad(size, padstring) → varchar

    size 코드 포인트 길이가 될 때까지 오른쪽에 padstring 사본을 채우거나, 이미 더 길면 size로 잘라낸 string을 반환해요. 관련: rpad().

    SELECT '7'.rpad(3, '0');
    -- 700
    
  • string.to_utf8() → varbinary

    string의 UTF-8 인코딩을 VARBINARY 값으로 반환해요. 관련: to_utf8().

다음 정적 메서드는 VARCHAR 값을 구성해요.

  • varchar::chr(n) -> varchar

    유일한 문자의 유니코드 코드 포인트가 n인 한 문자 문자열을 반환해요. 관련: chr().

    SELECT varchar::chr(65);
    -- A
    
  • varchar::from_utf8(binary) -> varchar

    binary의 UTF-8 바이트에서 디코딩한 문자열을 반환하며, 잘못된 바이트 시퀀스는 유니코드 대체 문자로 교체해요. 관련: from_utf8().

    SELECT varchar::from_utf8(X'48656C6C6F');
    -- Hello
    
  • varchar::from_utf8(binary, replace) -> varchar

    binary의 UTF-8 바이트에서 디코딩한 문자열을 반환하며, 잘못된 바이트 시퀀스는 문자열 replace로 교체해요. 관련: from_utf8().

  • CHAR

    고정 길이 문자 데이터. 길이를 지정하지 않은 CHAR 타입은 기본 길이 1을 가져요. CHAR(x) 값은 항상 고정 길이 x 문자예요. 예를 들어 dogCHAR(7)로 캐스팅하면 암시적 후행 공백 4개가 추가돼요.

    VARCHAR와 마찬가지로 CHAR 리터럴의 작은따옴표는 또 다른 작은따옴표로 이스케이프할 수 있어요.

    SELECT CHAR 'All right, Mr. DeMille, I''m ready for my close-up.'
    

    예시 타입 정의: char, char(20)

CHARVARCHAR 강제 변환과 비교

CHAR 값은 암시적으로 VARCHAR로 강제 변환되며, 후행 공백이 제거된 값을 산출해요(예: CHAR(7) 'dog'VARCHAR 'dog'가 되고, CAST(CHAR(7) 'dog' AS VARCHAR)'dog'를 반환하며 패딩된 형태가 아니에요). 반대 방향으로는 암시적 강제 변환이 없어요.

그 결과 CHARVARCHAR 값을 비교하면 VARCHAR 의미론을 따라요. CHAR 값이 VARCHAR로 강제 변환되고(후행 공백 제거) 공백 패딩 없이 비교되므로 후행 공백이 중요해져요. 예를 들어 CHAR 'a' = VARCHAR 'a 'false예요. 두 CHAR 값 사이의 비교는 영향받지 않고 공백 패딩이 유지돼요.

메서드 (Methods)

CHAR 값에 사용할 수 있는 인스턴스 메서드는 다음과 같아요. 각각 새 값을 반환하며 수신자는 수정되지 않아요.

  • string.length() → bigintstring의 유니코드 코드 포인트 수. 관련: length().

  • string.lower() → char — 모든 문자를 소문자로 변환. 관련: lower().

  • string.upper() → char — 모든 문자를 대문자로 변환. 관련: upper().

  • string.reverse() → char — 코드 포인트 순서를 뒤집음. 관련: reverse().

  • string.substring(start) → char — 1 기반 인덱스 start부터 끝까지의 부분. 관련: substring().

  • string.substring(start, length) → char — 1 기반 인덱스 start에서 시작하는 length 코드 포인트. 관련: substring().

  • string.lpad(size, padstring) → varchar — 왼쪽에 padstring 채움. 관련: lpad().

  • string.to_utf8() → varbinary — UTF-8 인코딩을 VARBINARY로. 관련: to_utf8().

  • VARBINARY

    가변 길이 이진 데이터.

    SQL 문장은 X 또는 x 접두사의 이진 리터럴 데이터 사용을 지원해요. 이진 데이터는 16진수 형식이어야 해요. 예를 들어 eh?의 이진 형식은 X'65683F'이며, 다음 문장으로 확인할 수 있어요.

    SELECT from_utf8(x'65683F');
    

    이진 리터럴은 어떤 공백 문자도 무시해요. 예를 들어 리터럴 X'FFFF 0FFF 3FFF FFFF'X'FFFF0FFF3FFFFFFF'와 같아요.

    📌 참고: 길이가 있는 이진 문자열은 아직 지원되지 않아요: varbinary(n)

  • JSON

    JSON 값 타입으로, JSON 객체·배열·숫자·문자열, true, false 또는 null일 수 있어요.

  • VARIANT

    반정형(semi-structured) 값 타입. VARIANT 값은 다음 중 어떤 것도 나타낼 수 있어요.

    • 객체(키-값 구조)
    • 배열
    • 문자열
    • 숫자(정수, 소수, 부동소수점)
    • boolean
    • null
    • 날짜와 시간 값

    VARIANT는 반정형 데이터를 효율적으로 다루도록 설계됐으며, 네이티브 variant 타입을 지원하는 커넥터와 파일 형식에서 흔히 사용돼요.

    VARIANT는 값들을 제한된 JSON 타입 집합으로 줄이는 대신 기반 값 타입 전체를 보존한다는 점에서 JSON과 달라요.

    예시:

    SELECT typeof(CAST(JSON '{"a": 1, "b": [true, null]}' AS VARIANT));
    -- variant
    
    SELECT CAST(CAST(JSON '123' AS VARIANT) AS BIGINT);
    -- 123
    

    VARIANT는 Apache Iceberg Variant 스펙을 따르며, Trino는 타입 시스템, 값 인코딩, 의미론을 포함한 이 스펙을 직접 구현해요. 이는 같은 스펙을 지원하는 시스템 간에 variant 값을 읽고 쓸 때 일관된 동작을 보장해요. 관련: VARIANT functions and operators

날짜와 시간 (Date and time)

관련: Date and time functions and operators

  • DATE

    달력 날짜(연, 월, 일).

    예시: DATE '2001-08-22'

  • TIME

    TIMETIME(3)(밀리초 정밀도)의 별칭이에요.

  • TIME(P)

    시간대가 없는 하루의 시각(시, 분, 초)이며 초의 분수에 대해 P자리 정밀도. 최대 12자리(피코초) 정밀도를 지원해요.

    예시: TIME '01:02:03.456'

  • TIME WITH TIME ZONE

    시간대가 있는 하루의 시각(시, 분, 초, 밀리초). 이 타입의 값은 그 값의 시간대를 사용해 렌더링돼요. 시간대는 숫자 UTC 오프셋 값으로 표현돼요.

    SELECT TIME '01:02:03.456 -08:00';
    -- 1:02:03.456-08:00
    
  • TIMESTAMP

    TIMESTAMPTIMESTAMP(3)(밀리초 정밀도)의 별칭이에요.

  • TIMESTAMP(P)

    시간대가 없는 달력 날짜와 하루의 시각이며 초의 분수에 대해 P자리 정밀도. 최대 12자리(피코초) 정밀도를 지원해요. 이 타입은 효과적으로 DATETIME(P) 타입의 결합이에요.

    TIMESTAMP(P) WITHOUT TIME ZONE은 동일한 이름이에요.

    타임스탬프 값은 TIMESTAMP 리터럴 표현식으로 구성할 수 있어요. 또는 localtimestamp(p) 같은 언어 구성이나 여러 날짜·시간 함수와 연산자가 타임스탬프 값을 반환할 수 있어요.

    더 낮은 정밀도로 캐스팅하면 값이 절단(truncate)되지 않고 반올림돼요. 더 높은 정밀도로 캐스팅하면 추가 자릿수에 0이 붙어요.

    다음 예시는 이 동작을 보여 줘요.

    SELECT TIMESTAMP '2020-06-10 15:55:23';
    -- 2020-06-10 15:55:23
    
    SELECT TIMESTAMP '2020-06-10 15:55:23.383345';
    -- 2020-06-10 15:55:23.383345
    
    SELECT typeof(TIMESTAMP '2020-06-10 15:55:23.383345');
    -- timestamp(6)
    
    SELECT cast(TIMESTAMP '2020-06-10 15:55:23.383345' as TIMESTAMP(1));
     -- 2020-06-10 15:55:23.4
    
    SELECT cast(TIMESTAMP '2020-06-10 15:55:23.383345' as TIMESTAMP(12));
    -- 2020-06-10 15:55:23.383345000000
    
  • TIMESTAMP WITH TIME ZONE

    TIMESTAMP WITH TIME ZONETIMESTAMP(3) WITH TIME ZONE(밀리초 정밀도)의 별칭이에요.

  • TIMESTAMP(P) WITH TIME ZONE

    초의 분수에 대해 P자리 정밀도와 시간대를 가진, 하루의 날짜와 시각을 포함하는 시점(instant). 이 타입의 값은 그 값의 시간대를 사용해 렌더링돼요. 시간대는 다음 방식으로 표현할 수 있어요.

    • UTC. GMT, Z, UT를 UTC의 별칭으로 사용할 수 있어요.
    • +hh:mm 또는 -hh:mm이며 hh:mm은 UTC로부터의 시·분 오프셋. UTC, GMT, UT를 UTC의 별칭으로 붙이거나 붙이지 않고 쓸 수 있어요.
    • IANA 시간대 이름.

    다음 예시는 이러한 문법 옵션 중 일부를 보여 줘요.

    SELECT TIMESTAMP '2001-08-22 03:04:05.321 UTC';
    -- 2001-08-22 03:04:05.321 UTC
    
    SELECT TIMESTAMP '2001-08-22 03:04:05.321 -08:30';
    -- 2001-08-22 03:04:05.321 -08:30
    
    SELECT TIMESTAMP '2001-08-22 03:04:05.321 GMT-08:30';
    -- 2001-08-22 03:04:05.321 -08:30
    
    SELECT TIMESTAMP '2001-08-22 03:04:05.321 America/New_York';
    -- 2001-08-22 03:04:05.321 America/New_York
    
  • INTERVAL YEAR TO MONTH

    연과 월의 범위.

    예시: INTERVAL '3' MONTH

  • INTERVAL DAY TO SECOND

    일, 시, 분, 초, 밀리초의 범위.

    예시: INTERVAL '2' DAY

구조적 (Structural)

  • ARRAY

    주어진 구성 요소 타입의 배열.

    예시: ARRAY[1, 2, 3]

    더 자세한 내용은 Array functions and operators 문서 참고.

  • MAP

    주어진 구성 요소 타입 사이의 맵. 맵은 키-값 쌍의 컬렉션이며 각 키는 단일 값과 연관돼요. 맵 키는 필수이고, 맵 값은 null일 수 있어요.

    예시: MAP(ARRAY['foo', 'bar'], ARRAY[1, 2])

    더 자세한 내용은 Map functions and operators 문서 참고.

  • ROW

    혼합 타입을 허용하는 필드로 구성된 구조. 필드는 어떤 SQL 타입도 될 수 있어요.

    기본적으로 row 필드는 이름이 없지만 이름을 지정할 수 있어요.

    예시: CAST(ROW(1, 2e0) AS ROW(x BIGINT, y DOUBLE))

    이름이 있는 row 필드는 필드 참조 연산자(.)로 접근해요.

    예시: CAST(ROW(1, 2.0) AS ROW(x BIGINT, y DOUBLE)).x

    이름이 있는 또는 없는 row 필드는 첨자 연산자([])로 위치로 접근할 수 있어요. 위치는 1부터 시작하며 상수여야 해요.

    예시: ROW(1, 2.0)[1]

네트워크 주소 (Network address)

  • IPADDRESS

    IPv4 또는 IPv6 주소를 나타낼 수 있는 IP 주소. 내부적으로 이 타입은 순수 IPv6 주소예요. IPv4 지원은 IPv4-mapped IPv6 주소 범위(RFC 4291#section-2.5.5.2)를 사용해 처리돼요. IPADDRESS를 만들 때 IPv4 주소는 그 범위로 매핑돼요. IPADDRESS를 포맷할 때 매핑된 범위 안의 모든 주소는 IPv4 주소로 포맷돼요. 다른 주소는 RFC 5952에 정의된 canonical 형식으로 IPv6로 포맷돼요.

    예시: IPADDRESS '10.0.0.1', IPADDRESS '2001:db8::1'

UUID

  • UUID

    RSS 4122에 정의된 형식을 사용하는 UUID(Universally Unique IDentifier)를 나타내며, GUID(Globally Unique IDentifier)라고도 불러요.

    예시: UUID '12151fd2-7586-11e9-8f9e-2a86e4085a59'

HyperLogLog

HyperLogLog 데이터 스케치로 근사 고유 개수를 정확한 개수보다 훨씬 저렴하게 계산할 수 있어요. 관련: HyperLogLog functions.

  • HyperLogLog

    HyperLogLog 스케치는 approx_distinct()의 효율적인 계산을 허용해요. 희소(sparse) 표현으로 시작하며, 더 효율적일 때 조밀(dense) 표현으로 전환해요.

  • P4HyperLogLog

    P4HyperLogLog 스케치는 HyperLogLog와 비슷하지만, 시작 시(그리고 계속) 조밀 표현을 사용해요.

SetDigest

  • SetDigest

    SetDigest(setdigest)는 두 집합 사이의 Jaccard 유사도 계수를 계산하는 데 사용되는 데이터 스케치 구조예요.

    SetDigest는 다음 구성 요소를 캡슐화해요.

    • HyperLogLog
    • 단일 해시 함수가 있는 MinHash

    HyperLogLog 구조는 원래 집합의 고유 요소 근사에 사용돼요. MinHash 구조는 원래 집합의 낮은 메모리 사용량 시그니처를 저장하는 데 사용돼요. 두 집합의 유사도는 시그니처를 비교해 추정돼요.

    SetDigest는 가산적(additive)이며, 즉 서로 병합할 수 있어요.

분위수 다이제스트 (Quantile digest)

  • QDigest

    분위수 다이제스트(qdigest)는 주어진 입력 집합의 대략적인 데이터 분포를 캡처하는 요약 구조로, 분포에서 근사 분위수 값을 가져오도록 쿼리할 수 있어요. qdigest의 정확도 수준은 조정 가능하며, 공간을 희생해 더 정밀한 결과를 얻을 수 있어요.

    qdigest는 특정 분위수에 속하는 값이 무엇인지 묻는 쿼리에 근사 답을 주는 데 사용할 수 있어요. qdigest의 유용한 성질은 가산적이라는 것이에요. 즉 정밀도를 잃지 않고 병합할 수 있어요.

    qdigest는 approx_percentile의 부분 결과를 재사용할 수 있을 때마다 유용할 수 있어요. 예를 들어 일주일 동안 읽히는 99번째 백분위수 값의 일일 판독에 관심이 있을 수 있어요. 지난 주 데이터를 approx_percentile로 계산하는 대신 qdigest를 매일 저장하고, 빠르게 병합해 99번째 백분위수 값을 얻을 수 있어요.

T-Digest

  • TDigest

    T-digest(tdigest)는 qdigest와 유사하게 주어진 입력 집합의 대략적인 데이터 분포를 캡처하는 요약 구조예요. 분포에서 근사 분위수 값을 가져오도록 쿼리할 수 있어요.

    TDigest는 QDigest에 비해 다음 장점이 있어요.

    • 더 높은 성능
    • 더 낮은 메모리 사용
    • 낮은·높은 백분위수에서 더 높은 정확도

    T-digest는 가산적이며, 즉 서로 병합할 수 있어요.

더 알아보기 (Learn more)

Trino의 데이터 타입을 모두 살펴봤어요. 이어서 키워드와 식별자(Keywords and identifiers)를 배워보면 좋아요.