我正在构建一个AWS Glue ETL,该ETL从一个S3路径提取,将一些数据透视到一个新的“表”中,然后将数据放回到另一个S3路径中。目标数据所在的结构是分区的,因此类似:
存储桶/路径/年/月/日/小时/时间戳
ETL每天运行一次或多次(不确定),由于组织上的限制,我无法移动和/或删除S3存储桶中的任何内容。每个ETL产生的数据都是历史源数据中每个实体的当前视图,这种情况会发生,并在每次运行ETL时写入新的“文件夹”。
由于我无法从目标S3路径中删除任何内容,因此最终用户必须查询生成的目录表并仅搜索最新的时间戳。我更希望爬网程序只爬网最近的时间戳,从而得到目录表中最新的当前实体数据的全貌,不包括任何历史记录。是否可以在路径中使用包含和排除模式?
还要注意:我正在使用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
中的最新时间戳进行爬网
我愿意接受其他建议来解决此问题。