Стол Афины с несколькими местами

Мои данные распределены по нескольким каталогам и нескольким файлам, разделенным табуляцией, в этих каталогах. Общая структура выглядит так:

s3://bucket_name/directory/{year}{month}/{iso_2}/{year}{month}{day}_table.bcp.gz

где {year} - год из 4 цифр, {month} - месяц из 2 цифр, {day} - день из 2 цифр, а {iso_2} - код страны ISO2.

Как мне установить это как стол в Афине?


person RoyalTS    schedule 23.01.2017    source источник


Ответы (1)


Athena использует Hive DDL, поэтому вам просто нужно запустить обычный оператор создания Hive:

CREATE EXTERNAL TABLE table_name(
  col_1 string,
...
  col_n string)
PARTITIONED BY (
   year_month string,
   iso_2 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION 's3://bucket_name/directory/';

Затем зарегистрируйте эти каталоги как новые разделы в требуемой таблице, запустив MSCK REPAIR TABLE table_name. Если это не удается по какой-либо причине (что иногда происходит в Athena), вам необходимо выполнить все операторы добавления раздела для ваших существующих каталогов:

ALTER TABLE table_name ADD PARTITION 
     (year_month=201601,iso=US) LOCATION 's3://bucket_name/directory/201601/US/'; 
ALTER TABLE table_name ADD PARTITION 
     (year_month=201602,iso=US) LOCATION 's3://bucket_name/directory/201602/US/';
ALTER TABLE table_name ADD PARTITION 
     (year_month=201601,iso=GB) LOCATION 's3://bucket_name/directory/201601/GB/';
etc.
person belostoky    schedule 24.01.2017
comment
Есть ли способ сделать ALTER автоматически? Например, Афина забирает их, не указывая их снова и снова? здесь похоже, что мы можем т. - person ignorance; 19.10.2017