Apache Iceberg™ 테이블의 데이터 타입

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

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

근사 유형

테이블에서 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 데이터 타입과 Snowflake 데이터 타입 간의 관계를 보여줍니다. 이러한 데이터 타입이 사용하는 열은 다음과 같습니다.

Iceberg 유형:

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

Snowflake 유형:

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

참고:

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

숫자형 타입

카탈로그로서의 Snowflake

다음 테이블은 Snowflake를 Iceberg 카탈로그로 사용하는 테이블(Snowflake 관리 테이블)의 경우 Iceberg 숫자형 데이터 타입이 Snowflake 숫자형 데이터 타입에 매핑되는 방식을 보여줍니다. Snowflake 관리 Iceberg 테이블을 만들 때, 숫자 열을 정의하기 위해 Iceberg 데이터 타입 을 사용할 수 있습니다.

Iceberg 데이터 타입

Snowflake 데이터 타입

참고

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비트로 변환 범위를 좁히면 정밀도가 손실됩니다.

기본 키로 float 또는 double 를 사용할 수 없습니다(Apache Iceberg 사양 에 따라).

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

FLOAT

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

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

기본 키로 float 또는 double 를 사용할 수 없습니다(Apache Iceberg 사양 에 따라).

decimal(P,S)

NUMBER(P,S)

int 대신 decimal(10,0) 을 지정하면 Iceberg에서 10진수 유형이 생성됩니다. decimal(19,0) 을 지정한 경우에도 동일하게 적용됩니다.

외부 카탈로그

외부 Iceberg 카탈로그를 사용하는 Iceberg 테이블을 만들면 다음 테이블에 따라 Iceberg 숫자 유형이 Snowflake 숫자 유형에 매핑됩니다.

Iceberg 데이터 타입

Snowflake 데이터 타입

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

NUMBER(10,0)

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

NUMBER(19,0)

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

FLOAT

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

FLOAT

decimal(P,S)

NUMBER(P,S)

참고

기본 키로 float 또는 double 를 사용할 수 없습니다(Apache Iceberg 사양 에 따라).

기타 데이터 타입

Iceberg 데이터 타입

Snowflake 데이터 타입

참고

boolean

BOOLEAN

date

DATE

time

TIME(6)

Apache Iceberg 테이블 사양에 따른 마이크로초 전체 자릿수입니다.

timestamp

Snowflake 매개 변수 TIMESTAMP_TYPE_MAPPING 에 따라, TIMESTAMP_NTZ(6) 또는 TIMESTAMP_LTZ(6).

Apache Iceberg 테이블 사양에 따른 마이크로초 전체 자릿수입니다.

Parquet 물리적 유형 int96 을 타임스탬프에 사용할 수도 있습니다. Snowflake는 timestamp 를 마이크로초로 변환합니다(Apache Iceberg 테이블 사양에 따름).

timestamptz

TIMESTAMP_LTZ(6)

Apache Iceberg 테이블 사양에 따른 마이크로초 전체 자릿수입니다.

Parquet 물리적 유형 int96 을 타임스탬프에 사용할 수도 있습니다. Snowflake는 timestamp 를 마이크로초로 변환합니다(Apache Iceberg 테이블 사양에 따름).

string

VARCHAR(16777216)

uuid

BINARY(16)

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

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

struct

정형 OBJECT

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

list

정형 ARRAY

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

map

MAP

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

델타 데이터 타입

다음 테이블은 Delta 테이블 파일에서 생성된 Iceberg 테이블 에 대해 Delta 데이터 타입이 Snowflake 데이터 타입에 매핑되는 방법을 보여줍니다.

델타 유형

Snowflake 데이터 타입

BYTE

NUMBER(3,0)

SHORT

NUMBER(5,0)

INTEGER

NUMBER(10,0)

LONG

NUMBER(20,0)

FLOAT

REAL

DOUBLE

REAL

TIMESTAMP

TIMESTAMP_LTZ(6)

TIMESTAMP_NTZ

TIMESTAMP_NTZ(6)

BINARY

BINARY

STRING

TEXT

BOOLEAN

BOOLEAN

DECIMAL(P,S)

NUMBER(P,S)

다음 테이블은 Delta 중첩 데이터 타입이 Snowflake 데이터 타입에 매핑되는 방식을 보여줍니다.

델타 중첩형

Snowflake 데이터 타입

STRUCT

정형 OBJECT

ARRAY

정형 ARRAY

MAP

MAP

고려 사항

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

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

    • uuid

    • fixed(L)

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

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

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

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

    • 기본 키로 float 또는 double 를 사용할 수 없습니다(Apache Iceberg 사양 에 따라).

  • Delta 파일에서 생성된 테이블의 경우:

    • 다음 특징이나 데이터 타입을 사용하는 Parquet 파일(Delta 테이블의 데이터 파일)은 지원되지 않습니다.

      • 필드 ID.

      • INTERVAL 데이터 타입.

      • 전체 자릿수가 38개보다 많은 DECIMAL 데이터 타입.

      • 1단계 또는 2단계 표현을 사용하는 LIST 또는 MAP 타입.

      • 부호 없는 정수 타입(INT(부호 있음 = false)).

      • FLOAT16 데이터 타입.