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;
guarda 'mese (20141008)' e 'anno (20141008)' –
@vkp le funzioni 'MONTH()' e 'YEAR()' funzionano nei dati Impala memorizzati come data o timestamp, ma non sembra funzionare per dati stringa. – nxl4
guarda la documentazione http://www.cloudera.com/content/cloudera/en/documentation/cloudera-impala/latest/topics/impala_datetime_functions.html –