输出列不匹配。用户在源限定符中定义 SQL 查询

Output column mismatch. User defined SQL query in Source Qualifier

我想我在这里遗漏了一些明显的东西。我的任务是通过仅更改源限定符部分来复制工作正常的映射。

原来的映射是这样的,

首先,我不明白原始映射是如何简单地从 Source Qualifier 连接到 Expression 的。 由于用户定义的查询,列名应该完全更改。

例如

INSERT_DM to max(HVOLE.INSERT_DM)

在我的新复制映射中,当我单击 "Validate"、

时,我的新源限定符出现此错误

当我的查询实际上输出 5 个单独的列时,它提到 "exactly 3 fields" 很奇怪。

请注意,我为不存在的列创建了 o_BEADHEIGHT1 和 o_BEADHEIGHT2。这些列是由我的用户定义查询新创建的。

如果SQ中的端口名称与select查询字段不匹配也没关系。只有端口的顺序很重要。它也只考虑与下一个转换连接的端口。

源限定符不是表达式转换,不能像 one.For 您的示例那样使用,LOT_NO、MCD_ID 和 TEST_TS 连接到输入和输出 link 这就是您收到错误 'exactly 3 fields projected.' 的原因。源限定符中的字段应连接到输入和输出 link 以将其视为有效端口。即使您连接了 5 个源限定器输出端口,但您连接了 3 个作为输入。所以,要解决这个问题,

  • 将 o_bedhight1 和 o_beadheight2 从源连接到源限定符。
  • 移除 PROCCD,MAT_TYPE 如果你想要干净的 SQ

您遇到此问题的原因是源限定符中的 5 个端口中有 2 个未link与源定义一起使用。此验证考虑了只有您 link 使用源定义和下一个转换编辑的源限定符端口。

眼底是

1) 在 SQL 覆盖查询中选择的字段数应与源限定符中链接到下一个转换的端口数相匹配。名称不要求相同,但顺序必须相同

有趣的是,Informatica 将来自 SQL 查询的字段映射到源限定符输出 link 而不是源限定符端口。因此 SQL 查询中的第一列映射到第一个 link,第二列映射到第二个 link,依此类推。

2) 此外,Source Qualifier 转换中的所有端口都需要使用 Source 定义 linked。您可以删除源限定符转换中未使用的端口以避免混淆。