I am very new to Dynamo DB and may be this is very trivial question, but i went through the documents of Dynamo DB and stack overflow questions but i couldnt find a single link which tells how to query DDB for GSI which has only hash key and there are no range key specified for the same.
I get the exception Illegal query expression: No hash key condition is found in the query.
On your DynamoDB annotated model object, you should use @DynamoDBIndexHashKey(globalSecondaryIndexName = "gsiIndexName)
to signify that it is a hash key for the GSI:
@DynamoDBTable(tableName = "myTable") public class MyTable { ... @DynamoDBIndexHashKey(globalSecondaryIndexName = "myGsi") public String getGsiHk() { return gsiHk; } ... }
And then use the query
method on the DynamoDBMapper
:
final MyTable gsiKeyObj = new MyTable(); gsiKeyObj.setGsiHk("myGsiHkValue"); final DynamoDBQueryExpression queryExpression = new DynamoDBQueryExpression(); queryExpression.setHashKeyValues(gsiKeyObj); queryExpression.setIndexName("myGsi"); queryExpression.setConsistentRead(false); // cannot use consistent read on GSI final PaginatedQueryList results = mapper.query(MyTable.class, queryExpression);