2013-02-15 17 views
6

Czy ktoś może mi powiedzieć, dlaczego nie liczę się dla każdej grupy f0, MIESIĄCA, DNIA, GODZINY, MINUTY w moim zestawie wyników?HIVE - funkcja grupowania według daty

Zestaw wyników:

result set

Zapytanie:

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))) 

Schemat:

f0 INT (Partycja kolumna)
F1 INT
F2 STRING
f3 STRING (P artition Kolumna)
f4 STRING
f5 STRING
F6 STRING
F7 MAP <STRING,STRING>

* F2 jest timestamp Unix w formacie szesnastkowym

+0

można udostępnić kilka szczegółów na temat danych wejściowych? Teraz widzę tylko zapytanie i dane wyjściowe, dość trudno jest ustalić, co jest nie tak w zapytaniu, nie wiedząc, do czego go stosujesz. –

+0

@Charles: Normalnie zgodzę się z tobą na temat braku szczegółów. Jednak źródło danych, z którym mam do czynienia, jest zastrzeżone i wolałbym być po stronie "bezpiecznej", nawet jeśli ryzykuję niejasność i/lub niejasność w moim pytaniu. – Jubbles

+0

czy otrzymałeś dane z pominięciem grupy? –

Odpowiedz

9

Może to być spowodowane to_date zwraca NULL, gdy jest stosowana czas unixowy.
Według Hive manual:

TO_DATE (timestamp ciąg znaków):
Zwraca datę część datownika strun: to_date ("1970-01-01 00:00:00") = „1970/01 -01"

Zastosowanie from_unixtime zamiast wrócić na właściwe części daty.

Uwaga:
Zakładam HEX2DEC UDF jest pobierana z biblioteki rdzenia HIVE-1545

Powiązane problemy