web-dev-qa-db-fra.com

Comment interroger une base de données Dynamo ayant un GSI avec uniquement des clés de hachage à l'aide de DynamoDBMapper

Je suis très nouveau pour Dynamo DB et c'est peut-être une question très triviale, mais j'ai parcouru les documents de Dynamo DB et les questions de débordement de pile, mais je n'ai pas pu trouver un seul lien qui indique comment interroger DDB pour GSI qui n'a qu'une clé de hachage et aucune clé de plage spécifiée pour la même chose.

J'obtiens l'exception Expression de requête illégale: aucune condition de clé de hachage n'est trouvée dans la requête.

16
Ankit Banerjee

Sur votre objet modèle annoté DynamoDB, vous devez utiliser @DynamoDBIndexHashKey(globalSecondaryIndexName = "gsiIndexName) pour indiquer qu'il s'agit d'une clé de hachage pour le GSI:

@DynamoDBTable(tableName = "myTable")
public class MyTable {
    ...

    @DynamoDBIndexHashKey(globalSecondaryIndexName = "myGsi")
    public String getGsiHk() {
        return gsiHk;
    }

    ...
}

Et puis utilisez la méthode query sur le DynamoDBMapper:

final MyTable gsiKeyObj = new MyTable();
gsiKeyObj.setGsiHk("myGsiHkValue");
final DynamoDBQueryExpression<MyTable> queryExpression = 
    new DynamoDBQueryExpression<>();
queryExpression.setHashKeyValues(gsiKeyObj);
queryExpression.setIndexName("myGsi");
queryExpression.setConsistentRead(false);   // cannot use consistent read on GSI
final PaginatedQueryList<MyTable> results = 
    mapper.query(MyTable.class, queryExpression);
35
mkobit