如需在不构建复杂流水线的情况下,同时运行分析数据和运营数据的实时查询,您可以在 AlloyDB for PostgreSQL 中使用湖仓一体联邦。借助 bigquery_fdw 扩展程序,AlloyDB 会将您的查询路由到 BigQuery,以通过 BigLake 外部表访问实时数据和 Apache Iceberg 等开放格式,从而无需进行复杂的 ETL(提取、转换、加载)迁移。
湖仓一体联邦的优势
数据湖仓联邦方法具有以下优势:
- 零 ETL:直接查询分析数据,无需构建或维护复杂的流水线。
- 熟悉的语法:使用标准 PostgreSQL 语法查询 BigQuery 数据。
- 实时数据分析:在运营表旁边访问最新数据。
- 分流计算:通过下推优化,使用 BigQuery 分布式引擎执行繁重的工作。
- 授权访问:为确保只有经过授权的服务账号才能查询外部数据,请使用 Identity and Access Management (IAM) 进行集中式访问权限控制。
使用场景
湖仓一体联邦支持以下业务和技术用例:
- 混合事务处理和分析处理 (HTAP) 工作负载:您可以同时查询 AlloyDB 中的实时运营数据以及 BigQuery 或 Cloud Storage 中的历史数据或分析数据,而不会影响事务处理性能。
- 无需使用脆弱的流水线即可获得实时数据分析:您可以避免传统 ETL 流程的延迟和故障模式。即时访问最新的分析数据,根据最新信息做出业务决策。
- 针对智能体工作流程的数据具体化:您可以将外部分析数据具体化到 AlloyDB 中,以使用 AlloyDB 列式引擎和 AlloyDB AI 功能。这可在您的联邦数据上实现高性能向量搜索、机器学习嵌入和高级 AI 驱动的智能体工作流。
架构和数据传输
下图显示了使用数据湖仓联邦时的数据流和组件交互:
下面介绍了 AlloyDB 中湖仓一体联邦的数据流过程:
- 提交查询:您向 AlloyDB 实例提交标准 PostgreSQL 查询。
- 查询规划和优化:AlloyDB 查询规划器使用 BigQuery 外部数据封装容器 (FDW) 识别映射到外部 BigQuery 数据集的表。
- 下推优化:AlloyDB 通过将特定过滤条件和聚合直接下推到 BigQuery 来优化查询。这样可确保网络仅传输相关的过滤后行或预汇总摘要。
- 执行和检索:BigQuery 执行查询的相应部分,直接扫描 BigQuery 内置存储空间或读取存储在 Cloud Storage 中的 Apache Iceberg 表,并将结果数据集流式传输回 AlloyDB。
- 最终处理和响应:AlloyDB 将外部数据与任何本地运营表相结合,完成任何剩余的查询处理,并将最终结果返回给您的应用。
联合查询的数据类型注意事项
当您使用数据湖联邦从 AlloyDB 查询外部 BigQuery 表时,AlloyDB 查询规划器会将 BigQuery 数据类型解读为相应的 PostgreSQL 数据类型。了解这些映射对于编写正确的查询以及 bigquery_fdw 扩展程序使用的外部表定义至关重要。
如果 BigQuery 数据类型没有直接映射或需要特殊处理,您可能需要在查询中使用显式 CAST 函数,或者在 BigQuery 中创建一个视图,以使用兼容的类型呈现数据。
如需查看支持的数据类型及其对应的 PostgreSQL 类型,请参阅数据类型映射。
安全性和访问权限控制
通过 IAM 管理从 AlloyDB 对 BigQuery 数据的访问权限。您必须向 AlloyDB 集群服务账号授予特定的 IAM 角色,以定义可以查询哪些数据集和表。这有助于确保联合查询在不影响安全性的前提下,遵循组织集中式数据治理政策。如需了解详情,请参阅必需的角色。
下推式
您可以使用过滤和汇总下推技术,通过在数据被 AlloyDB 移动或处理之前在 BigQuery 中过滤或汇总数据,来加快查询速度并降低费用。这种方法可最大限度地减少网络流量和内存使用量,让您能够快速高效地分析海量数据集,而不会超出资源限制。
过滤下推
过滤条件推送(也称为谓词下推)是一种优化技术,通过将查询过滤条件(使用 WHERE 子句)从 AlloyDB 下推到 BigQuery,尽可能将数据过滤移到存储层附近。
借助过滤下推,您可以使用带有 WHERE 子句的 SQL 查询来访问远程表中的部分数据。此数据也可以在本地表中具体化,或作为本地分区附加到 PostgreSQL 表中。
支持的过滤下推操作包括:
- 标准比较运算符:
=、<、>、<=、>=、<> - 逻辑运算符:
AND、OR和NOT - 模式匹配:
LIKE和NOT LIKE - null 检查:
IS NULL和IS NOT NULL - 列表内评估:
IN和NOT IN
汇总下推
聚合下推是一种高级数据库优化技术,可尽可能接近存储层执行计算(例如 SUM、COUNT、AVG 或 GROUP BY)。这种下推直接在 BigQuery 中评估汇总函数,从而可以显著减少返回到 AlloyDB 的行数。
支持的汇总下推操作包括:
SUMCOUNTAVGMINMAX
限制下推式广告
下推限制(包括 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 可能会使用不同的默认排序规则,这可能会导致两个系统之间的数据排序或字符串比较结果有所不同。例如,版本 15、16 和 17 中的默认 PostgreSQL 排序规则在排序期间处理区分大小写的方式可能与 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 数据集的访问权限。