Tablestore は、サーバー上でクエリ結果をフィルタリングし、フィルタリングされた結果を返します。フィルタ条件に一致する行のみが返されます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成とデータの書き込みを参照してください。
メソッド
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 にすることができます。 内部ノードの異なる論理演算子では、アタッチできる子ノードの数が異なります。
|
例
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 クエリ機能を使用して、テーブル内のデータをクエリおよび分析できます。詳細については、データのクエリを参照してください。