0

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

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

在蜂巢中,它似乎NOW()丢失了。我做了一些搜索并找到unix_timestamp()。我应该能够通过执行以毫秒为单位的当前 UTC 时间unix_timestamp()*1000

因此,如果我想从 1 小时前获取记录,我正在考虑执行以下操作:

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

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

4

1 回答 1

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);
于 2018-06-22T17:41:43.440 回答