Apache Iceberg™ テーブルの自動リフレッシュ

新規または既存の外部管理 Apache Iceberg™ テーブル の自動メタデータリフレッシュを設定します。自動リフレッシュにより、Snowflakeはサーバーレスで継続的に外部Icebergカタログをポーリングし、メタデータを最新のリモート変更と同期します。

自動リフレッシュは、以下の外部カタログオプションを使用しているテーブルでサポートされています。

  • AWS Glue

  • Apache Iceberg REST OpenAPI 仕様に準拠した REST カタログ

  • Snowflake Open Catalog

カタログ統合のリフレッシュ間隔を設定する

CREATE CATALOG INTEGRATION コマンドを実行する際、 REFRESH_INTERVAL_SECONDS パラメーターに値を指定することができます。それ以外の場合、デフォルトのリフレッシュ間隔は30秒です。Snowflakeは、カタログ統合で定義されたIcebergテーブルがある場合にのみ、外部カタログをポーリングします。

次の例では、 AWS Glueのカタログ統合を作成し、リフレッシュ間隔を60秒に指定しています。

CREATE CATALOG INTEGRATION auto_refresh_catalog_integration
  CATALOG_SOURCE = GLUE
  CATALOG_NAMESPACE = 'my_catalog_namespace'
  TABLE_FORMAT = ICEBERG
  GLUE_AWS_ROLE_ARN = 'arn:aws:iam::123456789123:role/my-catalog-role'
  GLUE_CATALOG_ID = '123456789123'
  ENABLED = TRUE
  REFRESH_INTERVAL_SECONDS = 60;
Copy

カタログ統合のリフレッシュ間隔を更新するには、 ALTER CATALOG INTEGRATION コマンドを使用します。

例:

ALTER CATALOG INTEGRATION auto_refresh_catalog_integration SET REFRESH_INTERVAL_SECONDS = 120;
Copy

自動リフレッシュ機能付きIcebergテーブルの作成

CREATE ICEBERG TABLE コマンドを使用してIcebergテーブルを作成します。テーブルが自動メタデータリフレッシュを使用するように指定するには、 AUTO_REFRESH = TRUE を設定します。

以下の例では、 AWS Glueをカタログとして使用するIcebergテーブルを作成し、先に作成したカタログ統合(auto_refresh_catalog_integration)と、 AWS Glueの CATALOG_TABLE_NAME を指定しています。

CREATE OR REPLACE ICEBERG TABLE auto_refresh_iceberg_table
  CATALOG_TABLE_NAME = 'myGlueTable'
  CATALOG = 'auto_refresh_catalog_integration'
  AUTO_REFRESH = TRUE;
Copy

自動リフレッシュの有効化または無効化

注釈

  • テーブルがSnowflakeバージョン8.22より前に作成されたカタログ統合を使用している場合は、テーブルの自動リフレッシュを有効にする前に、 ALTER CATALOG INTEGRATION コマンドを使用して REFRESH_INTERVAL_SECONDS パラメーターを設定する必要があります。

  • Icebergテーブルの自動リフレッシュのオン/オフを頻繁に切り替えると、テーブルのメタデータのリフレッシュが遅くなります。

既存のIcebergテーブルの自動リフレッシュを有効または無効にするには、 ALTER ICEBERG TABLE コマンドを使用します。

例:

ALTER ICEBERG TABLE my_iceberg_table SET AUTO_REFRESH = FALSE;
Copy

自動リフレッシュステータスの取得

テーブルの自動リフレッシュステータスを取得するには、 SYSTEM$AUTO_REFRESH_STATUS 関数を呼び出します。

SELECT SYSTEM$AUTO_REFRESH_STATUS('my_iceberg_table');
Copy

この関数は、実行状態やスナップショットキューのサイズなど、Snowflakeがテーブルのリフレッシュを自動化するために使用するパイプに関する詳細を返します。実行状態 RUNNING は、自動リフレッシュが期待通りに実行されていることを示します。詳細については、 SYSTEM$AUTO_REFRESH_STATUS をご参照ください。

エラーの回復

自動リフレッシュ処理中にエラーが発生すると、Snowflakeは実行状態を以下の値のいずれかに更新します。

  • STALLED は、Snowflakeがエラーから回復しようとしていることを意味します。回復が成功した場合、自動リフレッシュプロセスは期待通りに実行され続け、実行状態は健全な RUNNING 状態に遷移します。

  • STOPPED は、自動リフレッシュプロセスで回復不能なエラーが発生し、テーブルの自動リフレッシュが停止したことを意味します。

    回復不能なエラーは、例えばSnowflakeがターゲットスナップショットと現在のスナップショットの間の直接の系列を確立できない場合に発生する可能性があります。

    STOPPED の状態から回復するには、以下の操作を行います。

    1. テーブル上の 自動リフレッシュをオフにします

    2. 手動でメタデータをリフレッシュします。手順については、 テーブルのメタデータをリフレッシュする をご参照ください。

    3. ALTER ICEBERG TABLE ... SET AUTO_REFRESH ステートメントを使用して、自動リフレッシュを再度有効にしてください。

    4. SYSTEM$AUTO_REFRESH_STATUS 関数を呼び出すことによって、自動リフレッシュが RUNNING 状態にあることを確認します。また、この関数を複数回呼び出して、キューに入れられたスナップショット(pendingSnapshotCount)の数が徐々に減っていくことを確認することもできます。

請求

SnowflakeはSnowpipeを使用してIcebergテーブルのリフレッシュを自動化するため、自動リフレッシュの料金はSnowpipeの料金と同じ項目で請求書に表示されます。この機能にSnowpipeのファイル料金はかかりません。

Account Usage PIPE_USAGE_HISTORY ビュー を調べることで、発生した料金を見積もることができます。自動リフレッシュパイプは、 NULL パイプ名の下にリストされます。

Icebergテーブルの料金に関する詳細は、 Icebergテーブルの請求 を参照してください。

考慮事項と制約

自動リフレッシュを使用するIcebergテーブルを使用する場合は、以下の点を考慮してください。

  • 自動リフレッシュが有効な場合、テーブルメタデータを手動でリフレッシュすることはできません。手動リフレッシュを行うには、まず 自動リフレッシュをオフにします

  • Snowflakeバージョン8.22より前に作成されたカタログ統合では、そのカタログ統合に依存するテーブルの自動リフレッシュを有効にする前に、 REFRESH_INTERVAL_SECONDS パラメーターを手動で設定する必要があります。手順については、 ALTER CATALOG INTEGRATION ... SET AUTO_REFRESH をご参照ください。

  • 新しいテーブルスナップショットが現在のテーブルスナップショットの直接の子であることを確認してください。そうでなければ、自動リフレッシュは STOPPED 状態になります。これが発生した場合に自動リフレッシュを回復するには、 エラーの回復 を参照してください。

    • テーブルが空の場合、未定義の動作を避けるため、自動リフレッシュを有効にする 前に手動リフレッシュを実行 してください。

  • オブジェクトストレージにカタログ統合 を使用する場合、自動リフレッシュはサポートされません。

  • シーケンス番号列を持たないIcebergバージョン1マニフェストは現在サポートされていません。