10 連線到運算

本節涵蓋將 Oracle AI Data Platform 中的運算連接到其他商業智慧工具。

連線

您可以將 Oracle AI Data Platform 與 Oracle Analytics Cloud 或其他商業智慧工具連線。

您可以使用 AI 資料平台提供的自訂 JDBC 或 ODBC,從不同的商業智慧工具連線至 AI 資料平台。AI Data Platform 也支援來自第三方商業 BI 工具 (Tableau、Power BI) 或開源 BI 工具 (例如 DBeaver) 的連線。若要從這些工具連線,您需要 AI 資料平台中運算叢集的連線詳細資訊,您可以在「連線詳細資訊」頁籤中找到該詳細資訊。所需資訊會視您連線的產品而有所不同。


Dev_cluster_1 運算叢集的連線詳細資訊頁籤

將 Oracle Analytics 連線至 Oracle AI Data Platform

您可以從 Oracle Analytics Cloud 執行處理連線至由 Oracle AI Data Platform 執行處理管理的目錄或表格。

若要建立從 Oracle Analytics 到 AI 資料平台的連線,您需要來自 AI 資料平台的連線檔案,以及來自 Analytics Cloud 的 API 金鑰。

取得 Oracle Analytics 連線組態檔

您必須從 Oracle AI Data Platform 執行處理下載 config.json 檔案,才能將其連線至 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 Data Platform 的連線組態檔。請參閱取得 Oracle Analytics 連線組態檔。
Oracle Analytics 與 AI Data Platform 執行處理的連線僅支援每個連線一個目錄。您必須建立其他連線,才能使用多個目錄。
  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. 選取貼上公開金鑰,然後在步驟 7 中產生的金鑰中複製,然後按一下新增。
    等待 2 到 3 分鐘,讓 API 金鑰同步。
  9. 在「目錄」中,指定要用於您資料集的「目錄」名稱。
    如果未載入目錄清單,而您看到警示訊息「使用者沒有執行作業的足夠權限」,請稍候一些時間讓 API 金鑰同步。
  10. 按一下「儲存」。
  11. 建立資料集以測試您的新連線。

如果您已遵循指示,但仍儲存連線或列出綱要時發生問題,則可能需要重新啟動叢集。

下載 JDBC 驅動程式

您可以從「連線詳細資訊」頁籤下載 JDBC 驅動程式,然後針對不同的 BI 工具進行設定。

  1. 瀏覽至您的工作區,然後按一下運算。
  2. 按一下您要連線至 JDBC 相容 BI 工具的叢集,然後按一下連線。
  3. 按一下 Download JDBC Driver 。

設定 DBeaver

您必須先安裝 DBeaver 並準備從 Oracle AI Data Platform 下載的檔案,才能將它連線至 AI Data Platform 中的運算叢集。

  1. 下載並安裝 DBeaver 用戶端。您可以使用「社群」或「企業」版本,但必須至少有 22.x.DBeaver 可供 Windows、Mac OS X、Eclipse Plugin 以及 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. 按一下程式庫 (Libraries) 。
  7. 按一下新增資料夾。
  8. 瀏覽至 sparkSimba.zip 擷取的位置。
  9. 按一下尋找類別 (Find Class) 。
  10. 選取確定。
  11. 將 Driver 類別設為 com.simba.spark.jdbc.Driver 。
  12. 按一下設定值。
  13. 將類別名稱 (Class Name) 設定為 com.simba.spark.jdbc.Driver 。
  14. 按一下確定。

在 DBeaver 中建立資料庫連線

若要將 DBeaver 連線至 Oracle AI Data Platform 中的運算叢集,您必須先在 DBeaver 中建立資料庫連線。

您必須使用從 AI 資料平台下載的 Spark Simba JDBC 驅動程式來設定 DBeaver。如需詳細資訊,請參閱使用 Spark Simba JDBC 驅動程式設定 DBeaver 。
  1. 開啟 DBeaver。
  2. 按一下資料庫。
  3. 按一下新資料庫連線。
  4. 按一下全部。
  5. 選取 AI 資料平台。
  6. 按下一步。
  7. 輸入 JDBC 動因的 URL。您可以在 AI 資料平台中運算叢集的連線詳細資訊頁籤上找到 JDBC URL。
  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 Data Platform 執行處理的租用戶。

        如需詳細資訊,請參閱 Token-based Authentication for the 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 建立一個連線以讀取描述資料,以及一個連線供所有其他作業使用。如果連線受到限制,您可以停用第二個連線,讓 DBeaver 對所有作業使用一個連線。
    1. 按一下偏好設定。
    2. 按一下通用。
    3. 按一下描述資料。
    4. 取消選取開啟描述資料讀取的個別連線。

下載 ODBC驅動程式

您可以從「連線詳細資訊」頁籤下載 ODBC 驅動程式,然後針對不同的 BI 工具進行設定。

  1. 瀏覽至您的工作區,然後按一下運算。
  2. 按一下您要連線至 ODBC 相容 BI 工具的叢集,然後按一下連線。
  3. 按一下下載 ODBC 驅動因素。
  4. 從清單中選取適當的作業系統。

    開啟「ODBC 驅動程式作業系統」下拉式清單,其中顯示 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 選擇性。呼叫者提供的關聯或冪等 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) 會擷取第一個結果。您可以檢查回應中的 next_chunk_index,決定下一個結果的 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 時,此值為空值。
  • 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 支援下列參數類型提示:
  • 布林值:布林值
  • 整數:BYTE、TINYINT、SHORT、SMALLINT、INT、INTEGER、LONG、BIGINT
  • 數值:FLOAT、DOUBLE、DECIMAL、NUMBER
  • 日期與時間:DATE,TIMESTAMP,TIMESTAMP_NTZ
  • 字元:STRING、CHAR、VARCHAR
類型值是類型提示。不要依賴它來保留提供的小數位數和比例或時戳變體。驗證應用程式中的傳回值和類型。

SQL 敘述句執行 API 回應疑難排解

使用下表可協助疑難排解一般 API 回應的可能解決方案:
回應 解決方案
400 Bad Request 請確定要求包含支援的唯讀敘述句和有效的要求值。
401 或 403 請檢查 OCI 認證以及您對運算叢集和查詢資料的權限。
404 Not Found 請檢查區域、運算叢集金鑰、呼叫者識別以及敘述句 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 連接 3.5.1
Java JDK 17、Maven 3.8 或更新版本、Spark Connect JVM 從屬端 3.5.1

使用 Python 用戶端連線至 Spark Connect

此 Python 範例包含向 OCI 認證以及建立遠端 Spark 階段作業所需的連線設定。

此範例需要此組合中提供的 spark_connect_example.py 和 requirements.txt:Spark Connect 範例。
  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 查詢。這兩個傳回 ID 0 到 4,都有其平方值。終端機會將結果顯示為收集的資料列。如果兩個作業都完成,應用程式就會經過認證、連線到叢集,然後執行 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 階段作業所需的連線設定。

此範例需要此組合中提供的 SparkConnectExample.java 和 pom.xml:Spark Connect 範例。
  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 查詢。這兩個傳回 ID 0 到 4,都有其平方值。終端機會將結果顯示為收集的資料列。如果兩個作業都完成,應用程式就會經過認證、連線到叢集,然後執行 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 疑難排解

提供的表格列出設定 Spark Connect 連線至 Oracle AI Data Platform 時可能會遇到的常見問題,並提供可能的原因。

發生問題 要檢查什麼
應用程式無法連線 確認叢集為作用中狀態,而且您的環境可以連線連接埠 443 上的閘道主機名稱。
驗證失敗 檢查 OCI 組態檔路徑、設定檔名稱以及證明資料。重新整理過期的階段作業證明資料。
授權失敗,或找不到資源 檢查主機名稱和叢集金鑰。確認啟用租用戶,以及使用叢集的權限。
查詢無法存取表格 檢查目錄、綱要和表格名稱,並確認認證的識別具有資料的存取權。
Python 報告了遺失的 pyspark 或 oci 模組 安裝提供的相依性,並使用 .venv/bin/python 執行範例。
Python 會載入非預期的 Spark 版本 將記錄的指令與 PYTHONPATH 和 SPARK_HOME 一起移除。
Java 報告遺漏相依性或不相容的程式庫 請依照 Java 組合隨附的設定指示,並使用其指定的相依性版本。