Apache Iceberg™ テーブルにはカタログリンクデータベースを使用します

カタログリンクデータベースを使用すると、個別の 外部管理テーブル を作成することなく、Snowflakeから複数のリモートIcebergテーブルにアクセスできます。

カタログリンクデータベースは、外部Iceberg REST カタログに接続されたSnowflakeデータベースです。Snowflakeは外部カタログと自動的に同期して名前空間とIcebergテーブルを検出し、リモートテーブルをカタログリンクデータベースに登録します。カタログリンクデータベースは、スキーマやIcebergテーブルの作成と削除もサポートしています。

Icebergテーブルにカタログリンクデータベースを使用する際の考慮事項

重要

プレビュー期間中は、カタログリンクデータベースは読み取り専用モードをサポートしていません。テーブルを削除したりデータを書き込んだりすると、それらの変更はリモートカタログにも反映されます。

カタログリンクデータベースを使用する場合は、次の点を考慮してください。

  • Iceberg REST のカタログ統合(例: Snowflake Open Catalog)を使用する場合にのみサポートされます。

  • 請求:プレビュー期間中、Snowflakeはカタログリンクデータベースに対して課金しません。課金は、Apache Iceberg™ カタログリンクデータベースが一般提供開始された時点で開始されます。

  • 自動テーブル検出を特定の名前空間のセットに制限するには、ALLOWED_NAMESPACES パラメーターを使用します。また、BLOCKED_NAMESPACES パラメーターを使用して名前空間のセットをブロックすることができます。

  • Snowflakeはリモートカタログアクセス制御(ユーザーまたはロール)を同期しません。

  • カタログリンクデータベースでは、スキーマまたは外部管理のIcebergテーブルを作成できます。その他のSnowflakeオブジェクトの作成は現在サポートされていません。

  • レイテンシ:

    • リモートカタログ内の7,500の名前空間にリンクされたデータベースの場合、名前空間とテーブルの検出には約1時間かかります。

    • 500,000個のテーブルを含むリモートカタログの場合、自動更新処理の完了には約1時間かかります。レイテンシ要件が異なる名前空間については、個別のカタログリンクデータベースを作成することをお勧めします。各データベースは、適切な自動更新間隔(REFRESH_INTERVAL_SECONDS)を設定したカタログ統合を参照する必要があります。

  • カタログリンクデータベース内のIcebergテーブルの場合:

    • Snowflakeはリモートカタログテーブルのプロパティ(保持ポリシーやバッファなど)をコピーせず、テーブルプロパティの変更も現在サポートしていません。

    • 自動更新 はデフォルトで有効になっています。外部テーブルとカタログリンクデータベーステーブルの table-uuid が一致しない場合、更新は失敗し、Snowflakeはカタログリンクデータベースからテーブルを削除します。Snowflakeはリモートテーブルを変更しません。

    • リモートカタログからテーブルを削除すると、Snowflakeはカタログリンクデータベースからテーブルを削除します。このアクションは非同期であるため、リモートカタログに変更がすぐに表示されない可能性があります。

    • リモートカタログのテーブルの名前を変更すると、Snowflakeはカタログリンクデータベースから既存のテーブルを削除し、新しい名前のテーブルを作成します。

    • マスキングポリシーとタグはサポートされています。複製、クローン作成、共有などのその他のSnowflake固有の機能はサポートされていません。

    • NAMESPACE_FLATTEN_DELIMITER パラメーターに選択した文字は、リモート名前空間に表示できません。自動検出プロセス中、Snowflakeは区切り文字を含む名前空間をスキップし、カタログリンクデータベース内に対応するスキーマを作成しません。

    • NAMESPACE_FLATTEN_DELIMITER パラメーターに _$、大文字、数字以外の文字を指定する場合、テーブルをクエリするときにスキーマ名を引用符で囲む必要があります。

    • AWS Glue にリンクされたデータベースの場合は、小文字を使用し、スキーマ名、テーブル名、列名を二重引用符で囲む必要があります。これは、小文字の識別子のみをサポートする他のIceberg REST カタログにも必要です。

      次の例は、有効なクエリを示しています。

      CREATE SCHEMA "s1";
      
      Copy

      次のステートメントは、大文字を使用しているか、二重引用符を省略しているため、有効ではありません。

      CREATE SCHEMA s1;
      CREATE SCHEMA "Schema1";
      
      Copy
    • UNDROP ICEBERG TABLE の使用はサポートされていません。

    • 外部ボリュームを使用するテーブルでは、リストとの共有がサポートされます。直接共有は現在サポートされていません。

  • カタログリンクデータベース内のテーブルへの書き込みの場合:

    • ベンディングされた認証情報はサポートされていません。

    • ネストされた名前空間内のテーブルへの書き込みは、現在サポートされていません。

外部カタログとテーブルストレージへのアクセスを構成するワークフロー

以下の手順では、カタログリンクデータベースを作成し、Snowflakeとカタログ間の同期ステータスを確認し、データベースにテーブルを作成またはクエリする方法について説明します。

  1. 外部カタログとテーブルストレージへのアクセスを構成する

  2. カタログリンクデータベースの作成

  3. カタログの同期ステータスを確認する

  4. カタログリンクデータベース内のテーブルをクエリする または リモートカタログへの書き込み

外部カタログとテーブルストレージへのアクセスを構成する

カタログリンクデータベースを作成する前に、次のオプションのいずれかを選択して、外部カタログとテーブルストレージへのアクセスを構成します。

オプション1:外部ボリュームとカタログ統合を構成する

このオプションを使用すると、外部ボリューム と、カタログ統合 を構成できます。リモートIcebergカタログが認証情報ベンディングをサポートしていない場合や、リモートカタログ内のIcebergテーブルに書き込む場合は、このオプションを選択します。

まず、リモートIcebergテーブルのデータとメタデータを保存するクラウドストレージサービス用の外部ボリュームを構成します。

次に、リモートIcebergカタログのカタログ統合を構成します。

オプション2:ベンディングされた認証情報を使用してカタログ統合を構成する

注釈

この機能は、Amazon S3にデータとメタデータを保存するテーブルでのみサポートされます。このオプションは現在、外部書き込みではサポートされていません。

このオプションを使用する場合、リモートIcebergカタログで認証情報ベンディングがサポートされている必要があります。

手順については、 Apache Iceberg™ テーブルには、カタログ提供認証情報を使用します。 をご参照ください。

カタログリンクデータベースの作成

CREATE DATABASE(カタログリンク) コマンドでカタログリンクデータベースを作成します。

次の例では、外部ボリュームを使用するカタログリンクデータベースを作成します。同期間隔を60秒に指定します(デフォルトは30秒)。同期間隔は、リモートカタログをポーリングする頻度をSnowflakeに指示します。

CREATE DATABASE my_linked_db
  LINKED_CATALOG = (
    CATALOG = 'my_catalog_int',
    BLOCKED_NAMESPACES = ('my_blocked_namespace'),
    NAMESPACE_MODE = FLATTEN_NESTED_NAMESPACE,
    NAMESPACE_FLATTEN_DELIMITER = '-'
    SYNC_INTERVAL_SECONDS = 60
  )
  EXTERNAL_VOLUME = 'my_external_vol';
Copy

注釈

この例では、NAMESPACE_MODE = FLATTEN_NESTED_NAMESPACE を指定しています。これは、カタログの*すべての*名前空間レベルのテーブルをリンクするようにSnowflakeに指示しています。ネストされた名前空間内のテーブルの場合、Snowflakeは NAMESPACE_FLATTEN_DELIMITER パラメーターを使用して、フラット化された名前空間を構築します。

詳細については、 CREATE DATABASE(カタログリンク) をご参照ください。

あるいは、ベンディングされた認証情報を使用するカタログリンクデータベースを作成します。この例では、許可される名前空間も1つ指定します。

CREATE DATABASE my_linked_db
  LINKED_CATALOG = (
    CATALOG = 'my_catalog_int_vended_creds',
    ALLOWED_NAMESPACES = ('my_namespace')
  );
Copy

カタログの同期ステータスを確認する

Snowflakeがリモートカタログをデータベースに正常にリンクしたかどうかを確認するには SYSTEM$CATALOG_LINK_STATUS 関数を使用します。

この関数は、同期に失敗したリモートカタログ内のテーブルを特定するのに役立つ情報も提供します。

SELECT SYSTEM$CATALOG_LINK_STATUS('my_linked_db');
Copy

カタログリンクデータベース内のテーブルをクエリする

カタログリンクデータベースを作成すると、Snowflakeはテーブル検出プロセスを開始し、SYNC_INTERVAL_SECONDS パラメーターの値(デフォルトでは30秒間隔)を使用して、リンクされたカタログを自動的にポーリングし、変更を確認します。

データベース内では、リモートカタログからの許可された名前空間がスキーマとして表示され、Icebergテーブルがそれぞれのスキーマの下に表示されます。

SELECT ステートメントを使用してリモートテーブルをクエリできます。

注釈

Snowflakeは、引用符で囲まれていない識別子(テーブル名と列名)を自動的に大文字に変換します。外部Icebergカタログで大文字と小文字を区別する識別子を使用する場合は、テーブル名と列名を二重引用符で囲む必要があります。

オブジェクト識別子の詳細については、識別子の要件 をご参照ください。

例:

USE DATABASE my_linked_db;

SELECT * FROM my_namespace.my_iceberg_table
  LIMIT 20;
Copy

リモートカタログへの書き込み

Snowflakeを使用して、リンクされたカタログに名前空間とIcebergテーブルを作成できます。詳細については、次のトピックをご参照ください。