xml - HBase REST 过滤器 ( SingleColumnValueFilter )

标签 xml rest hadoop hbase stargate

我不知道如何在 HBase REST 接口(interface) (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 参数使用一个单独的文件,以避免单个报价。

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 的标准过滤器对象吐出字符串化过滤器。

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 编码的数据。我已经在一张 table 上测试了上面的 curl 命令,它工作得很好。

如果您想知道,是的,用于扫描仪的 REST API 对开发人员的友好程度还不够高。

关于xml - HBase REST 过滤器 ( SingleColumnValueFilter ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9302097/

相关文章:

javascript - 如何显示从二维数组的 API 调用中获取的数据

Hadoop:两个数据节点,但 UI 显示一个和 Spark:两个工作人员 UI 显示一个

hadoop - 在 map reduce 中引用来自 hadoop dfs 的文件

xml - 拥有多个根是非法的(结语中的开始标记?)

python - 如何为我的 REST 客户端生成 WSDL 文件?

java - 在 Soap 请求中发送无效的 XML 字符

javascript - 在 JavaScript 中从 json 中提取数据

hadoop - 如何在不重启Hadoop服务的情况下重置 “Reserved Space for Replicas”

java - 如何将 Saxon 的 DocumentInfo 序列化为字符串?

java - 字节数组java xml序列化