【问题标题】:Boto3 dynamodb query on a table with 10Gb sizeBoto3 dynamodb 查询 10Gb 大小的表
【发布时间】:2017-03-23 02:36:36
【问题描述】:

我一直在尝试获取我的 GSI 之一上的所有记录,并且发现只有在我进行扫描时,才有一个选项可以在响应中使用 LastEvaluatedKey 进行循环。我没有找到更好的方法来使用pagination 在boto3 中使用查询。是否可以使用查询进行分页。

导入 boto3 from boto3.dynamodb.conditions import Key, Attr

dynamodb = boto3.resource('dynamodb')
res = table.query(
    TableName='myTable',
    IndexName='my-index',
    KeyConditionExpression=Key('myVal').eq(1)
)
while 'LastEvaluatedKey' in res:

   for item in res['Items']:
       print item #returns only a subset of them

【问题讨论】:

  • 请提供更多关于您想要实现的目标的详细信息。
  • 我正在尝试查询索引以获取 dynamodb 表中的所有记录。上面的代码 sn-p 只返回了 100 条记录,而有数百万条记录。无法使用查询功能进行分页。我可以使用扫描进行分页。

标签: amazon-dynamodb boto3


【解决方案1】:

文档中提到了boto3.dynamodb.table.query()的限制:1MB数据。

你只能使用Paginator.Query返回迭代器(这是有道理的)。

看来您可以将 table.query 替换为 Paginator.Query。试试看。

注意事项: boto3.resource() 有一个问题:并非所有资源服务都已实现。所以对于 dynamodb 分页生成器,这就是其中一种情况。

import boto3 
dyno_client = boto3.client('dynamodb')
paginator = dyno_client.get_paginator('query')
response_iterator = paginator.paginate(.....) 

【讨论】:

  • 编辑了上面的代码。现在有这个错误跟踪。 AttributeError:“dynamodb.ServiceResource”对象没有属性“get_paginator”
  • @Zzz :当 resource.() 未构建时,责备 boto3 ;-) 。实际上,您只能使用客户端,即paginator = client.get_paginator('query')
  • 不走运。我也厌倦了。
  • @Zzz 你遇到了什么错误?声明分页器查询类时没有看到任何错误。
  • 我用过 LastEvaluatedKey 并且为我解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
  • 2018-10-31
相关资源
最近更新 更多