1. 概述编辑
1.1 应用场景
用户想抽取 2010 年的订单数据到目标表中,由于数据量过大,如果一次性抽取,消耗时间长,消耗资源高。因此用户希望将一年的数据,按照 10 天一个单位,进行分段抽取。
1.2 实现思路
使用「参数赋值」节点定义参数组合,每组参数一个开始时间,一个结束时间,并且固定间隔是 10 天。
通过「循环容器」节点,一一将参数组合值赋给来源表,将数据分段写入目标表中。
1.3 任务展示
FineDataLink 中的数据处理过程,详情参见:https://demo.finedatalink.com/ 「场景案例>数据仓库场景>循环分段抽取数据」。

2. 示例编辑
本文示例:将 2010 年的订单数据,以 10 天为一个单位,分段循环抽取到到目标表中。
示例数据:dingdanxinxi.xls
2.1 设置参数
1)新建一个 ETL 任务后,增加「参数赋值」节点。配置如下图所示:

SQL 语句为:
WITH temp as (select rownum rn from dual connect by rownum <=40)
select
case when to_date('2010-01-01','yyyy-mm-dd')+(rn-1)*10<=date'2011-01-01' then to_date('2010-01-01','yyyy-mm-dd')+(rn-1)*10 else date'2011-01-01' end stime,
case when to_date('2010-01-01','yyyy-mm-dd')+rn*10<=date'2011-01-01' then to_date('2010-01-01','yyyy-mm-dd')+rn*10 else date'2011-01-01' end etime
from temp t1
点击「数据预览」,SQL 语句效果如下图所示:

2)点击「输出参数」Tab,设置参数 begin_time、end_time。
参数 begin_time 对应 stime 列的值,由于 stime 位于取出数据的第一列,因此选择指定列并将其设置为 1,并且由于取出的 stime 有多个数据,由于数据是数值所以用数值型分隔符。
参数 end_time 对应 etime 列的值,设置原理与参数 begin_time 相同。
如果想要在任务未运行时也就是任务开发阶段,下游节点用到参数的地方可以提前查看效果,可以给参数赋值节点设置默认值。

2.2 增加循环容器节点
因为取出的参数为多个,需要根据 begin_time、end_time 参数从来源表中取出数据,所以此处需要使用到 循环容器 ,一次次循环来遍历赋值节点的输出结果。
添加「循环容器」节点,与「参数赋值」节点相连。「循环容器」节点设置如下图所示:

2.3 设置条件分支节点
由于 2.1 节取出的参数中,包含 2011-01-01,所以本节设置:
begin_time 等于 2011-01-01 时,不进行数据同步。
begin_time 小于 2011-01-01 时,将取到的数据同步到目标表中。
1)在循环容器内添加「条件分支」、「数据同步」、「虚拟节点」。将「条件分支」节点与另外两个节点相连。如下图所示:

2)「条件分支」节点设置如下图所示:

2.4 设置数据同步节点
1)点击「数据同步」节点,设置输入源。如下图所示:
SELECT * FROM dingdanxinxi
WHERE 订购日期>='${begin_time}' and 订购日期<'${end_time}'

2)设置数据输出。如下图所示:

2.5 运行任务
保存并运行任务即可。

