NoSql数据库(hbase版)碰到的问题

通过python访问hbase

1.创建表操作

目的:创建teacher的表

代码:

#引入与Thrift建立连接时字节传输协议的包
from thrift.transport import TSocket
from thrift.protocol import TBinaryProtocol
# 引入访问habse接口的包
from hbase.Hbase import *
from hbase.ttypes import *

# 建立连接
transport = TSocket.TSocket('127.0.0.1',9090)
# TBinaryProtocol 是一种数据封装方式
protocol = TBinaryProtocol.TBinaryProtocol(transport)
# 客户端实例
client = Client(protocol)
# 建立连接
transport.open()

content1 = ColumnDescriptor(name='teacher_info')
content2 = ColumnDescriptor(name='teacher_hobby')
client.createTable('teacher',[content1,content2])
client.getTableNames()

报错:

TypeError: a bytes-like object is required, not 'str'

解释:这个错误提示是由于 Thrift 期望的是一个字节对象(bytes-like object),而不是字符串对象(str)。在这种情况下,需要将字符串编码为字节对象。 

解决方案:

#引入与Thrift建立连接时字节传输协议的包
from thrift.transport import TSocket
from thrift.protocol import TBinaryProtocol
# 引入访问habse接口的包
from hbase.Hbase import *
from hbase.ttypes import *

# 建立连接
transport = TSocket.TSocket('127.0.0.1',9090)
# TBinaryProtocol 是一种数据封装方式
protocol = TBinaryProtocol.TBinaryProtocol(transport)
# 客户端实例
client = Client(protocol)
# 建立连接
transport.open()
# 定义列族
content1 = ColumnDescriptor(name=b'teacher_info')
content2 = ColumnDescriptor(name=b'teacher_hobby')
client.createTable(b'teacher',[content1,content2])
client.getTableNames()

2.查看表结构

print(client.getColumnDescriptors(b'teacher'))

​​​​​​​3.删除表

需要先禁用表,再删除

client.disableTable(b'demo')
client.deleteTable(b'demo')

4.添加数据

在使用 Thrift API 与 HBase 交互时,必须使用 Mutation 类型来指定要插入或更新的数据。这是因为 Mutation 是一个特定的结构,包含了所需的列和对应的值,Thrift API 依赖这个结构来处理数据操作。

一个Mutation对象包含以下字段:

  • column:列名,包括列族和列限定符,例如"family:qualifier"
  • value:要插入或更新的值。
  • isDelete:一个布尔值,表示是否删除该列的数据,默认为False
#引入与Thrift建立连接时字节传输协议的包
from thrift.transport import TSocket
from thrift.protocol import TBinaryProtocol
# 引入访问habse接口的包
from hbase.Hbase import *
from hbase.ttypes import *

# 建立连接
transport = TSocket.TSocket('127.0.0.1',9090)
# TBinaryProtocol 是一种数据封装方式
protocol = TBinaryProtocol.TBinaryProtocol(transport)
# 客户端实例
client = Client(protocol)
# 建立连接
transport.open()
print(client.getTableNames())
mutations = [Mutation(column=b"teacher_info:name", value=b"Bob"),Mutation(column=b"teacher_info:sex", value=b"male")]
client.mutateRow(b'teacher',b'20201110', mutations,{})
print(client.getRow(b'teacher', b'20201110',{}))
#  关闭连接
transport.close()

5.查看数据

print(client.getRow(b'teacher', b'20201110',{}))

6.删除数据 

有两种方式,第一种是根据行键,第二种是根据时间戳

client.deleteAllRow(b'teacher',b'20201110',{})

client.deleteAllRowTs(b'teacher',b'20201110',1717297976802,{})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值