AWS Клей, не удаляющий или осуждающий таблицы, сгенерированные поверх удаленных данных S3 - PullRequest
3 голосов
/ 18 января 2020

Из-за ошибки пользователя наш каталог S3, в котором обычно работал сканер Glue, был залит файлами .csv. Когда Glue запускал каталог S3, он создавал таблицу для каждого из 200 000+ CSV-файлов. Вскоре после этого я запустил скрипт, который удалил файлы .csv (в корзине S3 включено управление версиями), и заново запустил сканер Glue со следующими настройками:

Schema updates in the data store    Update the table definition in the data catalog.
Inherit schema from table   Update all new and existing partitions with metadata from the table.
Object deletion in the data store   Delete tables and partitions from the data catalog.

В журналах cloudwatch - это обновление таблиц сопоставление оставшихся данных, но оно не удаляет таблицы, сгенерированные из этих файлов .csv. В соответствии с его журналом конфигурации в Cloudwatch - он должен это делать.

INFO : Crawler configured with Configuration 
{
    "Version": 1,
    "Grouping": {
        "TableGroupingPolicy": "CombineCompatibleSchemas"
    }
}
 and SchemaChangePolicy 
{
    "UpdateBehavior": "UPDATE_IN_DATABASE",
    "DeleteBehavior": "DELETE_FROM_DATABASE"

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

Я зашла в тупик, в чем может быть проблема; в его нынешнем виде я могу написать сценарий для сопоставления с образцом существующих таблиц и удалить таблицы с csv в названии или удалить и перестроить базу данных, используя Glue для повторного сканирования S3, но если это возможно, я бы предпочел, чтобы Glue отбрасывал таблицы после идентификации они указывают на отсутствие файлов в самой S3.

1 Ответ

3 голосов
/ 21 января 2020

В настоящее время я использую сценарий для удаления таблиц, созданных Афиной. Все сгенерированные файлы из запросов Athena имеют длину 49 символов, имеют пять символов _ для файла результатов и шесть _ для метаданных, и, как правило, следуют формату окончания _csv для результатов результирующего запроса, и _csv_metadata для метаданных запроса.

Я получаю список всех имен таблиц в моей базе данных, фильтруя его, включая только те, которые имеют длину 49 символов, заканчиваются _csv_metadata и имеют шесть _ персонажей внутри них. Я перебираю каждую строку и удаляю соответствующую таблицу в базе данных. Для результирующего запроса, который заканчивается на _csv, я обрезаю последние девять символов строки _csv_metadata, которая обрезает _metadata.

Если бы я улучшил это, я ' также выполните запрос к таблице и убедитесь, что в ней нет данных и она соответствует определенным определениям имен столбцов.

...