Hive SELECT 1 小时前的记录
Hive SELECT records from 1 hour ago
我有一个配置单元 table,其中包含一个名为时间戳的列。时间戳是从 java System.currenttimemillis()
生成的 bigint 字段。我想它应该是UTC。现在我正在尝试 select 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 天前那样 select 怎么办?似乎不方便将其转换为毫秒。任何帮助或建议的阅读材料将不胜感激。预先感谢您的帮助。
是 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);
我有一个配置单元 table,其中包含一个名为时间戳的列。时间戳是从 java System.currenttimemillis()
生成的 bigint 字段。我想它应该是UTC。现在我正在尝试 select 1 小时前的记录。我知道在 MySQL 你可以做这样的事情:
SELECT * FROM table WHERE datetimefield >= DATE_SUB(NOW(), INTERVAL 1 HOUR)
在配置单元中,似乎缺少 NOW()
。我进行了一些搜索并找到了 unix_timestamp()
。我应该能够通过 unix_timestamp()*1000
.
所以如果我想获取 1 小时前的记录,我正在考虑做类似的事情:
SELECT * FROM hivetable WHERE datetimefield >= (unix_timestamp()*1000-3600000);
有人可以建议这是否是解决此问题的正确方法吗?另外,如果我想像 1 天前那样 select 怎么办?似乎不方便将其转换为毫秒。任何帮助或建议的阅读材料将不胜感激。预先感谢您的帮助。
是 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);