Bird
Raised Fist0
DynamoDBquery~5 mins

Querying GSI in DynamoDB - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a Global Secondary Index (GSI) in DynamoDB?
A GSI is an index with a partition key and optional sort key that can be different from the base table's keys. It allows querying data efficiently using alternate keys.
Click to reveal answer
beginner
How do you specify which GSI to query in a DynamoDB Query operation?
You specify the GSI name using the 'IndexName' parameter in the Query request to tell DynamoDB which index to use.
Click to reveal answer
beginner
Can you use Query on a GSI without specifying the partition key?
No. You must specify the partition key value for the GSI to perform a Query operation. Without it, DynamoDB cannot efficiently find matching items.
Click to reveal answer
intermediate
What is the difference between querying a base table and querying a GSI in DynamoDB?
Querying a base table uses the table's primary key, while querying a GSI uses the GSI's partition and optional sort key. The GSI can have different keys and projections.
Click to reveal answer
beginner
Why might you use a GSI instead of scanning a table in DynamoDB?
A GSI lets you query efficiently using alternate keys without scanning the whole table, which saves time and reduces read capacity usage.
Click to reveal answer
What parameter do you use to query a GSI in DynamoDB?
AIndexName
BTableName
CKeyConditionExpression
DFilterExpression
Which key must you always provide when querying a GSI?
ASort key of the base table
BPartition key of the GSI
CPrimary key of the base table
DAny attribute
What happens if you query a GSI without specifying its partition key?
AQuery fails or returns no results
BReturns all items in the GSI
CReturns items from the base table
DAutomatically scans the table
Why use a GSI instead of scanning the whole table?
ATo delete items in bulk
BTo update items faster
CTo query efficiently using alternate keys
DTo increase table size
Can a GSI have a different partition key than the base table?
AOnly for local secondary indexes
BNo
COnly if the table is small
DYes
Explain how to perform a Query operation on a Global Secondary Index in DynamoDB.
Think about what parameters you need to tell DynamoDB which index and keys to use.
You got /4 concepts.
    Describe the benefits of using a Global Secondary Index instead of scanning a DynamoDB table.
    Consider how indexes help find data faster.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of querying a Global Secondary Index (GSI) in DynamoDB?
      easy
      A. To delete items from the table
      B. To create a backup of the table
      C. To update the primary key of items
      D. To find items using an alternate key without scanning the whole table

      Solution

      1. Step 1: Understand what a GSI is used for

        A GSI allows querying data using a different key than the primary key.
      2. Step 2: Identify the main benefit of querying a GSI

        Querying a GSI helps find items quickly without scanning the entire table.
      3. Final Answer:

        To find items using an alternate key without scanning the whole table -> Option D
      4. Quick Check:

        Query GSI = alternate key search [OK]
      Hint: GSI lets you search by different keys fast [OK]
      Common Mistakes:
      • Confusing GSI query with table scan
      • Thinking GSI is for deleting or updating keys
      • Assuming GSI creates backups
      2. Which of the following is the correct way to specify a GSI name in a DynamoDB query using AWS SDK?
      easy
      A. query({ TableName: 'MyTable', Index: 'MyGSI', KeyConditionExpression: 'GSIKey = :val', ExpressionAttributeValues: { ':val': '123' } })
      B. query({ TableName: 'MyTable', KeyName: 'MyGSI', KeyConditionExpression: 'GSIKey = :val', ExpressionAttributeValues: { ':val': '123' } })
      C. query({ TableName: 'MyTable', IndexName: 'MyGSI', KeyConditionExpression: 'GSIKey = :val', ExpressionAttributeValues: { ':val': '123' } })
      D. query({ TableName: 'MyTable', GSIName: 'MyGSI', KeyConditionExpression: 'GSIKey = :val', ExpressionAttributeValues: { ':val': '123' } })

      Solution

      1. Step 1: Recall the correct parameter name for GSI in DynamoDB query

        The correct parameter to specify a GSI is 'IndexName'.
      2. Step 2: Check the options for correct syntax

        Only query({ TableName: 'MyTable', IndexName: 'MyGSI', KeyConditionExpression: 'GSIKey = :val', ExpressionAttributeValues: { ':val': '123' } }) uses 'IndexName' correctly with other required fields.
      3. Final Answer:

        query({ TableName: 'MyTable', IndexName: 'MyGSI', KeyConditionExpression: 'GSIKey = :val', ExpressionAttributeValues: { ':val': '123' } }) -> Option C
      4. Quick Check:

        Use IndexName to specify GSI [OK]
      Hint: Use 'IndexName' to specify GSI in query params [OK]
      Common Mistakes:
      • Using 'KeyName' or 'GSIName' instead of 'IndexName'
      • Omitting ExpressionAttributeValues
      • Wrong key condition syntax
      3. Given a DynamoDB table with a GSI named 'StatusIndex' on attribute 'status', what will the following query return?
      query({ TableName: 'Orders', IndexName: 'StatusIndex', KeyConditionExpression: 'status = :s', ExpressionAttributeValues: { ':s': 'shipped' } })
      medium
      A. All orders with status 'shipped' using the GSI
      B. All orders regardless of status
      C. An error because 'status' is not the primary key
      D. No results because GSI queries are not supported

      Solution

      1. Step 1: Understand the query parameters

        The query uses 'StatusIndex' GSI with a key condition on 'status' = 'shipped'.
      2. Step 2: Determine what the query returns

        It returns all items where 'status' attribute equals 'shipped' using the GSI, which is designed for this attribute.
      3. Final Answer:

        All orders with status 'shipped' using the GSI -> Option A
      4. Quick Check:

        Query GSI by status = shipped returns matching items [OK]
      Hint: Query GSI with key condition returns matching items [OK]
      Common Mistakes:
      • Thinking GSI query returns all items
      • Assuming GSI query causes error if attribute not primary key
      • Believing GSI queries are unsupported
      4. You wrote this DynamoDB query to use a GSI but get an error:
      query({ TableName: 'Products', IndexName: 'CategoryIndex', KeyConditionExpression: 'category = :c', ExpressionAttributeValues: { ':c': 'books' } })

      What is the most likely cause of the error?
      medium
      A. You cannot query a GSI in DynamoDB
      B. The attribute 'category' is not the partition key of the GSI 'CategoryIndex'
      C. ExpressionAttributeValues is missing a value
      D. The table name 'Products' is incorrect

      Solution

      1. Step 1: Understand GSI key requirements

        When querying a GSI, the KeyConditionExpression must use the GSI's partition key attribute.
      2. Step 2: Identify the error cause

        If 'category' is not the partition key of 'CategoryIndex', the query will fail with an error.
      3. Final Answer:

        The attribute 'category' is not the partition key of the GSI 'CategoryIndex' -> Option B
      4. Quick Check:

        GSI query key must be GSI partition key [OK]
      Hint: GSI query key must match GSI partition key [OK]
      Common Mistakes:
      • Using a non-key attribute in KeyConditionExpression
      • Assuming table name typo causes this error
      • Believing GSI queries are unsupported
      5. You have a DynamoDB table 'Employees' with a GSI named 'DeptIndex' where the partition key is 'department' and sort key is 'hireDate'. You want to find all employees in 'Sales' hired after '2023-01-01'. Which query is correct?
      hard
      A. query({ TableName: 'Employees', IndexName: 'DeptIndex', KeyConditionExpression: 'department = :d AND hireDate > :h', ExpressionAttributeValues: { ':d': 'Sales', ':h': '2023-01-01' } })
      B. query({ TableName: 'Employees', IndexName: 'DeptIndex', KeyConditionExpression: 'department = :d OR hireDate > :h', ExpressionAttributeValues: { ':d': 'Sales', ':h': '2023-01-01' } })
      C. query({ TableName: 'Employees', KeyConditionExpression: 'department = :d AND hireDate > :h', ExpressionAttributeValues: { ':d': 'Sales', ':h': '2023-01-01' } })
      D. query({ TableName: 'Employees', IndexName: 'DeptIndex', FilterExpression: 'department = :d AND hireDate > :h', ExpressionAttributeValues: { ':d': 'Sales', ':h': '2023-01-01' } })

      Solution

      1. Step 1: Use the GSI name and correct key condition

        Query must specify 'IndexName' as 'DeptIndex' and use KeyConditionExpression with partition key and sort key conditions.
      2. Step 2: Check logical operators and expressions

        KeyConditionExpression supports 'AND' for partition key and sort key conditions; 'OR' is invalid here.
      3. Step 3: Verify FilterExpression usage

        FilterExpression filters after query; it cannot replace KeyConditionExpression for keys.
      4. Final Answer:

        query({ TableName: 'Employees', IndexName: 'DeptIndex', KeyConditionExpression: 'department = :d AND hireDate > :h', ExpressionAttributeValues: { ':d': 'Sales', ':h': '2023-01-01' } }) -> Option A
      5. Quick Check:

        Use KeyConditionExpression with AND on GSI keys [OK]
      Hint: Use AND in KeyConditionExpression for partition and sort keys [OK]
      Common Mistakes:
      • Using OR instead of AND in KeyConditionExpression
      • Omitting IndexName for GSI query
      • Using FilterExpression instead of KeyConditionExpression for keys
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard