何时使用 REPLACE WHERE 与具体化视图

REPLACE WHERE 流程和独立的物化视图都允许你维护在源数据发生变化时仍保持最新的派生表,但它们解决的问题不同。 对于大多数周期性覆盖时间窗口或分区的批量提取、转换和加载(ETL)工作负载,使用增量 REPLACE WHERE 流程。 使用实体化视图作为查询加速层,将预计算结果提供给仪表盘和报告。

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

使用 REPLACEWHERE 进行批量覆盖

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

物化视图保持其定义查询的完整结果。 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 是必需的,以便按列名而非按位置进行匹配。 有关完整语法、谓词覆盖、回填和增量刷新行为,请参阅用于独立流式表的 REPLACEWHERE 流。

其他资源