Sql 使用ETL工具按列值将数据拆分为不确定数量的表

Sql 使用ETL工具按列值将数据拆分为不确定数量的表,sql,etl,pentaho,talend,Sql,Etl,Pentaho,Talend,我正在尝试使用Talend Open Studio根据给定列的值将一个表拆分为多个表。假设此列可以包含1、2、3等任意整数值。然后根据此值,这些行应转到表1、表2、表3等 如果我能在该列中不同值的数量事先未知的情况下解决这个问题,那将是最好的,但现在我们可以假设所有这些输出表都已经存在。底线是不同值的数量,因此不同表的数量足够高,无法手动设置各个过滤器。 使用Talend Open Studio或类似的开源ETL工具(如Pentaho Keetle)可以解决这个问题吗 当然,我可以自己写一个简单

我正在尝试使用Talend Open Studio根据给定列的值将一个表拆分为多个表。假设此列可以包含1、2、3等任意整数值。然后根据此值,这些行应转到表1、表2、表3等

如果我能在该列中不同值的数量事先未知的情况下解决这个问题,那将是最好的,但现在我们可以假设所有这些输出表都已经存在。底线是不同值的数量,因此不同表的数量足够高,无法手动设置各个过滤器。

使用Talend Open Studio或类似的开源ETL工具(如Pentaho Keetle)可以解决这个问题吗


当然,我可以自己写一个简单的脚本,但我更愿意使用合适的ETL工具,因为完整的ETL过程相当复杂。

我想到的第一个解决方案是使用复制器将当前行传输到三个过滤器,这些过滤器充当保护,只允许行通过给定列中的1、2或3。图片:


但是您也可以动态地构建表名,如果这是您想要的,pic:

在PDI或Pentaho Kettle中,您可以通过分区来实现这一点。(步骤IIRC上的右键单击选项)PDI中的分区正是针对这类问题而设计的。

是的,可以根据单个列将数据拆分到不同的表中,但为此,您需要动态创建表:-

tFileInputDelimited->TFlowtointerate->tFixedFlowInput->并且可以使用 globalMap()获取列值,并使用相同的值分隔列 将数据传输到不同的表。->并且可以使用globalMap(用于 在表名中分隔数据)


谢谢,这也是我最初的想法。但问题是,这只适用于少量的值/表,在我的例子中,可能有数千个表,因此单独设置所有这些过滤器是不可行的。谢谢,这已经解决了。对于“表输出”,有一个名为“是否在字段中定义了表的名称?”的选项。