目录

一.简介

二.全量加载

        1.数据准备:

        2.建立转换添加控件

        3.配置控件

三.增量加载

        1.数据准备

        2.建立转换添加控件 

        3.配置控件

        4.配置完成运行

四.数据的批量加载

        1.数据准备

         2.建立转换添加控件

        3.配置控件

        4.配置完成运行


一.简介

        数据的预处理过程,除了包括数据抽取、数据本身的清洗与检验以及数据转换操作,还包括数据加载操作,数据加载是数据预处理过程的最后一个步骤,主要是负责将清洗检验、转换后的高质量数据加载到目标数据库中。

        数据的加载机制与数据的抽取机制相类似,数据的加载机制可以分为全量加载和增量加载。其中,全量加载是指将目标数据表中的数据全部删除后,进行数据加载的操作;而增量加载是指目标表只加载源数据表中变化的数据,其中变化的数据包含新增、修改和删除的数据。

        注意:操作中涉及到多处表输入和表输出操作,这些操作都需要去使用到数据库,在演示中不在进行数据库连接的操作。

二.全量加载

        案例介绍:从技术角度来说,全量加载比增量加载的操作要简单很多,即只需要在数据加载之前,将目标数据表进行清空,再将源数据表中的数据全部加载到目标表中。 通过Kettle工具将数据表full_source中的数据全量加载到数据表full_target中。

        1.数据准备:

        full_source表:

create table `full_source` (
	`no` INT,
	`book_name` varchar (60),
	`author` varchar (30),
	`tag` varchar (60)
); 
insert into `full_source` (`no`, `book_name`, `author`, `tag`) values('1','小王子','圣艾克苏佩里','外国文学');
insert into `full_source` (`no`, `book_name`, `author`, `tag`) values('2','解忧杂货店','东野圭吾','小说');
insert into `full_source` (`no`, `book_name`, `author`, `tag`) values('3','白夜行','东野圭吾','小说');
insert into `full_source` (`no`, `book_name`, `author`, `tag`) values('4','梦里花落知多少','郭敬明','小说');
insert into `full_source` (`no`, `book_name`, `author`, `tag`) values('5','看见','柴静','随笔');
insert into `full_source` (`no`, `book_name`, `author`, `tag`) values('6','围城','钱钟书','小说');

        full_target表:

create table `full_target` (
	`no` INT,
	`book_name` varchar (60),
	`author` varchar (30),
	`tag` varchar (60)
); 
insert into `full_target` (`no`, `book_name`, `author`, `tag`) values('1','小王子','圣艾克苏佩里','外国文学');
insert into `full_target` (`no`, `book_name`, `author`, `tag`) values('2','解忧杂货店','东野圭吾','小说');
insert into `full_target` (`no`, `book_name`, `author`, `tag`) values('5','看见','柴静','随笔');

        2.建立转换添加控件

              

kettle推送数据到kafka kettle批量导入数据_大数据

        3.配置控件

                3.1.配置“执行SQL脚本”

                        双击配置页面,建立数据库连接,添加SQL语句,如下:

                        

kettle推送数据到kafka kettle批量导入数据_数据库_02

delete from full_target

                 3.2配置“表输入”控件 

                        双击进入配置页面,建立数据库连接,添加SQL语句

                        

kettle推送数据到kafka kettle批量导入数据_kettle推送数据到kafka_03

SELECT * FROM full_source

                 3.3配置“表输出”控件

                        双击进入配置界面,选择目标表full_target

                        

kettle推送数据到kafka kettle批量导入数据_kettle推送数据到kafka_04

                4.配置完成运行

                        

kettle推送数据到kafka kettle批量导入数据_etl_05

                         

kettle推送数据到kafka kettle批量导入数据_kettle推送数据到kafka_06

三.增量加载

        增量加载是指目标表仅加载源数据表中新增和发生变化的数据。优秀的增量加载机制不但能够将业务系统中的变化数据按一定的频率准确地捕获到并加载到目标表中,同时还不会对业务系统造成太大的压力,也不会影响现有业务。

        案例:通过Kettle工具将数据表incremental_source中的数据增量加载到数据表incremental_target中。

        1.数据准备

        incremental_source表:

create table `incremental_source` (
	`id` INT,
	`name` varchar (60),
	`age` INT,
	`create_time` datetime 
); 
insert into `incremental_source` (`id`, `name`, `age`, `create_time`) values('1','Isabella','18','2019-08-20 13:14:20');
insert into `incremental_source` (`id`, `name`, `age`, `create_time`) values('2','Jack','20','2019-08-21 13:14:21');
insert into `incremental_source` (`id`, `name`, `age`, `create_time`) values('3','Nicholas','22','2019-08-20 13:14:22');
insert into `incremental_source` (`id`, `name`, `age`, `create_time`) values('4','Jasmine','19','2019-08-20 13:14:23');
insert into `incremental_source` (`id`, `name`, `age`, `create_time`) values('5','Mia','20','2019-08-20 13:14:24');
insert into `incremental_source` (`id`, `name`, `age`, `create_time`) values('6','Jone','25','2018-08-20 13:14:24');
insert into `incremental_source` (`id`, `name`, `age`, `create_time`) values('7','张华','30','2019-08-20 13:14:24');

         incremental_target表:

create table `incremental_target` (
	`id` INT,
	`name` varchar (60),
	`age` INT,
	`create_time` datetime 
); 
insert into `incremental_target` (`id`, `name`, `age`, `create_time`) values('1','Isabella','18','2019-08-20 13:14:20');
insert into `incremental_target` (`id`, `name`, `age`, `create_time`) values('2','Jack','20','2019-08-21 13:14:21');
insert into `incremental_target` (`id`, `name`, `age`, `create_time`) values('3','Nicholas','22','2019-08-20 13:14:22');
insert into `incremental_target` (`id`, `name`, `age`, `create_time`) values('4','Jasmine','19','2019-08-20 13:14:23');
insert into `incremental_target` (`id`, `name`, `age`, `create_time`) values('5','Mia','20','2019-08-20 13:14:24');

        2.建立转换添加控件 

        

kettle推送数据到kafka kettle批量导入数据_kettle推送数据到kafka_07

        3.配置控件

                3.1配置“表输入”控件

                        双击进入配置页面,建立数据库连接,输入SQL语句,点击预览

                        

kettle推送数据到kafka kettle批量导入数据_etl_08

                        

kettle推送数据到kafka kettle批量导入数据_etl_09

                3.2配置“插入/更新” 控件

                        双击进入配置页面,在用来查询的关键字中添加id,在更新字段处点击右侧获取和更新字段,添加字段

                        

kettle推送数据到kafka kettle批量导入数据_数据库_10

        4.配置完成运行

                

kettle推送数据到kafka kettle批量导入数据_数据_11

                

kettle推送数据到kafka kettle批量导入数据_etl_12

四.数据的批量加载

        通常情况下,对于几千条甚至几十万条记录的数据迁移而言,采取DML(即数据操纵语言)的INSERT语句能够很好地将数据迁移到目标数据库中。然而,当数据迁移量过于庞大时,就不能使用INSERT语句,因为执行INSERT、UPDATE以及DELETE语句的操作都会生成事物日志,事物日志的生成会减慢加载的速度,故需要针对数据采取批量加载操作。

案例:通过Kettle工具将文件weibo_user.csv中的数据批量加载到数据表weibo_user中。        

        1.数据准备

        建立weibo_user表:

create table `weibo_user` (
	`user_id` INT,
	`user_name` varchar (60),
	`gender` varchar (30),
	`message` varchar (3000),
	`post_num` INT,
	`follower_num` INT
);

         2.建立转换添加控件

                

kettle推送数据到kafka kettle批量导入数据_etl_13

        3.配置控件

                3.1配置“CSV文件输入”控件

                        双击进入配置页面,点击浏览添加所需要的文件,点击获取字段,自动添加字段

                        

kettle推送数据到kafka kettle批量导入数据_etl_14

                3.2配置“表输出”控件

                        双击进入配置页面,选择目标表weibo_usr,勾选指定数据库字段,在数据库字段选项中点击获取字段,进行字段添加

                        

kettle推送数据到kafka kettle批量导入数据_数据_15

        4.配置完成运行


kettle推送数据到kafka kettle批量导入数据_etl_16

                

kettle推送数据到kafka kettle批量导入数据_数据库_17