DynamoDB Query en Go (AWS SDK v2)

Query lee todos los items que comparten una clave de partición, acotando opcionalmente por la clave de ordenación. En AWS SDK para Go v2 escribes un KeyConditionExpression sobre un dynamodb.QueryInput, y el QueryPaginator integrado sigue LastEvaluatedKey por ti a través de cada página de resultados.

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.NewQueryPaginator(client, &dynamodb.QueryInput{
		TableName: aws.String("Music"),
		KeyConditionExpression: aws.String(
			"#hashKey = :hashKeyValue AND begins_with(#rangeKey, :rangeKeyValue)"),
		ExpressionAttributeNames: map[string]string{
			"#hashKey":  "Artist",
			"#rangeKey": "SongTitle",
		},
		ExpressionAttributeValues: map[string]types.AttributeValue{
			":hashKeyValue":  &types.AttributeValueMemberS{Value: "Arturo Sandoval"},
			":rangeKeyValue": &types.AttributeValueMemberS{Value: "C"},
		},
	})

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

Explicación

  • KeyConditionExpression — debe incluir una igualdad sobre la clave de partición (#hashKey = :hashKeyValue) más como máximo una condición de clave de ordenación (=, <, <=, >, >=, BETWEEN o begins_with). Los alias #hashKey/#rangeKey se resuelven a Artist/SongTitle mediante ExpressionAttributeNames (a salvo de palabras reservadas).
  • ExpressionAttributeValues — el mapa :placeholder → valor tipado (&types.AttributeValueMemberS{...}).
  • Paginación — un Query devuelve como máximo 1 MB. dynamodb.NewQueryPaginator envuelve el cliente y sigue llamando hasta agotar LastEvaluatedKey; el bucle HasMorePages() / NextPage(ctx) es el patrón canónico del SDK.
  • Pon ScanIndexForward: aws.Bool(false) para invertir el orden de la clave de ordenación (el ascendente es el valor por defecto).
  • Consulta un índice secundario añadiendo IndexName: aws.String("...").
  • ¿Prefieres construir las condiciones en código? El paquete expression (github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression) compone builders expression.Key(...).Equal(...) y genera los mapas de nombres/valores; attributevalue.UnmarshalListOfMaps convierte page.Items en structs de Go.

Hazlo visualmente

El DynamoDB Expression Builder monta la condición de clave y copia código ejecutable, así no escribes a mano los mapas de marcadores y valores.

Para ejecutar consultas contra tablas reales en una interfaz gráfica — formulario de condición de clave, cuadrícula paginada, copiar como código — descarga DynoTable.

Ejemplos relacionados

References

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Construye esta solicitud visualmente

Compón esta operación en el Generador de consultas de DynamoDB gratuito —condición de clave, filtro, índice, Limit, orden de clasificación y un bucle de paginación— y cópiala de vuelta como un programa ejecutable para SDK v3, CLI o boto3.

Abrir el Generador de consultas de DynamoDB

Trabaja con DynamoDB sin la Consola

DynoTable es un cliente de escritorio rápido para DynamoDB: explora tablas, ejecuta consultas estilo SQL y edita Items localmente.