hbase python 列范围查找_用python对Hbase进行高级查询

本文介绍了如何使用Python库Happybase进行HBase的高级查询,特别是列范围的查找。通过示例展示了SingleColumnValueFilter的用法,包括过滤不包含特定列的行、组合多个过滤条件以及使用正则表达式进行过滤。强调了理解HBase的Thrift API对于实现复杂查询的重要性。
摘要由CSDN通过智能技术生成

python访问Hbase虽然有很多库,目前最好用的还是happybase。happybase文档上手容易,但是很多高级查询没有一个详尽的文档。因此要玩转高级查询,还需要自己去翻阅Hbase的thrift api文档

首先创建链接:

import happybase

conn = happybase.Connection('localhost')

table = conn.table('table_xxx')

简单的scan查询:

query = table.scan()

result = next(query)

scan查询返回一个迭代器,理论上会返回一个表里面所有的结果。如果需要做限制,则需要加上limit参数:

query = table.scan(limit=10)

result = list(query)

如果要查找指定列簇某个列内容的匹配,则需要用到filter:

query_str = "SingleColumnValueFilter ('a', 'aa', =, 'substring:test')"

query = table.scan(filter=query_str, limit=10)

这里查询列簇a的列aa的内容是否包含'test'。

但是实际查看结果,发现某些不包含'aa'这个列的row也被返回了,这是因为api就是这么规定的:

This filter takes a column family, a qualifier, a compare operator and a comparator. If the specified column is not found – all the columns of that row will be emitted. If the column is found and the comparison with the comparator returns true, all the columns of the row will be emitted. If the condition fails, the row will not be emitted.

所以在需要过滤掉这些不包含'aa'的内容时,需要添加过滤的参数:

query_str = "SingleColumnValueFilter ('a', 'aa', =, 'substring:test', true, false)"

参数定义如下:

SingleColumnValueFilter('', '', , '', , )

这个在Hbase的thrift api里面没有直接提及,但是在例子里有。感觉真是坑。。。

多个filter的逻辑组合:

query_str = "SingleColumnValueFilter ('a', 'aa', =, 'substring:test', true,false) OR SingleColumnValueFilter ('a', 'aa', =, 'substring:check', true, false)"

这样能查询出a.aa这个列里面包含test或者check的row。

上面的逻辑还可以通过一个正则来搞定:

query_str = "SingleColumnValueFilter ('a', 'aa', =, 'regexstring:(test|check).com', true, false)"

filter匹配方式还有binary,binaryprefix。而filter还有RowFilter, ValueFilter等,这里就需要自己参考thrift文档来搞了,基本上和SingleColumnValueFilter大同小异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值