全部产品
表格存储

过滤器(Filter)

更新时间:2017-06-07 13:26:11   分享:   

过滤器 Filter 可以在服务器端对读取的结果再进行一次过滤,根据 Filter 中的条件决定返回哪些行或者列。Filter 可以用于 GetRow、BatchGetRow 和 GetRange 接口中。

目前表格存储仅支持 SingleColumnValueFilter 和 CompositeColumnValueFilter,这两个 Filter 都是基于参考列的列值决定某行是否会被过滤掉。前者只判断某个参考列的列值,后者会对多个参考列的列值判断结果进行逻辑组合,决定最终是否过滤。

需要注意的是,Filter 是对读取后的结果再进行一次过滤,所以 SingleColumnValueFilter 或者 CompositeColumnValueFilter 中的参考列必须在读取的结果内。如果用户指定了要读取的列,且其中不包含参考列,那么 Filter 无法获得这些参考列的值。当某个参考列不存在时,SingleColumnValueFilter 的 passIfMissing 参数决定此时是否满足条件,即用户可以选择当参考列不存在时的行为。

示例 1

构造 SingleColumnValueFilter。

  1. // 设置过滤器, 当Col0的值为0时返回该行.
  2. SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("Col0",
  3. SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0));
  4. // 如果不存在Col0这一列, 也不返回.
  5. singleColumnValueFilter.setPassIfMissing(false);
  6. // 只判断最新版本
  7. singleColumnValueFilter.setLatestVersionsOnly(true);

示例 2

构造 CompositeColumnValueFilter。

  1. // composite1 条件为 (Col0 == 0) AND (Col1 > 100)
  2. CompositeColumnValueFilter composite1 = new CompositeColumnValueFilter(CompositeColumnValueFilter.LogicOperator.AND);
  3. SingleColumnValueFilter single1 = new SingleColumnValueFilter("Col0",
  4. SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0));
  5. SingleColumnValueFilter single2 = new SingleColumnValueFilter("Col1",
  6. SingleColumnValueFilter.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100));
  7. composite1.addFilter(single1);
  8. composite1.addFilter(single2);
  9. // composite2 条件为 ( (Col0 == 0) AND (Col1 > 100) ) OR (Col2 <= 10)
  10. CompositeColumnValueFilter composite2 = new CompositeColumnValueFilter(CompositeColumnValueFilter.LogicOperator.OR);
  11. SingleColumnValueFilter single3 = new SingleColumnValueFilter("Col2",
  12. SingleColumnValueFilter.CompareOperator.LESS_EQUAL, ColumnValue.fromLong(10));
  13. composite2.addFilter(composite1);
  14. composite2.addFilter(single3);
本文导读目录
本文导读目录
以上内容是否对您有帮助?