0

我有这些列的平面文件 1 (F1) - key1、col1、col2 平面文件 2 (F2) 和这些列 - key2、col1、col2 和一个包含这些列的表 (T1) - key3、col1、col2

要求是根据以下检查从所有 3 个来源获取数据 - 当平面文件 (F1) 中的 key1 与平面文件 (F2) 中的 key2 匹配时 - 当平面文件 (F1) 中的 key1 不匹配时,返回 F1 和 F2 中的所有匹配行与平面文件(F2)中的 key2 匹配 - 只有这样才能根据条件在平面文件 F1 和表 T1 之间进行检查 - key1 = key3 并且如果找到匹配 - 然后返回 T1 和 F1 中的所有匹配行

完成上述任务

  • 我在这两个源之间创建了 Joiner traNSFORMATION - F1(Master)和 F2(Detail)并获得了匹配的行,并且我选择的连接类型是“Detail external Join”
  • 被困在如何做剩余的检查?有人可以指导吗?
4

2 回答 2

0

您可以按照以下步骤

  • 首先加入 FF1 和 FF2(外部加入 FF2,因此来自 FF1 的所有数据都进来)。
  • 然后使用路由器对FF2中不存在的数据进行分组。您可以将匹配的记录发送到目标(组 1)。
  • 当 ff1.key 不为空但 ff2.key2 为空时,可以选择不匹配的记录。选择这些记录并使用 JNR 与表 T1 匹配。
  • 您可以将这些匹配记录发送到目标。

整个地图应该是这样的——

sq_FF1 (master)                                                             |Grp 1 = ff1.key and ff2.key2 both NOT NULL (Matching)-------------------------------------------------> To TGT
       | JNR ( ff1.key=ff2.key2) (Detail outer join) --> ROUTER -(2 groups) |Grp 2 = ff1.key is NOT NULL and ff2.key2 IS NULL (NonMatching) -->  |
sq_FF2 (Detail)                                                                                                                                  | JNR key1 = key3 (inner join) ---> To TGT                   
sq_T1 -----------------------------------------------------------------------------------------------------------------------------------------> |
于 2021-05-12T12:01:15.390 回答
0

我们不能将两组数据的结果结果带到一个共同的转换(如联合)-> 并且从那里我们必须实现共同的逻辑。IE

  • 返回 F1 和 F2 中所有匹配的行
  • F1 其余不匹配的行应与表 T1 连接
  • 最后,上述 2 组的结果应该被路由到一个共同的转换(如联合)-> 并且从那里我们有一个共同的逻辑。
  1. 我用过木匠transf。在 F1 和 F2 中引入匹配的行 ->
  2. 使用过滤器传输。与条件。用 cond 识别所有不匹配的 F1 行。Key2 为空 ->
  3. 使用细木工传输。将表 T1 与过滤器中未识别的记录链接->
  4. 识别为 step1 和 step3 的一部分的结果被路由到 Union 但是当我们使用 union transf 合并数据时出现问题。因为我们带来了基于连接类型“详细外连接”的数据(因此数据似乎被重复了)。如何摆脱这个问题?
于 2021-05-13T00:03:28.383 回答