全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多
表格存储

过滤器(Filter)

更新时间:2018-03-04 17:34:52

表格存储可以在服务端对读取的结果再进行一次过滤,以便减少网络上传输的数据量。

过滤器是一个树形结构,内节点为逻辑运算(CompositeColumnCondition),叶节点为比较判断(SingleColumnCondition)。

  • CompositeColumnCondition支持。其中可以挂载两个或更多子节点,只能挂载一个子节点。

  • SingleColumnCondition支持全部6种比较条件(等于不等于大于小于大于等于小于等于)。

  • 每个SingleColumnCondition对象支持一列(可以是主键列)和一个常量比较。不支持两列相比较,也不支持两个常量相比较。

  • SingleColumnCondition的latestVersionOnly参数控制多个版本的列值如何参与比较,默认为true。

    • 若为true,则只有版本范围内的最新版本列值参与比较(仅仅是参与比较,如果是过滤器认可该行,其他版本的列值依旧会返回)。

    • 若为false,则任意一个列值满足条件,该节点即认为true。

  • SingleColumnCondition的passIfMissing参数控制列值缺失时该节点应当视作何值,默认false。

过滤器作用于其他条件筛选的结果上。所以,如果过滤器中有某一列,而指定列读取中未指定该列,或版本范围内该列没有列值,则过滤器都认为该列缺失。

示例

以下示例从全表中过滤出主键列pkey大于1并且属性列attr等于”A”的行。

  1. RangeQueryCriterion query;
  2. query.mutableTable() = kTableName;
  3. query.mutableMaxVersions().reset(1);
  4. {
  5. PrimaryKey& start = query.mutableInclusiveStart();
  6. start.append() = PrimaryKeyColumn(
  7. "pkey",
  8. PrimaryKeyValue::toInfMin());
  9. }
  10. {
  11. PrimaryKey& end = query.mutableExclusiveEnd();
  12. end.append() = PrimaryKeyColumn(
  13. "pkey",
  14. PrimaryKeyValue::toInfMax());
  15. }
  16. {
  17. // set filter
  18. shared_ptr<ColumnCondition> pkeyCond(
  19. new SingleColumnCondition(
  20. "pkey",
  21. SingleColumnCondition::kLarger,
  22. AttributeValue::toInteger(1)));
  23. shared_ptr<ColumnCondition> attrCond(
  24. new SingleColumnCondition(
  25. "attr",
  26. SingleColumnCondition::kEqual,
  27. AttributeValue::toStr("A")));
  28. shared_ptr<CompositeColumnCondition> top(new CompositeColumnCondition());
  29. top->mutableOp() = CompositeColumnCondition::kAnd;
  30. top->mutableChildren().append() = pkeyCond;
  31. top->mutableChildren().append() = attrCond;
  32. query.mutableFilter() = top;
  33. }
本文导读目录