2017-02-21 34 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'的使用是可选的。

希望这会有所帮助。