Konvertieren YYYYMMDD-String zu Datum in Impala

Ich bin mit SQL in Impala zu schreiben, diese Abfrage. Ich werde versuchen, zu konvertieren eines Datums-Strings, gespeichert im format JJJJMMTT in ein Datum-format für die Zwecke der Ausführung einer Abfrage wie diese:

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

Da die >= NOW() - INTERVAL 5 DAY code funktioniert nicht mit der YYYYMMDD-string, ich würde gerne einen Weg finden, zu konvertieren, die in ein Datum-format, das mit dieser Art der Abfrage. Mein Gedanke ist, dass es sollte in etwa so Aussehen (basierend auf ähnliche Fragen zu anderen SQL-Abfrage-Editoren), aber es funktioniert nicht 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;

Weiss jemand wie dieser im Impala?

EDIT:

Fand ich endlich eine funktionierende Lösung für das problem. Keiner der versuche mithilfe von Konfigurationen von CAST oder CONVERT wäre in Impala, aber der folgenden Abfrage löst das problem und ist voll funktionsfähig, so dass das Datum der Mathematik durchgeführt werden, wenn eine Spalte enthält string-Werte:

SELECT datadate,
       session_info
FROM database
WHERE datadate >= from_unixtime(unix_timestamp(now() - interval 5 days), 'yyyyMMdd')
GROUP BY datadate
ORDER BY datadate DESC;
  • Blick auf month(20141008) und year(20141008)
  • die MONTH() und YEAR() Funktionen arbeiten in Impala gespeicherten Daten, wie ein Datum oder einen Zeitstempel, aber es scheint nicht zu funktionieren für string-Daten.
  • schauen Sie in die Dokumentation cloudera.com/content/cloudera/en/documentation/cloudera-impala/...
  • diese Funktionen scheinen nicht zu funktionieren für mich mit Datum gespeichert als JJJJMMTT-strings.
InformationsquelleAutor nxl4 | 2015-10-08
Schreibe einen Kommentar