7

谁能告诉我为什么我没有得到结果集中每个 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 INT
f2 STRING
f3 STRING(分区列)
f4 STRING
f5 STRING
f6 STRING
f7 MAP<STRING,STRING>

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

4

1 回答 1

11

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

to_date(string timestamp):
返回时间戳字符串的日期部分:to_date("1970-01-01 00:00:00") = "1970-01-01"

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

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

于 2013-02-20T11:29:47.220 回答