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, ataubegins_with). Alias#hashKey/#rangeKeydi-resolve keArtist/SongTitleviaExpressionAttributeNames(aman terhadap reserved word).ExpressionAttributeValues— map:placeholder→ typed-value (&types.AttributeValueMemberS{...}).- Paginasi — satu
Querymengembalikan paling banyak 1 MB.dynamodb.NewQueryPaginatormembungkus client dan terus memanggil hinggaLastEvaluatedKeyhabis; loopHasMorePages()/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 builderexpression.Key(...).Equal(...)dan menghasilkan map name/value;attributevalue.UnmarshalListOfMapsmengubahpage.Itemsmenjadi 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
- DynamoDB Query di Java — kueri yang sama dengan AWS SDK for Java 2.x.
- DynamoDB Scan di Go — ketika Anda tidak bisa masuk ke sebuah partisi lewat key.
- Query vs. Scan — mengapa
Queryadalah default yang tepat. - Key condition expressions — setiap operator partition/sort-key yang legal.
- "Query condition missed key schema element" — key condition menyebut atribut yang salah atau melewati partition key.
- "Query key condition not supported" — operator yang tidak bisa digunakan key condition, seperti contains atau kondisi sort-key kedua.
References
- Query — Amazon DynamoDB API Reference
- Use Query with an AWS SDK or CLI — Amazon DynamoDB Developer Guide
- dynamodb package — AWS SDK for Go v2 (pkg.go.dev)
- expression package — AWS SDK for Go v2 (pkg.go.dev)
- Querying tables — Amazon DynamoDB Developer Guide
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.