Kettle多线程导致的抽取问题解决

上传人:公**** 文档编号:513761444 上传时间:2023-12-22 格式:DOCX 页数:4 大小:109.91KB
返回 下载 相关 举报
Kettle多线程导致的抽取问题解决_第1页
第1页 / 共4页
Kettle多线程导致的抽取问题解决_第2页
第2页 / 共4页
Kettle多线程导致的抽取问题解决_第3页
第3页 / 共4页
Kettle多线程导致的抽取问题解决_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《Kettle多线程导致的抽取问题解决》由会员分享,可在线阅读,更多相关《Kettle多线程导致的抽取问题解决(4页珍藏版)》请在金锄头文库上搜索。

1、今天在测试kettle 一个转换的问题,据现场描述,在手工执行该job转换时,获取到的时间是正确的,但是一旦使用批处理计划任务调用执行时,获取到的时间就有问题,转换如下:查找数据库当前时间这个步骤的数据库连接是AA,这一步骤的动作是查找当前系统时间select sysdate as cksj from dual插入/更新的数据库连接是BB,这一步骤的动作是把上一步骤得到的 时间,更新到表tt的bcgxsj字段中删除的数据库连接是BB,这一步骤的动作是删除表t1中CQZT=T 的数据获取更新时间的数据库连接是BB,这一步骤是获取步骤插入/更新中 更新表 tt 的 bcgxsj 字段后的值现在出现

2、的问题就是,在单独执行时,发现获取更新时间步骤中,获 取到的时间,确实是插入/更新步骤执行后的值,但是,如果通过 bat 调用,在计划任务中执行时,发现获取更新时间步骤中,获取到的 bcgxsj 就不对了,查看日志,发现获取到的时间,是更新前的时间。猜想,应该是kettle多线程的问题。再仔细看日志,发现执行的步骤好像有点不对2013/05/02 0359:062013/05/03 0353:072013/05/02 0359! 072013/5/02 0359J0E013/0 5/02 JD359:05聆 l $ 离, “ q n2013/05/02 0959 :M2013/05/02 03

3、59:542013/05/02 0359:543013/05/02 0359:542013/D5/02 0359 : 542O13/Q&/02 0359:542013/05/02 0959:S12013/05/02 2w,2013/05/03 0专00 : O S2013/05/02 000:032013/5/02 g00S032D13/05/Q2 2QQlQ32013/05/02 鸽00:032013/05/02 200:032013/05/02 0号00 : 0 3Kitch.en - Start of run,一数据抽取.-开始项常数据二r 彖-匸DadlQg cIansrermar-l

4、an rroni XHL rile mg:/g f 3;畑肓口款捱 J.3ch|-为了转换澤球补丁幵姑帚口数把丄J.毛塀丄-妆话就毎L%也回放冋放日期寻:2013/aS/02 03:59:06 获瓦厂更药时何二 二=二二_ qJ.】泵聒库77柯旳 - - F; ni -ed t = dina i -f ryH rT -.; nj ronnec-ti - 聲貶:-圧新时i可.0 -充成it理,:-_:, 0-0, S-C, 14-1” u-rt, m-c 世找数秀糜荃前时直-完戒it理 T-.r A:, R-0, K-lr 1-, F-u 复糊记录到劈臬.0 -完成处理(I=OH D=S R=l

5、r v=lt n=0, E=0 增tdS.O -芫成处世1二=片CQ, R=lr 更新抽耽本次宣新时问.0 -完戒处理11=1, O=Dr R=-r W=l, U=lr E=3 OTCT-Etaho -1- -Tfi . teps - if i - i etc - 芫成 it 理 (I z i -, B i r W-l h- , E_|: -斂据抽貶-开帕项-.i毂据增虽时何 r 塑稲迪S时间Lcadlng tra.n2fazma.t.aia fram. KML le -_救据増虽时间-为了转换铎总补丁幵始 “小 嘶增虽时r-:!埶据増也时间-遠项转换可H披回放回放日期是:013/05/M 0

6、4:D0!03 从结果获聪记录卫-宣成处理(i-o,Jet Variable2.0 - 5et- Vm-iablir* - 0 - TSet Ueriables.0Fncmn;:卫 zzumcliriiQbJLnCl T!CT1T1刃U=0f E=QO=Q? R=ljr 1=1, U=O. E=0ctingr EiLvirfiinerit raziahlea匕 variable acawaj to value 2013/04/27 OSs30:05.000 B = iz variable bcgxsj ta value 定口 13/05/02 11:42:21.000发现获取更新时间这一步骤根

7、本不是在插入/更新后执行的,而是一开始就已经连接数据库查询,这样肯定出来的结果不可能是更新后的当前系统时间这步骤甚至比查找数据库当前时间更早执行。网上查找原因:在多线程软件下处理数据库连接,最推荐的方法是在转换执行的过程中为每个线程创建单一的 连接。因此,每个步骤复制都打开它们自己单独的事务或者事务集。这将导致一个潜在的后果,就是你在使用同一个数据库资源的场景下,例如一张数据表或者视 图,条件竞争在同一个转换中可能而且会经常发生。一个常见产生错误的场景,就是当你往一个关系数据表里面写入数据,在随后的步骤里面读回 因为这两个步骤运行在不同的数据库连接下,而且拥有不同的事务上下文,你不能确保这个被

8、 第一个步骤写入的数据将可见于其他正在执行读操作的步骤。一个常见,且简单的解决这个问题的方案就是将这个转换分成 2 个不同的转换,然后保存数据 在临时表或者文件中。 另外一个方案是强制使所有的步骤使用单一数据库连接(仅一个事务),启用转换设置对话框 中的 “Make the transformation database transactional选项即可,(这一个我暂时找不到 在哪)。分析我上面转换获取错误时间的原因,由于获取更新时间 和查找数据库当前时间 这两个步骤,是不同的 数据库连接下,所以没办法保证这两个查询的先后顺序。像日志所述, 反而是获取更新时间 先执行。解决办法: 把这两个查

9、询分成两个不同的转换转换1查拔韦数据库当前时间壇加常重更新抽取本灰更新时间 删$余上次已更新宾成數橢转换2然后建一个 job, 把这两个转换串行起来再测试,查看日志,发现时间获取正确2013/35/022013/05/022013/D5/022013/D5/02 2013/05/02R - SLdJCD Of 工辽数据抽取-开站项曹数据g总1 _ Loading r-r aji3iornar len Iren 3CHL 1 ES1 -为了轩建解彖补丁开始號琵H颤据曲当前时何-辰成处51 (I-ir O0P AD.讯务2013/05/02 06;33:31 -更新打SJ本探豆新时冋.0 - 完或

10、处冬(1-1 0-0 Hl E32013/Q5Z92 Q:33;31 -尺“ pencalio,li,trana,seeps,deLeteB:Delece - 完成处理 (l=0r s=Qr R=lr Nlr Ulr E=0 口敛拷雪取-开始项&轄增虽时间.一数霑堆昼时间-Loallng 匚rafiarormaclaii rztim. XXL rile 烷蛊堆豈时间-为了转换密除补丁幵垢童歹煎撼塊虽对押罠寻討伺-匚士S1转#豆工靳 习前 N种:默母工2;導丄豆皿._0:22-21 - HiE2013/95/02 05:33H2 -2Dia/D5/(12 Q6:33H1 -2013/05/02

11、06i33!l - rLi I trana, seeps, le lere r Dele ce新时 |司 : FizLiske d reHdir.g qy匕匸Y* dzsxng caime 更新 Bj h.-充成畏匡:l-:f C-h R-4 W-Ld CM). 7-J2013/0/022019/OS/020:32;0 - Set Variables-0 - Sst variable scxsj to value 2012/04/27 0:26=09.000 06;93:50 - See Variablesr0 - Set- variable bcgxsj to value ?013/05/02 14535S2T,000

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号