本文介绍管道更新,并提供有关如何触发更新的详细信息。
什么是管道更新?
创建管道并准备好运行后,可以开始更新。 管道更新执行以下操作:
- 使用正确的配置启动群集。
- 发现定义的所有表和视图,并检查是否存在任何分析错误,例如列名无效、依赖项缺失和语法错误。
- 使用最新的可用数据创建或更新表和视图。
通过使用验证更新,可以在管道的源代码中检查是否存在问题,而无需等待创建或更新表。 该功能在开发或测试管道时非常有用,因为它使你能够快速查找和修复管道中的错误(例如,错误的表或列名)。
管道更新是如何触发的?
使用以下选项之一启动管道更新:
更新触发器 | 详细信息 |
---|---|
手动 | 可以从管道 UI、管道列表或附加到管道的笔记本手动触发管道更新。 请参阅手动触发管道更新和在 DLT 中使用笔记本开发和调试 ETL 管道。 |
已安排 | 可以使用作业计划管道的更新。 请参阅用于作业的 DLT 管道任务。 |
编程 | 可以使用第三方工具、API 和 CLIs 以编程方式触发更新。 请参阅在工作流中运行 DLT 管道和管道 API。 |
手动触发流水线更新
使用以下选项之一手动触发管道更新:
- 单击管道详细信息页上的
按钮。
- 在管道列表中,单击“操作”列中的
。
注释
手动触发的管道更新的默认行为是刷新管道中定义的所有数据集。
流程刷新语义
下表描述了具体化视图和流式处理表的默认刷新、完全刷新和重置检查点行为:
更新类型 | 具体化视图 | 流式处理表 |
---|---|---|
刷新(默认值) | 更新结果以反映定义查询的当前结果。 | 通过流式处理表和流中定义的逻辑处理新记录。 |
完全刷新 | 更新结果以反映定义查询的当前结果。 | 从流表中清除数据、清除流中的状态信息(检查点),并重新处理数据源中的所有记录。 |
重置流式处理流检查点 | 不适用于具体化视图。 | 从流中清除状态信息(检查点),但不清除流表中的数据,并重新处理数据源中的所有记录。 |
默认情况下,管道中的所有具体化视图和流式处理表都会在每次更新时刷新。 可以选择使用以下功能从更新中省略表:
- 选择要刷新的表:使用此 UI 可在运行更新之前添加或删除具体化视图和流式处理表。 请参阅为所选表启动管道更新。
- 刷新失败的表:为失败的具体化视图和流式处理表(包括下游依赖项)启动更新。 请参阅为失败的表启动管道更新。
这两项功能都支持默认刷新语义或完全刷新。 可以选择使用 “选择表进行刷新 ”对话框,以便在为失败表运行刷新时排除其他表。
对于流式处理表,可选择清除所选流的流式处理检查点,而不是清除关联流式处理表中的数据。 若要清除所选流的检查点,请使用 Databricks REST API 启动刷新。 请参阅启动管道更新来清除选择性流式处理流的检查点。
是否应使用完全刷新?
Databricks 建议仅在必要时运行完全刷新。 完全刷新始终通过定义数据集的逻辑重新处理指定数据源中的所有记录。 完成完整刷新的时间和资源与源数据的大小相关。
物化视图无论使用默认刷新还是完全刷新,都会返回相同的结果。 对流式处理表使用完全刷新会重置所有状态处理和检查点信息,如果输入数据不再可用,可能会导致记录被删除。
仅当输入数据源包含重新创建表或视图所需状态的数据时,Databricks 才建议完全刷新。 请考虑以下情况:输入源数据不再可用,以及运行完全刷新的结果:
数据源 | 原因输入数据不存在 | 完全刷新的结果 |
---|---|---|
卡 夫 卡 | 短保留期阈值 | 从目标表中删除 Kafka 源中不再存在的记录。 |
对象存储中的文件 | 生命周期策略 | 从目标表中删除源目录中不再存在的数据文件。 |
表中的记录 | 已删除以符合法规 | 仅处理源表中存在的记录。 |
若要防止在表或视图中运行完全刷新,请将表的属性 pipelines.reset.allowed
设置为 false
。 请参阅 DLT 表属性。 还可以使用追加流,将数据追加到现有的流式表,而无需完全刷新。
为所选表启动管道更新
可以选择只为管道中的选定表重新处理数据。 例如,在开发过程中,只更改了一个表并希望减少测试时间,或者管道更新失败,你只想刷新失败的表。
注释
只能对触发的管道使用选择性刷新。
若要启动仅刷新所选表的更新,请在“管道详细信息”页面上:
单击选择要刷新的表。 此时将显示“选择要刷新的表”对话框。
如果看不到“选择要刷新的表”按钮,请确认“管道详细信息”页显示了最新的更新,并且更新已完成。 如果最新更新未显示DAG,例如,由于更新失败,那么“选择要刷新的表”按钮将不会显示。
若要选择要刷新的表,请单击每个表。 突出显示并标记所选表。 若要从更新中删除表,请再次单击该表。
单击“刷新选择”。
注释
“刷新选择”按钮在括号中显示所选表的数量。
为重新处理已为所选表导入的数据,请单击“刷新选择”按钮旁边的,然后单击“完全刷新选择”。
为失败表启动管道更新
如果管道更新由于管道图中的一个或多个表中的错误而失败,则可以仅启动失败表和任何下游依赖项的更新。
注释
被排除的表格不会刷新,即使它们依赖于一个错误的表格。
要更新失败的表,请在“管道详细信息”页上,单击“刷新失败的表”。
仅更新选定的失败表:
单击“刷新失败的表”按钮旁边的
,然后单击“选择要刷新的表”。 此时将显示“选择要刷新的表”对话框。
若要选择要刷新的表,请单击每个表。 突出显示并标记所选表。 若要从更新中删除表,请再次单击该表。
单击“刷新选择”。
注释
“刷新选择”按钮在括号中显示所选表的数量。
为重新处理已为所选表导入的数据,请单击“刷新选择”按钮旁边的,然后单击“完全刷新选择”。
启动数据管道更新以清除选择性数据流的检查点
可根据需要在管道中重新处理所选流式处理流的数据,无需清除任何已引入的数据。
注释
未选择的流是使用 REFRESH 更新运行的。 还可以指定 full_refresh_selection
或 refresh_selection
有选择地刷新其他表。
若要启动更新以刷新所选流式处理检查点,请使用 DLT 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
检查管道中是否存在错误,而无需等待表更新
重要
DLT Validate
更新功能为公共预览版。
若要在不运行完整更新的情况下检查管道的源代码是否有效,请使用“验证”。
Validate
更新解析管道中定义的数据集和流的定义,但不具体化或发布任何数据集。 验证期间发现的错误(例如,错误的表或列名)会在 UI 中报告。
要运行 Validate
更新,请在管道详细信息页上单击“开始”旁边的 ,然后单击“验证”。
Validate
更新完成后,事件日志会显示仅与Validate
更新相关的事件,并且 DAG 中不显示任何指标。 如果发现错误,则事件日志中提供了详细信息。
只能查看最新 Validate
更新的结果。 如果Validate
更新是最近运行的更新,可以在更新历史记录中选择它以查看结果。 如果在Validate
更新后运行另一个更新,则结果在 UI 中不再可用。
开发和生产模式
你可以通过切换使用开发模式和生产模式来优化管道执行。 使用管道 UI 中的 按钮在这两种模式之间切换。 默认情况下,管道在开发模式下运行。
在开发模式下运行管道时,DLT 系统执行以下作:
- 重用群集,以避免重新启动产生的开销。 默认情况下,群集在启用开发模式后会运行两个小时。 可以使用
pipelines.clusterShutdown.delay
中的 设置来对此进行更改。 - 禁用管道重试,以便可以立即检测和修复错误。
在生产模式下,DLT 系统执行以下作:
- 为特定的可恢复错误(包括内存泄漏和过期凭据)重新启动群集。
- 在发生特定错误(例如启动群集失败)时重试执行。
注释
在开发和生产模式间切换只控制群集和管道执行行为。 目录中用于发布表的存储位置和目标模式必须配置为管道设置的一部分,在模式之间切换时不受影响。