You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Delta Live Tables中实现期望失败时回滚全流水线事务?

Delta Live Tables 流水线全局终止与事务回滚配置

问题本质

你遇到的是DLT默认的表级失败控制逻辑:ON VIOLATION FAIL UPDATE仅作用于当前校验表及其下游依赖,不会中断流水线中其他独立分支的任务执行与事务提交。

实现全局终止回滚的方案

1. 配置流水线全局失败策略

在DLT流水线的设置中,将pipelines.failure.policy参数设置为fail(默认值为continue)。该配置会让流水线在任意表的期望规则触发失败时,立即终止所有正在运行的任务。

2. 调整校验节点的依赖关系

将核心数据质量校验放在流水线的起始依赖节点(比如数据集市的上游入口表),或创建一个全局校验表,让流水线中所有其他表都依赖这个校验节点。这样当校验失败时,所有关联任务都会停止,配合全局失败策略实现全流水线终止。

3. 正确使用fail运算符触发全局回滚

根据官方文档说明:

针对无效记录执行失败操作
当不允许存在无效记录时,使用expect或fail运算符在记录校验失败时立即停止执行。若操作是表更新,系统会自动回滚事务。

推荐直接在核心表上绑定fail约束,或在全局校验表中使用fail属性:

-- 方式1:直接在数据集市表上添加失败约束
CREATE OR REFRESH LIVE TABLE data_mart
COMMENT "核心数据集市表"
AS SELECT * FROM upstream_source;

ALTER LIVE TABLE data_mart
ADD CONSTRAINT critical_data_validity CHECK (/* 你的复杂校验规则 */)
ON VIOLATION FAIL UPDATE;

-- 方式2:创建全局校验表并设置fail属性
CREATE OR REFRESH TEMPORARY LIVE TABLE global_quality_check
AS SELECT * FROM live.data_mart
WHERE NOT (/* 你的复杂校验规则 */);

ALTER LIVE TABLE global_quality_check
SET TBLPROPERTIES ('quality' = 'fail');

效果验证

配置完成后,一旦校验规则触发失败:

  • 流水线会立即终止所有正在执行的任务
  • 所有未提交的事务将被自动回滚
  • 整个流水线标记为失败状态,不会出现部分表提交数据的情况

内容的提问来源于stack exchange,提问作者Houssem Guidara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:40:57