2013-02-15 13 views
6

Qualcuno può dirmi perché non ottengo i conteggi per ogni gruppo di f0, MONTH, DAY, HOUR, MINUTE nel mio set di risultati?HIVE - funzione di gruppo per data

set di risultati:

result set

Query:

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

schema:

F0 INT (Partizione Colonna)
f1 INT
f2 STRING
STRING f3 (P artition Colonna)
f4 STRING
STRING f5
STRING F6
f7 MAPPA <STRING,STRING>

* f2 è un timestamp unix in formato esadecimale

+0

Puoi condividere alcuni dettagli circa i dati di input? In questo momento vedo solo la query e l'output, è abbastanza difficile capire cosa c'è che non va nella tua query senza sapere a cosa stai applicando. –

+0

@Charles: Normalmente, sono d'accordo con te sulla mancanza di dettagli. Tuttavia, la fonte dei dati con cui ho a che fare è proprietaria e preferirei essere sul lato "sicuro" anche se rischio la mia ambiguità e/o la mia vaghezza. – Jubbles

+0

hai ricevuto qualche dato con fuori gruppo? –

risposta

9

Questo potrebbe essere dovuto al fatto to_date restituisce NULL quando viene applicato su un tempo unix.
Secondo il Hive manual:

to_date (stringa timestamp):
Restituisce la parte relativa alla data di un timestamp stringa: to_date ("1970-01-01 00:00:00") = "1970-1901 -01"

Usa FROM_UNIXTIME invece di tornare alle parti data corretta.

Nota:
presumo HEX2DEC UDF è preso dalla libreria di base di HIVE-1545