Iceberg 테이블 데이터 타입

이 항목에서는 Snowflake의 Iceberg 테이블에 대한 데이터 타입의 작동 방식에 관한 정보를 제공합니다.

Iceberg 테이블에 대한 데이터 타입의 작동 방식

Snowflake는 Apache Iceberg 사양 에 정의된 대부분의 데이터 타입을 지원하고, Snowflake를 카탈로그로 사용할 때 Iceberg 테이블이 다양한 컴퓨팅 엔진 간에 상호 운용 가능한 상태로 유지되도록 Iceberg 데이터 타입을 테이블 파일에 기록합니다.

Snowflake가 지원하는 Iceberg 데이터 타입의 개요는 Iceberg 테이블에 지원되는 데이터 타입 섹션을 참조하십시오.

Iceberg 유형을 사용하여 열 정의하기

Snowflake를 카탈로그로 사용하는 Iceberg 테이블을 만들 때 Iceberg 데이터 타입 을 사용하여 열을 정의할 수 있습니다.

예:

CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (
    boolean_col boolean,
    int_col int,
    long_col long,
    float_col float,
    double_col double,
    decimal_col decimal(10,5),
    string_col string,
    fixed_col fixed(10),
    binary_col binary,
    date_col date,
    time_col time,
    timestamp_ntz_col timestamp_ntz(6),
    timestamp_ltz_col timestamp_ltz(6)
  )
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_ext_vol'
  BASE_LOCATION = 'my/relative/path/from/extvol';
Copy

근사 유형

테이블에서 Snowflake가 정확한 일치 를 지원하지 않는 Iceberg 데이터 타입을 사용하는 경우 Snowflake는 근사 Snowflake 유형을 사용합니다. 이 유형 매핑은 Snowflake를 카탈로그로 사용하는 변환된 테이블과 Iceberg 테이블의 열 값에 영향을 줍니다.

예를 들어 Iceberg 유형 int 의 열이 있는 테이블을 생각해 보겠습니다. Snowflake는 Snowflake 데이터 타입 NUMBER(10,0)을 사용하여 열 값을 처리합니다.

NUMBER(10,0)의 범위는 (-9,999,999,999, +9,999,999,999)이지만 int 의 범위는 (-2,147,483,648, +2,147,483,647)로 더욱 제한됩니다. 그 열에 3,000,000,000이라는 값을 삽입하려고 하면 Snowflake에서 범위 이탈을 알리는 오류 메시지를 반환합니다.

근사 유형에 대한 자세한 내용은 Iceberg 테이블에 지원되는 데이터 타입 표의 참고 사항을 참조하십시오.

Iceberg 테이블에 지원되는 데이터 타입

다음 표에서는 Iceberg 데이터 타입과 Snowflake 데이터 타입 간의 관계를 보여줍니다. 다음 열을 사용합니다.

Iceberg 유형:

Apache Iceberg 사양에 정의된 데이터 타입입니다. Snowflake를 카탈로그로 사용할 경우 Snowflake는 테이블 데이터 파일에 Iceberg 유형을 기록하므로 테이블이 다양한 컴퓨팅 엔진에 걸쳐 상호 운용 가능한 상태로 유지됩니다.

Snowflake 유형:

테이블 데이터를 처리하고 반환하는 데 사용되는 Snowflake 데이터 타입입니다. 예를 들어 스키마가 Iceberg 유형 timestamp 를 지정하는 경우 Snowflake는 Snowflake 데이터 타입 TIMESTAMP_NTZ(6)을 사용하여 마이크로초 정밀도로 값을 처리하고 반환합니다.

참고:

근사 유형 작업에 대한 참고 사항을 포함한 추가적인 사용법 노트.

Iceberg 데이터 타입

Snowflake 데이터 타입

참고

boolean

BOOLEAN

int (32비트 부호 있는 정수)

NUMBER(10,0)

최소값보다 작거나 최대 32비트 부호 있는 정수 값보다 큰 10자리 숫자를 삽입하면 범위 이탈 오류가 발생합니다.

long (64비트 부호 있는 정수)

NUMBER(19,0)

최소값보다 작거나 최대 64비트 부호 있는 정수 값보다 큰 19자리 숫자를 삽입하면 범위 이탈 오류가 발생합니다.

float (단정밀도 32비트 IEEE 754 부동 소수점)

FLOAT

Snowflake DOUBLE 데이터 타입과 동의어입니다. Snowflake는 모든 부동 소수점 숫자를 배정밀도 64비트 부동 소수점 숫자로 처리하지만, Iceberg 부동 소수점 숫자를 테이블 데이터 파일에 32비트 부동 소수점 숫자로 기록합니다.

64비트에서 32비트로 변환 범위를 좁히면 정밀도가 손실됩니다.

double (배정밀도 64비트 IEEE 754 부동 소수점)

FLOAT

Snowflake DOUBLE 데이터 타입과 동의어입니다. Snowflake는 모든 부동 소수점 숫자를 배정밀도 64비트 부동 소수점 숫자로 처리합니다.

decimal(P,S)

NUMBER(P,S)

date

DATE

time

TIME(6)

마이크로초 정밀도. Iceberg 테이블에서는 밀리초 또는 나노초와 같은 다른 정밀도를 사용할 수 없습니다.

timestamp

TIMESTAMP_NTZ(6)

마이크로초 정밀도. Iceberg 테이블에서는 밀리초 또는 나노초와 같은 다른 정밀도를 사용할 수 없습니다.

Snowflake에서는 타임스탬프에 더 이상 사용되지 않는 Parquet 물리적 유형 int96 사용을 지원하지 않습니다.

timestamptz

TIMESTAMP_LTZ(6)

마이크로초 정밀도. Iceberg 테이블에서는 밀리초 또는 나노초와 같은 다른 정밀도를 사용할 수 없습니다.

string

VARCHAR(16777216)

uuid

BINARY(16)

Snowflake를 카탈로그로 사용하는 테이블이나 변환된 테이블에는 uuid 데이터 타입이 지원되지 않습니다.

외부 카탈로그를 사용하거나 오브젝트 저장소의 파일에서 테이블을 생성하는 경우 Snowflake는 uuid Iceberg 유형을 BINARY(16) Snowflake 유형에 매핑합니다.

fixed(L)

BINARY(L)

이 유형을 사용하여 Iceberg 테이블을 생성할 수 있지만, fixed(L) 유형의 열이 있는 테이블을 변환할 수는 없습니다.

struct

정형 OBJECT

정형 유형 열은 최대 1,000개의 하위 열을 지원합니다.

list

정형 ARRAY

정형 유형 열은 최대 1,000개의 하위 열을 지원합니다.

map

MAP

정형 유형 열은 최대 1,000개의 하위 열을 지원합니다.

고려 사항

Iceberg 테이블의 데이터 타입으로 작업할 때 다음 항목을 고려하십시오.

  • 다음 Iceberg 데이터 타입을 사용하는 열이 있는 테이블 변환은 지원되지 않습니다.

    • uuid

    • fixed(L)

  • Snowflake를 카탈로그로 사용하는 테이블의 경우 Iceberg uuid 데이터 타입을 사용하는 테이블 생성은 지원되지 않습니다.

  • 모든 Iceberg 테이블 유형의 경우:

    • 정형 유형 열은 최대 1,000개의 하위 열을 지원합니다.

    • 타임스탬프에 더 이상 사용되지 않는 Parquet 물리적 유형 int96 을 사용할 수 없습니다.

    • Iceberg는 시간 및 타임스탬프 유형에 대해 마이크로초 정밀도를 지원합니다. 결과적으로, Snowflake에서는 밀리초 또는 나노초와 같은 다른 정밀도를 사용하는 Iceberg 테이블을 만들 수 없습니다.