Kettle作为开源ETL工具,使用较多(因为不花钱)。
最近我个人在使用的时候遇到了需要将hive的数据以Json的格式推动到API 接口。调用API使用的是Kettle的组件“rest client”。具体的流程如下:
因为向下游推送数据时候,需要先获取 Token密码,再拼接为API 的URL 。所以,第一步需要先获取Token密码:
1.Token_url:主要是放入获取Token密码的URL,方便第2步骤使用:
如何不限制记录为1设置为n,则访问n次url并且生产n个token密码
2.获取Token: 访问URL,并得到包含Token密码的结果
从上一步获取URL,设置为GET方式。因为上游返回的是Json文档,所以这里数据类型设置为Json,返回结果集为“result”。返回的结果集如下:
3.解析接收到的结果,得到Token密码:
因为返回结果集是Json格式,所以使用Json input组件进行解释。源设置需要按图中设置,需要输出什么字段需要向图二那样设置源字段再Json的路径和输出字段名。否则需要制定本地Json文件路径
4.设置变量:
将token密码放到变量中。因为变量只能由一个值,所以前面1那里需要“”限制“”设定为1,否则报错。关于为何需要添加“变量设置”,再稍后会讲解。
第二步,向API推送数据,大致流程是:输入数据,转化为Json格式,调用API推送
1.表输入:
自定义查询语句,句末不要添加“;”,否则或报错,AS 后面使用目标字段名称(也就是下游对应的名字)
2.JSON Output: 将结果集转化为JSON格式
设置转化模式,因为不需要输出到文件,所以选择了“output value”,条目名称和输出值的名字可以自定义,每个条目的的数行数请根据API的处理能力设置。
这里主要是建立源字段和目标字段的对应关系,如果下游字段名称是英文,可以把它们放入表输入的AS 后面,然后再JSON Output的图二那里点击“获取字段”,就能看到字段名(SELECT结果集中的字段名)和元素名称(下游的字段名)对应关系了,最后针对顺序或者元素名称的大小写调整下就好了,注意JSON的字段名是区分大小的。
3.JSON Input: 调整Json数据的格式
指定输入源,因为是从之前的步骤获取,所以选择“源定义在一个字段中”,为何这样可看下图:
在“字段”选项中选择数据路径,自定义“名称“,因为的需要Jsonbody 中的{..}部分,所以路径为$.JsonBody[*]。
路径的设置请按需要设置。
3. REST Client : 调用API 推送数据
URL和推送方式根据API的接口配置
第3步,将上面两个步骤的转化放入作业中:
统计满足条件的记录数:因为结果集为空,在2步那里会报空指针错误,所以先判断按条件是否由结果集。如果没有则走上图红色线,否则继续绿色线。这里就相当于IF ...ELSE判断。可以自定义SQL语句
注意:有人会说在这里为什么不用count,我之前试过,这样会报错的。这个组件是对query的输出结果行数进行判断。无论有没数据,使用count 都会由统计结果输出的,且组件会判断有满足条件的数据。
“getToken”和“postData”是引用第1步和第2步,因为获取token的URL是公用的,所以获取Token转化是公用的,Token也放到参数中,方便后面的转化引用。