DynamoDB Scan em Go (AWS SDK v2)

Scantodos os itens de uma tabela ou índice, página por página, e então opcionalmente descarta linhas com uma FilterExpression. No AWS SDK for Go v2 o ScanPaginator embutido segue o LastEvaluatedKey até a tabela inteira ser lida.

Code

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/dynamodb"
	"github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
)

func main() {
	ctx := context.TODO()
	cfg, err := config.LoadDefaultConfig(ctx, config.WithRegion("us-east-1"))
	if err != nil {
		log.Fatalf("load config: %v", err)
	}
	client := dynamodb.NewFromConfig(cfg)

	paginator := dynamodb.NewScanPaginator(client, &dynamodb.ScanInput{
		TableName:        aws.String("Music"),
		FilterExpression: aws.String("#filter0 >= :filterValue0"),
		ExpressionAttributeNames: map[string]string{
			"#filter0": "Year",
		},
		ExpressionAttributeValues: map[string]types.AttributeValue{
			":filterValue0": &types.AttributeValueMemberN{Value: "2010"},
		},
	})

	var items []map[string]types.AttributeValue
	for paginator.HasMorePages() {
		page, err := paginator.NextPage(ctx)
		if err != nil {
			log.Fatalf("scan: %v", err)
		}
		items = append(items, page.Items...)
	}
	fmt.Printf("Matched %d items\n", len(items))
}

Explicação

  • FilterExpression — aplicada depois da leitura, no servidor. Ela encolhe a resposta mas não o custo: você paga para ler cada item varrido, filtrado ou não.
  • ExpressionAttributeNames — o atributo filtrado recebe um alias (#filter0Year), o que mantém palavras reservadas como Year seguras.
  • Paginação — cada página do Scan lê no máximo 1 MB antes de filtrar, então uma página filtrada pode voltar vazia enquanto a tabela ainda tem correspondências. dynamodb.NewScanPaginator continua chamando até o LastEvaluatedKey se esgotar — nunca pare na primeira página.
  • Defina Limit para limitar itens varridos por página (pré-filtro) — ele não limita os itens retornados.
  • Para um scan grande de tabela inteira, divida o trabalho entre goroutines com Segment / TotalSegments (um parallel scan).
  • Prefira Query. Scan lê a tabela inteira; em qualquer coisa que não seja uma tabela minúscula, é lento e caro.

Faça visualmente

Montando um filtro na mão? O DynamoDB Expression Builder constrói a FilterExpression + mapas de nome/valor e copia código executável.

Para explorar tabelas numa GUI — com grades de resultados filtradas e paginadas e copiar como código — baixe o DynoTable, em vez de fazer scan às cegas a partir de um script.

Exemplos relacionados

References

Última verificação em 2026-07-13 contra a documentação oficial da AWS vinculada acima.

Monte esta solicitação visualmente

Componha esta operação no Construtor de Consultas do DynamoDB gratuito — key condition, filtro, índice, Limit, ordem de classificação e um laço de paginação — e copie de volta como um programa executável para SDK v3, CLI ou boto3.

Abrir o Construtor de Consultas do DynamoDB

Trabalhe com o DynamoDB sem o Console

O DynoTable é um cliente desktop rápido para o DynamoDB — navegue pelas tabelas, execute consultas no estilo SQL e edite itens localmente.