ETL工具 - Kettle 转换算子介绍
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
一、Kettle 转换算子
上篇文章对 Kettle 中的输入输出算子进行了介绍本篇文章继续对转换算子进行讲解。
下面是上篇文章的地址
转换是ETL
里面的T
Transform
主要做数据转换数据清洗的工作。
二、转换算子介绍
数据输入以上篇文章中的表输入表结构如下
CREATE TABLE `user` (
`id` int(0) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`age` int(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
INSERT INTO `user` VALUES (1, '小明', 90);
INSERT INTO `user` VALUES (2, '小红', 91);
INSERT INTO `user` VALUES (3, '小兰', 92);
INSERT INTO `user` VALUES (4, '小爱', 93);
INSERT INTO `user` VALUES (5, '张三', 94);
INSERT INTO `user` VALUES (6, '李四', 95);
INSERT INTO `user` VALUES (7, '王五', 96);
INSERT INTO `user` VALUES (8, '赵六', 97);
表输入控件
2.1 增加常量
增加常量就是在本身的数据流里面添加一列常量数据值都是相同的内容。
运行后预览数据
2.2 增加序列
增加序列同样给数据流添加一个字段但可以自定义该序列字段的递增步长
运行后预览数据
2.3 值映射
值映射就是把字段的一个值映射成其他的值
运行后预览数据
2.4 Concat fields
将多个字段连接起来形成一个新的字段
运行后预览数据
2.5 字段选择
可以从数据流中进行选择字段、改变名称、修改数据类型等
运行后预览数据
2.6 计算器
一个函数集合可以通过里面的多个计算函数对已有字段进行计算例如计算 id*age
的值
运行后预览数据
2.7 剪切字符串
根据输入流字段从摸个位置开始剪切出新的字段
运行后预览数据
2.8 字符串替换
根据输入流字段替换某个字符形成新的字段
运行后预览数据
2.9 字符串操作
可以去除字符串两端的空格和大小写切换
这里再对user
表增加两个测试数据
INSERT INTO `test`.`user`(`id`, `name`, `age`) VALUES (9, 'xiao ai', 22);
INSERT INTO `test`.`user`(`id`, `name`, `age`) VALUES (10, ' wangwu ', 23);
运行后预览数据
2.10 排序记录
根据指定字段进行升序或者降序排列
运行后预览数据
2.11 去除重复记录
去除数据流里面相同的数据行使用之前要求必须先对数据进行排序
对数据库中添加两个名字相同的数据
运行后预览数据
2.12 唯一行 (哈希值)
根据哈希值只允许保留一行同样可以实现去重的效果
运行后预览数据
2.13 拆分字段
把字段按照分隔符拆分成两个或多个字段需要注意字段拆分后原字段就会从数据流中消失
再添加两条测试数据
INSERT INTO `test`.`user`(`id`, `name`, `age`) VALUES (11, '小王,小七', 22);
INSERT INTO `test`.`user`(`id`, `name`, `age`) VALUES (12, '小八,小九', 23);
运行后预览数据
2.14 列拆分为多行
某个字段根据指定分隔符进行拆分成多行其他字段相同
运行后预览数据
2.15 列转行
多列转一行如果数据一列有相同的值可以按照指定的字段将其中一列的字段内容变成不同的列字段列转行之前数据流必须按照分组字段进行排序否则数据会错乱
创建新测试表
CREATE TABLE `test` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`week` varchar(255) DEFAULT NULL,
`work` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
写入测试数据
INSERT INTO `test`.`test`(`id`, `name`, `week`, `work`) VALUES (1, '张三', '1', '10');
INSERT INTO `test`.`test`(`id`, `name`, `week`, `work`) VALUES (3, '张三', '2', '10');
INSERT INTO `test`.`test`(`id`, `name`, `week`, `work`) VALUES (5, '张三', '3', '10');
INSERT INTO `test`.`test`(`id`, `name`, `week`, `work`) VALUES (7, '张三', '4', '10');
INSERT INTO `test`.`test`(`id`, `name`, `week`, `work`) VALUES (9, '张三', '5', '9');
INSERT INTO `test`.`test`(`id`, `name`, `week`, `work`) VALUES (11, '张三', '6', '8');
INSERT INTO `test`.`test`(`id`, `name`, `week`, `work`) VALUES (13, '张三', '7', '0');
INSERT INTO `test`.`test`(`id`, `name`, `week`, `work`) VALUES (2, '李四', '1', '10');
INSERT INTO `test`.`test`(`id`, `name`, `week`, `work`) VALUES (4, '李四', '2', '10');
INSERT INTO `test`.`test`(`id`, `name`, `week`, `work`) VALUES (6, '李四', '3', '10');
INSERT INTO `test`.`test`(`id`, `name`, `week`, `work`) VALUES (8, '李四', '4', '10');
INSERT INTO `test`.`test`(`id`, `name`, `week`, `work`) VALUES (10, '李四', '5', '8');
INSERT INTO `test`.`test`(`id`, `name`, `week`, `work`) VALUES (12, '李四', '6', '8');
INSERT INTO `test`.`test`(`id`, `name`, `week`, `work`) VALUES (14, '李四', '7', '5');
下面根据 name
分组后 week
的值转为列展示 work
字段
运行后预览数据
2.16 行转列
和上一个控件相反将数据行变为数据列下面将上一步处理的还原会最初的效果
运行后预览数据
2.17 行扁平化
把同一组的多行数据合并成为一行使用之前需要对数据进行排序每个分组的数据条数要保证一致否则数据会有错乱
创建新的测试表
CREATE TABLE `user3` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`grade` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
写入测试数据
INSERT INTO `test`.`user3`(`id`, `name`, `grade`) VALUES (11, '小明', 90);
INSERT INTO `test`.`user3`(`id`, `name`, `grade`) VALUES (12, '小明', 91);
INSERT INTO `test`.`user3`(`id`, `name`, `grade`) VALUES (13, '小明', 96);
INSERT INTO `test`.`user3`(`id`, `name`, `grade`) VALUES (14, '小兰', 90);
INSERT INTO `test`.`user3`(`id`, `name`, `grade`) VALUES (15, '小兰', 88);
INSERT INTO `test`.`user3`(`id`, `name`, `grade`) VALUES (16, '小兰', 60);
INSERT INTO `test`.`user3`(`id`, `name`, `grade`) VALUES (17, '李四', 70);
INSERT INTO `test`.`user3`(`id`, `name`, `grade`) VALUES (18, '李四', 71);
INSERT INTO `test`.`user3`(`id`, `name`, `grade`) VALUES (19, '李四', 72);
运行后预览数据
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |