2013-02-15 50 views
6

任何人都可以告诉我为什么我没有在结果集中为每个f0,MONTH,DAY,HOUR,MINUTE组计数吗?HIVE - 按日期分组功能

结果集:

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 INT
F2 STRING
F3 STRING( P artition列)
F4 STRING
F5 STRING
F6 STRING
F7 MAP <STRING,STRING>

* f2在十六进制格式的UNIX时间戳

+0

核心库,您可以分享您的输入数据的一些细节考虑?现在我只看到查询和输出,很难弄清楚查询中出现了什么问题,而不知道你应用了什么。 – 2013-02-19 20:09:58

+0

@Charles:通常,我会同意你关于缺乏细节的问题。但是,我正在处理的数据源是专有的,即使我在我的问题中存在模糊性和/或模糊性,我宁愿置身于“安全”方面。 – Jubbles 2013-02-20 15:41:56

+0

你有没有收到任何数据? – 2013-02-21 14:26:31

回答

9

这可能是因为当它应用于TO_DATE返回空一个unix时间。
按照Hive manual

TO_DATE(字符串时间戳):
返回时间戳 串的日期部分:TO_DATE( “1970-01-01 00:00:00”)=“1970年至1901年-01"

使用FROM_UNIXTIME反而找回正确的日期部分。

注:
我认为HEX2DEC UDF是从HIVE-1545