DynamoDB Query di Go (AWS SDK v2)

Query membaca setiap item yang berbagi satu partition key, secara opsional dipersempit dengan sort key. Di AWS SDK for Go v2 Anda menulis KeyConditionExpression pada dynamodb.QueryInput, dan QueryPaginator bawaan mengikuti LastEvaluatedKey di setiap halaman hasil untuk Anda.

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

Penjelasan

  • KeyConditionExpression — harus menyertakan kesetaraan pada partition key (#hashKey = :hashKeyValue) ditambah paling banyak satu kondisi sort-key (=, <, <=, >, >=, BETWEEN, atau begins_with). Alias #hashKey/#rangeKey di-resolve ke Artist/SongTitle via ExpressionAttributeNames (aman terhadap reserved word).
  • ExpressionAttributeValues — map :placeholder → typed-value (&types.AttributeValueMemberS{...}).
  • Paginasi — satu Query mengembalikan paling banyak 1 MB. dynamodb.NewQueryPaginator membungkus client dan terus memanggil hingga LastEvaluatedKey habis; loop HasMorePages() / NextPage(ctx) adalah pola kanonik SDK.
  • Set ScanIndexForward: aws.Bool(false) untuk membalik urutan sort-key (menaik adalah default).
  • Kueri sebuah secondary index dengan menambahkan IndexName: aws.String("...").
  • Lebih suka membangun kondisi dalam kode? Package expression (github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression) menyusun builder expression.Key(...).Equal(...) dan menghasilkan map name/value; attributevalue.UnmarshalListOfMaps mengubah page.Items menjadi struct Go.

Lakukan secara visual

DynamoDB Expression Builder menyusun key condition dan menyalin kode yang bisa dijalankan, jadi Anda tidak perlu menulis map placeholder dan value dengan tangan.

Untuk menjalankan kueri terhadap tabel nyata di GUI — form key-condition, grid berpaginasi, copy-as-code — unduh DynoTable.

Contoh terkait

References

Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bangun request ini secara visual

Susun operasi ini di DynamoDB Query Builder gratis — key condition, filter, index, Limit, urutan sortir, dan loop paginasi — lalu salin kembali sebagai program SDK v3, CLI, atau boto3 yang bisa dijalankan.

Buka DynamoDB Query Builder

Bekerja dengan DynamoDB tanpa Console

DynoTable adalah klien desktop yang cepat untuk DynamoDB — jelajahi tabel, jalankan query gaya SQL, dan edit Item secara lokal.