第六章 数据转换 例子 2016290139 程硕鹏

本篇博客介绍了如何使用Kettle工具进行多数据源合并、不一致数据转换、数据粒度转换以及数据的商务规则计算。在转换过程中涉及CSV文件与数据库表的交互,包括字段选择、排序合并、记录集连接、过滤和计算等操作,以实现数据清洗和整合。最后,通过商务规则计算,计算出手机在各省份的日销售额并存储到目标表中。
摘要由CSDN通过智能技术生成

6.1多数据源的合并

1)打开Kettle工具,创建转换

        使用Kettle工具,创建一个转换company_merge,并添加CSV文件输入控件、表输入控件、字段选择控件、排序合并控件、增加序列控件、表输出控件以及Hop跳连接线,具体如图所示。        

 2)配置控件

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

单击【浏览】按钮,选择要抽取的CSV文件company_a.csv;单击【获取字段】按钮,Kettle自动检索CSV文件获取字段名称,并对文件中字段的类型、格式、长度、精度等属性进行解析。

 单击【浏览】按钮,查看文件company_a.csv的数据是否抽取到CSV文件输入流中,具体效果如图所示。

 在“选择和修改”选项卡的“字段”处手动添加CSV文件输入控件输出的所有数据字段,也可以单击【获取选择的字段】按钮,Kettle工具自动检索并添加CSV文件输入控件输出的所有数据字段。

选择“元数据”选项卡,切换到“元数据”选项卡界面。添加需要改变元数据的字段,将“字段选择”流中的字段进行一致性处理,即单击【获取改变的字段】按钮,获取要改变的字段,并在“Binary to Normal”一列的下拉框中,选择为“是”,使得CSV文件company_a.csv中数据的字段类型与数据表company_b中数据的字段类型一致。

 在图中的SQL框中编写查询数据表company_b的SQL语句,然后单击【预览】按钮,查看数据表company_b的数据是否成功从MySQL数据库中抽取到表输入流中,具体如图所示。

双击“排序合并”控件,进入“排序合并”配置界面,并在字段框中,指定按字段id进行升序排序。

 

 双击“增加序列”控件,进入“增加序列”配置界面,在“值的名称”处,指定要增加列的列名,这里使用默认的名称,即valuename,其它配置项不作任何改变;单击【确定】按钮,完成“增加序列”控件的配置

双击“字段选择2”控件,进入“选择/改名值”界面。在“选择和修改”处选择和修改要输出的字段,具体如图所示。

双击“表输出”控件,进入“表输出”控件的配置界面。

单击【新建】按钮,配置数据库连接(所连接的数据库transform需提前创建,这里不作赘述),配置完成后单击【确认】按钮。数据库连接的配置具体如图所示。

 3)运行程序

 4)查看结果

查看数据表company是否已成功插入40条数据,查看结果如图所示(只展示部分数据)

 

6.2不一致的数据转换

1)打开Kettle工具,创建转换

        使用Kettle工具,创建一个转换inconsistent,并添加表输入控件、字段选择控件、记录集连接控件、插入/更新控件以及Hop跳连接线,具体如图所示。

2)配置控件

 双击“表输入”控件,进入“表输入”配置界面

在SQL框中编写查询数据表company中品牌型号不一致数据的 SQL语句,然后单击【预览】按钮,查看数据表company中品牌型号不一致数据是否成功从MySQL数据库中抽取到表输入流中,具体如图所示。

双击“表输入2”控件,进入“表输入”配置界面

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

 

 双击“表输入3”控件,进入“表输入”配置界面。

在SQL框中编写查询与标准价格表(供货商提供的价格表)中品牌型号不一致数据的SQL语句,然后单击【预览】按钮,查看数据表company中品牌型号不一致数据是否成功从MySQL数据库中抽取到表输入流中,具体如图所示。

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

 

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

 

 3)程序运行

 4)查看结果

 

6.3数据粒度的转换

1)打开Kettle工具,创建转换

使用Kettle工具,创建一个转换granularity,并添加表输入控件、字段选择控件、排序记录控件、记录集连接控件、过滤控件、空操作控件、表输出控件以及Hop跳连接线,具体如图所示。

2)配置控件

双击“表输入”控件,进入“表输入”配置界面。

在SQL框中编写获取数据表company中所有数据的SQL语句,然后单击【预览】按钮,查看数据表company中数据是否成功从MySQL数据库中抽取到表输入流中,具体如图所示。

 

 双击“字段选择”控件,进入“选择/改名值”界面,在“选择和修改”选项卡的“字段”处手动添加所需字段,这里添加字段id和salesArea,具体如图所示。

双击“排序记录”控件,进入“排序记录”配置界面,在“字段”框中添加字段salesArea,通过以该字段为基础对整体数据进行升序排序,具体如图所示。

 

在SQL框中编写SQL语句,用于查询city数据表中字段city和pid的数据,用于与数据表company中字段salesArea进行合并连接;单击【预览】按钮,查看city数据表中的字段city和pid的数据是否成功从MySQL数据库中抽取到表输入流中,具体如图所示。

 双击图6-56中的“排序记录2”控件,进入“排序记录”配置界面,并在“字段”框中添加字段city,以该字段为基础对整体数据进行升序排序,具体如图所示。

 

 双击“记录集连接”控件,进入“合并排序”配置界面,并在“第一个步骤”处的下拉框中选择“排序记录”控件,“第二个步骤”处的下拉框中选择“排序记录2”控件;在“第一个步骤的连接字段”和“第二个步骤的连接字段”处分别添加连接字段,这里添加的连接字段是salesArea和city,将“排序记录”控件流中的数据与“排序记录2”控件流中的数据进行合并连接;在“连接类型”处的下拉框选择连接类型,这里选择的LEFT OUTER,即左外连接,具体如图所示。

 双击“字段选择2”控件,进入“选择/改名值”界面,并在“选择和修改”选项卡的“字段”处手动添加所需字段,这里添加字段id、pid和salesArea,具体如图所示。

 双击“排序记录3”控件,进入“排序记录”配置界面,在“字段”框中添加字段pid,以该字段为基础对整体数据进行升序排序,具体如图所示。

 在SQL框中编写SQL,用于获取数据表provincial中字段为id和Provincial的数据,后续用于与“排序记录”控件流中的字段数据进行合并连接,然后单击【预览】按钮,查看数据表provincial中字段为id和Provincial的数据是否成功从MySQL数据库中抽取到表输入流中,具体如图所示。

 双击“排序记录4”控件,进入“排序记录”配置界面,并在“字段”框中添加字段pid,以该字段为基础对整体数据进行升序排序,具体如图所示。

双击“记录集连接2”控件,进入“合并排序”配置界面,并在“第一个步骤”处的下拉框中选择“排序记录3”控件,“第二个步骤”处的下拉框中选择“排序记录4”控件;在“第一个步骤的连接字段”和“第二个步骤的连接字段”处分别添加连接字段,这里分别添加的连接字段是pid和pid;在“连接类型”处的下拉框选择连接类型,这里选择的LEFT OUTER,即左外连接,在“字段”框中添加字段pid,以该字段为基础对整体数据进行升序排序,具体如图所示。

 

 双击“过滤记录”控件,进入“过滤记录”配置界面;在“条件”处设置过滤的条件,将字段为Provincial中值为“null”的数据过滤掉;在“发送true数据给步骤:”处的下拉框中选择“空操作”,将Provincial字段值为不为null的数据放在“空操作”控件中;在“发送false数据给步骤:”处的下拉框中选择“空操作(什么也不做)2”,将Provincial字段值为null的数据放在“空操作(什么也不做)2”控件中,具体如图所示(见下页)。

 单击目标表右侧的【浏览】按钮,指定输出目标表,即数据表temporary;勾选“指定数据库字段”复选框,用于将数据表temporary的字段与字段选择3控件输出流中的字段进行匹配,具体如图所示。

双击“表输出”控件,进入“表输出”控件的配置界面;单击【新建】按钮,配置数据库连接,配置完成后单击【确认】按钮。数据库连接的配置,具体如图所示。

 

双击“字段选择4”控件,进入“选择/改名值”界面,并在“选择和修改”选项卡的“字段”处手动添加所需字段,这里添加字段id和salesArea,用于后续进行输出,具体如图所示。

 

单击目标表右侧的【浏览】按钮,指定输出目标表,即数据表temporary;勾选“指定数据库字段”复选框,用于将数据表temporary的字段与字段选择4控件输出流中的字段进行匹配;单击“数据库字段”选项卡,具体如图所示。

打开Kettle工具,新建作业

使用Kettle工具,创建一个作业granularity,并添加Start控件、转换控件、成功控件以及作业跳连接线,具体如图所示。

 

3)运行程序

双击“Start”控件,进入“作业定时调度”界面,该控件中可以设置时间调度以执行作业,这里使用默认配置,不作修改。单击【确定】按钮,完成Start控件的配置,具体如图所示。

 

 单击作业工作区顶部的   按钮,运行创建的作业granularity,实现将数据表company中字段为salesArea的数据都统一成省份级,并存储到数据表company_new中,具体如图所示。

4)查看结果

查看数据表company_new中字段为salesArea的数据是否都为省份级,查看结果如图所示(只展示部分数据

 

6.4数据的商务规则计算

1)打开Kettle工具,创建转换

 查看数据表company_new中字段为salesArea的数据是否都为省份级,查看结果如图所示(只展示部分数据

 配置控件

在SQL框中编写查询数据表company_new中全部数据的SQL语句,然后单击【预览】按钮,查看数据表company_new中数据是否成功从MySQL数据库中抽取到表输入流中,具体如图所示。

 选择“元数据”选项卡,切换到“元数据”选项卡界面,并添加需要改变元数据的字段,由于数据表company_new中字段unitPrice的数据类型为varchar(字符),字段number的类型为int,这字段类型不同的数据无法进行计算,因此需要将字段unitPrice的类型改为Integer,从而进行后续的计算操作,“元数据”选项卡的配置具体如图所示。

 双击“计算器”控件,进入“计算器”界面,在“字段”处,添加一个新字段salesAmount,用于存储计算出的手机日销售额;在“字段A”和“字段B”处的下拉选项中分别选择“unitPrice”(销售价格)和“number”(销售数量)字段;在“计算”处的下拉框中选择“A*B”,即表示将字段A与字段B进行相乘计算,具体如图所示。

 双击“排序记录”控件,进入“排序记录”界面,并在“字段”框中添加字段salesArea,以该字段为基础对所有数据进行升序排序,具体如图所示。

 双击“分组”控件,进入“分组”界面,并在“构成分组的字段”处的添加分组字段salesArea,将字段salesArea相同的数据分为一组,便于进行“聚合”操作;在“聚合”处添加一个新字段total,用于存储各省份的手机销售总额,具体如图所示。

 双击“字段选择2”控件,进入“选择/改名值”界面,并在“选择和修改”处选择需要的字段,这里选择的是字段salesArea和total,用于后续在“表输出”控件中进行输出操作,具体如图所示。

 双击“唯一行”控件,进入“唯一行”界面,并在“用来比较的字段”处添加要去重的字段,因为“字段选择2”控件流中字段total的数据有重复,所以需要进行去重操作,因此这里选择去重的字段为total,具体如图所示。

 双击“表输出”控件,进入“表输出”控件的配置界面,单击【新建】按钮,配置数据库连接,配置完成后单击【确认】按钮。数据库连接的配置如图所示。

 

单击目标表右侧的【浏览】按钮,指定输出目标表,即数据表regional_sales(该表需提前创建,这里不作演示);勾选“指定数据库字段”复选框,用于将数据表regional_sales的字段与唯一行控件输出流中的字段进行匹配;单击“数据库字段”选项卡,具体如图所示。

 单击【输入字段映射】按钮,弹出“映射匹配”对话框,依次选中“源字段”选项框的字段和“目标字段”选项框对应的字段,再单击【Add】按钮,将一对映射字段添加至“映射”选项框中,若“源字段”选项框的字段和“目标字段”选项框的字段相同,则可以单击【猜一猜】按钮,让Kettle自动实现映射,用于将数据表company_new中的字段salesArea、total与目标数据表中的字段salesArea、total进行匹配,具体如图所示。

单击【确定】按钮,完成“源字段”与“目标字段”的映射匹配。“表输出”界面最终的配置如图所示。

 3)运行程序

单击转换工作区顶部的  按钮,运行创建的转换total,实现对数据表company_new中数据进行商务规则的计算,从而得出手机在各省份的日销售额,并存储于数据表regional_sales中,具体如图所示。

 4)查看结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值