hadoop – Hive中的日期比较

我正在使用Hive,我的表格结构如下:

CREATE TABLE t1 (
  id INT,
  created TIMESTAMP,
  some_value BIGINT
);

我需要找到t1中不到180天的每一行.即使表中存在与搜索谓词匹配的数据,以下查询也不会产生任何行.

select * 
from t1 
where created > date_sub(from_unixtime(unix_timestamp()), 180);

在Hive中执行日期比较的适当方法是什么?

最佳答案
怎么样:

where unix_timestamp() - created < 180 * 24 * 60 * 60

如果您可以使用实际时间戳值来完成日期数学通常是最简单的.

或者你想要它只在整天切断?然后我认为问题在于如何在整数和字符串之间来回转换.尝试:

where created > unix_timestamp(date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),180),'yyyy-MM-dd')

遍历每个UDF:

> unix_timestamp()返回一个int:当前时间(以纪元为单位)
> from_unixtime(,’yyyy-MM-dd’)转换为给定格式的字符串,例如’2012-12-28′
> date_sub(,180)从该字符串中减去180天,并以相同的格式返回一个新字符串.
> unix_timestamp(,’yyyy-MM-dd’)将该字符串转换回int

如果这一切都变得太毛茸茸,你总是可以编写一个UDF来自己做.

转载注明原文:hadoop – Hive中的日期比较 - 代码日志