kettle庖丁解牛第32篇之本地和上游数据量比较后再抽取
Posted 飞哥大数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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连接
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天的数据抽取到本地库表中。最后把本地库表中所有记录,进行去重复操作。
兄弟们,其实想和作是有一段距离的,你想着想着就没有了,可是你做着做着,它就落地了。
啥都别说了,兄弟们后面跟着我干就完了,我们依然掰开揉碎的方式去说。后续的内容更精彩,敬请期待,感谢兄弟们的关注!!!
以上是关于kettle庖丁解牛第32篇之本地和上游数据量比较后再抽取的主要内容,如果未能解决你的问题,请参考以下文章