【问题标题】:How do I use a Single Mapping to Handle Multiple Files with Different but Similar Formats in Informatica PowerCenter?如何在 Informatica PowerCenter 中使用单个映射来处理格式不同但相似的多个文件?
【发布时间】:2015-01-28 20:21:37
【问题描述】:

我有一些文件想合并到一个数据库表中。这些文件具有相似但不同的格式。这些文件看起来像这样:

文件一:

  • ColA:字符串
  • ColB:字符串
  • ColC:字符串

文件二:

  • ColAA:字符串
  • ColBB:字符串
  • ColCC:字符串

文件三:

  • Col01:字符串
  • Col02:字符串
  • Col03:字符串

目标表如下所示:

表目的地:

  • ColFirst:字符串
  • ColSecond:字符串
  • ColThird:字符串

我想开发一个映射,将这三个文件 ETL 到这个数据库中,但是由于列名不同,看起来我必须开发三个不同的映射,或者三个不同的源,或者三个不同的东西。问题是我的例子是人为的:我实际上有许多不同的文件,它们都有不同的格式和列名,但数据都非常相似。

我想开发一个单一的映射或工作流程,只需添加一个包含列映射的表即可处理所有这些问题。根据上面的示例文件和示例表,这样的表看起来像这样:

表映射:

这样,要编辑列映射,我只需要编辑这个 TableMappings 表。我根本不需要对映射或工作流程进行任何更改。我也不必重新部署应用程序。

什么样的映射或工作流程可以利用这样的东西?我假设会有一个平面文件源从文件夹中获取文件。中间会有一些东西使用这个 TableMappings 表来映射列名。最后会有一个关系数据对象代表我的目标数据库表“TableDestination”。不过我不知道如何组合起来。

【问题讨论】:

    标签: etl informatica informatica-powercenter


    【解决方案1】:

    Flat Files 作为源,列名并不重要。列数是否匹配甚至都没有关系。如果实际文件的列数比Source Definition 多,则只会读取前n 列(n 是Source Definition 中的端口数)。在相反的情况下,额外的端口将包含空值。

    话虽如此,加载多个平面文件很容易。

    如果列顺序不同,并且您需要这个额外的静态表来定义列映射,那么问题将是。这是可行的,即Java Transformation 可用于进行列映射。但是整个解决方案太复杂了,我无法在这里描述它。我可以尝试回答一些精确、具体的问题 - 但我无法在此处准备和粘贴完整的解决方案。

    【讨论】:

    • 不幸的是,列的顺序都不同。这些文件来自第三方,我无法控制它们。我将不得不进一步研究使用 Java 转换。谢谢。
    【解决方案2】:

    这也可以使用表达式来完成。你需要一个“通用”Source Definition(例如Column1Column2、...、ColumnN),并且在每个端口中都有一个表达式来检查应该返回哪个端口。例如

    DECODE (SUBSTR(TargetColumnOrder,X,1), '1', Column1, '2', Column2, ... 'N', ColumnN)

    X 为端口索引。

    上面假设映射表的结构有点不同:

    FileName | TargetColumnOrder
    ----------------------------
    FileOne  | 231
    FileTwo  | 527
    

    注意1:如果可以有不同的列数,则需要检查Length(TargetColumnOrder)是否不小于端口索引,否则SUBSTRING将不起作用。

    注 2:上述解决方案尚未经过测试甚至实施。请将此视为一般描述,而不是确切的代码库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      相关资源
      最近更新 更多