全部產品
Search
文件中心

Tablestore:統計彙總

更新時間:Aug 12, 2026

使用 Tablestore Go SDK 對多元索引查詢結果計算指標或按條件分組。

前提條件

安裝Tablestore Go SDK並初始化用戶端。

功能說明

統計彙總在查詢結果上計算平均值、最大值、最小值、總和、計數、去重計數、百分位元或 TopRows,也可以按欄位、範圍、日期、地理位置、過濾條件和按鍵組合分組。用於指標彙總或按欄位值、範圍、長條圖等方式分組的欄位必須啟用排序與統計彙總;GroupByFilter 中的過濾條件遵循對應查詢類型的欄位要求。

重要
  • 去重計數、百分位元和欄位值分組採用近似計算。去重計數小於 1 萬時結果接近精確值,達到 1 億時誤差約為 2%。百分位越接近兩端通常越準確,例如 P1 或 P99 通常比 P50 更準確。欄位值分組並行計算時可能存在少量誤差。

  • 多個統計彙總可以組合使用。彙總數量多或嵌套層級深時會增加請求複雜度並影響響應速度。嵌套層級限制請參見多元索引使用限制。

以下樣本查詢多元索引中的全部資料,計算價格的最小值、最大值、總和、平均值、非空值數量、類別去重數和 P50,並按類別分組。

searchQuery := search.NewSearchQuery().
    SetQuery(&search.MatchAllQuery{}).
    SetLimit(0).
    Aggregation(
        search.NewMinAggregation("min_price", "price"),
        search.NewMaxAggregation("max_price", "price"),
        search.NewSumAggregation("sum_price", "price"),
        search.NewAvgAggregation("avg_price", "price"),
        search.NewCountAggregation("price_count", "price"),
        search.NewDistinctCountAggregation("category_count", "category"),
        search.NewPercentilesAggregation("price_percentiles", "price").
            SetPercents([]float64{50}),
    ).
    GroupBy(search.NewGroupByField("category_group", "category").Size(10))

response, err := client.Search(&tablestore.SearchRequest{
    TableName:   "example_table",
    IndexName:   "example_index",
    SearchQuery: searchQuery,
})
if err != nil {
    log.Fatal(err)
}

minResult, err := response.AggregationResults.Min("min_price")
if err != nil {
    log.Fatal(err)
}
maxResult, err := response.AggregationResults.Max("max_price")
if err != nil {
    log.Fatal(err)
}
sumResult, err := response.AggregationResults.Sum("sum_price")
if err != nil {
    log.Fatal(err)
}
avg, err := response.AggregationResults.Avg("avg_price")
if err != nil {
    log.Fatal(err)
}
countResult, err := response.AggregationResults.Count("price_count")
if err != nil {
    log.Fatal(err)
}
distinctResult, err := response.AggregationResults.DistinctCount("category_count")
if err != nil {
    log.Fatal(err)
}
percentilesResult, err := response.AggregationResults.Percentiles("price_percentiles")
if err != nil {
    log.Fatal(err)
}
groups, err := response.GroupByResults.GroupByField("category_group")
if err != nil {
    log.Fatal(err)
}

fmt.Println(minResult.Value, maxResult.Value, sumResult.Value)
fmt.Println(avg.Value)
fmt.Println(countResult.Value, distinctResult.Value)
fmt.Println(percentilesResult.PercentilesAggregationItems)
fmt.Println(groups.Items)

參數說明

查詢請求

名稱

類型

說明

TableName(必選)

string

資料表名稱。

IndexName(必選)

string

多元索引名稱。

SearchQuery(必選)

search.SearchQuery

查詢條件、指標彙總和分組配置。

ColumnsToGet(可選)

*tablestore.ColumnsToGet

返回列配置,僅 TopRowsAggregation 返回分組內行時生效。未設定時只返回主鍵列。

RoutingValues(可選)

[]*tablestore.PrimaryKey

自訂路由欄位對應的主索引值列表。未配置自訂路由時無需設定。

TimeoutMs(可選)

*int32

請求級逾時時間,單位為毫秒。

查詢配置

名稱

類型

說明

SetQuery(必選)

search.Query

設定查詢條件。

SetOffset(可選)

int32

設定本次查詢的起始位置,預設值為 0。使用 Offset 翻頁時,Offset + Limit 不能超過 100000。

SetLimit(可選)

int32

設定本次查詢返回的最大行數,預設值為 10,最大值為 100。設定為 0 時不返回具體行。

SetCollapse(可選)

*search.Collapse

設定結果摺疊。配置方法請參見摺疊(去重)。

SetSort(可選)

*search.Sort

設定返回結果的排序方式。配置方法請參見排序和翻頁。

SetGetTotalCount(可選)

bool

是否統計匹配總行數,預設值為 false。

SetToken(可選)

[]byte

設定上一次響應返回的 NextToken,以繼續讀取後續資料。調用該方法會清除 Sort,因為 Token 已包含上一頁的排序條件。使用 Token 翻頁時不能設定 Offset。

SetSearchFilter(可選)

*search.SearchFilter

對查詢結果執行後過濾。配置方法請參見查詢後過濾。

Aggregation(可選)

...search.Aggregation

設定統計彙總。配置方法請參見統計彙總。

GroupBy(可選)

...search.GroupBy

設定分組。配置方法請參見統計彙總。

指標彙總

名稱

類型

說明

AvgAggregation(可選)

search.AvgAggregation

計算平均值。

MaxAggregation(可選)

search.MaxAggregation

計算最大值。

MinAggregation(可選)

search.MinAggregation

計算最小值。

SumAggregation(可選)

search.SumAggregation

計算總和。

CountAggregation(可選)

search.CountAggregation

計算非空值數量。

DistinctCountAggregation(可選)

search.DistinctCountAggregation

計算不同值數量。

PercentilesAggregation(可選)

search.PercentilesAggregation

計算百分位元。

TopRowsAggregation(可選)

search.TopRowsAggregation

返回分組內的前若干行。

MinAggregation、MaxAggregation、AvgAggregation 和 SumAggregation

名稱

類型

說明

AggName(必選)

string

彙總名稱,在讀取結果時作為標識。

Field(必選)

string

彙總欄位名稱。Min、Max 和 Avg 支援 Long、Double 和 Date,Sum 支援 Long 和 Double。

MissingValue(可選)

interface{}

欄位缺失時參與計算的替代值。未設定時忽略欄位缺失的行。

CountAggregation 和 DistinctCountAggregation

名稱

類型

說明

AggName(必選)

string

彙總名稱。

Field(必選)

string

統計欄位名稱,支援 Long、Double、Boolean、Keyword、Date、IP 和 Geo-point。Count 不統計欄位缺失的行。

MissingValue(可選)

interface{}

僅 DistinctCountAggregation 支援,欄位缺失時使用該值參與去重統計。未設定時忽略欄位缺失的行。

CountAggregation 統計指定欄位的非空值行數,適合稀疏列。若要統計查詢匹配總行數,請調用 SetGetTotalCount(true) 並讀取 SearchResponse.TotalCount;若要統計多元索引全部行,查詢條件使用 MatchAllQuery。

PercentilesAggregation

Go SDK 1.7.0 及以上版本支援 PercentilesAggregation。

名稱

類型

說明

AggName(必選)

string

彙總名稱。

Field(必選)

string

彙總欄位名稱,支援 Long、Double 和 Date。

Percents(必選)

[]float64

要計算的百分位元,例如 25、50、90 和 99。

MissingValue(可選)

interface{}

欄位缺失時參與計算的替代值。未設定時忽略欄位缺失的行。

TopRowsAggregation

TopRowsAggregation 作為分組的子彙總使用。Go SDK 1.7.0 及以上版本支援該功能。

名稱

類型

說明

AggName(必選)

string

彙總名稱。

Limit(可選)

*int32

每個分組內返回的最大行數,預設值為 1。

Sort(可選)

*search.Sort

返回行的排序方式。

返回哪些屬性列由 SearchRequest.ColumnsToGet 控制。要直接從多元索引返回屬性列,建立多元索引時必須儲存相應欄位;未設定返回列時只返回主鍵列。

分組

名稱

類型

說明

GroupByField(可選)

search.GroupByField

按欄位值分組。

GroupByRange(可選)

search.GroupByRange

按數值範圍分組。

GroupByGeoDistance(可選)

search.GroupByGeoDistance

按地理距離分組。

GroupByFilter(可選)

search.GroupByFilter

按過濾條件分組。

GroupByHistogram(可選)

search.GroupByHistogram

按固定數值間隔分組。

GroupByDateHistogram(可選)

search.GroupByDateHistogram

按日期或時間間隔分組。

GroupByGeoGrid(可選)

search.GroupByGeoGrid

按 GeoHash 網格分組。

GroupByComposite(可選)

search.GroupByComposite

按多個欄位的按鍵組合分組並支援翻頁。

GroupByField

名稱

類型

說明

AggName(必選)

string

分組名稱。

Field(必選)

string

分組欄位名稱,支援 Long、Double、Boolean、Keyword、Date 和 IP。

Sz(可選)

*int32

返回的分組數量,預設值為 10,最大值為 2000。

Sorters(可選)

[]search.GroupBySorter

分組排序方式,多個規則按列表順序生效。預設按分組內行數降序排列。

SubAggList(可選)

[]search.Aggregation

子彙總列表。

SubGroupByList(可選)

[]search.GroupBy

子分組列表。

分組排序

分組支援以下排序類型:

  • GroupKeyGroupBySort:按分組值的字典序升序或降序排列。

  • RowCountGroupBySort:按分組內行數升序或降序排列,預設按此類型降序排列。

  • SubAggGroupBySort:按指定子指標彙總的結果升序或降序排列。

GroupByRange

名稱

類型

說明

AggName(必選)

string

分組名稱。

Field(必選)

string

分組欄位名稱,支援 Long 和 Double。

RangeList(必選)

[]search.Range

左閉右開的分組範圍列表。邊界可使用 search.NegInf 和 search.Inf。

SubAggList(可選)

[]search.Aggregation

子彙總列表。

SubGroupByList(可選)

[]search.GroupBy

子分組列表。

GroupByGeoDistance

名稱

類型

說明

AggName(必選)

string

分組名稱。

Field(必選)

string

分組欄位名稱,僅支援 Geo-point。

Origin(必選)

search.GeoPoint

中心座標,緯度在前、經度在後。緯度範圍為 [-90,+90],經度範圍為 [-180,+180]。

RangeList(必選)

[]search.Range

左閉右開的距離範圍列表,單位為米。邊界可使用 search.NegInf 和 search.Inf。

SubAggList(可選)

[]search.Aggregation

子彙總列表。

SubGroupByList(可選)

[]search.GroupBy

子分組列表。

GroupByFilter

名稱

類型

說明

AggName(必選)

string

分組名稱。

Queries(必選)

[]search.Query

過濾條件列表,結果順序與查詢條件順序一致。

SubAggList(可選)

[]search.Aggregation

子彙總列表。

SubGroupByList(可選)

[]search.GroupBy

子分組列表。

GroupByHistogram

名稱

類型

說明

GroupByName(必選)

string

分組名稱。

Field(必選)

string

分組欄位名稱,支援 Long 和 Double。

Interval(必選)

interface{}

數值分組間隔。

FieldRange(可選)

model.FiledRange

參與分組的欄位值範圍。配置後,(Max - Min) / Interval 不能超過 2000。

Missing(可選)

interface{}

欄位缺失時使用的分組值。未設定時忽略欄位缺失的行。

MinDocCount(可選)

*int64

返回分組需要包含的最少行數。

Sorters(可選)

[]search.GroupBySorter

分組排序方式。

SubAggList(可選)

[]search.Aggregation

子彙總列表。

SubGroupByList(可選)

[]search.GroupBy

子分組列表。

GroupByDateHistogram

Go SDK 1.7.10 及以上版本支援 GroupByDateHistogram。

名稱

類型

說明

GroupByName(必選)

string

分組名稱。

Field(必選)

string

分組欄位名稱,僅支援 Date。

Interval(必選)

model.DateTimeValue

日期或時間分組間隔,由數值和時間單位組成。

FieldRange(可選)

model.FiledRange

參與分組的欄位值範圍。配置後,(Max - Min) / Interval 不能超過 2000。

Missing(可選)

interface{}

欄位缺失時使用的日期分組值。未設定時忽略欄位缺失的行。

MinDocCount(可選)

*int64

返回分組需要包含的最少行數。

TimeZone(可選)

*string

格式為 +hh:mm 或 -hh:mm,例如 +08:00。Date 欄位格式未包含時區時,可設定該參數避免彙總結果產生時差。

Sorters(可選)

[]search.GroupBySorter

分組排序方式。

SubAggList(可選)

[]search.Aggregation

子彙總列表。

SubGroupByList(可選)

[]search.GroupBy

子分組列表。

GroupByGeoGrid

Go SDK 1.7.12 及以上版本支援 GroupByGeoGrid。

名稱

類型

說明

GroupByName(必選)

string

分組名稱。

Field(必選)

string

Geo-point 欄位名稱。

Precision(必選)

model.GeoHashPrecision

GeoHash 網格精度。枚舉序號越大,網格越小。

Size(必選)

int64

返回的網格分組數量。

SubAggList(可選)

[]search.Aggregation

子彙總列表。

SubGroupByList(可選)

[]search.GroupBy

子分組列表。

GroupByComposite

Go SDK 1.7.15 及以上版本支援 GroupByComposite。

名稱

類型

說明

GroupByName(必選)

string

分組名稱。

SourceGroupByList(必選)

[]search.GroupBy

多欄位分組源,最多包含 32 個欄位,僅支援 GroupByField、GroupByHistogram 和 GroupByDateHistogram。GroupByField 源只使用名稱、欄位和排序;GroupByHistogram 源只使用名稱、欄位、間隔和排序;GroupByDateHistogram 源還可使用 TimeZone。源只支援按分組值排序,預設降序;欄位值不存在時,對應鍵返回 null。

Size(可選)

*int32

本次返回的按鍵組合數量,預設值為 10,最大值為 2000。不能與 SuggestedSize 同時設定。

SuggestedSize(可選)

*int32

面向 Spark、Presto 等計算引擎高吞吐情境的軟式節流。可設定為 -1 或大於服務端限制的值,實際返回數量為 min(SuggestedSize, 服務端分組限制, 總分組數)。不能與 Size 同時設定。

NextToken(可選)

*string

上一頁分組結果返回的翻頁憑證。

SubAggList(可選)

[]search.Aggregation

子彙總列表。

SubGroupByList(可選)

[]search.GroupBy

子分組列表。GroupByComposite 本身不能作為其他分組的子分組。

傳回值

從 SearchResponse.AggregationResults 按彙總名稱讀取指標結果,從 SearchResponse.GroupByResults 按分組名稱讀取分組結果。

指標彙總結果

名稱

類型

說明

Avg、Max、Min、Sum

Value float64

分別調用 AggregationResults.Avg、Max、Min 或 Sum 並傳入彙總名稱,讀取返回對象的 Value。Avg、Max 和 Min 可調用 HasValue 判斷結果是否包含有效值。

Count、DistinctCount

Value int64

分別調用 AggregationResults.Count 或 DistinctCount 並傳入彙總名稱,讀取返回對象的 Value。

Percentiles

PercentilesAggregationItems []search.PercentilesAggregationItem

調用 AggregationResults.Percentiles 並傳入彙總名稱。每個結果項的 Key 為百分位元,Value 為對應值。

TopRows

Value []model.Row

調用 AggregationResults.TopRows 並傳入彙總名稱,讀取返回對象的 Value。

分組結果

名稱

類型

說明

GroupByField

[]search.GroupByFieldResultItem

調用 GroupByResults.GroupByField 擷取結果。每項包含 Key、RowCount、SubAggregations 和 SubGroupBys。

GroupByRange

[]search.GroupByRangeResultItem

調用 GroupByResults.GroupByRange 擷取結果。每項包含 From、To、RowCount、SubAggregations 和 SubGroupBys。

GroupByGeoDistance

[]search.GroupByGeoDistanceResultItem

調用 GroupByResults.GroupByGeoDistance 擷取結果。每項包含距離範圍 From 和 To、RowCount、SubAggregations 和 SubGroupBys。

GroupByFilter

[]search.GroupByFilterResultItem

調用 GroupByResults.GroupByFilter 擷取結果。結果順序與 Queries 順序一致,每項包含 RowCount、SubAggregations 和 SubGroupBys。

GroupByHistogram

[]search.GroupByHistogramItem

調用 GroupByResults.GroupByHistogram 擷取結果。每項的 Key 為分組值,Value 為分組內行數,並包含 SubAggregations 和 SubGroupBys。

GroupByDateHistogram

[]search.GroupByDateHistogramItem

調用 GroupByResults.GroupByDateHistogram 擷取結果。每項包含毫秒時間戳記 Timestamp、RowCount、SubAggregations 和 SubGroupBys。

GroupByGeoGrid

[]search.GroupByGeoGridResultItem

調用 GroupByResults.GroupByGeoGrid 擷取結果。每項包含 GeoHash Key、網格邊界 GeoGrid、RowCount、SubAggregations 和 SubGroupBys。

GroupByComposite

[]search.GroupByCompositeResultItem

調用 GroupByResults.GroupByComposite 擷取結果。SourceGroupByNames 表示鍵順序;每項的 Keys 與其一一對應,並包含 RowCount、SubAggregations 和 SubGroupBys。NextToken 為下一頁憑證。

情境樣本

使用子彙總和子分組

以下樣本按類別分組,在每個類別中計算最高價格,並繼續按狀態分組。

groupBy := search.NewGroupByField("category_group", "category").
    Size(10).
    SubAggregation(search.NewMaxAggregation("max_price", "price")).
    SubGroupBy(search.NewGroupByField("status_group", "status").Size(10))

searchQuery := search.NewSearchQuery().
    SetQuery(&search.MatchAllQuery{}).
    SetLimit(0).
    GroupBy(groupBy)
response, err := client.Search(&tablestore.SearchRequest{
    TableName:   "example_table",
    IndexName:   "example_index",
    SearchQuery: searchQuery,
})
if err != nil {
    log.Fatal(err)
}

result, err := response.GroupByResults.GroupByField("category_group")
if err != nil {
    log.Fatal(err)
}
for _, item := range result.Items {
    maxPrice, err := item.SubAggregations.Max("max_price")
    if err != nil {
        log.Fatal(err)
    }
    statuses, err := item.SubGroupBys.GroupByField("status_group")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(item.Key, maxPrice.Value, statuses.Items)
}

使用多欄位分組並翻頁

GroupByComposite 以扁平按鍵組合返回多欄位分組結果,並通過 NextToken 連續讀取後續分組。

composite := search.NewGroupByComposite("category_status_group").
    SourceGroupBys(
        search.NewGroupByField("category", "category"),
        search.NewGroupByField("status", "status"),
    ).
    SetSize(100)

var nextToken *string
for {
    if nextToken != nil {
        composite.SetNextToken(nextToken)
    }
    searchQuery := search.NewSearchQuery().
        SetQuery(&search.MatchAllQuery{}).
        SetLimit(0).
        GroupBy(composite)
    response, err := client.Search(&tablestore.SearchRequest{
        TableName:   "example_table",
        IndexName:   "example_index",
        SearchQuery: searchQuery,
    })
    if err != nil {
        log.Fatal(err)
    }

    result, err := response.GroupByResults.GroupByComposite(
        "category_status_group",
    )
    if err != nil {
        log.Fatal(err)
    }
    for _, item := range result.Items {
        fmt.Println(item.Keys, item.RowCount)
    }

    nextToken = result.NextToken
    if nextToken == nil || *nextToken == "" {
        break
    }
}

按範圍、距離和過濾條件分組

以下樣本在同一個查詢中按價格範圍、地理距離和過濾條件分別分組。

priceRanges := search.NewGroupByRange("price_ranges", "price").
    Range(0, 200).
    Range(200, 500)
distanceRanges := search.NewGroupByGeoDistance(
    "distance_ranges",
    "location",
    search.GeoPoint{Lat: 30.2741, Lon: 120.1551},
).
    Range(0, 100000).
    Range(100000, 1500000)
categoryFilters := search.NewGroupByFilter("category_filters").
    Query(&search.TermQuery{FieldName: "category", Term: "book-go"}).
    Query(&search.TermQuery{FieldName: "category", Term: "game"})

searchQuery := search.NewSearchQuery().
    SetQuery(&search.MatchAllQuery{}).
    SetLimit(0).
    GroupBy(priceRanges, distanceRanges, categoryFilters)
response, err := client.Search(&tablestore.SearchRequest{
    TableName:   "example_table",
    IndexName:   "example_index",
    SearchQuery: searchQuery,
})
if err != nil {
    log.Fatal(err)
}

priceResult, err := response.GroupByResults.GroupByRange("price_ranges")
if err != nil {
    log.Fatal(err)
}
distanceResult, err := response.GroupByResults.GroupByGeoDistance(
    "distance_ranges",
)
if err != nil {
    log.Fatal(err)
}
filterResult, err := response.GroupByResults.GroupByFilter("category_filters")
if err != nil {
    log.Fatal(err)
}
fmt.Println(priceResult.Items)
fmt.Println(distanceResult.Items)
fmt.Println(filterResult.Items)

產生數值和日期長條圖

以下樣本按固定價格間隔產生數值長條圖,並按月產生日期長條圖。

groupKeyAscending := []search.GroupBySorter{
    &search.GroupKeyGroupBySort{Order: search.SortOrder_ASC.Enum()},
}
priceHistogram := search.NewGroupByHistogram("price_histogram", "price").
    SetInterval(int64(200)).
    SetFiledRange(int64(0), int64(600)).
    SetMinDocCount(1).
    SetGroupBySorters(groupKeyAscending)
dateHistogram := search.NewGroupByDateHistogram(
    "date_histogram",
    "event_time",
).
    SetInterval(model.DateTimeValue{
        Value: proto.Int32(1),
        Unit:  model.DateTimeUnit_MONTH.Enum(),
    }).
    SetFiledRange("2026-01-01T00:00:00", "2026-05-01T00:00:00").
    SetTimeZone("+08:00").
    SetMinDocCount(1).
    SetGroupBySorters(groupKeyAscending)

searchQuery := search.NewSearchQuery().
    SetQuery(&search.MatchAllQuery{}).
    SetLimit(0).
    GroupBy(priceHistogram, dateHistogram)
response, err := client.Search(&tablestore.SearchRequest{
    TableName:   "example_table",
    IndexName:   "example_index",
    SearchQuery: searchQuery,
})
if err != nil {
    log.Fatal(err)
}

priceResult, err := response.GroupByResults.GroupByHistogram("price_histogram")
if err != nil {
    log.Fatal(err)
}
dateResult, err := response.GroupByResults.GroupByDateHistogram("date_histogram")
if err != nil {
    log.Fatal(err)
}
fmt.Println(priceResult.Items)
fmt.Println(dateResult.Items)

按地理網格分組

以下樣本按約 39 km × 19 km 的 GeoHash 網格統計地理位置欄位。

searchQuery := search.NewSearchQuery().
    SetQuery(&search.MatchAllQuery{}).
    SetLimit(0).
    GroupBy(
        search.NewGroupByGeoGrid("geo_grid", "location").
            SetPrecision(model.GHP_39KM_19KM_4).
            SetSize(100),
    )
response, err := client.Search(&tablestore.SearchRequest{
    TableName:   "example_table",
    IndexName:   "example_index",
    SearchQuery: searchQuery,
})
if err != nil {
    log.Fatal(err)
}

result, err := response.GroupByResults.GroupByGeoGrid("geo_grid")
if err != nil {
    log.Fatal(err)
}
fmt.Println(result.Items)

擷取分組內的行

以下樣本按類別分組,並返回每個類別中價格最高的一行。

topRows := search.NewTopRowsAggregation("top_price").
    SetLimit(1).
    SetSort(&search.Sort{Sorters: []search.Sorter{
        &search.FieldSort{
            FieldName: "price",
            Order:     search.SortOrder_DESC.Enum(),
        },
    }})
groupBy := search.NewGroupByField("category_group", "category").
    Size(10).
    SubAggregation(topRows)
searchQuery := search.NewSearchQuery().
    SetQuery(&search.MatchAllQuery{}).
    SetLimit(0).
    GroupBy(groupBy)

response, err := client.Search(&tablestore.SearchRequest{
    TableName:   "example_table",
    IndexName:   "example_index",
    SearchQuery: searchQuery,
    ColumnsToGet: &tablestore.ColumnsToGet{
        Columns: []string{"category", "price"},
    },
})
if err != nil {
    log.Fatal(err)
}

groups, err := response.GroupByResults.GroupByField("category_group")
if err != nil {
    log.Fatal(err)
}
for _, item := range groups.Items {
    rows, err := item.SubAggregations.TopRows("top_price")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(item.Key, rows.Value)
}

多欄位分組方式對比

按多個欄位分組時,可以嵌套多個 GroupByField,也可以使用 GroupByComposite。根據返回結構、排序和是否需要翻頁選擇。

方式

特點

嵌套 GroupByField

按父子層級返回,每層最多返回 2000 個分組;不支援分組翻頁;支援按分組值、行數或子彙總值排序,並支援子彙總。

GroupByComposite

以扁平按鍵組合返回,最多包含 32 個欄位;每頁最多返回 2000 個分組並支援通過 NextToken 翻頁;每個分組源僅支援按分組值排序,預設降序。Date 欄位的分組鍵以時間戳記字串返回。