Изменение формата дд / мм / гггг / чч / мм / сс на ггггмм в Hive - PullRequest
1 голос
/ 24 мая 2019

Я сейчас использую Hive.У меня есть столбец (столбец A) строк в следующем формате 11/9/2009 0:00:00.Я хотел бы извлечь yyyymm.т.е. я хотел бы, чтобы приведенная выше строка была 200909.Я пробовал два разных метода, ни один из них не работал.

Я попытался преобразовать строку, используя два разных метода

       concat(year(Column A),lpad(month(Column A),2,0))


       convert(datetime, Column A)

Для первой строки кода, которую я получаю: NULL во всех строках

Для второйодин, который я получаю:

Обнаружено: DATETIME Ожидается: ALL, CASE, CAST, DEFAULT, DISTINCT, EXISTS, FALSE, IF, INTERVAL, NOT, NULL, REPLACE, TRUNCATE, TRUE, IDENTIFIER CAUSEDBY: Исключение: синтаксическая ошибка

Ответы [ 2 ]

2 голосов
/ 24 мая 2019

Используйте unix_timestamp(string date, string pattern) для преобразования заданного формата даты в секунды, прошедшие с 1970-01-01. Затем используйте from_unixtime () для преобразования в требуемый формат :

select  from_unixtime(unix_timestamp( '11/9/2009 0:00:00','dd/MM/yyyy HH:mm:ss'), 'yyyyMM');

Результат:

200909

Читайте также: Функции данных и времени Impala и Функции даты куста .

Еще одно решение, работающее в Hive:

select  concat(regexp_extract('11/9/2009 0:00:00','(\\d{1,2})/(\\d{1,2})/(\\d{4})',3),lpad(regexp_extract('11/9/2009 0:00:00','(\\d{1,2})/(\\d{1,2})/(\\d{4})',2),2,0))
1 голос
/ 24 мая 2019

Так как я пытаюсь превратить строки в ГГГГММ, я должен использовать нижеприведенное, что сработало для меня:

      'concat(substr(Column A, instr(Column A, ' ')-4, 4),substr(Column A, instr(Column A, ' /')+1, 2))' 
...