How to get dynamodb to only return certain columns

Question:

enter image description here

Hello, I have a simple dynamodb table here filled with placeholder values.

How would i go about retrieving only sort_number, current_balance and side with a query/scan?

I’m using python and boto3, however, just stating what to configure for each of the expressions and parameters is also enough.

Asked By: Gunt.r

||

Answers:

Within the Boto3 SDK you can use:

  • get_item if you’re trying to retrieve a specific value
  • query, if you’re trying to get values from a single partition (the hash key).
  • scan if you’re trying to retrieve values from across multiple parititions.

Each of these have a parameter named ProjectionExpression, using this parameter provides the following functionality

A string that identifies one or more attributes to retrieve from the specified table or index. These attributes can include scalars, sets, or elements of a JSON document. The attributes in the expression must be separated by commas.

]You would specify the attributes that you want to retrieve comma separated, be aware that this does not reduce the cost of RCU that is applied for performing the interaction.

Answered By: Chris Williams
   table = dynamodb.Table('tablename')
   response = table.scan(
        AttributesToGet=['id']

        )

This works. but this method is deprecated, using Projections is recommended

Answered By: Mohammed Rafeeq

to return only some fields you should use ProjectionExpression in the Query configuration object, this is an string array with all the fields:

var params = {
        TableName: 'TableName',
        KeyConditionExpression: '#pk = :pk AND #sk = :sk',
        ExpressionAttributeValues: {
            ':pk': pk,
            ':sk': sk,
        },
        ExpressionAttributeNames: {
            '#sk':'sk',
            '#pk':'pk'
        },
        ProjectionExpression:['sort_number', 'current_balance','side']
    };
Answered By: Cristian Sepulveda