2013-02-15 54 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