本文介绍 DLT 的触发模式和连续模式的操作语义。
管道模式与要计算的表类型无关。 物化视图和流表都可以在任一管道模式中进行更新。
若要在触发和连续之间更改,在创建或编辑管道时,请使用管道设置中的 “管道”模式 选项。 请参阅 配置 DLT 管道。
备注
在 Databricks SQL 中定义的物化视图和流表,其刷新操作始终以触发的管道模式运行。
如果管道使用 触发 模式,则系统会在成功刷新所有表或所选表后停止处理,确保更新中的每个表都根据更新启动时可用的数据刷新。
如果管道使用 连续 执行,则 DLT 会在数据到达数据源时处理新数据,使整个管道中的表保持最新状态。
为了避免在连续执行模式下进行不必要的处理,管道会自动监视依赖的 Delta 表,并且仅在这些依赖表的内容发生更改时才执行更新。
下表重点介绍了触发和连续管道模式之间的差异:
主要问题 | 触发 | 连续的 |
---|---|---|
更新何时停止? | 完成后自动进行。 | 持续运行,直到手动停止。 |
处理了哪些数据? | 更新启动时可用的数据。 | 数据在到达已配置的源时实时接收。 |
哪种数据新鲜度要求最适合这个? | 数据更新每 10 分钟、每小时或每天运行一次。 | 每 10 秒到几分钟需要一次数据更新。 |
触发式管道可以减少资源消耗和费用,因为计算集群仅运行足够长的时间来更新管道。 在管道被触发之前,新数据将不会被处理。 连续管道需要始终运行的群集,这更昂贵,但会降低处理延迟。
为连续模式配置管道时,可以设置触发器间隔来控制管道为每个流启动更新的频率。
您可以使用 pipelines.trigger.interval
来控制更新表格或整个管道的流程触发间隔。 由于触发的管道处理每个表一次,因此 pipelines.trigger.interval
仅用于连续管道。
Databricks 建议对单个表进行设置 pipelines.trigger.interval
,因为流式处理和批处理查询具有不同的默认值。 仅当处理需要控制整个管道图的更新时,才在管道上设置值。
在 Python 中使用 pipelines.trigger.interval
或在 SQL 中使用 spark_conf
将 SET
设置在表上。
@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"
}
}