ETL: 如何使用kettle向API接口推送Json数据

    Kettle作为开源ETL工具,使用较多(因为不花钱)。

    最近我个人在使用的时候遇到了需要将hive的数据以Json的格式推动到API 接口。调用API使用的是Kettle的组件“rest client”。具体的流程如下:

    因为向下游推送数据时候,需要先获取 Token密码,再拼接为API 的URL 。所以,第一步需要先获取Token密码:

            ETL: 如何使用kettle向API接口推送Json数据_第1张图片

           1.Token_url:主要是放入获取Token密码的URL,方便第2步骤使用:

                ETL: 如何使用kettle向API接口推送Json数据_第2张图片

               如何不限制记录为1设置为n,则访问n次url并且生产n个token密码

            2.获取Token: 访问URL,并得到包含Token密码的结果

               ETL: 如何使用kettle向API接口推送Json数据_第3张图片

             从上一步获取URL,设置为GET方式。因为上游返回的是Json文档,所以这里数据类型设置为Json,返回结果集为“result”。返回的结果集如下:

               ETL: 如何使用kettle向API接口推送Json数据_第4张图片

           3.解析接收到的结果,得到Token密码:

               ETL: 如何使用kettle向API接口推送Json数据_第5张图片

               ETL: 如何使用kettle向API接口推送Json数据_第6张图片

              因为返回结果集是Json格式,所以使用Json input组件进行解释。源设置需要按图中设置,需要输出什么字段需要向图二那样设置源字段再Json的路径和输出字段名。否则需要制定本地Json文件路径

            4.设置变量:

               ETL: 如何使用kettle向API接口推送Json数据_第7张图片

              将token密码放到变量中。因为变量只能由一个值,所以前面1那里需要“”限制“”设定为1,否则报错。关于为何需要添加“变量设置”,再稍后会讲解。

        第二步,向API推送数据,大致流程是:输入数据,转化为Json格式,调用API推送

                 ETL: 如何使用kettle向API接口推送Json数据_第8张图片

              1.表输入:

                     ETL: 如何使用kettle向API接口推送Json数据_第9张图片       

                 自定义查询语句,句末不要添加“;”,否则或报错,AS 后面使用目标字段名称(也就是下游对应的名字)

            2.JSON Output: 将结果集转化为JSON格式

                ETL: 如何使用kettle向API接口推送Json数据_第10张图片

               设置转化模式,因为不需要输出到文件,所以选择了“output value”,条目名称和输出值的名字可以自定义,每个条目的的数行数请根据API的处理能力设置。

               ETL: 如何使用kettle向API接口推送Json数据_第11张图片

               这里主要是建立源字段和目标字段的对应关系,如果下游字段名称是英文,可以把它们放入表输入的AS 后面,然后再JSON Output的图二那里点击“获取字段”,就能看到字段名(SELECT结果集中的字段名)和元素名称(下游的字段名)对应关系了,最后针对顺序或者元素名称的大小写调整下就好了,注意JSON的字段名是区分大小的。

           3.JSON Input: 调整Json数据的格式

              ETL: 如何使用kettle向API接口推送Json数据_第12张图片

              指定输入源,因为是从之前的步骤获取,所以选择“源定义在一个字段中”,为何这样可看下图:

               ETL: 如何使用kettle向API接口推送Json数据_第13张图片

              ETL: 如何使用kettle向API接口推送Json数据_第14张图片

             在“字段”选项中选择数据路径,自定义“名称“,因为的需要Jsonbody 中的{..}部分,所以路径为$.JsonBody[*]。

路径的设置请按需要设置。

             ETL: 如何使用kettle向API接口推送Json数据_第15张图片

           3. REST Client : 调用API 推送数据

              ETL: 如何使用kettle向API接口推送Json数据_第16张图片

             URL和推送方式根据API的接口配置

       第3步,将上面两个步骤的转化放入作业中:

             ETL: 如何使用kettle向API接口推送Json数据_第17张图片

          统计满足条件的记录数:因为结果集为空,在2步那里会报空指针错误,所以先判断按条件是否由结果集。如果没有则走上图红色线,否则继续绿色线。这里就相当于IF ...ELSE判断。可以自定义SQL语句

          ETL: 如何使用kettle向API接口推送Json数据_第18张图片

          注意:有人会说在这里为什么不用count,我之前试过,这样会报错的。这个组件是对query的输出结果行数进行判断。无论有没数据,使用count 都会由统计结果输出的,且组件会判断有满足条件的数据。

        “getToken”和“postData”是引用第1步和第2步,因为获取token的URL是公用的,所以获取Token转化是公用的,Token也放到参数中,方便后面的转化引用。

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(KETTLE)