Раздел Hive По динамическому значению в имени файла s3 - PullRequest
0 голосов
/ 01 марта 2019

Предполагается, что местоположение 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;

Создаетсначала неразделенный стол?

...