规范化器转换

2025年3月17日 | 阅读 3 分钟

Normalizer 是一个活动转换。它用于将单个行转换为多行。当 Normalizer 转换接收到一个包含多个重复数据的行时,它会为每个重复数据的实例返回一个行。

如果在一行中,多个列中存在重复数据,则可以将其拆分为多行。有时我们在多个列中存在重复数据。

例如,一个关系源包含四个带有平面销售数据的字段。我们可以配置一个 Normalizer 转换,为每个平面生成一个单独的输出行。

当 Normalizer 从传入行返回多行时,它会为单个出现的传入列返回重复数据。

Normalizer 转换接收一个包含多个重复列的行,并为每个重复数据的实例返回一个行。该转换处理每个源行中多个重复的列或多组重复的列。

以下是“属性”面板中 Normalizer 转换的以下属性,例如

  • 规范化字段选项卡:定义多个出现的字段,并指定要在映射中使用的其他字段。
  • 字段映射选项卡:将传入字段连接到规范化字段。

我们需要适当的许可证才能使用 Normalizer 转换。

Normalizer 转换解析来自 COBOL 源、关系表或其他源的多个重复列。它可以处理来自包含 REDEFINES 子句的 COBOL 源的多个记录类型。

Normalizer 转换类型

以下是两种类型的 Normalizer 转换,例如

  • VSAM Normalizer 转换:一个不可重用的转换,是 COBOL 源的 Source Qualifier 转换。映射设计器从映射中的 COBOL 源创建 VSAM Normalizer 列。
    列属性是只读的。VSAM Normalizer 通过一个输入端口接收多个重复的源列。
  • 管道 Normalizer 转换:一个转换,用于处理来自关系表或平面文件的多个重复数据。
    我们手动创建这些列并在转换开发器或映射设计器中编辑它们。管道 Normalizer 转换用每个源列出现的单个输入端口表示多个重复的列。

示例

我们创建下表,它表示不同班级的学生成绩记录,例如

步骤 1:使用脚本创建源表“stud_source”和目标表“stud_target”,并在 Informatica 中导入它们。

学生姓名七年级八年级九年级十年级
Joy60657580
Edward65708090

步骤 2:创建一个映射,该映射具有源 stud_source 和目标表 stud_target

步骤 3:从“转换”菜单中创建一个新转换

  1. 选择 Normalizer 作为转换。
  2. 输入名称 nrm_stud
  3. 并单击“创建

步骤 4:将创建转换,然后单击“完成”按钮。

步骤 5:双击 Normalizer 转换,然后

  1. 选择“Normalizer”选项卡。
  2. 单击图标以创建两列。
  3. 输入列名。
  4. 将出现次数设置为 4,用于标记,将学生姓名设置为 0。
  5. 单击“确定”。

将在转换中生成列。我们将看到 4 个标记列,因为我们将出现次数设置为 4。

步骤 6:然后在映射中

  1. 将四个班级的源限定符的四列分别链接到 Normalizer 列。
  2. 将学生姓名列链接到 Normalizer 列。
  3. 将 student_name 和 marks 列从 Normalizer 链接到目标表。

创建会话和工作流后保存映射并执行它。班级分数列在四列中重复。对于学生的每个班级分数,将使用 Normalizer 转换创建一个单独的行。

上述映射的输出将如下所示

学生姓名Class得分
Joy760
Joy865
Joy975
Joy1080
Edward765
Edward870
Edward980
Edward1090

源数据有重复的列,即 class7、class 8、class 9 和 class 10。我们重新排列了数据以适合单个 class 列,并且通过使用 Normalizer,在一个源记录中,在目标中创建了四条记录。

通过这种方式,我们可以规范化数据并为单个数据源创建多条记录。