实验课程

THIS NAME

实验课程

当前位置: 首页 >> 实验课程 >> 正文

大数据采集与预处理-Kettle数据清洗与转换

发布日期:2024-08-19    作者:井睿勍     来源:     点击:

Kettle数据清洗与转换

一、实验目的

1、学习如何使用Kettle对不一致数据进行转换。

二、实验设备与器件

PC机、phpstudywamp环境)、sublime text或者php storm工具

三、实验内容

相关知识

在学习该课程之前,请先打开终端执行如下命令启动Mysql并初始化课程所需案例数据:

sudo service mysql start
mysql -uroot -pTempoTalents@2021 < /data/workspace/data_set/company_suppliers.sql2

具体操作如下图:

IMG_256

不一致数据转换主要是将不同业务系统中的相同类型的数据进行统一。例如,同一供应商在结算系统中的编码是XX0001,而在CRM(客户关系管理)系统中的编码是YY0001,这时就需要将这两个业务系统中的数据抽取过来进行统一转换,转换成同一个编码。

A公司和B公司销售的手机均从同一个供货商手里采购,因此,同一品牌型号的手机,售价也应相同。但是,数据表company中存在同一品牌型号的手机,售价却不同,具体如图1所示。

  IMG_257

1   数据表company中的不一致数据

从图1中可以看出,标记的4条数据中,字段brandmodel均指向同一品牌和型号,而id19的这条数据价格字段(unitPrice)与其他3条数据的价格字段不同。
下面通过Kettle工具对数据表company进行不一致数据的转换操作,即通过与供货商提供的标准价格表进行比较,得出不一致数据,从而进行修改,最终输出到数据表company中,具体实现步骤如下。

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

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

  IMG_258

2   创建转换inconsistent

2. 配置表输入控件

双击图2中的表输入控件,进入表输入界面,如图3所示。

  IMG_259

3   “表输入界面

在图2中单击新建按钮,配置数据库连接,配置完成后单击确认按钮。MySQL数据库连接的配置如图4所示,MySQL数据库密码为TempoTalents@2021

  IMG_260

4   MySQL数据库连接配置

在图3SQL框中编写查询数据表company中品牌、型号不一致数据的SQL语句,SQL语句如下:

select
          c2.brand,
          c2.modelfrom
          company c2where
          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);

注意:
数据表suppliers为供应商出售手机的价格清单表,如下图:

  IMG_261

然后单击预览按钮,查看数据表company中品牌、型号不一致数据是否成功从MySQL数据库中抽取到表输入流中,具体如图5和图6所示。

  IMG_262

5   编写SQL语句

  IMG_263

6   预览数据

从图6中可以看出,数据表company中品牌、型号不一致数据已经成功从MySQL数据库中抽取到表输人流中,单击关闭按钮关闭预览数据窗口,再点击确定按钮,完成表输入控件的配置。

3. 配置表输入2”控件

双击图2中的表输入2”控件,进入表输入界面,如图7所示。

  IMG_264

7   “表输入界面

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

  IMG_265

8   编写SQL语句

需要注意的是,表输入控件查询字段的顺序要与本控件内SQL语句的参数对应。在图8中单击确定按钮,完成表输入2”控件的配置。

4. 配置字段选择控件

双击图2中的字段选择控件,进入选择/改名值界面,如图9所示。

  IMG_266

9   “选择/改名值界面

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

  IMG_267

10   Kettle检索字段

在图10中选择移除选项卡,切换到移除选项卡界面,如图11所示。

  IMG_268

11   “移除选项卡界面

在图11中添加需要移除的字段,这里添加的是字段id,由于后续操作不需要字段id,因此在此进行移除,具体如图12所示。

  IMG_269

12   移除id字段

在图12中单击确定按钮,完成字段选择控件的配置。

5. 配置表输入3”控件

双击图2中的表输入3”控件,进入表输入界面,如图13所示。

  IMG_270

13   “表输入界面

在图13SQL框中编写查询与标准价格表(供货商提供的价格表)中品牌、型号不一致数据的SQL语句,SQL语句如下:

SELECT
          id,
          brand,
          model,
          unitPriceFROM
          company c2WHERE
          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)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

然后单击预览按钮,查看数据表company中品牌、型号相同,价格不同的不一致数据是否成功从MySQL数据库中抽取到表输入流中,具体如图14和图15所示。

  IMG_271

14   编写SQL语句

  IMG_272

15   预览数据

从图15中可以看出,数据表company中品牌、型号相同,价格不同的不一致数据已经成功从MySQL数据库中抽取到表输人流中,单击关闭按钮关闭预览数据窗口,再点击确定按钮,完成表输入3”控件的配置。

6. 配置记录集连接控件

双击图2中的记录集连接控件,进入合并排序界面,如图16所示。

  IMG_273

16   “合并排序界面

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

  IMG_274

17   配置记录集连接控件

在图17中单击确定按钮,完成记录集连接控件的配置。

7. 配置字段选择2”控件

双击图2中的字段选择2”控件,进入选择改名值界面,如图18所示。

  IMG_275

18   “选择/改名值界面

在图18选择和修改选项卡的字段名称处填写idunitPrice1,用于在插入/更新控件中通过唯一字段id修改对应的价格字段unitPricel内容,具体如图19示。

  IMG_276

19   “字段选择2控件的配置

在图19中单击确定按钮,完成字段选择2”控件的配置。

8. 配置插入/更新控件

双击图2中的插入/更新控件,进入插入/更新界面,如图20所示。

  IMG_277

20   “插入/更新界面

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

  IMG_278

21   “插入/更新控件的配置

在图21中单击确定按钮,完成插入/更新控件的配置。

9. 运行转换inconsistent

单击转换工作区顶部的   IMG_279按钮,运行创建的转换inconsistent,实现将数据表company中品牌、型号相同,价格不同的不一致数据修改成品牌、型号、价格均相同的一致数据,具体如图22所示。

  IMG_280

22   运行转换inconsistent

从图22中执行结果的步骤度量可以看出,表输入控件输入1条数据并写入该控件;表输入2”控件读取表输入1”控件的1条数据,作为表输入2”控件的输入,并写入该控件;表输入3”控件输入1条数据并写入该控件;字段选择控件从表输入2”控件中读取1条数据并写人该控件;记录集连接控件从字段选择表输入3”控件中各读取1条数据,并将合并后的1条数据写入该控件;字段选择2”控件从记录集连接控件中读取1条数据并写入该控件;插入/更新控件读取字段选择2”控件的1条数据,作为插入/更新控件的输入并写入该控件完成对数据库1条数据的更新操作。

10. 查看数据表company中的数据

通过终端使用命令mysql -uroot -pTempoTalents@2021 -e "select * from transform.company;"查看数据表company是否已成功将数据表company中品牌、型号相同,价格不同的数据修改成品牌、型号、价格均相同的数据,查看结果如图23所示(只展示部分数据)。

  IMG_281

23   数据表company

从图23中可以看出,数据表company中字段brand苹果model苹果iPhone 11 Pro Max6GB/64GB/全网通)unitPrice均为9599,说明成功实现了将数据表company中品牌、型号相同,价格不同的数据修改成品牌、型号、价格均相同的数据。

编程要求

请在右侧云桌面中进行操作,完成以下任务:

·                         根据以上操作步骤完成不一致数据转换inconsistent的创建并运行,将数据表company中同一品牌型号的手机,售价不同的数据进行不一致数据转换,并更新数据表company

测试说明

在按编程要求完成操作后,请点击评测按钮,系统会自动对你的操作进行评测。
当你的结果与预期输出一致时,即为通过。

上一条:计算机体系结构-RISC处理器模型机实验 下一条:大数据采集与预处理-​Kettle完全去重

关闭