kettle庖丁解牛第32篇之本地和上游数据量比较后再抽取

缥帙各舒散,前后互相逾。这篇文章主要讲述kettle庖丁解牛第32篇之本地和上游数据量比较后再抽取相关的知识,希望能为你提供帮助。
引言在上一篇文章中,我们主要讲解的是:我工作中遇到的一个实际案例,数据源是一份csv文件,在使用kettle抽取csv到sql server数据库后,发现原始的数据的长度和目标表定义的列长度有问题、还伴随导入了大量的NULL记录行。
在本篇文章中,介绍的是:依然我工作中遇到的一个实际案例,我们要周期性的从上游数据库中抽取数据到本地库,每次抽取的是最近180天的数据。如果上游最近180的数据量有增加变多了,先把本地表中最近180的数据删除,然后把上游最近180天的数据抽取到本地库表中。最后把本地库表中所有记录,进行去重复操作。如果上游最近180的数据量没有化或变少了,本地表不做任何操作。
数据库表准备此处演示需要2台mysql数据库,所以演示起来会显得乱一些,为了大家看着清楚,我在命名的时候进行明确的标识。
远端库操作(192.168.8.8)
a、登录mysql
b、创建库和表创建库
mysql> create database remote_bigdata;
使用指定库
mysql> use remote_bigdata;
查看现在系统时间和100天前的时间
mysql> SELECT NOW();
mysql> SELECT (NOW() - INTERVAL 100 DAY);
创建表
mysql> create table remote_table(id int,name varchar(100),var_date DATETIME);
往表中插入数据
mysql> insert into remote_table values(1,aaa,(NOW() - INTERVAL 180 DAY));
mysql> insert into remote_table values(2,bbb,(NOW() - INTERVAL 170 DAY));
mysql> insert into remote_table values(3,ccc,(NOW() - INTERVAL 160 DAY));
mysql> insert into remote_table values(4,ddd,(NOW() - INTERVAL 150 DAY));
mysql> insert into remote_table values(5,eee,NOW());
查看表中最终的数据
mysql> select * from remote_table;
c、操作截图
本地库操作(127.0.0.1)
a、登录mysql
b、创建库和表创建库
mysql> create database local_bigdata;
使用指定库
mysql> use local_bigdata;
创建表
mysql> create table local_table(id int,name varchar(100),var_date DATETIME);
往表中插入数据
mysql> insert into local_table values(4,ddd,(NOW() - INTERVAL 150 DAY));
查看表中最终的数据
mysql> select * from local_table;
c、操作截图
DB连接a、远端DB连接
【kettle庖丁解牛第32篇之本地和上游数据量比较后再抽取】

b、本地DB连接


实战演示转换和作业的简介
此次操作有1个作业和4个转换,说明如下:
(1)、01_总调度作业:整个ETL操作的总开关,调度此作业即可完成整个ETL数据抽取所有操作内容。

(2)、02_获取本地和上流数据& 保存到变量中转换:读取本地库表中最近180天的数据量,将数据量保存到变量中。读取上游库表中最近180天的数据量,将数据量保存到变量中。

(3)、03_判断上游最近180的数据有增加& 本地进行数据抽取转换:获取上一转换中的2个变量,对2个变量进行判断,如果上游最近180的数据量有增加变多了,则进行后续操作。反之则不进行后续操作,直接结束了。

(4)、04_删除本地最近180天数据& 抽取上游最近180天数据到本地库转换:如果上游最近180的数据量有增加变多了,把本地表中最近180的数据删除,然后把上游最近180天的数据抽取到本地库表中。

(5)、05_本地表进行全表去重复操作转换:最后把本地库表中所有记录,进行去重复操作。

01_总调度作业




02_获取本地和上流数据& 保存到变量中
a、获取本地数据量


b、设置变量 local
c、获取上游数据量

d、设置变量 rem
03_判断上游最近180的数据有增加& 本地进行数据抽取

a、获取变量
b、判断数据量
把前面设置的2个变量:本地数据量和上游数据量,进行比较。如果上游数据量> 本地数据量,结果为1。如果上游数据量< =本地数据量,结果为空集。
c、Switch / case
通过字段c的取值来判断,如果字段c的值为1,则进入下一操作步骤:传输数据。
d、传输数据
此处的操作步骤,调用了另一个转换:04_删除本地最近180天数据& 抽取上游最近180天数据到本地库.ktr。
04_删除本地最近180天数据& 抽取上游最近180天数据到本地库
a、本地删除最近180天数据
b、从上游获取最近180天数据

c、写到本地库表中

05_本地表进行全表去重复操作
a、本地库表去重操作b、空操作 (什么也不做)
运行总调度作业a、运行作业



b、作业控制台输出

验证本地库表数据a、执行命令
mysql>   SELECT * FROM local_bigdata.local_table;
+------+------+---------------------+
| id   | name | var_date                  |
+------+------+---------------------+
|     2 | bbb   | 2021-11-17 22:11:34 |
|     3 | ccc   | 2021-11-27 22:11:37  |
|     4 | ddd   | 2021-12-07 22:11:41 |
|     5 | eee   | 2022-05-06 22:11:44  |
+------+------+---------------------+
b、操作截图

结束语
在本篇文章中,介绍的是:依然我工作中遇到的一个实际案例,我们要周期性的从上游数据库中抽取数据到本地库,每次抽取的是最近180天的数据。如果上游最近180的数据量有增加,先把本地表中最近180的数据删除,然后把上游最近180天的数据抽取到本地库表中。最后把本地库表中所有记录,进行去重复操作。

兄弟们,其实想和作是有一段距离的,你想着想着就没有了,可是你做着做着,它就落地了。

啥都别说了,兄弟们后面跟着我干就完了,我们依然掰开揉碎的方式去说。后续的内容更精彩,敬请期待,感谢兄弟们的关注!!!

    推荐阅读