📖 Scenario: You are building a simple inventory system using AWS DynamoDB. You want to create a table that stores product information. To efficiently query products by category and by supplier, you will add secondary indexes.
🎯 Goal: Create a DynamoDB table named Products with a primary key and add a Global Secondary Index (GSI) and a Local Secondary Index (LSI) to support queries by Category and Supplier.
📋 What You'll Learn
Create a DynamoDB table named Products with ProductID as the partition key (string).
Add a Local Secondary Index (LSI) named CategoryIndex with ProductID as partition key and Category as sort key.
Add a Global Secondary Index (GSI) named SupplierIndex with Supplier as partition key and Price as sort key.
Set the billing mode to PAY_PER_REQUEST.
💡 Why This Matters
🌍 Real World
Secondary indexes in DynamoDB help you query your data efficiently without scanning the entire table, which is important for performance and cost.
💼 Career
Understanding how to configure GSIs and LSIs is essential for AWS cloud architects and developers working with NoSQL databases to optimize data access patterns.
Progress0 / 4 steps
1
Create the DynamoDB table with primary key
Create a DynamoDB table resource named Products with ProductID as the partition key of type S (string). Use PAY_PER_REQUEST billing mode.
AWS
Hint
Define AttributeDefinitions with ProductID as string and set KeySchema with ProductID as partition key.
2
Add Local Secondary Index (LSI) for Category
Add a Local Secondary Index named CategoryIndex to the Products table. Use ProductID as the partition key and Category as the sort key. Define Category as a string attribute in AttributeDefinitions.
AWS
Hint
Remember that LSI uses the same partition key as the table and a different sort key.
3
Add Global Secondary Index (GSI) for Supplier
Add a Global Secondary Index named SupplierIndex to the Products table. Use Supplier as the partition key and Price as the sort key. Define Supplier and Price as string attributes in AttributeDefinitions. Set the projection type to ALL.
AWS
Hint
GSI can have different partition and sort keys than the table. Add both Supplier and Price to AttributeDefinitions.
4
Complete the DynamoDB table configuration
Ensure the full DynamoDB table resource named Products includes PAY_PER_REQUEST billing mode, the primary key, the Local Secondary Index CategoryIndex, and the Global Secondary Index SupplierIndex with all attribute definitions.
AWS
Hint
Review the full table resource to ensure all parts are included correctly.
Practice
(1/5)
1. What is the main difference between a Local Secondary Index (LSI) and a Global Secondary Index (GSI) in DynamoDB?
easy
A. LSI can have a different partition key, but GSI must use the main table's partition key.
B. LSI uses the same partition key as the main table, but GSI can use a different partition key.
C. LSI and GSI both require the same partition and sort keys as the main table.
D. LSI is only for read operations, while GSI is only for write operations.
Solution
Step 1: Understand LSI key structure
LSI shares the same partition key as the main table but allows a different sort key.
Step 2: Understand GSI key structure
GSI can have a completely different partition key and sort key from the main table.
Final Answer:
LSI uses the same partition key as the main table, but GSI can use a different partition key. -> Option B
Quick Check:
LSI shares partition key, GSI can differ [OK]
Hint: LSI shares partition key; GSI can change both keys [OK]
Common Mistakes:
Thinking LSI can have a different partition key
Assuming GSI must use main table keys
Confusing read/write capabilities of indexes
2. Which of the following is the correct syntax to define a Global Secondary Index (GSI) in a DynamoDB table using AWS CloudFormation?
GSI uses GlobalSecondaryIndexes with HASH key [OK]
Hint: GSI uses GlobalSecondaryIndexes with HASH key [OK]
Common Mistakes:
Using LocalSecondaryIndexes for GSI
Setting KeyType to RANGE for partition key
Incorrect projection types or syntax errors
3. Given a DynamoDB table with a Global Secondary Index (GSI) on attribute Category as partition key and Price as sort key, what will the following query return?
Query on GSI where Category = 'Books' and Price between 10 and 20
medium
A. All items with Category 'Books' and Price between 10 and 20
B. All items with Price between 10 and 20 regardless of Category
C. All items with Category 'Books' regardless of Price
D. An error because Price cannot be used in query conditions
Solution
Step 1: Understand GSI query conditions
Query on GSI requires specifying the partition key (Category = 'Books') and can filter by sort key range (Price between 10 and 20).
Step 2: Interpret the query result
The query returns all items matching Category 'Books' with Price in the specified range.
Final Answer:
All items with Category 'Books' and Price between 10 and 20 -> Option A
Quick Check:
GSI query filters partition and sort keys correctly [OK]
Hint: Query GSI with partition key + sort key range filters [OK]
Common Mistakes:
Ignoring partition key in query
Thinking sort key can't be filtered
Expecting error on valid query
4. You created a Local Secondary Index (LSI) on a DynamoDB table but your query on the LSI returns no results even though matching items exist. What is the most likely cause?
medium
A. The LSI was created with a different partition key than the main table.
B. The query used a filter expression instead of a key condition.
C. The query did not specify the same partition key as the main table.
D. LSIs do not support queries, only scans.
Solution
Step 1: Recall LSI key requirements
LSI shares the same partition key as the main table, so queries must specify that partition key.
Step 2: Analyze query behavior
If the query does not specify the partition key, no results will be returned because partition key is mandatory for queries on LSI.
Final Answer:
The query did not specify the same partition key as the main table. -> Option C
Quick Check:
LSI queries require main table partition key [OK]
Hint: LSI queries must include main table partition key [OK]
Common Mistakes:
Assuming LSI can have different partition key
Using filter instead of key condition for partition key
Believing LSI does not support queries
5. You have a DynamoDB table with a partition key UserId and sort key OrderDate. You want to efficiently query all orders by Status and sort them by OrderAmount. Which secondary index should you create and how?
hard
A. Create a Global Secondary Index with partition key Status and sort key OrderAmount.
B. Create a Local Secondary Index with partition key UserId and sort key Status.
C. Create a Global Secondary Index with partition key UserId and sort key Status.
D. Create a Local Secondary Index with partition key Status and sort key OrderAmount.
Solution
Step 1: Identify query requirements
You want to query by Status (different from main partition key) and sort by OrderAmount.
Step 2: Choose index type and keys
Since Status is different from main partition key, use a Global Secondary Index with Status as partition key and OrderAmount as sort key.
Final Answer:
Create a Global Secondary Index with partition key Status and sort key OrderAmount. -> Option A
Quick Check:
GSI allows different partition and sort keys [OK]
Hint: Use GSI when partition key differs from main table [OK]
Common Mistakes:
Trying to use LSI with different partition key
Swapping partition and sort keys incorrectly
Choosing wrong index type for query pattern
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.