2

我正在尝试使用 ETL 工具(Talend)进行数据集成过程。

我面临的挑战是当我尝试将来自不同来源(不同格式)的数据转换为单一格式时。

源可能有不同的列名和结构(顺序、数据类型等)。所以不同的元数据。在我看来,这是一个非常普遍的情况。但是该工具无法处理它,因为它不提供任何动态映射功能。

处理这种情况的最佳方法是什么?

4

1 回答 1

1

Talend 确实提供了一个动态映射工具。对于 XML 数据,它被称为 tMap 或 tXmlMap。

还有更强大的 tHMap(分层映射工具),但我还没有使用它,因为它在我正在使用的 Talend 版本(5.4)中非常原始,但在 5.5 中应该更有用。

您最好的方法可能是在每个组件之后使用 tMap 来标准化数据架构。

首先,您应该选择输出模式应该是什么样子(这可能与您当前的模式之一相同,或者如果需要的话完全不同),然后简单地将模式复制并粘贴到每个 tMap 的输出表中。然后映射相关数据。

示例作业可能如下所示:

示例作业布局

每个“文件”的架构和包含的数据(我使用 tFixedFlowInput 组件将数据硬编码到作业中,而不是读入文件,但前提是相同的)如下:

文件 1: file1 架构和数据 文件 2: file2 架构和数据 文件 3: 文件 3 架构和数据

然后将它们映射为匹配第一个“文件”的模式:

文件 1: file1 tMap 配置 文件 2: file2 tMap 配置 文件 3: file1 tMap 配置

注意第一个 tMap 配置没有显示任何变化,因为我们保持模式完全相同。

现在我们的输入都共享相同的模式,我们可以使用 tUnite 组件来合并(很像 SQL 的UNION运算符)数据。

在此之后,我们还采取最后一步并使用 tReplace 组件,以便我们可以轻松地将“sex”字段标准化为Mor F

t替换配置以映射

最后我将它输出到控制台,但这可以输出到任何可用的输出组件。

对于无需预定义映射的真正动态选项,您需要使用动态模式读取所有数据。然后,您可以将结构解析为定义的输出。

在这种情况下,您可以将文件中的数据作为动态模式(单列)读取,然后将其直接放入临时数据库表中。Talend 将根据原始文件中的标题自动创建列。

然后,您可以从这里使用转换映射文件和数据库的数据字典来提取源列中的数据并将其直接映射到输出列。

于 2014-07-28T08:58:33.863 回答