Hive 如何从字段在配置单元中进行动态插入?

Hive 如何从字段在配置单元中进行动态插入?,hive,hiveql,Hive,Hiveql,我有一个专栏,其中有几个日期,如下所示: 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_DAT

我有一个专栏,其中有几个日期,如下所示:

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;
如何进行此插入?

使用动态分区:

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;
最好使用yyyy MM dd日期格式,因为这是本机配置单元日期格式:

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;
使用动态分区:

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;
最好使用yyyy MM dd日期格式,因为这是本机配置单元日期格式:

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;