Java 代码 Image84.png

功能 直接写java代码,并执行java代码。 Image85.png 双击main 生成代码模版。 Image86.png

  • 测试类 用于检查所写是否有代码语法等错误。
  • 可以使用import 导入类
  1. public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
  2. if (first) {
  3. first = false;
  4. /* TODO: Your code here. (Using info fields)
  5. FieldHelper infoField = get(Fields.Info, "info_field_name");
  6. RowSet infoStream = findInfoRowSet("info_stream_tag");
  7. Object[] infoRow = null;
  8. int infoRowCount = 0;
  9. // Read all rows from info step before calling getRow() method, which returns first row from any
  10. // input rowset. As rowMeta for info and input steps varies getRow() can lead to errors.
  11. while((infoRow = getRowFrom(infoStream)) != null){
  12. // do something with info data
  13. infoRowCount++;
  14. }
  15. */
  16. }
  17. //它等待前一步骤提供一行数据,会阻塞,返回一个对象数组表示输入行
  18. Object[] r = getRow();
  19. if (r == null) {
  20. //输入行为null,说明已经没有输入行数据需要处理 任务结束出口
  21. setOutputDone();
  22. return false;
  23. }
  24. // It is always safest to call createOutputRow() to ensure that your output row's Object[] is large
  25. // enough to handle any new fields you are creating in this step.
  26. r = createOutputRow(r, data.outputRowMeta.size());
  27. //写入代码逻辑
  28. /* TODO: Your code here. (See Sample)
  29. // Get the value from an input field 获取输入字段
  30. String foobar = get(Fields.In, "a_fieldname").getString(r);
  31. foobar += "bar";
  32. // Set a value in a new output field 设置输出字段
  33. get(Fields.Out, "output_fieldname").setValue(r, foobar);
  34. */
  35. String firstname = get(Fields.In, "firstname").getString(r);
  36. String lastname = get(Fields.In, "lastname").getString(r);
  37. String name = firstname + lastname;
  38. get(Fields.Out, "newname").setValue(r, name);
  39. // Send the row on to the next step.
  40. putRow(data.outputRowMeta, r);
  41. return true;
  42. }
  43. `

理解:把java组件看着新建的一个类,类名是XXXXX_Processor。 注意:

  1. 1. 若想要使用自己的写代码,可以在最前面使用 package import导入类或者包。需要将自己代码打包成jar包,放入kettle安装目录下lib。然后重启spoon
  2. 2. 获取变量get(Fields.In, "idCard").getString(r);根据变量类型的不同,getString需要变换。

JavaScript代码

功能: 写javascript代码,并运行java代码。 Image112.png

  1. * input fields 双击输入字段可直接将变量名复制在代码区域。
  2. * 点击获取变量,自动把代码区域定义变量名复制到字段输出区域。
  3. * 测试脚本,可以自定义数据,测试代码逻辑,语法等问题。

执行SQL脚本

Image113.png 功能: 在连接的数据库,运行Sql语句。可以允许以以下两种方式来使用: Image114.png

  1. * 在转换的开始阶段,执行一次SQL脚本。因为运行级别比较高。
  2. * 对传入该步骤的每一行数据执行一次SQL脚本。如:删除,更新,新增操作。
  3. * 执行每一行 依赖前面的表输入,将表输入中的每一行解析成SQL脚本进行执行,表输入中有几条数据,解析成几个SQL脚本执行
  4. * 变量替换 替换执行语句中的参数。有2种情况, 通过参数字段替换,使用站位符 xxx = '?',多个时,注意字段顺序;另外是设置变量替换,方式:${xxxx}
  5. * Sql语句可以同时写多条语句, 从上往下执行。执行多条Sql语句时,需设置转换事务,当报错时,不提交事务,保证数据一致性。双击转换空白地方,弹出转换属性,选择杂项,勾选使用唯一连接。整个转换使用唯一链接,某些组件有设置处理多少条提交一次,需该为0,不提交。

Image115.png