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

Tablestore:フィルター

最終更新日:Mar 12, 2026

Tablestore PHP SDK で SingleColumnValueFilter または CompositeColumnValueFilter を適用することにより、サーバー側でクエリ結果をフィルタリングします。

前提条件

Tablestore クライアントの初期化

フィルターの種類

Tablestore では、以下のフィルターが提供されています。

  • SingleColumnValueFilter:単一の属性列の値を条件と照合して評価します。

  • CompositeColumnValueFilter:論理演算子を用いて複数のフィルター条件を組み合わせます。論理演算子を使用して最大 32 個のフィルター条件を組み合わせることができます。

SingleColumnValueFilter

[
    'column_name' => '<string>',
    'value' => <ColumnValue>,
    'comparator' => <ComparatorType>,
    'pass_if_missing' => true || false,
    'latest_version_only' => true || false
]

パラメーター

名前

説明

comparator(必須)

ComparatorTypeConst

関係演算子です。有効な値は、CONST_EQUAL (=)、CONST_NOT_EQUAL (!=)、CONST_GREATER_THAN (>)、CONST_GREATER_EQUAL (>=)、CONST_LESS_THAN (<)、CONST_LESS_EQUAL (<=) です。

column_name(必須)

string

評価対象の属性列の名前です。

value(必須)

STRING、INTEGER、BINARY、DOUBLE、または BOOLEAN

比較対象となる基準値です。

pass_if_missing(任意)

bool

指定された属性列が存在しない場合に、該当行を返すかどうかを指定します。デフォルト値は true(行を返す)です。

latest_version_only(任意)

bool

属性列の最新バージョンのみを比較対象とするかどうかを指定します。デフォルト値は true(最新バージョンのみを比較)です。この値を false に設定すると、いずれかのバージョンが条件を満たした場合にその行が返されます。

次の例では、範囲クエリを使用して、プライマリキーが範囲 [row1, row3) 内にある行を読み取り、その後フィルターを適用して、col1 が val1 に等しい行のみを返します。

$request = array (
    'table_name' => 'test_table',
    // 範囲クエリの開始プライマリキーを設定します。
    'inclusive_start_primary_key' => array (
        array('id', 'row1')
    ),
    // 範囲クエリの終了プライマリキーを設定します。結果にはこのキーは含まれません。
    'exclusive_end_primary_key'  => array (
        array('id', 'row3')
    ),
    // 順方向でデータを読み取ります。
    'direction' => DirectionConst::CONST_FORWARD,
    // 最新バージョンのデータを読み取ります。
    'max_versions' => 1,
    // col1 の値が "val1" と等しい行を返すフィルターを構築します。
    'column_filter' => array (
        'column_name' => 'col1',
        'value' => 'val1',
        'comparator' => ComparatorTypeConst::CONST_EQUAL
    )
);

try {
    // getRange を呼び出して行を読み取ります。
    $response = $client->getRange ($request);

    // 応答を処理します。
    echo "* 読み取り CU コスト: " . $response['consumed']['capacity_unit']['read'] . "\n";
    echo "* 書き込み CU コスト: " . $response['consumed']['capacity_unit']['write'] . "\n";
    echo "* 行データ: " . "\n";
    foreach ($response['rows'] as $row) {
        echo json_encode($row) . "\n";
    }
} catch (Exception $e){
    echo "範囲クエリの実行に失敗しました。";
}
  • 指定された属性列を含まない行を除外するには、以下のように設定します。

    $request['column_filter']['pass_if_missing'] = false;
  • 属性列のすべてのバージョンを評価する(いずれかのバージョンが条件を満たせば行を返す)には、以下のように設定します。

    $request['column_filter']['latest_version_only'] = false;

CompositeColumnValueFilter

論理演算子を用いて最大 32 個のフィルター条件を組み合わせます。

[
    'logical_operator' => <LogicalOperator>
    'sub_filters' => [
        <ColumnFilter>,
        <ColumnFilter>,
        <ColumnFilter>,
         // その他の条件
        ]
    ]

パラメーター

名前

説明

logical_operator(必須)

LogicalOperatorConst

論理演算子です。有効な値は、CONST_NOT (NOT)、CONST_AND (AND)、CONST_OR (OR) です。

sub_filters(必須)

array

論理演算で使用されるフィルターです。SingleColumnValueFilter または CompositeColumnValueFilter を指定できます。

以下の例では、プライマリキーが [row1, row3) の範囲にある行を読み取り、(col1 = val1 OR col2 = val2) AND (col3 = val3) の条件を持つ CompositeColumnValueFilter を適用します。

$request = array (
    'table_name' => 'test_table',
    // 範囲クエリの開始プライマリキーを設定します。
    'inclusive_start_primary_key' => array (
        array('id', 'row1')
    ),
    // 範囲クエリの終了プライマリキーを設定します。結果にはこのキーは含まれません。
    'exclusive_end_primary_key'  => array (
        array('id', 'row3')
    ),
    // 順方向でデータを読み取ります。
    'direction' => DirectionConst::CONST_FORWARD,
    // 最新バージョンのデータを読み取ります。
    'max_versions' => 1
);

// 条件を組み合わせます: (col1 = val1 OR col2 = val2) AND (col3 = val3)
$request['column_filter'] = array(
    'logical_operator' => LogicalOperatorConst::CONST_AND,
    'sub_filters' => array(
        array(
            'logical_operator' => LogicalOperatorConst::CONST_OR,
            'sub_filters' => array(
                array(
                    'comparator' => ComparatorTypeConst::CONST_EQUAL,
                    'column_name' => 'col1',
                    'value' => 'val1'
                ),
                array(
                    'comparator' => ComparatorTypeConst::CONST_EQUAL,
                    'column_name' => 'col2',
                    'value' => 'val2'
                )
            )
        ),
        array(
            'comparator' => ComparatorTypeConst::CONST_EQUAL,
            'column_name' => 'col3',
            'value' => 'val3'
        )
    )
);

try {
    // getRange を呼び出して行を読み取ります。
    $response = $client->getRange ($request);

    // 応答を処理します。
    echo "* 読み取り CU コスト: " . $response['consumed']['capacity_unit']['read'] . "\n";
    echo "* 書き込み CU コスト: " . $response['consumed']['capacity_unit']['write'] . "\n";
    echo "* 行データ: " . "\n";
    foreach ($response['rows'] as $row) {
        echo json_encode($row) . "\n";
    }
} catch (Exception $e){
    echo "範囲クエリの実行に失敗しました。";
}

参照