每月更新一批数据,感觉像是往后面追加行。它其实是一次伪装成追加的结构变更——因为产出数据的上游也变了,而它没有事先打招呼。
字段改名、装载器把那一列填成空值,什么都不会坏。训练照常跑完。结果悄悄不一样了。
那种安静的断裂
一次更新里会有三件事变,只有一件是「多了几行」:
- 结构不变的新行,这是所有人都准备好的情况
- 既有字段里出现新值,这是会毁掉配比的情况
- 定义变了,比如某个类别现在包含了它原本排除的东西
第三种在行数上看不出来,在行为上却是决定性的。
把结构钉住,让内容按版本走
把字段清单当成一份带版本号的约定。上游加了一个取值,那是一个新版本,不是某个普通的星期二。
旧版本要一直保持可读,只要下游还有东西可能跑在它上面。只能读最新结构的数据链路,复现不了上个月那次训练。
回填是另一份工作
用新定义去补历史,会做出一个看起来一致、其实不一致的集合,因为那些旧行是在已经不存在的规则下产出的。
要么按当时的规则回填,并且标注清楚;要么不碰历史,从新定义生效的那天开始。把选择写下来。
每次更新该记的四行
新增行数、删除行数、每个类别的取值分布及变化、上游变更的日期。四行字,能把一次「玄学」变成一份差异清单。
这些语料由 Zovda 通过 Datuva 维护,每次更新留下自己的记录,上游删掉的内容也不会在下游变成一个洞。语料总目录列出了按月更新的几类。
告诉我们你的数据要多频繁地动,我们会在 1 个工作日内回复。
