使用HBase + Python过滤整数

时间:2014-04-23 16:04:57

标签: python hbase thrift happybase

我正在尝试从HBase表中过滤行(我正在使用HappyBase),具体地说,我正在尝试获取其中包含' id'小于1000:

for key, data in graph_table.scan(filter="SingleColumnValueFilter('cf', 'id', <, 'binary:1000')"):
    print key, data

结果如下:

<http://ieee.rkbexplorer.com/id/publication-d2a6837e67d808b41ffe6092db50f7cc> {'cf:type': 'v', 'cf:id': '100', 'cf:label': '<http://www.aktors.org/ontology/portal#Proceedings-Paper-Reference>'}
<http://www.aktors.org/ontology/date#1976> {'cf:type': 'v', 'cf:id': '1', 'cf:label': '<http://www.aktors.org/ontology/support#Calendar-Date>'}
<http://www.aktors.org/ontology/date#1985> {'cf:type': 'v', 'cf:id': '10', 'cf:label': '<http://www.aktors.org/ontology/support#Calendar-Date>'}

在表格中有行&#39; id&#39;从1到1000.如果我使用HBase Java库在Java中编码,它可以正常工作,使用Byte.toBytes()函数解析整数值。

谢谢。

1 个答案:

答案 0 :(得分:3)

嗯,问题是我将整数保存为字符串,而正确的方法是将它们保存为字节:

table.put(key, {'cf:id': struct.pack(">q", value)})

查询数据库时,过滤器的值也必须打包:

for key, data in graph_table.scan(filter="SingleColumnValueFilter('cf', 'id', <, 'binary:%s', true, false)" % struct.pack(">q", 1000)):
     print key, data

最后,解压缩结果:

value = struct.unpack(">q", data['cf:id'])[0]

非常感谢。