Tablestore のフィルターは、サーバー上でクエリ結果をフィルタリングし、フィルタリングされた結果を返します。フィルター条件を満たす行のみが返されます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成とデータの書き込みを参照してください。
概要
GetRow、BatchGetRow、または GetRange 操作を呼び出してデータをクエリする場合、フィルターを使用してフィルター条件を満たす行のみを返すことができます。
フィルターには、SingleColumnValueFilter と CompositeColumnValueFilter があります。
SingleColumnValueFilter: 参照列の値のみに基づいて行を返すかどうかを決定します。
CompositeColumnValueFilter: 複数の参照列の値に対するフィルター条件の組み合わせに基づいて行を返すかどうかを決定します。
フィルターの詳細については、フィルターの構成を参照してください。
使用上の注意
フィルター条件は、=, !=, >, >=, <, <= の関係演算子と、NOT、AND、OR の論理演算子をサポートしています。フィルター条件には、最大 10 個のサブ条件を含めることができます。
フィルターで使用される参照列は、クエリ結果に含まれている必要があります。データの読み取り元となる指定された列に参照列が含まれていない場合、フィルターは参照列の値をクエリできません。
GetRange 操作を使用する場合、一度に最大 5,000 行または 4 MB のデータをスキャンできます。
スキャンの範囲内でフィルター条件に一致するデータがない場合、返される行は空になります。ただし、NextStartPrimaryKey は空ではない場合があります。 NextStartPrimaryKey が空でない場合は、パラメーター値を使用して NextStartPrimaryKey の戻り値が空になるまでスキャンを続けます。
パラメーター
パラメーター | 説明 |
columnName | フィルターで使用される参照列の名前。 |
columnValue | フィルターで使用される参照列の値。 |
ComparatorType | フィルターで使用される関係演算子。関係演算子の詳細については、ComparatorType を参照してください。 サポートされている関係演算子は、EQUAL (=)、NOT_EQUAL (!=)、GREATER_THAN (>)、GREATER_EQUAL (>=)、LESS_THAN (<)、LESS_EQUAL (<=) です。 |
LogicOperator | フィルターで使用される論理演算子。論理演算子の詳細については、LogicalOperator を参照してください。 サポートされている論理演算子は、NOT、AND、OR です。 |
passIfMissing | 行に参照列が存在しない場合に行を返すかどうかを指定します。パラメーター値のデータ型はブール値です。有効な値:
|
latestVersionOnly | 参照列に複数のバージョンのデータが含まれている場合、比較に参照列の最新バージョンのみを使用するかどうかを指定します。型: ブール値。有効な値:
|
例
SingleColumnValueFilter を使用してデータをフィルタリングする
次のサンプルコードは、データテーブルの col1 列のデータが Tablestore であるデータ行を返す方法を示しています。
function getRowWithCondition() {
// col1 列の値が Tablestore の場合に行が返されるように指定します。passIfMissing が true に設定されている場合、この列が存在しない場合でも行が返されます。passIfMissing が false に設定されている場合、この列が存在しない場合、行は返されません。
var condition = new TableStore.SingleColumnCondition('col1', 'Tablestore', TableStore.ComparatorType.EQUAL,true);
params.columnFilter = condition;
client.getRow(params, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', data);
});
}
CompositeColumnValueFilter を使用してデータをフィルタリングする
次のサンプルコードは、データテーブルの col1 列のデータが Tablestore で、col5 列のデータが 123456789 であるデータ行を返す方法を示しています。
function getRowWithCompositeCondition() {
// col1 列の値が Tablestore で、col5 列の値が 123456789 の場合に行が返されるように指定します。
var condition = new TableStore.CompositeCondition(TableStore.LogicalOperator.AND);
condition.addSubCondition(new TableStore.SingleColumnCondition('col1', 'Tablestore', TableStore.ComparatorType.EQUAL));
condition.addSubCondition(new TableStore.SingleColumnCondition('col5', Long.fromNumber(123456789), TableStore.ComparatorType.EQUAL));
params.columnFilter = condition;
client.getRow(params, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', data);
});
}
参照
アプリケーションが異なる属性列をクエリ条件として使用してデータをクエリする必要がある場合は、属性列をセカンダリインデックスのプライマリキー列として指定できます。このようにして、セカンダリインデックスを使用して、属性列に基づいてデータをクエリできます。これにより、データクエリが高速化されます。詳細については、セカンダリインデックスを参照してください。
ビジネスで多次元クエリとデータ分析が必要な場合は、検索インデックスを作成し、必要な属性列を検索インデックスのフィールドとして指定できます。その後、検索インデックスを使用してデータのクエリと分析を行うことができます。たとえば、検索インデックスを使用して、非プライマリキー列、ブールクエリ、あいまいクエリに基づくクエリを実行できます。また、検索インデックスを使用して、最大値と最小値を取得したり、行数の統計を収集したり、クエリ結果をグループ化したりすることもできます。詳細については、検索インデックスを参照してください。
SQL クエリ機能を使用して、テーブル内のデータのクエリと分析を行うことができます。詳細については、データのクエリを参照してください。