当跟踪对象从纯文本关键词变成带结构的目标(例如带地域、语言、匹配方式或页面归属的条目)时,输入规范要改的不是“多加一列”,而是先确定工具把什么当作唯一对象。若工具按行导入并逐行建立对象,规范应改成“一行一个对象、结构字段固定顺序”;若工具按字段映射合并同组对象,规范应改成“先定义对象键,再让其他字段成为属性”。判断依据是导入后你能否稳定复现同一对象,而不是导入是否成功。
这是两种条件下选择不同的起点。条件一:工具导入界面要求你指定分隔符、列顺序和首行是否为表头,说明它更可能按行建立对象。此时格式变化的本质是列语义变了,输入规范要锁定列位,而不是只改表头文字。条件二:工具要求你指定“对象标识字段”或能把多行合并到同一对象,说明它按键建立对象。此时格式变化的本质是键的生成规则变了,列顺序反而可以宽松。
判断动作:拿三行旧格式数据,按新格式各导入一次,观察生成的对象数量。如果三行生成三个对象,按行处理;如果三行合并成一个对象,按键处理。这个结果直接决定下一步改哪一部分规范。
当工具按行处理,输入规范应从“说明每列含义”升级为“列位契约”。具体动作是:固定列数,固定每个位置的字段类型,并为缺省值指定占位符而不是留空。留空在不同工具里可能被解释为跳过、继承上一行或报错,这三种结果会改变对象数量,不能靠猜。
假设一个短例子:旧格式三列是“词、地域、语言”,新格式多了“匹配方式”,变成四列。若规范只写“新增匹配方式列”,执行人可能把它插在第二列,导致地域被读成匹配方式。改成列位契约后,第二列永远是地域,第四列永远是匹配方式,插入位置不再自由。这个动作的结果是导入后对象数量与源文件行数一致,下一步才能校验字段值是否被正确解析。
当工具按键合并,输入规范的核心是键的组成规则。你需要明确:键由哪些字段拼接、拼接顺序、大小写是否敏感、空白是否参与比较。键规则不稳定时,同一对象会被拆成多个,后续的跟踪记录也会分散。
实施动作:把键规则写成可执行的表达式,例如 lower(词) + "|" + 地域 + "|" + 语言,并规定所有输入在进入工具前先按该表达式生成键列。结果如何影响下一步:如果同一对象在不同批次生成相同键,历史记录能接续;如果键变化,你需要决定是保留旧键并新增映射,还是重建对象。前者保留历史但增加维护成本,后者干净但会切断旧记录。
有一种常见误判:源文件列顺序或分隔符变了,就认为对象定义也变了。实际上,如果对象键的组成字段没有变,只是排列方式变了,输入规范只需调整解析层,不需要改对象层。反过来,如果键的组成字段变了,即使列名看起来一样,也必须改对象层规范。
区分方法:列出旧格式和新格式各自用于生成键的字段集合,比较集合是否相同。集合相同则只改解析;集合不同则改键规则,并评估是否需要迁移历史数据。这个判断能避免把解析问题当成对象问题处理。
验证不是看导入是否报错,而是看三个可观察结果:对象数量是否与预期一致、同一对象在两次导入后是否指向同一条记录、字段值是否落在正确的位置。如果对象数量对但字段错位,问题在列位契约;如果字段对但对象数量翻倍,问题在键规则。
根据验证结果决定下一步:列位问题回退到解析层改规范,键问题回退到对象层改规则。两者都通过后,再把规范固化为导入前的检查清单,交给执行人按清单核对,而不是依赖口头说明。具体工具对键字段的命名和合并行为需要以你所用版本的导入说明为准,不同工具可能不同。