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

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

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、操作截图

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

本地库操作(127.0.0.1)

a、登录mysql

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

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、操作截图

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

DB连接

a、远端DB连接

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

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

b、本地DB连接

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

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

实战演示

转换和作业的简介

此次操作有1个作业和4个转换,说明如下:

(1)、01_总调度作业:整个ETL操作的总开关,调度此作业即可完成整个ETL数据抽取所有操作内容。

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

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

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

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

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

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

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

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

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

01_总调度作业

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

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

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

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

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

a、获取本地数据量

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

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

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

b、设置变量 local

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

c、获取上游数据量

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

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

d、设置变量 rem

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

03_判断上游最近180的数据有增加&本地进行数据抽取

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

a、获取变量

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

b、判断数据量

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

把前面设置的2个变量:本地数据量和上游数据量,进行比较。如果上游数据量>本地数据量,结果为1。如果上游数据量<=本地数据量,结果为空集。

c、Switch / case

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

通过字段c的取值来判断,如果字段c的值为1,则进入下一操作步骤:传输数据。

d、传输数据

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

此处的操作步骤,调用了另一个转换:04_删除本地最近180天数据&抽取上游最近180天数据到本地库.ktr。

04_删除本地最近180天数据&抽取上游最近180天数据到本地库

a、本地删除最近180天数据

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

b、从上游获取最近180天数据

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

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

c、写到本地库表中

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

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

05_本地表进行全表去重复操作

a、本地库表去重操作

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

b、空操作 (什么也不做)

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

运行总调度作业

a、运行作业

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

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

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

b、作业控制台输出

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

验证本地库表数据

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、操作截图

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

结束语

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

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

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

以上是关于kettle庖丁解牛第32篇之本地和上游数据量比较后再抽取的主要内容,如果未能解决你的问题,请参考以下文章

kettle庖丁解牛第34篇之常用转换组件之Add XML

kettle庖丁解牛第2篇之初识kettle

kettle庖丁解牛第9篇之DB连接终篇

kettle庖丁解牛第27篇之多种数据源统一输出

kettle庖丁解牛第26篇之删除

kettle庖丁解牛第25篇之插入更新