在猪中投射嵌套关系的所有列

时间:2012-02-06 16:43:04

标签: apache-pig

我有一个关系MY_REL,它是X和Y连接的结果:

MY_REL = {X::x1,X::x2,Y::y1,Y::y2}

我试着做

Bla =       foreach MY_REL generate X;

猪呕吐:

ERROR 1000: Error during parsing. Scalars can be only used with projections

我尝试了X :: *并抛出:无效的别名X。

丑陋的解决方法:我切换到显式编写所有列名:

Bla =       foreach MY_REL generate X::x1, X::x2;

有没有一种很好的方法来生成所有X列?

2 个答案:

答案 0 :(得分:3)

不使用JOIN,而是使用COGROUPCOGROUP会创建一个类似于{X : {x1, x2}, Y : {y1, y2}}的关系。因此,您可以这样做:

foreach MY_REL GENERATE FLATTEN(X);

请注意,它是一个包,所以你想要flatten

答案 1 :(得分:1)

如果您在JOIN之前的列都有不同的名称,您可以稍后使用它们:

Bla =       foreach MY_REL generate x1 + y1, x2 + y2;

如果只有一个冲突,则需要使用原始前缀关系

Bla =       foreach MY_REL generate x1, x2, y1, Y:y1 AS y2;

使用新的猪范围PIG-1693

Bla =       foreach MY_REL generate ..$2, $3 AS y2;

PIG-2511

中还有一些会谈