当前位置 博文首页 > 杨杨杨~~的博客:ETL-kettle-一次性大数据量插入

    杨杨杨~~的博客:ETL-kettle-一次性大数据量插入

    作者:[db:作者] 时间:2021-09-12 12:02

    目录

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

    ??一、build_query_page_index转换:

    ? 二、build_query_page转换:

    ??三、loop_execute作业:

    ??(1)se_values转换的用处:

    ? (2)?excute_by_page转换的作用:


    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的经典三层嵌套分页算法。

    cs