有没有人对HBase REST API有所了解?我正在编写一个程序,使用curl命令从HBase插入和读取。在尝试阅读时,我使用curl get命令,例如
curl -X GET 'http://server:9090/test/Row-1/Action:ActionType/' -h 'Accept:application/json'
这将从Row-1返回Action:ActionType列。如果我想使用GET命令执行等效的WHERE子句,我会被卡住。我不确定它甚至可能吗?如果我想查找Action:ActionType = 1的所有记录,例如。 感谢帮助!
答案 0 :(得分:7)
您可以在CURL请求中使用过滤器(此处为SingleColumnValueFilter
)来执行此操作。
首先,创建一个描述扫描的XML文件(myscanner.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>
您应该将<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/"
此请求应返回Scanner对象,如:
[...]
Location: http://${HOST}:${REST_API_PORT}/${TABLE_NAME}/scanner/149123344543470bea57a
然后使用给定的扫描程序迭代结果(请求多次迭代):
curl -vi -X GET \
-H "Accept: text/xml" \
"http://${HOST}:${REST_API_PORT}/${TABLE_NAME}/scanner/149123344543470bea57a"
您也可以接受"application/json"
而不是XML。请注意,结果是base64编码。
来源:
HBase REST Filter ( 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