一、多数据源的合并
通过Kettle工具将A公司和B公司的手机日销售数据合并到一个数据源(数据表company)中,也就是对文件company_a.csv和数据表company_b中的数据进行合并操作,并输出到数据表company中。
1、数据准备
假设,某公司旗下有两个子公司,分别为A公司和B公司,且这两个子公司均在销售手机,其中A公司的手机日销售情况存储在CSV文件中,即文件company_a.csv;B公司的手机日销售情况存储在数据库的数据表中,即数据表company_b。
company_a.csv的数据内容:
数据表company_b的数据内容:
2、company_merge转换
(1)创建一个转换company_merge,并添加CSV文件输入控件、表输入控件、字段选择控件、排序合并控件、增加序列控件、表输出控件以及Hop跳连接线。
(2)各控件配置
1)配置CSV文件输入控件
选择要抽取的CSV文件company_a.csv并检索CSV文件获取字段名称,并对文件中字段的类型、格式、长度、精度等属性进行解析。
查看文件company_a.csv的数据是否抽取到CSV文件输入流中。
2)配置字段选择控件
自动检索并添加CSV文件输入控件输出的所有数据字段。
添加需要改变元数据的字段,将“字段选择”流中的字段进行一致性处理,获取要改变的字段,并在“Binary to Normal”一列的下拉框中,选择为“是”,使得CSV文件company_a.csv中数据的字段类型与数据表company_b中数据的字段类型一致。
3)配置表输入控件
新建数据库连接,编写查询数据表company_b的SQL语句。
查看数据表company_b的数据是否成功从MySQL数据库中抽取到表输入流中。
4)配置排序合并控件
在字段框中,指定按字段id进行升序排序。
5)配置增加序列控件
在“值的名称”处,指定要增加列的列名,这里使用默认的名称,即valuename,其它配置项不作任何改变。
6)配置字段选择2控件
在“选择和修改”处选择和修改要输出的字段。
7)配置表输出控件
指定输出目标表,即数据表company(该表需提前创建,这里不作演示);勾选“指定数据库字段”复选框,用于将数据表company的字段与“字段选择2”控件输出流中的字段进行匹配。
单击“数据库字段”选项卡;再单击【输入字段映射】按钮,弹出“映射匹配”对话框,将一对对映射字段添加至“映射”选项框中。
“表输出”界面最终的配置如下。
3、运行company_merge转换
查看数据表company是否已成功插入40条数据。
二、不一致数据的转换
通过Kettle工具将对数据表company进行不一致数据的转换操作,即通过与供货商提供的标准价格表进行比较,得出不一致数据,从而进行修改,最终输出到数据表company中。
1、数据准备
A公司和B公司销售的手机均从同一个供货商手里采购,因此,同一品牌型号的手机,售价也应相同。但是,数据表company中存在同一品牌型号的手机,售价却不同。如图中关于苹果手机的4条记录brand和mode1均指向同一品牌和型号,而id为20这条数据价格字段(unitPrice)与其它3条数据的价格字段不同。
2、inconsistent转换
(1)创建一个转换inconsistent,并添加表输入控件、字段选择控件、记录集连接控件、插入/更新控件以及Hop跳连接线。
(2)各控件配置
1)配置表输入控件
新建数据库连接,编写查询数据表company中品牌型号不一致数据的SQL语句。
查看数据表company中品牌型号不一致数据是否成功从MySQL数据库中抽取到表输入流中。
2)配置表输入2控件
在SQL框中编写SQL语句,查询出不一致数据在数据表suppliers中的全部信息;在“从步骤插入数据”的下拉框选择“表输入”步骤;勾选“执行每一行”处的复选框,用于将表输入控件流中的数据放入到SQL语句对应的参数位置,通过条件查询与数据表suppliers中的数据进行匹配。
3)配置字段选择控件
添加表输入2控件流中的所有数据字段,并将字段unitPrice改名成unitPrice1。
由于后续操作不需要字段id,这里将id移除。
4)配置表输入3控件
在SQL框中编写查询与标准价格表(供货商提供的价格表)中品牌型号不一致数据的SQL语句。
查看数据表company中品牌型号不一致数据是否成功从MySQL数据库中抽取到表输入流中。
5)配置记录集连接控件
在“第一个步骤”处的下拉框中选择“字段选择”控件,“第二个步骤”处的下拉框中选择“表输入3”控件,用于将“字段选择”控件流中的数据与“表输入3”控件流中的数据进行合并连接;在“第一个步骤的连接字段”和“第二个步骤的连接字段”处添加连接字段,这里添加的连接字段是brand、model,用于将“字段选择”控件流中的字段brand、model与“表输入3”控件流中的字段brand、model进行连接;在“连接类型”处的下拉框选择连接类型,这里选择的RIGHT OUTER,即右外连接。
6)配置字段选择2控件
在“选择和修改”选项卡的字段名称处填写id和unitPrice1,用于在插入/更新控件中,通过唯一字段id修改对应的价格unitPrice1字段内容。
7)配置插入/更新控件
单击目标表右侧的【浏览】按钮,弹出“数据库浏览器”窗口,选择目标表company;单击【获取字段】按钮,用来指定查询数据所需要的关键字,也可通过手动输入,指定查询数据所需要的关键字,这里选择的是数据表company中的id字段和输入流里面的id字段;单击【获取和更新字段】按钮,用来指定需要更新的字。
3、运行inconsistent转换
查看数据表company是否已成功将数据表company中品牌型号相同、价格不同的数据修改成品牌型号价格均相同的数据。
三、数据粒度的转换
通过Kettle工具将对数据表company进行数据粒度的转换操作,即将数据表company中字段为salesArea的数据都统一成省级份,并存储到新数据表company_new中。
1、数据准备
A公司的日手机销售情况中的销售区域是市级,而B公司的日手机销售情况中的销售区域是省级,A公司和B公司的日手机销售情况合并后存储在数据表company中,通过仔细观察数据表company中字段为salesArea的一列,发现该列既包含市级也包含省级。数据表company中的部分数据内容。
2、granularity转换
(1)创建一个转换granularity,并添加表输入控件、字段选择控件、排序记录控件、记录集连接控件、过滤控件、空操作控件、表输出控件以及Hop跳连接线。
(2)各控件配置
1)配置表输入控件
新建数据库连接,编写查询数据表company_b的SQL语句。
查看数据表company_b的数据是否成功从MySQL数据库中抽取到表输入流中。
2)配置字段选择控件
在“选择和修改”选项卡的“字段”处手动添加所需字段,这里添加字段id和salesArea。
3)配置排序记录控件
在“字段”框中添加字段salesArea,以该字段为基础对整体数据进行升序排序。
4)配置表输入2控件
在SQL框中编写SQL语句,用于查询city数据表中字段city和pid的数据,用于与数据表company中字段salesArea进行合并连接。
查看city数据表中的字段city和pid的数据是否成功从MySQL数据库中抽取到表输入流中。
5)配置排序记录2控件
在“字段”框中添加字段city,以该字段为基础对整体数据进行升序排序。
6)配置记录集连接控件
在“第一个步骤”处的下拉框中选择“排序记录”控件,“第二个步骤”处的下拉框中选择“排序记录2”控件;在“第一个步骤的连接字段”和“第二个步骤的连接字段”处分别添加连接字段,这里添加的连接字段是salesArea和city,将“排序记录”控件流中的数据与“排序记录2”控件流中的数据进行合并连接;在“连接类型”处的下拉框选择连接类型,这里选择的LEFT OUTER,即左外连接。
7)配置字段选择2控件
在“选择和修改”选项卡的“字段”处手动添加所需字段,这里添加字段id、pid和salesArea。
8)配置排序记录3控件
在“字段”框中添加字段pid,以该字段为基础对整体数据进行升序排序。
9)配置表输入3控件
在SQL框中编写SQL,用于获取数据表provincial中字段为id和Provincial的数据,后续用于与“排序记录”控件流中的字段数据进行合并连接。
查看数据表provincial中字段为id和Provincial的数据是否成功从MySQL数据库中抽取到表输入流中。
10)配置排序记录4控件
在“字段”框中添加字段pid,以该字段为基础对整体数据进行升序排序。
11)配置记录集连接2控件
在“第一个步骤”处的下拉框中选择“排序记录3”控件,“第二个步骤”处的下拉框中选择“排序记录4”控件;在“第一个步骤的连接字段”和“第二个步骤的连接字段”处分别添加连接字段,这里分别添加的连接字段是pid和pid;在“连接类型”处的下拉框选择连接类型,这里选择的LEFT OUTER,即左外连接,在“字段”框中添加字段pid,以该字段为基础对整体数据进行升序排序。
12)配置过滤记录控件
在“条件”处设置过滤的条件,将字段为Provincial中值为“null”的数据过滤掉;在“发送true数据给步骤:”处的下拉框中选择“空操作”,将Provincial字段值为不为null的数据放在“空操作”控件中;在“发送false数据给步骤:”处的下拉框中选择“空操作(什么也不做)2”,将Provincial字段值为null的数据放在“空操作(什么也不做)2”控件中。
13)配置字段选择3控件
在“选择和修改”选项卡的“字段”处手动添加所需字段,这里添加字段id和Provincial,用于后续进行输出。
14)配置表输出控件
指定输出目标表,即数据表temporary;勾选“指定数据库字段”复选框,用于将数据表temporary的字段与字段选择3控件输出流中的字段进行匹配。
单击“数据库字段”选项卡;单击【输入字段映射】按钮,弹出“映射匹配”对话框。
单击【猜一猜】按钮,让Kettle自动实现映射。
15)配置字段选择4控件
在“选择和修改”选项卡的“字段”处手动添加所需字段,这里添加字段id和salesArea。
16)配置表输出2控件
指定输出目标表,即数据表temporary;勾选“指定数据库字段”复选框,用于将数据表temporary的字段与字段选择4控件输出流中的字段进行匹配。
单击“数据库字段”选项卡;单击【输入字段映射】按钮,弹出“映射匹配”对话框。
单击【猜一猜】按钮,让Kettle自动实现映射。
3、granularity_merge转换
(1)创建一个转换granularity_merge,并添加表输入控件、字段选择控件、排序记录控件、记录集连接控件、表输出控件以及Hop跳连接线。
(2)各控件配置
1)配置表输入控件
新建数据库连接,在SQL框中编写获取数据表temporary中字段id和salesArea的数据的 SQL语句。
查看数据表temporary中数据是否成功从MySQL数据库中抽取到表输入流中。
2)配置字段选择控件
在“选择和修改”选项卡的“字段”处手动添加所需字段,这里添加字段id和salesArea,后续用于与数据表company中的数据进行合并。
3)配置排序记录控件
在“字段”框中添加字段id,以此字段为基础对所有数据进行升序排序。
4)配置表输入2控件
在SQL框中编写SQL语句,用于查询数据表company中的全部数据。
查看数据表company中的数据是否成功从MySQL数据库中抽取到表输入流中。
5)配置字段选择2控件
在“选择和修改”选项卡的“字段”处手动添加所需字段,这里添加字段id、brand、model、unitPrice、number,后续通过字段id将数据表temporary中字段salesArea和数据表company中的数据进行合并。
6)配置排序记录2控件
在“字段”框中添加字段id,以此字段为基础对全部数据进行升序排序。
7)配置记录集连接控件
在“第一个步骤”处的下拉框中选择“排序记录”,“第二个步骤”处的下拉框中选择“排序记录2”;在“第一个步骤的连接字段”和“第二个步骤的连接字段”处添加连接字段,这里添加的连接字段是id和id,用于将“排序记录”控件流中的数据与“排序记录2”控件中的数据合并连接;在“连接类型”处的下拉框选择连接类型,这里选择的FULL OUTER,即完全外连接。
8)配置字段选择3控件
在“选择和修改”选项卡的“字段”处手动添加所需字段,由于源数据表company中包含字段id、salesArea、brand、model、unitPrice、number,因此需要获取“记录集连接”控件流中的字段id、salesArea、brand、model、unitPrice、number,用于与源数据表company中的字段相对应。
9)配置表输出控件
指定输出目标表,即数据表company_new;勾选“指定数据库字段”复选框,用于将数据表temporary的字段与字段选择3控件输出流中的字段进行匹配。
单击“数据库字段”选项卡;单击【输入字段映射】按钮,弹出“映射匹配”对话框。
单击【猜一猜】按钮,让Kettle自动实现映射。
4、运行granularity_merge转换
查看数据表company_new中字段为salesArea的数据是否都为省份级。
四、数据的商务规则计算
通过Kettle工具对数据表company_new中的数据进行商务规则的计算,即对数据表company_new中的数据进行相关处理和计算,从而得出手机在各省份的日销售额,并存储于数据表regional_sales中。
1、数据准备
我们可以通过对数据表company_new中的数据处理和计算,得出总公司需要的各省份的手机日销售额。数据表company_new中的数据内容。
2、total转换
(1)创建一个转换total,并添加表输入控件、字段选择控件、计算器控件、排序记录控件、分组控件、唯一行控件、表输出控件以及Hop跳连接线。
(2)各控件配置
1)配置表输入控件
新建数据库连接,在SQL框中编写查询数据表company_new中全部数据的SQL语句。
查看数据表company_new中数据是否成功从MySQL数据库中抽取到表输入流中。
2)配置字段选择控件
在“选择和修改”选项卡的“字段”处手动添加所需字段,这里添加字段id、salesArea、unitPrice和number,用于后续的计算处理。
添加需要改变元数据的字段,由于数据表company_new中字段unitPrice的数据类型为varchar(字符),字段number的类型为int,这字段类型不同的数据无法进行计算,因此需要将字段unitPrice的类型改为Integer,从而进行后续的计算操作。
4)配置计算器控件
在“字段”处,添加一个新字段salesAmount,用于存储计算出的手机日销售额;在“字段A”和“字段B”处的下拉选项中分别选择“unitPrice”(销售价格)和“number”(销售数量)字段;在“计算”处的下拉框中选择“A*B”,即表示将字段A与字段B进行相乘计算。
5)配置排序记录控件
在“字段”框中添加字段salesArea,以该字段为基础对所有数据进行升序排序。
6)配置分组控件
在“构成分组的字段”处的添加分组字段salesArea,将字段salesArea相同的数据分为一组,便于进行“聚合”操作;在“聚合”处添加一个新字段total,用于存储各省份的手机销售总额。
7)配置字段选择2控件
在“选择和修改”处选择需要的字段,这里选择的是字段salesArea和total,用于后续在“表输出”控件中进行输出操作。
8)配置唯一行控件
在“用来比较的字段”处添加要去重的字段,因为“字段选择2”控件流中字段total的数据有重复,所以需要进行去重操作,因此这里选择去重的字段为total。
9)配置表输出控件
指定输出目标表,即数据表regional_sales(该表需提前创建,这里不作演示);勾选“指定数据库字段”复选框,用于将数据表regional_sales的字段与唯一行控件输出流中的字段进行匹配。
单击“数据库字段”选项卡;单击【输入字段映射】按钮,弹出“映射匹配”对话框。
单击【猜一猜】按钮,让Kettle自动实现映射。
3、运行total转换
查看数据表regional_sales是否已存储各省份手机日销售额。