DS运行成功,未报错,但是插入表数据只有一半?

0
我现在要将文本数据导入到DB2数据库,源选择的是 seqeuential file Stage 目标选择的是 db2 connector stage ,设置目标的写模式是insert时,运行不报错,数据全部成功插入(数据691条),为了要保证每个月可以重新跑数,但是当月数据只存放一份。我选择的写模式是 delete then insert ,并手写删除和插入语句(先删除当月数据,再从文本获取当月数据插入),这样问题就出现了,编译运行都成功,但是查看数据库的数据只有345条,若是再次执行,数据就可能是346条,表中数据在345、346中徘徊。整了一天,还是找不到解决方案,烦请大神帮忙看看,是不是哪里缺少了什么设置?
PS:日志展示的是 1  delete 0 ; 1 insert  345 ; 0 delete 345 ;0  insert 346 这样 最后数据有346条 。反之 345条
已邀请:
1

simon_cao - 打酱油 2016-07-10 回答

谢邀,近几个月工作忙没时间来论坛看问题。
 
首先导致这个问题的原因是输出的db2 connector stage中选择了手写的删除语句。试想一下你的作业是并行执行的,那么就必然这个delete操作会在每个节点都执行一次,所以只有一半左右的数据写入到数据库中。
 
那么解决这个问题的方法也很简单,要么在输出的db2 connector中选择自动truncate table在插入数据,要不将输出 db2 connector中的运行模式改为sequential(串行模式)。
 
再给一点建议,像这样数据量小的表是可以全表删除再插入数据的,但是有时也可以考虑一下如果实现方式不复杂的情况下用增量的方式做数据更新,当然这个根据具体情况而定。
0

指尖旋律2014 2016-07-14 回答

通过设置stage的执行模式为串行,实现了delete then insert  ,但是因为delete里的条件是日期,比如,3月31日要插入20160331的数据,数据插入之后,发现这些数据不对,我重新跑一次数据,首先要将20160331的数据删除再插入,这样是没有问题的,但是要是我第一次跑3月份的数据,他就会报错,说delete语句有问题,no row fetch 等等错误,我怎么让它忽略这个delete语句?
0

楚天歌 2016-07-15 回答

我遇到过类似的问题,你尝试一下是不是和你一样

db2 connector stage 的数据不是唯一的,有重复。而你选择delete then insert模式, 会把所有数据删除了,然后插入来源数据的唯一值,你看一下是这个导致的问题吗

要回复问题请先登录注册