关于使用ETL工具Kettle的简单介绍(二)

时间:2022-12-29 10:52:43

该篇主要描述已实现的一种ETL过程:

环境描述

由于源端的表结构和正式库的表结构大部分是一一对应的,所以对于这大部分表进行设计了一套通用的过程进行转换。现在先来描述该套设计,对于一对多和多对一的过程下章进行描述。

设计概述:

主要需要设计几个所需的表,TB_MAPPING  TB_TRANSCONF TB_ETL_ERROR_LOG

n 第一个表:该表是用来配置源端表结构与目的端表结构中字段的对应关系,该表中主要记录以下字段:源端库名、源端表名、源表该表的字段名或表达式、目的端库名、目的端表名、目的端该表的字段名、是否为主键。根据这些信息可以动态拼接出以下语句:

INSERT INTO TARGETDB.TARGETTB(CL1,CL2…CLN) SELECT CL1,CL2…CLN FROM SOURCEDB.SOURCETB;

该条语句则可以直接将源端的数据进行转换。

而是否为主键字段,这里主要是用于对数据进行装载时。这里在装载时是用先DELETEINSERT的方式进行装载的;

n  第二个表:该表是用来配置整个ETL流程的表。其中主要记录有以下信息:源端库名和表名、目的端库名和表名、Job组号、源端增量上次时间戳点、源端当前最大时间戳、转换临时库上次装载时间戳点、转换临时库当前最大时间戳点、每次运行数据量、每次循环次数、转换发生时间、装载发生时间;

n  第三个表:该表是用来记录每个环节的错误日志信息:其中主要记录以下信息:源端表名、目的端表名、起止时间、job组号、错误类型、处理状态和错误详细日志。

设计详细描述:

通过以上三个表大致可以将一对一的ETL整个过程实现,并且可以做到监控等。

一、获取增量,并且进行不同表的不同业务逻辑的转换,将转换后的记录存到一个临时库中。

1.1主程序(详情请见其中的注释)

关于使用ETL工具Kettle的简单介绍(二)

1.2每个表的详细流程图

 关于使用ETL工具Kettle的简单介绍(二)

该图是通过分页的方式对找到的增量进行分页处理,每次处理配置表中定义的数量,循环次数也在配置表中进行了定义。每个步骤发生了错误都将会进行记录到错误日志表中。执行完该步骤后,就已将增量数据转换到临时库中。下一步就是将该部分数据装载到正式环境中。

二、装载临时库中的数据到正式环境中

2.1 主程序 跟上面的主程序一样

2.2 每个表的流程图

关于使用ETL工具Kettle的简单介绍(二)

该图中表述了两步,第一步是装载到LoadData库中,第二步是装载到产品库中。有人会问为什么不直接装载到产品库中呢?因为发生业务逻辑转换的库跟正式环境产品库是物理隔离的,即在两台不同的服务器上。而为了使先DELETE后INSERT这两个操作放在一个事务中,我们将装载过程用存储过程来完成。有人又要问了,数据库中DBLink不是也可以吗?经过测试,如果使用DBLink的话,则会发生一个错误:当由于网络等原因导致Session中断,而没有装载成功时,这时DBLink并不会返回错误值,而是一直卡在进程中。而当遇到表中有附件的情况时,这种情况发生的频率会更高。所以现在在产品库端也使用了临时库来完成该操作。

2.3 2.2步骤中的“装载到LoadData”步骤图

关于使用ETL工具Kettle的简单介绍(二)

2.4  2.2步骤中的“装载到产品库”步骤图

关于使用ETL工具Kettle的简单介绍(二)

以上就是一一转换的整个过程,如有疑问欢迎留言。如有错误,欢迎批评指正。