使用 HBase REST 过滤 API
Filter using HBase REST API
有人了解 HBase REST API 吗?我目前正在编写一个程序,该程序使用 curl 命令插入和读取 HBase。尝试阅读时,我使用 curl get 命令,例如
curl -X GET 'http://server:9090/test/Row-1/Action:ActionType/' -h 'Accept:application/json'
这 returns 第 1 行的第 Action:ActionType 列。但是,如果我想使用 GET 命令执行与 WHERE 子句等效的操作,我会被卡住。我不确定它是否可能?例如,如果我想查找 Action:ActionType =1 的所有记录。
感谢您的帮助!
您可以通过在您的 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/"
这个请求应该 return 一个 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 的 Cloudera 文档API:https://www.cloudera.com/documentation/enterprise/5-9-x/topics/admin_hbase_rest_api.html
有人了解 HBase REST API 吗?我目前正在编写一个程序,该程序使用 curl 命令插入和读取 HBase。尝试阅读时,我使用 curl get 命令,例如
curl -X GET 'http://server:9090/test/Row-1/Action:ActionType/' -h 'Accept:application/json'
这 returns 第 1 行的第 Action:ActionType 列。但是,如果我想使用 GET 命令执行与 WHERE 子句等效的操作,我会被卡住。我不确定它是否可能?例如,如果我想查找 Action:ActionType =1 的所有记录。 感谢您的帮助!
您可以通过在您的 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/"
这个请求应该 return 一个 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 的 Cloudera 文档API:https://www.cloudera.com/documentation/enterprise/5-9-x/topics/admin_hbase_rest_api.html