Команда AWS Athena MSCK REPAIR TABLE tablename - PullRequest
0 голосов
/ 25 марта 2019

Есть ли какое-то количество разделов, которые мы ожидаем от этой команды

MSCK REPAIR TABLE tablename;

не включиться?

У меня есть система, которая в настоящее время имеет более 27 тысяч разделов, и изменения схемы для таблицы Athena, мы отбрасываем таблицу, воссоздаем таблицу, скажем, новые столбцы привязаны к концу, и затем запускаем

MSCK REPAIR TABLE tablename;

Нам не повезло с этой командой, выполняющей какую-либо работу, что происходит каждый раз после того, как мы позволяем ей работать в течение 5 часов. Не было добавлено ни одного раздела. Хотите знать, есть ли у кого-нибудь информация о пределе количества разделов, которое мы, возможно, достигли, но нигде не можем найти документально подтвержденного.

1 Ответ

2 голосов
/ 25 марта 2019

MSCK REPAIR TABLE - крайне неэффективная команда. Я действительно хотел бы, чтобы документация не поощряла людей использовать это.

Что делать вместо этого зависит от ряда вещей, которые являются уникальными для вашей ситуации.

В общем случае я бы порекомендовал написать сценарий, который выполнял бы списки S3 и создавал список разделов с их расположением, а также использовал Glue API BatchCreatePartition для добавления разделов в вашу таблицу.

Когда ваше местоположение S3 содержит много файлов, как это звучит у вас, я бы либо использовал S3 Inventory , чтобы избежать перечисления всего, либо перечислил объекты с разделителем /, чтобы я мог перечислить только часть структуры каталогов / разделов и пропустить список всех файлов. Разделы 27K могут быть перечислены довольно быстро, если вы избегаете перечисления всего.

Glue's BatchCreatePartitions немного раздражает в использовании, поскольку вам нужно указывать все столбцы, serde и все для каждого раздела, но это быстрее, чем выполнение ALTER TABLE … ADD PARTION … и ожидание завершения выполнения запроса - и до смешного быстрее, чем MSCK REPAIR TABLE ….

Когда дело доходит до добавления новых разделов в существующую таблицу, вы также никогда не должны использовать MSCK REPAIR TABLE, по большей части по тем же причинам. Почти всегда, когда вы добавляете новые разделы в таблицу, вы знаете местоположение новых разделов, и ALTER TABLE … ADD PARTION … или Glue's BatchCreatePartitions могут использоваться напрямую без необходимости сценариев.

Если процесс, который добавляет новые данные, отделен от процесса, который добавляет новые разделы, я бы порекомендовал настроить уведомления S3 в очередь SQS и периодически читать сообщения, объединять расположения новых файлов и составлять список новых разделов. из этого.

...