_boto.dynamodb2
_を使用していますが、Table.query_count()
を使用できるようです。ただし、クエリフィルターが適用されていない場合は例外が発生していました。
これを修正するにはどうすればよいですか?
ところで、_boto.dynamodb2.table.Table.Query
_が使用できるフィルターのドキュメントはどこにありますか?探してみたが何も見つからなかった。
DynamoDBで行数を取得する方法は2つあります。
1つ目は、テーブル全体のスキャンを実行し、行を数えることです。適切なサイズのテーブルの場合、プロビジョニングされた読み取りスループットのすべてを消費するため、これは一般に恐ろしい考えです。
もう1つの方法は、 Describe Table リクエストを使用して、テーブルの行数の見積もりを取得することです。これはすぐに返されますが、AWSドキュメントに従って定期的にのみ更新されます。
指定されたインデックス内のアイテムの数。 DynamoDBはこの値を約6時間ごとに更新します。最近の変更はこの値に反映されない可能性があります。
ドキュメントに従って boto
「指定されたテーブル内のアイテム数。DynamoDBはこの値を約6時間ごとに更新します。最近の変更がこの値に反映されていない可能性があります。」
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)
アイテムの数を数えたい場合:
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.
参照: Boto ドキュメント(describe_table()のItemCountの下)
これを使用して、テーブルアイテム全体の数を取得できます
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
より小さい場合の__lt
より大きい場合の__gt
__gte以上
__lte以下
__between for between
__beginswith for〜で始まる
間の例
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
)