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 사양 에 따라).

기타 데이터 타입

참고

숫자가 아닌 데이터 타입의 경우, Snowflake를 카탈로그로 사용하는 경우 테이블 DDL 에 Snowflake 데이터 타입을 지정하십시오(예: list 타입이 아닌 정형 ARRAY 사용). Snowflake는 외부 Iceberg 도구와의 상호 운용성을 위해 각 Snowflake 유형을 테이블 메타데이터의 해당 Iceberg 데이터 타입에 자동으로 매핑합니다.

Iceberg 데이터 타입

Snowflake 데이터 타입

참고

boolean

BOOLEAN

date

DATE

time

TIME(6)

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

timestamp

TIMESTAMP_NTZ(6)

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

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

timestamptz

TIMESTAMP_LTZ(6)

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

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

string

VARCHAR(134217728)

기본 크기는 128MB이며, 명시적으로 지정할 수 있는 유일한 크기는 134217728(128MB)입니다.

uuid

UUID

struct

정형 OBJECT

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

list

정형 ARRAY

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

map

MAP

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

Iceberg v3 데이터 타입

중요

Iceberg v3 데이터 타입을 사용하려면 Iceberg 테이블이 준수하는 Apache Iceberg™ 사양의 버전을 3`으로 지정해야 합니다. 버전 지정 방법에 대한 지침은 :ref:`tables-iceberg-configuring-default-version 섹션을 참조하세요.

다음 테이블은 Iceberg 테이블과 함께 사용할 수 있는 Apache Iceberg™ v3 데이터 타입을 보여줍니다.

Iceberg 데이터 타입

Snowflake 데이터 타입

참고

geography

GEOGRAPHY

Snowflake는 Apache Iceberg™ 테이블 </user-guide/tables-iceberg>`에서 :ref:`label-data_types_geography`를 지원합니다. GEOGRAPHY 열을 사용하여 Snowflake 관리 또는 외부 관리 Iceberg 테이블을 생성할 수 있습니다. GEOGRAPHY 열로 Iceberg 테이블을 생성하려면 :doc:/sql-reference/sql/create-iceberg-table` 명령을 사용합니다.

조심

Iceberg는 WKB 형식을 사용하여 지리 데이터를 저장합니다. 이 형식은 Snowflake GEOGRAPHY 값에 포함될 수 있는 모든 데이터를 나타낼 수는 없습니다. FeatureFeatureCollection 유형은 WKB 형식으로 지원되지 않습니다. 이러한 유형의 GEOGRAPHY 값을 Iceberg 테이블에 삽입할 때 Snowflake는 기능을 해당 기본 지리 오브젝트로 변환하고 모든 속성을 삭제합니다. Iceberg 테이블의 자동 변환은 :doc:` ST_ASWKB </sql-reference/functions/st_aswkb>` 함수와 동일하게 동작합니다.

GEOGRAPHY 오브젝트의 경우 SRID는 항상 4326입니다.

geometry

GEOMETRY

Snowflake는 Apache Iceberg™ 테이블 </user-guide/tables-iceberg>`에서 :ref:`label-data_types_geometry`를 지원합니다. GEOMETRY 열을 사용하여 Snowflake 관리 또는 외부 관리 Iceberg 테이블을 생성할 수 있습니다. GEOMETRY 열로 Iceberg 테이블을 생성하려면 :doc:/sql-reference/sql/create-iceberg-table` 명령을 사용합니다.

참고

단일 열에 있는 모든 GEOMETRY 오브젝트의 SRID는 동일합니다.

timestamp_ns

TIMESTAMP_NTZ(9)

Apache Iceberg 테이블 사양에 따른 나노초 전체 자릿수입니다. 타임존 의미 체계가 없습니다(벽시계). TIMESTAMP(9)는 Snowflake 매개 변수 :ref:`label-timestamp_type_mapping`의 값에 따라 먼저 TIMESTAMP_NTZ(9) 또는 TIMESTAMP_LTZ (9) Snowflake 유형에 매핑됩니다. 그런 다음 적절한 Iceberg 데이터 타입에 매핑됩니다.

timestamptz_ns

TIMESTAMP_LTZ(9)

Apache Iceberg 테이블 사양에 따른 나노초 전체 자릿수입니다. UTC로 저장됩니다.

TIMESTAMP(9)는 Snowflake 매개 변수 :ref:`label-timestamp_type_mapping`의 값에 따라 먼저 TIMESTAMP_NTZ(9) 또는 TIMESTAMP_LTZ (9) Snowflake 유형에 매핑됩니다. 그런 다음 적절한 Iceberg 데이터 타입에 매핑됩니다.

variant

VARIANT

Snowflake는 처음에 표준 Snowflake 테이블에 대해 VARIANT 데이터 타입을 개발했습니다.

VARIANT는 JSON, Avro, Protobuf와 같은 동적 반정형 데이터에 대한 효율적인 이진 인코딩을 제공하여 다른 중첩 데이터 타입이 포함된 데이터로 더 쉽게 작업하고 운영할 수 있습니다. 자세한 내용은 반정형 데이터 타입Introduction to loading semi-structured data 섹션을 참조하십시오.

파쇄

Snowflake는 VARIANT 데이터 타입에 대해 파쇄(또는 하위 열화)를 기본 제공합니다. 파쇄는 필드를 VARIANT 타입 열에서 별도의 필드로 추출하고 특수 표기법을 사용하여 탐색 및 쿼리할 수 있는 열 형식(하위 열)으로 각 필드를 저장하는 프로세스입니다.

Snowflake는 파쇄된 하위 열에 대한 메타데이터와 통계를 추적하므로 더 빠르고 효율적인 쿼리를 위해 정리할 수 있습니다.

VARIANT 열에 반정형 데이터를 삽입하는 경우 Snowflake는 가능한 한 많은 데이터를 파쇄합니다.

자세한 내용은 반정형 데이터 파일 및 하위 컬럼화 섹션을 참조하십시오.

Iceberg v3 데이터 타입에 대한 고려 사항

Iceberg v3 데이터 타입을 사용할 때는 다음 사항을 고려하세요.

나노초 타임스탬프

  • nanosecond timestamps 데이터 타입에 대한 사용법 노트:

    • CREATE ICEBERG TABLEALTER ICEBERG TABLE 문에 TIMESTAMP_NTZ(9) ,TIMESTAMP_LTZ(9) 또는 TIMESTAMP(9)를 사용합니다. ``9``의 소수 자릿수는 새로운 Iceberg 나노초 유형을 지정합니다. ``6``의 소수 자릿수는 계속해서 레거시 마이크로초 유형을 지정합니다.

    • 소수 자릿수가 생략되면 세션 수준 매개 변수 :code:`ICEBERG_TIMESTAMP_DEFAULT_SCALE`이 전체 자릿수를 제어합니다. 호환성을 위해 기본값은 ``6``으로 유지됩니다. Iceberg 타임스탬프 열의 기본값을 나노초로 설정하려면 매개 변수를 ``9``로 설정합니다.

    • 모든 표준 Iceberg 파티션 변환(예: ID, 버킷, 연도, 월, 일, 시간)은 마이크로초 베리언트와 똑같이 새로운 나노초 유형을 허용합니다.

    • 호환성

      • 읽기/쓰기 - 읽기 및 쓰기 작업은 Snowflake 관리 Iceberg 테이블 및 외부 관리 Iceberg 테이블 모두에 지원됩니다.

      • 외부 도구 - 커넥터를 변경할 필요가 없습니다. 나노초 값은 표준 Iceberg timestamp_nstimestamptz_ns 값으로 읽기 및 쓰기 작업에 사용됩니다.

VARIANT

  • Iceberg 테이블이 있는 VARIANT 데이터 타입을 사용할 때는 다음 고려 사항과 제한 사항을 고려하세요.

    • Iceberg 데이터 타입에 대한 일반적인 고려 사항은 VARIANT 데이터 타입에 적용됩니다. 자세한 내용은 :ref:`Iceberg 테이블의 데이터 타입 작업 시 고려 사항 <label-tables_iceberg_data_types_considerations>`을 참조하세요.

    • VARIANT 열의 오브젝트에 대한 키는 STRING 유형이어야 합니다.

    • Snowpipe 또는 COPY INTO를 사용하여 베리언트 열이 있는 Iceberg 테이블에 데이터를 로드하는 기능이 지원됩니다. 그러나 Snowpipe 및 COPY INTO를 사용하여 중첩된 베리언트 열이 포함된 OBJECT, ARRAY, MAP에 데이터를 로드할 수는 없습니다.

    • 중첩된 베리언트는 지원되지 않습니다.

    • VARIANT 로 저장된 반정형 데이터에 대한 고려 사항 섹션을 참조하세요.

다음 섹션에는 Iceberg v3 데이터 타입에 대한 예제가 포함되어 있습니다.

GEOGRAPHY

GEOGRAPHY 열에 데이터를 삽입하려면 입력 데이터를 지정합니다. 다음 예제에서는 잘 알려진 텍스트(WKT)로 정의된 지리 공간 오브젝트를 이전 예제에서 생성한 geog_points 테이블의 geog 열에 삽입합니다.

INSERT INTO geog_points
  SELECT TO_GEOGRAPHY('POINT(-122.3861109 37.61637595)');
Copy

GEOGRAPHY 값을 명시적으로 구성하지 않고도 지리 공간 데이터를 삽입할 수도 있습니다.

INSERT INTO geog_points
  SELECT 'POINT(-122.3861109 37.61637595)';
Copy
GEOMETRY

다음 예제에서는 기본값 SRID가 ``4326``인 ``geom``이라는 단일 GEOMETRY 열이 포함된 빈 Iceberg 테이블을 생성합니다.

CREATE ICEBERG TABLE geo_points (geom GEOMETRY)
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = 'us_states'
  ICEBERG_VERSION = 3;
Copy

DDL 문에서 SRID를 명시적으로 설정할 수도 있습니다. 다음 예제에서는 SRID를 ``4269``로 설정합니다.

CREATE ICEBERG TABLE geo_points (geom GEOMETRY(4269))
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = 'us_states'
  ICEBERG_VERSION = 3;
Copy

GEOMETRY 열에 데이터를 삽입하려면 입력 데이터를 지정합니다. 다음 예제에서는 잘 알려진 텍스트(WKT)로 정의된 지리 공간 오브젝트를 이전 예제에서 생성한 geo_points 테이블의 geom 열에 삽입합니다.

INSERT INTO geo_points
  SELECT TO_GEOMETRY('POINT(-122.3861109 37.61637595)');
Copy

GEOMETRY 값을 명시적으로 구성하지 않고도 지리 공간 데이터를 삽입할 수도 있습니다.

INSERT INTO geo_points
  SELECT 'POINT(-122.3861109 37.61637595)';
Copy

SRID를 GEOMETRY의 일부로 사용할 수 없는 경우 생성자 함수를 사용하여 명시적으로 설정할 수 있습니다.

INSERT INTO geo_points
  SELECT TO_GEOMETRY('POINT(-122.3861109 37.61637595)', 4326);
Copy
나노초 타임스탬프

다음 예제에서는 나노초 타임스탬프가 있는 관리형 Iceberg 테이블을 생성합니다.

CREATE ICEBERG TABLE sensor_readings (
    reading_ntz TIMESTAMP_NTZ(9),
    reading_ltz TIMESTAMP_LTZ(9))
  ICEBERG_VERSION = 3;
Copy

이 문에 대해 Snowflake는 다음 데이터 타입 매핑을 수행합니다.

  • reading_ntz 열의 데이터 타입은 timestamp_ns Iceberg v3 데이터 타입에 매핑됩니다.

  • reading_ltz 열의 데이터 타입은 timestamptz_ns Iceberg v3 데이터 타입에 매핑됩니다.

VARIANT

CREATE ICEBERG TABLE 명령을 사용하여 VARIANT 열이 있는 Iceberg 테이블을 생성할 수 있습니다.

다음 예제에서는 ``record``라는 단일 VARIANT 열이 포함된 빈 Snowflake 관리 Iceberg 테이블을 생성합니다.

CREATE ICEBERG TABLE car_sales (record VARIANT)
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = 'car_sales'
  ICEBERG_VERSION = 3;
Copy

마찬가지로, 다음 예제에서는 Snowflake가 쓸 수 있는 카탈로그 연결 데이터베이스에 외부 관리 빈 Iceberg 테이블을 생성합니다.

USE DATABASE my_catalog_linked_db;

USE SCHEMA my_namespace;

CREATE ICEBERG TABLE car_sales (record VARIANT)
ICEBERG_VERSION = 3;
Copy

VARIANT 열에 데이터를 삽입하려면 입력 데이터 형식을 지정합니다. 다음 예제에서는 PARSE_JSON 함수를 사용하여 이전에 생성된 car_sales 테이블의 record 열에 JSON 형식의 데이터를 삽입합니다.

INSERT INTO car_sales SELECT
  PARSE_JSON(
    '{
        "date" : "2017-04-28",
        "dealership" : "Valley View Auto Sales",
        "salesperson" : {
          "id": "55",
          "name": "John Salesperson"
        },
        "customer" : [
          {"name": "Alice Doe", "phone": "14151234567", "address": "San Francisco, CA"},
          {"name": "Bob Doe", "phone": "14151234567", "address": "San Francisco, CA"}
        ],
        "vehicle" : [
          {"make": "Honda", "model": "Civic", "year": "2017", "price": "20275", "extras":["ext warranty", "paint protection"]}
        ]
      }'
    );
Copy

테이블에서 SELECT * FROM 문을 실행하면 다음 출력을 반환합니다.

+--------------------------------------------+
| RECORD                                     |
|--------------------------------------------|
| {                                          |
|    "customer": [                           |
|      {                                     |
|        "address": "San Francisco, CA",     |
|        "name": "Alice Doe",                |
|        "phone": "14151234567"              |
|      },                                    |
|      {                                     |
|        "address": "San Francisco, CA",     |
|        "name": "Bob Doe",                  |
|        "phone": "14151234567"              |
|      }                                     |
|    ],                                      |
|    "date": "2017-04-28",                   |
|    "dealership": "Valley View Auto Sales", |
|    "salesperson": {                        |
|      "id": "55",                           |
|      "name": "John Salesperson"            |
|    },                                      |
|    "vehicle": [                            |
|      {                                     |
|        "extras": [                         |
|          "ext warranty",                   |
|          "paint protection"                |
|        ],                                  |
|        "make": "Honda",                    |
|        "model": "Civic",                   |
|        "price": "20275",                   |
|        "year": "2017"                      |
|      }                                     |
|    ]                                       |
|  }                                         |
+--------------------------------------------+

VARIANT 열의 데이터를 쿼리하려면 점 또는 대괄호 표기법을 사용하여 데이터에 중첩된 요소에 액세스하면 됩니다.

다음 예제에서는 점 표기법을 사용하여 자동차를 판매한 모든 영업사원의 이름을 가져옵니다. 테이블에는 하나의 행이 있으므로 쿼리는 단일 결과 값을 생성합니다.

SELECT record:salesperson.name
  FROM car_sales
  ORDER BY 1;
Copy

출력:

+-------------------------+
| RECORD:SALESPERSON.NAME |
|-------------------------|
| "John Salesperson"      |
+-------------------------+
Copy

반정형 데이터 쿼리에 대한 자세한 내용은 반정형 데이터 쿼리하기 섹션을 참조하세요.

참고

  • Apache Spark를 사용하여 베리언트 열이 있는 Iceberg 테이블을 읽거나 쓸 때 베리언트 지원이 포함된 Apache Spark 4.0 이상을 사용해야 합니다.

    Snowflake 관리 Iceberg 테이블의 베리언트 열은 Apache Spark와 같이 Iceberg 베리언트를 지원하는 엔진에서 읽을 수 있습니다. 엔진은 :doc:`Horizon Iceberg REST 카탈로그 API </user-guide/tables-iceberg-query-using-external-query-engine-snowflake-horizon>`를 통해 Snowflake 관리 Iceberg v3 테이블을 읽을 수 있습니다.

    spark.sql("""
    SELECT
    variant_get(record, '$.customer[0].name', 'string') AS customer_1_name
    variant_get(record, '$.salesperson.name', 'string') AS name
    FROM CAR_SALES
    ORDER BY name
    """).show()
    
    Copy

    마찬가지로, Snowflake는 베리언트 열이 포함된 외부 관리 Iceberg 테이블을 읽거나 쓸 수 있습니다.

  • Snowflake는 필요한 경우 테이블에 null 값을 쓸 수 있습니다.

    예:

    INSERT INTO my_table_new
      SELECT ARRAY_CONSTRUCT(
          OBJECT_CONSTRUCT_KEEP_NULL('field1', NULL, 'field2', 123)
      )::ARRAY(OBJECT(field1 STRING, field2 INT));
    
    Copy

델타 데이터 타입

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

델타 유형

Snowflake 데이터 타입

참고

BINARY

BINARY

BOOLEAN

BOOLEAN

BYTE

NUMBER(3,0)

DATE

DATE

DECIMAL(P,S)

NUMBER(P,S)

DOUBLE

REAL

FLOAT

REAL

INTEGER

NUMBER(10,0)

LONG

NUMBER(20,0)

SHORT

NUMBER(5,0)

STRING

TEXT

TIMESTAMP

TIMESTAMP_LTZ(6)

Parquet 물리적 유형 int96 을 TIMESTAMP 에 사용할 수도 있지만, Snowflake는 int96 을 TIMESTAMP_NTZ 에 지원하지 않습니다.

TIMESTAMP_NTZ

TIMESTAMP_NTZ(6)

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

델타 중첩형

Snowflake 데이터 타입

STRUCT

정형 OBJECT

ARRAY

정형 ARRAY

MAP

MAP

고려 사항

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

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

    • uuid

    • fixed(L)

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

  • 외부 카탈로그를 사용하는 테이블의 경우 OBJECT, ARRAY, MAP을 포함하는 정형화 타입 열이 있는 Iceberg v3 테이블을 생성할 수 없습니다. 예를 들어, CREATE ICEBERG TABLE … AS SELECT(CTAS)를 사용하여 정형화 타입 열이 있는 외부 관리 Iceberg v3 테이블을 생성할 수 없습니다.

    정형화 타입 열이 있는 Snowflake 관리 Iceberg v3 테이블은 생성할 수 있습니다.

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

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

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

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

    • LIST 논리 유형을 사용하는 Parquet 파일의 경우 다음 사항에 유의하십시오.

      • element 키워드가 포함된 3단계 주석 구조가 지원됩니다. 자세한 내용은 Parquet 논리 유형 정의 를 참조하십시오. Parquet 파일이 array 키워드와 함께 더 이상 사용되지 않는 형식을 사용하는 경우 지원되는 형식에 따라 데이터를 다시 생성해야 합니다.

  • 델타 파일로 생성한 테이블의 경우 다음 사항에 유의하십시오.

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

      • 필드 ID.

      • INTERVAL 데이터 타입.

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

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

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

      • FLOAT16 데이터 타입.

    • Parquet 물리적 유형 int96 을 TIMESTAMP 에 사용할 수 있지만, Snowflake는 int96 을 TIMESTAMP_NTZ 에 지원하지 않습니다.