I have Table with 2 attribute id(string,primary key), value(string). When I try follwoing KeyConditionExpression it throws Query key condition not supported.
KeyConditionExpression: "begins_with(ID, :tagIDValue)" or KeyConditionExpression: "contains(ID, :tagIDValue)"
From this link I came to know we can use only EQ operations on main key. How can I achieve this
Solution:======================================================
I need to use begins_with or contains to filter So I went with following approach.
Table attributes: PK(partion_key, string), ID(sort key, string), value(string).
Now my primary key is framed based on PK,ID
PK will have constant value for all rows. so KeyConditionExpression will be like.
KeyConditionExpression: "PL = :pk and begins_with(ID, :tagIDValue)"
NOTE: But still contains not working with KeyConditionExpression. I think it was removed from KeyConditionExpression
When you create a table or a secondary index, you must specify the names and data types of each primary key attribute (partition key and sort key). Furthermore, each primary key attribute must be defined as type string, number, or binary.
With the DynamoDB API, you use the PutItem operation to add an item to a table. DynamoDB provides the GetItem action for retrieving an item by its primary key.
DynamoDB supports two types of primary keys: Partition key: A simple primary key, composed of one attribute known as the partition key. Attributes in DynamoDB are similar in many ways to fields or columns in other database systems.
You cannot update the primary key attributes using UpdateItem. Instead, delete the item and use PutItem to create a new item with new attributes. The UpdateItem operation includes an Action parameter, which defines how to perform the update. You can put, delete, or add attribute values.
You can use begins_with
and contains
only with a range key after specifying an EQ condition for the primary key.
To use EQ with the primary key you can do
KeyConditionExpression: "ID = :tagIDValue"
I disagree with Tolbahady statement regarding begins_with
and contains
only workable in range key. You can use any comparison operator in any keys using method scan
. Scan is a flexible but expensive and inefficient way of conducting dynamodb queries.
Anyways, there is a tool named, AWS NoSQL Workbench. It is little bit like MySQL Workbench. What is the good thing about it, is you can construct your table while checking against your access patterns(possible and most used queries of your application against your table).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With