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

Posted

技术标签:

【中文标题】使用 ETL 工具按列值将数据拆分为不定数量的表【英文标题】:Splitting data by column value into an indefinite number of tables using an ETL tool 【发布时间】:2012-10-22 15:50:31 【问题描述】:

我正在尝试使用 Talend Open Studio 根据给定列的值将一个表拆分为多个表。假设这一列可以包含1、2、3等任何整数值,那么根据这个值,这些行应该去table_1、table_2、table_3等。

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

是否可以使用 Talend Open Studio 或任何类似的开源 ETL 工具(如 Pentaho Keetle)来解决此问题?

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢,这成功了。有一个选项叫做“表的名称是否在字段中定义?”用于“表格输出”。【参考方案2】:

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

tFileInputDelimited->tFlowtoIterate ->tFixedFlowInput->并且可以使用 globalMap() 获取列值并使用它来分隔 数据到不同的表。 -> 并且可以使用 globalMap(Columnused to 单独的数据)在表名中。

【讨论】:

【参考方案3】:

我想到的第一个解决方案是使用复制器将当前行传输到三个过滤器,这三个过滤器充当保护器,只让给定列中包含 1 2 或 3 的行通过。图片:http://i.imgur.com/FmvwU.png

但您也可以动态构建表名,如果这是您想要的,图片:http://i.imgur.com/8LR7Q.png

【讨论】:

谢谢,这也是我最初的想法。但问题是这只适用于少数值/表,在我的情况下可能有多达数千个表,因此单独设置所有这些过滤器是不可行的。

以上是关于使用 ETL 工具按列值将数据拆分为不定数量的表的主要内容,如果未能解决你的问题,请参考以下文章

根据列值将一行分解/拆分为多行

根据列值将一行拆分为多行

sh 按列值拆分CSV

R根据多个列值将数据框子化为多个数据框

MySQL---数据库切分

根据公共列值将定义的行数转换为列