Kettle作业设计

实验目标

统计数据库course表中课程名称为空课时数为零的记录数。

输入数据

1 大数据导论 基础课 4 张三 2020/3/1 0:00 64
2 Hadoop大数据技术 专业课 4 李四 2020/3/2 0:00 64
3 分布式数据库原理与应用 专业课 4 张三 2020/3/3 0:00 64
4 数据导入与预处理应用 专业课 4 李四 2020/3/4 0:00 0
5 数据挖掘技术与应用 专业课 4 王五 2020/3/5 0:00 64
6 专业课 4 赵六 2020/3/6 0:00 64
7 大数据应用开发语言 专业课 4 张三 2020/3/7 0:00 64
8 大数据分析与内存计算 专业课 4 张三 2020/3/8 0:00 64
9 专业课 4 王五 2020/3/9 0:00 64
10 专业课 4 赵六 2020/3/10 0:00 64
15 数据库原理与应用 专业课 4 赵六 2020/3/11 0:00 0

具体SQL语句见附录。

期望结果

中间文件输出

编号 课程名称 课程大类 学分 讲师 开课时间 课时数 课程名称为空 课时数为零
1 大数据导论 基础课 4 张三 2020/3/1 64 0 0
2 Hadoop大数据技术 专业课 4 李四 2020/3/2 64 0 0
3 分布式数据库原理与应用 专业课 4 张三 2020/3/3 64 0 0
4 数据导入与预处理应用 专业课 4 李四 2020/3/4 0 0 1
5 数据挖掘技术与应用 专业课 4 王五 2020/3/5 64 0 0
6 专业课 4 赵六 2020/3/6 64 1 0
7 大数据应用开发语言 专业课 4 张三 2020/3/7 64 0 0
8 大数据分析与内存计算 专业课 4 张三 2020/3/8 64 0 0
9 专业课 4 王五 2020/3/9 64 1 0
10 专业课 4 赵六 ####### 64 1 0
15 数据库原理与应用 专业课 4 赵六 ####### 0 0 1

统计结果输出

此步骤是对课程名称为空课时数为零两列的求和。

课程名称为空 课时数为零
3 2

邮件通知

作业执行成功,发送成功邮件; 执行失败,发送失败邮件。

整体设计

image-20221117102206112

此作业主要分为两个模块:

  1. 数据处理
  2. 设置变量

数据处理转换设计

image-20221117100828430

设置变量作业设计

image-20221117102421789

数据处理转换设计

读取数据

表输入

image-20221117111638415

数据库连接

image-20221117104337566

日期格式调整

字段选择步骤

选择和修改标签页

image-20221117111852969

元数据标签页

image-20221117111942120

使用JS新增两列

JavaScript代码步骤

新增课程名称为空课时数为零两列。

image-20221117143449785

统计

通过在映射子转换中统计课程名称为空课程数为零的记录数。

映射子转换

新建转换,此处命名为:SUM求和转换

具体设计:

image-20221117143758374

映射输入规范

JavaScript步骤新增的两列作为映射子转换的输入

image-20221117144058658

分组

不需要对两列数据分组,只需要对两列数据求和。

image-20221117144214405

映射输出规范

无需调整。

SUM求和转换引用

在数据处理转换中引用上面配置的SUM求和转换,具体做法:在下面红色方框上右键选择引用的SUM求和转换.ktr文件。

image-20221117144617317

image-20221117145030798

统计结果输出

将映射子转换的求和结果输出到文本文件中,具体配置略。

设置变量作业设计

整体设计

image-20221117204215308

设置变量作业项

设置变量作业项中,有种方式设置变量:

  1. 在属性文件中设置变量
  2. 直接设置变量

我们选择第二种方式,直接设置变量 db_table=course

image-20221117204458714

设置变量转换

创建转换,用来获取系统IP,并将该IP设置为变量,供数据处理转换中使用。此处我们将该转换命名为设置变量

image-20221117205818403

获取系统信息

image-20221117205900787

此处,我们将获取到的IP地址,命名为ip

设置变量

image-20221117210004642

设置变量步骤中,我们将上一步骤中获取的ip设置为变量,命名为db_host

命名参数

在命名参数中定义数据库用户名密码。在画布空白处单击鼠标右键 - 作业设置 - 命名参数 - 标签页

image-20221118082324001

属性文件

kettle.properties中定义变量

文件位置C:\Users\Qingyuan_Qu\.kettle

1
db_name=data_etl

定义变量后,记得重启Kettle,才能使变量生效。

引用

记得在并行设置变量作业中,通过转换作业项对刚才创建的设置变量转换进行引用。

image-20221117211444473

然后再start作业项上右键

image-20221117212808532

记得在设置变量作业项中对并行设置变量作业进行引用。

变量引用

同时安装键盘 Ctrl + Alt + 空格选择预定义的变量。

image-20221118081831403

image-20221118082223212

image-20221118082017416

邮件通知作业项

image-20221117213018495

注意:下面的密码不是邮箱登录密码,而邮箱SMTP授权码,需要在邮箱服务商网站获取。

image-20221117213042127

发送失败邮件作业项与此相似,不再赘述。

命令行启动

1
2
3
4
5
# 首先进入kettle软件目录
PS D:\green-soft\pdi-ce-9.3.0.0-428\data-integration> cd D:\green-soft\pdi-ce-9.3.0.0-428\data-integration\

# 启动job作业
PS D:\green-soft\pdi-ce-9.3.0.0-428\data-integration> .\Kitchen.bat /file C:\job\job.kjb /level Debug /logfile C:\job\logs

附录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
`编号` int(11) NOT NULL,
`课程名称` varchar(20) DEFAULT NULL,
`课程大类` varchar(10) DEFAULT NULL,
`学分` int(11) NOT NULL,
`讲师` varchar(10) DEFAULT NULL,
`开课时间` datetime DEFAULT NULL,
`课时数` int(11) NOT NULL,
PRIMARY KEY (`编号`),
KEY `学分_index` (`学分`),
KEY `课时数_index` (`课时数`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES ('1', '大数据导论', '基础课', '4', '张三', '2020-03-01 00:00:00', '64');
INSERT INTO `course` VALUES ('2', 'Hadoop大数据技术', '专业课', '4', '李四', '2020-03-02 00:00:00', '64');
INSERT INTO `course` VALUES ('3', '分布式数据库原理与应用', '专业课', '4', '张三', '2020-03-03 00:00:00', '64');
INSERT INTO `course` VALUES ('4', '数据导入与预处理应用', '专业课', '4', '李四', '2020-03-04 00:00:00', '0');
INSERT INTO `course` VALUES ('5', '数据挖掘技术与应用', '专业课', '4', '王五', '2020-03-05 00:00:00', '64');
INSERT INTO `course` VALUES ('6', null, '专业课', '4', '赵六', '2020-03-06 00:00:00', '64');
INSERT INTO `course` VALUES ('7', '大数据应用开发语言', '专业课', '4', '张三', '2020-03-07 00:00:00', '64');
INSERT INTO `course` VALUES ('8', '大数据分析与内存计算', '专业课', '4', '张三', '2020-03-08 00:00:00', '64');
INSERT INTO `course` VALUES ('9', null, '专业课', '4', '王五', '2020-03-09 00:00:00', '64');
INSERT INTO `course` VALUES ('10', null, '专业课', '4', '赵六', '2020-03-10 00:00:00', '64');
INSERT INTO `course` VALUES ('15', '数据库原理与应用', '专业课', '4', '赵六', '2020-03-11 00:00:00', '0');