Select your cookie preferences

We use essential cookies and similar tools that are necessary to provide our site and services. We use performance cookies to collect anonymous statistics, so we can understand how customers use our site and make improvements. Essential cookies cannot be deactivated, but you can choose “Customize” or “Decline” to decline performance cookies.

If you agree, AWS and approved third parties will also use cookies to provide useful site features, remember your preferences, and display relevant content, including relevant advertising. To accept or decline all non-essential cookies, choose “Accept” or “Decline.” To make more detailed choices, choose “Customize.”

Query a DynamoDB table using a begins_with condition with an AWS SDK

Focus mode
Query a DynamoDB table using a begins_with condition with an AWS SDK - AWS SDK Code Examples

There are more AWS SDK examples available in the AWS Doc SDK Examples GitHub repo.

There are more AWS SDK examples available in the AWS Doc SDK Examples GitHub repo.

The following code examples show how to query a table using a begins_with condition.

  • Use the begins_with function in a key condition expression.

  • Filter items based on a prefix pattern in the sort key.

Java
SDK for Java 2.x

Query a DynamoDB table using a begins_with condition on the sort key with AWS SDK for Java 2.x.

import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.DynamoDbException; import software.amazon.awssdk.services.dynamodb.model.QueryRequest; import software.amazon.awssdk.services.dynamodb.model.QueryResponse; import software.amazon.awssdk.services.dynamodb.model.ResourceNotFoundException; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; public QueryResponse queryWithBeginsWithCondition( final String tableName, final String partitionKeyName, final String partitionKeyValue, final String sortKeyName, final String sortKeyPrefix) { CodeSampleUtils.validateTableParameters(tableName, partitionKeyName, partitionKeyValue); CodeSampleUtils.validateStringParameter("Sort key name", sortKeyName); CodeSampleUtils.validateStringParameter("Sort key prefix", sortKeyPrefix); // Create expression attribute names for the column names final Map<String, String> expressionAttributeNames = new HashMap<>(); expressionAttributeNames.put(EXPRESSION_ATTRIBUTE_NAME_PK, partitionKeyName); expressionAttributeNames.put(EXPRESSION_ATTRIBUTE_NAME_SK, sortKeyName); // Create expression attribute values for the column values final Map<String, AttributeValue> expressionAttributeValues = new HashMap<>(); expressionAttributeValues.put( EXPRESSION_ATTRIBUTE_VALUE_PK, AttributeValue.builder().s(partitionKeyValue).build()); expressionAttributeValues.put( EXPRESSION_ATTRIBUTE_VALUE_SK_PREFIX, AttributeValue.builder().s(sortKeyPrefix).build()); // Create the query request final QueryRequest queryRequest = QueryRequest.builder() .tableName(tableName) .keyConditionExpression(KEY_CONDITION_EXPRESSION) .expressionAttributeNames(expressionAttributeNames) .expressionAttributeValues(expressionAttributeValues) .build(); try { final QueryResponse response = dynamoDbClient.query(queryRequest); LOGGER.log(Level.INFO, "Query with begins_with condition successful. Found {0} items", response.count()); return response; } catch (ResourceNotFoundException e) { LOGGER.log(Level.SEVERE, "Table not found: {0}", tableName); throw e; } catch (DynamoDbException e) { LOGGER.log(Level.SEVERE, "Error querying with begins_with condition", e); throw e; } }

Demonstrate using begins_with with different prefix lengths with AWS SDK for Java 2.x.

public static void main(String[] args) { try { CodeSampleUtils.BeginsWithQueryConfig config = CodeSampleUtils.BeginsWithQueryConfig.fromArgs(args); LOGGER.log(Level.INFO, "Querying items where {0} = {1} and {2} begins with ''{3}''", new Object[] { config.getPartitionKeyName(), config.getPartitionKeyValue(), config.getSortKeyName(), config.getSortKeyPrefix() }); // Using the builder pattern to create and execute the query final QueryResponse response = new BeginsWithQueryBuilder() .withTableName(config.getTableName()) .withPartitionKeyName(config.getPartitionKeyName()) .withPartitionKeyValue(config.getPartitionKeyValue()) .withSortKeyName(config.getSortKeyName()) .withSortKeyPrefix(config.getSortKeyPrefix()) .withRegion(config.getRegion()) .execute(); // Process the results LOGGER.log(Level.INFO, "Found {0} items:", response.count()); response.items().forEach(item -> LOGGER.info(item.toString())); // Demonstrate with a different prefix if (!config.getSortKeyPrefix().isEmpty()) { String shorterPrefix = config.getSortKeyPrefix() .substring(0, Math.max(1, config.getSortKeyPrefix().length() / 2)); LOGGER.log(Level.INFO, "\nNow querying with a shorter prefix: ''{0}''", shorterPrefix); final QueryResponse response2 = new BeginsWithQueryBuilder() .withTableName(config.getTableName()) .withPartitionKeyName(config.getPartitionKeyName()) .withPartitionKeyValue(config.getPartitionKeyValue()) .withSortKeyName(config.getSortKeyName()) .withSortKeyPrefix(shorterPrefix) .withRegion(config.getRegion()) .execute(); LOGGER.log(Level.INFO, "Found {0} items with shorter prefix:", response2.count()); response2.items().forEach(item -> LOGGER.info(item.toString())); } } catch (IllegalArgumentException e) { LOGGER.log(Level.SEVERE, "Invalid input: {0}", e.getMessage()); printUsage(); } catch (ResourceNotFoundException e) { LOGGER.log(Level.SEVERE, "Table not found", e); } catch (DynamoDbException e) { LOGGER.log(Level.SEVERE, "DynamoDB error", e); } catch (Exception e) { LOGGER.log(Level.SEVERE, "Unexpected error", e); } }
  • For API details, see Query in AWS SDK for Java 2.x API Reference.

JavaScript
SDK for JavaScript (v3)

Query a DynamoDB table using a begins_with condition on the sort key with AWS SDK for JavaScript.

const { DynamoDBClient, QueryCommand } = require("@aws-sdk/client-dynamodb"); /** * Queries a DynamoDB table for items where the sort key begins with a specific prefix * * @param {Object} config - AWS SDK configuration object * @param {string} tableName - The name of the DynamoDB table * @param {string} partitionKeyName - The name of the partition key * @param {string} partitionKeyValue - The value of the partition key * @param {string} sortKeyName - The name of the sort key * @param {string} prefix - The prefix to match at the beginning of the sort key * @returns {Promise<Object>} - The query response */ async function queryWithBeginsWith( config, tableName, partitionKeyName, partitionKeyValue, sortKeyName, prefix ) { try { // Create DynamoDB client const client = new DynamoDBClient(config); // Construct the query input const input = { TableName: tableName, KeyConditionExpression: "#pk = :pkValue AND begins_with(#sk, :prefix)", ExpressionAttributeNames: { "#pk": partitionKeyName, "#sk": sortKeyName }, ExpressionAttributeValues: { ":pkValue": { S: partitionKeyValue }, ":prefix": { S: prefix } } }; // Execute the query const command = new QueryCommand(input); return await client.send(command); } catch (error) { console.error(`Error querying with begins_with: ${error}`); throw error; } }
  • For API details, see Query in AWS SDK for JavaScript API Reference.

Python
SDK for Python (Boto3)

Query a DynamoDB table using a begins_with condition on the sort key with AWS SDK for Python (Boto3).

import boto3 from boto3.dynamodb.conditions import Key def query_with_begins_with( table_name, partition_key_name, partition_key_value, sort_key_name, prefix ): """ Query a DynamoDB table with a begins_with condition on the sort key. Args: table_name (str): The name of the DynamoDB table. partition_key_name (str): The name of the partition key attribute. partition_key_value (str): The value of the partition key to query. sort_key_name (str): The name of the sort key attribute. prefix (str): The prefix to match at the beginning of the sort key. Returns: dict: The response from DynamoDB containing the query results. """ # Initialize the DynamoDB resource dynamodb = boto3.resource("dynamodb") table = dynamodb.Table(table_name) # Perform the query with a begins_with condition on the sort key key_condition = Key(partition_key_name).eq(partition_key_value) & Key( sort_key_name ).begins_with(prefix) response = table.query(KeyConditionExpression=key_condition) return response
  • For API details, see Query in AWS SDK for Python (Boto3) API Reference.

SDK for Java 2.x

Query a DynamoDB table using a begins_with condition on the sort key with AWS SDK for Java 2.x.

import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.DynamoDbException; import software.amazon.awssdk.services.dynamodb.model.QueryRequest; import software.amazon.awssdk.services.dynamodb.model.QueryResponse; import software.amazon.awssdk.services.dynamodb.model.ResourceNotFoundException; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; public QueryResponse queryWithBeginsWithCondition( final String tableName, final String partitionKeyName, final String partitionKeyValue, final String sortKeyName, final String sortKeyPrefix) { CodeSampleUtils.validateTableParameters(tableName, partitionKeyName, partitionKeyValue); CodeSampleUtils.validateStringParameter("Sort key name", sortKeyName); CodeSampleUtils.validateStringParameter("Sort key prefix", sortKeyPrefix); // Create expression attribute names for the column names final Map<String, String> expressionAttributeNames = new HashMap<>(); expressionAttributeNames.put(EXPRESSION_ATTRIBUTE_NAME_PK, partitionKeyName); expressionAttributeNames.put(EXPRESSION_ATTRIBUTE_NAME_SK, sortKeyName); // Create expression attribute values for the column values final Map<String, AttributeValue> expressionAttributeValues = new HashMap<>(); expressionAttributeValues.put( EXPRESSION_ATTRIBUTE_VALUE_PK, AttributeValue.builder().s(partitionKeyValue).build()); expressionAttributeValues.put( EXPRESSION_ATTRIBUTE_VALUE_SK_PREFIX, AttributeValue.builder().s(sortKeyPrefix).build()); // Create the query request final QueryRequest queryRequest = QueryRequest.builder() .tableName(tableName) .keyConditionExpression(KEY_CONDITION_EXPRESSION) .expressionAttributeNames(expressionAttributeNames) .expressionAttributeValues(expressionAttributeValues) .build(); try { final QueryResponse response = dynamoDbClient.query(queryRequest); LOGGER.log(Level.INFO, "Query with begins_with condition successful. Found {0} items", response.count()); return response; } catch (ResourceNotFoundException e) { LOGGER.log(Level.SEVERE, "Table not found: {0}", tableName); throw e; } catch (DynamoDbException e) { LOGGER.log(Level.SEVERE, "Error querying with begins_with condition", e); throw e; } }

Demonstrate using begins_with with different prefix lengths with AWS SDK for Java 2.x.

public static void main(String[] args) { try { CodeSampleUtils.BeginsWithQueryConfig config = CodeSampleUtils.BeginsWithQueryConfig.fromArgs(args); LOGGER.log(Level.INFO, "Querying items where {0} = {1} and {2} begins with ''{3}''", new Object[] { config.getPartitionKeyName(), config.getPartitionKeyValue(), config.getSortKeyName(), config.getSortKeyPrefix() }); // Using the builder pattern to create and execute the query final QueryResponse response = new BeginsWithQueryBuilder() .withTableName(config.getTableName()) .withPartitionKeyName(config.getPartitionKeyName()) .withPartitionKeyValue(config.getPartitionKeyValue()) .withSortKeyName(config.getSortKeyName()) .withSortKeyPrefix(config.getSortKeyPrefix()) .withRegion(config.getRegion()) .execute(); // Process the results LOGGER.log(Level.INFO, "Found {0} items:", response.count()); response.items().forEach(item -> LOGGER.info(item.toString())); // Demonstrate with a different prefix if (!config.getSortKeyPrefix().isEmpty()) { String shorterPrefix = config.getSortKeyPrefix() .substring(0, Math.max(1, config.getSortKeyPrefix().length() / 2)); LOGGER.log(Level.INFO, "\nNow querying with a shorter prefix: ''{0}''", shorterPrefix); final QueryResponse response2 = new BeginsWithQueryBuilder() .withTableName(config.getTableName()) .withPartitionKeyName(config.getPartitionKeyName()) .withPartitionKeyValue(config.getPartitionKeyValue()) .withSortKeyName(config.getSortKeyName()) .withSortKeyPrefix(shorterPrefix) .withRegion(config.getRegion()) .execute(); LOGGER.log(Level.INFO, "Found {0} items with shorter prefix:", response2.count()); response2.items().forEach(item -> LOGGER.info(item.toString())); } } catch (IllegalArgumentException e) { LOGGER.log(Level.SEVERE, "Invalid input: {0}", e.getMessage()); printUsage(); } catch (ResourceNotFoundException e) { LOGGER.log(Level.SEVERE, "Table not found", e); } catch (DynamoDbException e) { LOGGER.log(Level.SEVERE, "DynamoDB error", e); } catch (Exception e) { LOGGER.log(Level.SEVERE, "Unexpected error", e); } }
  • For API details, see Query in AWS SDK for Java 2.x API Reference.

PrivacySite termsCookie preferences
© 2025, Amazon Web Services, Inc. or its affiliates. All rights reserved.