触发式与持续管道模式

本文介绍 DLT 的触发模式和连续模式的操作语义。

管道模式与要计算的表类型无关。 物化视图和流表都可以在任一管道模式中进行更新。

若要在触发和连续之间更改,在创建或编辑管道时,请使用管道设置中的 “管道”模式 选项。 请参阅 配置 DLT 管道

备注

在 Databricks SQL 中定义的物化视图和流表,其刷新操作始终以触发的管道模式运行。

什么是触发管道模式?

如果管道使用 触发 模式,则系统会在成功刷新所有表或所选表后停止处理,确保更新中的每个表都根据更新启动时可用的数据刷新。

什么是连续管道模式?

如果管道使用 连续 执行,则 DLT 会在数据到达数据源时处理新数据,使整个管道中的表保持最新状态。

为了避免在连续执行模式下进行不必要的处理,管道会自动监视依赖的 Delta 表,并且仅在这些依赖表的内容发生更改时才执行更新。

选择数据管道模式

下表重点介绍了触发和连续管道模式之间的差异:

主要问题 触发 连续的
更新何时停止? 完成后自动进行。 持续运行,直到手动停止。
处理了哪些数据? 更新启动时可用的数据。 数据在到达已配置的源时实时接收。
哪种数据新鲜度要求最适合这个? 数据更新每 10 分钟、每小时或每天运行一次。 每 10 秒到几分钟需要一次数据更新。

触发式管道可以减少资源消耗和费用,因为计算集群仅运行足够长的时间来更新管道。 在管道被触发之前,新数据将不会被处理。 连续管道需要始终运行的群集,这更昂贵,但会降低处理延迟。

为连续管道设置触发器间隔

为连续模式配置管道时,可以设置触发器间隔来控制管道为每个流启动更新的频率。

您可以使用 pipelines.trigger.interval 来控制更新表格或整个管道的流程触发间隔。 由于触发的管道处理每个表一次,因此 pipelines.trigger.interval 仅用于连续管道。

Databricks 建议对单个表进行设置 pipelines.trigger.interval ,因为流式处理和批处理查询具有不同的默认值。 仅当处理需要控制整个管道图的更新时,才在管道上设置值。

在 Python 中使用 pipelines.trigger.interval 或在 SQL 中使用 spark_confSET 设置在表上。

@dlt.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"
  }
}