1小时前的Hive SELECT记录

时间:2018-06-22 17:17:59

标签: hive hiveql unix-timestamp sql-timestamp

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

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

在配置单元中,似乎缺少NOW()。我进行了一些搜索,找到了unix_timestamp()。通过执行unix_timestamp()*1000,我应该能够获得当前UTC时间(以毫秒为单位)。

因此,如果我想获取1小时前的记录,我正在考虑做以下事情:

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

有人可以建议这是否是解决此问题的正确方法吗?另外,如果我想选择1天前该怎么办?似乎不方便将其转换为毫秒。任何帮助或建议的阅读将不胜感激。预先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

是的unix_timestamp()使您距离Unix时代已经过去了几秒钟。您可以减去60 * 60 * 1000毫秒,然后比较您的字段以获取所需的记录。

对于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);