4

約20個のIDのリストでテーブルをフィルタリングしています。現在、私のコードは次のようになっています。

A = LOAD 'ids.txt' USING PigStorage();
B = LOAD 'massive_table' USING PigStorage();
C = JOIN A BY $0, B BY $0;
D = FOREACH C GENERATE $1, $2, $3, $4, ...
STORE D INTO 'foo' USING PigStorage();

私が気に入らないのは行Dです。ここでは、存在させたい他のすべての列(場合によっては多数の列)を明示的に宣言して、結合列を削除するために新しいテーブルを再生成する必要があります。私は次のものと同等のものがあるかどうか疑問に思っています:

FILTER B BY $0 IN (A)

また:

DROP $0 FROM C
4

2 に答える 2

9

たぶん、この質問に似ています:

これは JIRA チケットを参照しています: https://issues.apache.org/jira/browse/PIG-1693 .. 表記を使用して残りのすべてのフィールドを示す方法の例:

D = FOREACH C GENERATE $1 .. ;

これは、0.9.0+ PIG があることを前提としています

于 2012-05-31T16:00:33.080 に答える
3

列を番号でドロップ

列番号 5 を削除したい場合は、次のように実行できます。

D = FOREACH C GENERATE .. $4, $6 .. ;

名前で列をドロップ

列を名前でドロップしたい場合、ドロップしたい列の名前を知っているだけでは可能ではないようです。ただし、この列の直前と直後の列の名前がわかっている場合は可能です。colBeforeMyCol と colAfterMyCol の間に列をドロップする場合は、次のようにします。

aliasAfter = FOREACH aliasBefore GENERATE 
             .. colBeforeMyCol, colAfterMyCol ..;
于 2016-08-22T07:27:10.227 に答える