最近碰到了个小问题,再次记录一下 :
场景:
- 目标: 将 sss库的A视图和B视图 同步到 aaa库同构的AB两表中。
- A : 黑名单表
- B:解除黑名单表
- A和B的关系: A表有增有减, A中减少的就是B表中增加的。
- 执行计划: 定时任务执行, 第一次全量拉取,以后增量拉取。
- 增量拉去具体: 按时间戳拉取B表最新的数据,然后将这些数据再A表中删除,最后在按时间戳拉取A表。
问题:
- B表少三条记录。
问题解决过程:
- 突然有天增量拉取B表时,少3条记录。然后我以为是增量拉取过程中可能出问题了,然后将B表删干净了,重新全量拉取(通常全量拉取是没有问题的),结果仍然少了三条。
然后用kettle拉取了一次,同样少了三条,我想这应该不是我的代码问题了。
-
我第一想到的是: “ 是不是有某个字段有了空数据或有脏数据? ”
然后我就执行以下语句发现并没有少
执行上述并没有发现问题。 -
然后尝试着去看看有没有id 重复的问题。(这个是一时没有想到的)
如上述, 发现了问题, 原来是数据源的视图有 4个重复的id 。 还真是这个问题。刚好解释了我这少了三条数据的问题, 因为我这是表 id 为主键, 重复了当然插不进了。又因为对方是视图可以存在重复的数据,碰巧了这个问题。
用 count(distinct(id) ) 查询数据源 和我这边的目标也刚好对上。(当然这是后话。)
总结
以后碰到类似问题首先思路得放开,多方面想想问题的可能原因。详细了解问题。只有看清楚问题的真面目才可以解决它。
总之要有耐心。认真分析。