Reputation: 6362
DynamoDb table structure:
Primary key: userId, Sort key: timestamp
I created this query:
aws dynamodb query \
--table-name QAClusteredData \
--key-condition-expression 'userId= :user_id AND timestamp BETWEEN :t1 AND :t2' \
--expression-attribute-values '{
":user_id": {"S": "ec2e598f-cff8-4648-a120-3baf18e5102c"},
":t1": {"S": "1550481826"},
":t2": {"S": "1550662412"}
}' \
--region us-east-1
received: "An error occurred (ValidationException) when calling the Query operation: Invalid KeyConditionExpression: Attribute name is a reserved keyword; reserved keyword: timestamp"
tried:
aws dynamodb query \
--table-name QAClusteredData \
--key-condition-expression 'userId= :user_id AND timestamp BETWEEN :t1 AND :t2' \
--expression-attribute-names '{"#ts":"timestamp"}' \
--expression-attribute-values '{
":user_id": {"S": "ec2e598f-cff8-4648-a120-3baf18e5102c"},
":t1": {"S": "1550481826"},
":t2": {"S": "1550662412"}
}' \
--region us-east-1
still get the same error, any suggestions?
Upvotes: 0
Views: 2499
Reputation: 3410
Your code contains a forbidden keyword: :user_id AND timestamp BETWEEN :t1 AND :t2'
timestamp
is a reserved word in DynamoDB. Here's a list of reserved keywords in DynamoDB: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
Upvotes: 0
Reputation: 6362
My bad,
had to put #ts BETWEEN :t1 AND :t2
and not timestamp BETWEEN :t1 AND :t2
Full query:
aws dynamodb query \
--table-name QAClusteredData \
--key-condition-expression 'userId= :user_id AND #ts BETWEEN :t1 AND :t2' \
--expression-attribute-names '{"#ts":"timestamp"}' \
--expression-attribute-values '{
":user_id": {"S": "ec2e598f-cff8-4648-a120-3baf18e5102c"},
":t1": {"S": "1550481826"},
":t2": {"S": "1550662412"}
}' \
--region us-east-1
Upvotes: 2