如何在DynamoDB中立即获取表的行数?

时间:2015-07-13 08:12:06

标签: python amazon-dynamodb boto

我正在使用boto.dynamodb2,似乎我可以使用Table.query_count()。但是,当没有应用查询过滤器时,它引发了异常。

我该怎么做才能解决这个问题?

BTW,boto.dynamodb2.table.Table.Query可以使用的过滤器文档在哪里?我试着寻找它但却一无所获。

4 个答案:

答案 0 :(得分:13)

有两种方法可以在DynamoDB中获得行数。

第一种是执行全表扫描并随时计算行数。对于任何合理大小的表,这通常是一个可怕的想法,因为它将消耗您所有的配置读取吞吐量。

另一种方法是使用Describe Table请求来估计表中的行数。这将立即返回,但只会根据AWS文档定期更新。

  

指定索引中的项目数。 DynamoDB更新了这个   价值大约每六个小时一次。最近的变化可能不是   反映在这个值。

答案 1 :(得分:6)

根据文件boto3

"指定表格中的项目数。 DynamoDB大约每六个小时更新一次该值。最近的更改可能不会反映在此值中。"

import boto3

dynamoDBResource = boto3.resource('dynamodb')
table = dynamoDBResource.Table('tableName')
print(table.item_count)

或者您可以使用DescribeTable

import boto3

dynamoDBClient = boto3.client('dynamodb')
table = dynamoDBClient.describe_table(
    TableName='tableName'
)
print(table)

答案 2 :(得分:2)

如果您想计算物品数量:

import boto3

client = boto3.client('dynamodb','us-east-1')
response = client.describe_table(TableName='test')
print(response['Table']['ItemCount'])

#ItemCount (integer) --The number of items in the specified table.
# DynamoDB updates this value approximately every six hours.
# Recent changes might not be reflected in this value.

参考:Boto3文档(在describe_table()中的ItemCount下)

答案 3 :(得分:0)

您可以使用它来计算整个表项

from boto.dynamodb2.table import Table

dynamodb_table = Table('Users')
dynamodb_table.count()  # updated roughly 6 hours

请参阅此处:http://boto.cloudhackers.com/en/latest/ref/dynamodb2.html#module-boto.dynamodb2.table

query_count方法将根据您提供的索引返回项目计数。

例如,

from boto.dynamodb2.table import Table

dynamodb_table = Table('Users')
print dynamodb_table.query_count(
    index='first_name-last_name-index',  # Get indexes from indexes tab in dynamodb console
    first_name__eq='John',  # add __eq to your index name for specific search
    last_name__eq='Smith'  # This is your range key
)

您可以添加主索引或全局二级索引以及范围键。 可能的比较运算符

__ eq for equal

__ lt小于

__ gt表示大于

__ gte大于或等于

__ lte小于或等于

之间的

__

__始于

开头

介于

之间的示例
print dynamodb_table.query_count(
    index='first_name-last_name-index',  # Get indexes from indexes tab in dynamodb console
    first_name__eq='John',  # add __eq to your index name for specific search
    age__between=[30, 50]  # This is your range key
)