2017-01-06 2 views
0

ich unten die Daten in meiner hive Tabelle habe:wie zu überprüfen und unterschiedliche Datumsformate in hive zu entsprechen

Jan 2014 
Oct-13 
8-Nov 
8-Oct 
30-Nov-11 

Ich brauche sie in dem 'yyyy-MM-dd' Format zu konvertieren. Ich habe from_unixtime(unix_timestamp(change_log_date ,'yyyyMMdd'), 'yyyy-MM-dd') verwendet, um das Datumsformat zu verdecken, das am 30-Nov-11 in Ordnung ist, aber da ich unterschiedliche Datumsformate in den Daten habe, wie man generischen Code schreibt, der das Datumsformat überprüft und in 'JJJJ-MM-TT umwandelt ". Ich muss 0 für Tag/Monat/Jahr setzen, wenn es nicht vorhanden ist.

for eg. I need to convert 8-Oct into '0000-10-08' 

+0

Mögliches Duplikat von [Datumszeichenkette im Format "MM/DD/YY"] (http://stackoverflow.com/questions/39634829/convert-date-string-in-mm-dd-yy-format) – cheseaux

Antwort

0

Hilfe benötigen, wenn Sie alle möglichen Datumsformate kennen, können Sie case-Anweisung verwenden, das richtige Format für jede Zeile anwenden:

CASE WHEN change_log_date rlike '[0-9]{2}-[a-zA-Z]{3}-[0-9]{2}' 
    THEN from_unixtime(unix_timestamp(change_log_date ,'yyyyMMdd'), 'yyyy-MM-dd') 
    WHEN change_log_date rlike --other regex 
    THEN -- and so on 

Wenn Sie sind besser vertraut mit Java oder Python, können Sie einfach Ihr Stück Code schreiben und es als Hive function verwenden.