第14章 数据编排与质量¶
数据编排与质量控制把脚本集合变成可运营的数据链路。零散的定时脚本能跑通一次,但在依赖变化、任务失败、口径漂移时很难保持可信。任务依赖、调度恢复、质量门禁、数据产品发布和 mini-platform 的实现方式共同决定数据能否稳定交付给 DataAgent。编排引擎负责用 DAG 管理依赖与重试,质量门禁负责在数据进入下游前拦截问题。DataAgent 引用的数据通常不是单表直接产生的结果。订单事实表、履约宽表、库存快照、区域维表和指标汇总要按依赖顺序产出,中间任何一个任务失败、延迟或质量异常,都会让上层回答失真。编排、质量门禁和事故恢复要一起工作,才能把“脚本能跑”推进到“数据产品可信”。
数据编排看起来像调度脚本,实际承担的是数据产品的交付责任。一个 DataAgent 回答得是否可信,取决于上游事实表、维表、指标表和质量规则是否按依赖顺序产出。某个中间表延迟、某个任务重跑漏了分区、某条质量规则被临时关闭,都会让最终回答偏离真实业务。许多团队早期用 cron 和脚本拼出数据链路。任务少的时候足够,业务扩展后就会出现依赖不清、失败没人接、补数靠手工、质量检查写在脚本里的问题。Agent 把这些问题放大了,因为用户会即时追问,系统也可能把分析结果写入报告或流程。数据链路的不可解释,会变成 Agent 的不可解释。编排与质量应一起设计。DAG 说明数据如何产生,质量规则说明数据何时可以被使用,告警和恢复说明失败后谁来处理。只有任务状态、质量状态和血缘一起进入平台,DataAgent 才能判断某个指标是否适合回答,前端也才能在数据延迟时给出明确提示。
14.1 从任务脚本到可信数据产品:编排与质量的共同目标¶
一家多业务线企业的数据平台已经能采集业务事件、沉淀湖仓表、提供 OLAP 查询和实时指标。新的问题随之出现:DataAgent 回答“昨日华东区履约延迟为何上升”时,依赖的订单事实表、履约宽表、库存快照和区域维表要按正确顺序产出;其中任一环节延迟、失败或质量异常,都会让回答变成不可信的猜测。早期团队通常用定时脚本解决问题。每天凌晨执行抽取脚本,随后执行清洗脚本,再执行指标汇总脚本。脚本能跑起来,但它无法清楚表达三件事:上游资产是否已经准备好;产出数据是否满足质量规则;失败后应该重试、跳过、回滚还是回填。数据编排与质量治理的共同目标,是把一组脆弱脚本变成有依赖、有状态、有质量门禁、有责任人、有恢复路径的数据产品生产线。
图14-1:编排不是孤立的调度器,质量也不是事后报表。来源:本书自绘。Alt text:左侧"传统观念"中调度器与质量报表彼此分离,右侧"数据产品观念"中编排与质量门禁嵌在同一发布流程里,对比两种组织方式。
图 14-1 表明,编排不是孤立的调度器,质量也不是事后报表。二者共同夹在数据生产和数据消费之间:编排保证资产按依赖关系被生产出来,质量门禁保证资产进入 DataAgent 之前具备最低可信度。
图14-2:脚本任务到数据产品的成功标准变化。来源:本书自绘。Alt text:左列"脚本任务"成功标准是"跑完不报错",右列"数据产品"成功标准升级为契约满足、质量达标、可订阅、可追溯,对比成功定义的变化。
图 14-2 的关键不在于工具替换,而在于成功标准改变。脚本时代只关心“任务是否退出码为 0”;数据产品时代要同时关心“输入是否完整、依赖是否满足、口径是否正确、产出是否准时、失败是否可恢复、结果是否能被追溯”。企业 Agent 平台还会把数据结果转化为自然语言判断,质量问题会被放大成错误解释和错误动作。
14.1.1 编排边界:数据 DAG、资产依赖、业务工作流与 Agent Workflow 的区别¶
数据编排常被误解为“把所有流程都放进一个 DAG”。在企业 Agent 平台中,至少有四类流程需要区分。
表14-1:数据 DAG、编排、质量门禁等概念的定义与区别。来源:本书整理。
| 概念 | 定义 | 与相邻概念的区别 |
|---|---|---|
| 数据 DAG | 用有向无环图表达任务执行顺序,例如先清洗订单,再聚合指标 | 关注任务执行;不必天然理解数据资产语义 |
| 资产依赖 | 用表、视图、指标、特征等资产表达上游和下游关系 | 关注产物关系;比任务 DAG 更接近 DataAgent 消费语义 |
| 业务工作流 | 围绕业务动作的人机流程,例如审批、派单、补货、退款 | 关注业务状态流转;不等同于数据生产依赖 |
| Agent Workflow | Agent 为完成任务而调用工具、检查结果、请求人工确认的执行路径 | 关注推理与行动;可以消费数据资产,但不应该替代数据编排 |
| 质量门禁 | 在数据进入下游消费前执行规则检查、阻断、降级或告警 | 关注可信度;不是单纯的监控图表 |
图14-3:边界清晰能降低系统耦合。来源:本书自绘。Alt text:左侧职责混杂的任务相互交叉连线、耦合高,右侧编排、转换、质量、发布各司其职、连线清晰,对比边界清晰前后的耦合度。
图 14-3 说明,边界清晰能降低系统耦合。数据 DAG 负责稳定生产,资产依赖负责解释影响范围,业务工作流负责组织处理,Agent Workflow 负责受控调用和解释。让 Agent 直接在数据 DAG 中“自由修复问题”通常会带来审计困难;让调度器承载复杂业务审批,则会让数据平台变成难以维护的业务流程引擎。一家多业务线企业的履约延迟分析可以这样划边界:数据编排负责每日生成订单履约宽表;质量门禁检查订单量、主键唯一性、字段有效性和产出延迟;DataAgent 只读取通过门禁的数据产品;当质量失败时,业务工作流创建数据事故工单,由 Owner 处理;Agent 可以解释事故影响范围,但不能绕过门禁给出正式分析。
14.1.2 调度模型:时间调度、事件触发、数据集触发与回填¶
编排系统要解决的第一个工程问题是“什么时候运行”。常见触发模型包括时间调度、事件触发、数据集触发和人工回填。
表14-2:时间、事件、数据集触发与回填四种调度模型的优势与适用场景。来源:本书整理。
| 调度模型 | 触发条件 | 优势 | 代价 | 适用场景 |
|---|---|---|---|---|
| 时间调度 | 固定时间或固定周期 | 简单、可预测、易值班 | 可能在上游未就绪时空跑或失败 | 日报、月报、稳定批处理 |
| 事件触发 | 上游事件到达或文件落地 | 响应快,减少等待 | 需要事件可靠性和去重 | 小时级增量、准实时同步 |
| 数据集触发 | 上游数据资产达到可用状态 | 更贴近资产依赖 | 需要资产状态和元数据平台支持 | 多团队共享数据产品 |
| 人工回填 | 人员指定历史区间重新运行 | 可修复历史错误 | 容易污染当前结果,资源冲击大 | 事故修复、口径重算、历史补数 |
图14-4:调度触发模型与回填治理边界。来源:本书自绘。Alt text:图中并列时间触发、事件触发、数据集触发三种模型,下方标出回填场景的特殊处理边界,说明常规调度与回填须分开治理。
图 14-4 强调两点:触发模型要与数据资产状态绑定,而非只依赖时钟;回填也不等于“把历史日期再跑一次”。它需要冻结窗口、资源限额、幂等写入、质量复检和下游影响通知。若回填直接覆盖正在被 DataAgent 查询的正式指标,用户会在同一会话中看到前后不一致的结果。
这里需要避免四类判断偏差:把任务成功等同于数据正确;认为 DAG 越细越好;认为质量检查越多越好;低估回填对当前链路的影响。任务可以成功写出空表、重复表或过期数据。过细的任务会放大调度开销和失败噪声;过粗的任务又会掩盖故障位置。没有 Owner、阈值和处理动作的检查只会制造告警疲劳。历史回填可能触发下游重算、缓存刷新和 DataAgent 引用变化,应进入变更流程。
14.2 编排工具对比:Airflow、Dagster、Prefect 与 DolphinScheduler¶
编排工具的差异不只在界面和语法,而在它们对“任务、资产、状态、开发体验和治理”的建模方式。表 14-1 因此按平台能力维度比较,而非按流行度或部署方式排序。
表14-3:Airflow、Dagster、Prefect 等编排工具的优势、代价与适用场景。来源:本书整理。
| 方案 | 优势 | 代价 | 适用场景 | 本书建议 |
|---|---|---|---|---|
| Airflow | 生态成熟,调度模型稳定,运维经验丰富 | 以任务 DAG 为中心,资产语义需要额外治理 | 传统批处理、复杂依赖、已有数据平台团队 | 适合作为通用批调度底座,但要补资产状态和质量门禁 |
| Dagster | 资产建模强,适合把数据产品作为一等公民 | 团队需要接受新的资产开发范式 | 数据产品治理、质量驱动开发、强血缘场景 | 适合新建可信数据产品平台 |
| Prefect | 开发体验轻,动态流程表达灵活 | 大规模集中治理需额外设计 | 数据科学任务、轻量流程、混合云任务 | 适合快速迭代和应用团队自助编排 |
| DolphinScheduler | 可视化和任务类型丰富,适合多团队协作 | 复杂资产语义和代码化治理需补强 | 企业内部多角色调度、国产生态适配 | 适合重可视化协同的组织,仍需质量与契约体系 |
这些工具都不能替代数据质量体系。Airflow 能告诉平台“任务有没有运行”,不能自动证明订单金额没有异常;Dagster 能把资产建模得更清楚,也仍然需要质量规则、阈值、Owner 和失败动作;Prefect 让开发更灵活,但灵活性过高会带来流程碎片化;DolphinScheduler 对多任务可视化友好,但若缺少代码评审和资产契约,容易演变为图形化脚本堆积。
图14-5:工具选择应回到组织能力。来源:本书自绘。Alt text:以"团队工程能力"和"资产治理需求"为轴的矩阵,把 Airflow、Dagster、Prefect 等工具落入不同象限,强调选型回到组织实际能力。
图 14-5 表示工具选择应回到组织能力。若团队已经有大量 Airflow DAG,可以先补数据集状态、质量检查和事故流程;若目标是把数据资产作为平台产品经营,资产中心的建模更有价值;若应用团队需要快速编排自助任务,则需要在灵活性外加统一模板和审计。
14.2.1 转换与测试:dbt 模型、dbt tests、Great Expectations 与 Soda¶
编排负责“何时、按什么依赖运行”,转换与测试负责“产出什么、是否可信”。在湖仓和 OLAP 场景中,dbt 常用于把 SQL 转换逻辑工程化,dbt tests 用于表达唯一性、非空、关系完整性和自定义断言。Great Expectations 和 Soda 更偏向通用数据质量检查,适合跨数据源、跨表、跨业务规则的质量监控。
表14-4:dbt tests、Great Expectations 等转换与测试工具的优势与适用场景。来源:本书整理。
| 方案 | 优势 | 代价 | 适用场景 | 本书建议 |
|---|---|---|---|---|
| dbt tests | 与 SQL 模型贴近,适合开发阶段即写测试 | 复杂跨系统质量规则表达有限 | 指标模型、维表、事实表、开发工作流 | 作为模型内置测试的默认起点 |
| Great Expectations | 规则表达丰富,文档化和数据剖析能力强 | 规则维护和平台集成需要治理 | 跨源质量检查、数据合同验证、审计报告 | 用于核心资产和跨团队契约 |
| Soda | 质量检查配置简洁,适合持续监控 | 深度定制能力取决于集成方式 | 日常监控、规则巡检、轻量门禁 | 用于标准化巡检和告警 |
| 自定义 SQL 检查 | 最灵活,容易贴合业务口径 | 容易碎片化,缺少统一血缘和报告 | 特殊业务规则、临时事故排查 | 允许存在,但要纳入统一登记和 Owner |
图14-6:质量门禁的最小闭环。来源:本书自绘。Alt text:环形流程,产出数据、运行质量校验、通过则发布、不通过则阻断并告警,箭头表示失败样本回流修正规则,构成质量门禁闭环。
图 14-6 展示的是质量门禁的最小流程。质量失败后的动作需要预先定义:阻断发布、继续发布但标记风险、回退到上一版本、降级到离线快照、创建事故工单或请求人工确认。没有动作的质量规则只是噪声。
如果把质量问题当成平台事件来处理,就需要一份稳定的事件契约。下面这个例子展示的是面向 DataAgent 的最小表达方式。
{
"asset_id": "ads.fulfillment_delay_daily",
"run_id": "run_20260611_020000",
"partition": "dt=2026-06-10",
"status": "blocked",
"severity": "critical",
"checks": [
{
"name": "order_id_unique",
"dimension": "uniqueness",
"expected": "duplicate_count = 0",
"actual": "duplicate_count = 184",
"action": "block_publish"
},
{
"name": "row_count_range",
"dimension": "completeness",
"expected": "between 950000 and 1200000",
"actual": "612340",
"action": "keep_previous_partition"
}
],
"owner": "fulfillment-data-team",
"lineage": {
"upstream_assets": ["dwd.orders_daily", "dim.store_region"],
"downstream_consumers": ["DataAgent", "operations_dashboard"]
}
}
示例 14-1:质量事件契约示例¶
这是生产工程示例。它让 DataAgent 和看板知道某个分区是否可用、为什么被阻断、临时应该使用哪种降级策略。
14.2.2 数据质量维度:完整性、唯一性、准确性、及时性、一致性与有效性¶
质量规则要按维度组织,否则容易堆成无法维护的检查清单。表 14-3 将规则拆成完整性、唯一性、范围、及时性和业务一致性,方便后续映射到质量事件和恢复动作。
表14-5:完整性、唯一性、准确性等数据质量维度的关注问题与示例规则。来源:本书整理。
| 质量维度 | 关注问题 | 示例规则 | 失败后的典型动作 |
|---|---|---|---|
| 完整性 | 数据是否缺失 | 当日订单行数不低于历史同星期均值的合理范围 | 阻断发布或等待上游补齐 |
| 唯一性 | 主键是否重复 | order_id 在分区内唯一 |
阻断发布并定位重复来源 |
| 准确性 | 数值是否符合业务事实 | 支付金额不能为负,履约时长不能倒挂 | 隔离异常记录,进入修复流程 |
| 及时性 | 是否在 SLA 前产出 | 每天 08:00 前完成核心指标 | 告警、降级旧版本、通知下游 |
| 一致性 | 跨表或跨系统是否对齐 | 订单事实表和支付事实表金额差异在阈值内 | 暂停关键回答,触发对账 |
| 有效性 | 字段是否符合取值域和格式 | 门店状态只能是营业、暂停、关闭 | 拒收坏数据或写入隔离表 |
质量规则还要区分硬门禁和软告警。硬门禁阻断下游发布,用于主键唯一、核心字段非空、金额合法、权限分类等不可妥协条件。软告警允许产出继续进入下游,但要带风险标记,用于行数轻微波动、延迟接近阈值、历史分布变化等需要观察的问题。
硬门禁、软告警与旁路隔离¶
表14-6:硬门禁与软告警两种质量拦截策略的取舍。来源:本书整理。
| 方案 | 优势 | 代价 | 适用场景 | 本书建议 |
|---|---|---|---|---|
| 硬门禁 | 防止坏数据进入核心消费链路 | 可能造成数据不可用,业务等待 | 主键重复、核心字段缺失、权限违规、金额非法 | 用于高风险核心资产 |
| 软告警 | 保持数据可用,减少阻断 | Agent 可能引用有风险结果 | 分布波动、轻微延迟、可解释异常 | 响应中带质量状态 |
| 旁路隔离 | 坏记录隔离,主链路继续运行 | 需要后续修复和对账 | 少量异常记录、可局部剔除的数据 | 用于明细表清洗,但隔离比例要告警 |
14.2.3 数据事故治理:SLA、告警、血缘定位、责任人、修复与复盘¶
数据事故不是“任务失败”的同义词。任务成功但产出错误数据、质量门禁误放行、回填覆盖正式分区、DataAgent 引用了未发布资产,都属于数据事故。事故治理需要定义发现、分级、止血、定位、修复、验证、复盘和规则沉淀的完整流程。
图14-7:数据事故处理的止血与修复路径。来源:本书自绘。Alt text:事故流程分两段,先止血(下游降级、回退旧版本、告警),后修复(定位根因、回填重算、复盘),箭头表示先恢复可用性再追根因。
图 14-7 的核心是先止血再修复。对 DataAgent 而言,止血动作通常包括隐藏问题资产、返回质量状态、降级到上一可用分区、禁止触发动作型建议。若平台只通知数据工程师而不通知 DataAgent 服务层,用户仍可能持续获得错误回答。
表14-7:上游未就绪、数据漂移等数据事故的检测方式与恢复策略。来源:本书整理。
| 失败模式 | 触发条件 | 影响 | 检测方式 | 恢复策略 |
|---|---|---|---|---|
| 上游未就绪 | 源系统延迟、采集任务失败 | 下游空跑、产出空表或旧数据 | 数据集状态、行数波动、上游心跳 | 等待、重试、降级上一分区 |
| 字段漂移 | 上游新增、删除或修改字段类型 | 转换失败或隐性错误 | Schema 校验、契约兼容性检查 | 阻断发布,执行变更评审 |
| 主键重复 | CDC 重放、回填重复写入 | 指标翻倍、Join 膨胀 | 唯一性测试、对账差异 | 幂等重写、隔离重复记录 |
| 质量规则误报 | 阈值未考虑促销、节假日或季节性 | 无效阻断,影响业务可用性 | 告警确认率、历史分布分析 | 引入动态阈值和业务日历 |
| 质量规则漏报 | 规则覆盖不足或阈值过宽 | 坏数据进入 DataAgent | 用户质疑、下游对账、抽样审计 | 复盘补规则,扩大门禁范围 |
| 回填污染当前结果 | 历史重算覆盖当前分区或缓存 | 同一指标前后不一致 | 发布审计、版本差异、缓存命中检查 | 使用版本化分区、先影子回填再切换 |
| 告警无人处理 | Owner 缺失或升级路径不清 | 故障持续扩大 | 告警未确认时长、值班日志 | 强制 Owner 登记和升级机制 |
14.2.4 Agent 反馈链路:从用户质疑、回答置信度到质量规则沉淀¶
企业 Agent 平台多了一个传统数据平台没有的质量信号:用户会直接质疑回答。用户可能问“这个数是不是太低了”“为什么和看板不一样”“你引用的是哪个日期的数据”。这些反馈不应只当作客服问题处理,它们应进入数据质量治理流程。
图14-8:从事故复盘到规则沉淀的反馈链路。来源:本书自绘。Alt text:链路从一次数据事故出发,经复盘提炼出新的质量规则,沉淀进门禁,下次同类问题被提前拦截,箭头构成持续改进的反馈环。
图 14-8 展示了一条可落地的反馈链路。低置信度回答、用户质疑、人工纠错和引用缺失都可以成为规则候选,但不能直接自动变成阻断规则。候选规则要经过样本验证、误报评估、Owner 审核和灰度启用。否则平台会把个别异常反馈扩大成大面积误阻断。
DataAgent 的质量响应也应显式表达数据状态。例如,当核心分区被阻断时,回答不应伪装成正常结果,而应说明“当前使用上一可用分区,今日分区因唯一性检查失败未发布”。这类回答需要编排系统、质量系统和元数据系统共同提供状态。
14.3 质量链路的状态、告警与恢复¶
本节给出一组生产工程示例,重点是接口、状态和操作流程自洽。编排平台至少要维护四类状态:任务运行状态、资产可用状态、质量检查状态和发布状态。任务成功不等于资产可用;质量通过也不等于已发布;发布成功也不代表所有下游缓存已刷新。
图14-9:把“写入临时分区”和“切换正式版本”拆开。来源:本书自绘。Alt text:发布分两步,先写入临时分区并校验,再原子切换正式版本指针,箭头表示校验通过才切换,避免半成品数据直接对外可见。
图 14-9 把“写入临时分区”和“切换正式版本”拆开。这样质量失败时,坏数据不会覆盖线上资产;质量通过后,发布动作可以成为一个可审计的版本切换。DataAgent 只读取正式版本和明确允许的降级版本。
下面这份 YAML 同时放进编排信息和质量配置,目的是让读者看到两类配置怎样落在同一份资产定义里。真正上线时,也应尽量把这两个维度放在同一条治理链上管理。
# 示例:数据资产编排与质量配置,不包含真实凭证
asset:
id: ads.fulfillment_delay_daily
owner: fulfillment-data-team
schedule: "0 6 * * *"
partition_key: dt
publish_mode: versioned_partition
dependencies:
- asset_id: dwd.orders_daily
freshness: 2h
- asset_id: dim.store_region
freshness: 24h
quality_gates:
hard:
- name: order_id_unique
dimension: uniqueness
expression: duplicate_count(order_id) = 0
on_failure: block_publish
- name: required_columns_not_null
dimension: completeness
columns: [order_id, store_id, promised_at, delivered_at]
on_failure: block_publish
soft:
- name: row_count_anomaly
dimension: completeness
expression: row_count within historical_band(weekday, 0.2)
on_failure: publish_with_warning
fallback:
strategy: keep_previous_partition
max_age: 2d
notifications:
severity: critical
channels: [data-incident-queue]
示例 14-2:资产编排与质量配置示例¶
这段 YAML 不对应某个工具的专有语法,而是表达生产系统需要保存的关键字段:依赖、新鲜度、门禁、失败动作、降级策略和通知路径。以下伪代码展示发布动作如何避免坏数据覆盖正式分区。
# 伪代码:质量门禁通过后再切换正式版本
def publish_asset(run):
write_temp_partition(run.asset_id, run.partition, run.output)
quality_result = run_quality_checks(run.asset_id, run.partition)
if quality_result.has_blocking_failure:
mark_asset_state(run.asset_id, run.partition, "blocked", quality_result)
keep_previous_version(run.asset_id)
notify_owner(run.asset_id, quality_result)
return "blocked"
version = commit_versioned_partition(run.asset_id, run.partition)
mark_asset_state(run.asset_id, run.partition, "published", quality_result)
refresh_downstream_cache(run.asset_id, version)
return "published"
示例 14-3:质量发布伪代码¶
核心思想是先写临时结果,再检查,通过后切换版本;失败时保留旧版本并暴露质量状态。失败恢复需要区分重试、回填和重算。重试面向瞬时故障,回填面向缺失历史窗口,重算面向逻辑或口径错误。三者不能共用同一按钮。
图14-10:重试、回填与重算的恢复决策路径。来源:本书自绘。Alt text:决策树按"是瞬时失败、上游缺数据还是逻辑变更"分出重试、回填、重算三条恢复路径,帮助选择合适的恢复动作。
图 14-10 是运维 Runbook 的核心。瞬时网络故障可以自动重试;源数据缺失需要等待或回填;业务口径错误则要走变更和重算流程。平台如果把所有失败都配置为自动重试,会在 Schema 不兼容、质量失败或权限错误时制造更多无效运行。
14.3.1 质量规则怎样进入生产链路¶
质量规则进入生产链路前,评审对象不应只是规则数量,而应是规则能否控制数据发布。核心资产、视图、指标和特征都要有资产 ID、Owner、SLA、分区策略和下游消费者;调度系统需要区分任务依赖和资产依赖,DataAgent 只消费资产可用状态。规则覆盖要贴近业务风险。完整性、唯一性、准确性、及时性、一致性和有效性都要有核心规则;每条规则都有严重级别、失败动作、降级策略和 Owner。发布时先写临时分区或影子版本,质量通过后再切换正式版本。回填和事故处理也属于门禁范围。历史回填要定义窗口、资源限额、幂等写入、质量复检和下游通知;告警要有分级、去重、抑制、升级路径和确认记录;质量事故要能冻结下游发布、定位血缘、修复、复检和复盘。Agent 集成层还要验证资产状态、质量状态、新鲜度和降级版本能被 DataAgent 读取。调度并发、回填资源、质量扫描频率和历史数据保留要有预算;发布、阻断、回填、重算和规则变更都要留下审计记录。
任务成功但订单事实表为空,DataAgent 正常回答了错误结论¶
- 现象:运营团队询问昨日履约延迟,DataAgent 回答“无明显延迟”,但实际是订单事实表上游采集失败,产出为空表。
- 根因:调度器只检查任务退出状态,没有对行数、分区新鲜度和上游资产状态做质量门禁。
- 修复:核心资产增加行数波动、分区新鲜度和非空检查;质量失败时阻断发布并让 DataAgent 返回“数据不可用”状态。
回填历史分区刷新线上缓存,用户看到指标跳变¶
- 现象:数据团队回填上月履约口径时,经营看板和 DataAgent 的当前指标短时间内出现跳变。
- 根因:回填任务复用了正式发布流程,未区分历史影子分区和线上分区,也没有通知下游缓存刷新策略。
- 修复:回填先写影子版本,通过质量复检和差异报告后再人工切换;当前窗口缓存与历史回填缓存隔离。
促销日行数暴涨触发质量误报,核心日报被阻断¶
- 现象:大促当天订单量超过历史阈值,质量系统判断为异常并阻断发布。
- 根因:行数规则只按过去 7 天均值计算,没有引入业务日历、促销标记和星期效应。
- 修复:把业务日历纳入阈值模型;对促销期采用单独基线;硬门禁仅保留不可妥协规则,波动类规则改为软告警。
质量规则没人认领,告警持续数周无人处理¶
- 现象:某个维表有效性告警每天触发,但既没有阻断,也没有修复。
- 根因:规则没有 Owner,告警没有升级路径,质量平台只记录失败次数。
- 修复:规则绑定资产 Owner;超过确认时限自动升级;长期误报规则关闭、调整或转为观察。
Agent 用户反馈没有进入质量体系,同类错误反复出现¶
- 现象:多名业务人员反馈“门店区域口径和看板不同”,但 DataAgent 一周后仍给出同类错误回答。
- 根因:用户反馈只进入产品客服队列,没有沉淀为数据质量规则或语义口径检查。
- 修复:建立 DataAgent 反馈队列,按资产和字段聚合质疑样本;经 Owner 审核后新增区域映射一致性规则。
14.3.2 质量状态在 Agent 链路中的传播¶
数据质量状态不能只留在调度系统里。DataAgent 查询前需要知道资产是否已发布、是否阻断、是否处于回填、是否只有影子版本、是否存在软告警。查询后,报告层也需要知道结果是否来自降级数据。若质量状态没有进入 Agent 链路,模型会把不稳定数据包装成确定结论,用户很难发现问题。质量状态可以分成四类传播。第一类是阻断状态,核心资产未通过门禁时,DataAgent 应拒答或提示数据不可用。第二类是降级状态,数据可用于探索,但不能用于正式报告。第三类是观察状态,规则有告警但不影响主要结论,回答中可以标注限制。第四类是正常状态,结果可以进入下游分析和报告。不同状态对应不同产品行为,而非只在后台显示红黄绿灯。
用户反馈也应进入质量传播链。业务用户指出某个结果异常时,平台要把反馈关联到资产、字段、指标和 Run,而非只记录一条客服工单。经 Owner 确认后,这条反馈可以转成质量规则、语义层修正或评测样本。这样 DataAgent 的使用过程会反向提升数据质量,而非不断暴露同一类问题。质量门禁的价值在于提前拦截,而非事后生成报告。空值率异常、主键重复、分区缺失、指标波动过大,若已经进入下游宽表,Agent 很难在查询时识别。门禁把问题挡在数据产品入口,能减少后续解释成本。编排系统还要保存恢复证据。一次补数改了哪些分区、跳过了哪些失败文件、哪些下游任务被重跑、哪些报告需要刷新,都应该有记录。没有这些记录,业务问“这个数什么时候修好”时,团队只能靠人肉沟通。
对 Agent 平台来说,编排结果应暴露为可消费状态。某个指标今天未通过质量检查,Agent 可以拒绝回答或标注风险;某个任务正在补数,Agent 可以延后生成报告。这样的交互比给出一个错误但流畅的答案更可靠。编排系统还要区分技术成功和业务可用。一个 SQL 任务返回 0 行可能是正常结果,也可能是上游分区缺失;一个任务耗时变短可能是优化生效,也可能是没有读到数据。质量规则需要结合业务预期,而非只看任务是否退出码为 0。告警设计也要减少噪声。所有失败都发到同一个群,久了没人处理;只告警最终宽表,又会错过关键上游问题。更好的方式是按数据产品分责任人,按影响范围分级,并在告警里给出上游失败、下游影响和建议动作。这样业务团队知道问题是否影响今天的 Agent 回答。
补数流程要和 Agent 产物联动。数据修复后,哪些缓存要失效,哪些报告要刷新,哪些评测样本要重跑,哪些用户需要通知,都不能靠人工记忆。编排系统记录补数范围后,平台可以触发下游刷新,避免用户继续看到旧结论。质量规则本身也要版本化。阈值调整、异常检测方法更换、字段规则放宽,都会改变数据产品是否可用。若规则变化没有记录,后续复盘无法判断某天的异常是数据改善了,还是门禁变松了。当编排和质量进入平台后,DataAgent 会获得一种重要能力:在数据不可信时停止。停止回答是系统保护业务的表现,不应被简单归为失败。比起给出错误答案,明确说明数据产品未通过质量门禁更符合企业使用场景。
DAG 设计要反映数据产品边界。把所有任务放进一张大图,调度看起来集中,失败影响范围却难以判断;把任务拆得太散,又会让依赖和补数复杂。通常可以按数据产品、业务域和 SLA 划分 DAG,让每个 DAG 有明确负责人、输入、输出和质量门禁。重试策略不能只按技术错误设计。网络抖动可以自动重试,源数据缺失需要等待或告警,质量异常需要隔离,业务口径变化需要人工确认。若所有失败都重试三次,系统会延迟暴露真实问题;若所有失败都立即告警,团队会被噪声淹没。编排系统要根据失败类型选择动作。质量检查要覆盖分布变化。行数、空值和主键只是基础,很多业务问题体现在指标突然波动、类别比例变化、金额单位异常或日期分布偏移。DataAgent 会基于这些数据做解释,质量规则越贴近业务,回答越可靠。规则可以先从高价值指标开始,不必一次覆盖所有字段。
数据产品发布需要验收人。工程团队可以确认任务运行,业务负责人要确认口径和可用性,平台团队要确认状态能被 Agent 消费。没有验收人,数据产品容易停留在“表已经产出”,但上层系统不知道是否可以放心使用。质量事故复盘应沉淀为规则。一次库存分区缺失、一次金额单位错误、一次维表延迟,都可以转成新的检查或告警。编排与质量体系的成熟,来自这些事故不断转化为自动控制,而非依赖团队记住教训。编排系统还应把 SLA 暴露给 Agent。某个数据产品约定每天 8 点可用,当前 8 点 30 仍未产出,Agent 就应该知道这是异常;另一个产品只承诺中午前可用,早上查询为空不一定是故障。SLA 进入元数据后,回答可以更准确地解释数据状态。
质量门禁要支持临时豁免,但豁免必须可追踪。月末关账、供应商延迟或历史补数时,业务可能允许某些质量规则短期放宽。平台应记录豁免原因、负责人、到期时间和影响范围。没有到期时间的豁免,会让质量规则逐渐失效。编排结果还可以反哺评测。DataAgent 评测失败时,如果对应数据产品当天未通过质量门禁,失败不应完全归咎于模型。评测系统读取数据状态后,可以区分模型退化和数据异常。这样质量链路和模型评测才不会互相误伤。
14.4 数据质量样本与 Agent 失败回写¶
数据质量治理接入 Agent 后,质量样本要从真实失败中来。传统数据质量规则往往关注空值、重复、范围和延迟,Agent 场景还会暴露新的质量问题:字段名能被模型理解但业务含义不清,枚举值相近导致筛选错误,时间粒度和指标口径不匹配,维表缺少别名,异常值被模型解释成业务变化。若这些问题没有回写到数据质量体系,Agent 会反复在同类问题上失败。
失败回写应包含用户问题、生成查询、实际结果、人工修正、错误字段、质量规则和修复状态。一个 DataAgent 查询失败后,团队要能判断是模型生成错了 SQL,还是数据本身缺少质量约束。若字段别名导致错误,就补 metadata;若维表缺少映射,就补数据规则;若异常值合理但需要解释,就补业务注释;若数据延迟导致误判,就补刷新状态提示。质量样本越贴近任务,规则就越能服务 Agent。
数据质量复盘还要有优先级。并非所有规则都需要早期覆盖,优先处理会影响外部输出、高风险决策、核心指标和多业务复用的数据。低风险探索性数据可以先提示不稳定,不直接进入正式报告。这样质量治理不会变成无边界的规则工程,而会围绕 Agent 生产任务逐步加固。
14.5 质量规则的业务解释¶
数据质量规则需要能被业务解释。空值率、唯一性、范围校验、延迟阈值这些规则对数据团队很清楚,但业务用户看到的是“为什么 Agent 不回答”“为什么报告延迟”“为什么指标被标记异常”。若规则只停留在技术告警里,前端和报告无法给出可信解释,用户会把质量拦截理解成系统故障。
每条高风险质量规则都应有业务说明。比如“近 3 小时订单分区未刷新”对应“今日实时销售额可能低估”;“客户主数据重复”对应“客户归属分析可能重复计数”;“币种为空”对应“跨区域收入不可汇总”。这些说明可以进入 DataAgent 的失败提示、报告注释和人工复核材料。质量规则越能被业务理解,Agent 越容易在异常时保持信任。
质量解释还要有责任人。数据 owner 负责修数据,业务 owner 负责确认影响,平台负责把异常传递给 Agent 和用户界面。没有责任人的规则只会制造告警噪声。早期可以先为核心指标和高风险字段补业务解释,随着失败样本增加再扩展规则库。
14.6 数据质量规则的变更回放¶
数据质量规则变更后,要回放受影响的 Agent 样本。阈值调整、空值规则、主键唯一性、枚举范围、延迟告警和异常检测逻辑,都会改变 DataAgent 对数据可信度的判断。若规则变松,系统可能把低质量数据解释成业务事实;若规则变严,系统可能频繁拒绝可用数据。质量规则本身也需要版本治理。
变更回放应记录旧规则、新规则、影响表、影响指标、历史失败样本、当前通过率和人工裁定。对于经营报表和自动报告场景,还要检查报告中的质量提示是否随规则变化更新。质量规则不能只存在于调度系统或数据测试脚本里,它要进入语义层和 Trace,让 Agent 知道数据是否适合回答当前问题。
早期可以先对核心数据产品建立质量规则台账。每条规则有 owner、适用表、业务解释、最近修改时间和回滚方式。线上争议出现时,团队能判断是数据真的异常、规则误报、规则漏报,还是 Agent 没有正确使用质量信号。这样数据质量会成为智能链路的一部分,而不是数据团队内部告警。
14.7 质量规则与编排状态的联合复盘¶
数据质量问题进入 Agent 链路后,不能只看规则是否通过。编排状态同样重要:任务是否按时开始,依赖是否等待过久,重跑是否触发下游更新,失败是否被正确标记,告警是否到达 owner。一个指标回答出错,可能是质量规则漏检,也可能是上游任务延迟、回填未完成、下游缓存没有刷新或 DataAgent 使用了旧分区。质量规则和编排状态要放在同一份复盘材料里。
联合复盘应围绕业务任务展开。比如经营分析报告中的销售额异常,复盘时不只检查销售表的空值率和主键唯一性,还要检查数据采集任务、清洗任务、汇总任务、指标发布任务和语义层刷新是否按预期完成。若质量规则通过但任务状态异常,Agent 应提示数据正在刷新或使用上一版数据;若任务状态正常但质量规则失败,Agent 应停止生成确定结论,并给出可解释的降级结果。
早期可以为核心数据产品建立联合复盘模板。模板记录 DAG run、资产版本、质量规则、告警 owner、下游 Agent、受影响 artifact 和恢复动作。这样第14章的数据质量不再停留在表级检查,而能进入第34章查询执行、第36章报告生成和第38章 Trace 的运行链路。数据编排的价值也会从“任务跑完”提升到“业务证据可信”。
14.8 编排事故的用户可见降级¶
数据编排事故发生时,Agent 平台要决定用户看到什么。上游任务延迟、质量规则失败、回填未完成、调度重试和指标发布暂停,都会让数据处在“暂时不可用”或“只能有限使用”的状态。若 DataAgent 继续给出确定结论,用户会把系统当成可信数据入口;若系统只返回技术错误,用户又无法判断是否可以等待、换问题或查看上一版结果。降级设计要把数据生产状态翻译成用户能理解的回答边界。
用户可见降级可以按任务类型处理。同步问数遇到最新分区延迟时,可以返回上一版数据并说明截止时间;经营报告遇到质量规则失败时,可以暂停发布并附上受影响指标;自动归因遇到上游缺表时,应停止推断并保留等待队列;低风险趋势分析可以使用降级样本,但必须把不完整数据标记进 artifact。不同任务对时效性和准确性的要求不同,不能用同一种错误页覆盖所有场景。
降级还需要和 Runtime 状态绑定。数据不可用时,Run 不能简单标记为 failed 或 succeeded,而应保留等待、降级完成、人工复核、数据刷新后重跑等状态线索。Trace 中要记录触发降级的数据资产、质量规则、调度状态和用户可见文案。这样后续复盘能够确认用户是否被正确告知,也能让第42章的 SLO 把“系统可用”拆成计算可用、数据可用和回答可信。
早期平台可以先为高频数据产品准备三类降级文案:数据延迟、质量失败和权限裁剪。文案不需要暴露内部 DAG 细节,但要说明当前回答使用的数据版本、受影响范围和后续动作。这样编排和质量系统产生的状态不会停留在内部告警,而会进入 Agent 的交互体验和审计证据。对企业级 DataAgent 来说,知道何时不回答、如何解释等待和怎样恢复,同样属于数据工程能力。
14.9 数据契约争议的裁定流程¶
数据契约上线后,争议通常来自边界样本。业务团队认为字段含义已经说明,数据团队认为数据符合 schema,Agent 团队却发现模型在真实问题里产生错误解释。此时争议不应停留在“谁的定义正确”。平台需要把争议样本固定下来,检查字段定义、源表口径、转换逻辑、权限标签、历史数据和用户问题是否共同支持当前契约。
裁定流程要保留证据。每个争议样本应包含用户问题、涉及字段、当前契约、实际数据片段、下游工具结果、模型解释、人工裁定和修改建议。若裁定结果是字段定义不清,需要更新契约文档和语义层;若是源数据异常,需要进入质量修复;若是 Agent 解释过度,需要修 Prompt 或输出校验;若是业务口径存在多个版本,需要业务 owner 指定适用范围。
早期可以把数据契约争议接入发布流程。争议未关闭时,高风险指标不进入自动报告;裁定完成后,样本进入回归集。这样数据契约不会只是一份 schema 文件,而会成为业务、数据和 Agent 团队共同维护的事实协议。
14.10 数据质量事故的跨层复盘¶
数据质量进入生产后,新增能力不能只看功能是否可用,还要看运行证据能否被不同角色复用。平台需要把指标版本、异常样本、校验规则、责任人、影响报表和修复时间记录成稳定字段,并和发布单、Trace、评测样本以及事故记录关联起来。这样一次线上问题发生后,团队可以沿着同一组事实判断影响范围、责任归属和修复顺序,而不是在模型日志、业务日志和人工说明之间来回拼接。
这类证据还要服务相邻章节的能力。它和第33章语义层、第34章 NL2SQL 和第36章报告生成相连:上游能力提供输入假设,下游能力使用执行结果,治理能力负责保存证据和复审结论。若这些材料没有统一编号和版本,章节里讨论的工程能力在生产中会被拆散。业务 owner 只能看到用户投诉,平台 owner 只能看到系统错误,安全或合规团队只能看到事后说明,最后很难判断问题到底来自数据、模型、工具、流程还是组织责任。
生产环境中常见的风险包括源表延迟被解释成业务变化、空值处理改变口径、异常被缓存进入报告。这些问题在演示阶段不明显,因为演示通常只覆盖成功路径;上线后,用户会带来边界问题、重复请求、权限变化和长时间运行状态。平台团队应把失败样本纳入发布节奏,记录哪些样本需要阻断发布,哪些样本可以通过降级处理,哪些样本需要业务 owner 接受剩余风险。
数据质量复盘应把工程修复和业务解释分开记录。这份记录不需要复杂,但要包含时间、版本、owner、样本、处置动作和下次复查条件。没有这些字段,复盘会停留在口头经验;有了这些字段,平台才能把一次问题转成后续发布、评测和培训材料。
早期平台可以从少量高风险场景开始。先选择调用量高、业务影响大或涉及敏感数据的路径,要求每次变更都留下证据包,再逐步推广到普通场景。这样章节里的能力不会停留在概念层,而会成为可运行、可解释、可退回的工程系统。
14.11 质量规则的业务版本管理¶
数据质量规则会随业务变化。缺货、退款、渠道迁移、组织调整和指标重命名,都可能让原来的异常阈值失效。若规则只写在校验任务里,业务方很难知道某次异常是数据错误还是规则过期。平台应给质量规则建立业务版本,记录适用范围、阈值来源、审批人、开始时间和废止条件。
业务版本还能帮助 Agent 解释结果。同一个指标在规则变更前后出现差异时,DataAgent 应能说明当前使用哪一版质量规则,报告生成层也应避免把规则变化解释成业务变化。对于高影响指标,规则变更应触发样本回放和用户通知,确保旧报告、缓存和评测样本不会继续使用过期判断。
早期可以先为核心经营指标建立质量规则版本。每次规则变化都记录原因、影响字段、影响报表、回放样本和回滚方式。这样质量治理会从后台校验任务进入平台证据体系,支撑后续问数、报告和事故复盘。
本章小结¶
数据编排还涉及让脚本按时运行,还要让数据产品按依赖、状态、质量和版本被可靠生产。任务 DAG、资产依赖、业务工作流和 Agent Workflow 应分层治理;混在一起会让权限、审计和恢复边界变得模糊。数据质量规则要包含维度、阈值、严重级别、失败动作和 Owner。没有动作的规则只会制造告警噪声。DataAgent 只能消费通过门禁或明确降级的数据资产,并在回答中暴露质量状态和新鲜度。回填、重试和重算是三类不同恢复动作。它们都需要版本化发布、质量复检和下游通知,否则 Agent 很容易引用正在修复中的数据并给出看似确定的结论。
参考文献¶
Apache Airflow. (n.d.). Documentation.
Dagster. (n.d.). Documentation.
Prefect. (n.d.). Documentation.
Great Expectations. (n.d.). Documentation.
Soda. (n.d.). Documentation.









