boto dynamodb2: puis-je interroger une table à l'aide de la gamme de clé?
Dans l'une de mes application en python, je suis en utilisant boto et je veux interroger une table dynamodb à l'aide de la gamme de clé seulement. Je ne veux pas utiliser le scan.
Schéma de notation de la table
ratings = Table.create('ratings', schema=[
HashKey('user_id', data_type=NUMBER),
RangeKey('photo_id', data_type=NUMBER)
], throughput={
'read': 5,
'write': 15,
}, indexes = [
AllIndex('rating_allindex', parts=[
HashKey('user_id', data_type=NUMBER),
RangeKey('photo_id', data_type=NUMBER)
])
])
from boto.dynamodb2.table import Table
ratings = Table('ratings')
# photo_id is range_key and user_id is hash_key
ratings_list = ratings.query(photo_id__eq=1)
En le faisant, j'ai cette erreur Query condition missed key schema element user_id
.
Encore une fois, j'ai pensé que je pourrais donner une condition de filtre pour mon hash_key
ratings_list = ratings.query(user_id__gte=1, photo_id__eq=1)
Mais il a montré l'erreur, Query key condition not supported
. Je suppose que seul le filtre __eq est permis avec hash_key. Comment puis-je obtenir ce que je veux?
Pouvez-vous montrer le schéma et spécifier quels sont ceux qui sont le plus faible index secondaires?
J'ai ajouté le schéma de notation d'un tableau présentant le plus faible index secondaires.
J'ai ajouté le schéma de notation d'un tableau présentant le plus faible index secondaires.
OriginalL'auteur Santosh Ghimire | 2013-12-08
Vous devez vous connecter pour publier un commentaire.
Lors de l'utilisation d'un Requête opération sur DynamoDB vous devez fournir un clé de hachage, il n'est pas défini dans le cadre de la range_key_conditions comme vous pouvez le voir dans la documentation - de sorte que vous aurez à utiliser user_id_eq comme vous l'avez déjà compris.
Si vous avez besoin d'obtenir les lignes de plus d'une clé de hachage dans un appel d'API, vous devez utiliser le Scan (vous pouvez extraire plusieurs lignes à l'aide de batchGet mais ce n'est pas pertinent à votre scénario)
P. s, il semble que votre index secondaire est la même que la Gamme de clé, est-ce une erreur?
OriginalL'auteur Chen Harel
Le comportement que vous voulez peut être réalisé à l'aide d'un global index secondaire qui utilise
photo_id
comme une clé de hachage.OriginalL'auteur Jharrod LaFon
AWS, le sdk v2, vous pouvez numériser la table à l'aide de AWSDynamoDBScanExpression, par exemple. iOS:
Si vous avez besoin d'une condition peut utiliser AWSDynamoDBCondition:
scanFilter
. Que faire si je veux avoir plus d'un conditions? J'ai essayé d'ajouter une autre paire clé-valeur pourscanExpression.scanFilter
mais sans succès. Tout commentaire, suggestion?Ce n'est pas python.
OP demandé une requête spécifique. C'est une analyse. Elles sont différentes opérations dans DynamoDB. En particulier, la "lecture de coût" une analyse est calculé avant le filtre est appliqué, mais une requête s'applique de la gamme des conditions essentielles, avant calcul de coût. De ce fait, il est généralement préférable d'utiliser des Requêtes chaque fois que possible et d'éviter les Scans, sauf si absolument nécessaire: docs.aws.amazon.com/amazondynamodb/latest/developerguide/...
OriginalL'auteur edwardmartinsjr