AWS Glue Crawler, сканировать только последние метки времени в пути - PullRequest
0 голосов
/ 12 апреля 2019

Я создаю 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

Я открыт для других предложений по решению этой проблемы.

...