שילוב וסנכרון של מוצרי נתונים של SAP Business Data Cloud עם Cortex Framework באמצעות קטלוג זמן ריצה של Lakehouse.
במאמר הזה מוסבר איך לחבר את Cortex Framework אל SAP Business Data Cloud באמצעות שילוב קטלוג זמן הריצה של Lakehouse.
באמצעות שילוב של Google Cloud SAP Delta Sharing עם חיבור פדרציה לקטלוג של זמן הריצה של BigQuery Lakehouse, Cortex Framework יכול לשלוח שאילתות לכל מוצרי הנתונים שמנוהלים בתוך SAP BDC ישירות ב-BigQuery ללא תקורה של העתקה, ולהפנות אליהם במוצרי נתונים אנליטיים מותאמים אישית במורד הזרם. הרכיבים העיקריים של השילוב הזה הם:
- שאילתות מאוחדות: מוצרי נתונים שפורסמו ב-SAP BDC נחשפים באמצעות נקודות קצה מאובטחות של Delta Sharing. BigQuery מאחד שאילתות לנקודות הקצה האלה באמצעות Google Cloud חיבור לקטלוג של זמן הריצה של Lakehouse.
- רישום קטלוג: ב-Cortex Framework רושמים את קטלוג SAP BDC באמצעות מודול מסוג
delta_shareבקטעdata.modules.catalogsב-config/config.yaml. - קישורי נתונים של Google Cloud Cortex Framework: מוצרי נתונים מותאמים אישית במורד הזרם מפנים לטבלאות בקטלוג BDC על ידי קישור יחסי התלות של הקלט למזהים הספציפיים של השיתוף והטבלה ב-Delta Sharing בפורמט
{catalog_id}.{share_id}.{table_name}.
דרישות מוקדמות ל-SAP BDC
לפני שמגדירים את החיבור ב-Cortex Framework, צריך לבצע את השלבים הבאים ב- Google Cloud וב-SAP:
- הגדרת Google Cloud קטלוג זמן הריצה של Lakehouse: מגדירים את החיבור לקטלוג זמן הריצה של BigQuery Lakehouse ב Google Cloud פרויקט באמצעות Google Cloud Delta Sharing ל-SAP Business Data Cloud.
- אחזור מזהי שיתוף: איתור ורישום הערכים של Delta Sharing
shareId(לדוגמה,customer_v1_he2_100_p8123אוsalesorder_v1_he2_100_p8124) שפורסמו על ידי דייר SAP BDC המקושר.
דוגמה להגדרה
בדוגמה הבאה של הגדרה נרשם קטלוג SAP BDC ונעשה שימוש בשיתופים שלו כדי לחשב מוצר נתונים מותאם אישית של נתוני ביצועי מכירות:
buildEnvironment:
buildProjectId: YOUR_BUILD_PROJECT_ID
data:
bigQueryLocation: europe-west3
namespaces:
- name: cortex
path: ../src/data_modules/cortex
- name: cortex_samples
path: ../src/data_modules/cortex_samples
datasets:
- id: sap_bdc_data_products
projectId: YOUR_TARGET_PROJECT_ID
datasetId: sap_bdc_data_products
modules:
# 1. Register the SAP BDC Lakehouse runtime catalog connection (using lakehouse_delta_share type)
catalogs:
- id: sap_bdc_catalog
type: lakehouse_delta_share
enabled: true
bindsNamespaces: [sap_bdc]
connectionSettings:
catalogId: sap_bdc_catalog
projectId: YOUR_CATALOG_PROJECT_ID
location: europe-west3
shares:
- shareId: customer_v1_he2_100_p8123
- shareId: salesorder_v1_he2_100_p8124
# 2. Reference the catalog shares in downstream products
products:
- moduleId: sap_bdc_sales_performance
modulePath: cortex_samples.sap_bdc.products.sales_performance
dependencyBindings:
# Bind logical dependencies directly to the catalog shares and tables
sapBdcCustomer: sap_bdc_catalog.customer_v1_he2_100_p8123.customer
sapBdcSalesOrder: sap_bdc_catalog.salesorder_v1_he2_100_p8124.salesorder
dataTargetId: sap_bdc_data_products
לעיון בפרמטרים, אפשר לעבור לקטע הגדרת פריסה של סוג מודול Data Catalog.
כשמוצר נתונים מותאם אישית מסתמך על טבלאות קטלוג של Lakehouse runtime, צריך להגדיר את תלות הקלט שלו ב-config/config.yaml באמצעות תחביר נתיב הקטלוג:
dependencyBindings:
{logical_input_name}: {catalog_id}.{share_id}.{table_name}
כאשר:
-
{catalog_id}תואם לנכסidבקטלוג בקטעdata.modules.catalogs. - הערך
{share_id}תואם לאחת מהמחרוזות שלshareIdשהוגדרו בקטלוג. -
{table_name}זהה לשם הפיזי של הטבלה שמוצגת בשיתוף הזה.
קישור תלות downstream ב-Dataform
במהלך הקומפילציה (cortex-build), Cortex Framework קורא את המטא-נתונים של הקטלוג ומתרגם אוטומטית את קשרי התלות לשמות מלאים של טבלאות מאוחדות ב-BigQuery.
בהגדרות של מוצרי נתונים מותאמים אישית (למשל, קובצי .js או .sqlx), מציינים את המקורות התואמים של SAP BDC:
// Example JS definition referencing SAP BDC inputs
const moduleConfig = config.product[moduleContext.moduleId];
const customerSource = moduleConfig.sources.sapBdcCustomer;
const salesOrderSource = moduleConfig.sources.sapBdcSalesOrder;
publish("custom_sales_performance", {
type: "table",
}).query(
(ctx) => `
SELECT
cust.customer_id,
orders.sales_order_id,
orders.amount
FROM ${ctx.ref(customerSource.datasetId, customerSource.tableName)} AS cust
JOIN ${ctx.ref(salesOrderSource.datasetId, salesOrderSource.tableName)} AS orders
ON cust.customer_id = orders.customer_id
`
);