一、任务需求分析及HBase表格设计
(1)需求说明
某某自来水公司,需要存储大量的缴费明细数据。以下截取了缴费明细的一部分内容:
我们有如上数据集,需要将其导入到HBase中即可,具体数据集文件存放在百度网盘:
链接:https://pan.baidu.com/s/14n-2XoXyxZL7hN80cNTJMw
提取码:qavu
(2)HBase表格设计
表名:WATER_BILL | ||||
行键(RowKey) | 列族:user | 列族:order | ||
列限定符 | 单元格值 | 列限定符 | 单元格值 | |
4944191 | name | 登卫红 | pay_time | 2020-5-10 |
4944191 | addr | 贵州省铜仁市德江县7单元267室 | current_count | 308.1 |
4944191 | sex | 男 | last_count | 283.1 |
4944191 | usage | 25 | ||
4944191 | total_money | 150 | ||
4944191 | check_date | 2020-4-25 | ||
4944191 | latest_pay_date | 2020-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')
还没有评论,来说两句吧...