先给结论:格式变化时不要只改导入模板,而要先把“对象定义”重新写清——哪些字段是身份、哪些是分组、哪些只是描述,然后让输入规范、校验规则和后续判断口径同步改。只改模板而不改校验,通常会在下一次批量处理时以另一种形式复发。
假设你维护一份关键词清单,早期每行只放一个词,工具处理正常。后来为了区分地域和意图,你把每行改成“词+地域+意图”三段,用竖线分隔,并在表头写了说明。导入后工具没有报错,但输出里大量对象被合并或丢弃。这个假设情境里,真正的变化不是分隔符,而是“一行代表什么”变了:原来一行是一个查询对象,现在一行是一个带属性的对象组合。
如果只把分隔符从竖线换成逗号,问题会暂时消失又换形式出现。原因是输入规范没有回答三个问题:对象的唯一标识是什么,属性允许为空吗,重复对象是覆盖还是并存。格式只是这三个答案的外在表现。
把清单里的字段按作用分成三类,能避免大部分返工:
分类完成后,输入规范应写成可执行的规则,而不是说明文字。例如:身份字段必填且唯一;分组字段为空时按“未分组”处理;描述字段不参与匹配。这样即使以后再加一个分组维度,也只需扩展分组字段,不必重写整个模板。
对象粒度指“一行代表一个什么”。粒度变化时,校验规则必须同步,否则会出现两种典型症状:
一个可操作的动作是:在正式导入前,先用一小段数据跑一次“数量比对”——记录输入行数、去重后行数、输出对象数。三个数字不一致时,先定位差异来自哪一类字段,再决定是改规范还是改数据。这个动作的结果会直接决定下一步:如果差异来自分组字段,就调整去重键;如果来自描述字段,就把它移出匹配范围。
输入规范改了,后续用来判断效果的口径如果不改,会得到看似矛盾的结果。例如原来按“词”统计,现在按“词+地域”统计,同一批数据的分布会完全不同。这不是工具有问题,而是统计单位变了。
处理方法是把“统计单位”写进输入规范,和对象定义放在一起。具体做法:在规范里注明本次统计以哪个字段组合为准,并在输出说明里重复一次。这样执行人员拿到结果时,不会把两种口径的数字直接对比。
需要说明的是,请求量、抓取量或某项统计归零,不能单独证明输入规范改对了。它也可能是数据源本身变化、时间窗口不同或过滤条件收紧造成的。要确认规范是否生效,应同时看对象数量、去重结果和字段完整度这几项,而不是只看一个总量。
格式变化时,按下面顺序处理,比直接改模板更稳:
这个顺序的价值在于:分隔符和模板是最容易改的,也是最容易掩盖问题的。先定对象定义,格式变化就只是一次字段映射,而不是一次规则重写。如果工具本身对输入格式有固定要求,具体支持哪些格式和字段类型需要以该工具当前说明为准,不能凭旧教程推断。
回到开头的假设情境:当“一行一个词”变成“一行一个带属性的对象”时,正确的输入规范不是换分隔符,而是把身份、分组、描述三类字段分开声明,并让校验规则和统计口径一起更新。这样下一次格式再变,你改的是映射关系,而不是整套判断逻辑。