2017-02-21 33 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

Я забыл указать, откуда находится столбец3 в SUM. 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» является необязательным.

Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^