0

我有一个要求,我需要将存储桶中的所有 JSON 文件转换为一个新行分隔的 JSON 以供第 3 方使用。但是,我需要确保每个新创建的新分隔 JSON 仅包含过去 24 小时内收到的文件,以避免一遍又一遍地选择相同的文件。这可以在s3.getObject(getParams, function(err, data)函数内部完成吗?任何有关不同方法的建议表示赞赏

谢谢

4

1 回答 1

1

您可以尝试 S3 ListObjects 操作并通过 LastModified 元数据字段过滤结果。对于新对象,LastModified 属性将包含文件创建时间的信息,但对于更改的文件 - 上次修改时间。

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#listObjectsV2-property

还有一种更复杂的方法,将 Amazon Athena 与 AWS Glue 服务结合使用,但这需要修改您的 S3 对象键以拆分为分区,其中分区将是日期时间的键。例如:

  • s3://bucket/reports/date=2019-08-28/report1.json
  • s3://bucket/reports/date=2019-08-28/report2.json
  • s3://bucket/reports/date=2019-08-28/report3.json
  • s3://bucket/reports/date=2019-08-29/report1.json

这种方法可以通过两种方式实现,具体取决于您的文件架构。如果您的所有 JSON 文件具有相同的格式/属性/架构,那么您可以创建一个 Glue 表,添加根报告路径作为该表的源,添加日期分区值 (2019-08-28) 并使用 Amazon Athena使用常规 SELECT * FROM 报告查询数据 WHERE date='2019-08-28'。如果没有,则使用 JSON 分类器创建一个 Glue 爬虫,它将填充您的表,然后使用相同的 Athena - 将这些数据查询到一个组合的 JSON 文件

https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-samples-legislators.html

于 2019-08-28T23:01:43.897 回答