Hive from_unixtime() генерирует неподходящую дату

Я использую запрос для создания временной метки из фиктивной таблицы с именем dual. Но дата, возвращаемая из таблицы, кажется неверной.

select String(max(max_lid_date)) as prev_reqline_max_lid_date,from_unixtime(unix_timestamp(),'YYYY-MM-DD hh:mm:ss') as job_start_date,from_unixtime(unix_timestamp(),'YYYY-MM-DD 00:00:01') as pull_to_date from xxcss_ktn_req_line_detail_log;

Результат запроса:

prev_reqline_max_lid_date       job_start_date  pull_to_date
1970-01-01 00:00:00     2015-12-349 01:47:52    2015-12-349 00:00:01

Структура двойного стола:

hive (smart_advisor)> desc dual;
OK
col_name        data_type       comment
id               string

Структура таблицы улья, из которой извлекается дата

hive (smart_advisor)> desc xxcss_ktn_req_line_detail_log;
OK
col_name        data_type       comment
job_start_date          timestamp
job_end_date            timestamp
pull_from_date          timestamp
pull_to_date            timestamp
min_lid_date            timestamp
max_lid_date            timestamp
record_count            bigint

Нужна помощь в решении проблемы с датой в столбцах pull_to_date и job_start_date. Это журнал для моей работы.

Таблица xxcss_ktn_req_line_detail_log содержит только одну запись

hive (smart_advisor)> select * from xxcss_ktn_req_line_detail_log;
OK
xxcss_ktn_req_line_detail_log.job_start_date    xxcss_ktn_req_line_detail_log.job_end_date      xxcss_ktn_req_line_detail_log.pull_from_date    xxcss_ktn_req_line_detail_log.pull_to_date       xxcss_ktn_req_line_detail_log.min_lid_date      xxcss_ktn_req_line_detail_log.max_lid_date      xxcss_ktn_req_line_detail_log.record_count
NULL    NULL    NULL    NULL    NULL    1970-01-01 00:00:00     0

1 ответ

Вы передаете неправильную строку формата. В частности, вы используете заглавную D (день в году) вместо строчной буквы "d". Вы, вероятно, также хотите использовать заглавную H вместо строчной h, поскольку в нижнем регистре это время 12 часов утра / вечера.

Попробуй вместо

hive> select from_unixtime(unix_timestamp(),'yyyy-MM-dd 00:00:01')
      from single_customer;
OK
2015-12-15 00:00:01
hive> select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss')  
from single_customer;
OK
2015-12-15 08:25:22

Обратите внимание, что "гггг-ММ-дд ЧЧ: мм: сс" является значением по умолчанию, поэтому вы можете просто использовать

hive> select from_unixtime(unix_timestamp()) from single_customer;
OK
2015-12-15 08:27:16

Hive использует Java для форматов дат, поэтому вы должны проверить это: http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

Другие вопросы по тегам