kettle复杂实战例子github:点击前往
1. 需求说明
源库里有三张表,分别是cust(客户表),account(账户表),trade(交易表),现在需要在目标库的trade_all(交易详细表)里存储每一笔交易的详细信息。
2. 准备数据库
2.1 cust(客户表)
字段名 | 类型 | 说明 | 备注 |
custno | varchar | 客户编号 | |
custname | varchar | 客户名 | |
custid | varchar | 客户证件号 | |
custtype | varchar | 客户类别 | 1:对公客户 2:对私客户 |
2.2 account(账户表)
字段名 | 类型 | 说明 | 备注 |
acctno | varchar | 账户号 | |
custno | varchar | 客户编号 | |
amt | double | 余额 |
2.3 trade(交易表)
字段名 | 类型 | 说明 | 备注 |
tradeid | varchar | 交易流水号 | |
acctno | varchar | 账户号 | |
amt | double | 交易金额 |
2.4 trade_all(交易详细表)
字段名 | 类型 | 说明 | 备注 |
tradeid | varchar | 交易流水号 | |
acctno | varchar | 账户号 | |
amt | double | 交易金额 | |
custno | varchar | 客户编号 | |
custname | varchar | 客户名 | |
custid | varchar | 客户证件号 | |
custtype_cn | varchar | 客户类别解释 | 对公客户交易 / 对私客户交易 |
value_ | varchar | 交易解释 | 这是一笔对公客户发生的交易 / 这是一笔对私客户发生的交易 |
3. 创建转换
转换的最终流程图:
3.1 创建转换和DB连接
我为了方便,把所有表都放在一个库里,所以只了一个数据库连接,如果源数据库和目标数据库不同,就配置两个数据库连接。
注意点:这里没配置好会出现中文乱码问题,详见我之前的文章:解决kettle问题之中文乱码
3.2 trade表输入
新建表输入
得到trade表里的所有数据。
3.3 account表查询
新建数据库查询
根据trade表里的acctno,去查account表
关键字段比较是acctno,查询返回字段是custno
3.4 cust表查询
新建数据库查询
根据account表里的custno,去查cust表
关键字段比较是custno
3.5 根据客户类型,在字段里写入对应的语句
3.5.1 过滤记录
新建过滤记录
过滤出对公客户和对私客户。
3.5.2 对公客户和对私客户
下面以对公客户为例,对私客户就是把 公 改私。
新建javaScript代码
新建增加常量
3.6 trade_all表插入 / 更新
新建插入/更新
关键字段比较 tradeid
至此,多表联合查询实战就结束了,例子的地址在最上方。