先判断变化属于哪一类:如果新格式只是原有字段的排列或命名调整,改映射表并做一次抽样回填即可;如果新格式改变了字段粒度,比如原来一行一个账户、现在一行一条素材,就必须先重写输入规范再导入。缺少完整数据或权限时,最小动作是拿三到五条真实样本手工走一遍,记录哪些字段能对上、哪些对不上,不能据此判断全量数据也能通过。
字段改名、列顺序调整、日期格式从斜杠换成短横线,属于表层变化。处理方式是维护一张新旧字段对照表,导入前做一次转换,输出仍沿用原来的交付结构。粒度改变则不同:原来按天汇总、现在按小时;原来一个对象一行、现在一个对象多行。这类变化会直接影响去重逻辑、汇总口径和后续的对比分析,不能靠改列名解决。
判断依据可以看一条:把新旧两份样本按同一对象排序后,行数是否一致。行数一致而列名不同,按表层变化处理;行数不一致,按粒度变化处理。这个判断只需要样本,不需要完整数据权限。
拿不到全量导出或没有接口权限时,仍可执行的动作是:向数据提供方索取一份包含表头和若干条记录的样本文件,在本地用脚本或表格工具按目标规范试转换一次。结果分三种:全部字段可映射、部分字段需人工补充、关键字段缺失。前两种可以继续往下设计规范,第三种应先确认该字段是否真的必要,而不是先假定它以后会有。
需要明确的是,样本通过不能推出全量通过。样本往往来自近期数据,历史数据可能用了旧格式;样本也可能经过人工挑选,缺少边界值。因此样本转换的结果只用于确定规范草稿,不用于确认上线条件。
输入规范不是孤立文档,它服务于下游的汇总表或报表。改规范前先写下输出需要哪些列、每列的口径是什么,再反推输入必须提供哪些字段。如果某个输入字段在输出里没有对应位置,就不要为了“以后可能有用”而保留它,否则会掩盖真正的缺失项。
一个假设的例子:输出需要“每个对象每天的消耗合计”。新格式按小时给数,那么输入规范里必须保留对象标识、日期、小时和消耗四个字段,并在导入步骤里做一次按对象加日期的汇总。如果直接按新格式导入而不汇总,下游会得到多行同一对象,合计会重复计算。这个例子的数字只用于说明比较方法,不代表任何真实数据规模。
例外情况包括:新格式里出现规范未定义的字段,且下游确实需要;或者新格式缺少某个必填字段,但提供方表示后续会补。前者应先扩规范再导入,后者应把该字段标为待补,并明确在补齐前不执行全量导入。
规范改完不等于任务完成。需要验证的是:同一批数据用新旧两条路径处理,输出是否可比。如果不可比,要说明差异来自格式变化还是口径变化。抓取量或请求量归零、导入条数突然下降,都不能单独证明规范改对了,也可能是提供方延迟、权限变更或筛选条件写错。先排除这些解释,再判断规范本身的问题。
最后一步是把改动写回文档,注明生效时间和适用对象。下次格式再变时,从这份文档出发,而不是从上一版脚本出发。