Hadoop Pig脚本:联接和生成后为空值

Hadoop Pig脚本:联接和生成后为空值,hadoop,left-join,apache-pig,Hadoop,Left Join,Apache Pig,我的猪剧本中有一个奇怪的难题。我正在联接多个表,最后的联接之一如下所示: a = JOIN O_1 by ((long)OpropID, (long)OAID) LEFT, property by ((long)GPropID, (long)prop_AID); 如果我按特定的数据点过滤结果,我将从连接中的属性表right表中获得这些字段的正确结果。即使没有过滤器,结果集也是正确的,我只是过滤它来测试结果 b = filter a by OpropID==12 and OAID==10; du

我的猪剧本中有一个奇怪的难题。我正在联接多个表,最后的联接之一如下所示:

a = JOIN O_1 by ((long)OpropID, (long)OAID) LEFT, property by ((long)GPropID, (long)prop_AID);
如果我按特定的数据点过滤结果,我将从连接中的属性表right表中获得这些字段的正确结果。即使没有过滤器,结果集也是正确的,我只是过滤它来测试结果

b = filter a by OpropID==12 and OAID==10;
dump b;
但是,如果在联接之后立即创建后续的GENERATE语句,则下例中最后两个相同的字段将返回NULL结果:

我试着用$16、$17代替字段名;我还使用了property::GPropID或property::prop\u-AID,但没有任何效果


如果您能在这一点上提供帮助,我们将不胜感激。

您确定没有过滤器时结果是正确的吗?因为您使用的是左联接,所以第一个别名中的任何记录如果在第二个别名中没有匹配项,则仍然会被执行,第二个别名的所有字段都会被设置为NULL。我要说的是,联接之后的任何后续GENERATE语句都会为右表中的字段返回NULL值。但是,如果在联接之后立即转储,则字段中会填充数据。希望这能澄清问题。我确信联接应该返回正确的值,即存在匹配的数据。您如何检查这一点?使用或运行脚本?插图可能会向您显示一些模拟数据。我在另一个脚本中遇到过类似的问题,唯一的解决方法是在其中一个别名后添加DISTINCT。这确保了两个别名之间的正确连接。。。不知道为什么会有这样的行为。。。。
c = FOREACH a GENERATE gID, p_AID, OpropID, OAID, GPropID, prop_AID;