在Kettle / PDI转换中,我需要在一个表上编写来自另一个表以及其他静态字符串的值。
1表输入:读取记录;
2添加常量:添加“ status” =“ A”; (和其他静态字符串)
3表输出:写入旧值+状态和其他常量
是在表输入“ select”中添加文字(从...中选择id,field1,'A'作为状态,还是从...中选择状态)更好还是使用“添加常量”步骤更好?
我认为最好减少步数,因为使用“添加常量” 您需要实例化新步骤。
编辑:“更好”的意思是更快,更少的内存消耗
答案 0 :(得分:1)
我的观点是在Input Table
步骤中进行最少的转换,因为PDI的理念是使所有转换可见。
现在,如果您是SQL方面的专家,或者可以选择200条行进行复杂的计算,那么我的答案将有所不同。
答案 1 :(得分:0)
在转换中再创建一个步骤将导致单独的线程分配,因为每个步骤都是至少分配一个BlockingQueue的单独线程,因为步骤之间的行通过这些结构分布在内存中。
使用一个步骤,即使添加常数这样简单,也会导致额外的资源分配。
PDI仍然很乐意成为开源。
如果您想知道如何完成此操作,这是基本转换步骤的实现(已经很长时间了)-> https://github.com/pentaho/pentaho-kettle/blob/master/engine/src/main/java/org/pentaho/di/trans/step/BaseStep.java
这是用于在步骤之间分配行的代码示例-> https://github.com/pentaho/pentaho-kettle/blob/master/core/src/main/java/org/pentaho/di/core/BlockingRowSet.java#L54
确保在SQL查询中简单添加常量PDI会产生开销。在很多情况下,如何使某些操作更快或更不消耗内存,但是关于GUI或其他任何功能,PDI实际上是著名的?