как конвертировать время эпохи Unix в строку даты в улье - PullRequest
19 голосов
/ 27 августа 2011

У меня есть файл журнала, который содержит столбец отметки времени. Временная метка представлена ​​в формате времени эпохи Unix.

Я хочу создать раздел на основе отметки времени с разделами год, месяц и день.

Пока что я сделал это, но выдает ошибку.

PARSE ERROR cannot recognize input '(' in column type

Вот мой код.

from (
      from raw_data
            MAP  ${PREFIX}raw_data.line
            USING 's3://scripts/clean.py'
            AS (timestamp STRING, name STRING)
      ) map_out
INSERT OVERWRITE TABLE date_base_data_temp PARTITION(year(timestamp), month(timestamp)), day(timestamp))) 
    select map_out.name;

Ответы [ 5 ]

39 голосов
/ 23 сентября 2011

Оф, это выглядит некрасиво. Попробуйте использовать эту функцию в Hive:

SELECT from_unixtime(unix_timestamp) as new_timestamp from raw_data ...

Или, если отметка времени в ms вместо секунд:

SELECT from_unixtime(unix_timestamp DIV 1000) as new_timestamp from raw_data ...

Преобразует метку времени Unix в формат ГГГГ-ММ-ДД ЧЧ: ММ: СС, после чего вы можете использовать следующие функции для получения года, месяца и дня:

SELECT year(new_timestamp) as year, month(new_timestamp) as month, day(new_timestamp) as day ...
7 голосов
/ 15 июня 2016

В более поздних выпусках Hive и SparkSQL доступны тип данных даты и параметры приведения типов.Следующее должно работать в Hive, а также Spark SQL

SELECT cast(from_unixtime(epoch_datetime) as date) from myHiveTable
6 голосов
/ 11 августа 2017

Если вам нужно преобразовать дату в произвольном формате, используйте это:

select date_format(from_unixtime(epoch_datetime),'yyyMM') as formatted_date from myHiveTable;


который вернет дату как yearMonth, например 201708

3 голосов
/ 27 декабря 2017

Добавление этого запроса в список, где метка времени должна быть преобразована в строку даты yyyy-MM-dd для строкового раздела:

hive> select date_format(from_unixtime(epoch_datetime), 'yyyy-MM-dd') as day from table_name limit 20;

-- If required, remove the millis precision for timestamps
hive> select date_format(from_unixtime(cast(epoch_datetime/1000 as bigint)), 'yyyy-MM-dd') as day from table_name limit 20;
0 голосов
/ 07 октября 2018
select order_id, date_format(from_unixtime(order_date/1000),'yyy-MM-dd') as order_date ,order_customer_id,order_status
from orders

или, если вы видите какую-либо ошибку, попробуйте использовать select order_id, date_format (from_unixtime (order_date DIV 1000), 'yyy-MM-dd') в качестве order_date, order_customer_id, order_status из заказов

...