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データ型 |
メモ |
---|---|---|
|
最小値より小さい10桁の数値、または32ビット符号付き整数の最大値より大きい値を挿入すると、範囲外のエラーが発生します。 |
|
|
最小値より小さい19桁の数値、または64ビット符号付き整数の最大値より大きい値を挿入すると、範囲外のエラーが発生します。 |
|
|
Snowflake DOUBLE データ型と同義語です。Snowflakeはすべての浮動小数点数を倍精度64ビット浮動小数点数として扱いますが、Icebergの浮動小数点数は32ビット浮動小数点数としてテーブルデータファイルに書き込まれます。 64ビットから32ビットへのビット幅を狭めるデータ変換では精度が失われます。
|
|
|
Snowflake DOUBLE データ型と同義語です。Snowflakeはすべての浮動小数点数を倍精度64ビット浮動小数点数として扱います。 64ビットから32ビットへのビット幅を狭めるデータ変換では精度が失われます。
|
|
|
|
外部カタログ¶
外部Icebergカタログを使用するIcebergテーブルを作成する場合、Icebergの数値型は次の表に従ってSnowflakeの数値型にマッピングされます。
Icebergデータ型 |
Snowflakeデータ型 |
---|---|
|
|
|
|
|
|
|
|
|
注釈
float
や double
を主キーとして使用することはできません(Apache Iceberg仕様 に準拠)。
その他のデータ型¶
Icebergデータ型 |
Snowflakeデータ型 |
メモ |
---|---|---|
|
||
|
||
|
Apache Icebergテーブルの仕様に従ったマイクロ秒精度。 |
|
|
TIMESTAMP_NTZ(6) または TIMESTAMP_LTZ(6)、Snowflakeパラメーター TIMESTAMP_TYPE_MAPPING の値に応じて異なります。 |
Apache Icebergテーブルの仕様に従ったマイクロ秒精度。 タイムスタンプには、Parquet物理タイプ |
|
Apache Icebergテーブルの仕様に従ったマイクロ秒精度。 タイムスタンプには、Parquet物理タイプ |
|
|
||
|
外部カタログを使用する場合、またはオブジェクトストレージ内のファイルからテーブルを作成する場合、Snowflakeは |
|
|
構造化型列は最大1000個のサブ列をサポートします。 |
|
|
構造化型列は最大1000個のサブ列をサポートします。 |
|
|
構造化型列は最大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 |
|
ARRAY |
|
MAP |
考慮事項¶
Icebergテーブルのデータ型で作業する場合、次の項目を考慮してください。
次のIcebergデータ型を使用する列を持つ テーブルの変換 はサポートされていません。
uuid
fixed(L)
Snowflakeをカタログとして使用するテーブルでは、Iceberg
uuid
データ型を使用するテーブルの作成はサポートされていません。すべてのIcebergテーブルタイプ用:
構造化型列は最大1000個のサブ列をサポートします。
Icebergは時刻とタイムスタンプ型のマイクロ秒精度をサポートしています。その結果、ミリ秒やナノ秒などの別の精度を使用するIcebergテーブルをSnowflakeでは作成できません。
float
やdouble
を主キーとして使用することはできません(Apache Iceberg仕様 に準拠)。
デルタファイルから作成されたテーブルの場合:
以下の機能やデータタイプを使用したParquetファイル(Delta テーブルのデータファイル)はサポートされていません。
フィールド IDs
INTERVAL データ型。
38以上の精度を持つ DECIMAL データ型。
LIST または MAP で、1レベルまたは2レベルの表現を持つタイプ。
符号なし整数型 (INT(signed = false))。
FLOAT16 データ型。