2013-03-26 116 views
4

当我使用DESCRIBE时,我在Pig输出中看到了很多双冒号,这并不明显。猪的双冒号意味着什么?

例如,分组和压平之后,我看到的是这样的:

key::observerId:chararray,key::endpoint:chararray,...

在某些时候,我已经通过observerId和端点分组,改名为组元组“键”,然后reflattened。那么,究竟是什么双冒号的意思是,我应该如何参考第一关系(键observerId?)

回答

5

在你的问题::是消除歧义操作,这是使用识别字段名后加入,COGROUP,CROSS或FLATTEN运营商。你可以找到一个使用歧义运算符here的例子。

在你的情况下,你有两个字段observerID和endpoint,并且它们都通过键别名来标识,这意味着observerID和endpoint都被引用在相同的别名中,而其他的“observerID和endpoint”引用其他的“key”别名。

我认为你已经使用如下的内容:

key  = some_statement_with_observerID_and_endpoint 
otherkey = some_statement_with_observerID_and_endpoint 

基础上,你有看到类似如下:

key::observerId:chararray,key::endpoint:chararray,... 

上面这句话意味着observerID和端点你看到的是关键别名的一部分不是其他关键别名。

+1

所以,如果我做了一个'FOREACH'我怎么能通过消除歧义的名字'key :: observerId'来访问它们呢? – Newtang 2013-03-27 00:38:48

+1

你真正需要记住的是你的别名是哪个字段,然后你可以使用alias :: field组合来访问你的目标字段数据。 – AvkashChauhan 2013-03-27 20:22:26