配置单元选择1小时前的记录

krugob8w  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(365)

我有一个配置单元表,其中包含一个名为timestamp的列。时间戳是从java生成的bigint字段 System.currenttimemillis() . 我想应该是utc。现在我正在尝试选择1小时前的记录。我知道在mysql中,您可以执行以下操作:

SELECT * FROM table WHERE datetimefield >= DATE_SUB(NOW(), INTERVAL 1 HOUR)

在 hive 里,好像 NOW() 不见了。我找了些东西 unix_timestamp() . 我应该可以通过执行 unix_timestamp()*1000 .
因此,如果我想获取1小时前的记录,我会考虑做如下操作:

SELECT * FROM hivetable WHERE datetimefield >= (unix_timestamp()*1000-3600000);

有没有人能建议这是解决这个问题的正确方法?如果我想选一天前的呢?转换成毫秒似乎不太方便。任何帮助或建议阅读将不胜感激。事先谢谢你的帮助。

xmd2e60i

xmd2e60i1#

unix_timestamp() 获取自unix时代以来经过的秒数。您可以减去60601000毫秒,然后比较字段以获得所需的记录。
对于hive 1.2.0及更高版本,您可以使用 current_timestamp ```
select *
from hivetable
where
datetimefield >= ((unix_timestamp()*1000) - 3600000);

对于1天,将毫秒转换为日期格式并使用 `date_sub` ```
select * 
from hivetable 
where 
     from_unixtime(unix_timestamp(datetimefield,'MM-dd-yyyy HH:mm:ss')) >= 
     date_sub(from_unixtime(unix_timestamp()),1);

相关问题