SAP Datasphere 联合查询

作为数据分析师,您可以使用联合查询从 BigQuery 查询 SAP Datasphere 中的关系型数据。

借助 BigQuery SAP Datasphere 联合,BigQuery 能够实时查询驻留在 SAP Datasphere 中的数据,而无需复制或移动数据。

如需在 SAP Datasphere 中运行 SQL 查询,请在 EXTERNAL_QUERY 函数中指定 BigQuery 中的该 SQL 查询。随后,系统会将结果从 SAP Datasphere 转移到 BigQuery。

限制

  • 您只能查询公开供使用的关系型视图。通过 EXTERNAL_QUERY 联合的查询将无法访问 SAP Datasphere 中的其他对象。
  • 与 SAP Datasphere 的连接可以从属于 Google Cloud 的任何外部 IP 地址建立,并且该 IP 地址可能会随时间而变化。因此,您必须在 SAP Datasphere 中将所有 Google Cloud 外部 IP 地址添加到许可名单
  • 如果直接在 SAP Datasphere 中执行联合查询,其延迟时间可能会明显长于相同的查询。
  • 在给定项目中使用 SAP Datasphere 连接的第一个查询可能需要超过一分钟的运行时间。
  • SAP Datasphere 不支持其他 SQL 下推
  • SAP Datasphere SQL 查询必须指定包含函数结果的列的别名。
  • 当查询项目中 Compute Engine API 的使用受 VPC Service Controls 的限制时,联合查询将失败。

准备工作

确保您的 BigQuery 管理员已创建 SAP Datasphere 连接并与您共享

所需的角色

如需获得查询 SAP Datasphere 所需的权限,请让管理员为您授予该项目的 BigQuery Connection User (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 价格,请参阅价格

后续步骤