何时使用 REPLACE WHERE 与物化视图

REPLACE WHERE 流和独立物化视图都允许你维护在源数据更改时保持最新状态的派生表,但它们解决了不同的问题。 对于定期覆盖时间范围或分区的批处理提取、转换和加载(ETL)工作负荷,请使用增量 REPLACE WHERE 流。 使用实体化视图作为查询加速层,将预计算结果提供给仪表盘和报告。

本页涵盖独立的流媒体表和物化视图。 有关 Lakeflow 管道中的 REPLACE WHERE 流,请参阅 使用 REPLACE WHERE 流进行批处理。

对批处理覆盖使用 REPLACE WHERE

REPLACE WHERE flow重新计算并仅覆盖与谓词匹配的行,例如时间窗口或分区。 其他所有行保持原样。 由于流程仅针对该谓词范围重新评估源查询,每次刷新的成本取决于范围大小,而非表的大小。

物化视图保持其定义查询的完整结果。 Azure Databricks 在查询和源数据支持时,会增量刷新物化视图,否则会执行完整刷新。 刷新是否为增量取决于查询结构和源表,因此每次刷新的成本更难预测。 请参阅如何刷新独立的物化视图?

对于在有限范围内变化的批处理 ETL 数据模型,REPLACE WHERE 流允许你准确控制每次刷新重写的行。 当读者需要快速访问预计算结果时,物化视图更为适用。

将构造映射到奖章层

下表将 奖牌架构 的每一层映射到 Databricks 推荐的构造:

层 构造 为什么
青铜(原始数据摄取) 使用 Lakeflow Connect 或 Auto Loader 进行摄取 将原始记录在到达时增量地落地,而不重新处理历史数据。
银(相关信息) 增量 REPLACE WHERE 流程 仅覆盖受影响的时间窗口或分区,用于事实表更新、迟到数据和更正。
银(尺寸) AUTO CDC 流 自动应用插入、更新和删除语义,并以缓慢变化的维度(SCD)类型1或类型2保存历史。
黄金(聚合和数据模型) 增量 REPLACE WHERE 流程 仅重算聚合和模型的谓词范围,避免全表重算。
查询加速与提供服务 具体化视图 将预计算结果提供给仪表盘和报告,并保持查询结果的更新。

决策指南

请参考以下指南,在这两种构造中做出选择。

在以下情况下使用 REPLACE WHERE 流:

  • 定期对某个时间窗口或分区进行批处理覆盖。

  • 更正延迟到达的数据。

  • 对限定范围应用合规性删除。

  • 在分区层刷新数据。

在以下情况下使用物化视图:

  • 加速仪表盘查询。

  • 向读者提供预先计算好的聚合数据。

  • 使服务层的查询结果保持最新。

示例:使用 REPLACE WHERE 进行增量覆盖

以下示例定义了一个目标表,每次刷新时只覆盖最近7天的数据。 刷新过程中,流程删除与谓词匹配的行,重新计算该区间的源查询,并插入结果。 窗口外的行保持不变:

CREATE OR REFRESH STREAMING TABLE payments_latest
FLOW REPLACE WHERE payment_date >= date_add(current_date(), -7) BY NAME
SELECT payment_id, booking_id, status, payment_date
FROM samples.wanderbricks.payments;

BY NAME 是必需的,以便按列名而非按位置进行匹配。 有关完整语法、谓词覆盖、回填和增量刷新行为,请参阅 独立流式处理表的 REPLACE WHERE 流。

其他资源