谁能告诉我为什么我没有得到结果集中每个 f0、MONTH、DAY、HOUR、MINUTE 组的计数?
结果集:
查询:
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/