运行管道更新

管道更新启动群集,验证源代码,并刷新管道中定义的表和视图。 可以按计划或以编程方式手动触发更新。

什么是管道更新?

创建管道并准备好运行后,可以开始更新。 管道更新执行以下操作:

  • 使用正确的配置启动群集。
  • 发现所有定义的表和视图,并检查任何分析错误,例如无效的列名、缺少依赖项和语法错误。
  • 使用最新的可用数据创建或更新表和视图。

使用 试运行,可以检查管道源代码中的问题,而无需等待创建或更新表。 此功能在开发和测试管道时非常有用,因为它允许你在管道中查找和修复错误,例如不正确的表或列名称。

管道更新是如何触发的?

使用以下选项之一启动管道更新:

更新触发器 详细信息
Manual 可以从 Lakeflow 管道编辑器或管道列表手动触发管道更新。 请参阅 手动触发管道更新
Scheduled 可以使用作业计划管道的更新。 请参阅作业的管道任务
Programmatic 可以使用第三方工具、API 和 CLIs 以编程方式触发更新。 请参阅工作流中运行管道管道 REST API

手动触发管道更新

使用以下选项之一手动触发管道更新:

  • 从 Lakeflow 管道编辑器运行完整的管道或管道子集(单个源文件或单个表)。 有关详细信息,请参阅 运行管道代码
  • Jobs & Pipelines 列表中运行全流程流水线。 在列表中与管道同一行中单击播放图标。
  • 在管道监视页中,单击 “LDP 开始图标 ”按钮。

注释

手动触发的管道更新的默认行为是刷新管道中定义的所有数据集。

管道刷新语义

下表描述了具体化视图和流式处理表的默认刷新、完全刷新和重置检查点行为:

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

默认情况下,管道中的所有具体化视图和流式处理表都会在每次更新时刷新。 可以选择使用以下功能从更新中省略表:

这两项功能都支持默认刷新语义或完全刷新。 可以选择使用 “选择表进行刷新 ”对话框,以便在为失败表运行刷新时排除其他表。

对于流式处理表,可选择清除所选流的流式处理检查点,而不是清除关联流式处理表中的数据。 若要清除所选流的检查点,请使用 Databricks REST API 启动刷新。 请参阅启动管道更新来清除选择性流式处理流的检查点

何时使用全量刷新

Databricks 建议仅在必要时运行完全刷新。 完全刷新始终通过定义数据集的逻辑重新处理指定数据源中的所有记录。 完成完整刷新的时间和资源与源数据的大小相关。

物化视图无论使用默认刷新还是完全刷新,都会返回相同的结果。 对流式处理表使用完全刷新会重置所有状态处理和检查点信息,如果输入数据不再可用,可能会导致记录被删除。 请参阅 流式处理表的完整刷新

仅当输入数据源包含重新创建表或视图所需状态的数据时,Databricks 才建议完全刷新。 请考虑以下情况:输入源数据不再可用,以及运行完全刷新的结果:

数据源 原因输入数据不存在 完全刷新的结果
Kafka 短保留期阈值 从目标表中删除 Kafka 源中不再存在的记录。
对象存储中的文件 生命周期策略 从目标表中删除源目录中不再存在的数据文件。
表中的记录 已删除以符合法规 仅处理源表中存在的记录。

若要防止在表或视图中运行完全刷新,请将表的属性 pipelines.reset.allowed 设置为 false。 请参阅 管道表属性。 还可以使用追加流,将数据追加到现有的流式表,而无需完全刷新。

为所选表启动管道更新

可以选择只为管道中的选定表重新处理数据。 例如,在开发过程中,只更改了一个表并希望减少测试时间,或者管道更新失败,你只想刷新失败的表

Lakeflow 管道编辑器提供了用于重新处理源文件、所选表或单个表的选项。 有关详细信息,请参阅 运行管道代码

为失败表启动管道更新

如果管道更新由于管道图中的一个或多个表中的错误而失败,则可以仅启动失败表和任何下游依赖项的更新。

注释

被排除的表格不会刷新,即使它们依赖于一个错误的表格。

若要更新失败的表,请在管道监视页上单击“ 刷新失败的表”。

若要仅更新管道监视页面中所选的失败表,请按以下步骤操作:

  1. 单击“刷新失败的表”按钮旁边的 下拉按钮,然后单击“选择要刷新的表”。 此时将显示“选择要刷新的表”对话框。

  2. 若要选择要刷新的表,请单击每个表。 突出显示并标记所选表。 若要从更新中删除表,请再次单击该表。

  3. 单击“刷新选择”。

    注释

    “刷新选择”按钮在括号中显示所选表的数量。

为重新处理已为所选表导入的数据,请单击“刷新选择”按钮旁边的蓝色下拉箭头,然后单击“完全刷新选择”

启动管道更新来清除选择性流式处理流的检查点

可根据需要在管道中重新处理所选流式处理流的数据,无需清除任何已引入的数据。

注释

未选择的流使用 REFRESH 更新来运行。 还可以指定 full_refresh_selectionrefresh_selection 有选择地刷新其他表。

若要启动更新以刷新所选流式处理检查点,请使用 Lakeflow 管道 REST API 中的 更新 请求。

reset_checkpoint_selection 参数接受流名称列表。 必须以完全限定 catalog.schema.flow_name 的格式传递每个流名称。 仅使用简单名称(例如,my_flow 而不是 my_catalog.my_schema.my_flow)会导致管道更新失败,并出现 IllegalArgumentException

  • 如果定义了具有显式名称的流(例如,使用 flow_name 中的 create_auto_cdc_flow参数),则完全限定的流名称为 <catalog>.<schema>.<flow_name>
  • 如果未显式指定流名称,则默认流名称为采用 catalog.schema.table 格式的目标表的完全限定名称。

可以在管道 UI 或管道事件日志中找到流名称。

以下示例使用 curl 命令调用 updates 请求来启动管道更新:

curl -X POST \
-H "Authorization: Bearer <your-token>" \
-H "Content-Type: application/json" \
-d '{
"reset_checkpoint_selection": ["my_catalog.my_schema.my_streaming_table"]
}' \
https://<your-databricks-instance>/api/2.0/pipelines/<your-pipeline-id>/updates

以下示例重置使用自定义名称定义的流的检查点:

curl -X POST \
-H "Authorization: Bearer <your-token>" \
-H "Content-Type: application/json" \
-d '{
"reset_checkpoint_selection": ["my_catalog.my_schema.my_custom_flow_name"]
}' \
https://<your-databricks-instance>/api/2.0/pipelines/<your-pipeline-id>/updates

检查管道是否存在错误,而无需等待表更新

重要

管道 Dry run 功能正处于 公测版

若要检查管道的源代码是否有效而不运行完整更新,请使用 试运行。 干运行可解析管道中定义的数据集和流的定义,但不具体化或发布任何数据集。 试运行期间发现的错误(例如表名或列名不正确)会在 UI 中报告。

要开始试运行,请在管道详细信息页面上,点击 蓝色向下插入点(位于开始旁边),然后点击试运行

预演结束后,任何错误和 增量分析 会显示在底部面板的事件托盘中。 单击事件托盘会显示底部面板中发现的任何问题。 此外,事件日志仅显示与试运行相关的事件,且管道图中不会显示任何指标。 如果发现错误或洞见,详细信息会在事件日志中查阅。

仅当试运行是您的流水线最近一次更新时,您才能在 UI 中查看试运行结果。 在 更新历史记录 中选择它以查看结果。 有关每个更新类型在 UI 中保持可用时间,请参阅 更新结果可用性

更新结果可用性

更新的结果是否显示在 UI 中取决于更新类型和两个条件:

  • 保留期限:已完成的更新会保留多久。 管道保留过去 60 天内的更新记录。
  • 最近更新:该更新是否为此流水线最近启动的一次更新。

下表显示了每个更新类型何时可用:

更新类型 在 UI 中提供 在以下情况下从界面中移除
常规更新 它处于保留期内,或者仍处于活动状态(尚未完成)。 即使某个正在进行的更新在保留窗口开始之前就已开始,该更新仍然可用。 它已完成,且已超出保留期限。
干运行 这是该流水线的最新更新。 任何以后的更新都开始,无论是另一个试运行还是常规更新。

在所有情况下,更新的事件在 UI 中不再显示其结果后仍保留在 事件日志 中。

更新运行行为

管道更新的行为取决于您如何触发它:

  • 通过管道监视 UI 使用“立即运行”触发的更新采用以调试为中心的快速启动行为。
  • 由作业、管道 API 或持续管道触发的更新会采用自动重试和重启行为。

对于触发的管道,可以通过在 Lakeflow 管道编辑器或管道监视页的下拉列表中选择“立即以不同设置运行”来替代特定运行的默认行为。

快速启动、以调试为中心的行为

用于 UI 立即运行 和即席更新。 这些运行针对快速迭代进行优化:

  • 重用群集,以避免重新启动产生的开销。 默认情况下,群集运行两小时。 您可以通过pipelines.clusterShutdown.delay中的 设置来更改此行为。
  • 禁用管道重试,以便可以立即检测和修复错误。

自动重试和重启行为

适用于作业、API 触发的更新以及持续管道。 这些运行优先考虑可靠性和成本效益:

  • 为特定的可恢复错误(包括内存泄漏和过期凭据)重新启动群集。
  • 在发生特定错误(例如启动群集失败)时重试执行。
  • 运行完成后,群集会立即关闭。

注释

运行行为仅控制群集和管道执行。 发布表的目录中的存储位置和目标架构必须配置为管道设置的一部分,并且不受运行行为的影响。