kettle实现大批量数据动态分页抽取--从数据库里取数

博客介绍从数据库取数的方法,包括设置每次抽取条数,先查出源数据表数据量,再将条数转换成页数;还介绍动态抽取,先获取页数变量,再通过页数在数据源中抽数,最后将数据保存到另一个数据库,使用的是mysql数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从数据库里取数

image.png

一、设置每次抽取条数

image.png
image.png

  1. 添加表输入步骤,通过count函数查出源数据表的数据量
    image.png
  2. 添加java代码步骤,将条数转换成页数
    image.png
    代码如下:
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
  if (first) {
    first = false;

    /* TODO: Your code here. (Using info fields)

    FieldHelper infoField = get(Fields.Info, "info_field_name");

    RowSet infoStream = findInfoRowSet("info_stream_tag");

    Object[] infoRow = null;

    int infoRowCount = 0;

    // Read all rows from info step before calling getRow() method, which returns first row from any
    // input rowset. As rowMeta for info and input steps varies getRow() can lead to errors.
    while((infoRow = getRowFrom(infoStream)) != null){

      // do something with info data
      infoRowCount++;
    }
    */
  }

  Object[] r = getRow();

  if (r == null) {
    setOutputDone();
    return false;
  }

  // It is always safest to call createOutputRow() to ensure that your output row's Object[] is large
  // enough to handle any new fields you are creating in this step.
  r = createOutputRow(r, data.outputRowMeta.size());

  double num = get(Fields.In, "totalCount").getNumber(r);
int pageSize = 100;
int pages = (int)num/pageSize +1;    //计算总页数
//生成页码,并输出
for(int i=0;i<pages;i++){
    //个人觉得r类似于输出器,如果想将每个页码都输出去,则必须独立进行声明,此步骤为本人测试所得
    r = createOutputRow(r, data.outputRowMeta.size());
    get(Fields.Out, "PAGE").setValue(r, i*pageSize);     //将页码赋值给PAGE
  putRow(data.outputRowMeta, r);
} 
  return true;
}
  1. 添加复制记录到结果步骤

二、动态抽取

image.png

1、获取页数变量

image.png
image.png
image.png
image.png

2、抽取数据

image.png
①. 通过页数在数据源中抽数(我使用的是mysql数据库,不同数据库的分页方式不同)
image.png
②. 将从数据源取出的数据保存下来(可以入库、输出文本、输出表格等,这里是保存到另一个数据库)
image.png完整的文件在这,提取码:7f4k
参考文章
https://zhuanlan.zhihu.com/p/141173089

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值