Kettle简介
Kettle是一个Java编写的ETL工具,可以简化数据仓库的创建,更新和维护,使用Kettle可以构建一套开源的ETL解决方案。
官方社区https://community.hitachivantara.com/community/products-and-solutions/pentaho
实例流程简介
本文是针对刚接触ETL及Kettle使用的新手所分享的实例,文中几乎涉及大部分常用的组件,原则上尽量多用组件,少写js代码,让kettle功能最大发挥。
kettle的安装启动就不多赘述了,结合需求与自身能力,整个实例的流程是这样的:
- 从数据库中取出人员信息;
- 处理人员信息;
- 获取人员打卡信息;
- 将打卡信息入库;
流程图如下:
从数据库中取出人员信息
人员信息也可以从企业微信开发端接口获取,但这里把人员信息事先都放在数据库里了,这样更加方便获取,且能减少接口的频繁调用。
首先新建转换"连接数据库",为了从数据库取人员信息表输入,连接数据库,并查出人员信息并放入结果集,方便之后获取。
可以在js代码组件中直接获取上一结果的数据
处理人员信息
根据企业微信对请求数据的格式和数据量限制(一次最多100人)的要求,对刚才结果集的数据进行处理,把获取到的人员id拼接为数组,并设置变量i,j做之后整百循环的控制变量,把它们全部放入环境变量。
previous_result.getRows();获取结果集数据;
parent_job.setVariable(" “, );添加环境变量;
parent_job.getVariable(” ");获取环境变量;
获取人员打卡信息
创建循环体转换文件“拉取打卡数据”,如果都写js大可不必这么复杂,但为了学习使用kettle我们尽量多用组件,少写js代码,让kettle功能最大发挥。
红色箭头为获取打卡数据,黄色和绿色的功能是为人员匹配上他们的部门信息。黄色和绿色根据需求和实际情况可有可无,其逻辑和代码也与左边大致相同,就不多赘述了。取我们之前设置的循环变量
从企业微信获取数据,第一步即获取access_token(前四个组件),在"生成记录"中填好将要发送请求的url,并填好corpsecret和corpid参数。发送请求,获得json格式的result,即access_token。
得到access_token,我们才能发送其他的请求,将其他url中的ACCSEE_TOKEN替换成真正的access_token,绿色箭头步骤即可以相同方式获取到数据。
接下来,进行数据组装,由于kettle的组件中没有数组类型,使用attrs.split(",")将人员字符串分割成数组取前100个人,根据企业微信的要求以json格式发送post请求即可获取到打卡数据。
将打卡信息入库
处理获取到的数据,使用 createRowCopy 函数创建一个新行,放入数据。对json数据的处理网上有很多例子,写的很详细。最后过滤数据,排序,再使用"记录集连接"通过id和右边查到的部门信息连接起来,并插入数据库。
必须要排序之后才能合并记录
连接数据库,“用来查询的关键字”判断是更新还是插入,目标模式即数据库用户名。
循环条件整百循环
总结
为减少接口调用,其实还可将获取access_token和获取部门信息拿出循环,这里没有再做。了解并掌握一种etl工具的使用,对于企业或个人解决数据的处理,转换,迁移一类对的问题是非常实用的。希望这个小例子能帮助你熟悉Kettle,并上手使用它。