Snowflakeを使用して Snowflake Open Catalog 内のテーブルをクエリする¶
Snowflake Open Catalog に登録されたテーブルにSnowflakeを使用してクエリするには、 外部カタログ を使用する Apache Iceberg™ テーブルを作成します。
このテーブルは Snowflake Open Catalog 内のIcebergテーブルを表し、読み取り専用アクセスを提供します。
前提条件¶
始める前に、以下のものが必要です。
Open Catalog に登録されているIcebergテーブル。
Snowflakeが Open Catalog に接続するために使用できるサービス接続。ロールと権限を設定した既存のサービス接続を使用するか、Snowflake用の サービス接続を構成 できます。新しいサービス接続を設定する場合は、そのアクセス制御も設定する必要があります。
ステップ1: Snowflakeで外部ボリュームを作成する¶
まだお持ちでない場合は、テーブルデータとメタデータを保存するクラウドストレージ場所へのアクセスを提供する外部ボリュームをSnowflakeで作成することから始めます。
ご利用のクラウドストレージサービスの手順に従ってください。
ステップ2: Open Catalog のカタログ統合を作成する¶
次に、 CREATE CATALOG INTEGRATION コマンドを使用して、 OAuth を使用して、サービス接続認証情報を使用して Open Catalog に接続するカタログ統合をSnowflakeで作成します。CATALOG_NAMESPACE パラメーターはオプションです。ただし、カタログ統合で指定しない場合は、外部管理テーブルを作成するときに指定する必要があります。このセクションには以下の例があります。
オープンカタログのインバウンドネットワークトラフィックにプライベート接続を使用しない場合は、 パブリックインターネットを使用する Snowflake カタログ統合の例 をご参照ください。
Open Catalog でインバウンドネットワークトラフィックに プライベート接続を使用する場合は、 プライベート IP アドレスを使用する Snowflake カタログ統合の例 を参照してください。
例: パブリックインターネットを利用したカタログ統合¶
CREATE OR REPLACE CATALOG INTEGRATION open_catalog_int
CATALOG_SOURCE = POLARIS
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE= 'myOpenCatalogNamespace'
REST_CONFIG = (
CATALOG_URI = 'https://<orgname>-<my-snowflake-open-catalog-account-name>.snowflakecomputing.com/polaris/api/catalog'
CATALOG_NAME = 'myOpenCatalogName'
)
REST_AUTHENTICATION = (
TYPE = OAUTH
OAUTH_CLIENT_ID = 'my-client-id'
OAUTH_CLIENT_SECRET = 'my-client-secret'
OAUTH_ALLOWED_SCOPES = ( 'PRINCIPAL_ROLE:ALL' )
)
ENABLED = TRUE;
注釈
Snowflakeの組織名(
<組織名>
)を調べるには、 アカウントの組織名とアカウント名の検索 のステップに従います。<my-snowflake-open-catalog-account-name
を見つけるには、 Snowflake Open Catalog ドキュメントにある Snowflake Open Catalogアカウントのアカウント名を見つける をご参照ください。
例: プライベート IP アドレスを使用するカタログ統合¶
CREATE OR REPLACE CATALOG INTEGRATION open_catalog_int
CATALOG_SOURCE = POLARIS
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE= 'myOpenCatalogNamespace'
REST_CONFIG = (
CATALOG_URI = 'https://<open_catalog_privatelink_account_url>/polaris/api/catalog'
CATALOG_API_TYPE = PRIVATE
CATALOG_NAME = 'myOpenCatalogName'
)
REST_AUTHENTICATION = (
TYPE = OAUTH
OAUTH_CLIENT_ID = 'my-client-id'
OAUTH_CLIENT_SECRET = 'my-client-secret'
OAUTH_ALLOWED_SCOPES = ( 'PRINCIPAL_ROLE:ALL' )
)
ENABLED = TRUE;
ステップ3: 外部管理テーブルを作成する¶
以前に構成した外部ボリュームとカタログ統合を使用して、SnowflakeでIcebergテーブルを作成します。
CATALOG_TABLE_NAME には、 Open Catalog に表示されているテーブル名を指定します。
CREATE ICEBERG TABLE open_catalog_iceberg_table
CATALOG = 'open_catalog_int'
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG_TABLE_NAME = 'my_iceberg_table';
オプションとして、 AUTO_REFRESH = TRUE
を指定することで、テーブルメタデータの自動リフレッシュを有効にすることができます。詳細については、 Apache Iceberg™ テーブルの自動リフレッシュ をご参照ください。前のステップで作成したカタログ統合で CATALOG_NAMESPACE を指定しなかった場合は、このパラメーターを指定してテーブルにカタログ名前空間をセットする必要があります。
注釈
リモート・カタログのテーブルまたは名前空間のリストを取得するには、以下の関数を使用します。
ステップ4: Snowflakeを使用してテーブルをクエリする¶
これで、Snowflakeを使用して、 Open Catalog のテーブルをクエリできるようになりました。クエリ結果を他のSnowflakeテーブルと結合することもできます。
SELECT id, date
FROM open_catalog_iceberg_table
LIMIT 10;