大数据hadoop之 三十六.基于HBASE的Python开发
本文于2093天之前发表,文中内容可能已经过时。
一. 安装包
安装happybase和thrift
- pip install happybase
- pip install thrift
二. 表操作DDL
创建连接:
1 | connection = happybase.Connection('somehost') #链接,端口默认是9090 hbase thrift 启动的默认端口也是9090 |
列出所有表:
1 | table_name_list = connection.tables() # connection.tables():获取Hbase实例中的表名列表,返回一个list |
获取表:
1 | table = connection.table(name,user_prefix=True) # connection.table(name,user_prefix=True):获取一个表对象,返回一个 |
对象:
- name:表名
- user_prefix:是否使用表前缀,默认为True
禁用表:在做一些删除操作之前必须先禁用表
1 | connection.disable_table(name) #disable_table(name):禁用表,无返回值 |
- name:表名
启用表:
1 | connection.enable_table(name) # enable_table(name):启用表,无返回值 |
name:表名
创建表:
1 | families = { |
- name:表名
- families:列族
删除表:
1 | connection.delete_table(name,disable=False) #delete_table(name,disable=False):删除表,无返回值 默认是false,若要删除改为true |
name:表名
disable:是否先禁用表
三. 数据操作DML
若要对表进行数据插入等操作,需要先获取表实例。
获取表实例:
1 | table = happybase.Table(name,connection) #happybase.Table(name,connection):获取表实例 |
- name:表名
- connection:连接
获取单元格cells
1 | cells(row, column, versions=None, timestamp=None, include_timestamp=False) # 获取单元格数据,返回一个list |
row:行
column:列
versions:获取的最大版本数量,默认None,即获取所有
timestamp:时间戳,默认None,即获取所有时间戳版本的数据。可指定一个时间戳,获取小于此时间戳版本的所有数据
include_timestamp:是否返回时间戳,默认False
实例:
1 | content = table.cells('row1','cf:1',5,timestamp=1514861929124,include_timestamp=True) |
删除指定行数据:
1 | delete(row, columns=None, timestamp=None, wal=True):删除指定行数据,无返回值 |
- row:行
- columns:列,默认为None,即删除所有列,可传入一个list或tuple来指定删除列
- timestamp:时间戳,默认为None,即删除所有,可传入一个时间戳来删除小于等于此时间戳的所有数据
- wal:是否写入wal,默认为True
实例:
1 | table.delete(row, columns=None, timestamp=None, wal=True) |
插入数据:
1 | put(row, data, timestamp=None, wal=True):插入数据,无返回值 |
- row: 行
- data: 数据,dict类型,{列:值}构成,列与值皆为str类型
- timestamp:时间戳,默认None,即写入当前时间戳
- wal:是否写入wal,默认为True
实例:
1 | # 在row1行,cf:1列插入值1 |
获取一行数据:
1 | row(row, columns=None, timestamp=None, include_timestamp=False):获取一行数据,返回一个dict |
- row:行
- columns: 列,默认为None,即获取所有列,可传入一个list或tuple来指定获取列
- timestamp:时间戳。默认为None,即返回最大的那个时间戳的数据。可传入一个时间戳来获取小于此时间戳的最大时间戳的版本数据
- include_timestamp:是否返回时间戳数据,默认为False
实例:
1 | info = table.row(row, columns=None, timestamp=None, include_timestamp=False) |
获取多行数据:
1 | rows(rows, columns=None, timestamp=None, include_timestamp=False):获取多行数据,返回一个list |
- rows:行,可传入一个list或tuple来指定获取
- columns: 列,默认为None,即获取所有列,可传入一个list或tuple来指定获取列
- timestamp:时间戳。默认为None,即返回最大的那个时间戳的数据。可传入一个时间戳来获取小于此时间戳的最大时间戳的版本数据
- include_timestamp:是否返回时间戳数据,默认为False
实例:
1 | info = table.rows(rows, columns=None, timestamp=None, include_timestamp=False) |
获取扫描器:
1 | scan(row_start=None, row_stop=None, row_prefix=None, columns=None, filter=None, |
- row_start:起始行,默认None,即第一行,可传入行号指定从哪一行开始
- row_stop:结束行,默认None,即最后一行,可传入行号指定到哪一行结束(不获取此行数据)
- row_prefix:行号前缀,默认为None,即不指定前缀扫描,可传入前缀来扫描符合此前缀的行
- columns:列,默认为None,即获取所有列,可传入一个list或tuple来指定获取列
- filter:过滤字符串
- timestamp:时间戳。默认为None,即返回最大的那个时间戳的数据。可传入一个时间戳来获取小于此时间戳的最大时间戳的版本数据
- include_timestamp:是否返回时间戳数据,默认为False
- batch_size:用于检索结果的批量大小
- scan_batching:服务端扫描批处理
- limit:数量
- sorted_columns:是否返回排序的列(根据行名称排序)
- reverse:是否执行反向扫描
实例:
1 | scanner = table.scan(row_start=None, row_stop=None, row_prefix=None, |