触发模式和连续模式控制管道处理数据的方式:触发模式会刷新可用数据,然后停止;而连续模式会在新数据到达时使表保持最新状态。 有关需要毫秒延迟的工作负荷,请参阅 Lakeflow 管道中的“使用实时模式”。
管道模式与要计算的表类型无关。 具体化视图和流式处理表都可以在任何管道模式下进行更新。
注释
独立物化视图和流式表的刷新操作始终以触发式管道模式运行。
什么是触发管道模式?
如果管道使用 触发 模式,系统会在更新启动时根据可用数据刷新所有表后停止。
什么是连续管道模式?
如果管道使用 连续执行,则会在新数据到达数据源时对其进行处理,以确保整个管道中的各个表保持最新状态。
为了避免在连续执行模式下进行不必要的处理,管道会自动监视依赖的 Delta 表,并且仅在这些依赖表的内容发生更改时才执行更新。
选择数据管道模式
下表重点介绍了触发和连续管道模式之间的差异:
| 主要问题 | 触发式 | 连续 |
|---|---|---|
| 更新何时停止? | 完成后自动生效。 | 持续运行,直到手动停止。 |
| 处理了哪些数据? | 更新启动时可用的数据。 | 数据在到达已配置的源时实时接收。 |
| 哪种数据新鲜度要求最适合这个? | 数据更新每 10 分钟、每小时或每天运行一次。 | 每 10 秒到几分钟需要一次数据更新。 |
触发式管道可以减少资源消耗和费用,因为计算集群仅运行足够长的时间来更新管道。 但是,在管道被触发之前,不会处理新数据。 连续管道需要始终运行的群集,这更昂贵,但会降低处理延迟。
使用连续作业运行连续管道
Databricks 建议运行连续流水线并设置 连续作业 ,而不是将 流水线模式 的值设置为连续。 当连续作业编排流水线时,该作业管理流水线的执行生命周期,并解锁无服务器 性能模式,如标准模式,而流水线内置的连续模式不支持这些模式。
注释
作业编排仅控制 Lakeflow 管道的执行模式。 独立的实体化视图和流式表总是以触发模式运行,无论作业编排如何。
当作业编排流水线时,该作业决定执行模式,优先于流水线的 流水线模式 设置。 连续作业即使在其流水线的 Pipeline mode 设为触发式时,也会持续运行其流水线;而触发型或计划型作业即使在其流水线的 Pipeline mode 设为连续式时,也会以单次更新的方式运行其流水线。
因为作业会覆盖流水线模式设置,所以当你将流水线封装在连续作业中时,请将流水线的 Pipeline mode 设置为触发式(默认设置)。 这样可以避免流水线在作业之外运行时出现意外行为。
要为管道配置连续作业,请参阅 使用连续作业持续运行管道。
运行带有内置连续模式的流水线
流水线内置的连续设置并未被移除,但Databricks不鼓励新流水线使用该设置,转而采用连续作业模式。 若要在触发和连续之间更改,在创建或编辑管道时,请使用管道设置中的 “管道”模式 选项。 请参阅 “配置管道”。
为连续管道设置触发器间隔
为连续模式配置管道时,可以设置触发器间隔来控制管道为每个流启动更新的频率。 触发间隔是一项流水线配置项,无论流水线是通过其自身的 流水线模式 设置以连续模式运行,还是通过连续作业运行,该配置都适用。
您可以使用 pipelines.trigger.interval 来控制更新表格或整个管道的流程触发间隔。 由于触发流水线对每个表只处理一次,因此 pipelines.trigger.interval 仅用于连续流水线。
Databricks 建议对单个表进行设置 pipelines.trigger.interval ,因为流式处理和批处理查询具有不同的默认值。 仅当处理需要控制整个管道图的更新时,才在管道上设置值。
在 Python 中使用 pipelines.trigger.interval 或在 SQL 中使用 spark_conf 将 SET 设置在表上。
@dp.table(
spark_conf={"pipelines.trigger.interval" : "10 seconds"}
)
def <function-name>():
return (<query>)
SET pipelines.trigger.interval=10 seconds;
CREATE OR REFRESH MATERIALIZED VIEW TABLE_NAME
AS SELECT ...
若要在管道上设置 pipelines.trigger.interval ,请在管道设置中将其添加到 configuration 对象:
{
"configuration": {
"pipelines.trigger.interval": "10 seconds"
}
}