如何理解Hbase中大小Key,及简单实用Hbase

Hbase中
大key是Rowkey,小key是colume(列簇)相当于maplist 列簇中列的数量相当于是无限定的

也看到有人说大Key是Rowkey ,小key是 colume:list(即"列蔟:列名"),如有不同,评论区见♡

其他大数据架构框架中及到大小key的NoSql数据库比如:Redis也是分大小key的
在这里插入图片描述

  • 列簇中的列想加多少就加多少

    • 这个特性让他非常适合做用户画像,可以参考b站黑马的用户画像项目
    • 企业级360度用户画像项目
    • 实际的用户画像项目的标签就是一条条加上HBase去的,各种标签分类相当于是列簇,用户唯一标识是大key(RowKey)
  • 列簇里面的所有列是map结构

  • 列簇可以理解是一个map数组的结构
    9

shell操作

Hbase是原生不支持sql操作的

2.1需求

有以下订单数据,我们想要将这样的一些数据保存到Hbase中.

订单 订单状态 支付金额 支付方式 用户ID 操作时间 商品分类
001 已付款 200.5 1 001 2020-5-2 18:08:53 手机

接下来我们是用HBase shell进行以下操作:

  1. 创建表:
create "表名","列蔟1", "列蔟2"
create 'ORDER_INFO','C1';
hbase(main):005:0> list
TABLE                                                                                                                                                                    
ORDER_INFO                                                                                                                                                               
1 row(s)
Took 0.0378 seconds                                                                                                                                                      
=> ["ORDER_INFO"]

要删除表前先Disable表,防止还有人使用,然后再drop

disable "ORDER_INFO"
drop "ORDER_INFO"
  1. 添加数据

接下来,我们需要往订单表中添加以下数据。在这里插入图片描述


put "表名", "rowkey", "列蔟:列名", "值"
put 'ORDER_INFO','000001','C1:ID','000001'
put 'ORDER_INFO','000001','C1:STATUS','已提交'
put 'ORDER_INFO','000001','C1:PAY_MONEY',4070
put 'ORDER_INFO','000001','C1:PAYWAY',1
put 'ORDER_INFO','000001','C1:USER_ID',4944191
put 'ORDER_INFO','000001','C1:OPERATION_DATE','2020-04-25 12:09:16'
put 'ORDER_INFO','000001','C1:CATEGORY','手机;'
  1. 更新数据
put 'ORDER_INFO', '000001', 'C1:STATUS', '已付款'
  1. 删除数据

删除列操作 :delete ‘表名’, ‘rowkey’, ‘列蔟:列’。

delete 'ORDER_INFO','000001','C1:STATUS'

删除删除指定的订单的行

deleteall 'ORDER_INFO','000001'

执行delet的时候

  • 如果表中的某个列有对一个的几次修改,他会删除最近的一次
  • 默认是会保存三个版本的时间戳
  • 有一个version属性
  1. 查询数据

查询指定订单ID的数据: get ‘表名’,‘rowkey’(获得一行)

get '表名','rowkey'
get 'ORDER_INFO','000001'

效果如下
在这里插入图片描述

查看订单的数据(解决中文乱码的问题,并不是获得某列值)

get 'ORDER_INFO','000001', {
    
    FORMATTER => 'toString'}
  • { key => value},这个是Ruby语法,表示定义一个HASH结构
  • get是一个HBase Ruby方法,’ORDER_INFO’、’000001’、{FORMATTER => >‘toString’}是put方法的三个参数
  • FORMATTER要使用大写
  • 在Ruby中用{}表示一个字典,类似于hashtable,FORMATTER表示key、’toString’表示值