本頁面說明如何解決將 SAP Business Data Cloud (BDC) 與 BigQuery 整合時的常見問題。如要瞭解 SAP 到 Google Cloud (聯合) 工作流程,請參閱 Lakehouse 疑難排解頁面。
查詢資料表時發生 NOT_FOUND 或 PERMISSION_DENIED 錯誤
如果 SAP BDC 撤銷存取權,就會發生這個問題。對受影響資料表執行的查詢會失敗,並傳回源自 Delta Sharing 端點的「找不到」或「權限遭拒」錯誤。
如要解決這個問題,請與 SAP 管理員合作,還原資料表的存取權。如要進一步瞭解 SAP 的存取權管理,請參閱 SAP 說明文件中的「Working with Data Products in SAP Business Data Cloud Connect」(在 SAP Business Data Cloud Connect 中使用資料產品)。
無法將資料寫入 SAP BDC 資料表
當您嘗試從 BigQuery 寫入或修改 SAP BDC 資料表中的資料時,就會發生這個問題。這項整合功能提供 SAP BDC 資料的唯讀存取權。
如要解決這個問題,請直接在 SAP BDC 中修改資料。
Delta Sharing API 呼叫產生非預期的費用
如果 Lakehouse 目錄與 SAP BDC 同步處理的頻率過高,就會發生這個問題,因為 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 Federation 主體仍具備必要角色 (例如 BigLake 檢視者),且已授予標準 BigQuery 資料集或資料表存取權。如要進一步瞭解如何在 SAP 中安裝及使用資料產品,請參閱 SAP 說明文件中的「安裝資料產品」。
SAP BDC 未顯示新資料表或中繼資料變更
在 Apache Iceberg REST 目錄端點或 Knowledge Catalog Data Product 中新增資料表或更新現有資料表中繼資料時,如果 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,且套用至專案的 perimeter 限制 storage.googleapis.com 服務,就可能發生這個問題。Dremel 查詢資料表時,必須讀取 SAP 專案中傳入的 Cloud Storage bucket,但 SAP 專案位於 perimeter 外部,因此系統會禁止這項要求。
如要解決這個問題,請設定 VPC Service Controls 輸出規則。如要進一步瞭解設定,請參閱「SAP BDC 的 VPC Service Controls 設定」。