1

私はこのスキーマを持つテーブルを持っています:

(id: chararray, ts: long, data: chararray)

ts はタイムスタンプを表し、UNIX 時間で保存します。

データが更新され、更新が発生すると ts が変更されるため、id は変更されません。ただし、この古いレコードと新しいレコードはすべて hdfs に保存されます。

最新のデータを見たいだけなので、豚のコードを次のように書きます。

grp = GROUP table BY id;

rst = FOREACH grp {
    latest = FILTER table BY ts == MAX(table.ts);
    GENERATE latest.id AS id,
             latest.data AS data;
}

しかし、Pig コードが機能しなかったようです。このコードを機能させるための提案をしてくれる人はいますか?

4

2 に答える 2

1

ts降順で並べ替えてみましたか?

LATEST = LIMIT (ORDER table BY ts desc) 1;
dump LATEST;
于 2012-09-18T06:40:51.487 に答える
0

なぜそれが機能しないのかはわかりませんが、これを行うために UDF を作成することもそれほど難しくありません。タプルのバッグを入力し、それらをループして、最大のタイムスタンプを持つタプルを返すだけです。次に、次のようにします。

grp = GROUP table BY id;
latest = FOREACH grp GENERATE my.udfs.LatestInBag(table);
于 2012-09-18T23:16:10.137 に答える