簡體   English   中英

如何在Pig中過濾時間戳

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM