我有一个Pentaho Kettle作业,可以从x个表中加载数据,并将其放入具有不同模式的目标表中。
假设我有表1,如下:
已重命名列,订单已更改,数据已转换。通过使用“选择值”步骤可以轻松管理重命名和顺序,该步骤可以在ETL元数据注入步骤中使用,使其依赖于在运行时加载的某些配置值。
但是如果我需要在某些列上执行一些转换逻辑,基于它们在目标表中的位置,这似乎不那么简单。
在我的示例中,我希望列“ CountryName ”大写,并且“评级”列将被覆盖(如将实数更改为前一个整数值)。
虽然我可以通过手动添加转换来完成每个操作,但我希望我的解决方案是动态的,因此它可以通过校验和组件轻松运行“ CountryName ”列,或者在“评级”上执行上限。
我可以轻松地将这些转换包装在另一个转换中,以便在需要时对它们进行参数化和执行:
但是,我遇到麻烦的是,当我处理一行数据时,我需要一种方法来说:
有没有办法动态拆分行中的列,并根据可以提供的一些配置元数据对每个列执行不同的转换?
逻辑上,它会是这样的,虽然我怀疑可能有办法将它作为循环或某种形式的动态转换处理,而不是映射每列的路径:
Kettle非常灵活,似乎必须有办法做到这一点,我只是在努力知道使用哪些组件以及如何操作。那里的任何专家都有一些建议吗?
我正在处理一些较大的数据集(数亿行),因此不愿意使用Row Normaliser / Denormaliser或尽可能写入文件/数据库。
答案 0 :(得分:0)
您是否考虑过修改过的Java脚本值步骤?从“数据网格”步骤,“选择值”步骤开始,然后是“修改的Java脚本值”步骤。在该步骤中,您将按照所需的格式转换每列的值,并将其输出到文件中。
当然这需要一些Java脚本知识,但鉴于您的示例,所需的知识似乎非常基本。