For循环的逻辑,在不同的编程语言中有着不同的写法。在做数据抽取的过程中,我们有时候也需要用到循环,那么在DMETL中如何实现类似功能呢?

 

本文将介绍DMETL中循环逻辑的实现方法。

 

我们先给出一个现有案例;

案例如下:

t1表约有6亿条数据,需要使用ETL把数据按月抽取到t2表,表结构如下:

createtable t1(ID int primary key,name varchar(10),opt_time(date));

createtable t2(ID int primary key,name varchar(10),opt_time(date));

t1表数据如下:

上海腾科教育达梦数据库培训干货分享在DMETL中如何实现循环逻辑

 

方法步骤

 

1. 创建辅助表TAB_MONTH,用来存放月份区段;

CREATETABLE "SYSDBA".TAB_MONTH

(

"ID" INT primary key,

"MONTH_VALUE1" DATE,

"MONTH_VALUE2" DATE,

 cluster primary key("ID"));

值如下:

 

上海腾科教育达梦数据库培训干货分享在DMETL中如何实现循环逻辑

 

2. ETL数据源中添加表;

                           

上海腾科教育达梦数据库培训干货分享在DMETL中如何实现循环逻辑

 

3. 新建关于t1表的参数化SQL查询,作用是查询t1一个月的数据;

 

上海腾科教育达梦数据库培训干货分享在DMETL中如何实现循环逻辑

 

查询参数,这里给出实际值,可以查看格式是否正确

 

上海腾科教育达梦数据库培训干货分享在DMETL中如何实现循环逻辑

 

 

4.新建4个变量month1和month2,用来向sql查询t1_sql传递月份值;i,j用来控制循环取值;初始值都是null;

 

上海腾科教育达梦数据库培训干货分享在DMETL中如何实现循环逻辑

 

5 . 配置转换流程;

整体转换流程如下:

 

上海腾科教育达梦数据库培训干货分享在DMETL中如何实现循环逻辑

 

需要注意的是配置sql查询数据源组件,查询参数这项的配置方法,这里使用的了表达式,参数值调用了用户工程的变量;

 

上海腾科教育达梦数据库培训干货分享在DMETL中如何实现循环逻辑

 

6. 配置作业循环执行体,取值内层,先取参数值,传递给转换执行,执行完成后拨动游标;

 

上海腾科教育达梦数据库培训干货分享在DMETL中如何实现循环逻辑

 

(1)第一个设置变量的作用是取当前i值对应的月份值;

 

上海腾科教育达梦数据库培训干货分享在DMETL中如何实现循环逻辑

 

 

(2)第二个设置变量的作用相当于拨动游标

 

上海腾科教育达梦数据库培训干货分享在DMETL中如何实现循环逻辑

 

7. 配置作业循环取值;

 

上海腾科教育达梦数据库培训干货分享在DMETL中如何实现循环逻辑

 

设置变量用来设定i和j的起始值

 

上海腾科教育达梦数据库培训干货分享在DMETL中如何实现循环逻辑

 

作业循环取值嵌套的是上面配置的作用内层取值;

 

上海腾科教育达梦数据库培训干货分享在DMETL中如何实现循环逻辑

 

它的循环执行选项配置如下:

 

上海腾科教育达梦数据库培训干货分享在DMETL中如何实现循环逻辑

 

 小结:

1. etl可实现循环逻辑;

2. sql查询参数化,可使用设置变量赋值;

3. 这里可以对opt_time建立索引进行优化;

4. 如果t1,t2表opt_time字段如果是按范围分区表效率会有不小提升;

5. 对于这样的例子,可以实现表的分段抽取、并行装载,效率提升不小;

相关文章: