web-dev-qa-db-ja.com

DynamoDBでテーブルの行数を即座に取得する方法は?

_boto.dynamodb2_を使用していますが、Table.query_count()を使用できるようです。ただし、クエリフィルターが適用されていない場合は例外が発生していました。

これを修正するにはどうすればよいですか?

ところで、_boto.dynamodb2.table.Table.Query_が使用できるフィルターのドキュメントはどこにありますか?探してみたが何も見つからなかった。

17
kxxoling

DynamoDBで行数を取得する方法は2つあります。

1つ目は、テーブル全体のスキャンを実行し、行を数えることです。適切なサイズのテーブルの場合、プロビジョニングされた読み取りスループットのすべてを消費するため、これは一般に恐ろしい考えです。

もう1つの方法は、 Describe Table リクエストを使用して、テーブルの行数の見積もりを取得することです。これはすぐに返されますが、AWSドキュメントに従って定期的にのみ更新されます。

指定されたインデックス内のアイテムの数。 DynamoDBはこの値を約6時間ごとに更新します。最近の変更はこの値に反映されない可能性があります。

19
JaredHatfield

ドキュメントに従って 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)
12
Strabek

アイテムの数を数えたい場合:

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の下)

2
Hari K

これを使用して、テーブルアイテム全体の数を取得できます

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
)
0
theBuzzyCoder