Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Join 左外连接在Pentaho DI中删除行_Join_Left Join_Pentaho_Pentaho Spoon_Pentaho Data Integration - Fatal编程技术网

Join 左外连接在Pentaho DI中删除行

Join 左外连接在Pentaho DI中删除行,join,left-join,pentaho,pentaho-spoon,pentaho-data-integration,Join,Left Join,Pentaho,Pentaho Spoon,Pentaho Data Integration,我有两个数据集(csv文件),我使用“csv文件输入”步骤将它们引入Pentaho DI转换。文件A有一列joincol,其值显示在文件B的joincol列中。我想在条件A.joincol=B.joincol下将文件A中的数据与文件B中的数据左键联接,以从文件B的列wantcol中获取相应的数据 非常简单的东西 作为(必要的)初步步骤,我对要连接的列上的两个数据集(即a.joincol和B.joincol)进行升序排序 然后,我使用“合并联接”步骤,将文件a中的排序数据作为“第一步”,将文件B中

我有两个数据集(csv文件),我使用“csv文件输入”步骤将它们引入Pentaho DI转换。文件A有一列
joincol
,其值显示在文件B的
joincol
列中。我想在条件
A.joincol=B.joincol
下将文件A中的数据与文件B中的数据左键联接,以从文件B的列
wantcol
中获取相应的数据

非常简单的东西

作为(必要的)初步步骤,我对要连接的列上的两个数据集(即
a.joincol
B.joincol
)进行升序排序

然后,我使用“合并联接”步骤,将文件a中的排序数据作为“第一步”,将文件B中的排序数据作为“第二步”,并选择要保留在外部的“联接类型”。我在“第一步关键点”部分下选择“获取关键点字段”,并指定
joincol
是唯一要加入的关键点字段,然后对“第二步关键点”执行相同的操作

因此,连接部分起作用,除了:

  • 行被删除,这应该是绝对不可能的
  • 被删除的行正是与升序排序时的
    joincol
    的最后一个值相对应的行组中的行
通过在Excel中执行vlookup,我已确认文件A的
joincol
中的值都出现在文件B的
joincol
中。在任何情况下,即使没有任何值出现在文件B中,左外部联接也应该至少为我留下所有的行

我是Pentaho的新手,所以我发现很难相信我在探索的这么早就发现了这样一只疯狂的虫子,这意味着我肯定错过了一步。然而,我阅读了合并联接的文档,并相信我已经遵循了所有必要的步骤(我在这里列出的步骤)。如果我错过了什么,有人能告诉我吗?也许这是一个常见错误的结果


非常感谢

连接是典型的SQL而不是PDI

对于PDI,有一个主数据流,对于每一行,您可以在另一个数据流中查找对应关系并返回所需的列

如果查找一个值,例如订单的客户,请使用
Lookup/Lookup Stream
步骤。当您希望某些值丢失(左连接)时,可以使用默认值。如果只需要具有对应关系(内部联接)的行,则可以过滤掉刚才放置的默认值

如果需要返回多行,例如一个客户的所有订单,可以使用
连接/合并连接
。根据经验,通常更容易回答这个问题


如果不能,则在完全外部联接的情况下,必须使用
联接/联接行(笛卡尔积)
,您可以在其中添加一个或多个条件。

是否确认CSV文件输入和排序行步骤中存在并传递了最后的行?你可以降序排序,然后预览步骤,你的行应该是第一行。是的,我没有处理太多数据,我手动检查了每个步骤输出的每一行。它们在连接的两个输入中都存在。请阅读并执行。你的问题很清楚,但还需要更多的细节。此外,请解释您从何处获得“步骤”。()PS如果左侧的所有值都显示在右侧,则左侧联接结果与内部联接结果相同。那你为什么要加入?嗨,阿兰德,谢谢你的回答。我的过程通常是使用左连接,以便在查找值不存在的情况下,不会丢失数据。对于未找到查找的行,我将把查找列值合并为一些默认值,然后检查这些行,如“kickout”。我相信这是ETL开发中的标准实践。我只是不清楚为什么左连接不起作用。你有什么见解吗?谢谢嗨@Rookatu,没有例子很难说。我的观点是,问题在于传入流中的数据,而不是PDI步骤。更可能是排序顺序,您有很多选项:区分大小写、区域设置、排序器和总体类型。因此,请检查CSV输入是否处于延迟转换模式,以便在进入排序步骤之前,将数据从内部二进制字节转换为正确的字符串、数字、日期等。这是输入数据的问题,或者您认为左侧文件的行数少于右侧文件的行数。