【问题标题】:Data Integration: Bring Data to a Standard Format [closed]数据集成:将数据转换为标准格式 [关闭]
【发布时间】:2014-07-28 08:06:33
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: etl data-warehouse talend data-integration


    【解决方案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 组件,以便我们可以轻松地将“sex”字段标准化为MF

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

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

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

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

    【讨论】:

    • 在 tMap 组件中,源元数据不能改变。它必须被修复。如何处理具有不同列名和顺序的文件?假设我有多个源文件:文件 1 有列:名称、Mobile_Number、Sex 文件 2 有列:名称、性别、Mob_No 文件 3:... 文件 4:... ... ... 目标具有架构:姓名、号码、性别。我如何进行映射?只有一个文件可以映射到目标文件。对吗?
    • 你想在这里做什么?加入他们还是团结他们?
    • 我添加了一个工作示例,我们采用不同的模式,将它们映射到一个标准模式,然后合并数据,这样它就在一个地方。这是否涵盖了您的问题?
    • 我理解您的建议,但在上述解决方案中,我仍需要提前定义所有映射。如果我有 1000 个不同结构的文件怎么办?我可以使用一些查找文件或表来定义此映射,可以查看映射吗?基本上,在我的场景中,我有 1000 个可能具有不同架构的文件(列编号、列名称、列顺序可能会有所不同)。我必须将它们映射到标准架构(这是预定义的)。
    • 当然需要提前定义好一切。系统永远不会自动猜测“性”需要映射到“性别”。如果您确实拥有数千个具有不同结构但仍然相关数据的文件,那么您必须质疑输出这些文件的过程。您唯一的其他选择是将所有内容作为动态模式读取,然后尝试在那里进行动态映射。不过,您需要企业许可证。
    猜你喜欢
    • 2020-05-28
    • 2017-03-19
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    相关资源
    最近更新 更多