在 Go(AWS SDK v2)中使用 DynamoDB Scan

Scan 逐頁讀取表格或索引中的每一個項目,然後可選擇以 FilterExpression 丟棄列。在 AWS SDK for Go v2 中,內建的 ScanPaginator 會追蹤 LastEvaluatedKey,直到整個表格讀完。

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

說明

  • FilterExpression — 在伺服器端於讀取之後套用。它縮小的是回應,而成本:無論是否過濾,你都要為每個被掃描的項目付費。
  • ExpressionAttributeNames — 被過濾的屬性以別名表示(#filter0Year),讓像 Year 這樣的保留字保持安全。
  • 分頁 — 每個 Scan 頁在過濾 之前 最多讀取 1 MB,因此當表格仍有符合項目時,一個過濾後的頁可能回傳空的。dynamodb.NewScanPaginator 會持續呼叫直到 LastEvaluatedKey 耗盡 — 絕不要停在第一頁。
  • 設定 Limit 可限制每頁掃描的項目數(過濾前)— 它不限制回傳的項目數。
  • 對大型的全表 scan,以 Segment / TotalSegments 把工作分散到各 goroutine(一個平行 scan)。
  • 偏好 Query Scan 讀取整個表格;除了極小的表格以外,它又慢又貴。

改用視覺化操作

手動組裝 filter?DynamoDB Expression Builder 會建立 FilterExpression 與 name/value map 並複製可執行的程式碼。

想在 GUI 中探索表格 — 具備過濾、分頁的結果格線與複製為程式碼 — 下載 DynoTable,別再從指令稿盲目地 scan。

相關範例

References

最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。

以視覺化方式建構此請求

在免費的 DynamoDB 查詢建構器中組合此操作 — 鍵條件、Filter、Index、Limit、排序方向與分頁迴圈 — 再把它複製成可執行的 SDK v3、CLI 或 boto3 程式。

開啟 DynamoDB 查詢建構器

不必透過主控台就能操作 DynamoDB

DynoTable 是一款快速的 DynamoDB 桌面用戶端 — 瀏覽表格、執行 SQL 風格的查詢,並在本機編輯項目。