Amazon web services 使用AWS Lambda更改S3中的CSV文件

Amazon web services 使用AWS Lambda更改S3中的CSV文件,amazon-web-services,amazon-s3,aws-lambda,amazon-dynamodb,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Dynamodb,是否有一种方法可以让每个用户的dynamodb行在s3中使用csv文件进行备份 然后使用streams,当一行发生变化时,在csv文件的s3中更改该行 目前存在的csv阅读器旨在解析csv,以便在lambda中使用 然而,我希望找到流给出的特定行,然后用另一行替换它,而不必将整个文件加载到内存中,因为它可能相当大。我希望在s3上进行备份的原因是,将来我需要对其进行批处理,并在短时间内从dynamo读取300k文件,这是不可取的。从s3读取数据,使用您喜爱的库解析为csv并进行更新,然后写回s3:

是否有一种方法可以让每个用户的dynamodb行在s3中使用csv文件进行备份

然后使用streams,当一行发生变化时,在csv文件的s3中更改该行

目前存在的csv阅读器旨在解析csv,以便在lambda中使用


然而,我希望找到流给出的特定行,然后用另一行替换它,而不必将整个文件加载到内存中,因为它可能相当大。我希望在s3上进行备份的原因是,将来我需要对其进行批处理,并在短时间内从dynamo读取300k文件,这是不可取的。

从s3读取数据,使用您喜爱的库解析为csv并进行更新,然后写回s3:

import io
import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('mybucket')

with io.BytesIO() as data:
    bucket.download_fileobj('my_key', data)

    # parse csv data and update as necessary
    # then write back to s3

    bucket.upload_fileobj(data, 'my_key')

请注意,如果您希望对象追加或更新,S3不支持对象追加或更新,请参见。您只能读取和覆盖。在设计系统时,您可能会考虑到这一点。

您可以使用dynamodb更新时触发的lambda:@avigil我遇到的问题是,让lambda更新文件。作为从s3读取它的一种方式,找到行并更新它。例如,我使用了fast csv,它只允许我解析行而不更新行。您需要读入S3对象的内容,解析它并根据需要进行更新,然后用更新的版本覆盖对象。请参阅S3或@avigil的
boto3
文档。我希望避免将整个文件读入lambda,只更新一个文件。如果使用S3,很遗憾您无法做到这一点。考虑切换到数据库以便于增量更新。这样,如果文件很大,那么我需要读取并重写整个文件返回S3。是的,但这是S3中唯一的方法。制作许多小物件,这不会是一个问题。