全部產品
Search
文件中心

Tablestore:過濾器

更新時間:Aug 13, 2026

Go SDK 可在讀取寬表模型資料時使用服務端過濾器篩選行或截取返回的屬性列。

前提條件

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

功能說明

過濾器在服務端對讀取結果進行二次篩選,不減少讀取消耗的 CU。GetRowGetRangeBatchGetRow 的查詢條件均可設定過濾器。Go SDK 支援以下類型:

  • 單屬性列值過濾器SingleColumnCondition):判斷單個屬性列值是否符合條件。

  • 單屬性列正則過濾器SingleColumnValueRegexFilter):從 STRING 屬性列中提取子字串、轉換類型後再比較。

  • 組合過濾器CompositeColumnCondition):通過 AND、OR 或 NOT 組合多個過濾器,最多包含 32 個條件。

  • 列分頁過濾器PaginationFilter):按位移量和數量截取返回的屬性列,不判斷列值。

以下樣本使用單屬性列值過濾器,僅返回 score >= 60 的行。

filter := tablestore.NewSingleColumnCondition(
    "score",
    tablestore.CT_GREATER_EQUAL,
    int64(60),
)

request.RangeRowQueryCriteria.Filter = filter
response, err := client.GetRange(request)
if err != nil {
    log.Fatal(err)
}
fmt.Println(response.Rows)

參數說明

單屬性列值過濾器

調用 NewSingleColumnCondition(columnName, comparator, value) 建立單屬性列值過濾器。SingleColumnCondition 包含以下參數。

名稱

類型

說明

ColumnName(必選)

*string

要判斷的屬性列名稱。

Comparator(必選)

*ComparatorType

關係運算子。支援 CT_EQUALCT_NOT_EQUALCT_GREATER_THANCT_GREATER_EQUALCT_LESS_THANCT_LESS_EQUAL

ColumnValue(必選)

interface{}

用於比較的值。

FilterIfMissing(可選)

bool

行不包含判斷列時是否過濾該行。預設值為 false,即返回該行。

LatestVersionOnly(可選)

bool

是否只判斷最新版本。預設值為 false,即任意版本滿足條件時返回該行。

單屬性列正則過濾器

調用 NewSingleColumnValueRegexFilter(columnName, comparator, rule, value) 建立正則過濾器。只有 STRING 屬性列支援正則過濾。

除單屬性列值過濾器的參數外,還需設定 ValueTransferRule

名稱

類型

說明

Regex(必選)

string

用於提取子字串的Regex,長度不超過 256 位元組。

  • 支援 Perl 相容Regex(PCRE)和單位元組Regex。

  • Regex不支援包含中文字元。

  • 支援分組文法。Regex包含分組時,使用第一個分組匹配的子字串。例如,屬性列值為 1aaa51bbb5、Regex為 1([a-z]+)5 時,提取結果為 aaa

Cast_type(必選)

VariantType

提取結果的轉換類型。支援 Variant_INTEGERVariant_DOUBLEVariant_STRING

組合過濾器

調用 NewCompositeColumnCondition(lo) 建立組合過濾器,並調用 AddFilter 添加子過濾器。

名稱

類型

說明

Operator(必選)

LogicalOperator

邏輯運算子。支援 LO_NOTLO_ANDLO_OR

Filters(必選)

[]ColumnFilter

參與邏輯運算的子過濾器,支援以下類型:

  • 單屬性列值過濾器,通過 NewSingleColumnCondition 建立。

  • 單屬性列正則過濾器,通過 NewSingleColumnValueRegexFilter 建立。

  • 組合過濾器,通過 NewCompositeColumnCondition 建立,可繼續嵌套子過濾器。

列分頁過濾器

PaginationFilter 包含以下參數。

名稱

類型

說明

Limit(必選)

int32

返回的屬性列數量,必須大於 0。

Offset(可選)

int32

跳過的屬性列數量,必須大於或等於 0,預設值為 0

情境樣本

正則過濾

以下樣本從 profile 列的 level:active 格式值中提取 active,並判斷是否等於指定值。

rule := tablestore.NewValueTransferRule(
    `level:([a-z]+)`,
    tablestore.Variant_STRING,
)
filter := tablestore.NewSingleColumnValueRegexFilter(
    "profile",
    tablestore.CT_EQUAL,
    rule,
    "active",
)
request.SingleRowQueryCriteria.Filter = filter

組合過濾

以下樣本篩選 score >= 60status 等於 active 的行。

filter := tablestore.NewCompositeColumnCondition(tablestore.LO_AND)
filter.AddFilter(
    tablestore.NewSingleColumnCondition("score", tablestore.CT_GREATER_EQUAL, int64(60)),
)
filter.AddFilter(
    tablestore.NewSingleColumnCondition("status", tablestore.CT_EQUAL, "active"),
)
request.RangeRowQueryCriteria.Filter = filter

分頁返回屬性列

以下樣本跳過第一個屬性列並返回其後的兩個屬性列。

request.SingleRowQueryCriteria.Filter = &tablestore.PaginationFilter{
    Offset: 1,
    Limit:  2,
}