【发布时间】:2017-07-03 00:03:23
【问题描述】:
我有两个数据集(csv 文件),我使用“CSV 文件输入”步骤将它们带入 Pentaho DI 转换。文件 A 有一个列 joincol,其值出现在文件 B 的列 joincol 中。我想在A.joincol = B.joincol条件下将文件A中的数据与文件B中的数据左连接,以从文件B中的wantcol列中获取相应的数据。
很简单的东西。
作为(必要的)初步步骤,我对要连接的列(即A.joincol 和B.joincol)上的两个数据集进行升序排序。
然后我使用“合并连接”步骤,将文件 A 中的排序数据作为“第一步”,将文件 B 中的排序数据作为“第二步”,并选择“连接类型”为 LEFT OUTER .我在“第一步的密钥”部分下选择“获取关键字段”,并指定 joincol 是唯一要加入的关键字段,然后对“第二步的密钥”执行相同的操作。
所以,连接部分有效,除了:
- 行被删除,这应该绝对不可能使用左外连接
- 被删除的行恰好是在升序排序时与
joincol的最后一个值对应的行组中的行。
我通过在 Excel 中进行 vlookup 确认文件 A 的 joincol 中的值都出现在文件 B 的 joincol 中。在任何情况下,即使 none 的值出现在文件 B 中,左外连接仍然应该让我至少保留我进入的所有行。
我是 Pentaho 的新手,所以我很难相信我在探索的早期就偶然发现了这样一个疯狂的错误,这意味着我一定错过了一步。但是,我阅读了合并连接的文档,并相信我已经遵循了所有必要的步骤(我在这里列出的那些)。如果我错过了什么,谁能告诉我?也许这是一个常见错误的结果?
非常感谢!
【问题讨论】:
-
您是否确认这些最后的行存在并由 CSV 文件输入和排序行步骤传递?您可以进行降序排序,然后预览该步骤,您的行应该是第一个。
-
是的,我没有处理大量数据,我手动检查了每个步骤的输出的每一行。它们在连接的两个输入中都存在。
-
请阅读minimal reproducible example并采取行动。你的问题很清楚,但需要更多细节。另外,请解释您从哪里获得“步骤”。 (bidimensions.com/category/tutorial/?) PS 如果左边的所有值都出现在右边,那么左连接结果与内连接结果相同。那你为什么要离开呢?
标签: join left-join pentaho pentaho-spoon pentaho-data-integration