web-dev-qa-db-fra.com

Comment obtenir le nombre de lignes d'une table instantanément dans DynamoDB?

J'utilise boto.dynamodb2, Et il semble que je puisse utiliser Table.query_count(). Cependant, il avait levé une exception quand aucun filtre de requête n'est appliqué.

Que puis-je faire pour résoudre ce problème?

BTW, où est le document des filtres que boto.dynamodb2.table.Table.Query Peut utiliser? J'ai essayé de le chercher mais je n'ai rien trouvé.

17
kxxoling

Il existe deux façons d'obtenir un nombre de lignes dans DynamoDB.

La première consiste à effectuer une analyse complète de la table et à compter les lignes au fur et à mesure. Pour une table de toute taille raisonnable, c'est généralement une idée horrible car elle consommera tout votre débit de lecture provisionné.

L'autre façon consiste à utiliser la requête Describe Table pour obtenir une estimation du nombre de lignes dans la table. Cela reviendra instantanément, mais ne sera mis à jour que périodiquement selon la documentation AWS.

Le nombre d'éléments dans l'index spécifié. DynamoDB met à jour cette valeur toutes les six heures environ. Les modifications récentes peuvent ne pas être reflétées dans cette valeur.

19
JaredHatfield

Selon la documentation boto

"Le nombre d'éléments dans le tableau spécifié. DynamoDB met à jour cette valeur toutes les six heures environ. Les modifications récentes peuvent ne pas être reflétées dans cette valeur."

import boto3

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

ou vous pouvez utiliser DescribeTable :

import boto3

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

Si vous souhaitez compter le nombre d'articles:

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.

Ref: Boto Documentation (sous ItemCount dans describe_table ())

2
Hari K

Vous pouvez l'utiliser pour obtenir le nombre d'éléments de table entiers

from boto.dynamodb2.table import Table

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

Reportez-vous ici: http://boto.cloudhackers.com/en/latest/ref/dynamodb2.html#module-boto.dynamodb2.table

la méthode query_count renverra le nombre d'éléments en fonction des index que vous fournissez.

Par exemple,

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
)

Vous pouvez ajouter l'index principal ou les index secondaires globaux avec les clés de plage. opérateurs de comparaison possibles

__eq pour égal

__lt pour moins de

__gt pour plus de

__gte pour supérieur ou égal

__lte pour inférieur ou égal

__entre entre

__beginswith pour commence par

Exemple pour entre

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