ScannedCount小于记录总数,结果在dynamoDB中为零

时间:2017-10-14 13:54:03

标签: amazon-dynamodb

我在dynamoDB AWS上面临一个奇怪的问题 - 我使用AWS API Gateway查询我的表 - AWS Service Proxy,我得到Count:0结果,ScannedCount在总共10000条记录中约有2500条记录。只是为了确认我在我的表中需要数据,我在DynamoDB上使用Scan Operation。

我无法理解的是ScannedCount小于完整表记录的原因。这是否应该发生

1 个答案:

答案 0 :(得分:1)

根据DynamoDB documentationScannedCount是dynamodb查看当前请求的项目数,Count是与您的过滤器匹配的项目数:

  

计算结果中的项目

     

除了符合条件的项目外,查询响应还包含以下元素:

     
      
  • ScannedCount - 在应用过滤器表达式(如果存在)之前与键条件表达式匹配的项目数。
  •   
  • 计数 - 应用过滤器表达式(如果存在)后剩余的项目数。**
  •   
     

请注意

     

如果您不使用过滤器表达式,则ScannedCount和Count将具有相同的值。

     

如果查询结果集的大小大于1 MB,则ScannedCount和Count将仅表示总项目的部分计数。您需要执行多个查询操作才能检索所有结果(请参阅分页结果)

     

每个查询响应都将包含特定查询请求处理的项目的ScannedCount和Count。要获取所有Query请求的总计,您可以保持ScannedCount和Count的运行记录。

因此,在您的情况下,扫描经历了前2500条记录(ScannedCount为2500),并且没有与您的过滤器匹配的结果(Count为零)。

要扫描表格中的其余数据,您需要按照here所述的分页参数重复请求:

  

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

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

根据语言的不同,您可以找到一个为您添加分页的库,例如python为boto2 high-level dynamodb client或boto3为"paginator"