S3文件名中的动态值配置单元分区

时间:2019-03-01 15:47:06

标签: hadoop hive partitioning hadoop-partitioning

假定具有所需数据的S3位置的格式为:

s3://stack-overflow-example/v1/

v1/中每个文件标题的格式为

francesco_{YYY_DD_MM_HH}_totti.csv

每个csv文件在每行的一列中都包含一个unix时间戳。

是否可以在每个文件名 中创建由{YYY_DD_MM_HH}分区的外部配置单元表,而无需先创建未分区的表

我尝试了以下方法:

create external table so_test 
(
a int,
b int,
unixtimestamp string
)
PARTITIONED BY (
 from_unixtime(CAST(ord/1000 as BIGINT), 'yyyy-MM-dd') string
)
LOCATION 's3://stack-overflow-example/v1'

但是失败了。

一个可行的选择是创建一个未分区的表,如下所示:

create external table so_test 
(
a int,
b int,
unixtimestamp string
);
LOCATION 's3://stack-overflow-example/v1'

,然后动态插入分区表中:

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

create external table so_test_partitioned 
(
a int,
b int,
unixtimestamp string
)
PARTITIONED BY (
 datep string
)
LOCATION 's3://stack-overflow-example/v1';



INSERT OVERWRITE TABLE so_test_partitioned PARTITION (date)
select 
a,
b,
unixtimestamp,
from_unixtime(CAST(ord/1000 as BIGINT), 'yyyy-MM-dd') as datep,
from so_test;

是唯一创建未分区表的唯一方法吗?

0 个答案:

没有答案