動的 Apache Iceberg™ テーブルを作成する¶
このトピックでは、以下のタイプの動的テーブルの作成方法と、それに関連する注意事項について説明します:
Snowflakeが管理する Apache Iceberg™ テーブルをベーステーブルとして読み込む動的テーブル。
クエリ結果をIcebergテーブル形式で保存する動的Icebergテーブル。
Snowflakeが管理するIcebergベーステーブルは、通常の Snowflakeが管理するIcebergテーブル 、またはSnowflakeが管理する動的Icebergテーブルのいずれかになります。
Icebergテーブルから読み込む動的テーブルの作成¶
Snowflakeで管理されたIcebergテーブルから読み込む動的テーブルは、パイプラインでSnowflakeで管理されたIcebergテーブルのデータを操作したい場合や、処理したデータをSparkのApache Iceberg SDK などの他のエンジンからクエリ可能にしたい場合に便利です。
Icebergテーブルから動的テーブルを作成するのは、通常のテーブルから動的テーブルを作成するのと似ています。そのためには、通常のテーブルと同じように CREATE DYNAMIC TABLE SQL ステートメントを実行します。
動的Icebergテーブルを作成する¶
動的Icebergテーブルは、動的テーブルとSnowflakeが管理するIcebergテーブルの利点を組み合わせ、外部クラウドストレージ管理、自動データ変換、パフォーマンス最適化などの機能を提供します。
動的Icebergテーブルはデータレイクと統合され、Snowflakeによって管理されながら、 AWS S3やAzure Blob Storageなどの外部クラウドストレージにデータを保存できます。これらのテーブルは、 ACID トランザクション、スキーマ進化、隠しパーティショニング、テーブルスナップショットをサポートしています。
動的なIcebergテーブルを使った自動データ変換では、宣言型 SQL を使用して、中間ステップを管理することなく、望ましい最終状態を定義します。Snowflakeは、オーケストレーション、スケジューリング、および指定されたデータ鮮度ターゲットに基づくデータ変換のリフレッシュを処理します。
変更されたデータのみを処理するインクリメンタル処理によってパフォーマンスが最適化され、完全なデータ更新に比べてパフォーマンスが向上し、コストが削減されます。さらに、簡単なコマンドでバッチ処理とストリーミングデータを切り替えることができ、データ処理ワークフローに柔軟性をもたらします。
動的Icebergテーブルの使用例には次のようなものがあります。
データレイクの統合: 大規模なデータセットをコスト効率よく保存しながら、Snowflake内で変換と分析を実行し、Icebergフォーマットを活用して効率的なクエリと管理を行うことができます。
連続データ変換パイプラインの定義: 動的テーブルを使用することで、手作業による介入なしにデータを常に最新の状態に保ち、インクリメンタル処理で高速なデータストリームを効率的に処理できます。
動的Icebergテーブルを作成するには、 CREATE DYNAMIC ICEBERG TABLE SQL ステートメントを実行します。たとえば、 my_iceberg_table
から読み込む product
という名前の動的Icebergテーブルを作成するには、次の構文を使用します:
CREATE DYNAMIC ICEBERG TABLE product (date TIMESTAMP_NTZ, id NUMBER, content STRING)
TARGET_LAG = '20 minutes'
WAREHOUSE = mywh
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'my_iceberg_table'
AS
SELECT product_id, product_name FROM staging_table;
動的Icebergテーブルに関する将来の付与¶
スキーマ内に作成された新しい動的Icebergテーブルへのアクセスを確保するには、 DYNAMIC
キーワードを使用せずに、 GRANT ... ON FUTURE ICEBERG TABLES 構文を使用します。例:
GRANT <privilege> ON FUTURE ICEBERG TABLES IN SCHEMA my_schema TO ROLE my_role;
DYNAMIC
キーワードを使用すると、スキーマ内に作成された新しい動的Icebergテーブルへのアクセス権は付与されません。例えば、以下のコマンドは動的Icebergテーブルには適用されません:
GRANT <privilege> ON FUTURE DYNAMIC TABLES IN SCHEMA my_schema TO ROLE my_role;
考慮事項と制約¶
動的Icebergテーブルは、Snowflakeの通常のIcebergテーブルと同じデータ型をサポートしています。詳細については、 サポートされているデータ型 をご参照ください。
カタログ はアカウント、スキーマ、またはデータベースのパラメータで、通常のSnowflakeが管理するIcebergテーブルと同様に、暗黙的に設定することができます。
動的Icebergテーブルは現在、
IF NOT EXISTS
句をサポートしていません。IF NOT EXISTS
句を使用すると、ターゲットテーブルがすでに存在する場合にエラーが発生します。動的Icebergテーブルは現在、
CREATE
ステートメントでのみサポートされています。他のコマンド(例えば、ALTER DYNAMIC ICEBERG TABLE <名>
)でDYNAMIC ICEBERG
を指定するとエラーになります。