Home > Mobile >  DynamoDB Query with filter
DynamoDB Query with filter

Time:05-25

I like to write a dynamoDb query in which I filter for a certain field, sounds simple. All the examples I find always include the partition key value, which really confuses me, since it is unique value, but I want a list. I got id as the partition key and no sort key or any other index. I tried to add partner as an index did not make any difference.

        AttributeValue attribute = AttributeValue.builder()
            .s(partner)
            .build();

    Map<String, AttributeValue> expressionValues = new HashMap<>();
    expressionValues.put(":value", attribute);
    Expression expression = Expression.builder()
            .expression("partner = :value")
            .expressionValues(expressionValues)
            .build();
    QueryConditional queryConditional = QueryConditional
            .keyEqualTo(Key.builder()
                    .partitionValue("id????")
                    .build());
    Iterator<Product> results = productTable.query(r -> r.queryConditional(queryConditional)

Would appreciate any help. Is there a misunderstandig on my side?

CodePudding user response:

DynamoDB has two distinct, but similar, operations - Query and Scan:

  • Scan is for reading the entire table, including all partition keys.
  • Query is for reading a specific partition key - and all sort key in it (or a contiguous range of sort key - hence the nickname "range key" for that key).

If your data model does not have a range key, Query is not relevant for you - you should use Scan.

However this means that each time you call this query, the entire table will be read. Unless your table is tiny, this doesn't make economic sense, and you should reconsider your data model. For example, if you frequently look up results by the "partner" attribute, you can consider creating a GSI (global secondary index) with "partner" as its partition key, allowing you to quickly and cheapy fetch the list of items with a given "partner" value without scanning the entire table.

  • Related