2017-02-21 6 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」の使用はオプションです。

これが役に立ちます。

関連する問題