Как преобразовать дату ISO в дату UTC в Hive

У меня есть данные JSON, как показано ниже: мне нужно преобразовать эту дату или mongo_date в метку времени utc, чтобы анализировать данные в улье в соответствии с примером временной шкалы в год, в месяц, в неделю, используя уменьшение карты

{
    "_id" : ObjectId("51ac77050e9edcdad271ce2d"),
    "company" : null,
    "date" : "19760224",
    "mongo_date" : ISODate("1976-02-24T00:00:00Z")

person Hari    schedule 06.06.2013    source источник
comment
Привет, вы нашли обходной путь для использования mongo_date с существующими UDF, такими как Hour или Minutes? Поскольку Месяц, Неделя и День работают с этими UDF, но после буквы «Т» игнорируются чч: мм: ссZ. tnx   -  person Maziyar    schedule 02.12.2013


Ответы (1)


Hive понимает этот формат: 'yyyy-MM-dd HH:mm:ss.SSS'.

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

 select from_unixtime(UNIX_TIMESTAMP("2017-01-01T05:01:10Z", "yyyy-MM-dd'T'HH:mm:ss'Z'"),"yyyy-MM-dd HH:mm:ss"); 

Результат:

2017-01-01 05:01:10

Обновление. Этот метод заключается в удалении Z и замене T пробелом с использованием regexp_replace и преобразовании в метку времени, если необходимо, без использования unix_timestamp(), это позволит сохранить миллисекунды:

select timestamp(regexp_replace("2019-05-17T17:03:09.775Z", '^(.+?)T(.+?)Z$','$1 $2'));

Результат:

2019-05-17 17:03:09.775
person leftjoin    schedule 07.05.2014