DynamoDB Scan in Go (AWS SDK v2)

Scan liest jedes Item in einer Tabelle oder einem Index, Seite für Seite, und verwirft dann optional Zeilen mit einer FilterExpression. Im AWS SDK for Go v2 folgt der eingebaute ScanPaginator LastEvaluatedKey, bis die ganze Tabelle gelesen ist.

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))
}

Erklärung

  • FilterExpressionnach dem Read angewendet, auf dem Server. Sie verkleinert die Antwort, nicht die Kosten: du bezahlst, um jedes gescannte Item zu lesen, gefiltert oder nicht.
  • ExpressionAttributeNames — das gefilterte Attribut wird aliasiert (#filter0Year), was reservierte Wörter wie Year absichert.
  • Pagination — jede Scan-Seite liest höchstens 1 MB vor dem Filtern, sodass eine gefilterte Seite leer zurückkommen kann, während die Tabelle noch Treffer hat. dynamodb.NewScanPaginator ruft weiter auf, bis LastEvaluatedKey erschöpft ist — höre nie bei der ersten Seite auf.
  • Setze Limit, um die pro Seite gescannten Items zu begrenzen (vor dem Filtern) — es begrenzt nicht die zurückgegebenen Items.
  • Für einen großen Full-Table-Scan teile die Arbeit auf Goroutinen mit Segment / TotalSegments (ein Parallel-Scan).
  • Bevorzuge Query. Scan liest die ganze Tabelle; bei allem außer einer winzigen Tabelle ist das langsam und teuer.

Visuell erledigen

Einen Filter von Hand zusammenbauen? Der DynamoDB Expression Builder baut die FilterExpression + Name-/Wert-Maps und kopiert lauffähigen Code.

Um Tabellen in einer GUI zu erkunden — mit gefilterten, paginierten Ergebnisrastern und Copy-as-Code — lade DynoTable herunter, statt blind aus einem Skript zu scannen.

Verwandte Beispiele

References

Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.

Diesen Request visuell bauen

Stelle diese Operation im kostenlosen DynamoDB Query Builder zusammen — Key-Bedingung, Filter, Index, Limit, Sortierreihenfolge und eine Paginierungsschleife — und kopiere sie als lauffähiges SDK-v3-, CLI- oder boto3-Programm zurück.

DynamoDB Query Builder öffnen

Mit DynamoDB ohne die Console arbeiten

DynoTable ist ein schneller Desktop-Client für DynamoDB — durchsuche Tabellen, führe SQL-artige Queries aus und bearbeite Items lokal.