Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/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
Apache pig 在pig中投影嵌套关系的所有列_Apache Pig - Fatal编程技术网

Apache pig 在pig中投影嵌套关系的所有列

Apache pig 在pig中投影嵌套关系的所有列,apache-pig,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 M

我有一个关系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列的好方法

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

foreach MY_REL GENERATE FLATTEN(X);

请注意,它是一个袋子,因此您希望将其展平。

使用而不是使用
连接
COGROUP
将创建一个类似于
{X:{x1,x2},Y:{y1,y2}}
的关系。因此,您可以:

foreach MY_REL GENERATE FLATTEN(X);

请注意,其中是一个包,因此您希望将其展平。

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

Bla =       foreach MY_REL generate x1 + y1, x2 + y2;
如果只有一个冲突,则需要使用原始前缀关系

Bla =       foreach MY_REL generate x1, x2, y1, Y:y1 AS y2;
一个新的猪养殖场


中也有一些讨论,如果您在加入之前的专栏都有不同的名称,您可以稍后使用它们:

Bla =       foreach MY_REL generate x1 + y1, x2 + y2;
如果只有一个冲突,则需要使用原始前缀关系

Bla =       foreach MY_REL generate x1, x2, y1, Y:y1 AS y2;
一个新的猪养殖场


ok中也有一些讨论-不需要使用关系名称完全限定列,但我仍然必须显式地命名所有列,对吗?如果使用范围运算符“..”(出现在Pig 0.9中),则不需要,但如果不是,则需要在生成中命名所有要保留以供以后使用的列。我个人要么选择没有冲突的名称,要么在我的下一个FOREACH中重命名所有列。好吧-不需要使用关系名称完全限定列,但我仍然必须显式地命名所有列,对吗?如果使用范围运算符“..”(出现在Pig 0.9中),则不需要,但如果不是“是”,则需要在“生成所有要保留以供以后使用的列”中命名。我个人要么选择没有冲突的名称,要么在下一个FOREACH.creative think中重命名所有列!然而,创建这个关系的是一个左连接,所以我想它不能被一个COGROUP替换,对吗?如果你在
过滤器
之后,在
X
的大小大于0的地方进行过滤,你可以用
COGROUP
替换它。对新手的进一步解释:当PIG执行任何
连接
/
COGROUP
时,它会使用JOIN key=gaga对文件a和文件B中的所有行进行映射减少分组。它不介意文件A中有2行,文件B中有3行,文件A中有0行,文件B中有0行。这就是SQL人员所说的“完全外部联接”。如果我们请求一个
COGROUP
,我们就完成了。如果我们要求加入
,PIG会慷慨地过滤掉其中一个文件有0行的组。创造性思维!然而,创建这个关系的是一个左连接,所以我想它不能被一个COGROUP替换,对吗?如果你在
过滤器
之后,在
X
的大小大于0的地方进行过滤,你可以用
COGROUP
替换它。对新手的进一步解释:当PIG执行任何
连接
/
COGROUP
时,它会使用JOIN key=gaga对文件a和文件B中的所有行进行映射减少分组。它不介意文件A中有2行,文件B中有3行,文件A中有0行,文件B中有0行。这就是SQL人员所说的“完全外部联接”。如果我们请求一个
COGROUP
,我们就完成了。如果我们请求一个
连接
,PIG会慷慨地过滤掉其中一个文件有0行的组。