Oracle AIデータ・カタログ

Oracle AI Data Catalog (AICAT)を設定および使用する方法について学習します。

トピック

Oracle AIデータ・カタログについて

Oracle AI Data Catalog (AICAT)は、Oracle管理Iceberg RESTカタログ・サービスです。カタログ・サービスは、Iceberg表を効率的に管理するように設計されています。表に対するCRUD操作の処理、メタデータの管理およびトランザクションの処理を行うAPIを提供します。

AICATはOracle Autonomous AI Database内で動作し、そのテナンシ内のすべてのデータベースで使用できます。カタログ・サービスでは、テナントのデータベース・スキーマを使用して表のメタデータを格納します。

サポートされているストレージ・タイプ

Oracle AI Data Catalogでは、次のストレージ・プロバイダがサポートされています。

クイック・スタート

AICATは、テナンシ内の1つのAutonomous AIデータベースで有効にし、テナンシ内の他のAutonomous AIデータベースが接続して使用できるようにすることを目的としています。これにより、すべてのAIデータベースが、ユーザー権限に応じて同じIcebergカタログにアクセスできるようになります。

次の点に注意してください。

  • AICATを設定できるのは、テナンシ管理者またはADMINロールを持つユーザーのみです。
  • 各テナントは複数のデータベースを持つことができます。カタログ・データベースとして機能するデータベースを決定する必要があります。テナンシ内の任意のAutonomous AI DatabaseでAICATを有効にすることは可能ですが、Oracleでは単一のデータベースで有効にすることをお薦めします。カタログ・サービスの使用パターンはほとんどがトランザクションであるため、Autonomous AI Databaseではトランザクション処理ワークロード・タイプを使用することをお薦めします。
  • AICATサービス用に構成するオブジェクト・ストレージの場所が空であり、他の目的に使用されていないことを確認してください。

ワークフローは次のとおりです。

  1. Autonomous AI Database ServerlessインスタンスでAICATを有効にします。
  2. AICATは、RESTカタログAPIを公開します。
  3. IcebergテーブルをAICATに登録します。
  4. Sparkを使用してカタログURLに接続します。
  5. 問合せエンジンは表のメタデータをリクエストします。
  6. AICATはメタデータの場所を返します。
  7. エンジンは、Object Storageから直接データを読み取ります。

次のステップに従って、AICATを設定および使用してください。

タスク 詳細情報
Autonomous AI Databaseインスタンスをカタログ・データベースとして選択します。 カタログリポジトリデータベースの選択
タグを使用したAICATの有効化 Oracle AIデータ・カタログの有効化
AICATのストレージ・メタデータの登録 ストレージ資格証明の登録
[オプション]既存のIcebergデータへのストレージの登録 既存のIcebergテーブルをAICATに登録する場合は、Register Storage with Existing Iceberg Dataを参照してください。
[オプション] AICAT_USERまたはPDB_DBAロールを持つデータベース・ユーザーを認可します。ユーザー資格証明を使用したトークンAPIコールを使用してユーザーを認証します。 ユーザーの認証および認可

Autonomous AI Databaseからのプライベート・データ・ソースへのアクセスの有効化

AICATにアクセスするAutonomous AI Databaseは、プライベート・エンドポイントを使用してプライベート・データベース・ソースと通信できるように構成する必要があります。そうしないと、そのような接続を作成してテストしようとすると、「接続に失敗しました」というエラーが表示されることがあります。

Autonomous AI Databaseがプライベート・エンドポイントで構成されている場合、プライベート・エンドポイントを介してアウトバウンド接続を明示的にルーティングする必要があります。また、AICATとデータベース間のセキュアな通信を確保するために、適切なDNS解決および接続構成を設定する必要があります。

Autonomous AI Database Private Endpointアクセスを使用してAICATを構成するには、プライベート・エンドポイントを介してAutonomous AI Databaseからアウトバウンド接続をルーティングする必要があります。

次の操作を行います。

  1. ルーティング・プロパティを設定するには、ADMINユーザーとしてSQL Webにログインし、次の文を実行します。

    ALTER DATABASE PROPERTY SET ROUTE_OUTBOUND_CONNECTIONS = 'PRIVATE_ENDPOINT';

    ノート

    このコマンドの実行に失敗した場合は、Oracle Autonomous AI Databaseサポートに連絡してください。
  2. ルーティング構成が正しく設定されていることを確認するには、次の問合せを実行します。
    SELECT *FROM
          DATABASE_PROPERTIESWHERE PROPERTY_NAME =
          'ROUTE_OUTBOUND_CONNECTIONS';

    予期される値はPRIVATE_ENDPOINTです。

カタログリポジトリデータベースの選択

Oracle AIデータ・カタログが実行される既存のAutonomous AI Databaseインスタンスを作成または選択する必要があります。このデータベース・インスタンスは、カタログ・メタデータ・リポジトリとして使用されます。

カタログが作成されるテナンシ内のウェアハウスを決定します。次の点に注意してください。
  • テナンシに、一元化されたデータベースを使用して作成されたカタログがすでにある場合、他のすべてのテナント・データベースは、テナンシ内の既存のカタログを指すことができます。
  • テナントに複数のカタログを作成する場合は、テナントが複数のカタログを作成できるようにするのではなく、既存のカタログの詳細を取得し、集中管理されたカタログを使用することをお薦めします。

Oracle AIデータ・カタログの有効化

Autonomous AI Database ServerlessインスタンスでOracle AI Data Catalog (AICAT)を有効にするには、ADB$TOOLS OCIタグをAI_CATに設定する必要があります。その後、生成されたサービスURLを使用してカタログ・サービスに接続できます。

次の点に注意してください。

  • ADB-SインスタンスでOCIタグAI_CATを設定すると、そのデータベースのAIデータ・カタログ・サービスが有効になります。
  • このサービスでは、初期リリースでは最大32個のECPUがサポートされます。ECPU消費は、カタログ・サービスのコンピュート・リソースがアクティブで使用中の場合、標準のAutonomous AI Databaseレートで請求されます。追加のVMおよびコンピュート・リソースのECPU請求の詳細は、ECPUコンピュート・モデルの請求情報を参照してください。
  • AICATサービスは、デフォルトのアイドル・タイムアウトである2時間(120分)で構成されます。この構成により、サービスがアイドル状態のときに不要な請求を回避しながら、サービスをすぐに利用可能にし、通常の使用パターンに対応できます。これにより、構成されたアイドル・タイムアウト期間を超えてサービスが非アクティブのままの場合、関連付けられたコンピュート・リソースは自動的に停止され、請求されなくなります。
  • AICATサービスがタイムアウトした場合、サービスに対する後続のリクエストによって、カタログ・サービスの再起動が自動的にトリガーされます。ほとんどの場合、サービスは約30秒以内に利用可能になります。

LakehouseおよびAutonomous Transaction Processing (ATP)データベース・タイプでAICATを有効にできます。Oracleでは、ATPを使用してカタログ操作(メタデータ管理、APIコール、認可チェック、カタログ更新など)を最適化するため、ATPデータベースを使用することをお薦めします。

AICATを有効にしてインスタンスURLを取得するには:

  1. OCIにログインし、カタログ・メタデータ・リポジトリとして選択したAutonomous AI Database Serverlessインスタンスに移動します。
  2. 「タグ」に移動します。
  3. 次のタグを設定します。
    • タグ・キー名: ADB$TOOLS
    • タグ値: AI_CAT

    これにより、Autonomous AI Database Serverlessインスタンスに対してAICATが有効になります。

  4. エンドポイントを取得するには、OCIのADBSに移動し、「ツール構成」タブを選択します。表示されたURLを<database name>/catalog形式に編集します。

    たとえば、https://test1234.adb.us-phoenix-1.oraclecloudapps.com/ords/apexhttps://test1234.adb.us-phoenix-1.oraclecloudapps.com/catalogに変更します。

スプラッシュ画面が表示され、AICATの使用を開始するために必要なステップとヘルプ・トピックへのリンクが示されます。

ストレージ資格証明の登録

記憶域を登録するには、PL/SQLのORACLE_AI_DATA_CATALOG.REGISTER_STORAGE_<VENDOR>()プロシージャを使用します。

実行者は、ADMINユーザーまたはPDB_DBAロールが割り当てられたユーザーである必要があります。ロールの付与およびユーザーの権限の追加または更新の詳細は、Autonomous AIデータベースでのユーザー・ロールおよび権限の管理を参照してください。

Oracle AI Data Catalogでは、次のストレージ・プロバイダがサポートされます。

ストレージ資格証明を更新するには、ストレージ資格証明の更新を参照してください。ストレージ資格証明を登録解除する場合は、Unregister Storage Credentialsを参照してください。

S3とのOracle Cloud Infrastructureの互換性

OCI S3互換ストレージにウェアハウスを登録する手順の例を次に示します:

begin
   oracle_ai_data_catalog.register_storage_oci(
   p_warehouse => 's3://<bucket>',
   p_endpoint => 'https://<namespace>.compat.objectstorage.<region>.oci.customer-oci.com',
   p_region     => '<region>',
   p_access_key => '<access-key-id>',
   p_secret_key => '<secret-key-id>'
   );
end;
/

ストレージ・エンドポイント形式の詳細は、オブジェクト・ストレージでのAmazon S3 Compatibility APIのホスト・スタイルのサポートを参照してください。

アクセス・キーおよび秘密キーの取得方法については、https://docs.oracle.com/en-us/iaas/Content/Identity/Tasks/managingcredentials.htm#create-secret-keyの手順を参照してください。

Azureストレージ(ADLSおよびBLOB)

ウェアハウスをAzure ADLSストレージに登録する手順の例を次に示します:

begin oracle_ai_data_catalog.register_storage_azure(
    p_warehouse            => 'abfss://<container>',
    p_endpoint             => 'https://<account>.dfs.core.windows.net',
    p_storage_account_name => '<storage_account_name>',
    p_storage_account_key  => '<storage_account_key>'
);
end;
/

ウェアハウスをAzure BLOB Storageに登録する手順の例を次に示します:

begin oracle_ai_data_catalog.register_storage_azure(
    p_warehouse            => 'abfss://<container>',
    p_endpoint             => 'https://<account>.blob.core.windows.net',
    p_storage_account_name => '<storage_account_name>',
    p_storage_account_key  => '<storage_account_key>'
);
end;
/

ZFSストレージ

ウェアハウスをZFSストレージに登録する手順の例を次に示します。

begin
   oracle_ai_data_catalog.register_storage_zfs(
   p_warehouse  => 's3a://icebergs3/iceberg_warehouse_s3/',
   p_endpoint   => 'https://<account>.us.oracle.com',
   p_accesskey => '<access-key-id>',
   p_secret_key => '<secret-key-id>'
   );
end;
/

ストレージ資格証明の更新

記憶域資格証明を更新するには、PL/SQLのORACLE_AI_DATA_CATALOG.UPDATE_STORAGE_CREDENTIAL_<VENDOR>()プロシージャを使用します。

実行者は、ADMINユーザーまたはPDB_DBAロールが割り当てられたユーザーである必要があります。ロールの付与およびユーザーの権限の追加または更新の詳細は、Autonomous AIデータベースでのユーザー・ロールおよび権限の管理を参照してください。

Oracle AI Data Catalogでは、次のストレージ・プロバイダがサポートされます。

ストレージ資格証明を登録解除する場合は、UNREGISTER_STORAGE_CREDENTIALプロシージャを使用します。Unregister Storage Credentialsを参照してください。

S3とのOracle Cloud Infrastructureの互換性

OCI S3互換ストレージの資格証明を更新する手順の例を次に示します:

BEGIN
    oracle_ai_data_catalog.update_storage_credential_oci(
        p_access_key      => '<value>',
        p_secret_key      => '<value>'
    );
END;
/

Azureストレージ(ADLSおよびBLOB)

Azure Storageの資格証明を更新する手順の例を次に示します:

BEGIN
    oracle_ai_data_catalog.update_storage_credential_azure(
        p_storage_account_name      => '<value>',
        p_storage_account_key      => '<value>'
    );
END;
/

ZFSストレージ

Azure Storageの資格証明を更新する手順の例を次に示します:

BEGIN
    oracle_ai_data_catalog.update_storage_credential_zfs(
        p_access_key      => '<value>',
        p_secret_key      => '<value>'
    );
END;
/

ストレージ資格証明の登録解除

ストレージ資格証明を登録解除するには、PL/SQLのORACLE_AI_DATA_CATALOG.UNREGISTER_STORAGE_CREDENTIAL(...)プロシージャを使用します。

実行者は、ADMINユーザーまたはPDB_DBAロールが割り当てられたユーザーである必要があります。

次を実行します。

BEGIN
    oracle_ai_data_catalog.unregister_storage_credential;
END;
/

AICATを再利用する場合は、UPDATE_STORAGE_CREDENTIAL_<VENDOR>()プロシージャを使用します。ストレージ資格証明の更新を参照してください。

既存のIcebergデータへのストレージの登録

AICATは、オブジェクト・ストレージに格納されている既存のApache Iceberg表の登録をサポートしています。登録されると、Iceberg表のメタデータおよび表定義がAICATを介して検出およびアクセス可能になります。

IcebergテーブルをAICATに登録する前に、次のことを確認してください。

  • AICATは、Autonomous Databaseサーバーレス・インスタンスですでに有効になっています。Oracle AIデータ・カタログの有効化を参照してください。
  • ADMINユーザーまたはPDB_DBAまたはAICAT_USERロールを持つユーザーとして、Autonomous Databaseサーバーレス・インスタンスに接続しています。
  • ストレージをAICATに登録しました。Register Storage Credentialsを参照してください。
  • Object Storageバケットには、有効なIceberg表データおよびメタデータが正しい形式で含まれています。

    次に例を示します。

    Bucket/Warehouse: N-Warehouse
    -NAMESPACE 
      -TABLE_NAME_NAMESPACE
        - data
          - parquet files.
        - metadata
          - json files

    こちら:

    • NAMESPACEは、Icebergネームスペース/スキーマを表します。
    • TABLE_NAME_NAMESPACEはIceberg表を表します。
    • dataには、表データファイル(通常はParquet)が含まれます。
    • metadataには、表の管理および問合せに必要なIcebergメタデータおよびスナップショットJSONファイルが含まれます
  • バケットおよびオブジェクトに対するアクセス権があります。

既存のIcebergテーブルをAICATに登録するには:

  1. データベース認証資格証明を使用してAICATインスタンスに接続します。

    次のコマンドを使用して、アクセス・トークンを生成します。

    TOKEN=$(curl -k -s --location '<URI>/v1/auth/token' \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'grant_type=client_credentials' \
    --data-urlencode 'client_id=<dbUser>' \
    --data-urlencode 'client_secret=<dbPwd>' \
    --data-urlencode 'scope=PRINCIPAL_ROLE:ALL' | jq -r '.access_token')
    

    ここに、

    • <URI>は、カタログ・サーバーのURLです。
    • <dbUser>は、データベース・ユーザー名です。
    • <dbPwd>は、データベース・パスワードです。

    トークン値がnullとして返された場合は、-vオプションを使用してリクエストを再実行し、認証または接続の問題のトラブルシューティングに役立てます。

    例:

    curl -v -k --location '<URI>/v1/auth/token'
  2. カタログに登録する表のIcebergメタデータ・ファイルの場所を決定します。次の方法のいずれかでメタデータ・ロケーションを取得できます。
    • 前のカタログ・サーバーから表メタデータをロードします。
    • ウェアハウスまたはオブジェクト・ストレージ・バケットを手動で参照し、現在のIcebergメタデータJSONファイルを識別します。
    次に例を示します。
    Namespace           : SILVER
    Table               : COMPETITOR_PRICING_SILVER
    Metadata Location   : s3://0A-Warehouse/SILVER/COMPETITOR_PRICING_SILVER/metadata/00002-f2662b11-3268-4792-90f9-b8f4b851d629.metadata.json

    メタデータJSONファイルには、Iceberg表定義、スキーマ、スナップショット、マニフェストおよびカタログ登録に必要な表の状態情報が含まれます。

    ネームスペースSILVERがまだ存在しない場合は、次のコマンドを使用します。

    curl -k --location '<URI>/v1/namespaces' \
    --header "Authorization: Bearer $TOKEN" \
    --header 'Content-Type: application/json' \
    --data '{"namespace": ["SILVER"], "properties": {}}'
  3. 表を登録するには、次のコマンドを実行します。
    curl -k --location '<URI>/v1/namespaces/SILVER/register' \
    --header 'Content-Type: application/json' \
    --header "Authorization: Bearer $TOKEN" \
    --data '{
        "name":"COMPETITOR_PRICING_SILVER",
        "metadata-location": "s3://0A-Warehouse/SILVER/COMPETITOR_PRICING_SILVER/metadata/00002-f2662b11-3268-4792-90f9-b8f4b851d629.metadata.json",
        "overwrite": false
    }'
  4. 新しく登録した表をロードするには、次のコマンドを実行します。
    curl -k --location '<URI>/v1/namespaces/SILVER/tables/COMPETITOR_PRICING_SILVER' \
    --header "Authorization: Bearer $TOKEN" \
    --header 'Content-Type: application/json'
  5. 同様に、他の表も登録します。

ユーザーの認証および認可

データベース・ユーザーがAICATサービスにアクセスできるようにするには(カタログ・リポジトリ・データベースの選択を参照)、ユーザーはADMINユーザーであるか、AICAT_USERまたはPDB_DBAロールを持つユーザーを認可する必要があります。

ユーザー資格証明を使用してトークンAPIコールを使用してユーザーを認証できます。アクセス・トークンを取得するには、次のリクエストを送信します。

POST https://public_lb_host/catalog/v1/auth/token

cURLを使用したリクエスト・パラメータの例:

curl -k -s --location '<URI>/catalog/v1/auth/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id=<dbUser>' \
--data-urlencode 'client_secret=<dbPwd>' \
--data-urlencode 'scope=PRINCIPAL_ROLE:ALL' | jq -r '.access_token'

トークンが期限切れになると、401レスポンスを受け取ります。新しいトークンを取得するには、同じエンドポイントを使用します。

レスポンス・トークンの例を次に示します。

{
    "access_token": "<token>",
    "issued_token_type": "urn:ietf:params:oauth:token-type:access_token",
    "token_type": "bearer",
    "expires_in": 3600
}

取得したトークンをBearerトークンとしてAuthorizationヘッダーで使用します。

Authorization: Bearer <your_token>

各カタログAPI RESTエンドポイントの詳細は、Oracle AIデータ・カタログのREST APIを参照してください。

AICAT Iceberg RESTカタログ

AICAT Iceberg RESTカタログは、AICAT内に埋め込まれたデフォルトのRESTベースのIcebergカタログです。作成、読取り、更新および削除(CRUD)などの表ライフサイクル操作用のREST APIと、メタデータ管理およびトランザクション処理を提供することで、Iceberg表を効率的に管理するように設計されています。AICAT Iceberg RESTカタログは、標準のApache Iceberg REST Catalog API仕様に従います。ADMINユーザーであるか、PDB_DBAまたはAICAT_USERロールが付与されているユーザーとして実行する必要があります。

各カタログAPI RESTエンドポイントの詳細は、Oracle AIデータ・カタログのREST APIを参照してください。

問合せエンジンでのAICATの使用

AICATは、情報を要求および取得するために、複数の問合せエンジンと統合されています。AICATは、Apache Sparkなどの問合せエンジンで使用したり、AICAT表に外部表を追加したり、DBMSカタログにAICATをマウントしたり、Oracle Data Transformsを使用してApache Iceberg表を作成できます。

問題が発生した場合は、Oracle Cloud Supportでサービス・リクエストを登録するか、サポート担当者に連絡します。

Apache Sparkを使用したAICATの問合せ

AICATでApache Spark問合せを使用するには、最初にSparkランタイム・バイナリ・ファイルをダウンロードする必要があります。
  1. spark-3.5.6-bin-hadoopランタイム・バイナリtgzファイルをダウンロードして抽出します。
  2. spark-3.5.6-bin-hadoop3/jarsディレクトリの下にiceberg-aws-bundle-1.9.2.jarを追加します。
  3. rootディレクトリ(spark-3.5.6-bin-hadoop3)から、以下を実行します。

    OCI S3でSparkを構成するには:

    bin/spark-shell \
    --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.0 \
    --conf spark.sql.catalog.aicat=org.apache.iceberg.spark.SparkCatalog \
    --conf spark.sql.catalog.aicat.type=rest \
    --conf spark.sql.catalog.aicat.uri=http://<host>:<port>/catalog \
    --conf spark.sql.catalog.aicat.warehouse=aicat_iceberg_rest_catalog \
    --conf spark.sql.catalog.aicat.s3.access-key-id=<s3AccessKeyId> \
    --conf spark.sql.catalog.aicat.s3.secret-access-key=<s3SecretAccessKey> \
    --conf spark.sql.catalog.aicat.rest.auth.type=oauth2 \
    --conf spark.sql.catalog.aicat.oauth2-server-uri=http://<host>:<port>/catalog/v1/auth/token \
    --conf spark.sql.catalog.aicat.credential=<dbusername>:<dbpassword> \
    --conf spark.sql.catalog.aicat.scope=PRINCIPAL_ROLE:ALL \
    --conf spark.driver.extraJavaOptions=" -Dhttp.proxyHost=www-proxy-hqdc.us.oracle.com -Dhttp.proxyPort=80 -Dhttps.proxyHost=www-proxy-hqdc.us.oracle.com -Dhttps.proxyPort=80"

    秘密キーおよびシークレット・アクセス・キーの作成については、顧客秘密キーの作成を参照してください。

    AzureでSparkを構成するには:

    bin/spark-shell \
    --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.0 \
    --conf spark.sql.catalog.aicat=org.apache.iceberg.spark.SparkCatalog \
    --conf spark.sql.catalog.aicat.type=rest \
    --conf spark.sql.catalog.aicat.uri=http://<host>:<port>/catalog \
    --conf spark.sql.catalog.aicat.warehouse=oadc_iceberg_rest_catalog \
    --conf spark.sql.catalog.aicat.rest.auth.type=oauth2 \
    --conf spark.sql.catalog.aicat.oauth2-server-uri=http://<host>:<port>/catalog/v1/auth/token \
    --conf spark.sql.catalog.aicat.credential=<username>:<password> \
    --conf spark.sql.catalog.aicat.scope=PRINCIPAL_ROLE:ALL \
    --conf spark.sql.catalog.aicat.io-impl=org.apache.iceberg.azure.adlsv2.ADLSFileIO \
    --conf spark.sql.catalog.aicat.adls.account=<accountName> \
    --conf spark.sql.catalog.aicat.adls.endpoint=https://<accountName>.blob.core.windows.net/<container> \
    --conf spark.sql.catalog.aicat.adls.auth.shared-key.account.name=<accountName> \
    --conf spark.sql.catalog.aicat.adls.auth.shared-key.account.key=<accountKey> \
    --conf spark.driver.extraJavaOptions=" -Dhttp.proxyHost=www-proxy-hqdc.us.oracle.com -Dhttp.proxyPort=80 -Dhttps.proxyHost=www-proxy-hqdc.us.oracle.com -Dhttps.proxyPort=80"
    
    
    
  4. 次のいずれかのSpark SQLコマンドを実行します:
    • spark.sql("SHOW NAMESPACES IN aicat").show()
    • spark.sql("CREATE NAMESPACE IF NOT EXISTS aicat.`KBNSXI`").show()
    • spark.sql("CREATE TABLE IF NOT EXISTS aicat.`KBNSXI`.TABLE2 (name STRING, add STRING)").show()
    • spark.sql("INSERT INTO aicat.`KBNSXI`.TABLE2 VALUES ('John Doe', 'USA, 12345')").show()
    • spark.sql("SELECT * FROM aicat.`KBNSXI`.TABLE2").show()

AICAT Iceberg表に対する外部表の追加

外部表を使用するには、各カタログ・オブジェクトを<catalog_name>.<namespace>.<table>形式の完全修飾名を使用して識別する必要があります。

AIデータベース・インスタンスのSQLワークシートを開き、次を実行します:

-- setup ACL Rules --
-- for XT to communicate to ai catalog instance
-- for XT to communicate to object storage bucket, OCI in this example.

BEGIN
dbms_network_acl_admin.append_host_ace(
host => '*.oraclecloudapps.com',
lower_port => 443,
upper_port => 443,
ace => xs$ace_type(
privilege_list => xs$name_list('http', 'http_proxy'),
principal_name =>  'ADMIN',
principal_type => xs_acl.ptype_db));

dbms_network_acl_admin.append_host_ace(
host => '*.oci.customer-oci.com',
lower_port => 443,
upper_port => 443,
ace => xs$ace_type(
privilege_list => xs$name_list('http', 'http_proxy'),
principal_name =>  'ADMIN',
principal_type => xs_acl.ptype_db));
END;
/

-- create storage and catalog access credentials --
begin
dbms_cloud.create_credential(
  credential_name => '<catalogAuthCreds>',
  username        => '<dbUserName>',
  password        => '<dbUserPwd>'
);
end;
/

begin
  dbms_cloud.create_credential(
    credential_name => '<storageCredentialName>',
    username        => '<s3accessKey>',
    password        => '<s3secretKey>'
  );
end;
/


-- XT Creation with AI Cat Syntax --
-- <catalogURI> eg: https://<dbIdentifierString>.adb.<region>.oraclecloudapps.com/catalog
-- <authUri> eg: https://<dbIdentifierString>.adb.<region>.oraclecloudapps.com/catalog/v1/auth/token

begin
dbms_cloud.create_external_table(
  table_name      => '<extTableName>',
  credential_name => '<storageCredentialName>',
  format          => '{
    "access_protocol": {
      "protocol_type": "iceberg",
      "protocol_config": {
        "iceberg_catalog_type": "oracle_ai_data_catalog",
        "rest_catalog_endpoint":"<catalogURI>",
        "rest_authentication": {
          "rest_auth_cred": "<catalogAuthCreds>",
          "rest_auth_endpoint":"<authUri>"
        },
        "table_path": ["<namespaceName>", "<tableName>"]
      }
    }
  }'
);
end;
/

select * from <extTableName>;

詳細は、Query Apache Iceberg Tablesを参照してください

DBMSカタログでのAICATのマウントおよび問合せ

AIデータベース・インスタンスのSQLワークシートを開き、次を実行します:

-- setup ACL Rules --
-- for XT to communicate to ai catalog instance
-- for XT to communicate to object storage bucket, OCI in this example.

BEGIN
dbms_network_acl_admin.append_host_ace(
host => '*.oraclecloudapps.com',
lower_port => 443,
upper_port => 443,
ace => xs$ace_type(
privilege_list => xs$name_list('http', 'http_proxy'),
principal_name =>  'ADMIN',
principal_type => xs_acl.ptype_db));

dbms_network_acl_admin.append_host_ace(
host => '*.oci.customer-oci.com',
lower_port => 443,
upper_port => 443,
ace => xs$ace_type(
privilege_list => xs$name_list('http', 'http_proxy'),
principal_name =>  'ADMIN',
principal_type => xs_acl.ptype_db));
END;
/

-- create bearer token and catalog access credentials --
-- <authUri> eg: https://<dbIdentifierString>.adb.<region>.oraclecloudapps.com/catalog/v1/auth/token
BEGIN
    DBMS_SHARE.CREATE_BEARER_TOKEN_CREDENTIAL(
        CREDENTIAL_NAME => '<bearerTokenCredName>',
        BEARER_TOKEN    => 'BEARER_TOKEN',
        TOKEN_ENDPOINT  => '<authUri>',
        CLIENT_ID       => '<dbUserName>',
        CLIENT_SECRET   => '<dbUserPwd>',
        TOKEN_SCOPE     => 'PRINCIPAL_ROLE:ALL'
    );
END;
/

begin
  dbms_cloud.create_credential(
    credential_name => '<storageCredentialName>',
    username        => '<s3accessKey>',
    password        => '<s3secretKey>'
  );
end;
/


-- XT Creation with AI Cat Syntax --
-- <catalogURIForIceberg> eg: https://<dbIdentifierString>.adb.<region>.oraclecloudapps.com/catalog/v1
-- <authUri> eg: https://<dbIdentifierString>.adb.<region>.oraclecloudapps.com/catalog/v1/auth/token

-- DBMS_CATALOG with AI CAT --
BEGIN
dbms_catalog.mount_iceberg(
catalog_name             => '<catalogName>',
endpoint                 => '<catalogURIforIceberg>',
catalog_credential       => '<bearerTokenCredentialName>',
data_storage_credential  => '<storageCredentialName>',
catalog_type             => 'ICEBERG_ORACLE');
END;
/

-- sample queries once catalog is mounted
-- show mounted catalogs
SELECT c.catalog_name AS mounted_catalog_name, c.catalog_type AS mounted_catalog_type
FROM user_mounted_catalogs c
ORDER BY c.catalog_name;

-- show schemas
select schema_name from dbms_catalog.get_schemas('<catalogName>');

-- show tables
select table_name from dbms_catalog.get_tables('<catalogName>', '<schemaName>');

-- query existing tables
select FIRST_NAME, LAST_NAME from "<schemaName>"."<tableName>"@<catalogName> where rownum < 10;

-- create new table
CREATE ICEBERG TABLE  "<schemaName>"."<tableName>"
(   type  STRING,
    address   STRING
)
WITHIN CATALOG "<catalogName>"
STORAGE LOCATION "s3://<ociBucketNameUsedInStep#2>/<schemaName>/<tableName>/";

-- insert into table;
create table TESTLOCAL (type varchar2(10), address varchar2(10));
insert into TESTLOCAL values ('Alan', 'Matthews');
commit;

-- insert into iceberg table via ai catalog from local table
INSERT INTO "<schemaName>"."<tableName>"@<catalogName> select * from TESTLOCAL;

-- query the table in ai cat
select * from "<schemaName>"."<tableName>"@<catalogName>;

select DBMS_CATALOG.GENERATE_TABLE_SELECT('<catalogName>', '"<schemaName>"', '"<tableName>"') from dual;

Oracle Data Transformsでのカタログ・プロバイダとしてのAICATの使用

データ変換を使用してAICAT RESTカタログに接続し、データをApache Iceberg表にロードできます。詳細は、Oracle AIデータ・カタログを使用したApache Iceberg接続の作成を参照してください。