Kettle读取接口数据到数据表-Http控件的使用

一、创建一个转换

点击右上角文件,选择新建,再选择转换即可创建一个转换。

kettle调用java程序加解密 kettle调用接口_数据库

新建转换后菜单如下:

kettle调用java程序加解密 kettle调用接口_etl工程师_02

之后的操作都是基于这个转换中的核心对象来操作。

二、 所用到的核心对象

  • 输入菜单下的生成记录
  • 查询菜单下的HTTP client
  • 这个核心对象和同级的Http postREST client使用原理都是差不多的,可以融汇贯通
  • 输入菜单下的JSON input
  • 输出菜单下的表输出
  • 不一定是用表输出,使用插入/更新控件也可以实现类似的效果

三、控件摆放方式如下

kettle调用java程序加解密 kettle调用接口_etl工程师_03

四、配置DB连接

4.1 切换到主对象树下,鼠标右击转换菜单下的DB连接,选择新建:

kettle调用java程序加解密 kettle调用接口_docker_04

4.2 配置一个MySql连接:

kettle调用java程序加解密 kettle调用接口_数据库_05

4.3 配置好后选择确定,就能看到当前转换下的一个DB连接:

kettle调用java程序加解密 kettle调用接口_etl工程师_06

五、配置生成记录核心对象

kettle调用java程序加解密 kettle调用接口_kettle调用java程序加解密_07

主要是配置接口地址:

http://localhost:8899/test/list

给这个地址起了个名称api,后面的核心对象控件就能够使用api来作为接口路径。

注意:

这里有个限制配置,写几后面的HTTP client就会查几次

六、配置HTTP client核心对象

kettle调用java程序加解密 kettle调用接口_数据库_08

勾选从字段中获取url

url字段名处就可以在下拉框中选择到上一个核心对象控件配置的api

最后设置结果字段名即可。这个结果字段名,直接决定了下一个控件获取结果时使用的名称。

七、配置JSON input核心对象

使用HTTP client控件从接口读取到数据以后。

需要使用JSON input核心对象来解析,把查询结果转换为JSON

7.1 配置JSON input核心对象数据来源

kettle调用java程序加解密 kettle调用接口_docker_09

勾选源定义在一个字段里。

从字段源获取处就可以在下拉框中选择到上一个核心对象控件配置的result字段。

7.2 配置字段映射

kettle调用java程序加解密 kettle调用接口_etl工程师_10

这里可以选择需要得到HTTP client核心对象控件获取到的哪些数据。

配置的名称,就是要输入到下一个核心对象中的数据名称。

7.3 JSONPath操作符详解

路径那一段的写法可能很多人不知道什么意思。

其实这里用的是JSONPath操作符。它的作用是定位到复杂结果集中的具体字段。

7.3.1 JSONPath常见操作符

操作符名称

说明

$

查询的根节点对象,用于表示一个json数据,可以是数组或对象


可以理解为递归搜索

.name

表示一个子节点

@

过滤器断言(filter predicate)处理的当前节点对象,类似于java中的this字段

*

通配符,可以表示一个名字或数字

[start:end]

数组片段,区间为[start,end],不包含end

7.3.2 具体使用方式

比如有如下复杂结果集:

{
	"code": 200,
	"msg": "查询成功",
	"data": [
        {
            "name":"zs",
            "age":"18",
		},
        {
            "name":"ls",
            "age":"25",
		}
    ]
}

如果想要把data下面的name字段映射到自己配置的name处,可以这么写JSONPath

$.data..name

意思就是获取根节点下的data字段,再去data中递归搜索name字段。

$...这三个也是最常用的三个操作符,足以应付大部分情况。

八、配置表输出核心对象

8.1 配置表输出位置

kettle调用java程序加解密 kettle调用接口_kettle调用java程序加解密_11

配置好数据库连接,也就是从配置的DB连接中选一个,没有配置DB连接则没有选择。

然后再勾选批量插入,这样可以插入多条数据。

8.2 表输出数据库字段配置

kettle调用java程序加解密 kettle调用接口_docker_12

点击数据库切换按钮,开始配置数据库字段和流字段的映射关系。

流字段就是上一个控件的输入结果,这个结果是以流的方式来传输,所以又叫流字段。

表字段就是数据库对应表中的列名称。

这里可以手动输入,也可以点击获取字段,然后自行查看有没有问题,再酌情修改。

九、 运行转换

kettle调用java程序加解密 kettle调用接口_docker_13

执行成功后数据库中就已经有了如下字段:

kettle调用java程序加解密 kettle调用接口_大数据_14

这样就完成了从Http接口中读取数据。

相似的HTTP postREST client核心对象控件用法也是相似。

所有步骤都一样,只要把HTTP get控件替换为HTTP postREST client即可。

十、拓展–插入/更新核心对象控件的使用

kettle调用java程序加解密 kettle调用接口_大数据_15

这个核心对象的意思就是如果数据库表中有数据的话就更新,没有的话就删除。

它可以替代上面步骤中的表输出核心对象控件。

和表输出核心对象控件不同的是,这里需要配置一个用来查询的关键字。

这个关键字,决定了哪些数据做更新操作,哪些数据做删除操作。

表里某条数据的id和流数据中的id有相同的话,就按把流中的数据更新上去。反之则直接插入。

十一、拓展–删除控件的使用

删除核心对象控件在输出菜单中,因此是需要有东西输入的。

这个输入的数据需要有一个输入核心对象控件获取到要删除的数据,再把数据用流的方式传给删除核心对象控件。

11.1 控件准备

kettle调用java程序加解密 kettle调用接口_etl工程师_16

这里使用表输入核心对象控件来获取要删除的数据。

再把要删除的数据以流的方式传给删除控件。

11.2 表输入核心对象的配置

kettle调用java程序加解密 kettle调用接口_大数据_17

选择已经配置好的数据库连接。再点击获取SQL语句,选择需要获取语句的表,就会自动生成查询该表的SQL语句。

点击预览,能够查到数据的话,再点击确定保存数据。

注意:

当不想删除表里任何数据,只想做数据的更新或者插入时,可以使用。

11.3 删除核心对象的配置

kettle调用java程序加解密 kettle调用接口_数据库_18

配置好数据库连接,要删除数据的目标表。

最后配置通过什么字段去删除。

上图的意思就是根据流中数据的id值去删除目标表中id和流中数据的id相同的数据.

注意:

预览,能够查到数据的话,再点击确定保存数据。

注意:

当不想删除表里任何数据,只想做数据的更新或者插入时,可以使用。