将数据从dynamo db导出到csv文件

2024-03-28 18:45:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我们想将数据从dynamo db导出到一个文件。我们有大约150000条记录,每条记录有430字节。这将是一项每周一次的定期活动。我们可以用lambda来做吗?lambda的最大执行时间是否可能为15分钟

如果有更好的选择使用python或通过UI,因为我无法从UI导出超过100条记录


Tags: 文件数据lambdauidb字节记录时间
3条回答

一个非常简单的选择是使用命令行界面工具

aws dynamodb scan --table-name YOURTABLE --output text > outputfile.txt

这将为您提供以制表符分隔的输出。您可以将其作为常规输出的cronjob运行

扫描不需要15分钟(可能只需要几秒钟)。所以如果你这样做的话,你就不必担心你的Lambda超时了

您可以通过多种方式从dynamodb导出数据

最简单的方法是全表扫描:

dynamodb = boto3.client('dynamodb')

response = dynamodb.scan(
    TableName=your_table,
    Select='ALL_ATTRIBUTES')

data = response['Items']

while 'LastEvaluatedKey' in response:
    response = dynamodb.scan(
        TableName=your_table,
        Select='ALL_ATTRIBUTES',
        ExclusiveStartKey=response['LastEvaluatedKey'])

    data.extend(response['Items'])

# save your data as csv here

但如果你想每x天做一次,我建议你:

使用上面的代码从表中创建第一个转储

然后,您可以为lambda函数创建dynamodb触发器,该函数将接收所有表更改(插入、更新、删除),然后您可以将数据附加到csv文件中。代码类似于:

def lambda_handler(event, context):
    for record in event['Records']:
        # get the changes here and save it

因为您只会收到表更新,所以不必担心lambda的15分钟执行时间

您可以在此处阅读有关dynamodb流和lambda的更多信息:DynamoDB Streams and AWS Lambda Triggers

如果你想处理你的数据,你可以创建一个aws glueEMR cluster

伙计们,我们使用AWS lambda解决了这个问题,150000条记录(每条记录430字节)在2.2分钟内使用最大可用内存(3008 mb)处理成csv文件。为定期运行创建了一个事件规则。写时间和大小是为了让任何人都能计算出他们能用lambda做多少

相关问题 更多 >