使用ETL-Kettle实现分片查询存储

ETL实现分片查询可以分成以下几个步骤:

1, 获取分片信息 Get Slice Data

2, 循环执行程序 Loop Job

整体结构如下:

1, Get Slice Data

    

 首先我们要确定执行计划的次数,得到一个数组 (设置计划执行次数)

      

语句可以参考

  function get_time_slice_range(start_time   date,
                                end_time     date,
                                interval_min number) return time_range_table
    PIPELINED IS
    rec          time_range_record;
    v_num        number;
    v_start_time date;
    interval_day number;
    v_end_time   date;
  BEGIN
  
    interval_day := interval_min / 24 / 60;
    v_num        := 1;
    v_start_time := start_time;
  
    WHILE v_start_time < end_time LOOP
    
      if (v_start_time + interval_day) <= end_time then
        v_end_time := v_start_time + interval_day;
      else
        v_end_time := end_time;
      end if;
    
      SELECT v_num, v_start_time, v_end_time INTO rec FROM DUAL;
      v_num        := v_num + 1;
      v_start_time := v_start_time + interval_day;
    
      PIPE ROW(rec);
    
    end loop;
    RETURN;
  END get_time_slice_range;

然后将序列选中(选中序列列表),并且修改时间类型的参数的Type(Kettle似乎有Bug,直接使用时间格式有问题,也许是我用的不对=。=)

 

然后复制一下记录,至此第一步完成

 

2, Loop Job

Job需要勾选 Execute every input row

 Loop Job分成两部分,Set Variable和Loop Select,如下:

设置分页变量需要先从结果获取记录,然后再设置变量

 

最后进行循环查询 Loop Select

 

然后插入数据即可 

 

posted on 2023-04-26 17:37  Kyk  阅读(295)  评论(0)    收藏  举报