A sort key helps organize and find related data quickly within the same group in a DynamoDB table.
Sort key purpose and usage in DynamoDB
Start learning this pattern below
Jump into concepts and practice - no test required
CreateTable {
TableName: string,
KeySchema: [
{ AttributeName: string, KeyType: 'HASH' }, // Partition key
{ AttributeName: string, KeyType: 'RANGE' } // Sort key
],
AttributeDefinitions: [
{ AttributeName: string, AttributeType: 'S' | 'N' | 'B' }
],
ProvisionedThroughput: {
ReadCapacityUnits: number,
WriteCapacityUnits: number
}
}The partition key groups items, and the sort key orders items within that group.
Sort key is optional but useful for organizing related data.
KeySchema: [
{ AttributeName: 'UserID', KeyType: 'HASH' },
{ AttributeName: 'Timestamp', KeyType: 'RANGE' }
]KeySchema: [
{ AttributeName: 'OrderID', KeyType: 'HASH' }
]This example creates a table with a partition key 'UserID' and a sort key 'MessageID'. It inserts two messages for the same user and queries them ordered by 'MessageID'.
CreateTable {
TableName: 'UserMessages',
KeySchema: [
{ AttributeName: 'UserID', KeyType: 'HASH' },
{ AttributeName: 'MessageID', KeyType: 'RANGE' }
],
AttributeDefinitions: [
{ AttributeName: 'UserID', AttributeType: 'S' },
{ AttributeName: 'MessageID', AttributeType: 'S' }
],
ProvisionedThroughput: {
ReadCapacityUnits: 5,
WriteCapacityUnits: 5
}
}
-- Insert messages for user 'user123'
PutItem {
TableName: 'UserMessages',
Item: { UserID: 'user123', MessageID: 'msg001', Content: 'Hello!' }
}
PutItem {
TableName: 'UserMessages',
Item: { UserID: 'user123', MessageID: 'msg002', Content: 'How are you?' }
}
-- Query messages for 'user123' ordered by MessageID
Query {
TableName: 'UserMessages',
KeyConditionExpression: 'UserID = :uid',
ExpressionAttributeValues: { ':uid': 'user123' }
}Sort keys let you store multiple items with the same partition key but different sort keys.
Queries using sort keys are faster than scanning the whole table.
You can use operators like BETWEEN or begins_with on sort keys to filter results.
The sort key organizes related items within the same partition key group.
It helps retrieve data in order and filter efficiently.
Using a sort key models one-to-many relationships in DynamoDB.
Practice
sort key in a DynamoDB table?Solution
Step 1: Understand partition and sort keys roles
The partition key groups items, and the sort key orders items within that group.Step 2: Identify the sort key's purpose
The sort key organizes related items so they can be retrieved in order and filtered efficiently.Final Answer:
To organize and order items within the same partition key -> Option CQuick Check:
Sort key = Organize items in partition [OK]
- Confusing sort key with partition key uniqueness
- Thinking sort key encrypts data
- Assuming sort key stores large binary data
UserID and a sort key named Timestamp using AWS CLI?Solution
Step 1: Check attribute definitions and key schema
Partition key must have KeyType=HASH and sort key must have KeyType=RANGE.Step 2: Verify aws dynamodb create-table --table-name MyTable --attribute-definitions AttributeName=UserID,AttributeType=S AttributeName=Timestamp,AttributeType=N --key-schema AttributeName=UserID,KeyType=HASH AttributeName=Timestamp,KeyType=RANGE --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 matches correct key types
aws dynamodb create-table --table-name MyTable --attribute-definitions AttributeName=UserID,AttributeType=S AttributeName=Timestamp,AttributeType=N --key-schema AttributeName=UserID,KeyType=HASH AttributeName=Timestamp,KeyType=RANGE --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 uses UserID as HASH and Timestamp as RANGE, which is correct.Final Answer:
aws dynamodb create-table --table-name MyTable --attribute-definitions AttributeName=UserID,AttributeType=S AttributeName=Timestamp,AttributeType=N --key-schema AttributeName=UserID,KeyType=HASH AttributeName=Timestamp,KeyType=RANGE --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 -> Option DQuick Check:
Partition=HASH, Sort=RANGE in CLI [OK]
- Using KeyType=HASH for both keys
- Missing sort key in key schema
- Defining only partition key without sort key
UserID and sort key OrderDate, what will the following query return?aws dynamodb query --table-name Orders --key-condition-expression "UserID = :uid AND OrderDate > :date" --expression-attribute-values '{":uid":{"S":"user123"}, ":date":{"S":"2023-01-01"}}'Solution
Step 1: Analyze the key condition expression
The query filters items where UserID equals 'user123' and OrderDate is greater than '2023-01-01'.Step 2: Understand query behavior with partition and sort keys
Query returns items for one partition key, ordered by sort key, filtered by the condition on sort key.Final Answer:
All orders for user123 with OrderDate after 2023-01-01, sorted by OrderDate -> Option AQuick Check:
Query filters by partition and sort key conditions [OK]
- Expecting query to filter across all partitions
- Ignoring sort key condition in query
- Confusing query with scan operation
aws dynamodb query --table-name Sales --key-condition-expression "OrderID > :oid" --expression-attribute-values '{":oid":{"S":"1000"}}'What is the likely cause?
Solution
Step 1: Recall query key condition requirements
DynamoDB query requires partition key equality condition in key-condition-expression.Step 2: Identify error cause
Query uses only 'OrderID > :oid' without partition key equality, causing error.Final Answer:
Missing partition key equality condition in key-condition-expression -> Option BQuick Check:
Partition key equality is mandatory in query [OK]
- Using range operators on partition key
- Omitting partition key in query condition
- Confusing query with scan operation
CustomerID can have multiple Invoices sorted by InvoiceDate. Which DynamoDB table design best uses the sort key to achieve this?Solution
Step 1: Understand one-to-many modeling in DynamoDB
Use partition key for the 'one' side and sort key to order the 'many' items.Step 2: Apply to CustomerID and Invoices
CustomerID as partition key groups invoices; InvoiceDate as sort key orders them.Final Answer:
Partition key: CustomerID, Sort key: InvoiceDate -> Option AQuick Check:
Sort key models one-to-many order [OK]
- Swapping partition and sort keys
- Not using sort key for ordering
- Using only partition key losing order info
