2017-02-21 41 views
1

我是豬語法的新手,想知道是否有人可以提供將此SQL代碼翻譯成豬的提示。使用過濾器和在豬羣中使用

SELECT column1, column2, SUM(column3) 
FROM table 
WHERE column5 = 100 
GROUP BY column2; 

到目前爲止,我有:

data = LOAD....etc. 
filterColumn = FILTER data BY column5 = 100; 
groupColumn = Group filterColumn By column2; 
result = foreach groupColumn Generate group, column1, SUM(column3) as sumCol3; 
DUMP result; 

這是行不通的。錯誤消息是「無法推斷org.apache.pig.builtin.SUM的匹配函數爲多個或不匹配,請使用明確的轉換。」

+0

你可以分享樣本輸入和期望的輸出嗎? –

回答

0

SUM():計算單列包中數值的總和。它期望袋子是它的輸入。因此,FOREACH ... GENERATE會,

result = foreach groupColumn Generate group, filterColumn.column1, SUM(filterColumn.column3) as sumCol3; 

另外在FILTER聲明,以檢查平等使用==

filterColumn = FILTER data BY column5 == 100; 
+0

我忘了指定SUM中的column3來自哪裏。 SUM(filterColumn.column3) –

+0

@ a.m。是的..希望這個解決方案,請你接受答案! – franklinsijo

0

下面的豬命令可用於:

test=LOAD '<testdata>' USING PigStorage(',') AS (column1:<datatype>, column2:<datatype>,column3:<datatype>, column5:<datatype>); 

A =FILTER test BY column5==100; 

B = GROUP A BY column2; 

C = FOREACH B GENERATE group, test.column1,test.column2,SUM(test.column3); 

dump C; 

注意'PigStorage'和'AS'的使用是可選的。

希望這會有所幫助。