我正在尝试使用ETL工具(Talend)进行数据集成过程。
我面临的挑战是当我尝试将来自不同来源(以不同格式)的数据转换为单一格式时。
源可能具有不同的列名和结构(顺序,数据类型等)。所以元数据不同。 我认为,这是一个非常常见的情况。但该工具无法处理它,因为它不提供任何动态映射功能。
处理此类情况的最佳方法是什么?
答案 0 :(得分:1)
Talend确实提供了动态映射工具。它被称为XML数据的tMap或tXmlMap。
还有tHMap(分层映射工具)功能强大得多,但我还没有使用它,因为它在我使用的Talend版本(5.4)中非常原始,但应该更有用5.5。
这里最好的方法可能是在每个组件之后使用tMap来标准化数据架构。
首先,您应该选择输出模式应该是什么样的(这可能与您当前的模式之一相同或必要时完全不同),然后只需将模式复制并粘贴到每个tMap的输出表中。然后将相关数据映射到。
示例作业可能如下所示:
每个“文件”的模式和包含数据(我使用tFixedFlowInput组件将数据硬编码到作业而不是在文件中读取但前提是相同的)如下所示:
文件1: 文件2: 档案3:
然后映射它们以匹配第一个“文件”的模式:
文件1: 文件2: 档案3:
注意第一个tMap配置如何显示没有变化,因为我们保持模式完全相同。
现在我们的输入都共享相同的模式,我们可以使用tUnite组件来联合(很像SQL的UNION
运算符)数据。
在此之后,我们还采取最后一步并使用tReplace组件,以便我们可以轻松地将“性别”字段标准化为M
或F
:
最后我将其输出到控制台,但这可以输出到任何可用的输出组件。
对于真正动态的选项,无需预先定义映射,您需要使用动态模式读取所有数据。然后,您可以将结构解析为定义的输出。
在这种情况下,您可以将文件中的数据作为动态模式(单列)读取,然后将其直接放入临时数据库表中。 Talend将根据原始文件中的标题自动创建列。
然后,您可以使用转换映射文件和数据库的数据字典来提取源列中的数据,并将其直接映射到输出列。