试图在HBase REST API中找到基于列值的过滤

时间:2016-09-13 16:31:25

标签: rest hadoop hbase hadoop2 cloudera-cdh

HI我正在尝试构建REST API以公开驻留在HBase中的数据。为简单起见,我使用内置的HBase REST API。我正在关注https://www.cloudera.com/documentation/enterprise/latest/topics/admin_hbase_rest_api.html的文档。我为搜索实用程序创建了一个使用Rowkey的API。但我坚持认为我剩下的API需要根据列值进行搜索。文档建议步骤但我无法使用它。并且没有其他可用的来源。我发现HBase Java Client中有过滤选项,比如使用substringComaparator等实用程序的singlecolumnvalue过滤器。像这些有什么办法可以在HBase REST API中应用过滤器吗?

1 个答案:

答案 0 :(得分:0)

您粘贴的link会显示如何使用扫描仪:

curl -vi -X PUT \
         -H "Accept: text/xml" \
         -H "Content-Type:text/xml" \
         -d @filter.txt \
         "http://example.com:20550/users/scanner/"

@stelcheck收集了一些过滤器here的使用情况。因此,如果您想将SingleColumnValueFilter与hbase rest api一起使用,那么您的filter.txt就像:

<Scanner batch="100">
  <filter>
    {
      "type": "SingleColumnValueFilter",
      "op": "EQUAL",
      "family": "Y2Y=",
      "qualifier": "cQ==",
      "latestVersion": true,
      "comparator": {
        "type": "BinaryComparator",
        "value": "dmFsdWU5"
      }
    }
  </filter>
</Scanner> 

此示例是在列value9中找到值为cf:q的单元格。

<强>更新

添加示例以在命令行中解析过滤器内容 如果不想将文件内容用作数据,只需在命令行中解析内容即可  对于上面的例子,它将是:

curl -s -i -X PUT -H "Accept: text/xml" -H "Content-Type: text/xml" -d '<Scanner batch="100"><filter>{"type": "SingleColumnValueFilter", "op": "EQUAL", "family": "Y2Y=", "qualifier": "cQ==", "latestVersion": true, "comparator": { "type": "BinaryComparator", "value": "dmFsdWU5" } }</filter></Scanner>'  "http://example.com:20550/users/scanner/"