[英]how to filter a timestamp in Pig
我有與此模式的表:
(id: chararray, ts: long, data: chararray)
哪個代表時間戳,並與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的代碼行不通,所以有人可以建議我使此代碼行得通嗎?
您是否嘗試過按ts
降序排列?
LATEST = LIMIT (ORDER table BY ts desc) 1;
dump LATEST;
我不確定為什么這行不通,但是編寫UDF做到這一點也不難。 只需輸入包的元組,在它們上循環,然后以最大的時間戳返回元組。 然后,您可以這樣做:
grp = GROUP table BY id;
latest = FOREACH grp GENERATE my.udfs.LatestInBag(table);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.