ETL-kettle-一次性大数据量插入

ETL-kettle-一次性大数据量插入

思路:

  计算sql要分页的数量,把所有的页数放在数据结果集中,抓取结果集里的数据,根据每一行的数据走一次转换job(oracle 经典三层嵌套分页算法),直到所有结果里的数据走完。

  oracle 经典三层嵌套分页算法(默认5000一分页):

  SELECT b.rn,b.* from (

  SELECT ROWNUM rn ,t.* FROM (SELECT * from  表名) t

  WHERE ROWNUM <= (页数*5000)

  ) b

  WHERE rn >= ((页数-1)* 5000 +1)



  最后的实现的图

各个控件大概的含义是:

  一、build_query_page_index转换:

  用来放入分页用的相关变量,Pages页数和tableName表名,将他们作为局部变量供build_query_page转换使用,

如图:

selectPage控件如图:

set Variables控件如图:

Valid in the root job含义:变量仅仅在根任务中合法。

  二、build_query_page转换:

  根据build_query_page_index转换存储的局部变量生成的结果集,build_query_page转换在整个作业里的作用:相当于一个类似for循环中 int 的变量,转换如图:

selectCount控件,用来生成结果集使用,如图:

注意:打勾[替换SQL语句里的变量]

Select values控件,用来控制流量中的字段,如图:

Copy rows to result控件,用来生成结果集,如图:

  三、loop_execute作业:

  根据build_query_page转换中数据集里的数据依次执行分页数据的转换(A表存入B表)。

  注意:

  loop_execute作业要在高级部分的[对每个输入行执行一次]打上勾,如图:

 loop_execute作业内容如图:

  (1)se_values转换的用处:

  存取上游的数据并放在局部变量中,供excute_by_page转换使用,转换如图:

Get rows from result控件的作用,获取上游结果集传入的数据,如图:

Set Variables控件,根据Get rows from result控件传来的数据生成局部变量如图:

Valid in the root job含义:变量仅仅在根任务中合法。

(2) excute_by_page转换的作用:

  真正进行数据转换的地方,如图:

 在这个转换里最主要的控件就是Table input,表输入控件,大体的内容如图:

抓取数据的方式主要采用的是oracle的经典三层嵌套分页算法。

发布了95 篇原创文章 · 获赞 180 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_38316697/article/details/89029943