当前位置 博文首页 > 杨杨杨~~的博客:ETL-kettle-一次性大数据量插入
目录
ETL-kettle-一次性大数据量插入
??一、build_query_page_index转换:
? 二、build_query_page转换:
??三、loop_execute作业:
??(1)se_values转换的用处:
? (2)?excute_by_page转换的作用:
思路:
??计算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)
??最后的实现的图
各个控件大概的含义是:
??用来放入分页用的相关变量,Pages页数和tableName表名,将他们作为局部变量供build_query_page转换使用,
如图:
selectPage控件如图:
set Variables控件如图:
Valid in the root job含义:变量仅仅在根任务中合法。
??根据build_query_page_index转换存储的局部变量生成的结果集,build_query_page转换在整个作业里的作用:相当于一个类似for循环中 int 的变量,转换如图:
selectCount控件,用来生成结果集使用,如图:
注意:打勾[替换SQL语句里的变量]
Select values控件,用来控制流量中的字段,如图:
Copy rows to result控件,用来生成结果集,如图:
??根据build_query_page转换中数据集里的数据依次执行分页数据的转换(A表存入B表)。
??注意:
??loop_execute作业要在高级部分的[对每个输入行执行一次]打上勾,如图:
?loop_execute作业内容如图:
??存取上游的数据并放在局部变量中,供excute_by_page转换使用,转换如图:
Get rows from result控件的作用,获取上游结果集传入的数据,如图:
Set Variables控件,根据Get rows from result控件传来的数据生成局部变量如图:
Valid in the root job含义:变量仅仅在根任务中合法。
??真正进行数据转换的地方,如图:
?在这个转换里最主要的控件就是Table input,表输入控件,大体的内容如图:
抓取数据的方式主要采用的是oracle的经典三层嵌套分页算法。
cs