はじめに
Autonomous AI Databaseでは、Icebergカタログをマウントすることで、外部で管理されているIcebergテーブルをADBから直接参照できます。
たとえば、Snowflake Open Catalog / Polarisで管理しているIcebergテーブルも、ADBにカタログとして追加しておけば、ADBのSQLから schema.table@catalog_name の形式で問い合わせることができます。
このカタログ追加はSQLで実行することもできますが、Database ActionsのGUIからでも簡単に設定できます。
今回は、Database ActionsのData Studioを使って、Snowflake Open Catalog / Polarisを、ADBにIcebergカタログとして追加します。
事前準備
以下の設定を実施済みという前提で行っていきます。
- Snowflake側の準備
- 権限や資格証明の作成
こちらをクリックして詳細を表示
こちらの記事の手順でSnowflake側と資格証明などの設定を行います。
Step 1: Snowflake Open Catalog / Polaris に外部カタログを作る ~ Step 5. 権限付与とCredentialの作成
IcebergカタログをADBにマウントする際、REST Catalogへアクセスするための資格証明と、Icebergファイルのあるバケットへアクセスするための資格証明の2種類が必要です。Iceberg REST Catalog用のCredentialと、Data Storage用のCredentialは、別々のCredentialとして作成して利用します。
手順
1. Database Actionsにログインする
OCIコンソールから対象のAutonomous Databaseを開き、Database Actionsを起動します。
実行するユーザーでログインします。今回はADMINユーザーで実行します。
作成してあるCredentialを確認します。事前準備で作成したREST Catalogへアクセスするための資格証明と、Icebergファイルのあるバケットへアクセスするための資格証明を確認します。
SELECT credential_name, username
FROM user_credentials
ORDER BY credential_name;
2. Data Studioの「カタログ」を開く
Database Actionsに入ったら、メニューから以下を開きます。
Data Studio
-> カタログ
カタログ画面が開いたら、左上の「カタログ」をクリックします。
画面内の 「追加」 をクリックします。
ここで、ADBから見た外部カタログの接続定義を作成します。ADBのカタログ名は、SQLから @カタログ名 で参照するためのADB側の名前です。Snowflake Open Catalog上のカタログ名そのものとは別物です。
3. カタログ・ソースで「アイスバーグ・カタログ」を選ぶ
「カタログの追加」ダイアログで、カタログ・ソースとして「Icebergカタログ」を選択します。
選択したら 「次へ」 をクリックします。
4. カタログ・ソース情報を入力する
次の画面で、以下を入力します。
-
カタログ名:
POLARIS_CAT
これはADB側の名前です。
SQLでは後でこのように使います。
SELECT *
FROM "<NAMESPACE_NAME>"."<TABLE_NAME>"@POLARIS_CAT;
カタログ名には英字、数字、アンダースコアのみを使用します。マルチバイト文字は使用できず、大文字・小文字は区別されません。(参考:Oracle ドキュメント DBMS_CATALOGパッケージ)
-
Icebergカタログ・タイプ:
Polaris
Snowflake Open Catalog / Polarisを使うため、ここでは Polaris を選びます。
-
Icebergカタログ・エンドポイント:
https://<account_locator>.snowflakecomputing.com/polaris/api/catalog/v1/adb_iceberg_ext_catalog
-
Icebergカタログ資格証明:
POLARIS_CATALOG_CRED
ドロップダウンから、前回作成済みのCredentialを選びます。これは、Snowflake Open Catalog / Polaris REST APIにアクセスするためのCredentialです。
-
バケット資格証明:
POLARIS_S3_CRED
ドロップダウンから、前回作成済みのストレージCredentialを選びます。
Polarisカタログの場合、このバケット資格証明は必須です。Polaris REST APIからはIcebergのメタデータを取得し、実データであるParquetなどのファイルはS3などのクラウドストレージから読みます。そのため、カタログ用Credentialとストレージ用Credentialは別々に必要です。
※資格証明が未作成の場合、こちらの画面上で作成します。
5. 「次」をクリックしてNamespace選択へ進む
カタログ・ソース情報を入力したら、「次」 をクリックします。
ここでADBは、指定されたPolarisエンドポイントとCredentialを使って、IcebergカタログのNamespace一覧を取得します。
Namespace一覧が表示されれば、少なくとも以下は正しく動いています。
- ADB -> Polaris REST API への認証
- ADB -> PolarisカタログのNamespace参照
- Open Catalog側のService Principal権限
逆にNamespaceが表示されない場合は、以下を確認します。
- Icebergカタログ・エンドポイントが間違っている
- Token Endpoint / Client ID / Client Secret / Scopeが間違っている
- Open Catalog側のPrincipal Role / Catalog Roleの権限が足りない
- 権限変更直後で、まだ反映されていない
- ADB側から外部エンドポイントへ到達できない
Icebergカタログ・ネームスペースを選びます。検証対象のNamespaceを選択します。
GUI上で、検証したいテーブルが入っているNamespaceを選びます。ここでは、ICEBERG_TUTORIAL_DBを選択します。
ここで選ぶNamespaceは、ADBにマウントする起点となるNamespaceです。今回の構成では ICEBERG_TUTORIAL_DB を選択し、その配下の PUBLIC NamespaceにあるテーブルをADBから参照します。
- ネームスペース・セパレータ・スタイル:「Polarisスタイル」のままにする
- バケット・リージョン:ここでは
ap-northeast-1
Icebergのデータファイルが置かれているS3バケットのリージョンを入力します。
Polarisの場合、このBucket Regionは必須項目です。
6. 「追加」をクリックする
入力内容を確認して、「追加」 をクリックします。
成功すると、「カタログの管理」画面に新しいカタログが表示されます。
この時点で、ADBにPolarisカタログがマウントされました。
作成後の確認
GUIで確認
Data Studioのカタログ画面にて、作成したカタログを選びます。
「適用」をクリックすると、カタログエクスプローラ上にNamespaceやTableが表示されます。
SQLにて確認
SQLワークシートで、マウント済みカタログを確認します。
SELECT catalog_name, catalog_type, is_enabled
FROM user_mounted_catalogs
WHERE catalog_name = 'POLARIS_CAT';
テーブル一覧を確認します。
SELECT owner, table_name
FROM all_tables@POLARIS_CAT
ORDER BY owner, table_name;
最後に、Icebergテーブルを問い合わせます。Icebergカタログ上のスキーマ名・テーブル名は大文字小文字を区別するため、ダブルクォートで囲んで指定します。
SELECT *
FROM "<NAMESPACE_NAME>"."<TABLE_NAME>"@POLARIS_CAT
FETCH FIRST 10 ROWS ONLY;
ADBでは、リモートカタログ上の表を [schema].object@catalog_name の形式で参照します。
おわりに
この記事では、Database ActionsのData StudioからSnowflake Open Catalog / PolarisをIcebergカタログとしてADBに追加し、GUIおよびSQLからNamespaceやTableを確認しました。
カタログをマウントしておくことで、ADB側で個別に外部表を作成しなくても、Icebergカタログ上のテーブルを schema.table@catalog_name の形式で参照できます。
外部で管理されているIcebergデータを、ADBのSQLや分析機能から扱えるようになるので、データ連携や分析の選択肢が広がります。
参考













