Python API(happybase)操作Hbase案例

Python API(happybase)操作Hbase案例

码农世界 2024-05-13 前端 70 次浏览 0个评论

一、任务需求分析及HBase表格设计

(1)需求说明

某某自来水公司,需要存储大量的缴费明细数据。以下截取了缴费明细的一部分内容:

我们有如上数据集,需要将其导入到HBase中即可,具体数据集文件存放在百度网盘:

链接:https://pan.baidu.com/s/14n-2XoXyxZL7hN80cNTJMw 

提取码:qavu

(2)HBase表格设计

表名:WATER_BILL
行键(RowKey)列族:user列族:order
列限定符单元格值列限定符单元格值
4944191name登卫红pay_time2020-5-10
4944191addr贵州省铜仁市德江县7单元267室current_count308.1
4944191sexlast_count283.1
4944191usage25
4944191total_money150
4944191check_date2020-4-25
4944191latest_pay_date2020-6-9
................

 二、使用Python API创建HBase表格

'''
水表业务:
Hbase表格的创建
'''
#导入happybase库
import happybase
#构建Hbase的连接
conn = happybase.Connection(
    host = "192.168.25.200",  #主机IP
    port = 9090
)
#设置水费表格的名称为WATER_BILL(注意:在HBase API代码中,数据都是以Bytes字节数组的形式操作)
table_name = b"WATER_BILL"
#创建表格WATER_BILL(先检查表格是否存在,不存在则创建)
#通过conn连接对象的tables()可以获取全部的表格
tbs = conn.tables()
#if判断table_name是否在tbs中
if table_name in tbs:
    print(f"{table_name}已存在,无需创建")
else:
    print(f"{table_name}不存在,请创建它。")
    conn.create_table(
        table_name.decode(),     #将字节字符串转为普通字符串
        {
            'user':dict(max_versions = 5),  #列族信息
            'order':dict()                 #列族信息
        }
    )
#打印当前的表格信息
print(f"当前的表格:{conn.tables()}")
#关闭连接
conn.close()

三、使用Python API插入数据

#导入happybase库
import happybase
#构建Hbase的连接
conn = happybase.Connection(
    host = "192.168.25.200",  #主机IP
    port = 9090
)
#往"WATER_BILL"表格内插入数据(读取文件的每行数据)
water_table = conn.table("WATER_BILL")
for line in open("WATER_BILL.TSV",encoding="UTF-8"):
    line = line.replace("\n","")
    # print(line)
    arrs = line.split('\t')
    # print(arrs)
    rowkey = arrs[0].encode()#行键
    data = {
        b'user:name':arrs[1].encode(),
        b'user:addr': arrs[2].encode(),
        b'user:sex': arrs[3].encode(),
        b'order:pay_time': arrs[4].encode(),
        b'order:current_count': arrs[5].encode(),
        b'order:last_count': arrs[6].encode(),
        b'order:usage': arrs[7].encode(),
        b'order:total_money': arrs[8].encode(),
        b'order:check_date': arrs[9].encode(),
        b'order:latest_pay_time': arrs[10].encode(),
    }
    water_table.put(rowkey,data)

四、使用Python API查询数据

#1.导入happybase库
import happybase
#2.建立HBase的连接
conn = happybase.Connection(
    host="192.168.25.200",   #主机名
    port=9090,      #Thrift的默认端口号
    timeout=60000   #超时时间
)
#3.通过conn对象,调用table方法,获取WATER_BILL表格
water_table = conn.table('WATER_BILL')
#查询数据
row = water_table.row(b'9054826')
# print(row)
# print(type(row))
for key in row.keys():
    print(f"列族:列限定符:{key.decode()},value:{row[key].decode()}")
#4.关闭连接
conn.close()

五、使用Python API删除数据

#导入happybase库
import happybase
#构建Hbase的连接
conn = happybase.Connection(
    host = "192.168.25.200",  #主机IP
    port = 9090
)
#获取表格对象
water_table = conn.table('WATER_BILL')
#删除表格的指定子列数据
water_table.delete(b'9054826',columns=[b'user:sex',b'order:usage'])
#删除表格的某一行数据(一个rowkey)
water_table.delete(b'9054826')

转载请注明来自码农世界,本文标题:《Python API(happybase)操作Hbase案例》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,70人围观)参与讨论

还没有评论,来说两句吧...

Top