Go'da DynamoDB Query (AWS SDK v2)
Query, bir bölüm anahtarını paylaşan her öğeyi okur ve isteğe bağlı olarak sıralama anahtarına göre daraltır. Go v2 için AWS SDK'da bir dynamodb.QueryInput üzerinde bir KeyConditionExpression yazarsınız ve yerleşik QueryPaginator, sizin için her sonuç sayfasında 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.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))
}Açıklama
KeyConditionExpression— bölüm anahtarı üzerinde bir eşitlik (#hashKey = :hashKeyValue), artı en fazla bir sıralama anahtarı koşulu (=,<,<=,>,>=,BETWEENveyabegins_with) içermelidir.#hashKey/#rangeKeytakma adlarıExpressionAttributeNamesaracılığıylaArtist/SongTitle'a çözümlenir (ayrılmış sözcük güvenli).ExpressionAttributeValues—:placeholder→ türlü-değer eşlemesi (&types.AttributeValueMemberS{...}).- Sayfalama — bir
Queryen fazla 1 MB döndürür.dynamodb.NewQueryPaginatoristemciyi sarmalar veLastEvaluatedKeytükenene kadar çağırmaya devam eder;HasMorePages()/NextPage(ctx)döngüsü SDK'nın kanonik desenidir. - Sıralama anahtarı sırasını ters çevirmek için
ScanIndexForward: aws.Bool(false)ayarlayın (artan varsayılandır). IndexName: aws.String("...")ekleyerek bir ikincil indeksi sorgulayın.- Koşulları kodda oluşturmayı mı tercih edersiniz?
expressionpaketi (github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression),expression.Key(...).Equal(...)oluşturucularını bir araya getirir ve ad/değer eşlemelerini üretir;attributevalue.UnmarshalListOfMaps,page.Items'ı Go struct'larına dönüştürür.
Görsel olarak yapın
DynamoDB Expression Builder, anahtar koşulunu bir araya getirir ve çalıştırılabilir kodu kopyalar; böylece yer tutucu ve değer eşlemelerini elle yazmazsınız.
Gerçek tablolara karşı bir grafik arayüzde (GUI) sorgu çalıştırmak için — anahtar-koşul formu, sayfalanmış ızgara, kod olarak kopyalama — DynoTable'ı indirin.
İlgili örnekler
- Java'da DynamoDB Query — Java 2.x için AWS SDK ile aynı sorgu.
- Go'da DynamoDB Scan — bir bölüme anahtarla erişemediğinizde.
- Query ve Scan —
Query'nin neden doğru varsayılan olduğu. - Anahtar koşul ifadeleri — her geçerli bölüm/sıralama anahtarı operatörü.
- "Query condition missed key schema element" — anahtar koşulu yanlış özniteliği adlandırıyor veya bölüm anahtarını atlıyor.
- "Query key condition not supported" — anahtar koşulunun kullanamayacağı bir operatör, örneğin contains veya ikinci bir sıralama anahtarı koşulu.
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
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.