我不知道如何在HBase REST接口(HBase 0.90.4-cdh3u3)中使用过滤器。文档只是给我一个“字符串”的模式定义,但不显示如何使用它。
所以,我能够这样做:
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的字符串。由于过滤器的JSON有很多引号,我建议对curl的-d参数使用单独的文件,以避免单引号。
原文链接:/xml/293721.htmlcurl -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>
如何发现JSON过滤器字符串应该是什么样子?下面是一个通过Java代码的简单方法,它从HBase的Java API中提取了一个标准的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编码的数据。我测试了上面的curl命令在一个表,它的工作很好。
如果你想知道,是的,扫描仪的REST API还不是开发者友好的,因为它可以得到。