商务智能方法与应用第一章实验手册

2020-02-08
6分钟阅读时长

«返回课程汇总页面

【实验手册版本】

当前版本号v20200407

版本修改说明
v20200407修改MySql 的版本为5.x,因为8.x的版本存在兼容问题
v20200325修改步骤4的相关描述,去掉查看test库的要求
v20200318修改了MySQL驱动的版本,避免出现驱动不兼容情况
v20200313增加了 Kettle 网盘下载链接
v20200312更新了 Kettle 下载链接
v20200210初始化版本

实验1:销售数据预处理

【实验名称】

销售数据预处理

【实验目的】

  • 熟悉 Linux、MySQL、Insight 等系统和软件的安装与使用。
  • 了解大数据处理的基本流程。
  • 熟悉数据抽取、转换、加载的方法。
  • 熟悉在不同类型数据库之间进行数据的导入与导出。

【实验原理】

本实验将使用 MySQL Workbench (MySQL 连接客户端软件)以及 Pantaho Data Integration(也叫 Kettle,是一个ETL工具)。

首先将销售数据和员工数据导入 MySQL,通过 Kettle 和 MySQL Workbench 连接,将两个数据源利用员工信息号进行整合,最终将生成的一张新表格 写入数据库,达到可在一张表格中查看员工信息和对应销售情况的目的。

本实验将使用两个数据源:

  • employee_info_table.sql 代表员工信息表、
  • sales_info_table.sql 表示销售信息表。

【实验环境】

个人笔记本安装。 内存:至少4G 硬盘:至少空余40G 操作系统: 64位 Windows系统。

【实验资源】

以下非网盘实验资源推荐复制链接到迅雷下载。

MySQL Workbench

https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community-8.0.19-winx64.msi

Pantaho Data Integration(Kettle) 9.0

  • 官方下载,直接点绿色的按钮下载
https://sourceforge.net/projects/pentaho/files/
  • 这是百度网盘下载地址
https://pan.baidu.com/s/1vYEVuG-LkAVJyRajW3_CbQ#提取码fb57

MySQL 5.x(如果已经安装可以不用下载)

https://dev.mysql.com/downloads/windows/installer/5.7.html

JDK8(如果已经安装可以不用下载) 需要打开以下页面,选择对应系统版本的JDK下载。

https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
  • MySQL JDBC 驱动mysql-connector-java-5.1.48-bin.jar(Kettle需要此驱动连接MySQL)
  • employee_info_table.sql 脚本文件
  • sales_info_table.sql 脚本文件
https://pan.baidu.com/s/1nIE4q_4niPTp9V0G2f5kig#提取码:nea3

【实验步骤】

  1. 安装JDK8,如果已经安装可以不用重复安装。安装过程略。

  2. 安装MySQL,安装过程中把管理员账号密码设置如下。

用户名:root
密码:Mysql0668
  1. 安装 MySQL Workbench。测试是否能够连接数据库。

  2. 查看 MySQL Workbench 左边SCHEMAS面板是否有数据。

  3. 在 MySQL Workbench 运行以下代码,创建两个数据库etl_aetl_b

(1)复制以下代码到 MySQL Workbench 运行。

--创建etl_a数据库,同时创建该库的连接账号
--用户名密码:etl_a/etl_a
create user 'etl_a'@'localhost' identified by 'etl_a';
create user 'etl_a'@'%' identified by 'etl_a';
create database etl_a;
grant all on etl_a.* to 'etl_a'@'localhost';
grant all on etl_a.* to 'etl_a'@'%';

--创建etl_b数据库,同时创建该库的连接账号
--用户名密码:etl_b/etl_b
create user 'etl_b'@'localhost' identified by 'etl_b';
create user 'etl_b'@'%' identified by 'etl_b';
create database etl_b;
grant all on etl_b.* to 'etl_b'@'localhost';
grant all on etl_b.* to 'etl_b'@'%';

(2)点击闪电符号可以运行代码,或者按ctrl+enter

(3)Output 区域可以看到 SQL 语句是否运行成功。

(4)刷新左边Schema 区域,看是否能够看到etl_aetl_b数据库。

  1. 修改SQL脚本。

(1)用文本编辑器(例如Notepad++)打开employee_info_table.sql文件,查找到员工编号为0025603211这一行,修改name对应的字段为你本人姓名。(关键步骤,这步缺失实验报告不得分)修改完成后,保存脚本。

在73行找到这一句

INSERT INTO employee_info_table(Employee_number,name,age,phone_number,department,area,other) VALUES (0025603211,'xiaoqian',22,13245206531,'sales','shenzhen',NULL);

把’xiaoqian’修改为你的中文名字

INSERT INTO employee_info_table(Employee_number,name,age,phone_number,department,area,other) VALUES (0025603211,'修改为本人姓名',22,13245206531,'sales','shenzhen',NULL);

(2)在MySQL Workbench 执行以下代码,在etl_a库执行employee_info_table.sql,在etl_b库执行sales_info_table.sql。

  1. 执行完语句以后,注意查看 Workbench 下面 Output 区域运行结果是否成功。

  2. Kettle 安装包解压到一个文件夹。

  3. 把MySQL数据库的驱动mysql-connector-java-5.1.41-bin.jar拷贝到Kettle安装目录\data-integration\lib下。

  4. 在Kettle安装目录下找到spoon.bat文件,用文本编辑器打开。

(1)在125行找到这句。

if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx2048m" "-XX:MaxPermSize=256m"

(2)在这句后面增加"-Dfile.encoding=UTF-8",注意有空格隔开。这句主要是让Kettle支持UTF-8编码,在数据转换过程中避免乱码的出现。

if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx2048m" "-XX:MaxPermSize=256m" "-Dfile.encoding=UTF-8"

(3)保存以后,双击spoon.bat启动Kettle。

  1. 新建一个转换(Transformations)

12.新建一个名字为MYSQL_ETL_A的连向etl_a库的连接。

  1. 测试数据库是否能够正常连接。

  2. 重复第12-13相同的操作,新建一个名字为MYSQL_ETL_B连向etl_b库的连接。

  3. 核心对象选项卡下,选择输入->表输入,拖拽到右边“转换”面板内。

  4. 双击表输入,获取etl_a库下employee_info_table表数据,配置如下,注意获取记录数量限制设置为1000。

  5. 重复15-16步骤,获取etl_b库下sales_info_table表数据,配置如下,注意获取记录数量限制设置为1000。

  6. 核心对象选项卡下,搜索“排序”,把排序记录拖拽到右边面板内。

  7. 点击employee_info_table,按住键盘的Shift键,拖拽箭头指向排序记录

  8. 双击排序记录,选择按employee_number排序,升序选择“是”。

  9. 核心对象选项卡下,搜索“选择”,把字段选择拖拽到右边面板内。选择"Employee_number",“sales”,“profits"这三个字段,其他字段可以右键点击选择删除。

  10. 在“字段选择”步骤后面增加一个“排序记录”步骤,选择Employee_number升序。

  11. 核心对象选项卡下,搜索“merge”,把Multiway merge join拖拽到右边面板内,并把排序记录排序记录2步骤都指向Multiway merge join。这一步是对2个表格做一个内连接操作,使用Employee_number作为连接的列。

注意在选择连接的列时,两个 Join Keys 都只保留Employee_number,把其他列删除。

  1. 新增一个字段选择步骤,只保留下图的字段,其他字段可以右键点击选择删除。

  2. 核心对象选项卡下,搜索“表输出”,把表输出拖拽到右边面板内,并连接字段选择2步骤。编辑表输出步骤,数据库连接选择“MYSQL_ETL_B”,目标表输入“employee_sales”。点击SQL按钮,执行创建“employee_sales”表格的SQL语句。

这一步主要是把employee_info_tablesales_info_table连接的表格导出到employee_sales

  1. 点击执行。

  2. 查看执行日志是否转换成功

  3. 在MySQL Workbench 查看etl_b数据库下的employee_sales表格是否存在数据。(此为关键步骤,无截图实验报告不得分)

  4. 在MySQL Workbench 编写 SQL 语句,把employee_info_tablesales_info_table进行连接,得到和employee_sales一样的结果,可以参考以下提示。

提示:以下[]内容需要你补充完整。

select a.Employee_number,a.name,a.age,a.phone_number,a.department,a.area,b.sales,b.profits from [] a inner join [] b on [] order by [] asc