10 Computeへの接続

この項では、Oracle AI Data Platformのコンピュートを他のビジネス・インテリジェンス・ツールに接続する方法について説明します。

接続

Oracle AI Data Platformは、Oracle Analytics Cloudまたはその他のビジネス・インテリジェンス・ツールと接続できます。

AIデータ・プラットフォームが提供するカスタムJDBCまたはODBCを使用して、様々なビジネス・インテリジェンス・ツールからAIデータ・プラットフォームに接続できます。AIデータ・プラットフォームでは、サード・パーティの商用BIツール(Tableau、Power BI)またはDBeaverなどのオープン・ソースBIツールからの接続もサポートされています。これらのツールから接続するには、AIデータ・プラットフォームでコンピュート・クラスタの接続詳細が必要です。この詳細は、「接続の詳細」タブにあります。必要な情報は、接続元の製品によって異なります。


Dev_cluster_1コンピュート・クラスタの「接続の詳細」タブ

Oracle AnalyticsをOracle AI Data Platformに接続

Oracle Analytics Cloudインスタンスから、Oracle AI Data Platformインスタンスによって管理されているカタログまたは表に接続できます。

Oracle AnalyticsからAI Data Platformへの接続を作成するには、AI Data Platformからの接続ファイルとAnalytics CloudからのAPIキーが必要です。

Oracle Analytics接続構成ファイルの取得

config.jsonファイルをOracle AI Data Platformインスタンスからダウンロードして、Oracle Analyticsに接続する必要があります。

少なくとも2 OCPUのコンピュート・クラスタ、ドライバ・ノードとワーカー・ノードの両方に32 GBのメモリー、および少なくとも2つのワーカーが必要です。
  1. ワークスペースに移動し、「コンピュート」をクリックします。

    Cluster_Highコンピュート・クラスタが強調表示されたコンピュート・ページが開きます

  2. Oracle Analyticsに接続するクラスタをクリックします。
  3. 「接続の詳細」タブで、Oracle Analytics Cloudロゴの下にある「ダウンロード」アイコンをクリックします。config.jsonファイルがマシンにダウンロードされます。

    Cluster_Highクラスタのコンピュート・ページが開き、「接続の詳細」タブとOracle Analytics Cloudのダウンロードが強調表示されています

Oracle Analyticsへの接続

Oracle Analyticsインスタンスから、Oracle AI Data Platformインスタンスによって管理されているカタログまたは表に接続できます。

Oracle Analyticsで接続を作成する前に、AIデータ・プラットフォームの接続構成ファイルがあることを確認してください。Oracle Analytics接続構成ファイルの取得を参照してください。
AI Data PlatformインスタンスへのOracle Analytics接続では、接続ごとに1つのカタログのみがサポートされます。複数のカタログを使用するには、追加の接続を作成する必要があります。
  1. Oracle Analyticsのホーム・ページで、「作成」をクリックしてから、「接続」をクリックします。
  2. 「Oracle AI Data Platform」をクリックします。
  3. 接続の名前と説明を入力します。
  4. 「場所」で、接続の保存先を指定します。他のユーザーと接続を共有するには、/共有フォルダに保存します。
  5. Oracle Analytics Cloudの「接続の詳細」で、「選択」をクリックし、config.jsonファイルに移動して「開く」をクリックします。
  6. 認証タイプとして「APIキー」を選択します。
  7. 「公開APIキー」で、「生成」、「コピー」の順にクリックします。
  8. OCIで、APIキーを追加します。
    1. OCIで、ユーザー・アイコンをクリックし、「ユーザー設定」をクリックします。
    2. マイ・プロファイルで、「トークンとキー」をクリックし、「APIキーの追加」をクリックします。
    3. 「Paste a public key」を選択し、ステップ7で生成したキーをコピーして、「Add」をクリックします。
    APIキーが同期するまで2分から3分待ちます。
  9. 「カタログ」で、データセットで使用するカタログ名を指定します。
    「カタログ」リストがロードされず、「ユーザーには操作を実行するための十分な権限がありません」というアラート・メッセージが表示される場合は、APIキーが同期するまで少し待ちます。
  10. 「保存」をクリックします
  11. データセットを作成して、新しい接続をテストします。

手順に従い、接続の保存またはスキーマのリストに問題がある場合、クラスタの再起動が必要になる場合があります。

JDBCドライバのダウンロード

JDBCドライバは、「接続の詳細」タブからダウンロードして、様々なBIツール用に構成できます。

  1. ワークスペースに移動し、「コンピュート」をクリックします。
  2. JDBC互換BIツールに接続するクラスタをクリックし、「接続」をクリックします。
  3. 「JDBCドライバのダウンロード」をクリックします。

DBeaverの構成

DBeaverをインストールし、Oracle AI Data Platformからダウンロードしたファイルを準備してから、AI Data Platformのコンピュート・クラスタに接続する必要があります。

  1. DBeaverクライアントをダウンロードしてインストールします。CommunityまたはEnterpriseのいずれかのバージョンを使用できますが、少なくとも22.x.DBeaverは、Windows、Mac OS X、EclipseプラグインおよびLinuxでのみ使用可能です。
  2. 「JDBCドライバのダウンロード」からファイルを解凍します。
  3. 解凍されたファイルから、simbaSpark.zipドライバ・ファイルを解凍します。

Spark Simba JDBCドライバを使用したDBeaverの構成

DBeaverを構成して、Oracle AI Data Platformのコンピュート・クラスタに接続できます。

DBeaverをインストールし、AIデータ・プラットフォームからダウンロードしたsimbaSpark.zipファイルを抽出しておく必要があります。
  1. DBeaverを開きます。
  2. 「データベース・ナビゲータ」をクリックします。
  3. 「ドライバ・マネージャ」をクリックします。
  4. 「新規」をクリックします。
  5. 「ドライバ名」として「AIデータ・プラットフォーム」を入力します。
  6. 「ライブラリ」をクリックします。
  7. 「フォルダの追加」をクリックします。
  8. sparkSimba.zip抽出の場所を参照します。
  9. 「クラスの検索」をクリックします。
  10. Select 「OK」を選択します。
  11. ドライバ・クラスをcom.simba.spark.jdbc.Driverに設定します。
  12. 「設定」をクリックします。
  13. 「クラス名」をcom.simba.spark.jdbc.Driverに設定します。
  14. 「OK」をクリックします。

DBeaverでのデータベース接続の作成

DBeaverをOracle AI Data Platformのコンピュート・クラスタに接続するには、まずDBeaverでデータベース接続を作成する必要があります。

AIデータ・プラットフォームからダウンロードしたSpark Simba JDBCドライバを使用してDBeaverを構成しておく必要があります。詳細は、Spark Simba JDBCドライバを使用したDBeaverの構成を参照してください。
  1. DBeaverを開きます。
  2. 「データベース」をクリックします。
  3. 「新規データベース接続」をクリックします。
  4. 「すべて」をクリックします。
  5. 「AI Data Platform」を選択します。
  6. 「次へ」をクリックしてください。
  7. JDBCドライバーのURLを入力します。JDBC URLは、AIデータ・プラットフォームのコンピュート・クラスタの「接続の詳細」タブにあります。
  8. 「終了」をクリックします。

JDBCを使用したDBeaverのOracle AI Data Platformへの接続

DBeaverが構成され、Oracle AI Data Platformへのデータベース接続が確立されると、DBeaverとAI Data Platformの間の接続を完了できます。

  1. DBeaverを開きます。
  2. 「接続」をクリックします。
  3. 認可トークンまたはAPIキーで接続することを選択します。
    • 認可トークンを使用して接続
      • DEFAULTプロファイルがない場合は、URLにプロファイルを指定せずにトークンを使用します。例: jdbc:spark://gateway.aidp.me-riyadh-1.oci.oraclecloud.com/default;SparkServerType=AIDP;httpPath=cliservice/cf18b4ef-b83e-41dd-82b6-8d391584f6c5

        URLによってブラウザ・ウィンドウが開きます。

        AIデータ・プラットフォーム・インスタンスが作成されたテナンシにサインインします。

        詳細は、CLI用のトークンベースの認証を参照してください。

    • APIキーを使用して接続します。接続URLにociProfile=<profile_name>を指定してOCIプロファイルを指定します。

      • APIキー認証を使用して、AIデータ・プラットフォーム・インスタンスに接続します。

        接続URLにociProfile=<profile_name>を指定してOCIプロファイルを指定することで、APIキーを使用します。たとえば、OCIプロファイル名デモを使用するには: jdbc:spark://gateway.aidp.me-riyadh-1.oci.oraclecloud.com/default;SparkServerType=AIDP;httpPath=cliservice/cf18b4ef-b83e-41dd-82b6-8d391584f6c5 ;ociProfile=Demo

        詳細は、必要なキーとOCIDを参照してください。

  4. DBeaverは、メタデータを読み取るための接続と、他のすべての操作のための接続を作成します。接続に制限がある場合は、2番目の接続を無効にして、DBeaverがすべての操作に1つの接続を使用するようにできます。
    1. 「プリファレンス」をクリックします。
    2. 「共通」をクリックします。
    3. 「メタデータ」をクリックします。
    4. 「メタデータ読取り用に個別の接続を開く」の選択を解除します。

ODBCドライバのダウンロード

ODBCドライバは、「接続の詳細」タブからダウンロードし、様々なBIツール用に構成できます。

  1. ワークスペースに移動し、「コンピュート」をクリックします。
  2. ODBC互換BIツールに接続するクラスタをクリックし、「接続」をクリックします。
  3. 「ODBCドライバのダウンロード」をクリックします。
  4. リストから適切なOSを選択します。

    「ODBC Driver OS」ドロップダウンが開き、Mac、WindowsおよびLinxオプションが表示されています

SQL文実行API

SQL文実行APIを使用して、外部アプリケーション、自動化またはエージェントからコンピュート・クラスタで読取り専用SQL文を実行できます。

APIは、小さい結果セットの結果を直接返すか、より大きな結果を得るための一時リンクを提供します。SQL文実行APIでは、Oracle Cloud Infrastructureリクエスト署名が使用されます。文は、認証されたコール元のアイデンティティと権限を使用して実行されます。取引明細書を発行し、そのステータスと結果を取得して、実行中の取引明細書を取り消すことができます。

開始する前に、次のことを確認してください。
  • ステータスが「アクティブ」の開始済コンピュート・クラスタ
  • コンピュート・クラスタ・キー(ID)。これは、クラスタの「詳細」タブの「一般情報」にあります。
  • クラスタのゲートウェイ・ホスト名。ホスト名は、クラスタの「接続」詳細タブのJDBCドライバまたはODBCドライバにあります。
  • 使用しているCLI端末またはアプリケーションのOCI CLIセキュリティ・トークン・プロファイル。サインインするには、oci session authenticate --profile-name <profile-name>を実行し、プロンプトに従います。

接続値の設定方法

OCI CLIが構成されている端末またはアプリケーションで、環境の接続値を設定していることを確認します。

次のコマンドを使用して、環境の接続値を設定できます。
export BASE_URI="https://<gateway-host>"
export COMPUTE_CLUSTER_KEY="<compute-cluster-key>"
export REGION="<region>"
export PROFILE="<oci-profile>"
export REQ_SUFFIX="$(date +%s)"
たとえば:
export BASE_URI="https://dev1.gateway.dataflow.us-phoenix-1.oci.oc-test.com:443"
export COMPUTE_CLUSTER_KEY="12345a67-b89c-1d23-4567-ef8912345ghi"
export REGION="us-phoenix-1"
export PROFILE="MYPROFILE"
export REQ_SUFFIX="20261022-123456"

SQL文APIアクション

SQL文実行APIのアクションを実行するには、Oracle Cloud Infrastructure CLIからエンドポイントをコールする必要があります。

OCI CLIで構成された端末またはアプリケーションから、次のアクションを実行します。

SQL文実行APIリクエスト・オプション

次のリクエスト・フィールドは、SQL文実行APIリクエストの作成時に使用されます。

フィールド 説明
statement 必須フィールドです。読取り専用SQL文。
wait_timeout オプション。APIがレスポンスを返す前に文の完了を待機する最大時間。
disposition INLINEまたはEXTERNAL_LINKSを指定します。
row_limit 文に保持される最大行数。
byte_limit 文に保持される最大バイト数。
catalog オプション。文の実行時に使用するカタログ。
schema オプション。文の実行時に使用するスキーマ。
parameters オプション。SQL文の名前付きパラメータ値の配列。
query_tags オプション。文を識別および追跡するためのキー/値タグ。20個以下のエントリを指定してください。
request_id オプション。コール元提供の相関識別子または冪等性識別子。同じ論理リクエストに対してのみ値を再利用します。
opc-request-id オプション。リクエストをトレースするためのリクエスト・ヘッダー。文字、数字、アンダースコアおよびハイフンのみを使用できます。

SQL文の発行

SQL文はこのAPIエンドポイントに送信されます:

POST /20200129/computeClusters/<compute-cluster-key>/workbench/sql/statements
次の例では、結果に対して10秒のオプションのwait_timeout値が含まれています。
oci raw-request \
  --target-uri "${BASE_URI}/20200129/computeClusters/${COMPUTE_CLUSTER_KEY}/workbench/sql/statements" \
  --http-method POST \
  --request-headers "$(printf '{"Content-Type":"application/json","opc-request-id":"sql-submit-%s","opc-retry-token":"sql-submit-%s"}' "$REQ_SUFFIX" "$REQ_SUFFIX")" \
  --request-body '{"statement":"SELECT 1 AS api_smoke_test","wait_timeout":"10s","on_wait_timeout":"CONTINUE","format":"JSON_ARRAY","disposition":"INLINE","row_limit":100,"byte_limit":1048576}' \
  --region "${REGION}" \
  --auth security_token \
  --profile "${PROFILE}" \
  | tee /tmp/sql-submit.json \
 | jq '{http_status:.status, statement_id:.data.statement_id, state:.data.status.state, result:.data.result.data_array, opc_request_id:.headers["opc-request-id"]}'
前述の例に対する予期されるレスポンスは次のようになります。
{
  "http_status": "200 OK",
  "statement_id": "095865c4-27ce-41cc-99bb-67af1de760b2",
  "state": "SUCCEEDED",
  "result": [
    [
      "1"
    ]
  ],
  "opc_request_id": "sql-submit-20261022-214855/FBBFDCB770BDEFBC654EAE933E45E811/6CD8518A6A62E6411552DBFEF5ECEAD7"
}

wait_timeoutフィールドは、APIがレスポンスを返すまでに文の完了を待機する時間を指定します。指定した待機時間内に文が完了すると、APIは200 OKを返し、文の結果を含めます。この時間内に文が完了しない場合、APIは202 Acceptedを返し、文の実行を続行します。

jqフィルタを変更して、アプリケーションで必要なレスポンス・フィールドを表示できます。このコマンドは、完全なAPIレスポンスを一時ファイル/tmp/sql-submit.jsonに保存します。この一時ファイルでは、追加のレスポンスの詳細を確認できます。

外部リンクを含む文書の発行

次の例のように、外部リンクを含む同じPOSTエンドポイントを介して文を発行できます。
oci raw-request \
  --target-uri "${BASE_URI}/20200129/computeClusters/${COMPUTE_CLUSTER_KEY}/workbench/sql/statements" \
  --http-method POST \
  --request-headers '{"Content-Type":"application/json","opc-request-id":"req-sql-external-'"$REQ_SUFFIX"'","opc-retry-token":"retry-sql-external-'"$REQ_SUFFIX"'"}' \
  --request-body "$(jq -nc --arg request_id "sql-external-$REQ_SUFFIX" '{
    statement: "SELECT id, sha2(cast(id AS STRING), 256) AS hash FROM range(2000)",
    wait_timeout: "30s",
    on_wait_timeout: "CONTINUE",
    format: "JSON_ARRAY",
    disposition: "EXTERNAL_LINKS",
    row_limit: 2000,
    byte_limit: 1048576,
    request_id: $request_id
  }')" \
  --no-retry \
  --region "${REGION}" \
  --auth security_token \
  --profile "${PROFILE}" \
  | tee /tmp/sql-external-submit.json \
  | jq '(.data.result // {}) as $result |
    {
      http_status: .status,
      statement_id: .data.statement_id,
      state: .data.status.state,
      disposition: .data.manifest.disposition,
      first_chunk_index: ($result.external_links[0].chunk_index // null),
      first_chunk_row_count: ($result.external_links[0].row_count // null),
      next_chunk_index: $result.next_chunk_index,
      external_link_count: (($result.external_links // []) | length),
      truncated: .data.manifest.truncated,
      opc_request_id: .headers["opc-request-id"]
    }'
前述の例に対する予期されるレスポンスは次のとおりです。
{
  "http_status": "200 OK",
  "statement_id": "661527ef-dd96-480f-b65a-ac63aad6b910",
  "state": "SUCCEEDED",
  "disposition": "EXTERNAL_LINKS",
  "first_chunk_index": 0,
  "first_chunk_row_count": 1000,
  "next_chunk_index": 1,
  "external_link_count": 1,
  "truncated": false,
  "opc_request_id": "req-sql-external-20261022-225359/6D4D256A0952BA3E8A21A8F4299E35FC/062DA0791BE4E344828CD8F4DE538FD6"
}

この例では、一時的な外部結果リンクは/tmp/sql-external-submit.jsonに保存され、コマンド・レスポンスには表示されません。

ノート:

外部結果リンクを共有したり、ソース・コード、ログ、チケットまたはその他の広くアクセス可能な場所に格納しないでください。有効なリンクを持つユーザーは、リンクの有効期限が切れるまで、関連する結果データにアクセスできます。

truncatedがtrueの場合、返される結果は指定された行制限またはバイト制限に達しました。

statement_idを設定します。

文に関する情報(ステータスや結果など)を取得したり、文を取り消すには、statement_idが必要です。文が発行されると、次のようにstatement_idを設定できます。
export STATEMENT_ID="095865c4-27ce-41cc-99bb-67af1de760b2"
echo "${STATEMENT_ID}"
送信レスポンスが/tmp/sql-submit.jsonに保存されている場合は、statement_idを次のように設定できます。
export STATEMENT_ID="$(jq -r '.data.statement_id' /tmp/sql-submit.json)"

リクエストSQL文ステータス

送信された文のステータスは、このエンドポイントからstatement_idを使用して取得できます。
GET /20200129/computeClusters/<compute-cluster-key>/workbench/sql/statements/<statement-id>

次の例では、文のステータスをstatement_idを使用して取得します。

oci raw-request \
  --target-uri "${BASE_URI}/20200129/computeClusters/${COMPUTE_CLUSTER_KEY}/workbench/sql/statements/${STATEMENT_ID}" \
  --http-method GET \
  --request-headers "$(printf '{"opc-request-id":"sql-status-%s"}' "$REQ_SUFFIX")" \
  --region "${REGION}" \
  --auth security_token \
  --profile "${PROFILE}" \
  | jq '{http_status:.status, statement_id:.data.statement_id, state:.data.status.state, error:.data.status.error, code:.data.code, message:.data.message, opc_request_id:.headers["opc-request-id"]}'
この要求に対する予期される応答は次のとおりです。
{
  "http_status": "200 OK",
  "statement_id": "095865c4-27ce-41cc-99bb-67af1de760b2",
  "state": "SUCCEEDED",
  "error": null,
  "code": null,
  "message": null,
  "opc_request_id": "sql-status-20261022-223517/A80E5E3A0BE5C2673C45E76C5A076B5F/890C178EA4CE5BC332681A546D3FB072"
}
文には次の状態があります。
  • PENDING
  • RUNNING
  • SUCCEEDED
  • FAILED
  • CANCELLED
202 Acceptedを戻す文の場合、文が終了状態(SUCCEEDED、FAILEDまたはCANCELLED)に達するまでステータスを取得します。

要求文の結果

文が完了したら、statement_idを使用して結果を取得し、次のエンドポイントを使用してchunk-indexの結果を取得できます。

GET /20200129/computeClusters/<compute-cluster-key>/workbench/sql/statements/<statement-id>/result/chunks/<chunk-index>

エンドポイントのコール時に取得される結果を決定するには、chunk-indexを設定します。chunk-indexが0の場合、最初の結果が取得されます。次の結果のchunk-indexを確認するには、レスポンスのnext_chunk_indexをチェックします。next_chunk_indexがnullの場合は、結果チャンクが追加されていないことを示します。

export CHUNK_INDEX="0"
export REQ_SUFFIX="$(date +%s)"

row_limitおよびbyte_limitを使用して、サービスが保持および返す結果データの量を制御できます。いずれかの制限に達すると、レスポンスは結果が切り捨てられたことを示すことができます。文が成功しても、すべてのソース行が結果に保持されたわけではありません。

この例では、文結果のリクエストを示します。

oci raw-request \
  --target-uri "${BASE_URI}/20200129/computeClusters/${COMPUTE_CLUSTER_KEY}/workbench/sql/statements/${STATEMENT_ID}/result/chunks/${CHUNK_INDEX}" \
  --http-method GET \
  --request-headers "$(printf '{"opc-request-id":"sql-result-chunk-%s"}' "$REQ_SUFFIX")" \
  --region "${REGION}" \
  --auth security_token \
  --profile "${PROFILE}" \
  | jq '(.data.result // .data) as $result |
    {
      http_status: .status,
      statement_id: .data.statement_id,
      chunk_index: $result.chunk_index,
      row_count: $result.row_count,
      row_offset: $result.row_offset,
      result: $result.data_array,
      next_chunk_index: $result.next_chunk_index,
      external_link_count: (($result.external_links // []) | length),
      code: .data.code,
      message: .data.message,
      opc_request_id: .headers["opc-request-id"]
    }'

前述の例に対するレスポンスは次のようになります。

{
  "http_status": "200 OK",
  "statement_id": null,
  "chunk_index": 0,
  "row_count": 1,
  "row_offset": 0,
  "result": [
    [
      "1"
    ]
  ],
  "next_chunk_index": null,
  "external_link_count": 0,
  "code": null,
  "message": null,
  "opc_request_id": "sql-result-chunk-20261022-224623/A6702BBF95AEA1AA6D96EFA256B1062B/86AA007BC0A3E6824814EE1A7A246775"
}

文が完了すると、レスポンスには文のステータスと結果メタデータが含まれます。dispositionにINLINEを指定すると、レスポンスに結果データが返されます。INLINEは、アプリケーションがすぐに処理できる小さな結果に使用します。EXTERNAL_LINKSを指定すると、サービスは結果を格納し、レスポンスに結果データを含めるのではなく、一時リンクを返します。大きな結果を得るには、EXTERNAL_LINKSを使用します。

レスポンスには、次の結果情報を含めることができます。
  • data_array– 結果がインラインで返された場合の結果データ。EXTERNAL_LINKSを使用すると、この値はNULLになります。
  • external_links– EXTERNAL_LINKSを使用した場合の結果データへの一時リンク。
  • row_countおよびbyte_count– 返される結果チャンク内の行数およびバイト数。
  • next_chunk_index– より多くの結果データが使用可能な場合の次の結果チャンクの索引。
  • truncated– リクエストされた行またはバイトの制限に達したために、サービスが結果の一部のみを保持したかどうかを示します。
  • expires_at– 結果データおよび一時外部リンクが期限切れになる時間。

送信済明細書の取消

実行中の文を取り消すことができます。取り消そうとしている文には、statement_idが必要です。

文を取り消すには、次のエンドポイントにPOSTリクエストを送信します。
POST /20200129/computeClusters/<compute-cluster-key>/workbench/sql/statements/<statement-id>/cancel
この例では、文を取り消すリクエストを示します。
oci raw-request \
  --target-uri "${BASE_URI}/20200129/computeClusters/${COMPUTE_CLUSTER_KEY}/workbench/sql/statements/${STATEMENT_ID}/cancel" \
  --http-method POST \
  --request-headers "$(printf '{"Content-Type":"application/json","opc-request-id":"sql-cancel-%s"}' "$REQ_SUFFIX")" \
  --request-body '{}' \
  --region "${REGION}" \
  --auth security_token \
  --profile "${PROFILE}" \
  | jq '{http_status:.status, statement_id:.data.statement_id, cancel_state:.data.cancel_state, state:.data.status.state, error:.data.status.error, code:.data.code, message:.data.message, opc_request_id:.headers["opc-request-id"]}'
前述の例に対するレスポンスは次のようになります。
{
  "http_status": "200 OK",
  "statement_id": "9b8ca043-5620-469a-b07c-51d5b99b9963",
  "cancel_state": "COMPLETED",
  "state": "CANCELED",
  "error": null,
  "code": null,
  "message": null,
  "opc_request_id": "sql-cancel-20261022-231732/1BA0029F78EFABC8F3A7D7D8F52E278F/CFB5C5994AF3861143602D08794A2628"
}

取消しが完了すると、APIは200 OKを返します。レスポンスには、文IDとCANCELEDのステータスが含まれます。

取消を確認するには、同じstatement_idを使用して文ステータスを取得します。
oci raw-request \
  --target-uri "${BASE_URI}/20200129/computeClusters/${COMPUTE_CLUSTER_KEY}/workbench/sql/statements/${LONG_STATEMENT_ID}" \
  --http-method GET \
  --request-headers "$(printf '{"opc-request-id":"req-sql-canceled-status-%s"}' "$REQ_SUFFIX")" \
  --no-retry \
  --region "${REGION}" \
  --auth security_token \
  --profile "${PROFILE}" \
  | jq '{http_status:.status, statement_id:.data.statement_id, state:.data.status.state, cancel_requested:.data.cancel_requested, error:.data.status.error, opc_request_id:.headers["opc-request-id"]}'
検証レスポンスは次のようになります。
{
  "http_status": "200 OK",
  "statement_id": "9b8ca043-5620-469a-b07c-51d5b99b9963",
  "state": "CANCELED",
  "cancel_requested": true,
  "error": null,
  "opc_request_id": "req-sql-canceled-status-20261022/727A96500CCB1BBCF311B91390F7370C/9231C1802E3466B9AF5FBDEA56D0A9EA"
}

カタログまたはスキーマの指定

SQL文を発行するときに、カタログまたはスキーマ、あるいはその両方を指定できます。リクエストで指定する値は、現在のセッション コンテキストを上書きします。カタログとスキーマの両方を指定して、特定のカタログとスキーマで文を実行します。

{
  "statement": "SELECT * FROM orders LIMIT 10",
  "catalog": "sales_catalog",
  "schema": "reporting",
  "wait_timeout": "10s",
  "on_wait_timeout": "CONTINUE",
  "format": "JSON_ARRAY",
  "disposition": "INLINE"
}

カタログを選択するには、catalogのみを指定できます。文で特定のスキーマが使用されるようにするには、catalogとschemaの両方を指定します。

現在のカタログのスキーマを選択するには、schemaのみを指定できます。catalogを省略すると、sales_catalog.reportingなどの修飾スキーマ名を指定することもできます。

catalogまたはschemaを指定しない場合、文は現在のセッション・カタログおよびスキーマを使用します。指定したカタログまたはスキーマが存在しない場合、またはコール元にアクセスできない場合、文はステータスFAILEDで完了できます。すべての完了文レスポンスでstatus.stateおよびstatus.errorを確認します。カタログまたはスキーマ・フィールドの構文が無効な場合、400 Bad Requestが返されます。

名前付きパラメータ

SQL文で名前付きパラメータを使用できます。コロンに続けてパラメータ名(:idなど)を指定して、文でパラメータを指定します。位置パラメータ(?など)はサポートされていません。parameters配列にパラメータ値を指定します。各パラメータには次のフィールドが含まれます。

フィールド 説明
name 必須フィールドです。コロン(:)接頭辞のないパラメータ名。
value 必須フィールドです。パラメータ値。値を文字列として指定します。
type オプション。パラメータ値の型のヒント。
たとえば、次のリクエストは、:idおよび:nameの値を提供します。
{
  "statement": "SELECT :id AS id, :name AS name",
  "parameters": [
    {
      "name": "id",
      "value": "42",
      "type": "INT"
    },
    {
      "name": "name",
      "value": "example",
      "type": "STRING"
    }
  ],
  "wait_timeout": "10s",
  "on_wait_timeout": "CONTINUE",
  "format": "JSON_ARRAY",
  "disposition": "INLINE"
}
APIでは、次のパラメータ・タイプのヒントがサポートされています。
  • BOOLEAN: BOOLEAN
  • 整数: BYTE、TINYINT、SHORT、SMALLINT、INT、INTEGER、LONG、BIGINT
  • 数値: FLOAT、DOUBLE、DECIMAL、NUMERIC
  • 日付と時間: DATE、TIMESTAMP、TIMESTAMP_NTZ
  • 文字: STRING、CHAR、VARCHAR
型値は型のヒントです。指定された小数点精度および位取りまたはタイムスタンプ・バリアントを保持するために、これに依存しないでください。アプリケーションの戻り値とタイプを検証します。

SQL文実行APIレスポンスのトラブルシューティング

次の表を使用すると、一般的なAPIレスポンスに対する考えられるソリューションのトラブルシューティングに役立ちます。
応答 解決策
400 Bad Request リクエストに、サポートされている読取り専用文と有効なリクエスト値が含まれていることを確認します。
401または403 OCI認証と、コンピュート・クラスタおよび問合せ対象データの権限を確認します。
404 Not Found リージョン、コンピュート・クラスタ・キー、コール元IDおよび文IDを確認します。
503 Service Unavailable コンピュート・クラスタがアクティブになるまで待機してから再試行してください。

Spark Connectによる外部アプリケーションへの接続

Spark Connectを使用して、サポートされているPythonまたはJavaアプリケーションからOracle AI Data Platformコンピュート・クラスタでSparkコードを実行できます。

クラスタがDataFrame操作およびSpark SQL問合せを実行している間は、ローカルIDEまたは外部アプリケーションから作業できます。たとえば、データ変換をローカルで開発し、クラスタで使用可能なデータに対して実行し、アプリケーションで結果を取得できます。

Spark Connectを使用するには、次のものがあることを確認します:
  • ステータスが「アクティブ」のコンピュート・クラスタ。
  • 使用しているクラスタおよびデータに対するUSE権限以上。
  • ポート443のSpark Connectクラスタ・ホスト名へのネットワーク・アクセス。
  • コンピュート・クラスタ・キー(ID)。これは、クラスタの「詳細」タブの「一般情報」にあります。
  • クラスタのゲートウェイ・ホスト名。ホスト名は、クラスタの「接続」詳細タブのJDBCドライバまたはODBCドライバにあります。
  • OCI認証プロファイルおよび互換性のあるSpark Connectクライアント。

AIデータ・プラットフォームは、PythonおよびJavaクライアントをサポートし、それぞれに次の要件があります:

クライアント 要件
Python Python 3.9–3.11、PySpark Connect 3.5.1
Java JDK 17、Maven 3.8以降、Spark Connect JVMクライアント3.5.1

Pythonクライアントを使用したSpark Connectへの接続

このPythonの例には、OCIで認証し、リモートSparkセッションを作成するために必要な接続設定が含まれています。

この例では、Spark Connectの例というバンドルに用意されているspark_connect_example.pyおよびrequirements.txtが必要です。
  1. 抽出されたサンプル・ディレクトリでターミナルを開きます。仮想環境を作成し、依存関係をインストールします。
    python3 -m venv .venv
    .venv/bin/python -m pip install --upgrade pip
    .venv/bin/python -m pip install -r requirements.txt

    付属の依存関係ファイルを使用して、互換性のあるバージョンのクライアントライブラリをインストールします。

  2. 端末で、ホスト名、クラスタ・キーおよびOCIプロファイルを設定します。
    export SPARK_CONNECT_HOST="<hostname>"
    export SPARK_CONNECT_CLUSTER_KEY="<compute-cluster-key>"
    export SPARK_CONNECT_OCI_CONFIG_FILE="$HOME/.oci/config"
    export SPARK_CONNECT_OCI_CONFIG_PROFILE="<profile-name>"
    山括弧(<>)で囲まれている値は接続の詳細に置き換えてください。選択したOCIプロファイルには、有効なAPIキーまたはセキュリティ・トークン資格証明が含まれている必要があります。たとえば:
    export SPARK_CONNECT_HOST="dev.gateway.example.us-phoenix-1.oci.oc-test.com"
    export SPARK_CONNECT_CLUSTER_KEY="a12345b6-cdef-789g-123h-45678i9j1234"
    export SPARK_CONNECT_OCI_CONFIG_FILE="$HOME/.oci/config"
    export SPARK_CONNECT_OCI_CONFIG_PROFILE="MYPROFILE"
  3. 接続を検証します。
    SPARK_CONNECT_OCI_AUTH_MODE=config \
    SPARK_CONNECT_EXAMPLE_TYPE=both \
    env -u PYTHONPATH -u SPARK_HOME \
    .venv/bin/python spark_connect_example.py

    プロファイルに一致する認証方式を選択してください:

    認証タイプ 設定
    APIキー SPARK_CONNECT_OCI_AUTH_MODE=api_key
    セキュリティ・トークン SPARK_CONNECT_OCI_AUTH_MODE=security_token

    この例では、DataFrame操作およびSpark SQL問合せを実行します。どちらの戻り値も0から4までの2乗の値になります。端末には、収集された行として結果が表示されます。両方の操作が完了すると、アプリケーションは認証され、クラスタに接続され、Sparkコードが実行されます。

  4. この例で作成された認証済Sparkセッションを使用して、独自の操作を実行します。spark_connect_example.pyを開き、tryブロック内のサンプル操作をアプリケーション・コードに置き換えます。認証済のSparkセッションを作成する既存のコードを保持します。
    たとえば、DataFrameを操作するには、次を使用できます。
    frame = spark.range(5)
    
    result = frame.withColumn(
        "squared",
        frame["id"] * frame["id"]
    )
    
    result.show()
    Spark SQLを実行するには、次を使用できます:
    spark.sql(
        "SELECT id, id * id AS squared FROM range(5)"
    ).show()

    独自の表を問い合せる場合は、適切なカタログおよびスキーマを使用します。アイデンティティには、これらの表にアクセスする権限が必要です。

  5. アプリケーションが終了したら、Sparkセッションをクローズします:
    spark.stop()

ノート:

この例では、ドキュメント化されたSpark 3.5.1クライアントの再アタッチ可能実行を無効にします。
spark.client.disable_reattachable_execute()
例を適応させるときは、この設定を保持します。

Javaクライアントを使用したSpark Connectへの接続

このJavaの例には、OCIで認証し、リモートSparkセッションを作成するために必要な接続設定が含まれています。

この例では、Spark Connectの例というバンドルに用意されているSparkConnectExample.javaおよびpom.xmlが必要です。
  1. バンドルを抽出し、filenameを開きます。バンドルの内容をインストールする手順に従います。
  2. 抽出されたサンプル・ディレクトリでターミナルを開きます。同じホスト名、クラスタ・キー、構成ファイルのパスおよびプロファイルを設定します。
    export SPARK_CONNECT_HOST="<hostname>"
    export SPARK_CONNECT_CLUSTER_KEY="<compute-cluster-key>"
    export SPARK_CONNECT_OCI_CONFIG_FILE="$HOME/.oci/config"
    export SPARK_CONNECT_OCI_CONFIG_PROFILE="<profile-name>"
    export SPARK_CONNECT_EXAMPLE_TYPE=both
    山括弧(<>)で囲まれている値は接続の詳細に置き換えてください。選択したOCIプロファイルには、有効なAPIキーまたはセキュリティ・トークン資格証明が含まれている必要があります。たとえば:
    export SPARK_CONNECT_HOST="dev.gateway.example.us-phoenix-1.oci.oc-test.com"
    export SPARK_CONNECT_CLUSTER_KEY="a12345b6-cdef-789g-123h-45678i9j1234"
    export SPARK_CONNECT_OCI_CONFIG_FILE="$HOME/.oci/config"
    export SPARK_CONNECT_OCI_CONFIG_PROFILE="MYPROFILE"
    export SPARK_CONNECT_EXAMPLE_TYPE=both
  3. 接続を確認します。
    SPARK_CONNECT_OCI_AUTH_MODE=config \
    SPARK_CONNECT_EXAMPLE_TYPE=both \
    env -u PYTHONPATH -u SPARK_HOME \
    .venv/bin/python spark_connect_example.py"

    プロファイルに一致する認証方式を選択してください:

    認証タイプ 設定
    APIキー SPARK_CONNECT_OCI_AUTH_MODE=api_key
    セキュリティ・トークン SPARK_CONNECT_OCI_AUTH_MODE=security_token

    この例では、DataFrame操作およびSpark SQL問合せを実行します。どちらの戻り値も0から4までの2乗の値になります。端末には、収集された行として結果が表示されます。両方の操作が完了すると、アプリケーションは認証され、クラスタに接続され、Sparkコードが実行されます。

  4. この例で作成した認証済Sparkセッションを使用して、独自の操作を実行します。
    たとえば、DataFrameを操作するには、次を使用できます。
    frame = spark.range(5)
    
    result = frame.withColumn(
        "squared",
        frame["id"] * frame["id"]
    )
    
    result.show()
    Spark SQLを実行するには、次を使用できます:
    spark.sql(
        "SELECT id, id * id AS squared FROM range(5)"
    ).show()

    独自の表を問い合せる場合は、適切なカタログおよびスキーマを使用します。アイデンティティには、これらの表にアクセスする権限が必要です。

  5. アプリケーションが終了したら、Sparkセッションをクローズします:
    spark.stop()

Spark Connectのトラブルシューティング

次の表に、Oracle AI Data PlatformへのSpark Connect接続の構成時に発生する可能性のある一般的な問題と、潜在的な原因を示します。

問題 確認対象
アプリケーションが接続できません クラスタがアクティブであり、環境がポート443のゲートウェイ・ホスト名に到達できることを確認します。
認証に失敗 OCI構成ファイルのパス、プロファイル名および資格証明を確認します。期限切れのセッション資格証明をリフレッシュします。
認可に失敗したか、リソースが見つかりません ホスト名とクラスタ・キーを確認します。テナンシの有効化およびクラスタを使用する権限を確認します。
問合せは表にアクセスできません カタログ、スキーマおよび表名を確認し、認証済アイデンティティにデータへのアクセス権があることを確認します。
Pythonは、欠落しているpysparkまたはociモジュールを報告します 指定された依存関係をインストールし、.venv/bin/pythonを使用して例を実行します。
Pythonが予期しないSparkバージョンをロードする PYTHONPATHおよびSPARK_HOMEを削除して、ドキュメント化されたコマンドを使用します。
Javaが依存性の欠落または互換性のないライブラリを報告する Javaバンドルに付属する設定手順に従い、指定された依存性バージョンを使用します。