Kettle的多表级联

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kettle的多表级联相关的知识,希望对你有一定的参考价值。

将数据源A库中的某两张或多张表级联查询的数据插入到数据库B中的一张表中

我们在数据库A中创建“用户表”、“商品表”、“订单表”,在数据库B中创建“订单详细信息表”。最终目标为根据用户表、商品表、订单表获取订单详细信息表,最终目标结果如下。

create database testA;

use testA;

-- 用户表

create table ​​user​​(

​id​​int(10) primary key,

​name​​ varchar(50),

​age​​ int(3)

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into user values(10001,张三,20);

insert into user values(10002,李四,25);

insert into user values(10003,王五,22);

-- 商品表

create table ​​goods​​(

​id​​int(10) primary key,

​name​​ varchar(50),

​price​​ float(16)

)ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into goods values(1000001,苹果,6.5);

insert into goods values(1000002,橘子,2.5);

insert into goods values(1000003,香蕉,1.5);

-- 订单表

create table ​​order​​(

​id​​int(10) primary key,

​user_id​​ varchar(50),

​goods_id​​ int(10)

)ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into ​​order​​ values(1,10001,1000001);

insert into ​​order​​ values(2,10001,1000002);

insert into ​​order​​ values(3,10003,1000001);

insert into ​​order​​ values(4,10003,1000001);

insert into ​​order​​ values(5,10002,1000002);

insert into ​​order​​ values(6,10002,1000003);

create database testB;

use testB;

-- 订单详情表

create table ​​order_detail​​(

​id​​int(10) primary key,

​user_name​​ varchar(50),

​user_age​​ int(3),

​goods_name​​ varchar(50),

​goods_price​​ float(16)

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

操作步骤

1、运行软件,进入主界面。点击左上角的 文件 → 新建 → 转换新建一个转换,并保存,转换的后缀名为ktr。

Kettle的多表级联_数据

2、点击面板左侧的 主对象树 ,选择 DB连接 右键,选择 新建 或 新建数据库连接向导 分别创建对数据库A和数据库B的连接。

Kettle的多表级联_数据库_02

Kettle的多表级联_数据库连接_03

选择“新建”选项的操作视图

Kettle的多表级联_数据库_04

选择“新建数据库连接向导”选项的操作视图 1

Kettle的多表级联_数据库_05

选择“新建数据库连接向导”选项的操作视图 2

Kettle的多表级联_数据库连接_06

选择“新建数据库连接向导”选项的操作视图 3

注意: 如果在点击测试连接时出现下图所示错误,检查我们的安装目录下的lib中是否有对应数据库连接的jar包文件(如mysql的jar文件:mysql-connector-java-5.1.6-bin.jar),下载对应的jar,放到lib文件夹下,重启kettle软件,即可。

Kettle的多表级联_数据库_07

3、点击面板左侧的 核心对象 ,选择 输入文件夹下的 表输入.

Kettle的多表级联_数据库_08

4、双击编辑区的“表输出”图标,编辑数据输入源。此处为多表联合查询,所以表输入我们配置的表为订单表(关联关系表)

Kettle的多表级联_数据_09

5、点击面板左侧的** 核心对象 ,选择查询 ** 文件夹下的 ** 数据库查询 **,并把它拖到右侧的编辑区中,按住 shift 画线连接 “表输入”,如下图。

Kettle的多表级联_数据库连接_10

6、双击编辑区的“数据库查询”,图标,配置级联查询关系。配置用户表关联查询:

(1)步骤名称写入“user”,数据库连接选择我们user表所在的数据库,如果数据源未配置,可查看步骤2,进行配置。

(2)选择数据库之后,我们通过“表名”后的 “浏览”按钮,选择我们的关联表“user”。

(3)查询所需关键,即为两表之间的关联字段,操作符根据需要,此处选择 “=”。

(4) 查询表返回的值,即为我们需要通过关联表“user”,获取到的字段。

Kettle的多表级联_数据库_11

类似的,我们按照上述方法,配置商品表关联查询。

Kettle的多表级联_数据库连接_12

7、点击面板左侧的** 核心对象 ,选择 输出 ** 文件夹下的 ** 插入/更新 **,并把它拖到右侧的编辑区中,按住 shift 画线连接 “数据库查询”(goods),如下图。

Kettle的多表级联_数据_13

8、双击右侧编辑区的“查询/更新”图标,编辑输出数据对应关系。

Kettle的多表级联_数据库连接_14

用来查询的关键字,此处只选择主键id,表示这里按照id查询,如果此id存在,则更新数据,若不存在则插入数据。

9、到这里,我们最简单的一个级联查询的转换已经建立完成了,点击“校验这个转换”,Kettle会校验并给出简单的报告。没有任何问题。

Kettle的多表级联_数据库连接_15

10、点击“运行这个转换”,选择“本地执行”,点击“启动”来执行这个转换。

Kettle的多表级联_数据_16

11、转换成功后,我们可以在控制台中看到如下信息。检查本地数据库。

Kettle的多表级联_数据_17

此时,我们看到,虽然我们的数据已经成功提取了,但是中文部分出现了乱码。

我们可以进入 主对象树 → DB连接 → testA(数据源) ** ,双击“testA”,选择“高级”,在下方输入 set names gbk;,设置编码格式为gbk(此处为我本地环境问题需要设置为gbk编码),根据实际情况设置编码格式。

Kettle的多表级联_数据库_18

再次启动这个转换,我们可以看到,数据已经正常显示。

Kettle的多表级联_数据库连接_19

注意:

  • “数据库查询”组件的作用是使用前面“表输入”查询到的一条或多条记录再查询其他表中的数据,其本质类似于我们常用的Master-Detail table query,在查询到主表的某条记录后,自动返回字表中匹配的记录。
  • “数据库查询”组件的作用相当于 左连接查询 ,我们使用时,需注意。

以上是关于Kettle的多表级联的主要内容,如果未能解决你的问题,请参考以下文章

在java程序中,如何做到多表级联删除?

SQL数据库怎么进行多表级联更新,求个存储过程

多表级联删除表数据特别慢

MySQL主表与副表级联操作及多表查询(两张独立表,一张关系表)

MySQL主表与副表级联操作及多表查询(两张独立表,一张关系表)

级联保存