Apache Iceberg™ テーブルのデータ型

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

次の表は、IcebergカタログとしてSnowflakeを使用するテーブル(Snowflake管理テーブル)のIceberg数値データ型とSnowflake数値データ型のマッピングを示しています。Snowflake管理Icebergテーブルを作成する際、 Icebergデータ型 を使用して数値列を定義できます。

Icebergデータ型

Snowflakeデータ型

メモ

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ビットへのビット幅を狭めるデータ変換では精度が失われます。

floatdouble を主キーとして使用することはできません(Apache Iceberg仕様 に準拠)。

double (倍精度64ビット IEEE 754浮動小数点)。

FLOAT

Snowflake DOUBLE データ型と同義語です。Snowflakeはすべての浮動小数点数を倍精度64ビット浮動小数点数として扱います。

64ビットから32ビットへのビット幅を狭めるデータ変換では精度が失われます。

floatdouble を主キーとして使用することはできません(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)

注釈

floatdouble を主キーとして使用することはできません(Apache Iceberg仕様 に準拠)。

その他のデータ型

Icebergデータ型

Snowflakeデータ型

メモ

boolean

BOOLEAN

date

DATE

time

TIME(6)

Apache Icebergテーブルの仕様に従ったマイクロ秒精度。

timestamp

TIMESTAMP_NTZ(6) または TIMESTAMP_LTZ(6)、Snowflakeパラメーター TIMESTAMP_TYPE_MAPPING の値に応じて異なります。

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)

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

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

struct

構造化 OBJECT

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

list

構造化 ARRAY

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

map

MAP

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

デルタデータ型

次の表は、 デルタテーブルファイルから作成されたIcebergテーブル について、デルタデータ型と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)

次の表は、デルタ入れ子データ型がSnowflakeデータ型にどのようにマッピングされるかを示しています。

デルタ入れ子型

Snowflakeデータ型

STRUCT

構造化 OBJECT

ARRAY

構造化 ARRAY

MAP

MAP

考慮事項

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

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

    • uuid

    • fixed(L)

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

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

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

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

    • floatdouble を主キーとして使用することはできません(Apache Iceberg仕様 に準拠)。

  • デルタファイルから作成されたテーブルの場合:

    • 以下の機能やデータタイプを使用したParquetファイル(Delta テーブルのデータファイル)はサポートされていません。

      • フィールド IDs

      • INTERVAL データ型。

      • 38以上の精度を持つ DECIMAL データ型。

      • LIST または MAP で、1レベルまたは2レベルの表現を持つタイプ。

      • 符号なし整数型 (INT(signed = false))。

      • FLOAT16 データ型。