Oracle AIデータ・カタログ

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

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

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

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

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

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

クイック・スタート

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

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

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

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

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

AIデータ・カタログを設定および使用するには、次のステップに従います:

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

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

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

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

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

次の操作を行います。

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

    ALTER DATABASE PROPERTY SET ROUTE_OUTBOUND_CONNECTIONS = 'PRIVATE_ENDPOINT';

    ノート

    ノート:このコマンドの実行に失敗した場合は、Oracle Autonomous AI Databaseサポートに連絡してください。

  2. ルーティング構成が正しく設定されていることを確認するには、次の問合せを実行します。

    SELECT *
    FROM DATABASE_PROPERTIES
    WHERE PROPERTY_NAME = 'ROUTE_OUTBOUND_CONNECTIONS';

    予想される値はPRIVATE_ENDPOINTです。

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

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

カタログが作成されるテナンシ内のウェアハウスを決定します。次の点に注意してください。

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

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

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

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

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

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

AIデータ・カタログを有効にしてインスタンスURLを取得するには:

  1. Oracle Cloud Infrastructureにログインし、カタログ・メタデータ・リポジトリとして選択したAutonomous AI Database Serverlessインスタンスに移動します。
  2. 「タグ」にナビゲートします。
  3. 次のタグを設定します。

    • タグ・キー名: ADB$TOOLS
    • タグ値: AI_CAT

    これにより、Autonomous AI Database ServerlessインスタンスのAIデータ・カタログが有効になります。

  4. エンドポイントを取得するには、Oracle Cloud InfrastructureでAutonomous AI Database Serverlessに移動し、「ツール構成」タブを選択します。表示されたURLを<database name>/catalog形式に編集します。たとえば、https://test1234.adb.us-phoenix-1.oraclecloudapps.com/ords/apexhttps://test1234.adb.us-phoenix-1.oraclecloudapps.com/catalogに変更します。

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

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

Autonomous AI Database ServerlessインスタンスでOracle AI Data Catalogを無効にするには、ADB$FEATURE Oracle Cloud Infrastructureタグを使用する必要があります。

AIデータ・カタログを無効にするには:

  1. Oracle Cloud Infrastructureにログインし、カタログ・メタデータ・リポジトリとして選択したAutonomous AI Database Serverlessインスタンスに移動します。
  2. 「タグ」にナビゲートします。
  3. 次のタグを設定します。
    • タグ・キー名: ADB$FEATURE
    • タグ値: {"name": "AI_CAT", "enable": false}

これにより、Autonomous AI Database ServerlessインスタンスのAIデータ・カタログが無効になります。

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

記憶域を登録するには、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の互換性

Oracle Cloud Infrastructure 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の互換性

Oracle Cloud Infrastructure 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ストレージ

ZFS 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;
/

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

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

AIデータ・カタログでは、オブジェクト・ストレージに格納されている既存のApache Iceberg表の登録がサポートされています。登録されると、Iceberg表のメタデータおよび表定義が発見可能になり、AIデータ・カタログからアクセスできるようになります。

AIデータ・カタログにIceberg表を登録する前に、次のことを確認してください:

  • AIデータ・カタログは、Autonomous AI Databaseサーバーレス・インスタンスですでに有効になっています。Oracle AIデータ・カタログの有効化を参照してください。
  • Autonomous AI Databaseサーバーレス・インスタンスにADMINユーザーまたはPDB_DBAまたはAICAT_USERロールを持つユーザーとして接続しています。
  • ストレージをAIデータ・カタログに登録しました。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表をAIデータ・カタログに登録するには:

  1. データベース認証資格証明を使用して、AIデータ・カタログ・インスタンスに接続します。

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

    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. 同様に、他の表も登録します。

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

データベース・ユーザーがAIデータ・カタログ・サービスにアクセスできるようにするには(カタログ・リポジトリ・データベースの選択を参照)、そのユーザーは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を参照してください。

AIデータカタログIceberg RESTカタログ

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

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

問合せエンジンでのAIデータ・カタログの使用

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

具体的な情報については、次のセクションを参照してください。

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

Apache Sparkを使用したAIデータ・カタログの問合せ

AIデータ・カタログで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)から、以下を実行します。

    Oracle Cloud Infrastructure 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()`

AIデータ・カタログIceberg表に対する外部表の追加

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

Autonomous AI Databaseインスタンスの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カタログでのAIデータ・カタログのマウントおよび問合せ

Autonomous AI Databaseインスタンスの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でのカタログ・プロバイダとしてのAIデータ・カタログの使用

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