不一致的数据源转换

1 篇文章 0 订阅

目录

一.数据准备

二.建立转换添加控件

三.配置各控件

        1.表输入控件

        2.表输入2控件

        3.表输入3控件

        4.字段选择控件

        5.记录集连接控件

        6.字段选择2控件

        7.插入/更新控件 

四.运行结果


一.数据准备

        通过Kettle工具将对数据表company进行不一致数据的转换操作,即通过与供货商提供的标准价格表进行比较,得出不一致数据,从而进行修改,最终输出到数据表company中。

suppilers表:

create table `suppliers` (
	`id` int (30),
	`brand` varchar (150),
	`model` varchar (150),
	`unitPrice` varchar (150)
); 
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('1','华为','华为nova 5 Pro(8GB/128GB/全网通)','2999');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('2','三星','三星GALAXY Note 10+(12GB/256GB/全网通/5G版)','7999');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('3','OPPO','OPPO Reno2(8GB/128GB/全网通)','2999');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('4','华为','华为Mate30(8GB/128GB/全网通/5G版/玻璃版)','4999');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('5','OPPO','OPPO Reno 10倍变焦版(8GB/256GB/全网通)','4299');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('6','vivo','vivo NEX 3(8GB/256GB/全网通/5G版)','5698');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('7','vivo','vivo NEX 3(8GB/128GB/全网通)','4998');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('8','vivo','vivo iQOO Pro(8GB/128GB/5G全网通)','3798');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('9','小米','小米9(8GB/256GB/全网通)','2999');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('10','华为','华为Mate 20 X(8GB/256GB/全网通/5G版)','6199');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('11','OPPO','OPPO R17(8GB RAM/全网通)','2499');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('12','苹果','苹果iPhone 11 Pro Max(6GB/64GB/全网通)','9599');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('13','三星','三星Galaxy S10+(8GB RAM/陶瓷版/全网通)','7499');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('14','苹果','苹果iPhone 11(4GB/128GB/全网通)','5999');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('15','苹果','苹果iPhone 11 Pro(6GB/256GB/全网通)','9999');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('16','华为','华为P30 Pro(8GB/128GB/全网通)','4988');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('17','苹果','苹果iPhone 11(4GB/256GB/全网通)','6799');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('18','小米','小米9 Pro(8GB/256GB/全网通/5G版)','3799');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('19','三星','三星GALAXY Note 10(8GB/256GB/全网通)','6599');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('20','苹果','苹果iPhone 11(4GB/64GB/全网通)','5499');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('21','vivo','vivo X27 Pro(8GB RAM/全网通)','3598');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('22','苹果','苹果iPhone 11 Pro(6GB/64GB/全网通)','8699');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('23','华为','华为Mate30 Pro(8GB/128GB/全网通)','5799');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('24','小米','小米MIX 3(6GB RAM/全网通)','2299');
insert into `suppliers` (`id`, `brand`, `model`, `unitPrice`) values('25','华为','华为Mate30 Pro(8GB/256GB/全网通/5G版/玻璃版)','6899');

二.建立转换添加控件

 三.配置各控件

        1.表输入控件

            双击“表输入”控件,进入“表输入”配置界面,具体如图所示。

            SQL语句:

SELECT brand,model FROM company c2 
WHERE c2.id 
NOT IN 
(SELECT c1.id FROM suppliers s1 
JOIN company c1 ON s1.brand = c1.brand 
AND s1.model = c1.model 
AND s1.unitPrice=c1.unitPrice);

        2.表输入2控件

           双击“表输入2”控件,进入“表输入”配置界面,具体操作如下: 

           在SQL框中编写SQL语句,查询出不一致数据在数据表suppliers中的全部信息;在“从步骤插入数据”的下拉框选择“表输入”步骤;勾选“执行每一行”处的复选框,用于将表输入控件流中的数据放入到SQL语句对应的参数位置,通过条件查询与数据表suppliers中的数据进行匹配,具体配置如图所示。

        3.表输入3控件

            SQL语句:

SELECT id,brand,model,unitPrice FROM company c2 
WHERE c2.id NOT IN 
(SELECT c1.id FROM suppliers s1 
JOIN company c1 ON s1.brand = c1.brand 
AND s1.model = c1.model 
AND s1.unitPrice=c1.unitPrice);

         4.字段选择控件

            进入“选择/改名值”界面,并在“选择和修改”选项卡的“字段”处添加表输入2控件流中的所有数据字段,并将字段unitPrice改名成unitPrice1,具体如图所示。

             选择“移除”选项卡,切换到“移除”选项卡界面,添加需要移除字段,这里添加的是字段id,由于后续操作不需要字段id,因此在此进行移除,具体如图所示。

        5.记录集连接控件

            在“第一个步骤”处的下拉框中选择“字段选择”控件,“第二个步骤”处的下拉框中选择“表输入3”控件,用于将“字段选择”控件流中的数据与“表输入3”控件流中的数据进行合并连接;在“第一个步骤的连接字段”和“第二个步骤的连接字段”处添加连接字段,这里添加的连接字段是brand、model,用于将“字段选择”控件流中的字段brand、model与“表输入3”控件流中的字段brand、model进行连接;在“连接类型”处的下拉框选择连接类型,这里选择的RIGHT OUTER,即右外连接,具体如图所示。

        6.字段选择2控件

            双击“字段选择2”控件,进入“选择/改名值”界面,并在“选择和修改”选项卡的字段名称处填写id和unitPrice1,用于在插入/更新控件中,通过唯一字段id修改对应的价格unitPrice1字段内容,具体如图所示。

        7.插入/更新控件 

            单击目标表右侧的【浏览】按钮,弹出“数据库浏览器”窗口,选择目标表company;单击【获取字段】按钮,用来指定查询数据所需要的关键字,也可通过手动输入,指定查询数据所需要的关键字,这里选择的是数据表company中的id字段和输入流里面的id字段;单击【获取和更新字段】按钮,用来指定需要更新的字,具体如图所示。

四.运行结果

未处理:

已处理:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CC-Betsy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值