python 操作 hbase

import happybase
#连接
connection = happybase.Connection('localhost')
connection.open()

创建一个table

connection.create_table(
    'my_table',
    {
        'cf1': dict(max_versions=10),
        'cf2': dict(max_versions=1, block_cache_enabled=False),
        'cf3': dict(),  # use defaults
    }
)

此时,我们再通过connection.tables()查看可以使用的table,结果为[‘my_table’]

创建的table即my_table包含3个列族:cf1、cf2、cf3

获取一个table实例

一个table被创建好之后,要想对其进行操作,首先要获取这个table实例

table = connection.table('my_table')

存储数据:Hbase里 存储的数据都是原始的字节字符串

table = connection.table('my_table')

cloth_data = {'cf1:content': u'jeans', 'cf1:price': '299', 'cf1:rating': '98%'}
hat_data = {'cf1:content': u'cap', 'cf1:price': '88', 'cf1:rating': '99%'}
shoe_data = {'cf1:content': u'nike', 'cf1:price': '988', 'cf1:rating': '100%'}
author_data = {'cf2:name': u'LiuLin', 'cf2:date': '2017-03-09'}

table.put(row='www.test1.com', data=cloth_data)
table.put(row='www.test2.com', data=hat_data)
table.put(row='www.test3.com', data=shoe_data)
table.put(row='www.test4.com', data=author_data)

使用put一次只能存储一行数据

如果row key已经存在,则变成了修改数据

#全局扫描一个table


for key, value in table.scan():
    print (key, value)
b'www.test1.com' {b'cf1:content': b'jeans', b'cf1:price': b'299', b'cf1:rating': b'98%'}
b'www.test2.com' {b'cf1:content': b'cap', b'cf1:price': b'88', b'cf1:rating': b'99%'}
b'www.test3.com' {b'cf1:content': b'nike', b'cf1:price': b'988', b'cf1:rating': b'100%'}
b'www.test4.com' {b'cf2:date': b'2017-03-09', b'cf2:name': b'LiuLin'}

#通过row_stop参数来设置结束扫描的row key


for key, value in table.scan(row_stop='www.test3.com'):
    print( key, value)

通过row_start和row_stop参数来设置开始和结束扫描的row key

for key, value in table.scan(row_start='www.test2.com', row_stop='www.test3.com'):
    print( key, value)

通过row_prefix参数来设置需要扫描的row key,还可以通过设置row key的前缀来进行局部扫描

for key, value in table.scan(row_prefix='www.test'):
   print key, value

检索一行数据

row = table.row('www.test4.com')
print (row)

检索多行数据

rows = table.rows(['www.test1.com', 'www.test4.com'])
print(rows)

检索多行数据,返回字典

rows_dict = dict(table.rows(['www.test1.com', 'www.test4.com']))
print (rows_dict)

通过指定列族来检索数据

row = table.row('www.test1.com', columns=['cf1'])
print( row)

#通过指定列族中的列来检索数据

row = table.row('www.test1.com', columns=['cf1:price', 'cf1:rating'])
print (row)

#通过指定时间戳来检索数据,时间戳必须是整数

row = table.row('www.test1.com', timestamp=1489070666)
print (row)

在返回的数据里面包含时间戳

row = table.row(row='www.test1.com', columns=['cf1:rating', 'cf1:price'], include_timestamp=True)
print (row)

检索某一个cell所有的版本

cells = table.cells(b'www.test1.com', column='cf1:price')
print( cells)

通过设置version参数来检索前n个版本

cells = table.cells(b'www.test1.com', column='cf1:price', versions=3)
print( cells)
# 删除一整行数据
table.delete('www.test4.com')

# 删除一个列族的数据
table.delete('www.test2.com', columns=['cf1'])
# 删除一个列族中几个列的数据
table.delete('www.test2.com', columns=['cf1:name', 'cf1:price'])

链接

posted @ 2019-03-06 16:45  luoganttcc  阅读(173)  评论(0编辑  收藏  举报