python 查询hbase2 (三)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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的文档写的非常完善,本文只演示了查询,其他操作可参考文档

原创,转载请注明来自

猜你喜欢

转载自blog.csdn.net/wenzhou1219/article/details/88380526