2016-12-20 4 views
0

Я пытаюсь преобразовать bigdecimal (YYYYMMDD) в формат даты (ГГГГ/ММ/ДД) с помощью скрипта свиньи. Для этого я написал ниже кодконвертировать YYYYMMDD в формат даты YYYY/MM/DD

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; 

Выход я получаю

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

Хотя ожидаемый выход

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

Образец имеющий дату

20140926 
20140929 
20141002 

ответ

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

Интересно, почему ожидаемый результат 2014/09/26, когда вы указываете «yyyy-MM-dd» в качестве формата даты? Для достижения вашей цели первого преобразования $ 8 (то есть chararray, когда вы загрузите его) на сегодняшний день

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

но у меня есть огромные элементы ряда, как я могу назначить $ 8 как chararay? – animal

+1

'STOCK_A = LOAD '/ user/cloudera/hl7' ИСПОЛЬЗОВАНИЕ PigStorage ('|');' Эта строка означает, что все загруженные строки будут разделены разделителем '|' для chararray полей, как вы didn; t указать схему. Просто используйте вышеприведенное решение и попробуйте прочитать больше документации о свинге. – Alexey

+1

Спасибо, что это сработало. Я новичок в свинцовом латыни, и я буду следовать твоему совету. – animal

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

Если вы работаете с данными из другой страны, то вам нужно выше кода для временной зоны. (выше пример для работы в Индии)

+0

Спасибо за помощь – animal

Смежные вопросы