python DynamoDB扫描操作不返回所有记录

时间:2017-10-07 06:57:53

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

在DynamoDB表中,我有 161712条记录,申请时没有任何过滤器,我收到的扫描计数值仅为10589

这是mytable meta

{
  "AttributeDefinitions": [
    {
      "AttributeName": "question_id",
      "AttributeType": "N"
    },
    {
      "AttributeName": "timestamp",
      "AttributeType": "S"
    }
  ],
  "TableName": "users_answers",
  "KeySchema": [
    {
      "AttributeName": "timestamp",
      "KeyType": "HASH"
    },
    {
      "AttributeName": "question_id",
      "KeyType": "RANGE"
    }
  ],
  "TableStatus": "ACTIVE",
  "CreationDateTime": "2017-09-12T12:33:22.615Z",
  "ProvisionedThroughput": {
    "LastIncreaseDateTime": "2017-09-12T16:46:26.742Z",
    "NumberOfDecreasesToday": 0,
    "ReadCapacityUnits": 80,
    "WriteCapacityUnits": 80
  },
  "TableSizeBytes": 16014441,
  "ItemCount": 161712
}

当我在上面执行扫描操作时,只会获得10589条记录

table = dynamo.get_table('answer_options')
x    = table.scan()

请建议我如何从表中获取整个记录

  

Env:python 3.5.1,flask dynamodb

提前致谢

1 个答案:

答案 0 :(得分:3)

DynamoDB每个请求只返回1MB。在获得整个数据集之前,您必须循环并发出多个请求。

来自DynamoDB docs

  

DynamoDB对扫描操作的结果进行分页。通过分页,扫描结果被划分为大小为1 MB(或更小)的数据“页面”。应用程序可以处理结果的第一页,然后处理第二页,依此类推。

     

单次扫描仅返回符合1 MB大小限制的结果集。要确定是否有更多结果,并一次检索一页,应用程序应执行以下操作:

     
      
  1. 检查低级扫描结果:

         
        
    • 如果结果包含LastEvaluatedKey元素,请继续执行步骤2.
    •   
    • 如果结果中没有LastEvaluatedKey,则无法再检索任何项目。
    •   
  2.   
  3. 构造一个新的扫描请求,其参数与前一个相同 - 但这一次,从步骤1获取LastEvaluatedKey值,并将其用作新扫描请求中的ExclusiveStartKey参数。

    < / LI>   
  4. 运行新的扫描请求。

  5.   
  6. 转到第1步。

  7.