Go SDK 可在讀取寬表模型資料時使用服務端過濾器篩選行或截取返回的屬性列。
前提條件
安裝Tablestore Go SDK並初始化用戶端。
功能說明
過濾器在服務端對讀取結果進行二次篩選,不減少讀取消耗的 CU。GetRow、GetRange 和 BatchGetRow 的查詢條件均可設定過濾器。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(必選) |
|
要判斷的屬性列名稱。 |
|
Comparator(必選) |
|
關係運算子。支援 |
|
ColumnValue(必選) |
|
用於比較的值。 |
|
FilterIfMissing(可選) |
|
行不包含判斷列時是否過濾該行。預設值為 |
|
LatestVersionOnly(可選) |
|
是否只判斷最新版本。預設值為 |
單屬性列正則過濾器
調用 NewSingleColumnValueRegexFilter(columnName, comparator, rule, value) 建立正則過濾器。只有 STRING 屬性列支援正則過濾。
除單屬性列值過濾器的參數外,還需設定 ValueTransferRule。
|
名稱 |
類型 |
說明 |
|
Regex(必選) |
|
用於提取子字串的Regex,長度不超過 256 位元組。
|
|
Cast_type(必選) |
|
提取結果的轉換類型。支援 |
組合過濾器
調用 NewCompositeColumnCondition(lo) 建立組合過濾器,並調用 AddFilter 添加子過濾器。
|
名稱 |
類型 |
說明 |
|
Operator(必選) |
|
邏輯運算子。支援 |
|
Filters(必選) |
|
參與邏輯運算的子過濾器,支援以下類型:
|
列分頁過濾器
PaginationFilter 包含以下參數。
|
名稱 |
類型 |
說明 |
|
Limit(必選) |
|
返回的屬性列數量,必須大於 0。 |
|
Offset(可選) |
|
跳過的屬性列數量,必須大於或等於 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 >= 60 且 status 等於 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,
}