数据迁移中的常见问题

目标:之前用kettle对数据进行处理,因为要对数据进行迁移,所以希望将kettle的逻辑全部改成存储过程,对数据进行处理

运行过程中最常见的一个问题出在排序这里

1、ROW_NUMBER()

当满足条件的记录有多条,要对记录进ROW_NUMBER(),取number值作为一个ID,然后通过ID筛选出合适的记录。如果此时多条记录PARTITION BY的字段取值内容完全一致,并且order by的内容也一致(比如余额都是0的情况),那么这里的ID可能就是一个相对随机的数据,跟kettle里面处理出来的可能会存在不一致的情况,这就导致双方取数不一致,也就导致最终的结果是不一致的。

当分组和排序所依赖的字段完全一样的情况下,ROW_NUMBER()函数在给定顺序方面可能会出现不确定性。这是因为ROW_NUMBER()函数是基于查询结果集的逻辑顺序进行计算的,而不是基于特定的物理排序。

在这种情况下,如果您希望确保ROW_NUMBER()函数的顺序是确定的,可以考虑添加额外的排序条件,以确保结果的一致性。可以使用其他列或表达式作为排序条件,以使结果集的顺序明确。

可能的解决问题的办法:使用其他的完全能够使得排序一致的字段进行分组排序

2、依赖关系

要确认一下依赖关系,看看是不是有其他的存储过程等向老表里面插数据

3、填报类表

确认一下这个迁移的表是不是填报类的报表

如果是的话,要查看一下数据对不上的字段是不是可以被手动填报的字段

如果是的话,看看是不是会实际修改这个字段的数据

4、空值与空字符串

在核对新老数据的时候我们从新表老表中拿出对应的数据,从老表中拿出一条记录a,从新表中拿出对应的一条记录b,可以将这两条数据粘贴在Excel中使用if判断不同的字段在哪里,但是这种方式会有一种情况不能检查出来。
如果记录a某个字段是空值,数据b对应的字段是空字符串,这样在Excel里面是无法被检查出来的,最好是直接在数据库里面观察

5、中文字符的显示问题

在某些时候kettle与存储过程处理之后的名字是不太一样的,这种情况一般是因为原来的数据就是有问题的,主要是体现在中文字符的显示上

中文名字之间最好不要存在空格

6、查看是否存在保存历史的表

在做数据迁移的时候,尤其是不存储历史的数据而言(只有一天的数据),要看一下系统里面是不是有历史表存储每天的数据,这样出现不一样的数据的时候也便于验证前些天的数据

你可能感兴趣的:(数据库)