映射多个文件中的多个列略有不同

时间:2012-10-05 21:24:40

标签: java excel etl normalize talend

我正在寻找一种很好的实用方法来处理多个文件之间的元数据规范化,这些文件对于Talend中的批处理ETL作业具有略微不同的模式。

我有几百个历史报告(每个记录大约25K到200K),每个excel文件大约有100到150列。所有文件的大多数列名都是相同的(98%重叠)但是存在细微的差异:

  • 不同的列顺序
  • 不同的列名称(有时使用,有时不使用缩写)
  • 不同的列数
  • 有时列之间有空格,有时候是点,短划线或下划线

没有编写专门的应用程序或暴力通过手动纠正它们来强制所有文件,是否有任何好的免费工具或方法可以智能或半自动方式在文件列名称之间进行差异和纠正?

2 个答案:

答案 0 :(得分:1)

我暂时将其写为“答案”,因为我没有链接可以证明它是如何完成的。然而,Pentaho数据集成提供了一种非常好的方法来加载这样的文件 - 有一种方法可以在第一次转换中读取文件的元数据,我的意思是列名,然后你可以使用“元数据”注入“将元数据注入到下一个读取文件的转换中的功能。

现在;在列名略有不同的情况下,您必须以某种方式执行一些额外的映射。也许您可以在“别名”列名和实际列名的某处存储查找表。

无论哪种方式,这听起来像一个非常复杂/讨厌的任务自动化!

我没有看到任何方法来处理Talend中文件的不同元数据 - 虽然很高兴在这一点上得到纠正!

答案 1 :(得分:1)

您可以使用Talend Open Studio来实现这一目标。但我确实看到了一个警告。

官方方式

  1. 为了让Talend了解您的Excel文件,您需要先加载它的元数据。需要注意的是,您需要手动加载所有元数据(逐个加载)。在免费版的Talend(Open Studio Data)中,不支持动态元数据。

  2. 使用tMap等组件,您可以将输入元数据映射到所需的输出元数据(可以是Excel文件或数据库或其他内容)。在此步骤中,您可以将输入数据整形为所需的输出(固定/忽略/转换/等)。

  3. 非官方的方式

    似乎存在一个用户贡献的组件,它支持Excel动态元数据。我没有测试它,但它值得尝试: http://www.talendforge.org/exchange/?eid=663&product=tos&action=view&nav=1,1,1

    这可以随着组件的发布和频繁更新而发展。 我的答案是关于版本5.3.1的状态