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 中执行联合查询,其延迟时间可能会明显长于相同的查询。
- 在给定项目中使用 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 价格,请参阅价格。