kettle如何通过java去控制变量


前言

开发过程中遇到了个情况,从数据库中取出的每一条数据,都需要加上时间戳生成签名,然后去作为请求头请求数据。然而当数据量过大时,由于每条数据都要花费几十毫秒到几十秒不定的时间。所以就会导致到后面的数据发请求时,签名已经过期了。

解决思路

kettle中的变量是一个超出数据流之外的存在。想到能否通过操作变量,来为每一条数据设置一个预设的时间戳,让时间戳形成步长3000的序列。
可以通过kettle中的java脚本,调用getVariable函数获取到变量,再通过setVariable将更改后的变量设置回去。

示例

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
  Object[] r = getRow();
  if (r == null) {
    setOutputDone();
    return false;
  }
  r = createOutputRow(r, data.outputRowMeta.size());
  // 获取变量
  String getVariable = getVariable("data", "");
  // 处理变量
  int test = Integer.parseInt(getVariable);
  test++;
  // 将变量设置回去
  setVariable("data",""+test);
  get(Fields.Out, "filename").setValue(r, ""+test);
  // 将数据返回给下一个节点
  putRow(data.outputRowMeta, r);

  return true;
}

声明:一代明君的小屋|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - kettle如何通过java去控制变量


欢迎来到我的小屋