Сначала я проверю ключ удаленного файла и обновлю только таблицу, которая указывает на префикс, куда был удален файл.Например, если ваши папки и таблицы prefix0
, prefix1
, prefix2
и т. Д., А у удаленного файла есть ключ prefix1/some-file
, вы обновляете только таблицу с местоположением prefix1
.Нет необходимости обновлять другие таблицы, их данные не изменились.
Однако я бы предложил не использовать MSCK REPAIR TABLE
для этого.Эта команда ужасна почти всеми возможными способами.Это крайне неэффективно, и его производительность становится все хуже и хуже, когда вы добавляете больше объектов в префикс таблицы.Похоже, вы не ждете, пока он завершится в вашей лямбде, поэтому, по крайней мере, вы не платите за его неэффективность, но есть гораздо лучшие способы добавления разделов.
Вы можете использовать API Glueнепосредственно (под капотами таблиц Athena находятся таблицы в каталоге Glue), но это на самом деле немного сложно показать, так как вам нужно указать много метаданных (обратная сторона Glue API).
Я быПредположим, что вместо MSCK REPAIR TABLE …
вы делаете ALTER TABLE ADD PARTITION …
:
Измените строку
sql = 'MSCK REPAIR TABLE some_database.some_table'
на
sql = 'ALTER TABLE some_database.some_table ADD IF NOT EXISTS PARTITION (…) LOCATION \'s3://…\''
Части, где написано …
вам придется извлечь из ключа объекта.Если ваши ключи выглядят как s3://some-bucket/pk0=foo/pk1=bar/object.gz
, а ваша таблица имеет ключи разделения pk0
и pk1
, SQL будет выглядеть так:
ALTER TABLE some_database.some_table
ADD IF NOT EXISTS
PARTITION (pk0 = 'foo', pk1 = 'bar') LOCATION 's3://some-bucket/pk0=foo/pk1=bar/'