文档首页 > > 开发指南> HBase应用开发> 开发程序> 使用二级索引读取数据

使用二级索引读取数据

分享
更新时间: 2020/01/11 GMT+08:00

前提条件

此功能在MRS1.7及更高版本才支持。

功能介绍

在具有HIndexes的用户表中,HBase使用Filter来查询数据。

代码样例

以下代码片段在com.huawei.bigdata.hbase.examples包的“HIndexExample”类的scanDataByHIndex方法中

  public void scanDataByHIndex() {
    LOG.info("Entering HIndex-based Query.");
    Table table = null;
    ResultScanner rScanner = null;
    try {
      table = conn.getTable(tableName);
      // Create a filter for indexed column.
      //MRS 2.0.0及其之后版本使用CompareOperator替换CompareOp
      SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("info"), Bytes.toBytes("age"),
          CompareOp.GREATER_OR_EQUAL, Bytes.toBytes("26"));
      filter.setFilterIfMissing(true);

      Scan scan = new Scan();
      scan.setFilter(filter);
      rScanner = table.getScanner(scan);

      // Scan the data
      LOG.info("Scan data using indices..");
      for (Result result : rScanner) {
        LOG.info("Scanned row is:");
        for (Cell cell : result.rawCells()) {
          LOG.info(Bytes.toString(CellUtil.cloneRow(cell)) + ":" + Bytes.toString(CellUtil.cloneFamily(cell)) + ","
              + Bytes.toString(CellUtil.cloneQualifier(cell)) + "," + Bytes.toString(CellUtil.cloneValue(cell)));
        }
      }
      LOG.info("Successfully scanned data using indices for table " + tableName + ".");
    } catch (IOException e) {
      LOG.error("Failed to scan data using indices for table " + tableName + "." + e);
    } finally {
      if (rScanner != null) {
        rScanner.close();
      }
      if (table != null) {
        try {
          table.close();
        } catch (IOException e) {
          LOG.error("failed to close table, ", e);
        }
      }
    }
    LOG.info("Entering HIndex-based Query.");
  }
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问