本頁說明如何解決將 SAP Business Data Cloud (BDC) 與 BigQuery 整合時的常見問題。如要瞭解 SAP 到 Google Cloud (同盟) 工作流程,請參閱Lakehouse 疑難排解頁面。
查詢資料表時發生 NOT_FOUND 或 PERMISSION_DENIED 錯誤
如果 SAP BDC 端撤銷存取權,就會發生這個問題。對受影響資料表的查詢會失敗,並傳回源自 Delta Sharing 端點的「找不到」或「權限遭拒」錯誤。
如要解決這個問題,請與 SAP 管理員合作,還原資料表的存取權。如要進一步瞭解 SAP 中的存取權管理,請參閱 SAP 說明文件中的「在 SAP Business Data Cloud Connect 中使用資料產品」。
無法將資料寫入 SAP BDC 資料表
如果您嘗試從 BigQuery 寫入或修改 SAP BDC 資料表中的資料,就會發生這個問題。這項整合功能提供 SAP BDC 資料的唯讀存取權。
如要解決這個問題,請直接在 SAP BDC 中修改資料。
Delta Sharing API 呼叫產生預期外的費用
如果 Lakehouse 目錄與 SAP BDC 同步的頻率過高,就會發生這個問題,因為這樣會呼叫 Delta Sharing API 來列出資料表並取得資料表的中繼資料。這些 API 呼叫會以 Lakehouse A 級作業計費。
如要解決這個問題,請增加目錄的重新整理間隔,以減少 API 呼叫頻率。如要進一步瞭解定價,請參閱「Lakehouse 定價」。
SAP 無法找到或查詢已發布的資料表
如果 Cloud Storage bucket 中未正確產生 SAP BDC 要求的 Apache Iceberg 中繼資料,就可能發生這個問題。
如要解決這個問題,請確認預期的中繼資料檔案位於支援資料表的儲存路徑:
列出資料表
metadata資料夾的內容:gcloud storage ls "gs://BUCKET_NAME/NAMESPACE_NAME/TABLE_NAME/metadata/"
確認輸出內容包含標準 Apache Iceberg 中繼資料檔案,包括:
version-hint.txtv*.metadata.json- 資訊清單檔案 (
.avro)。如果缺少這些檔案,請檢查 Iceberg REST 目錄設定或 BigQuery 中的寫入作業,確保資料和中繼資料已成功具體化至儲存空間 bucket。
發布資料表時,因缺少主鍵或可為空值的欄位而失敗
當您將 Apache Iceberg 目錄或資料產品發布至 SAP BDC 時,如果目錄或資料產品中的資料表未在 Iceberg 中繼資料中定義主鍵,或其中一個主鍵欄定義為可為空值 (required: false),就會發生這個問題。
發生這種情況時,發布作業會失敗,並顯示下列其中一個錯誤:
INVALID_ARGUMENT: Failed to generate Core Schema Notation (CSN) payload: Table 'TABLE_NAME' must have a primary key constraint to be published to SAP.INVALID_ARGUMENT: Field COLUMN_NAME is not required, but is referenced in the identifier-field-ids property.
SAP BDC 要求所有發布的資料表都必須在 Iceberg 中繼資料中使用 identifier-field-ids 定義主鍵限制。根據 Apache Iceberg 規格,identifier-field-ids 中指定的所有資料欄也必須設為不可為空值 (required: true)。
如要解決這個問題,請使用 BigLake Iceberg REST API 執行原子結構定義更新,將主鍵欄標示為 required: true,並在 identifier-field-ids 中指定欄位 ID:
取得授權存取權杖:
TOKEN=$(gcloud auth application-default print-access-token)
使用 Python 傳送 Iceberg REST 結構定義更新提交:
import requests headers = { "Authorization": f"Bearer {TOKEN}", "x-goog-user-project": "PROJECT_ID", "X-Iceberg-Access-Delegation": "vended-credentials", "Content-Type": "application/json", } url = "https://biglake.googleapis.com/iceberg/v1/restcatalog/v1/projects/PROJECT_ID/catalogs/ICEBERG_CATALOG_ID/namespaces/NAMESPACE_NAME/tables/TABLE_NAME" # 1. Fetch current metadata meta = requests.get(url, headers=headers).json()["metadata"] schema = meta["schemas"][0].copy() schema["fields"] = [f.copy() for f in schema["fields"]] # 2. Mark primary key column as required (non-nullable) and set identifier-field-ids for f in schema["fields"]: if f["name"] == "PRIMARY_KEY_COLUMN_NAME": f["required"] = True schema["identifier-field-ids"] = [PRIMARY_KEY_FIELD_ID] schema["schema-id"] = meta.get("last-schema-id", 0) + 1 # 3. Commit the updated schema update_payload = { "requirements": [{"type": "assert-table-uuid", "uuid": meta["table-uuid"]}], "updates": [ { "action": "add-schema", "schema": schema, "last-column-id": meta.get("last-column-id", 0), }, {"action": "set-current-schema", "schema-id": -1}, ], } response = requests.post(url, headers=headers, json=update_payload) response.raise_for_status()
更改下列內容:
PROJECT_ID:您的 Google Cloud 專案 ID。ICEBERG_CATALOG_ID:您的 Iceberg REST 目錄 ID。NAMESPACE_NAME:Iceberg 命名空間名稱。TABLE_NAME:Iceberg 資料表名稱。PRIMARY_KEY_COLUMN_NAME:要設為主鍵的欄名稱。PRIMARY_KEY_FIELD_ID:主鍵資料欄的整數字段 ID (例如1)。
查詢 SAP 時發生權限或找不到錯誤
如果目錄或資料產品發布至 SAP BDC 後,BigQuery 存取權遭到撤銷或權限遭到修改,就可能發生這個問題。查詢受影響資料表時,SAP 端會發生錯誤 (通常是 BigQuery 傳回的「找不到」或「權限遭拒」錯誤)。
如要解決這個問題,請確認 Workload Identity 聯盟主體保留必要角色 (例如 BigLake 檢視者),並授予標準 BigQuery 資料集或資料表存取權。如要進一步瞭解如何在 SAP 中安裝及使用資料產品,請參閱 SAP 說明文件中的「安裝資料產品」。
SAP BDC 未顯示新資料表或中繼資料變更
如果您在 Apache Iceberg REST 目錄或 Knowledge Catalog 資料產品中新增資料表或更新現有資料表的中繼資料,但 SAP 消費者看不到這些變更,就可能發生這個問題。雖然基礎資料仍會保持最新狀態,但中繼資料更新可能需要明確動作。
如要解決這個問題,請對目錄或資料產品執行新的發布動作 (gcloud biglake
data-product-sharing publish),讓 SAP BDC 探索新的中繼資料。
無法將 SAP 資料寫回 BigQuery
當您嘗試使用已發布的 SAP 整合功能,從 SAP BDC 寫入或修改 BigQuery 中的資料時,就會發生這個問題。這項整合功能可提供 SAP BDC 的 BigQuery 資料唯讀存取權,避免資料遭到意外覆寫或發生安全性違規事件。
如要解決這個問題,請使用 BigQuery 或標準 Google Cloud 管道直接操控及寫入來源資料。
查詢資料表時發生 RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER 錯誤
如果環境強制執行 VPC Service Controls,且套用至專案的範圍限制了 storage.googleapis.com 服務,就可能發生這個問題。由於 Dremel 需要在查詢資料表時讀取 SAP 專案中的傳入 Cloud Storage 值區,但 SAP 專案位於範圍外,因此系統會禁止這項要求。
如要解決這個問題,請設定 VPC Service Controls 輸出規則。如要進一步瞭解設定,請參閱「SAP BDC 的 VPC Service Controls 設定」。