HBase RESTfilter(SingleColumnValueFilter)

我无法弄清楚如何在HBase REST接口(HBase 0.90.4-cdh3u3)中使用filter。 文档只是给了我一个“string”的架构定义,但没有显示如何使用它。

所以,我可以这样做:

curl -v -H 'Content-Type: text/xml' -d '<Scanner startRow="ddo" stopRow="ddp" batch="1024"/>' 'http://hbasegw:8080/table/scanner' 

然后检索

 curl -s -H "Content-Type: text/xml" http://hbasegw:8080/table/scanner/13293426893883128482b | tidy -i -q -xml 

但是现在我想使用SingleColumnValueFilter,并且必须以某种方式在XML中进行编码。 有没有人有这样的例子?

谢谢,马里奥

扫描仪XML中的筛选字段是格式为JSON的string。 由于filter的JSON中有许多引号,我build议使用一个单独的文件来curl的-d参数,以避免单引号。

curl -v -H "Content-Type:text/xml" -d @args.txt http://hbasegw:8080/table/scanner

文件args.txt是:

 <Scanner startRow="cm93MDE=" endRow="cm93MDg=" batch="1024"> <filter> { "latestVersion":true, "ifMissing":true, "qualifier":"Y29sMQ==", "family":"ZmFtaWx5", "op":"EQUAL", "type":"SingleColumnValueFilter", "comparator":{"value":"MQ==","type":"BinaryComparator"} } </filter> </Scanner> 

你如何发现JSONfilterstring应该如何? 这是通过Java代码的一种简单的方法,它从HBase的Java API中给出一个标准的Filter对象,将string化的filter分离出来。

 SingleColumnValueFilter filter = new SingleColumnValueFilter( Bytes.toBytes("family"), Bytes.toBytes("col1"), CompareFilter.CompareOp.EQUAL, Bytes.toBytes("1") ); System.out.println(ScannerModel.stringifyFilter(filter)); 

请注意,JSON和XML需要使用Base64编码的数据。 我已经testing了上面的一个表上的curl命令,它工作得很好。

如果您想知道,是的,扫描仪的REST API还不像开发人员友好,因为它可以得到。

Interesting Posts