我们想将数据从dynamo数据库导出到文件中。我们大约有150,000条记录,每条记录为430字节。这将是每周一次的定期活动。我们可以用lambda做到吗? lambda最多可以执行15分钟吗?
如果有更好的选择使用python或通过UI,因为我无法从UI导出100条以上的记录?
答案 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 glue或EMR 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有关。