Работает ли иерархическое разбиение в AWS Athena / S3? - PullRequest
1 голос
/ 30 апреля 2020

Я новичок в AWS и пытаюсь использовать S3 и Athena для варианта использования.

Я хочу, чтобы данные, сохраненные как json файлы в S3, запрашивались из Афины. Чтобы уменьшить сканирование данных, я создал структуру каталогов, подобную этой:

../customerid/date/*.json (format)

../100/2020-04-29/*.json
../100/2020-04-30/*.json
.
.
../101/2020-04-29/*.json

В Афине структура таблиц была создана в соответствии с ожидаемыми данными, и были созданы 2 раздела, а именно customer (customerid) и dt ( date).

Я хочу запросить все данные для клиента '100' и ограничить сканирование только его каталогом, для которого я пытаюсь загрузить раздел следующим образом

alter table <table_name> add
partition (customer=100) location 's3://<location>/100/’

But I get the following error

FAILED: SemanticException partition spec {customer=100} doesn't contain all (2) partition columns

Ясно, что его не загружается один раздел при создании нескольких разделов

Предоставление обоих разделов в таблице изменения

alter table <table_name> add
partition (customer=100, dt=2020-04-22) location 's3://<location>/100/2020-04-22/'

I get this error

missing 'column' at 'partition' (service: amazonathena; status code: 400; error code: invalidrequestexception;

Я что-то не так делаю?

Это даже работает? Если нет, то есть ли способ работы с иерархическими разделами?

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Я понял ошибку, которую я совершил, поэтому хотел поделиться, если кто-то окажется в такой же ситуации.

Для данных, не разбитых на части в формате улья (см. это для улья и не -hive format)

Используя приведенный выше пример, ниже приводится команда alter, которая работает

alter table <table_name> add
partition (customer=100, dt=date '2020-04-22') location 's3://<location>/100/2020-04-22/'

Обратите внимание на изменение синтаксиса раздела "dt". Так как для моего типа данных раздела был задан тип "date", и при его использовании не использовалась его при загрузке раздела.

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

alter table <table_name> add
partition (customer=100, dt='2020-04-22') location 's3://<location>/100/2020-04-22/'

Я предпочитаю указывать тип данных даты при добавлении, так как я настроил свой раздел.

Надеюсь, это поможет.

0 голосов
/ 30 апреля 2020

Проблема связана с предоставленной вами иерархической структурой S3. это должно быть

../customer=100/dt=2020-04-29/*.json

вместо

../100/2020-04-29/*.json

Если у вас есть данные в S3, сохраненные в правильной структуре префикса, как упоминалось, то вы можете добавить разделы с простым восстановлением msck msck repair table <table_name> Команда.

Надеюсь, это проясняет

...