我正在尝试将以下连接语句转换为PIG。
from EXCH e
JOIN (select a,p, count(buyer) from EXCH group by a, p) sq on e.a = sq.a and e.p = sq.p
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
目前,我有这个:
EXCH2 = FOREACH EXCH GENERATE a, p, buyer;
EXCH2_groupby = GROUP EXCH2 BY (a, p);
EXCH_alias_sq = FOREACH EXCH2_groupby GENERATE EXCH2.a, EXCH2.p, COUNT(EXCH2.buyer);
join_EXCH_and_EXCH_alias_sq = JOIN EXCH by (a, p), EXCH_alias_sq by (a, p);
myimplocal_filterby_imp_notZero = FILTER myimplocal BY imp > 0;
我应该在执行左外连接之前过滤e.iswin=1
吗?我应该将过滤器应用于join_EXCH_and_EXCH_alias_sq
,然后在myimplocal_filterby_imp_notZero
上进行外部联接
和我的过滤器别名?
非常感谢任何帮助。
答案 0 :(得分:0)
在我的问题中 - 因为e.iswin是在内连接表的结果的外连接期间执行的,所以我不得不使用Union来给我正确的结果。 这就是我做的: 数据集1: 1)内连接EXCH_and_EXCH_alias_sq 2)用e.iswin = 1过滤结果, 3)左外连接步骤2中的结果与myimplocal
数据集2: 1)内连接EXCH_and_EXCH_alias_sq(与上面的(1)相同) 2)用e.iswin = 0过滤结果
UNION ONSCHEMA(数据集1中步骤3的别名)(数据集2中步骤2的别名)
这给了我正确的结果。