すべてのプロダクト
Search
ドキュメントセンター

Tablestore:フィルター

最終更新日:Mar 31, 2026

Tablestore は、クエリ時に指定された条件に基づいてサーバー側データフィルタリングをサポートしています。Python SDK のフィルターを使用すると、フィルター条件に一致する行のみを返すことができます。

前提条件

Tablestore クライアントを初期化する

フィルターの種類

Tablestore は、以下の 2 種類のフィルターを提供しています。

  • SingleColumnCondition: 単一の属性列が指定された条件を満たすかどうかに基づいて行をフィルターします。

  • CompositeColumnCondition: 複数のフィルター条件を組み合わせて、複雑なフィルタリングを実行します。

単一列条件

class SingleColumnCondition(ColumnCondition)

パラメータ

パラメータ

説明

comparator (必須)

ComparatorType

関係演算子。サポートされている演算子には、EQUAL、NOT_EQUAL、GREATER_THAN、GREATER_EQUAL、LESS_THAN、および LESS_EQUAL があります。

column_name (必須)

str

評価する属性列の名前。

column_value (必須)

str, int, bytes, float, bool

比較対象の値。

pass_if_missing (オプション)

bool

指定された属性列が欠落している行を返すかどうかを指定します。デフォルトは True で、行が返されます。

latest_version_only (オプション)

bool

属性列の最新バージョンのみを評価するかどうかを指定します。デフォルトは True です。True の場合、複数のバージョンの列が存在しても、条件は最新バージョンに対してのみチェックされます。

コード例

次の例では、[row1, row3) の範囲にプライマリキーを持つ行に対して範囲クエリを実行し、フィルターを適用します。col1 属性列の値が val1 である行のみが返されます。

try:
    # クエリの開始プライマリキーを設定します。
    inclusive_start_primary_key = [('id', 'row1')]
    # クエリの終了プライマリキーを設定します。終了キーは排他的です。
    exclusive_end_primary_key = [('id', 'row3')]

    # 条件 col1 == "val1" でフィルターを作成します。
    singleColumnCondition = SingleColumnCondition('col1', 'val1', ComparatorType.EQUAL)

    # get_range メソッドを呼び出してデータをクエリします。
    consumed, next_start_primary_key, row_list, next_token = client.get_range('test_table', Direction.FORWARD,
                                                                              inclusive_start_primary_key,
                                                                              exclusive_end_primary_key,
                                                                              column_filter=singleColumnCondition)

    # 結果を処理します。
    print('* Read CU Cost: %s' % consumed.read)
    print('* Write CU Cost: %s' % consumed.write)
    print('* Rows Data:')
    for row in row_list:
        print(row.primary_key, row.attribute_columns)
except Exception as e:
    print("範囲取得がエラーで失敗しました: %s" % e)
  • 指定された属性列を含まない行が返されるのを防ぐには:

    singleColumnCondition.pass_if_missing = False
  • クエリ結果内のすべてのデータバージョンを評価し、いずれかのバージョンが条件を満たす場合に行を返すには:

    singleColumnCondition.latest_version_only = False

複合列条件

複合フィルターは、最大 32 の条件をサポートします。

class CompositeColumnCondition(ColumnCondition)

パラメータ

パラメータ

説明

combinator (必須)

LogicalOperator

論理演算子。サポートされている演算子には、NOT、AND、および OR があります。

sub_conditions (必須)

List[ColumnCondition]

結合されるフィルターのリスト。このリストには、SingleColumnCondition および CompositeColumnCondition オブジェクトを含めることができます。

コード例

次の例では、[row1, row3) の範囲にプライマリキーを持つ行に対して範囲クエリを実行し、結果に複合フィルターを適用します。

try:
    # クエリの開始プライマリキーを設定します。
    inclusive_start_primary_key = [('id', 'row1')]

    # クエリの終了プライマリキーを設定します。終了キーは排他的です。
    exclusive_end_primary_key = [('id', 'row3')]

    # 最初の単一列条件 col1 == "val1" を作成します。
    singleColumnCondition1 = SingleColumnCondition('col1', 'val1', ComparatorType.EQUAL)
    # 2番目の単一列条件 col2 == "val2" を作成します。
    singleColumnCondition2 = SingleColumnCondition('col2', 'val2', ComparatorType.EQUAL)
    # 最初の複合条件 col1 == "val1" OR col2 == "val2" を作成します。
    compositeColumnCondition1 = CompositeColumnCondition(LogicalOperator.OR)
    compositeColumnCondition1.add_sub_condition(singleColumnCondition1)
    compositeColumnCondition1.add_sub_condition(singleColumnCondition2)
    # 3番目の単一列条件 col3 == "val3" を作成します。
    singleColumnCondition3 = SingleColumnCondition('col3', 'val3', ComparatorType.EQUAL)
    # 最終的な複合条件 (col1 == "val1" OR col2 == "val2") AND col3 == "val3" を作成します。
    compositeColumnCondition2 = CompositeColumnCondition(LogicalOperator.AND)
    compositeColumnCondition2.add_sub_condition(compositeColumnCondition1)
    compositeColumnCondition2.add_sub_condition(singleColumnCondition3)

    # get_range メソッドを呼び出してデータをクエリします。
    consumed, next_start_primary_key, row_list, next_token = client.get_range('test_table', Direction.FORWARD,
                                                                              inclusive_start_primary_key,
                                                                              exclusive_end_primary_key,
                                                                              column_filter=compositeColumnCondition2)

    # 結果を処理します。
    print('* Read CU Cost: %s' % consumed.read)
    print('* Write CU Cost: %s' % consumed.write)
    print('* Rows Data:')
    for row in row_list:
        print(row.primary_key, row.attribute_columns)
except Exception as e:
    print("範囲取得がエラーで失敗しました: %s" % e)

関連ドキュメント