Snowflake Postgres用のカタログ統合の構成

Snowflake Postgresカタログ統合により、SnowflakeはSnowflake Postgresインスタンスによって管理されている Apache Iceberg™ テーブルにアクセスできるようになります。Snowflake Postgres用のカタログ統合を作成すると、Snowflakeは自動的にPostgresデータベース内のテーブルを検出し、読み取り専用のIcebergテーブルとして利用できるようにします。

Snowflake Postgresカタログ統合は、 ベンディングされた認証情報 を使用して、クラウドストレージ内のテーブルデータとメタデータにアクセスします。外部ボリューム を構成する、またはストレージ認証情報を個別に管理する必要はありません。

注釈

Snowflake Postgresカタログ統合は、現在 AWS でのみサポートされています。

前提条件

  • Snowflake Postgres機能が有効になっているSnowflakeアカウント。

  • READY 状態のPostgresインスタンス。Postgresインスタンスを作成するには、 CREATE POSTGRES INSTANCE をご参照ください。

  • カタログ統合を作成するロールには、以下の権限が必要です。

    • Postgresインスタンスに対する USAGE

    • アカウントに対する CREATE INTEGRATION

考慮事項

Snowflake Postgresカタログ統合を使用する場合は、以下の点を考慮してください。

  • Snowflake Postgresカタログ統合は、常にベンディングされた認証情報を使用します。ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS を設定する必要があります。EXTERNAL_VOLUME_CREDENTIALS モードはサポートされていません。

  • REST_AUTHENTICATION を指定する必要はありません。SnowflakeはPostgresインスタンスの認証を自動的に処理します。

  • 自動リフレッシュはメタデータポーリングを使用します。変更通知はサポートされていません。

  • テーブルは読み取り専用です。Postgres管理のIcebergテーブルへの書き込み操作はサポートされていません。

  • この機能は、バースト可能なPostgresインスタンスではサポートされていません。

  • この機能は AWS でのみサポートされています。

Snowflakeのカタログ統合を作成する

Snowflake Postgresのカタログ統合を作成するには、 CREATE CATALOG INTEGRATION (Snowflake Postgres) コマンドを使用します。

例:

CREATE CATALOG INTEGRATION my_postgres_catalog_int
  CATALOG_SOURCE = SNOWFLAKE_POSTGRES
  TABLE_FORMAT = ICEBERG
  CATALOG_NAMESPACE = 'public'
  REST_CONFIG = (
    POSTGRES_INSTANCE = 'my_pg_instance'
    ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
    CATALOG_NAME = 'my_database'
  )
  ENABLED = TRUE;

詳細な構文とパラメーターの参照については、 CREATE CATALOG INTEGRATION (Snowflake Postgres) をご参照ください。

Icebergテーブルを作成する

カタログ統合を作成したら、Postgresインスタンスのテーブルを参照するIcebergテーブルを作成できます。Snowflake Postgresカタログ統合を使用してIcebergテーブルを作成する場合は、カタログ統合とPostgresデータベースに存在するテーブル名を指定します。

例:

CREATE ICEBERG TABLE my_iceberg_table
  CATALOG = 'my_postgres_catalog_int'
  CATALOG_TABLE_NAME = 'orders'
  AUTO_REFRESH = TRUE;

条件:

  • CATALOG = '<catalog_integration_name>':カタログ統合の名前を指定します。必須です。

  • CATALOG_TABLE_NAME = '<table_name>':Postgresデータベースに存在するテーブルの名前を指定します。必須です。

  • CATALOG_NAMESPACE = '<schema_name>':(オプション)テーブルを含むPostgresスキーマを指定します。デフォルトはカタログ統合に設定された CATALOG_NAMESPACE 値です。

  • CATALOG_NAME = '<database_name>':(オプション)テーブルを含むPostgresデータベースを指定します。デフォルトはカタログ統合に設定された CATALOG_NAME 値です。

  • AUTO_REFRESH = TRUE:(オプション)自動メタデータ更新を有効にします。有効にすると、Snowflakeはメタデータの変更をカタログで定期的にポーリングし、テーブルを自動的にリフレッシュします。

注釈

Snowflake Postgresカタログ統合でIcebergテーブルを作成する場合に、EXTERNAL_VOLUME を指定する必要はありません。

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

個別のIcebergテーブルを作成する代わりに、Postgresデータベースからテーブルを自動的に検出して同期するカタログリンクデータベースを作成できます。カタログリンクのデータベースは、Postgresデータベースとの同期を保つために、対応するスキーマとIcebergテーブルをSnowflakeに作成します。

例:

CREATE DATABASE my_postgres_db
  LINKED_CATALOG = (
    CATALOG = my_postgres_catalog_int
    ALLOWED_WRITE_OPERATIONS = NONE
  );

条件:

  • CATALOG = <catalog_integration_name>:Snowflake Postgresカタログ統合の名前を指定します。必須です。カタログリンクのデータベースは、カタログ統合の CATALOG_NAME で指定されたPostgresデータベースを同期します。

  • ALLOWED_WRITE_OPERATIONS = NONE:Snowflake Postgresカタログリンクのデータベースに必要です。Snowflake Postgresテーブルは読み取り専用です。

カタログリンクのデータベースが作成されると、Snowflakeは自動的にPostgresデータベースから名前空間とテーブルを検出し、対応するスキーマとIcebergテーブルを作成します。詳細については、 Apache Iceberg™ テーブルにはカタログリンクデータベースを使用します をご参照ください。

Icebergテーブルをクエリする

Icebergテーブルまたはカタログリンクデータベースを作成した後、標準 SQL を使用してテーブルをクエリできます。

SELECT * FROM my_iceberg_table;

アクセス制御

カタログ統合所有者ロールには、Postgresインスタンスに対する USAGE が付与されている必要があります。Snowflakeは、カタログ統合を作成するときにこの権限をチェックします。

カタログ統合に対する USAGE を付与されている任意のロールは、Postgresインスタンスのテーブルを参照するIcebergテーブルを作成できます。Postgresインスタンスに対する追加の許可は必要ありません。このロールには、ターゲットデータベースとスキーマにテーブルを作成するための標準的なSnowflake権限も必要です。

たとえば、カタログ統合を使用してIcebergテーブルを作成する機能を別のロールに付与するには、次の内容を実行します。

GRANT USAGE ON INTEGRATION my_postgres_catalog_int TO ROLE analyst_role;
GRANT USAGE ON DATABASE my_db TO ROLE analyst_role;
GRANT USAGE ON SCHEMA my_db.public TO ROLE analyst_role;
GRANT CREATE ICEBERG TABLE ON SCHEMA my_db.public TO ROLE analyst_role;