AlloyDB 对 BigQuery 中实时数据的访问权限概览

如需对分析数据和运营数据运行实时查询,而无需构建复杂的流水线,您可以在 AlloyDB for PostgreSQL 中使用湖仓一体联合。借助 bigquery_fdw 扩展程序,AlloyDB 可将您的查询路由到 BigQuery,以便通过 BigLake 外部表访问实时数据和 Apache Iceberg 等开放格式,从而无需进行复杂的 ETL(提取、转换、加载)迁移。

湖仓一体联邦的优势

Lakehouse 联合方法具有以下优势:

  • 零 ETL:直接查询分析数据,无需构建或维护复杂的流水线。
  • 熟悉的语法:使用标准 PostgreSQL 语法查询 BigQuery 数据。
  • 实时数据分析:在操作表旁边访问最新数据。
  • 分流计算:通过下推优化,使用 BigQuery 分布式引擎处理繁重的工作。
  • 授权访问:为确保只有获得授权的服务账号才能查询外部数据,请使用 Identity and Access Management (IAM) 进行集中式访问权限控制。

使用场景

湖仓一体联邦支持以下业务和技术应用场景:

  • 混合事务和分析处理 (HTAP) 工作负载:您可以同时查询 AlloyDB 中的实时运营数据以及 BigQuery 或 Cloud Storage 中的历史或分析数据,而不会影响事务性能。
  • 无需脆弱流水线即可获得实时数据分析:您可以避免传统 ETL 流程的延迟和故障模式。即时访问最新分析数据,根据最新信息做出业务决策。
  • 为 Agentic Workflows 实现数据具体化:您可以将外部分析数据具体化到 AlloyDB 中,以使用 AlloyDB 列式引擎和 AlloyDB AI 能力。这样,您就可以对联合数据执行高性能 Vector Search、机器学习嵌入和高级 AI 驱动的 Agentic Workflows。

架构和数据流

下图展示了使用湖仓一体联合时的数据流和组件交互:

此图展示了 Lakehouse 联合的架构,描绘了 AlloyDB 与 BigQuery 之间通过下推优化实现的数据流。
图 1. 湖仓一体联合的架构和数据流

下面介绍了 AlloyDB 中湖仓一体联邦的数据流过程:

  1. 查询提交:您向 AlloyDB 实例提交标准 PostgreSQL 查询。
  2. 查询规划和优化:AlloyDB 查询规划器会使用 BigQuery 外部数据封装容器 (FDW) 识别映射到外部 BigQuery 数据集的表。
  3. 下推优化:AlloyDB 通过将特定过滤条件和聚合直接下推到 BigQuery 来优化查询。这样可以确保网络仅传输相关的、经过过滤的行或预先汇总的摘要。
  4. 执行和检索:BigQuery 执行其查询部分(直接扫描 BigQuery 内置存储或读取存储在 Cloud Storage 中的 Apache Iceberg 表),并将生成的数据集流式传输回 AlloyDB。
  5. 最终处理和响应:AlloyDB 将外部数据与任何本地运营表合并,完成所有剩余的查询处理,并将最终结果返回给您的应用。

联合查询的数据类型注意事项

当您使用 Lakehouse 联合查询从 AlloyDB 查询外部 BigQuery 表时,AlloyDB 查询规划器会将 BigQuery 数据类型解释为相应的 PostgreSQL 数据类型。了解这些映射对于编写正确的查询以及 bigquery_fdw 扩展程序使用的外部表定义至关重要。

如果 BigQuery 数据类型没有直接映射或需要特殊处理,您可能需要在查询中使用显式 CAST 函数,或在 BigQuery 中创建以兼容类型呈现数据的视图。

如需查看受支持的数据类型及其对应的 PostgreSQL 类型,请参阅数据类型映射。

安全性和访问权限控制

从 AlloyDB 访问 BigQuery 数据是通过 IAM 进行管理的。您必须向 AlloyDB 集群服务账号授予特定 IAM 角色,以定义可以查询的数据集和表。这有助于确保联合查询遵循组织的集中式数据治理政策,同时不影响安全性。如需了解详情,请参阅必需的角色。

下推式广告素材

您可以使用过滤和聚合下推技术,在 BigQuery 中过滤或汇总数据,然后再由 AlloyDB 移动或处理数据,从而加快查询速度并降低成本。这种方法可最大限度地减少网络流量和内存用量,让您能够快速高效地分析海量数据集,而不会超出资源限制。

过滤条件向下推送

过滤条件下推(也称为谓词下推)是一种优化技术,通过将查询过滤条件(使用 WHERE 子句)从 AlloyDB 下推到 BigQuery,将数据过滤尽可能移至存储层。

借助过滤条件向下推送,您可以使用带有 WHERE 子句的 SQL 查询来访问远程表中的数据子集。这些数据也可以在本地表中具体化,或作为本地分区附加到 PostgreSQL 表。

支持过滤条件向下推送的操作包括:

  • 标准比较运算符:=、<、>、<=、>=、<>
  • 逻辑运算符:AND、OR 和 NOT
  • 模式匹配:LIKE 和 NOT LIKE
  • Null 检查:IS NULL 和 IS NOT NULL

聚合下推

聚合下推是一种高级数据库优化,可尽可能靠近存储层执行计算(例如 SUM、COUNT、AVG 或 GROUP BY)。此下推操作会直接在 BigQuery 中评估汇总函数,这可以显著减少返回到 AlloyDB 的行数。

支持聚合下推的操作包括:

  • SUM
  • COUNT
  • AVG
  • MIN
  • MAX

限制下推

限制下推(包括 OFFSET 下推)是一种优化技术,可将查询的 LIMIT 和 OFFSET 子句从 AlloyDB 移至 BigQuery。

这样,BigQuery 就可以仅返回所请求的特定行子集,从而显著减少网络流量并缩短查询延迟时间。

系统会尽可能自动应用限制下推。确保满足以下条件:

  • 该查询未在 FETCH FIRST 子句中使用 WITH TIES 选项。
  • LIMIT 和 OFFSET 表达式是基本常量或可远程求值的表达式。

BigQuery 费用和结算

BigQuery 外部数据封装容器依赖于以下各项:

  • BigQuery 计算价格
  • BigQuery Storage API 价格

如需了解相关信息,请参阅 BigQuery 价格。

运行时项目

在 BigQuery 中,您可以将数据存储在一个项目中,并在另一个项目中执行查询。执行查询并产生计算费用的项目称为运行时项目(或结算项目)。

通过将运行时项目与数据存储区项目分开,您可以将计算费用隔离到特定费用中心,独立管理配额,并控制不同工作负载的支出,而无需移动底层数据。

将 AlloyDB 配置为访问 BigQuery 数据时,您可以在服务器级层(应用于所有关联的外表)或单个表级层指定运行时项目。如果您未指定运行时项目,AlloyDB 默认会使用拥有数据的项目。

限制

  • AlloyDB 和 BigQuery 可能会使用不同的默认排序规则,这可能会导致两个系统之间的数据排序或字符串比较结果不同。例如,在排序期间,PostgreSQL 15、16 和 17 版中的默认排序规则处理大小写敏感性的方式可能与 BigQuery 的默认排序规则不同,后者会严格根据字符串的 Unicode 码位来评估字符串。

    对于在 BigQuery 上远程执行的查询的任何部分,排序规则遵循 BigQuery 的设置。为减少排序规则冲突,请考虑在 AlloyDB 中使用不带 ICU 的 C.UTF-8 排序规则,并在 BigQuery 中使用默认(空)排序规则。

  • 下推后,从 BigQuery 返回大量数据的查询不会进行优化。

  • 创建外部表时,AlloyDB 不会主动验证远程 BigQuery 表是否存在或其架构。

  • 如果联合查询需要读取大量数据(例如,无法应用过滤条件向下推送),则查询可能会因 BigQuery API 响应大小限制而失败。BigQuery 响应大小上限仍然适用。如需详细了解这些限制,请参阅配额和限制。

  • PostgreSQL 和 BigQuery 处理十进制精度、除法和中间计算的方式不同。这些差异可能会导致在复杂计算过程中出现舍入变化、精度损失或溢出错误。如需了解详情,请参阅十进制类型和算术运算符。

  • Database Migration Service 不支持迁移使用 bigquery_fdw 扩展程序创建的外部表。作为权宜解决方法,您可以从迁移作业中排除外部表,也可以在开始迁移之前将其删除,然后在迁移完成后在目标 AlloyDB 集群上重新创建。

  • 使用 bigquery_fdw 扩展程序查询外部表时,BigQuery 会根据 AlloyDB 集群服务账号评估数据访问权限。即使数据库用户使用 IAM 数据库身份验证登录,系统也不会根据远程 BigQuery 表检查其个人 IAM 用户权限。如需了解相关信息,请参阅为 AlloyDB 授予对 BigQuery 数据集的访问权限。

后续步骤