版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wenzhou1219/article/details/88380526
前文有说thrift连接操作hbase略显麻烦,happybase完美解决这些问题,操作接口很类似hbase shell,性能和异常处理相对官方版本也做了诸多优化,可谓真的相当的happy了。唯一的问题是这是个第三方库(Github地址),目前作者还在维护,除非你要完全跟上最新Hbase 接口或者希望多个语言接口尽可能保证一致,强烈推荐此库。
环境准备
不需要自己thrift生成python库代码,直接安装最新的库即可。如下:
pip install thrift
pip install happybase
连接
默认Connection创建时自动打开到hbase的socket连接,可以创建时关闭自动连接,然后手动开启,另外对于老版本的hbase(0.94、0.98)需要指定compat参数,详细连接可以参看API文档。
import happybase
connection = happybase.Connection('10.202.209.72', autoconnect=False)
connection.open()
#print所有的表名
print('All tables: ',connection.tables(), '\n')
查询
注意,happybase库操作在每个table对象上进行,返回值可直接按照map形式操作。
#这个操作是一个提前声明-我要用到这个表了-但不会提交给thrift server做操作
table = connection.table(b'table1')
#检索某一行
row = table.row(b'row_key1')
print('a row:', row, '\n')
# 返回结果直接按照map形式操作
print(row[b'b:t1'])
print(row[b'b:t2'])
row = table.row(b'row_key1', columns=[b'b:t1'])
print(row)
#同时检索多行
print('print two rows:')
rows = table.rows([b'row_key1', b'row_key2'])
for key, data in rows:
print(key, data)
#同时检索多行输出字典
print('\n', 'print two dict rows')
rows_as_dict = dict(table.rows([b'row_key1', b'row_key2']))
print(rows_as_dict)
扫描
# 指定开始和结束,最多10行,注意最好指定开始结束范围和行数
for key, data in table.scan(row_start=b'000', row_stop=b'002', limit=10):
print(key, data)
# 指定开始和结束,最多10行,指定过滤条件,注意最好指定开始结束范围和行数
f = "(PrefixFilter ('001') AND (QualifierFilter (=, 'binary:m')))"
for key, data in table.scan(row_start=b'000', row_stop=b'002', limit=10, filter=f):
print(key, data)
可以看到接口非常简洁易用。
源码下载
演示源码下载链接
happybase的文档写的非常完善,本文只演示了查询,其他操作可参考文档
原创,转载请注明来自