שילוב וסנכרון של מוצרי נתונים של 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 ללא תקורה של העתקה, ולהפנות אליהם במוצרי נתונים אנליטיים מותאמים אישית במורד הזרם. הרכיבים העיקריים של השילוב הזה הם:

  1. שאילתות מאוחדות: מוצרי נתונים שפורסמו ב-SAP BDC נחשפים באמצעות נקודות קצה מאובטחות של Delta Sharing. ‫BigQuery מאחד שאילתות לנקודות הקצה האלה באמצעות Google Cloud חיבור לקטלוג של זמן הריצה של Lakehouse.
  2. רישום קטלוג: ב-Cortex Framework רושמים את קטלוג SAP BDC באמצעות מודול מסוג delta_share בקטע data.modules.catalogs ב-config/config.yaml.
  3. קישורי נתונים של 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
  `
);