2016-12-20 7 views
0

Ich versuche, BigDezimal (JJJJMMTT) in das Datumsformat (JJJJ/MM/TT) zu konvertieren, indem Sie Schweineschrift verwenden. Dafür habe ich unten Code geschrieben habenJJJJMMTT in Datumsformat konvertieren JJJJ/MM/TT

STOCK_A = LOAD '/user/cloudera/hl7' USING PigStorage('|'); 
data = FILTER STOCK_A BY ($1 matches '.*OBR.*'); 
MSH_DATA = FOREACH data GENERATE ToString($8,'yyyy-MM-dd')AS date; 

Output i immer bin ist

20140926-01-01 
20140929-01-01 
20141002-01-01 

Obwohl die erwartete Ausgabe ist

2014/09/26 
2014/09/29 
2014/10/02 

Probe wird Datum mit

20140926 
20140929 
20141002 

Antwort

2
MSH_DATA = FOREACH data GENERATE ToString($8,'yyyy-MM-dd')AS date; 

Ich frage mich, warum erwartete Ausgabe ist 2014/09/26, wenn Sie 'JJJJ-MM-TT' als Datumsformat angeben? Um Ihr Ziel zu erreichen ersten $ 8 konvertieren (dh chararray beim Laden) bisher

MSH_DATA = FOREACH data GENERATE ToString(ToDate($8, 'yyyyMMdd'),'yyyy/MM/dd') AS date; 
+0

aber ich habe riesige Reihenelemente, wie kann ich $ 8 als Chararay zuweisen? – animal

+1

'STOCK_A = LOAD '/ user/cloudera/hl7' VERWENDUNG von PigStorage ('|');' Diese Zeile bedeutet, dass alle geladenen Zeilen durch Trennzeichen '|' chararray Felder wie Sie nicht, t spezifiziere Schema. Verwenden Sie einfach die obige Lösung und versuchen Sie, mehr Dokumentation zu lesen. – Alexey

+1

Vielen Dank, es hat funktioniert. Ich bin ein Anfänger in Schwein Latein sicherlich werde ich Ihrem Rat folgen. – animal

1
MSH_DATA = FOREACH b GENERATE ToString(ToDate($7, 'yyyyMMdd','Asia/Kolkata'),'yyyy/MM/dd') AS date; 

Wenn Sie auf den Daten arbeiten aus anderen Ländern, dann müssen Sie über Code für Zeitzone. (über Beispiel für das Arbeiten in Indien)

+0

Danke für die Hilfe – animal

Verwandte Themen