在服务端对读取结果再进行一次过滤,根据过滤器(Filter)中的条件决定返回的行。使用过滤器后,只返回符合条件的数据行。
前提条件
使用方法
在通过GetRow、BatchGetRow或GetRange接口查询数据时,可以使用过滤器只返回符合条件的数据行。
过滤器目前包括SingleColumnValueFilter和CompositeColumnValueFilter。
SingleColumnValueFilter:只判断某个参考列的列值。
CompositeColumnValueFilter:根据多个参考列的列值的判断结果进行逻辑组合,决定是否过滤某行。
关于过滤器的更多信息,请参见功能介绍中的过滤器。
注意事项
过滤器的条件支持关系运算(=、!=、>、>=、<、<=)和逻辑运算(NOT、AND、OR),最多支持10个条件的组合。
过滤器中的参考列必须在读取的结果内。如果指定的要读取的列中不包含参考列,则过滤器无法获取参考列的值。
使用GetRange接口时,一次扫描数据的行数不能超过5000行或者数据大小不能超过4 MB。
当在该次扫描的5000行或者4 MB数据中没有满足过滤器条件的数据时,得到的Response中的Rows为空,但是NextStartPrimaryKey可能不为空,此时需要使用NextStartPrimaryKey继续读取数据,直到NextStartPrimaryKey为空。
参数
参数 | 说明 |
columnName | 过滤器中参考列的名称。 |
columnValue | 过滤器中参考列的对比值。 |
ComparatorType | 过滤器中的关系运算符,类型详情请参见ComparatorType。 关系运算符包括EQUAL(=)、NOT_EQUAL(!=)、GREATER_THAN(>)、GREATER_EQUAL(>=)、LESS_THAN(<)和LESS_EQUAL(<=)。 |
LogicOperator | 过滤器中的逻辑运算符,类型详情请参见LogicalOperator。 逻辑运算符包括NOT、AND和OR。 |
passIfMissing | 当参考列在某行中不存在时,是否返回该行。类型为bool值,取值范围如下:
|
latestVersionOnly | 当参考列存在多个版本的数据时,是否只使用最新版本的值做比较。类型为bool值。取值范围如下:
|
示例
使用SingleColumnValueFilter过滤数据
以下示例用于读取数据表中col1="表格存储"的数据。
function getRowWithCondition() {
//当col1=表格存储时,返回该行。当passIfMissing设置为true时,如果该列不存在,则返回该行;当passIfMissing设置为false时,如果该列不存在,则不返回该行。
var condition = new TableStore.SingleColumnCondition('col1', '表格存储', 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 = "表格存储"且col5 = 123456789时的数据。
function getRowWithCompositeCondition() {
//设置过滤器,当col1 = 表格存储且col5 = 123456789时,返回该行。
var condition = new TableStore.CompositeCondition(TableStore.LogicalOperator.AND);
condition.addSubCondition(new TableStore.SingleColumnCondition('col1', '表格存储', 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);
});
}