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';
近似一致型¶
テーブルが、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データ型 |
メモ |
---|---|---|
|
||
|
最小値より小さい10桁の数値、または32ビット符号付き整数の最大値より大きい値を挿入すると、範囲外のエラーが発生します。 |
|
|
最小値より小さい19桁の数値、または64ビット符号付き整数の最大値より大きい値を挿入すると、範囲外のエラーが発生します。 |
|
|
Snowflake DOUBLE データ型と同義語です。Snowflakeはすべての浮動小数点数を倍精度64ビット浮動小数点数として扱いますが、Icebergの浮動小数点数は32ビット浮動小数点数としてテーブルデータファイルに書き込まれます。 64ビットから32ビットへのビット幅を狭めるデータ変換では精度が失われます。 |
|
|
Snowflake DOUBLE データ型と同義語です。Snowflakeはすべての浮動小数点数を倍精度64ビット浮動小数点数として扱います。 |
|
|
||
|
||
|
マイクロ秒精度。Icebergテーブルでは、ミリ秒やナノ秒などの別の精度の使用はサポートされていません。 |
|
|
マイクロ秒精度。Icebergテーブルでは、ミリ秒やナノ秒などの別の精度の使用はサポートされていません。 Snowflakeは、タイムスタンプに非推奨のParquet物理型 |
|
|
マイクロ秒精度。Icebergテーブルでは、ミリ秒やナノ秒などの別の精度の使用はサポートされていません。 |
|
|
||
|
外部カタログを使用する場合、またはオブジェクトストレージ内のファイルからテーブルを作成する場合、Snowflakeは |
|
|
この型を使用してIcebergテーブルを作成することはできますが、 |
|
|
構造化型列は最大1000個のサブ列をサポートします。 |
|
|
構造化型列は最大1000個のサブ列をサポートします。 |
|
|
構造化型列は最大1000個のサブ列をサポートします。 |
考慮事項¶
Icebergテーブルのデータ型で作業する場合、次の項目を考慮してください。
次のIcebergデータ型を使用する列を持つテーブルの変換はサポートされていません。
uuid
fixed(L)
Snowflakeをカタログとして使用するテーブルでは、Iceberg
uuid
データ型を使用するテーブルの作成はサポートされていません。すべてのIcebergテーブルタイプ用:
構造化型列は最大1000個のサブ列をサポートします。
タイムスタンプに非推奨のParquet物理型
int96
の使用はサポートされていません。Icebergは時刻とタイムスタンプ型のマイクロ秒精度をサポートしています。その結果、ミリ秒やナノ秒などの別の精度を使用するIcebergテーブルをSnowflakeでは作成できません。