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

Tablestore:フィルタの使用

最終更新日:Dec 28, 2024

Tablestore は、サーバー上でクエリ結果をフィルタリングし、フィルタリングされた結果を返します。フィルタ条件に一致する行のみが返されます。

前提条件

メソッド

GetRow、BatchGetRow、または GetRange 操作を呼び出してデータをクエリする場合、フィルタを使用してフィルタ条件に一致する行のみを返すことができます。

フィルタには、SingleColumnValueFilter と CompositeColumnValueFilter が含まれます。

  • SingleColumnValueFilter: 参照列の値のみに基づいて行を返すかどうかを決定します。

  • CompositeColumnValueFilter: 複数の参照列の値に対するフィルタ条件の組み合わせに基づいて行を返すかどうかを決定します。

説明

フィルタの詳細については、フィルタの構成を参照してください。

使用上の注意

  • フィルタ条件では、=, !=, >, >=, <, <= などの関係演算子がサポートされています。また、NOT、AND、OR などの論理演算子もサポートされています。フィルタ条件には最大 10 個のサブ条件を指定できます。

  • フィルタで使用される参照列は、返される列に含まれている必要があります。そうでない場合、フィルタは参照列の値をクエリできません。

  • GetRow、BatchGetRow、および GetRange 操作にフィルタを使用する場合、これらの操作のネイティブセマンティクスまたは制限は影響を受けません。

    GetRange 操作を使用する場合、一度に最大 5,000 行または 4 MB のデータをスキャンできます。

    スキャンされたデータがフィルタ条件に一致しない場合、レスポンスの行は空になります。ただし、next_start_primary_key パラメータは空でない場合があります。 next_start_primary_key パラメータが空でない場合は、パラメータ値を使用して NextStartPrimaryKey パラメータが空になるまでスキャンを続行できます。

パラメータ

column_filter パラメータを構成して、GetRow、BatchGetRow、および GetRange 操作にフィルタを使用できます。

    'column_filter' => <ColumnFilter>
  • SingleColumnValueFilter

    SingleColumnValueFilter を使用すると、列を定数と比較できます。2 つの列または 2 つの定数の比較はサポートされていません。

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

    CompositeColumnValueFilter はツリー構造です。 logical_operator 内部ノードと SingleColumnValueFilter リーフノードが含まれています。

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

パラメータ

説明

column_name

フィルタで使用される参照列の名前。

value

フィルタで使用される参照列の値。

このパラメータは [Value, Type] の形式で指定します。 Type の有効な値は、ColumnTypeConst::CONST_INTEGER、ColumnTypeConst::CONST_STRING、ColumnTypeConst::CONST_BINARY、ColumnTypeConst::CONST_BOOLEAN、および ColumnTypeConst::CONST_DOUBLE で、それぞれ INTEGER、STRING (UTF-8 エンコード文字列)、BINARY、BOOLEAN、および DOUBLE 型を指定します。型が BINARY の場合は、型を指定する必要があります。型が BINARY でない場合は、値のみを指定できます。

型が BINARY の場合は、型と値の両方を指定する必要があります。

comparator

フィルタで使用される関係演算子。関係演算子の詳細については、ComparatorTypeを参照してください。

有効な値: ComparatorTypeConst::CONST_EQUAL、ComparatorTypeConst::CONST_NOT_EQUAL、ComparatorTypeConst::CONST_GREATER_THAN、ComparatorTypeConst::CONST_GREATER_EQUAL、ComparatorTypeConst::CONST_LESS_THAN、および ComparatorTypeConst::CONST_LESS_EQUAL。

logical_operator

フィルタで使用される論理演算子。論理演算子の詳細については、LogicalOperatorを参照してください。

有効な値: LogicalOperatorConst::CONST_NOT、LogicalOperatorConst::CONST_AND、および LogicalOperatorConst::CONST_OR。

pass_if_missing

行に参照列が存在しない場合に、行を返すかどうかを指定します。このパラメータの値はブール型です。デフォルト値は true で、行に参照列が存在しない場合は行が返されることを示します。

false の値は、行に参照列が存在しない場合は行が返されないことを示します。

latest_version_only

参照列に複数のバージョンのデータが含まれている場合に、比較に参照列の最新バージョンのみを使用するかどうかを指定します。このパラメータの値はブール型です。デフォルト値は true で、参照列に複数のバージョンのデータが含まれている場合は、最新バージョンのデータのみが比較に使用されることを示します。

false の値は、参照列に複数のバージョンのデータがある場合、すべてのバージョンのデータが比較に使用されることを示します。参照列のデータの 1 つのバージョンがフィルタ条件を満たしている場合、行が返されます。

sub_filters

子ノードは SingleColumnValueFilter または CompositeColumnValueFilter にすることができます。

内部ノードの異なる論理演算子では、アタッチできる子ノードの数が異なります。

  • 内部ノードの論理演算子が NOT の場合、アタッチできる子ノードは 1 つだけです。

  • 内部ノードの論理演算子が AND または OR の場合、複数の子ノードをアタッチできます。

SingleColumnValueFilter を使用してデータをフィルタリングする

次のサンプルコードは、データテーブルからデータの行を読み取り、行の Col0 列の値が 0 の場合にデータの行を返す方法を示しています。

$request = [
    'table_name' => 'MyTable',
    'primary_key' => [ // プライマリキーを指定します。
        ['PK0', 123],
        ['PK1', 'abc']
    ],
    'max_versions' => 1,                     // 最新バージョンのデータを読み取るには、このパラメータを 1 に設定します。
    'columns_to_get' => ['Col0']             // 読み取る列を指定します。
    
    // Col0 列の値が 0 の場合に、行を返すフィルタを指定します。
    'column_filter' => [
        'column_name' => 'col0',
        'value' => 0,
        'comparator' => ComparatorTypeConst::CONST_EQUAL,
        'pass_if_missing' => false                         / 行に Col0 列が存在しない場合、行は返されません。
        'latest_version_only' => true                      // 最新バージョンのみが比較に使用されるように指定します。
    ]
];
$response = $otsClient->getRow ($request); 

CompositeColumnValueFilter を使用してデータをフィルタリングする

次のサンプルコードは、データテーブルからデータの行を読み取り、行の Col0 列の値が 0 かつ行の Col1 列の値が 100 未満の場合にデータの行を返す方法を示しています。

// composite1 条件を (Col0 == 0) AND (Col1 > 100) に設定します。
    $composite1 = [
        'logical_operator' => LogicalOperatorConst::CONST_AND,
        'sub_filters' => [
            [
                'column_name' => 'Col0',
                'value' => 0,
                'comparator' => ComparatorTypeConst::CONST_EQUAL
            ],
            [
                'column_name' => 'Col1',
                'value' => 100,
                'comparator' => ComparatorTypeConst::CONST_GREATER_THAN
            ]
        ]
    ];
    // composite2 条件を ( (Col0 == 0) AND (Col1 > 100) ) OR (Col2 <= 10) に設定します。
    $composite2 = [
        'logical_operator' => LogicalOperatorConst::CONST_OR,
        'sub_filters' => [
            $composite1,
            [
                'column_name' => 'Col2',
                'value' => 10,
                'comparator' => ComparatorTypeConst::CONST_LESS_EQUAL
            ]
        ]
    ];  
                    

参照

  • アプリケーションが異なる属性列をクエリ条件として使用してデータをクエリする必要がある場合は、これらの属性列をセカンダリインデックスのプライマリキー列として指定して、データクエリを高速化できます。詳細については、セカンダリインデックスを参照してください。

  • ビジネスで多次元クエリとデータ分析が必要な場合は、検索インデックスを作成し、必要な属性列を検索インデックスのフィールドとして指定できます。その後、検索インデックスを使用してデータをクエリおよび分析できます。たとえば、検索インデックスを使用して、非プライマリキー列、ブールクエリ、およびあいまいクエリに基づいてクエリを実行できます。また、検索インデックスを使用して、最大値と最小値を取得したり、行数の統計を収集したり、クエリ結果をグループ化したりすることもできます。詳細については、検索インデックスを参照してください。

  • SQL クエリ機能を使用して、テーブル内のデータをクエリおよび分析できます。詳細については、データのクエリを参照してください。