管道如何更新?

管道更新运行时,它会刷新管道中定义的具体化视图和流式处理表,以便其结果反映源数据的当前状态。 数据集刷新的方式取决于数据集的类型和刷新类型。 有关如何触发和管理更新,请参阅 运行管道更新

刷新类型

默认情况下,管道中的每个物化视图和流式表都会在每次更新时刷新。 下表总结了每个刷新类型的行为方式:

更新类型 具体化视图 流式处理表
刷新(默认值) 更新结果以反映定义查询的当前结果。 Azure Databricks检查成本,并在其效率更高时执行增量刷新。 通过流式处理表和流中定义的逻辑处理新记录。
完全刷新 重新计算结果以反映定义查询的当前结果。 从流表中清除数据、清除流中的检查点,并重新处理数据源中的所有记录。
重置流式处理流检查点 不适用于具体化视图。 从流中清除检查点,但不清除流表中的数据,然后重新处理数据源中的所有记录。

刷新(默认值)

默认刷新会更新数据集,以反映其定义查询的当前结果。

流式处理表本质上是增量的。 流式表刷新仅评估自上次更新后到达的记录,并根据表的当前定义将其追加到表中。 不会重新处理旧记录,因此不会应用影响已写入数据的更改。 换句话说,流式表的默认刷新是以牺牲数据正确性为代价来降低时间和资源成本。 若要重新处理较早的数据,请执行完全刷新或重置流程检查点。

具体化视图会尝试进行增量刷新,但在必要时重新处理所有记录,使表保持完全准确。 物化视图可通过以下两种方法之一进行刷新:

  • 增量刷新 标识自上次更新以来的更改,并仅合并新的或修改的数据。
  • 全量刷新会执行整个查询,并在无法进行增量刷新或增量刷新成本效益不高时替换现有数据。

默认情况下,Azure Databricks使用成本模型来选择更具成本效益的方法。 可以使用刷新策略替代此选项。 有关增量刷新的语义、要求和支持的 SQL,请参阅 具体化视图的增量刷新

完全刷新

完全刷新会按照定义数据集的逻辑,对源数据中的所有记录重新进行处理:

  • 对于具体化视图,完全刷新会重新计算整个结果。 由于具体化视图始终返回与批处理查询相同的结果,因此默认刷新和完全刷新将生成相同的数据。
  • 对于流式表,全量刷新会截断该表,清除其各个流的流式检查点,并从源重新处理每条记录。

由于完全刷新会重新处理所有源数据,因此时间和成本会随该数据的大小一起缩放。 Databricks 建议仅在必要时运行完全刷新,例如定义或架构更改与现有数据不兼容时。 如果源不再保留原始数据(例如,Kafka 主题已超过其保留期限),则对流式表执行完全刷新可能会导致记录丢失。

有关何时以及如何运行流式处理表的完全刷新,请参阅 流式处理表的完全刷新

重置检查点

重置检查点只适用于流式表。 它清除所选流的流检查点,而无需清除已写入流式处理表的数据,然后通过这些流重新处理源中的所有记录。 与完全刷新不同,现有表数据将保留。

如果您想针对所选流重新处理某个流式源,例如在更改某个流的逻辑后,且不截断该表,请使用此选项。

检查点重置这一操作通过 Lakeflow Spark 声明式管道 REST API 发起。 有关步骤,请参阅 “启动管道更新”以清除选择性流检查点

其他资源