date - HIVE - 按日期功能分组

标签 date hadoop group-by hive

谁能告诉我为什么我没有得到结果集中每个 f0、MONTH、DAY、HOUR、MINUTE 组的计数?

结果集:

result set

查询:

SELECT t.f0, MONTH(TO_DATE(Hex2Dec(t.f2))), DAY(TO_DATE(Hex2Dec(t.f2))), HOUR(TO_DATE(Hex2Dec(t.f2))), MINUTE(TO_DATE(Hex2Dec(t.f2))), COUNT(DISTINCT t.f1)  
FROM table t  
WHERE (t.f0 = 1 OR t.f0 = 2)  
AND (t.f3 >= '2013-02-06' AND t.f3 < '2013-02-15')   
AND (Hex2Dec(t.f2) >= 1360195200 AND Hex2Dec(t.f2) < 1360800000)  
AND *EXTRA CONDITIONS*  
GROUP BY t.f0, MONTH(TO_DATE(Hex2Dec(t.f2))), DAY(TO_DATE(Hex2Dec(t.f2))),   HOUR(TO_DATE(Hex2Dec(t.f2))), MINUTE(TO_DATE(Hex2Dec(t.f2)))  

架构:

f0 INT(分区列)
f1 整数
f2 字符串
f3 STRING(分区列)
f4 字符串
f5 字符串
f6 字符串
f7 map <STRING,STRING>

*f2 是十六进制格式的 unix 时间戳

最佳答案

这可能是因为 to_date 在 unix 时间应用时返回 null。
根据Hive manual :

to_date(string timestamp):
Returns the date part of a timestamp string: to_date("1970-01-01 00:00:00") = "1970-01-01"

改用 from_unixtime 获取正确的日期部分。

注意:
我假设 Hex2Dec UDF 取自 HIVE-1545 的核心库

关于date - HIVE - 按日期功能分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14902827/

相关文章:

java - 如何检查日期字符串的有效性?

java - APACHE HADOOP 版本 2.8.0 的 HADOOP_HOME 和 PIG_CLASSPATH 的正确值是多少?

mysql - SQL join, sum, group-by 而不是 null 0

sql - 保留子查询的顺序(使用 GROUP BY 和 ORDER BY)

java - 在java中存储当前日期和日期1年

java - 字符串到日期的转换返回错误值

java - 如何获取以月和日为单位的日期

hadoop - oozie 如何处理依赖项?

java - Hadoop Map Reduce 查询

mysql - 插入查询优化