2015-10-08 17 views
6

Sto usando SQL in Impala per scrivere questa query. Sto cercando di convertire una stringa data, memorizzata in formato YYYYMMDD, in un formato data ai fini della esecuzione di una query come questa:Converti stringa YYYYMMDD alla data in Impala

SELECT datadate, 
     session_info 
FROM database 
WHERE datadate >= NOW() - INTERVAL 5 DAY 
ORDER BY datadate DESC; 

Poiché il codice >= NOW() - INTERVAL 5 DAY non funziona con la stringa AAAAMMGG, ho "Mi piacerebbe trovare un modo per convertirlo in un formato data che funzioni con questo tipo di query. Il mio pensiero è che dovrebbe essere simile a questa (sulla base di domande simili su altri editor di query SQL), ma non funziona in Impala:

SELECT datadate, 
     session_info, 
     convert(datetime, '20141008', 102) AS session_date 
FROM database 
WHERE session_date >= NOW() - INTERVAL 5 DAY 
ORDER BY session_date DESC; 

Qualcuno sa come fare questo in Impala?

EDIT:

ho finalmente trovato una soluzione che lavora al problema. Nessuno dei tentativi utilizzando configurazioni di CAST o CONVERT funzionerebbe in Impala, ma la domanda sotto risolve il problema ed è pienamente operativa, permettendo data matematica per essere eseguita su una colonna contenente valori di stringa:

SELECT datadate, 
     session_info 
FROM database 
WHERE datadate >= from_unixtime(unix_timestamp(now() - interval 5 days), 'yyyyMMdd') 
GROUP BY datadate 
ORDER BY datadate DESC; 
+0

guarda 'mese (20141008)' e 'anno (20141008)' –

+0

@vkp le funzioni 'MONTH()' e 'YEAR()' funzionano nei dati Impala memorizzati come data o timestamp, ma non sembra funzionare per dati stringa. – nxl4

+0

guarda la documentazione http://www.cloudera.com/content/cloudera/en/documentation/cloudera-impala/latest/topics/impala_datetime_functions.html –

risposta