0

我正在为 Pentaho Kettle 进行改造步骤。它选择几个输入列,并在此基础上在转换期间添加两个新列。我无法理解(基于其他插件的代码),如何添加两个新列,以便 1)下游步骤知道这些列,以及 2)我可以将转换后的数据推送到这些列中。

转型

提前致谢。

4

2 回答 2

0

如果我正确理解了您的问题,我认为您正在尝试使用动态列创建输出文件。因此,您可以通过检查文本文件输出步骤中的“快速转储”选项来做到这一点。这样做时,不要在“字段”选项卡中定义任何列名检查下面的图片:

在此处输入图像描述

希望能帮助到你 :)

于 2014-10-31T11:19:25.213 回答
0

您可能需要覆盖 meta.getStepFields() 以向传入的 RowMetaInterface 添加新的 ValueMetaInterface 对象。这是在运行时添加列的标准方法;但是,行的元数据(即 ValueMetaInterface 对象列表)必须在行与行之间相同,否则转换中的下一步将报错。

通常在执行数据驱动的自定义插件时,您可以根据需要使用尽可能多的行(使用 getRow())以确定传出的行格式/元数据是什么,然后您可以构造一个 RowMetaInterface(通常使用 meta.getStepFields ()) 将传递给 putRow() 调用。如果您打算通过传入字段,请执行以下操作:

RowMetaInterface outputRowMeta = getInputRowMeta().clone();

如果您正在创建新行,请使用:

RowMetaInterface outputRowMeta = new RowMeta();

无论哪种方式,当您调用 meta.getStepFields(outputRowMeta, ...) 时,它都应该通过从 outputRowMeta 添加/更改/删除 ValueMetaInterface 对象来使用适当的字段填充 outputRowMeta。

我有一篇博客文章使用 Groovy 在此处的传入行中添加/替换字段:

http://funpdi.blogspot.com/2014/10/flatten-json-to-key-value-pairs-in-pdi.html

不确定这是否与您的用例相似。如果您有更多问题,请随时在 ##pentaho 的 IRC 上找到我(我的昵称通常是 mburgess_pdi)

于 2014-10-31T13:01:21.527 回答