码迷,mamicode.com
首页 > 其他好文 > 详细

kettle使用总结

时间:2020-05-19 10:56:01      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:执行命令   通过   关于   ini   his   安装jdk   intval   根目录   获取   

工作需要,临时接到需求说要做ETL,指定使用kettle。因此开启此番旅程。

需求:通过查询两个库的数据,经过关联后写入到第三个DB中,数据库都是使用的oracle。

一、简单介绍下kettle的工具使用

1、安装jdk并配置环境变量(kettle是java写的)

2、下载kettle工具包

https://community.hitachivantara.com/s/article/data-integration-kettle

技术图片

 

(我自己没有下载,我的是我同事给我的,所以具体下载可参看别的博文)

 3下载后解压,根目录找到spoon.bat双击运行就启动了kettle的客户端

技术图片

 

 

点击文件,右键->新建,可以选择创建作业还是转换,一般我的的主要任务是创建转换上

二、我的操作

1、创建一个转换:

  技术图片

 

(执行结果很好用,这里不做介绍,自己点点看看就能明白都是干啥的)

 1.1、首先创建连个输入

  1)在右侧导航栏选中核心对象,找到输入目录 ,下拉找到表输入

       技术图片

 

   选中拖拽到右侧工作面板

  右键编辑步骤/双击打开编辑

技术图片

 

 通过点击“新建”创建数据库连接信息,这个没啥好说的,有点oracle基础都知道咋连,点点试试哈

  2)同理创建两个表输入

1.2、其次,我们要把查到的两个结果集合并起来,然后插入到第三个DB中

  1)我们选用的连接方式是"排序合并"

       技术图片

 

 2)这个连接方式要求在合并之前每个结果集要根据连接字段排序,所以要添加排序步骤

技术图片

 

3)选中排序步骤,拖拽到工作区,同时选中表输入步骤和和排序步骤,右键“新建结点连接”

技术图片

 

4) 同理处理两一个表输入的排序,这些步骤啥的没有顺序要求,你可以自己试试

 

5)配置合并步骤.截图很明白了,参考下

技术图片

 

 1.3创建输出步骤

我这里选的是插入、更新组件(这里最好先建立结点连接,这样可以字段获取更新字段)

  技术图片

 

 

然后就完成了

技术图片

 

 点击运行,成功,如果失败了可以查看“执行结果->日志”

2、如果想要放到linux上面运行,还需要创建作业,

  参看博文   https://blog.csdn.net/qq_38797366/article/details/83273862

三、我遇到的问题:

1、两库数据连接,先尝试使用了笛卡尔积连接,后来因为同事建议使用了“排序合并”,。具体原因没有深究,只是用了排序合并觉得满足需求就用了 

2、步骤隐藏,开始为了跑流程,使用输出的“表输出”步骤,后来改用更新/插入步骤,就把原来的表输出隐藏了(没有删掉是为了后续还想测试用),当时是好了,但是后面想用、想删的时候都找不到了,百度了下,具体步骤如下:

在转换工作台中找到主对象树—>步骤,所有的转换步骤都在这里了,找到被隐藏的步骤,拖拽到工作面板即可,或者直接删除

技术图片

3、这里我因为好奇,在步骤右键点了share,结果执行转换的时候就报错了,这个share我也不知道是干啥的,也不知道为啥保存,解决方法百度收到了

到安装kettle的系统C盘目录下,如:C:\Users\Administrator\.kettle下,找到shared.xml文件,打开删除<sharedobjects>结点间的数据,保存,重新运行即可。

参看    http://blog.sina.com.cn/s/blog_5ceb51480102yfdh.html

技术图片

 

4、因为存入db的数据要记录create_time和modify_time字段,所以我在表输入的时候添加了create_time 字段的值

to_timestamp(to_char(sysdate,‘YYYY-MM-DD HH24:MI:SS‘),‘YYYY-MM-DD HH24:MI:SS‘) as create_date

在执行完更新/插入步骤后又添加了一个sql执行的步骤,用来每次更新后为数据update modify_time

技术图片          技术图片

 

这里选择“执行每一行”,不然不做更新操作

结果发现执行转换的时候,不定期发生“检查到资源锁定”的问题,百度了下,因为每个步骤用一个事物,而且没有强制前面步骤执行commit后再执行后面步骤的事物,所以资源锁定了,我的解决很粗暴,就是放到同一个步骤里了,都放到表输入中了,这个是我业务需求对这个没啥要求,但是如果必须用单独的步骤,就要从新考虑下了

参看:

https://www.cnblogs.com/Bruce_H21/p/9993451.html

(其实我发现,是两个步骤同时使用了oracle的时间函数才会出现资源锁定的问题,如果只有一个步骤使用时间函数是不会出现这个问题的,具体原因未究)

5、至此,kettle配置遇到的问题就解决完了,还有就是,使用kettle自带的定时任务据说不好用,我也只是通过命令行执行job时,发现是命令行任务,也就是如果关闭命令行,任务就停止了,其他方式我倒是没有研究,听从同事的建议,使用linux自带定时任务执行kettle执行命令。

附上执行命令,(记得要在kitchen.sh所在目录下执行哈)
./kitchen.sh -file=/app/kettle_project/test.ktr -level=Basic
./kitchen.sh -file=/app/kettle_project_update/test.kjb -level=Basic

关于linux配置定时任务,参看

https://www.cnblogs.com/intval/p/5763929.html

6、Couldn‘t find starting point in this job.

当执行./kitchen.sh -file=/app/kettle_project/test.ktr -level=Basic   直接执行转换的时候,发生了找不到开始点的问题,

网上有文章说是“-file必须执行job任务,将ktr任务放入kjb中,执行kjb”

参看: https://blog.csdn.net/qq_38797366/article/details/83273862

 

7/ 其他资料:

http://www.kettle.net.cn/d

https://www.cnblogs.com/jifeng/p/4741498.html 

 

kettle使用总结

标签:执行命令   通过   关于   ini   his   安装jdk   intval   根目录   获取   

原文地址:https://www.cnblogs.com/tianhaichao/p/12912264.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!