kettle实例(获取企业微信打卡数据并将数据入库)

ETL.kettle初学者实例(获取企业微信打卡数据并将数据入库)

    • Kettle简介
    • 实例流程简介
      • 从数据库中取出人员信息
      • 处理人员信息
      • 获取人员打卡信息
      • 将打卡信息入库
    • 总结

Kettle简介

Kettle是一个Java编写的ETL工具,可以简化数据仓库的创建,更新和维护,使用Kettle可以构建一套开源的ETL解决方案。
官方社区https://community.hitachivantara.com/community/products-and-solutions/pentaho

实例流程简介

本文是针对刚接触ETL及Kettle使用的新手所分享的实例,文中几乎涉及大部分常用的组件,原则上尽量多用组件,少写js代码,让kettle功能最大发挥。
kettle的安装启动就不多赘述了,结合需求与自身能力,整个实例的流程是这样的:

  1. 从数据库中取出人员信息;
  2. 处理人员信息;
  3. 获取人员打卡信息;
  4. 将打卡信息入库;

流程图如下:
kettle实例(获取企业微信打卡数据并将数据入库)_第1张图片

从数据库中取出人员信息

人员信息也可以从企业微信开发端接口获取,但这里把人员信息事先都放在数据库里了,这样更加方便获取,且能减少接口的频繁调用。

首先新建转换"连接数据库",为了从数据库取人员信息
kettle实例(获取企业微信打卡数据并将数据入库)_第2张图片表输入,连接数据库,并查出人员信息并放入结果集,方便之后获取。kettle实例(获取企业微信打卡数据并将数据入库)_第3张图片可以在js代码组件中直接获取上一结果的数据
kettle实例(获取企业微信打卡数据并将数据入库)_第4张图片

处理人员信息

根据企业微信对请求数据的格式和数据量限制(一次最多100人)的要求,对刚才结果集的数据进行处理,把获取到的人员id拼接为数组,并设置变量i,j做之后整百循环的控制变量,把它们全部放入环境变量。
previous_result.getRows();获取结果集数据;
parent_job.setVariable(" “, );添加环境变量;
parent_job.getVariable(” ");获取环境变量;
kettle实例(获取企业微信打卡数据并将数据入库)_第5张图片

获取人员打卡信息

创建循环体转换文件“拉取打卡数据”,如果都写js大可不必这么复杂,但为了学习使用kettle我们尽量多用组件,少写js代码,让kettle功能最大发挥。
kettle实例(获取企业微信打卡数据并将数据入库)_第6张图片
红色箭头为获取打卡数据,黄色和绿色的功能是为人员匹配上他们的部门信息。黄色和绿色根据需求和实际情况可有可无,其逻辑和代码也与左边大致相同,就不多赘述了。
kettle实例(获取企业微信打卡数据并将数据入库)_第7张图片取我们之前设置的循环变量kettle实例(获取企业微信打卡数据并将数据入库)_第8张图片
从企业微信获取数据,第一步即获取access_token(前四个组件),在"生成记录"中填好将要发送请求的url,并填好corpsecret和corpid参数。
kettle实例(获取企业微信打卡数据并将数据入库)_第9张图片发送请求,获得json格式的result,即access_token。kettle实例(获取企业微信打卡数据并将数据入库)_第10张图片得到access_token,我们才能发送其他的请求,将其他url中的ACCSEE_TOKEN替换成真正的access_token,绿色箭头步骤即可以相同方式获取到数据。
kettle实例(获取企业微信打卡数据并将数据入库)_第11张图片
接下来,进行数据组装,由于kettle的组件中没有数组类型,使用attrs.split(",")将人员字符串分割成数组取前100个人,根据企业微信的要求以json格式发送post请求即可获取到打卡数据。kettle实例(获取企业微信打卡数据并将数据入库)_第12张图片kettle实例(获取企业微信打卡数据并将数据入库)_第13张图片

将打卡信息入库

处理获取到的数据,使用 createRowCopy 函数创建一个新行,放入数据。对json数据的处理网上有很多例子,写的很详细。
kettle实例(获取企业微信打卡数据并将数据入库)_第14张图片最后过滤数据,排序,再使用"记录集连接"通过id和右边查到的部门信息连接起来,并插入数据库。
kettle实例(获取企业微信打卡数据并将数据入库)_第15张图片必须要排序之后才能合并记录kettle实例(获取企业微信打卡数据并将数据入库)_第16张图片连接数据库,“用来查询的关键字”判断是更新还是插入,目标模式即数据库用户名。kettle实例(获取企业微信打卡数据并将数据入库)_第17张图片
循环条件
kettle实例(获取企业微信打卡数据并将数据入库)_第18张图片整百循环kettle实例(获取企业微信打卡数据并将数据入库)_第19张图片

总结

为减少接口调用,其实还可将获取access_token和获取部门信息拿出循环,这里没有再做。了解并掌握一种etl工具的使用,对于企业或个人解决数据的处理,转换,迁移一类对的问题是非常实用的。希望这个小例子能帮助你熟悉Kettle,并上手使用它。

你可能感兴趣的:(etl,数据仓库,js,数据库)