Go'da DynamoDB Scan (AWS SDK v2)

Scan, bir tablo veya indekteki her öğeyi sayfa sayfa okur, ardından isteğe bağlı olarak bir FilterExpression ile satırları eler. Go v2 için AWS SDK'da yerleşik ScanPaginator, tablonun tamamı okunana kadar LastEvaluatedKey'i takip eder.

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

Açıklama

  • FilterExpression — okumadan sonra, sunucuda uygulanır. Yanıtı küçültür ama maliyeti değil: filtrelenmiş olsun ya da olmasın, taranan her öğeyi okumak için ödeme yaparsınız.
  • ExpressionAttributeNames — filtrelenen öznitelik bir takma ad alır (#filter0Year); bu da Year gibi ayrılmış sözcükleri güvende tutar.
  • Sayfalama — her Scan sayfası filtrelemeden önce en fazla 1 MB okur; bu nedenle tabloda hâlâ eşleşmeler varken filtrelenmiş bir sayfa boş dönebilir. dynamodb.NewScanPaginator, LastEvaluatedKey tükenene kadar çağırmaya devam eder — asla ilk sayfada durmayın.
  • Sayfa başına (filtreleme öncesi) taranan öğeleri sınırlamak için Limit ayarlayın — döndürülen öğeleri sınırlamaz.
  • Büyük bir tam tablo taraması için Segment / TotalSegments (bir paralel tarama) ile işi goroutine'lere bölün.
  • Query'yi tercih edin. Scan tablonun tamamını okur; çok küçük bir tablo dışında her şeyde yavaş ve pahalıdır.

Görsel olarak yapın

Bir filtreyi elle mi oluşturuyorsunuz? DynamoDB Expression Builder, FilterExpression + ad/değer eşlemelerini oluşturur ve çalıştırılabilir kodu kopyalar.

Bir betikten körlemesine taramak yerine tabloları bir grafik arayüzde (GUI) keşfetmek için — filtrelenmiş, sayfalanmış sonuç ızgaraları ve kod olarak kopyalama — DynoTable'ı indirin.

İlgili örnekler

References

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Bu isteği görsel olarak oluşturun

Bu operasyonu ücretsiz DynamoDB Sorgu Oluşturucuda kurun — anahtar koşulu, filtre, index, Limit, sıralama yönü ve bir sayfalama döngüsü — ve çalıştırılabilir bir SDK v3, CLI veya boto3 programı olarak geri kopyalayın.

DynamoDB Sorgu Oluşturucuyu aç

Console olmadan DynamoDB ile çalışın

DynoTable, DynamoDB için hızlı bir masaüstü istemcisidir — tablolara göz atın, SQL tarzı sorgular çalıştırın ve item'ları yerel olarak düzenleyin.