在 Lakeflow 声明性管道中运行更新

本文介绍管道更新,并提供有关如何触发更新的详细信息。

什么是管道更新?

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

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

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

管道更新是如何触发的?

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

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

手动触发流水线更新

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

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

注释

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

流程刷新语义

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

更新类型 具体化视图 流式处理表
刷新(默认值) 更新结果以反映定义查询的当前结果。 将检查成本,并在这样的情况下执行增量刷新以节省成本。 通过流式处理表和流中定义的逻辑处理新记录。
完全刷新 更新结果以反映定义查询的当前结果。 从流表中清除数据、清除流中的状态信息(检查点),并重新处理数据源中的所有记录。
重置流式处理流检查点 不适用于具体化视图。 从流中清除状态信息(检查点),但不清除流表中的数据,并重新处理数据源中的所有记录。

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

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

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

是否应使用完全刷新?

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

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

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

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

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

为所选表启动管道更新

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

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

为失败表启动管道更新

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

注释

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

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

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

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

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

  3. 单击“刷新选择”。

    注释

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

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

启动数据管道更新以清除选择性数据流的检查点

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

注释

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

若要启动更新以刷新所选流式处理检查点,请使用 Lakeflow 声明性管道 REST API 中的 更新 请求。 以下示例使用 curl 命令调用 updates 请求来启动管道更新:

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

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

重要

Lakeflow 声明性管道功能 Dry run 目前处于 公开预览阶段。

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

若要启动试运行,请单击Blue Down CaretBlue Down Caret“开始”旁边的管道详细信息页上的”,然后单击“干运行”。

干运行完成后,底部面板中的事件托盘中会显示任何错误。 单击事件托盘会在底部面板显示发现的任何问题。 此外,事件日志仅显示与模拟运行相关的事件,而 DAG 中未显示任何指标。 如果发现错误,则事件日志中提供了详细信息。

您只能查看最新一次试运行的结果。 如果干运行是最近运行的更新,可以在更新历史记录中选择它来查看结果。 如果在试运行后运行另一个更新,则 UI 中不再提供结果。

开发模式

运行于 Lakeflow 管道编辑器中的管道在开发模式开启时运行。 被默认计划的管道在开发模式关闭的情况下运行。 如果要测试管道在生产环境中的运行方式,可以通过编辑器中的下拉列表交互式选择“使用不同设置运行”来决定是否使用开发模式。

注释

使用旧笔记本编辑器创建的管道默认为使用开发模式。 可以通过在管道监视页中选择 “设置” 来检查或更改设置。 工作区左侧的作业和管道按钮可以进入监视页面。 还可以通过单击 管道资产浏览器中的运行结果,直接从管道编辑器跳转到监视页。

在开发模式下运行管道时,Lakeflow 声明性管道系统执行以下工作:

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

关闭开发模式后,Lakeflow 声明性管道系统执行以下作:

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

注释

打开和关闭开发模式仅控制群集和管道执行行为。 目录中用于发布表的存储位置和目标模式必须配置为管道设置的一部分,在模式之间切换时不受影响。