我有一个配置单元表,其中包含一个称为时间戳记的列。时间戳是从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天前该怎么办?似乎不方便将其转换为毫秒。任何帮助或建议的阅读将不胜感激。预先感谢您的帮助。
答案 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);