kettle庖丁解牛第32篇之本地和上游数据量比较后再抽取
  Lb78AVwchy8f 2023年11月02日 130 0

引言

在上一篇文章中,我们主要讲解的是:我工作中遇到的一个实际案例,数据源是一份csv文件,在使用kettle抽取csv到sql server数据库后,发现原始的数据的长度和目标表定义的列长度有问题、还伴随导入了大量的NULL记录行。

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

数据库表准备

此处演示需要2台mysql数据库,所以演示起来会显得乱一些,为了大家看着清楚,我在命名的时候进行明确的标识。

远端库操作(192.168.8.8)

a、登录mysql

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

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篇之本地和上游数据量比较后再抽取_sql_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篇之本地和上游数据量比较后再抽取_变量_06

b、本地DB连接

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

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

实战演示

转换和作业的简介

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

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

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

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

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

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

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

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

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

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

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

01_总调度作业

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

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

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

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

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

a、获取本地数据量

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

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

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

b、设置变量 local

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

c、获取上游数据量

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

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

d、设置变量 rem

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

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

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

a、获取变量

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

b、判断数据量

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

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

c、Switch / case

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

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

d、传输数据

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

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

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

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

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

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

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

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

c、写到本地库表中

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

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

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

a、本地库表去重操作

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

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

运行总调度作业

a、运行作业

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

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

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

b、作业控制台输出

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

验证本地库表数据

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篇之本地和上游数据量比较后再抽取_变量_40

结束语

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

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

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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  DF5J4hb0hcmT   2023年12月11日   36   0   0 mysql
  X5zJxoD00Cah   2023年11月24日   37   0   0 SQL运算符
  X5zJxoD00Cah   2023年12月11日   30   0   0 表名SQL
  DF5J4hb0hcmT   2023年12月08日   27   0   0 慢查询druidSQL
Lb78AVwchy8f