HBase REST过滤器(SingleColumnValueFilter)

时间:2012-02-15 21:57:50

标签: xml rest hadoop hbase stargate

我无法弄清楚如何在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中进行编码。 有没有人有这方面的例子?

谢谢, 马里奥

1 个答案:

答案 0 :(得分:11)

Scanner XML中的过滤字段是格式化为JSON的字符串。由于过滤器的JSON中有很多引号,我建议为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>

你如何发现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还不像开发人员那样友好。