SAP Datasphere 聯合查詢

BigQuery 的聯合查詢功能可讓您即時查詢 SAP Datasphere 中的關聯資料,不必複製或移動資料。如要在 SAP Datasphere 中執行查詢,請在 BigQuery 的 EXTERNAL_QUERY 函式中指定 SQL 查詢,將結果從 SAP Datasphere 轉移至 BigQuery。

限制

  • 您只能查詢公開供使用的關聯檢視表。透過 EXTERNAL_QUERY 聯合執行的查詢無法存取 SAP Datasphere 中的其他物件。
  • 相較於直接在 SAP Datasphere 執行的相同查詢,聯合查詢的延遲時間可能明顯較長。
  • 在特定專案中,使用 SAP Datasphere 連線的第一項查詢可能需要超過一分鐘才能執行。
  • SAP Datasphere 不支援其他 SQL 下推。
  • SAP Datasphere SQL 查詢必須為包含函式結果的資料欄指定別名。
  • 如果 VPC Service Controls 限制查詢專案使用 Compute Engine API,聯合查詢就會失敗。

事前準備

確認 BigQuery 管理員已建立 SAP Datasphere 連線,並與您共用。

必要的角色

如要取得查詢 SAP Datasphere 所需的權限,請要求管理員授予您專案的 BigQuery 連線使用者 (roles/bigquery.connectionUser) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

查詢資料

如要從 GoogleSQL 查詢傳送聯合查詢至 SAP Datasphere,請使用 EXTERNAL_QUERY 函式。

以下範例是聯合查詢,會彙整 SAP Datasphere 中名為 ORDERS 的資料表,以及 BigQuery 中名為 mydataset.customers 的資料表。

SELECT c.customer_id, c.name, rq.first_order_date
FROM mydataset.customers AS c
LEFT OUTER JOIN EXTERNAL_QUERY(
  'connection_id',
  '''SELECT CUSTOMER_ID, MIN(ORDER_DATE) AS first_order_date
     FROM ORDERS
     GROUP BY CUSTOMER_ID''') AS rq
  ON rq.customer_id = c.customer_id
GROUP BY c.customer_id, c.name, rq.first_order_date;

查看 SAP Datasphere 資料表結構定義

下列範例使用 EXTERNAL_QUERY 函式,從 SAP Datasphere 的 SYS 結構定義擷取資料庫中繼資料。

-- List all views in a schema.
SELECT * FROM EXTERNAL_QUERY(
  'connection_id',
  '''SELECT VIEW_NAME FROM SYS.VIEWS
     WHERE SCHEMA_NAME = 'MY_SCHEMA'''');
-- List all columns in a view.
SELECT * FROM EXTERNAL_QUERY(
  'connection_id',
  '''SELECT COLUMN_NAME, DATA_TYPE_NAME
     FROM SYS.VIEW_COLUMNS
     WHERE SCHEMA_NAME = 'MY_SCHEMA' AND
           VIEW_NAME = 'my_view'
     ORDER BY POSITION''');

定價

執行聯合查詢的費用取決於下列三項因素:

  • 在 SAP Datasphere 執行查詢的運算費用。
  • 將查詢結果從 SAP Datasphere 轉移至 BigQuery 的頻寬費用。
  • 在 BigQuery 執行查詢的運算費用。

SAP Datasphere 相關費用取決於您使用的 SAP 服務類型。為限制頻寬費用,建議您在 EXTERNAL_QUERY 中編寫查詢,排除所有不需要用來計算最終結果的資料欄和資料列。

在 BigQuery 執行聯合查詢不會產生額外費用。如要進一步瞭解 BigQuery 定價,請參閱「定價」。

後續步驟