Dynamodb更新具有多个键值的多个列表项

时间:2019-01-29 11:46:13

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

我们正在更新Excel表中用于特定事件ID的数据,我们需要从dynamodb表中检索特定事件ID的主键项,并需要在excel中更新值。

手动完成几篇文章是可以的。但是,如果我们需要更新10000个事件ID值,我们如何通过python或任何其他方法自动执行此过程?请协助

2 个答案:

答案 0 :(得分:0)

如果您要问如何在Excel中自动执行此操作,则一种选择是使用您最喜欢的.NET语言使用Office Interop API for Excel(对于这种任务,C#确实很容易使用)。 Dynamo具有.NET的客户端SDK,再次使查询源表相对容易。

对于Dynamo的.Net SDK,请从这里开始:https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/dynamodb-intro.html

对于Office自动化,您有两个选择:

  1. 您可以编写一个与Excel交互并处理文件的.Net应用程序,从Dynamo中读取
  2. 您可以尝试通过脚本使用Excel中的自动化功能(但是我不确定与AWS开发工具包上的外部依赖关系能很好地发挥作用)

对于后者,您可以从这里开始:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/interop/how-to-access-office-onterop-objects

有许多使用C#自动化Excel的示例。如果您发现自己特别专注于某件事,请随时在SO上提问,但问题越集中,您将获得更快,更好的答案。

关于您完成特定任务的方法,我会:

  • 制作一个控制台应用程序,以打开要编辑的Excel文档(工作簿)
  • 枚举工作表并选择您需要更新的工作表(大概是第一个?!)
  • 然后,对于工作表中的每一行,从相应的单元格中读取eventid
  • 进行DynamoDB查询并获取该事件所需的数据
  • 更新该行的单元格
  • 对所有行重复此操作,直到完成

作为一种潜在的优化方法,如果Dynamo中没有太多记录(10,000个数字非常低),我会考虑先将Dynamo表扫描到内存中,然后再在内存中进行查找。这具有额外的好处,那就是它将大大便宜。扫描所有10K项并将其存储在内存中通常比对每个项进行单独的Get请求便宜15-20倍。

答案 1 :(得分:0)

按照以下步骤完成dynamodb更新

1。我们已将源csv数据读取并转换为字典

with open('test.csv', 'r') as f:   reader = csv.reader(f)   your_list
= list(reader) list_1=[] dict1={} for i in range(1, len(your_list)):
    dict1[your_list[0][0]]=your_list[i][0]
    dict1[your_list[0][1]]=your_list[i][1]
    dict1[your_list[0][2]]=your_list[i][2]
    dict1[your_list[0][3]]=your_list[i][3] list_1.append(dict1)
    dict1={}

我没有在此处复制完整的脚本,只是粘贴了一个小批处理脚本

2。使用dynamodb扫描操作比较了源和目标中的eventid

我们在这里遇到了数据检索问题,一次可以在dynamodb中获得1 MB的数据

3。我们已使用dynamodb表验证了每个批次记录,并完成了更新过程