代码之家  ›  专栏  ›  技术社区  ›  Aman B

将文件复制并合并到另一个S3存储桶

  •  0
  • Aman B  · 技术社区  · 5 年前

    我有一个源bucket,每秒都会插入5KB的JSON文件。 我想使用AWS Athena通过使用AWS Glue数据源和爬虫来查询文件。 larger file sizes .

    所以我想把文件从源bucket复制到bucket2并合并它们。

    我计划使用S3事件为创建的每个文件在AWS SQS中放置一条消息,然后使用一批x SQS消息调用一个lambda,读取这些文件中的数据,合并并将它们保存到目标bucket。bucket2将成为AWS胶水爬虫的来源。

    这是最好的方法还是我遗漏了什么?

    0 回复  |  直到 5 年前
        1
  •  1
  •   John Rotenstein    5 年前

    与AmazonS3中每秒接收5KB JSON文件不同,最好的情况是通过 Amazon Kinesis Data Firehose 根据大小或时间段自动组合数据 . 它将输出更少、更大的文件。

    细微变化 要更改当前设置,请执行以下操作:

    • 然后,Kinesis Firehose按大小或时间批处理数据

    Snappy压缩拼花文件 . 此文件格式对于查询非常有效。但是,您的问题是文件每秒都会到达,因此很难批量查询传入的文件(这样您就知道哪些文件已加载,哪些已加载) 已加载)。乱码可以是执行以下操作的脚本:

    • batch/ )
    • 在Athena中创建一个指向最终数据的外部表(例如 final/ )
    • incoming/
    • 定期触发Lambda函数,该函数将列出 传入/ ,复制到 批处理/ 并从中删除这些源对象 传入/ (在此复制过程中到达的任何对象都将留给下一批处理)
    • INSERT INTO final SELECT * FROM batch
    • 删除文件的内容 批处理/ 目录

    这将把数据附加到 final

    但是,即使您需要触发Lambda将文件发送到消防软管,Kinesis Firehose选项也更简单。

        2
  •  0
  •   Gaurav Lanjekar    5 年前