将数据从Dynamo DB导出到CSV文件

时间:2020-01-30 14:50:51

标签: python amazon-web-services aws-lambda amazon-dynamodb

我们想将数据从dynamo数据库导出到文件中。我们大约有150,000条记录,每条记录为430字节。这将是每周一次的定期活动。我们可以用lambda做到吗? lambda最多可以执行15分钟吗?

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

4 个答案:

答案 0 :(得分:1)

您可以通过多种方式从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

答案 1 :(得分:1)

我们使用AWS Lambda解决了该问题,使用最大可用内存(3008 mb)在1分钟内将150,000条记录(每条记录为430字节)处理为csv文件。为此创建了一个事件规则,使其定期运行。写下时间和大小,以便任何人都可以计算出自己可以使用lambda做多少事

答案 2 :(得分:0)

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

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

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

扫描将不会花费15分钟(可能只需几秒钟)的时间。这样一来,您就不必担心Lambda超时了。

答案 3 :(得分:0)

您可以在stackoverflow.上参考现有问题,该问题与将dynamo db表导出为csv有关。