Icebergテーブルのデータ型

このトピックでは、SnowflakeでのIcebergテーブルのデータ型の動作について説明します。

Icebergテーブルのデータ型の仕組み

Snowflakeは Apache Iceberg仕様 で定義されたデータ型のほとんどをサポートし、Icebergデータ型をテーブルファイルに書き込むため、Snowflakeをカタログとして使用する場合は、異なるコンピュートエンジン間で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)

最小値より小さい10桁の数値、または32ビット符号付き整数の最大値より大きい値を挿入すると、範囲外のエラーが発生します。

long (64ビット符号付き整数)

NUMBER(19,0)

最小値より小さい19桁の数値、または64ビット符号付き整数の最大値より大きい値を挿入すると、範囲外のエラーが発生します。

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)

uuid データ型は、カタログとしてSnowflakeを使用しているテーブルや変換されたテーブルではサポートされていません。

外部カタログを使用する場合、またはオブジェクトストレージ内のファイルからテーブルを作成する場合、Snowflakeは uuid Iceberg型を BINARY (16)Snowflake型にマッピングします。

fixed(L)

BINARY(L)

この型を使用してIcebergテーブルを作成することはできますが、 fixed(L) 型の列を持つテーブルを変換することはできません。

struct

構造化 OBJECT

構造化型列は最大1000個のサブ列をサポートします。

list

構造化 ARRAY

構造化型列は最大1000個のサブ列をサポートします。

map

MAP

構造化型列は最大1000個のサブ列をサポートします。

考慮事項

Icebergテーブルのデータ型で作業する場合、次の項目を考慮してください。

  • 次のIcebergデータ型を使用する列を持つテーブルの変換はサポートされていません。

    • uuid

    • fixed(L)

  • Snowflakeをカタログとして使用するテーブルでは、Iceberg uuid データ型を使用するテーブルの作成はサポートされていません。

  • すべてのIcebergテーブルタイプ用:

    • 構造化型列は最大1000個のサブ列をサポートします。

    • タイムスタンプに非推奨のParquet物理型 int96 の使用はサポートされていません。

    • Icebergは時刻とタイムスタンプ型のマイクロ秒精度をサポートしています。その結果、ミリ秒やナノ秒などの別の精度を使用するIcebergテーブルをSnowflakeでは作成できません。