逻辑视图和物化视图概览
本文档介绍了 BigQuery 中的逻辑视图和物化视图,并对二者进行了比较。在现代数据仓储中,视图是原始数据和商业智能之间重要的抽象层。在 BigQuery 中,架构师通常会在两种类型之间进行选择:逻辑(标准)视图和物化视图。虽然这些视图共享一个通用接口,但其底层机制、性能配置文件和费用影响各不相同。
逻辑视图
逻辑(标准)视图是由 SQL 查询定义的虚拟表。它不存储任何物理数据。相反,它存储从底层基表中检索数据所需的查询逻辑。当您查询逻辑视图时,BigQuery 查询引擎会将该视图展开到其底层查询中。 此过程意味着 BigQuery 每次调用该视图时都会重新执行它。
逻辑视图的优势包括:
- 无存储开销。由于不存储任何额外数据,因此您只需为基表的存储付费。
- 实时准确性。由于查询在执行时运行,因此结果始终反映基表的最新状态。
- 逻辑抽象。简化复杂的联接或应用行级安全性,而无需复制数据。
- SQL 灵活性。支持全方位的 BigQuery SQL,包括复杂的窗口函数、用户定义函数 (UDF) 和所有联接类型。
物化视图
物化视图是预计算视图,可定期存储 SQL 查询的结果。与逻辑视图不同,它们会实际存储计算出的数据,这让 BigQuery 能够更快地提供结果,而无需重复处理原始基数据。这可以通过预处理查询来减少大型数据集的查询延迟,并可以减少常用查询的计算费用。
BigQuery 物化视图将预计算数据的速度与实时视图的准确性相结合。它们通过以下方式实现此目的:
- 自动刷新。当基表发生更改时,后台进程会更新物化视图。
- 数据新鲜度。如果在后台刷新待处理时发生查询,BigQuery 会自动补偿未处理的基表更改,以提供最新结果。
- 智能调优。如果查询优化器确定具体化视图可以更高效地提供答案,则可以自动将查询从基表重新路由到具体化视图。
逻辑视图和物化视图的比较
虽然逻辑视图是默认的视图类型,但如果您经常查询大型或计算开销很大的视图,则应考虑创建具体化视图。逻辑视图是虚拟的,并提供了对一组数据的可重复使用引用,但不会实际存储任何数据。物化视图使用 SQL 定义(与逻辑视图一样),但会实际存储数据供 BigQuery 使用以提升性能。
下表汇总了 BigQuery 逻辑视图和物化视图之间的异同:
| 维度 | 逻辑视图 | 物化视图 |
|---|---|---|
| 数据持久性 | 无(虚拟) | 物理(存储在磁盘上) |
| 执行 | 每次调用视图时 | 预计算;后台刷新 |
| 数据过时 | 从不 | 可选 1 (通过刷新) |
| 性能 | 可变(取决于基表) | 一致且快速 |
| SQL 复杂性 | 无限制 | 受限 |
| 优化目标 | 安全性和抽象 | 速度和费用降低 |
| 维护和存储费用 | 无 | 有 |
1 在处理频繁更改的大型数据集时,--max_staleness 选项
能够以可控的成本提高查询性能。
何时使用逻辑视图
- 语义分层 。将复杂的列名称重命名为非技术用户易于理解的术语。
- 快速开发 。当逻辑处于变化状态且您不想管理物理存储的开销时使用。
- 整合的数据源 。为直观呈现工具 (例如 数据洞察 或 BigQuery Sharing(以前称为 Analytics Hub))提供数据源。
何时使用物化视图
- 预处理数据 。通过准备汇总、过滤条件、联接和聚簇来提高查询性能。
- 信息中心加速 。为经常查询相同汇总指标(例如日活跃用户数)的 BI 工具(例如 Looker)提供支持。
- 对大型流进行实时分析 。可以更快地响应接收高速流式数据的数据表。
- 费用管理 。降低对大型数据集进行重复、昂贵查询的费用。
已获授权的视图
您还可以创建 授权视图,以便将源数据集中的部分数据共享到次要数据集中的视图。然后,您可以将此视图共享给可以查看您共享的数据并对其运行查询的特定用户和群组(主账号),但这些用户和群组无法直接访问源数据集。
您可以为逻辑视图或具体化视图创建授权视图。具体化视图的授权视图称为 已获授权的物化视图。
最佳实践
对于架构完善的 BigQuery 环境,逻辑视图 是一种用于整合所需数据的实用工具。请将 物化视图 用作性能优化工具,用于涉及大量汇总的特定高流量查询模式。
如需了解如何监控物化视图的使用情况和性能,请参阅 MATERIALIZED_VIEWS 视图。