对象格式一变,输入规范不能只改字段名,而要先判断变化属于“同一事实换了表达”还是“事实本身换了口径”。前者只需做映射和校验,后者要重设采集边界与对照基准,否则不同角色会各自认为输入是对的。
多个角色对同一事实理解不同,常见于三种情况。第一,源对象从单页结构变成列表结构,原本一条记录对应一个页面,现在一条记录要拆成多条。第二,对象里出现了嵌套字段,原先的“标题”现在分成主标题和副标题。第三,对象新增了状态字段,旧输入规范里没有对应位置。
前两种通常属于表达变化,可以用映射规则吸收;第三种往往属于口径变化,会改变后续核对时“什么算同一条记录”。如果把第三种也当作字段改名处理,输入看起来正常,但比对结果会持续错位。
解释一:只是映射问题。源对象仍然描述同一批事实,只是层级、命名或分隔方式变了。此时应保留原有主键逻辑,增加一层转换:把新字段映射到旧字段,把嵌套值展开成平铺值,把列表拆成多行。判断依据是,用新旧两套规范各取一批对象,主键集合应当基本重合。
解释二:基准问题。源对象新增或删除了决定记录身份的条件,例如从“按页面”变为“按页面加时间点”,或从“按条目”变为“按条目加来源”。此时主键集合会明显变化,不是转换能修补的。需要重新定义输入规范中的唯一标识、去重范围和版本边界,再决定历史数据是否回填。
能区分这两种解释的证据,不是看报错数量,而是看一组可核对的项目:同一批对象在旧规范和新规范下,分别得到多少条记录、主键重合多少、哪些字段出现一对多。若重合度高且一对多集中在可展开字段,偏映射;若主键大面积不重合,偏基准。
输入规范不要从字段清单开始改,先固定三个位置,改动才有边界。
固定后再写转换规则。一个实际动作是:先只改唯一标识和时间口径,用一小批对象跑新旧规范对照,记录主键重合情况和一对多分布。若重合符合预期,再补字段映射;若不符合,先回到基准问题,不要急着加字段。
假设某工具原先接收的输入对象是一行一条:标题、来源、时间。后来对象改为每条包含一个标题和多个来源,来源里再带各自时间。若仍按旧规范一行一条读取,会出现同一标题重复多次。
此时可先按“标题加来源加时间”做唯一标识,把嵌套展开成多行,再核对展开后的记录数与源对象中的来源总数是否一致。若一致,说明只是结构变化;若不一致,说明对象里还有未展开的层级或存在空来源,需要继续定位。这个动作的结果会直接决定下一步:一致就进入字段校验,不一致就先修展开规则。
当多个角色对输入规范有不同理解时,不要争论哪个格式“更合理”,而是把分歧写成可核对的项目:同一批对象在两种理解下各得到什么记录集合、主键如何重合、哪些字段出现一对多、缺失值出现在哪一层。核对结果若显示差异集中在可展开字段,按映射处理;若差异集中在记录身份,按基准处理。
需要提醒的是,请求量下降、抓取量归零或某类对象暂时没有结果,都不能单独证明输入规范改对了。这些现象还可能来自任务未启动、对象源本身变化、权限或过滤条件变化。判断输入规范是否成立,仍要回到主键重合、字段完整度和对照结果这三个可核对项目上。