我正在为Pentaho Kettle进行转型。它选择了几个输入列,并在此基础上在转换过程中添加了两个新列。我无法理解(基于其他插件的代码),我如何添加两个新列,以便1)下游步骤知道这些列,2)我可以将转换后的数据推送到这些列。
提前致谢。
答案 0 :(得分:0)
如果我已正确理解您的问题,我认为您正在尝试使用动态列创建输出文件。所以你可以通过检查"快速转储"来做到这一点。文本文件输出步骤中的选项。这样做时,不要在" Fields"中定义任何列名。标签 检查下面的图片:
希望有所帮助:)
答案 1 :(得分:0)
您可能需要覆盖meta.getStepFields()以将新的ValueMetaInterface对象添加到传入的RowMetaInterface中。这是在运行时添加列的标准方法;但是,行的元数据(即ValueMetaInterface对象的列表)在行与行之间必须相同,否则转换中的下一步将会抱怨。
通常在执行数据驱动的自定义插件时,您需要使用尽可能多的行(使用getRow())以确定传出行格式/元数据的内容,然后您可以构造RowMetaInterface(通常使用meta.getStepFields())将被传递给putRow()调用。如果您打算通过传入字段,请执行以下操作:
RowMetaInterface outputRowMeta = getInputRowMeta()。clone();
如果您要创建新行,请使用以下命令:
RowMetaInterface outputRowMeta = new RowMeta();
无论哪种方式调用meta.getStepFields(outputRowMeta,...),它都应该使用相应的字段填充outputRowMeta,方法是在outputRowMeta中添加/更改/删除ValueMetaInterface对象。
我有一篇博文使用Groovy来添加/替换传入行中的字段:
http://funpdi.blogspot.com/2014/10/flatten-json-to-key-value-pairs-in-pdi.html
不确定这是否与您的用例类似。如果您有更多问题,请随时在## pentaho的IRC上找到我(我的昵称通常是mburgess_pdi)