query-table

code

Note reserved-word was used for column naming so we need to do some extra work for query:

package aws.ddb.snippets.lsi;

import java.util.HashMap;
import java.util.Map;

import aws.ddb.snippets.AlphabetOutUtil;
import aws.ddb.snippets.Constants;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
import software.amazon.awssdk.services.dynamodb.model.QueryRequest;
import software.amazon.awssdk.services.dynamodb.model.QueryResponse;

public class QueryLSI {
    
    private static final DynamoDbClient DDB = DynamoDbClient.builder()
        .region(Region.US_WEST_2)
        .build();

    public static void main(String[] args) {

        queryTable();
    }

    private static void queryTable() {
        final String tableName = Constants.LSI_BY_TIMESTAMP_TABLE_NAME;
        final String lsiName = "timestamp-index";
        final String hashKeyValue = "alphabet_200KB_per_row";
        final String timestampValue = "2017-07-09T15:00:00Z";  // Replace with the timestamp value you want to query

        Map<String, String> expressionAttributeNames = new HashMap<>();
        expressionAttributeNames.put("#ts", "timestamp");

        Map<String, AttributeValue> expressionAttributeValues = new HashMap<>();
        expressionAttributeValues.put(":v1", AttributeValue.builder().s(hashKeyValue).build());
        expressionAttributeValues.put(":v2", AttributeValue.builder().s(timestampValue).build());

        QueryRequest queryRequest = QueryRequest.builder()
            .tableName(tableName)
            .indexName(lsiName)
            .keyConditionExpression("hash_key = :v1 and #ts >= :v2")  // Changed "=" to "<" to query for items with a timestamp less than the given value
            .expressionAttributeNames(expressionAttributeNames)
            .expressionAttributeValues(expressionAttributeValues)
            .build();

        QueryResponse queryResponse = DDB.query(queryRequest);

        AlphabetOutUtil.printAll(queryResponse);

    }
}
gt.sandbox.checkout.commit 1d06346 \
&& cd "${GT_SANDBOX_REPO}/javaSandbox"