Как сделать динамическую вставку в улей с поля? - PullRequest
1 голос
/ 31 марта 2019

У меня есть столбец, в котором у меня есть несколько дат, как показано ниже:

Sun Oct 22 05:35:03 2017
Mon Apr 16 14:33:43 2018
Fri Apr 13 10:41:43 2018

Я создал процесс для фильтрации этих дат и преобразования в YYYYMMDD, как показано ниже.

20171022
20180416
20180413

Этот результат будет использоваться для распределения данных по соответствующим разделам, которые выполняются ежедневно.

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

insert into table tab2
PARTITION (REFERENCE_DATE = from_unixtime (unix_timestamp ('Sun Oct 22 05:35:03 2017', 'E MMM dd HH: mm: ss yyyy'), 'yyyyMMdd'))
SELECT
from_unixtime (unix_timestamp ('Sun Oct 22 05:35:03 2017', 'E MMM dd HH: mm: ss yyyy'), 'yyyyMMdd') as reference_date
FROM tab1 LIMIT 100;

как сделать эту вставку?

1 Ответ

0 голосов
/ 01 апреля 2019

Использовать динамический раздел:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

insert into table tab2
PARTITION (REFERENCE_DATE)
SELECT
from_unixtime (unix_timestamp ('Sun Oct 22 05:35:03 2017', 'E MMM dd HH: mm: ss yyyy'), 'yyyyMMdd') as reference_date
FROM tab1 LIMIT 100;

Лучше использовать формат даты гггг-мм-дд, поскольку это собственный формат даты Hive:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

insert into table tab2
PARTITION (REFERENCE_DATE)
SELECT
      from_unixtime (unix_timestamp('Sun Oct 22 05:35:03 2017', 'E MMM dd HH: mm: ss yyyy'), 'yyyy-MM-dd') as reference_date
FROM tab1 LIMIT 100;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...