kettle如何通过java去控制变量 最后更新时间:2024年03月08日 ### 前言 开发过程中遇到了个情况,从数据库中取出的每一条数据,都需要加上时间戳生成签名,然后去作为请求头请求数据。然而当数据量过大时,由于每条数据都要花费几十毫秒到几十秒不定的时间。所以就会导致到后面的数据发请求时,签名已经过期了。 ### 解决思路 kettle中的变量是一个超出数据流之外的存在。想到能否通过操作变量,来为每一条数据设置一个预设的时间戳,让时间戳形成步长3000的序列。 可以通过kettle中的java脚本,调用`getVariable`函数获取到变量,再通过`setVariable`将更改后的变量设置回去。 ### 示例 ```java 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; } ```
Comments | NOTHING