触发管道模式与连续管道模式

本文介绍增量实时表的触发和连续管道模式的操作语义。

管道模式与要计算的表的类型无关。 具体化视图和流式处理表都可以在任一管道模式下更新。

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

注意

Databricks SQL 中定义的具体化视图和流式处理表的刷新操作始终使用触发管道模式运行。

什么是触发管道模式?

如果管道使用“触发”模式,系统会在成功刷新所有表或选定表之后停止处理,确保在更新开始后更新中的每个表都根据可用的数据进行刷新。

什么是连续管道模式?

如果管道使用“连续”执行,增量实时表会在新数据到达数据源时对其进行处理,使整个管道中的表保持最新。

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

选择数据管道模式

下表突出显示了触发管道模式与连续管道模式之间的差异:

主要问题 触发 连续
更新何时停止? 完成后自动运行。 连续运行,直到手动停止。
处理哪些数据? 更新开始时可用的数据。 到达配置的源的所有数据。
此模式最适合哪些数据新鲜度要求? 数据更新每隔 10 分钟、一小时或一天运行。 需要每隔 10 秒到几分钟进行数据更新。

触发管道可以减少资源消耗和费用,因为群集仅在更新管道时运行。 但是,在触发管道之前,不会处理新数据。 连续管道需要一个始终运行的群集,其成本较高,但可以减少处理延迟。

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

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

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

由于流式处理查询与批处理查询的默认值不同,Databricks 建议对各个表设置 pipelines.trigger.interval。 仅当处理需要控制整个管道图的更新时,才对管道设置该值。

使用 Python 中的 spark_conf 或 SQL 中的 SET 对表设置 pipelines.trigger.interval

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