Я создаю AWL Glue ETL, который извлекает данные из одного пути S3, переносит некоторые данные в новую «таблицу» и переносит данные обратно в другой путь S3. Структура, в которой находятся данные назначения, разбита на разделы, что-то вроде:
Ковш / Path / год / месяц / день / час / метка времени
ETL запускается один или несколько раз в день (не определено), и из-за организационных ограничений я не могу переместить и / или удалить что-либо из корзин S3. Каждый ETL приводит к данным, которые являются текущим представлением каждой сущности в исторических данных источника - это происходит и записывает в новую «папку» каждый раз при запуске ETL.
Поскольку я не могу ничего удалить из целевого пути S3, конечные пользователи должны запросить итоговую таблицу каталога и выполнить поиск только самой последней отметки времени. Я бы предпочел, чтобы программа-обходчик сканировала только самые последние метки времени, в результате чего получалась полная картина самых последних текущих данных сущностей в таблице каталога, исключая что-либо историческое. Возможно ли это с помощью шаблонов include и exclude в пути?
Также обратите внимание: я использую CloudFormation для создания сканеров, ETL и т. Д. Язык, который я выбрал в CF, - это YAML.
Одна вещь, которую я рассмотрел, - это написание политики жизненного цикла S3 для архивации старых данных в другой регион при каждом запуске ETL. В чем я еще не уверен, так это: Может ли политика жизненного цикла сработать после завершения ETL и b.
Может ли политика жизненного цикла удалить все, кроме самой последней отметки времени? Я еще не полностью изучил этот вариант.
### Parameter Creation ###
S3CurrentPathLake:
Type: AWS::SSM::Parameter
Properties:
Description: "Path in the S3 Lake where the current data is stored."
Type: String
Value: 'Data/Entity/Current'
Name: "/org/member/local/s3/path/CurrentLake"
### Stack Creation ###
DestinationCrawlerStack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: /home/ec2-user/crawler.yaml
Parameters:
S3DataBucket: !Sub "${S3DataBucket}"
S3Path: !GetAtt S3CurrentPath.Value
IAMRoleArn: !Sub "${GlueServiceArn}"
DatabaseName: !Sub "${GlueDatabaseName}"
CrawlerDescription: Crawls the destination data (i.e. current data)
CrawlerName: current-crawler
Конечным результатом будет то, что сканер будет сканировать только самую последнюю временную метку в пути Data/Entity/Current/year/month/day/hour/timestamp/file.json
Я открыт для других предложений по решению этой проблемы.