使用HBase REST API进行过滤

Ala*_*989 6 rest curl hbase

有没有人知道HBase REST API的任何信息?我正在编写一个程序,使用curl命令从HBase插入和读取.在尝试阅读时,我使用curl get命令,例如

curl -X GET 'http://server:9090/test/Row-1/Action:ActionType/' -h 'Accept:application/json'
Run Code Online (Sandbox Code Playgroud)

这将从Row-1返回Action:ActionType列.如果我想使用GET命令执行等效的WHERE子句,我会被卡住.我不确定它甚至可能吗?如果我想查找Action:ActionType = 1的所有记录,例如.感谢帮助!

nor*_*bjd 8

您可以通过SingleColumnValueFilter在CURL请求中使用过滤器(此处为a )来完成此操作.

首先,创建一个myscanner.xml描述扫描的XML文件().这里我们想根据限定符值进行过滤,使用EQUAL运算符):

<Scanner batch="10">
    <filter>
        {
            "type": "SingleColumnValueFilter",
            "op": "EQUAL",
            "family": "<FAMILY_BASE64>",
            "qualifier": "<QUALIFIER_BASE64>",
            "latestVersion": true,
            "comparator": {
                "type": "BinaryComparator",
                "value": "<SEARCHED_VALUE_BASE64>"
            }
        }
    </filter>
</Scanner>
Run Code Online (Sandbox Code Playgroud)

您应该替换<FAMILY_BASE64>,<QUALIFIER_BASE64><SEARCHED_VALUE_BASE64>使用您自己的值(值必须转换为base64,您可以这样做echo -en ${FAMILY} | base64.

然后,将此XML文件作为数据提交给HBase REST API的CURL请求:

curl -vi -X PUT \
    -H "Content-Type:text/xml" \
    -d @myscanner.xml \
    "http://${HOST}:${REST_API_PORT}/${TABLE_NAME}/scanner/"
Run Code Online (Sandbox Code Playgroud)

此请求应返回Scanner对象,如:

[...]
Location: http://${HOST}:${REST_API_PORT}/${TABLE_NAME}/scanner/149123344543470bea57a
Run Code Online (Sandbox Code Playgroud)

然后使用给定的扫描程序迭代结果(请求多次迭代):

curl -vi -X GET \
    -H "Accept: text/xml" \
    "http://${HOST}:${REST_API_PORT}/${TABLE_NAME}/scanner/149123344543470bea57a"
Run Code Online (Sandbox Code Playgroud)

您也可以接受"application/json"而不是XML.请注意,结果是base64编码的.

资料来源:

HBase REST过滤器(SingleColumnValueFilter)

您可以使用的过滤器列表:https://gist.github.com/stelcheck/3979381

有关HBase REST API的Cloudera文档:https://www.cloudera.com/documentation/enterprise/5-9-x/topics/admin_hbase_rest_api.html