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表数据如下:
方法步骤
1. 创建辅助表TAB_MONTH,用来存放月份区段;
CREATETABLE "SYSDBA".TAB_MONTH
(
"ID" INT primary key,
"MONTH_VALUE1" DATE,
"MONTH_VALUE2" DATE,
cluster primary key("ID"));
值如下:
2. ETL数据源中添加表;
3. 新建关于t1表的参数化SQL查询,作用是查询t1一个月的数据;
查询参数,这里给出实际值,可以查看格式是否正确
4.新建4个变量month1和month2,用来向sql查询t1_sql传递月份值;i,j用来控制循环取值;初始值都是null;
5 . 配置转换流程;
整体转换流程如下:
需要注意的是配置sql查询数据源组件,查询参数这项的配置方法,这里使用的了表达式,参数值调用了用户工程的变量;
6. 配置作业循环执行体,取值内层,先取参数值,传递给转换执行,执行完成后拨动游标;
(1)第一个设置变量的作用是取当前i值对应的月份值;
(2)第二个设置变量的作用相当于拨动游标
7. 配置作业循环取值;
设置变量用来设定i和j的起始值
作业循环取值嵌套的是上面配置的作用内层取值;
它的循环执行选项配置如下:
小结:
1. etl可实现循环逻辑;
2. sql查询参数化,可使用设置变量赋值;
3. 这里可以对opt_time建立索引进行优化;
4. 如果t1,t2表opt_time字段如果是按范围分区表效率会有不小提升;
5. 对于这样的例子,可以实现表的分段抽取、并行装载,效率提升不小;
上海腾科教育科技有限公司聚焦ICT人才培养和教育服务、培养数字化时代的新型ICT人才、促进良性的ICT人才生态发展,提供面授教育、在线教育、IT人才培养与就业、高校专业共建与实验室建设、企业人才定制培养,以及教育科技领域内的技术开发、咨询、服务以及解决方案,专注高校ICT课程课件研发、基于华为公有云的云实验实训平台建设,致力于ICT技术在高等院校的引进、开发和推广,是一家全国性的专业ICT行业技术认证服务公司。
腾科教育是华为授权的培训合作伙伴,专业提供华为ICT技术架构认证、平台与服务认证、行业服务认证等华为职业认证服务,连续多年荣获华为年度最佳合作伙伴贡献奖、华为优秀战略合作伙伴、上海HCIE精英俱乐部伙伴,连续多年举办腾科技术嘉年华华为专场,并协办华为ICT大赛、华为生态伙伴精英赛伙伴赛分赛场、华为人才双选会上海场等活动和赛事,提供面向华为生态合作伙伴和ICT学员的人才供需双选平台及ICT学员就业通道,培养ICT行业所需创新型、融合型人才。