pig中3个表的内部和外部连接

dauxcl2d  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(376)

我正在尝试将下面的join语句转换为pig。

  1. from EXCH e
  2. JOIN (select a,p, count(buyer) from EXCH group by a, p) sq on e.a = sq.a and e.p = sq.p
  3. left outer join myimplocal i on e.a = i.a and e.p = i.p and e.f = i.f and i.imp > 0 and e.iswin = 1

目前,我有:

  1. EXCH2 = FOREACH EXCH GENERATE a, p, buyer;
  2. EXCH2_groupby = GROUP EXCH2 BY (a, p);
  3. EXCH_alias_sq = FOREACH EXCH2_groupby GENERATE EXCH2.a, EXCH2.p, COUNT(EXCH2.buyer);
  4. join_EXCH_and_EXCH_alias_sq = JOIN EXCH by (a, p), EXCH_alias_sq by (a, p);
  5. myimplocal_filterby_imp_notZero = FILTER myimplocal BY imp > 0;

我应该过滤吗 e.iswin=1 在做左外连接之前?我应该用过滤器过滤吗 join_EXCH_and_EXCH_alias_sq ,然后在 myimplocal_filterby_imp_notZero 我的过滤器别名呢?
任何帮助都将不胜感激。

oogrdqng

oogrdqng1#

在我的问题中-由于e.iswin是在对内部联接表的结果执行outerjoin期间执行的,因此我必须使用union来给出正确的结果。这就是我所做的:数据集1:1)内部连接exch\u和别名exch\u sq 2)用e.iswin=1过滤结果,3)用myimplocal左外部连接步骤2中的结果
数据集2:1)inner join exch\u和\u exch\u alias \u sq(与上面的(1)相同)2)用e.iswin=0过滤结果
union onschema(数据集1中步骤3的别名)(数据集2中步骤2的别名)
这给了我正确的结果。

相关问题