動的 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;
Copy

動的Icebergテーブルに関する将来の付与

スキーマ内に作成された新しい動的Icebergテーブルへのアクセスを確保するには、 DYNAMIC キーワードを使用せずに、 GRANT ... ON FUTURE ICEBERG TABLES 構文を使用します。例:

GRANT <privilege> ON FUTURE ICEBERG TABLES IN SCHEMA my_schema TO ROLE my_role;
Copy

DYNAMIC キーワードを使用すると、スキーマ内に作成された新しい動的Icebergテーブルへのアクセス権は付与されません。例えば、以下のコマンドは動的Icebergテーブルには適用されません:

GRANT <privilege> ON FUTURE DYNAMIC TABLES IN SCHEMA my_schema TO ROLE my_role;
Copy

考慮事項と制約

  • 動的Icebergテーブルは、Snowflakeの通常のIcebergテーブルと同じデータ型をサポートしています。詳細については、 サポートされているデータ型 をご参照ください。

  • カタログ はアカウント、スキーマ、またはデータベースのパラメータで、通常のSnowflakeが管理するIcebergテーブルと同様に、暗黙的に設定することができます。

  • 動的Icebergテーブルは現在、 IF NOT EXISTS 句をサポートしていません。 IF NOT EXISTS 句を使用すると、ターゲットテーブルがすでに存在する場合にエラーが発生します。

  • 動的Icebergテーブルは現在、 CREATE ステートメントでのみサポートされています。他のコマンド(例えば、 ALTER DYNAMIC ICEBERG TABLE <名>)で DYNAMIC ICEBERG を指定するとエラーになります。