逻辑视图和物化视图概览

本文档介绍了 BigQuery 中的逻辑视图和具体化视图,并对两者进行了比较。在现代数据仓储中,视图充当原始数据和商业智能之间重要的抽象层。在 BigQuery 中,架构师通常会在两种类型的视图之间进行选择:逻辑(标准)视图和具体化视图。虽然这些视图共享一个通用界面,但其底层机制、性能配置文件和费用影响各不相同。

逻辑视图

逻辑(标准)视图是由 SQL 查询定义的虚拟表。它不存储任何物理数据,而是存储从底层基表中检索数据所需的查询逻辑。

当您查询逻辑视图时,BigQuery 查询引擎会将该视图展开为基础查询。此过程意味着,每次调用视图时,BigQuery 都会重新执行该视图。

逻辑视图具有以下优势:

  • 无存储开销。由于未存储任何额外数据,您只需为基表的存储空间付费。
  • 实时准确性。由于查询在执行时运行,因此结果始终反映基表的最新状态。
  • 逻辑抽象。简化复杂的联接或应用行级安全性,而无需复制数据。
  • SQL 灵活性。支持全方位的 BigQuery SQL,包括复杂的窗口函数、用户定义的函数 (UDF) 和所有联接类型。

具体化视图

物化视图是预计算视图,可定期存储 SQL 查询的结果。与逻辑视图不同,它们会实际存储计算出的数据,这让 BigQuery 可以更快地提供结果,而无需重复处理原始基础数据。通过预处理查询,可以缩短大型数据集的查询延迟时间,并降低常用查询的计算费用。

BigQuery 具体化视图兼具预计算数据的速度和实时视图的准确性。它们通过以下方式实现这一目标:

  • 自动刷新。当基表发生变化时,后台进程会更新具体化视图。
  • 数据新鲜度。如果在等待后台刷新时执行查询,BigQuery 会自动补偿未处理的基表更改,以提供最新结果。
  • 智能调整。如果查询优化器确定具体化视图可以更高效地提供答案,则可自动将查询从基表重新路由到具体化视图。

比较

下表汇总了 BigQuery 逻辑视图和物化视图之间的异同:

维度 逻辑视图 物化视图
数据持久性 无(虚拟) 物理(存储在磁盘上)
执行 每次调用视图时 预计算;后台刷新
数据过时程度 从不 可选 1 (通过刷新)
效果 变量(取决于基本表) 稳定且快速
SQL 复杂程度 无限制 受限
优化目标 安全性和抽象化 速度和成本降低
维护和存储费用

1 在处理频繁更改的大型数据集时,--max_staleness 选项能够以可控的成本提升查询性能。

何时使用逻辑视图

  • 语义分层。将复杂的列名称重命名为非技术用户也能理解的业务术语。
  • 快速开发。当逻辑处于变动状态,并且您不想管理物理存储的开销时,请使用此模式。
  • 整合的数据源。为 Looker StudioBigQuery Sharing(以前称为 Analytics Hub)等可视化工具提供数据源。

何时使用具体化视图

  • 预处理数据。通过准备聚合、过滤条件、联接和聚簇来提高查询性能。
  • 信息中心加速。支持 Looker 等经常查询相同汇总指标(例如日活跃用户数)的 BI 工具。
  • 对大型数据流进行实时分析。可针对接收高速流式数据的表提供更快的响应速度。
  • 费用管理。降低对大型数据集进行重复性高成本查询的费用。

最佳做法

对于架构完善的 BigQuery 环境,逻辑视图是整合所需数据的实用工具。预留具体化视图,以用作性能优化工具,用于涉及大量聚合的特定高流量查询模式。

如需了解如何监控具体化视图的使用情况和性能,请参阅 MATERIALIZED_VIEWS 视图

后续步骤