【Kettle】—— Kettle增量同步变动数据

更新历史

  • 2020-04-01
    • 去掉 4)中"执行每一行"的描述

需求

最近在用kettle同步数据的时候,有增量同步的需求。

之前也遇到过这个需求,查阅了很多文章,也试了很多方法,都没有实现我所需的简洁的方式。

这回在我一次次尝试无果的情况下,突然间的灵光一闪,让我豁然开朗,原来你就在我眼前。

写下这篇文章,让更多的人的时间得到节省。

时间是最稀缺的资源,更多的时间应该花在更有意义的事情上。

 

软件相关

使用软件kettle
软件版本7.1
实现功能使用kettle增量同步数据
修改日期2018年11月6日

 

 

具体过程:

TEST_A (左图)TEST_B(右图)两张数据表,两张表结构相同(抱歉,图没截取规整,但不影响内容表达)。

   

ID字段均为唯一主键,TEST_A自增NUMBER类型,LASTUPDATEON字段表示该行数据最近插入或者修改的时间,DATE类型非空。

假设TEST_A为源数据表,TEST_B为目标表。

TEST_A中的历史数据变更时相应行的LASTUPDATEON字段值会变为数据更新时的时间。

 

根据以上信息,总结出如下增量更新步骤

1)取TEST_BLASTUPDATEON字段的最大值,这里为了方便起见,假设这个最大值为max_date_a

2)取TEST_ALASTUPDATEON字段大于max_date_a的所有数据行 rows

3)以rows 数据的ID做对比同步到TEST_B表,如果ID值在TEST_B中存在,则更新除ID字段外的所有字段;

     如果ID值在TEST_B中不存在,则插入整行数据(类似 Oracle中的 MERGE INTO)。

 

kettle操作(这里假设读者已经会基本的kettle操作)

最终效果图

 

1)如上图所示,需要两个表输入和一个插入/更新,并将三个步骤间的线连接好。

2)MAX_DATE步骤中,配置好数据库连接,连接到TEST_B,SQL如下(注意结尾没有分号 ';'

SELECT MAX(LASTUPDATEDON) FROM TEST_B

其他配置默认,点击预览,看到类似下图数据表示这一步成功。然后点 “确定”。

 

3)在select_a步骤中,同样配置好数据库连接,连接到TEST_A表,SQL如下(同样结尾没有分号 ';',大于号后边写问号'?'替换上一步的值

SELECT * FROM TEST_A WHERE LASTUPDATEDON > ?

然后在“从步骤输入数据”中选择上一个步骤的名称,如此可将上一个步骤获取的最大时间作为问号位置的值,数据类型仍然为时间类型

4)然后勾选“执行每一行”,这是为了select_a步骤在MAX_DATE执行完后才执行,从而获取时间大值(2020年4月1日改,这里不选“执行每一行也可以,Kettle长期使用的经验)。点击“确定”,此时前两 个步骤间的连线上会多出一个感叹号图案,正常。

 

5)在insert_b中,首先配置好“数据库连接”,连接到“目标表test_b

6)在下图中的区域,点击“获取更新字段”,然后在出现的很多行字段中,只留下ID字段行,删除其余字段行(因为根据文章描述该步骤应该比较ID字段来进行同步数据)。区域作用是配置比较的字段

7)在区域点击“获取和更新字段”,然后找到在区域中被比较的字段,将其“更新”下的值改为“N”,表示更新时不更新该字段,但会在满足插入条件(前文“增量更新步骤”中已描述清楚本文的插入条件)时插入该字段,其他字段也会被插入。点击“确定”。

 

8)一切设置好之后,点击的运行三角形,然后点击的“启动”,执行增量同步。

 

9)执行结果,如图三个步骤都有绿色对号,并且“步骤度量”表格中有相应的数值表示数据变动则说明增量更新成功。

 

增量同步结果验证

以下三张表分别为 同步前TEST_A同步前TEST_B同步后TEST_B ,分别对应于图test_atest_btest_b_res

同步前TEST_A同步前TEST_B数据作比较,

1)ID12的数据是完全相同的;

2)ID3的数据的LASTUPDATEDON字段,在test_a中秒数为16,在test_b中秒数为06,两者不同;

3)test_atest_b多出一行ID4的数据。

 

同步前TEST_A同步后TEST_B比较,

1)ID12的数据是完全相同的;

2)ID3的数据的LASTUPDATEDON字段,在test_a中秒数为16,在test_b_res中秒数为16,两者相同;

3)test_atest_b_res都有ID4的数据完全相同的数据行。

 

结论

增量同步后,TEST_A的数据与TEST_B的数据完全相同,增量同步成功

test_a
test_a​​​​

 

test​​​_b

 

test_b_res

 

 

The end.

 

 

  • 30
    点赞
  • 156
    收藏
    觉得还不错? 一键收藏
  • 73
    评论
1、ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换,迁移,所以掌握一个ETL工具的使用,必不可少。Kettle作为ETL工具是非常强大和方便的。Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。Kettle中文名称叫水壶,该项目的主程序员MATT希望把各种数据放到一个壶里,然后以一种指定的格流出。Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。2、Clickhouse 是俄罗斯的“百度”Yandex公司在2016年开源的,一款针对大数据实时分析的高性能分布数据库,与之对应的有hadoop生态hive,Vertica和百度出品的palo。这是战斗民族继nginx后,又开源的一款“核武器”。Hadoop 生态体系解决了大数据界的大部分问题,当然其也存在缺点。Hadoop 体系的最大短板在于数据处理时效性。基于 Hadoop 生态的数据处理场景大部分对时效要求不高,按照传统的做法一般是 T + 1 的数据时效。即 Trade + 1,数据产出在交易日 + 1 天。ClickHouse 的产生就是为了解决大数据量处理的时效性。独立于Hadoop生态圈。3、Superset 是一款由 Airbnb 开源的“现代化的企业级 BI(商业智能) Web 应用程序”,其通过创建和分享 dashboard,为数据分析提供了轻量级的数据查询和可视化方案。 Superset 的前端主要用到了 React 和 NVD3/D3,而后端则基于 Python 的 Flask 框架和 Pandas、SQLAlchemy 等依赖库,主要提供了这几方面的功能:01、集成数据查询功能,支持多种数据库,包括 MySQL、PostgresSQL、Oracle、SQL Server、SQLite、SparkSQL 等,并深度支持 Druid。02、通过 NVD3/D3 预定义了多种可视化图表,满足大部分的数据展示功能。如果还有其他需求,也可以自开发更多的图表类型,或者嵌入其他的 JavaScript 图表库(如 HighCharts、ECharts)。03、提供细粒度安全模型,可以在功能层面和数据层面进行访问控制。支持多种鉴权方(如数据库、OpenID、LDAP、OAuth、REMOTE_USER 等)。 基于Kettle+Clickhouse+Superset构建亿级大数据实时分析平台课程将联合这三大开源工具,实现一个强大的实时分析平台。该系统以热门的互联网电商实际业务应用场景为案例讲解,对电商数据的常见实战指标处理使用kettle等工具进行了详尽讲解,具体指标包括:流量分析、新增用户分析、活跃用户分析订单分析、团购分析。能承载海量数据的实时分析,数据分析涵盖全端(PC、移动、小程序)应用。项目代码也是具有很高的商业价值的,大家可以根据自己的业务进行修改,便可以使用。本课程包含的技术:开发工具为:IDEAKettleClickhouseSupersetBinlogCanalKafkaHbaseHadoopZookeeperFlinkSpringBootSpringCouldPythonAnconaMySQL等 课程亮点:1.与企业对接、真实工业界产品2.强大的ETL工具Kettle全流程讲解实现3.ClickHouse高性能列存储数据库4.Superset现代化的企业级BI可视化5.数据库实时同步解决方案6.集成Flink实时数据转换解决方案7.主流微服务SpringBoot后端系统8.互联网大数据企业热门技术栈9.支持海量数据的实时分析10.支持全端实时数据分析11.全程代码实操,提供全部代码和资料12.提供答疑和提供企业技术方案咨询 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 73
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值