Tablestore SDK for Go を使用すると、Wide Column モデルのデータを読み取る際に、サーバー側で行をフィルタリングしたり、返される属性列をページネーションしたりできます。
前提条件
Tablestore SDK for Go をインストールし、クライアントを初期化します。
説明
フィルターはサーバー側で読み取り結果を絞り込みますが、消費される読み取り CU は削減されません。 GetRow、GetRange、または BatchGetRow のクエリ条件でフィルターを指定できます。 Tablestore SDK for Go は、次のフィルタータイプをサポートしています:
-
単一列値フィルター (
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 (必須) |
|
部分文字列の抽出に使用する正規表現です。最大長: 256 バイト。
|
|
Cast_type (必須) |
|
抽出された部分文字列の変換後の型です。有効な値は |
複合フィルター
NewCompositeColumnCondition(lo) を呼び出して複合フィルターを作成し、AddFilter を呼び出してサブフィルターを追加します。
|
名前 |
型 |
説明 |
|
Operator (必須) |
|
論理演算子。有効な値: |
|
Filters (必須) |
|
サブフィルターのリストです。次のタイプがサポートされています:
|
列ページネーションフィルター
PaginationFilter には、以下のパラメータが含まれます。
|
名前 |
型 |
説明 |
|
Limit (必須) |
|
返す属性列の数です。値は 0 より大きい必要があります。 |
|
Offset (任意) |
|
スキップする属性列の数。値は 0 以上である必要があります。デフォルト値: |
例
正規表現フィルター
次のサンプルは、active を profile 列の値 (level: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
返される属性列のページネーション
次のサンプルでは、最初の属性列をスキップし、次の 2 つの属性列を返します。
request.SingleRowQueryCriteria.Filter = &tablestore.PaginationFilter{
Offset: 1,
Limit: 2,
}