逻辑视图和物化视图概览

BigQuery 支持两种类型的视图:逻辑(标准)视图和物化视图。这两种视图共享一个通用查询接口,但在底层机制、性能和费用方面有所不同。本文档比较了每种类型的特征、优势和限制,以帮助您为工作负载选择合适的视图。

逻辑视图

逻辑(标准)视图是由 SQL 查询定义的虚拟表。它不存储任何物理数据。而是存储从底层基表检索数据所需的查询逻辑。查询逻辑视图时,BigQuery 查询引擎会将视图展开为其底层查询。此过程意味着 BigQuery 每次调用视图时都会重新执行该视图。

逻辑视图具有以下优势:

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

物化视图

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

BigQuery 物化视图将预计算数据的速度与实时视图的准确性相结合。他们通过以下方式实现这一目标:

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

逻辑视图和物化视图的比较

虽然逻辑视图是默认视图类型,但如果您经常查询大型或计算开销很大的视图,则应考虑创建具体化视图。逻辑视图是虚拟的,并提供了对一组数据的可重复使用引用,但不会实际存储任何数据。物化视图使用 SQL 定义(与逻辑视图一样),但会实际存储数据供 BigQuery 使用以提升性能。

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

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

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

何时使用逻辑视图

  • 语义分层。将复杂的列名称重命名为适合非技术用户的业务术语。
  • 快速开发。当逻辑处于变化状态且您不想管理物理存储的开销时,请使用此选项。
  • 整合的数据源。为可视化工具(例如数据洞察或 BigQuery Sharing [以前称为 Analytics Hub])提供数据源。

何时使用物化视图

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

已获授权的视图

您还可以创建授权视图,以便将源数据集中的部分数据共享到次要数据集中的视图。然后,您可以将此视图共享给可以查看您共享的数据并对其运行查询的特定用户和群组(主账号),但这些用户和群组无法直接访问源数据集。

您可以为逻辑视图或物化视图创建授权视图。具体化视图的授权视图称为授权物化视图。

最佳做法

对于架构良好的 BigQuery 环境,逻辑视图是整合所需数据的有用工具。保留物化视图,用作涉及大量聚合的特定高流量查询模式的性能优化工具。

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

后续步骤