בדף הזה מוסבר איך לפתור בעיות נפוצות בשילוב של SAP Business Data Cloud (BDC) עם BigQuery. למידע על תהליך העבודה של SAP ל-Google Cloud (איחוד) באמצעות Lakehouse ללא גבולות, אפשר לעיין בדף פתרון הבעיות של Lakehouse ללא גבולות.
שגיאות NOT_FOUND או PERMISSION_DENIED כשמבצעים שאילתות בטבלאות
הבעיה הזו מתרחשת כשמבטלים את הגישה בצד של SAP BDC. שאילתות לטבלאות המושפעות נכשלות ומוחזרת שגיאה מסוג 'לא נמצא' או 'ההרשאה נדחתה' שמקורה בנקודת הקצה של Delta Sharing.
כדי לפתור את הבעיה, צריך לפנות לאדמין ב-SAP כדי לשחזר את הגישה לטבלאות. מידע נוסף על ניהול גישה ב-SAP זמין במאמר Working with Data Products in SAP Business Data Cloud Connect במסמכי התיעוד של SAP.
אי אפשר לכתוב נתונים בטבלאות SAP BDC
הבעיה הזו מתרחשת כשמנסים לכתוב או לשנות נתונים בטבלאות SAP BDC מ-BigQuery. השילוב הזה מספק גישה לקריאה בלבד לנתוני SAP BDC.
כדי לפתור את הבעיה, צריך לשנות את הנתונים ישירות ב-SAP BDC.
חיובים לא צפויים על קריאות ל-API של Delta Sharing
הבעיה הזו יכולה לקרות אם קטלוג Lakehouse מסתנכרן לעיתים קרובות מדי עם SAP BDC, שקורא לממשקי Delta Sharing API כדי להציג טבלאות ולקבל מטא-נתונים של טבלאות. הקריאות האלה ל-API מחויבות כפעולות מסוג Lakehouse Class A.
כדי לפתור את הבעיה, צריך להגדיל את מרווח הרענון של הקטלוג כדי להקטין את התדירות של קריאות ה-API. מידע נוסף על התמחור זמין במאמר בנושא תמחור של Lakehouse.
מערכת SAP לא יכולה למצוא או לשלוח שאילתות לטבלאות שפורסמו
הבעיה הזו יכולה לקרות אם המטא-נתונים של Apache Iceberg שנדרשים על ידי SAP BDC לא נוצרו בצורה נכונה בקטגוריה של Cloud Storage שלכם.
כדי לפתור את הבעיה, צריך לוודא שקובצי המטא-נתונים הצפויים קיימים בנתיב האחסון שמגבה את הטבלה:
מציגים את התוכן של התיקייה
metadataשל הטבלה:gcloud storage ls "gs://BUCKET_NAME/NAMESPACE_NAME/TABLE_NAME/metadata/"
צריך לוודא שהפלט מכיל קובצי מטא-נתונים רגילים של Apache Iceberg, כולל:
version-hint.txtv*.metadata.json- קובצי מניפסט (
.avro). אם הקבצים האלה חסרים, צריך לבדוק את ההגדרות של קטלוג Iceberg REST או פעולות כתיבה ב-BigQuery כדי לוודא שהנתונים והמטא-נתונים מועברים בהצלחה אל דלי האחסון.
פרסום טבלה נכשל בגלל שגיאה שקשורה למפתח ראשי חסר או לשדה שניתן להגדרה כ-nullable
הבעיה הזו מתרחשת כשמפרסמים קטלוג Apache Iceberg או מוצר נתונים ב-SAP BDC, אבל בטבלאות בקטלוג או במוצר הנתונים לא מוגדר מפתח ראשי במטא-נתונים של Iceberg, או שאחת מהעמודות של המפתח הראשי מוגדרת כעמודה שאפשר להזין בה ערך null (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, כל הטבלאות שמתפרסמות צריכות להגדיר אילוצים של מפתח ראשי באמצעות identifier-field-ids במטא-נתונים של Iceberg. בהתאם למפרט של Apache Iceberg, כל העמודות שמוגדרות ב-identifier-field-ids חייבות להיות מוגדרות גם כעמודות שלא יכולות להכיל ערך null (required: true).
כדי לפתור את הבעיה, צריך לבצע עדכון סכמה אטומי באמצעות BigLake Iceberg API בארכיטקטורת REST כדי לסמן את העמודות של המפתח הראשי כ-required: true ולציין את מזהי השדות שלהן ב-identifier-field-ids:
מקבלים טוקן גישה להרשאה:
TOKEN=$(gcloud auth application-default print-access-token)
שליחת קומיט לעדכון סכימת Iceberg REST באמצעות Python:
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 . -
ICEBERG_CATALOG_ID: המזהה של קטלוג REST של Iceberg. -
NAMESPACE_NAME: שם מרחב השמות של Iceberg. -
TABLE_NAME: שם טבלת Iceberg. -
PRIMARY_KEY_COLUMN_NAME: שם העמודה שרוצים להגדיר כמפתח הראשי. -
PRIMARY_KEY_FIELD_ID: מזהה השדה של עמודת המפתח הראשי (לדוגמה,1).
-
שאילתות ב-SAP נכשלות עם שגיאות הרשאה או שגיאות שלא נמצאו
הבעיה הזו יכולה לקרות אם הגישה נשללת או שההרשאות משתנות ב-BigQuery אחרי שקטלוג או מוצר נתונים פורסמו ב-SAP BDC. שאילתות לטבלאות המושפעות ייכשלו בצד של SAP, בדרך כלל עם שגיאה מסוג 'לא נמצא' או 'ההרשאה נדחתה' שמקורה ב-BigQuery.
כדי לפתור את הבעיה, צריך לוודא שלמשתמש הראשי של איחוד שירותי אימות הזהות של עומסי עבודה יש את התפקידים הנדרשים (כמו BigLake Viewer) ושהגישה הרגילה למערך הנתונים או לטבלה ב-BigQuery מוענקת. מידע נוסף על התקנה ושימוש במוצרי נתונים ב-SAP זמין במאמר התקנת מוצרי נתונים במסמכי התיעוד של SAP.
טבלאות חדשות או שינויים במטא-נתונים לא מופיעים ב-SAP BDC
הבעיה הזו יכולה להתרחש כשמוסיפים טבלאות חדשות או מעדכנים מטא-נתונים של טבלאות קיימות בקטלוג Apache Iceberg REST או במוצר Knowledge Catalog Data, אבל השינויים לא גלויים לצרכני SAP. למרות שהנתונים הבסיסיים נשארים עדכניים, יכול להיות שעדכוני המטא-נתונים ידרוש פעולה מפורשת.
כדי לפתור את הבעיה, צריך להפעיל פעולת פרסום חדשה (gcloud biglake
data-product-sharing publish) לקטלוג או למוצר הנתונים כדי שהמטא-נתונים החדשים יהיו זמינים לחיפוש ב-SAP BDC.
אי אפשר לכתוב נתונים מ-SAP בחזרה ל-BigQuery
הבעיה הזו מתרחשת כשמנסים להשתמש בשילוב SAP שפורסם כדי לכתוב או לשנות נתונים ב-BigQuery מ-SAP BDC. השילוב הזה מספק גישה לקריאה בלבד לנתוני BigQuery מ-SAP BDC כדי למנוע דריסת נתונים בטעות או הפרות אבטחה.
כדי לפתור את הבעיה, צריך לשנות את נתוני המקור ולכתוב אותם ישירות באמצעות BigQuery או צינורות סטנדרטיים של Google Cloud .
שגיאות RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER בשאילתות של טבלאות
הבעיה הזו יכולה להתרחש אם בסביבה שלכם נאכף VPC Service Controls, וגבולות הגזרה שמוחלים על הפרויקט מגבילים את השירות storage.googleapis.com.
מכיוון ש-Dremel צריך לקרוא את הקטגוריות הנכנסות של Cloud Storage בפרויקט SAP כשמבצעים שאילתות בטבלאות, הבקשה נאסרת כי פרויקט SAP נמצא מחוץ לגבולות הגזרה.
כדי לפתור את הבעיה הזו, צריך להגדיר כלל תעבורת נתונים יוצאת ב-VPC Service Controls. מידע נוסף על הגדרות זמין במאמר הגדרת VPC Service Controls עבור SAP BDC.