最贵的数据事故看起来都不像事故。什么也不报错,行照常到达,任务跑完,模型训完,三周后有人发现输出变了。
字段被悄悄改掉,是这类失败里最常见的一种。
它为什么一直静悄悄
改名的列变成空值,而空值在下游某处被一个默认值接住了。新增的取值变成未知,而未知通常被映射成「其他」。被删掉的字段,只是让表变窄了。
每一条路单独看都说得过去。合在一起,意思是模型训练用的数据,已经和数据卡里描述的那份不是同一个东西了。
把约定写下来
约定就是一个小文件:字段名、类型、允许的取值或范围、能否为空、以及版本。它放在数据旁边,不放在 wiki 里。
然后让装载器去检查它。违反约定的行带着理由被拒绝,而不是被掰成合适的形状。
大声拒绝,但在私底下
在生产里拒绝行听起来吓人,所以团队选择了强制转换。正确的做法是拒绝进异常队列、计数,然后由人来决定。
有异常队列的链路可以信任。静默强转的链路不行,看板再绿也不行。
给约定版本,不只是给数据版本
每次改动都有版本号和日期。下游任务声明它期望哪个版本,不匹配就是一个启动错误,而不是月底的意外。
Zovda 通过 Datuva 交付每一批数据时都附一份带版本的约定。数据研究语料展示了字段清单如何跟数据一起走。
告诉我们你的链路依赖哪些字段,我们会在 1 个工作日内回复。
