分享

hbase rest_api 联合查询

目的:查询多个rowkey(比如200个),并过滤出值中包含某个关键字的



可以单独查询每一个rowkey
<Scanner  batch="1000">
  <filter>
    {
      "type": "FilterList",
      "op": "MUST_PASS_ALL",
      "filters": [
      {
        "latestVersion":true, "ifMissing":true,
        "op":"EQUAL", "type":"RowFilter",
        "comparator":{"value":"enpjTzRXTjIwbDJlMTZFNkhpNEY=","type":"BinaryComparator"}
      },
      {
        "latestVersion":true, "ifMissing":true,
        "op":"EQUAL", "type":"SingleColumnValueFilter",
        "family":"Zg==","qualifier":"bA==",
        "comparator":{"value":"zzcO4WN20l2e16E6Hi4F","type":"SubstringComparator"}
      }

    }
  </filter>
</Scanner>


但是这种方式要循环查询每一个rowkey效率低






查询所有的这些rowkey,怎么能过滤到值呢?
<Scanner  batch="1000">
  <filter>
    {
      "type": "FilterList",
      "op": "MUST_PASS_ONE",
      "filters": [
      {
        "latestVersion":true, "ifMissing":true,
        "op":"EQUAL", "type":"RowFilter",
        "comparator":{"value":"enpjTzRXTjIwbDJlMTZFNkhpNEY=","type":"BinaryComparator"}
      },
      {
        "latestVersion":true, "ifMissing":true,
        "op":"EQUAL", "type":"RowFilter",
        "comparator":{"value":"aaaaTzRXTjIwbDJlMTZFNkhpNEY=","type":"BinaryComparator"}
      }

    }
  </filter>
</Scanner>







如果使用MultiRowRangeFilter应该可以比较好的解决,但是一直没有找到rest api查询的语句
<Scanner  batch="1000">
  <filter>
    {
      "type": "FilterList",
      "op": "MUST_PASS_All",
      "filters": [
      {
        "latestVersion":true, "ifMissing":true,
        "type":"MultiRowRangeFilter".....
      },
      {
       "latestVersion":true, "ifMissing":true,
        "op":"EQUAL", "type":"SingleColumnValueFilter",
        "family":"Zg==","qualifier":"bA==",
        "comparator":{"value":"zzcO4WN20l2e16E6Hi4F","type":"SubstringComparator"}
      }

    }
  </filter>
</Scanner>







已有(4)人评论

跳转到指定楼层
NEOGX 发表于 2018-5-21 17:40:10
rest api跟其它api都是一样的。只不过调用方式和通信方式有些不一样。

楼主可以尝试下面函数

public boolean filterRowKey(byte[] buffer,int offset,int length)


参数解释:
buffer - buffer containing row key
offset - offset into buffer where row key starts
length - length of the row key


来自:
https://hbase.apache.org/1.1/api ... RowRangeFilter.html
回复

使用道具 举报

jinwensc 发表于 2018-5-21 20:29:37
NEOGX 发表于 2018-5-21 17:40
rest api跟其它api都是一样的。只不过调用方式和通信方式有些不一样。

楼主可以尝试下面函数

java api好弄啊
问题是只能提供http查询啊,我一直没找到源码里面怎么解析请求体的

回复

使用道具 举报

langke93 发表于 2018-5-22 17:10:59
jinwensc 发表于 2018-5-21 20:29
java api好弄啊
问题是只能提供http查询啊,我一直没找到源码里面怎么解析请求体的

是不会写rest api?还是不会在代码里写rest api,还是不会解析 api。

关于rest api,英文较好的可参考下面三篇:
http://blog.cloudera.com/blog/2013/03/how-to-use-the-apache-hbase-rest-interface-part-1/


http://blog.cloudera.com/blog/2013/04/how-to-use-the-apache-hbase-rest-interface-part-2/


http://blog.cloudera.com/blog/2013/07/how-to-use-the-apache-hbase-rest-interface-part-3/
回复

使用道具 举报

jinwensc 发表于 2018-5-23 10:47:38
langke93 发表于 2018-5-22 17:10
是不会写rest api?还是不会在代码里写rest api,还是不会解析 api。

关于rest api,英文较好的可参考 ...

是不会写MultiRowRangeFilter 的rest api 其他的都会请求体大概和下面的相似,但是不正确
<Scanner  batch="1000">
  <filter>
    {
    "latestVersion":true, "ifMissing":true,
    "type":"MultiRowRangeFilter",
    "row_range_list": [{
      "startRow": "enpjTzRXTjIwbDJlMTZFNkhpNEY=",
      "stopRow": "enpjTzRXTjIwbDJlMTZFNkhpNEY=~"
    },
    {
      "startRow": "encwNXJjZ2M4NjFWOEg1NTk4NEQ=",
      "stopRow": "encwNXJjZ2M4NjFWOEg1NTk4NEQ=~"
    },
    {
      "startRow": "enNaNXdhMEozUTdEUzB4NlpNTFo=",
      "stopRow": "enNaNXdhMEozUTdEUzB4NlpNTFo=~"
    }]
    }
  </filter>
</Scanner>

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条