2013-03-26 76 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