Amazon dynamodb 带Select Count的Boto3 DynamoDb查询,不带分页

Amazon dynamodb 带Select Count的Boto3 DynamoDb查询,不带分页,amazon-dynamodb,boto3,aws-cli,dynamodb-queries,Amazon Dynamodb,Boto3,Aws Cli,Dynamodb Queries,这更像是一个概念澄清。我可以使用Boto3通过使用上一个响应的LastEvaluatedKey重复查询找到实际计数 我想计算符合dynamoDb中特定条件的项目。我使用的是“select=count”,根据文档[1],它应该只返回匹配项目的计数,我的假设是不会对响应进行分页 计数-返回匹配项的数量,而不是匹配项的数量 项目本身 当我通过aws cli进行尝试时,我的假设似乎是正确的(如文档[1]中的rest api示例) 但是当我尝试使用Python3和Boto3时,响应被分页,我必须重复查询,

这更像是一个概念澄清。我可以使用Boto3通过使用上一个响应的LastEvaluatedKey重复查询找到实际计数

我想计算符合dynamoDb中特定条件的项目。我使用的是“select=count”,根据文档[1],它应该只返回匹配项目的计数,我的假设是不会对响应进行分页

计数-返回匹配项的数量,而不是匹配项的数量 项目本身

当我通过aws cli进行尝试时,我的假设似乎是正确的(如文档[1]中的rest api示例)

但是当我尝试使用Python3和Boto3时,响应被分页,我必须重复查询,直到LastEvaluatedKey为空

In [22]: table.query(IndexName='classification-date-index', Select='COUNT', KeyConditionExpression= Key('classification').eq('INTERNAL') & Key('date').between('2020-04-10', '2020-04-25'))

Out[22]:
{'Count': 5667,
 'ScannedCount': 5667,
 'LastEvaluatedKey': {'classification': 'INTERNAL',
  'date': '2020-04-14',
  's3Path': '<redacted>'},
 'ResponseMetadata': {'RequestId': 'TH3ILO0P47QB7GAU9M3M98BKJVVV4KQNSO5AEMVJF66Q9ASUAAJG',
  'HTTPStatusCode': 200,
  'HTTPHeaders': {'server': 'Server',
   'date': 'Sat, 25 Apr 2020 13:32:36 GMT',
   'content-type': 'application/x-amz-json-1.0',
   'content-length': '230',
   'connection': 'keep-alive',
   'x-amzn-requestid': 'TH3ILO0P47QB7GAU9M3M98BKJVVV4KQNSO5AEMVJF66Q9ASUAAJG',
   'x-amz-crc32': '133035383'},
  'RetryAttempts': 0}}
[22]中的
table.query(IndexName='classification-date-index',Select='COUNT',KeyConditionExpression=Key('classification')。eq('INTERNAL')&Key('date')。介于('2020-04-10','2020-04-25'))
出[22]:
{'Count':5667,
“ScannedCount”:5667,
'LastEvaluatedKey':{'classification':'INTERNAL',
“日期”:“2020-04-14”,
's3Path':''},
'ResponseMetadata':{'RequestId':'TH3ILO0P47QB7GAU9M98BKJVV4KQNSO5AEMVJF66Q9ASUAJG',
“HTTPStatusCode”:200,
'HTTPHeaders':{'server':'server',
“日期”:“2020年4月25日星期六13:32:36 GMT”,
“内容类型”:“应用程序/x-amz-json-1.0”,
“内容长度”:“230”,
“连接”:“保持活动状态”,
“x-amzn-requestid”:“TH3ILO0P47QB7GAU9M98BKJVV4KQNSO5AEMVJF66Q9ASUAJG”,
'x-amz-crc32':'133035383'},
“RetryAttempts”:0}
我期望boto3sdk会有与awscli一样的行为,因为响应似乎小于1mb。 这些文件有点冲突

“分页表查询结果”[2]页面显示:

DynamoDB对查询操作的结果进行分页。使用分页, 查询结果被划分为1 MB大小的数据“页面” 尺寸(或更小)。应用程序可以处理第一页的结果, 然后是第二页,依此类推。单个查询只返回一个结果 设置适合1 MB大小限制的大小

而“查询”[1]页面显示:

单个查询操作最多可读取最大项数 设置(如果使用Limit参数)或最大1 MB的数据和 然后使用FilterExpression对结果应用任何筛选

[1]


[2]

我自己刚刚写下了这个问题。AWS CLI对DynamoDB查询中的页面进行自动求和。要阻止它这样做,请将
--no paginate
添加到您的命令中,如

中所列。我刚刚处理了这个问题。AWS CLI对DynamoDB查询中的页面进行自动求和。要阻止它执行此操作,请在命令中添加
--no paginate
,如图所示,该命令位于以紫色划线的页面上的

。。。“默认情况下,AWS CLI使用1000的页面大小并检索所有可用项。例如,如果您在包含3500个对象的Amazon S3存储桶上运行AWS s3api列表对象,AWS CLI会自动对Amazon S3进行四次调用,在后台为您处理特定于服务的分页逻辑,并在中返回所有3500个对象最终输出。“从紫色线条的页面。。。“默认情况下,AWS CLI使用1000的页面大小并检索所有可用项。例如,如果您在包含3500个对象的Amazon S3存储桶上运行AWS s3api列表对象,AWS CLI会自动对Amazon S3进行四次调用,在后台为您处理特定于服务的分页逻辑,并在中返回所有3500个对象最终输出。”
In [22]: table.query(IndexName='classification-date-index', Select='COUNT', KeyConditionExpression= Key('classification').eq('INTERNAL') & Key('date').between('2020-04-10', '2020-04-25'))

Out[22]:
{'Count': 5667,
 'ScannedCount': 5667,
 'LastEvaluatedKey': {'classification': 'INTERNAL',
  'date': '2020-04-14',
  's3Path': '<redacted>'},
 'ResponseMetadata': {'RequestId': 'TH3ILO0P47QB7GAU9M3M98BKJVVV4KQNSO5AEMVJF66Q9ASUAAJG',
  'HTTPStatusCode': 200,
  'HTTPHeaders': {'server': 'Server',
   'date': 'Sat, 25 Apr 2020 13:32:36 GMT',
   'content-type': 'application/x-amz-json-1.0',
   'content-length': '230',
   'connection': 'keep-alive',
   'x-amzn-requestid': 'TH3ILO0P47QB7GAU9M3M98BKJVVV4KQNSO5AEMVJF66Q9ASUAAJG',
   'x-amz-crc32': '133035383'},
  'RetryAttempts': 0}}