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

Hive 配置单元选择1小时前的记录,hive,hiveql,unix-timestamp,sql-timestamp,Hive,Hiveql,Unix Timestamp,Sql Timestamp,我有一个配置单元表,其中包含一个名为timestamp的列。时间戳是从javaSystem.currenttimemillis()生成的bigint字段。我想应该是UTC。现在我正在尝试选择1小时前的记录。我知道在MySQL中,您可以执行以下操作: SELECT * FROM table WHERE datetimefield >= DATE_SUB(NOW(), INTERVAL 1 HOUR) SELECT * FROM hivetable WHERE datetimefield &

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

SELECT * FROM table WHERE datetimefield >= DATE_SUB(NOW(), INTERVAL 1 HOUR)
SELECT * FROM hivetable WHERE datetimefield >= (unix_timestamp()*1000-3600000); 
在蜂巢中,似乎缺少
NOW()
。我做了一些搜索,找到了
unix\u timestamp()
。通过执行
unix\u timestamp()*1000
,我应该能够以毫秒为单位获取当前UTC时间

因此,如果我想获得1小时前的记录,我会考虑做如下事情:

SELECT * FROM table WHERE datetimefield >= DATE_SUB(NOW(), INTERVAL 1 HOUR)
SELECT * FROM hivetable WHERE datetimefield >= (unix_timestamp()*1000-3600000); 
有人能建议这是解决这个问题的正确方法吗?如果我想选择1天前的那样,又该怎么办?将其转换为毫秒似乎不方便。如有任何帮助或建议阅读,我们将不胜感激。提前感谢您的帮助。

是会告诉您Unix时代以来的秒数。您可以减去60*60*1000毫秒,然后比较字段以获得所需的记录

对于Hive 1.2.0及更高版本,您可以使用
current\u timestamp

select * 
from hivetable 
where 
     datetimefield >= ((unix_timestamp()*1000) - 3600000);
对于1天,将毫秒转换为日期格式并使用


嗨,你能解释一下为什么你想做一个from_unixtime吗?还有,使用unix\u时间戳(datetimefield,'MM-dd-yyyy HH:MM:ss')有什么意义?如果我的datetimefield已经在毫秒内,比如1529600214530,我需要这样做吗?谢谢您提到您的字段类型是字符串格式的抱歉,它是bigint格式的。不,如果您的字段类型是bigint及其毫秒,则不必使用from_unixtime。