HBASE常规SHELL操作

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

订单ID

订单状态

支付金额

支付方式ID

用户ID

操作时间

商品分类

001

已付款

200.5

1

001

2020-5-2 18:08:53

手机;

接下来,我们将使用HBase shell来进行以下操作:

1. 创建表

2. 添加数据

3. 更新数据

4. 删除数据

5. 查询数据

创建表

语法:

create '表名','列蔟名'...

 

创建订单表,表名为ORDER_INFO,该表有一个列蔟为C1

 

create 'ORDER_INFO','C1';

查看表

 

 

删除表

要删除某个表,必须要先禁用表

禁用表

语法:disable "表名

删除表

 

语法:drop "表名"

添加数据

需求

接下来,我们需要往订单表中添加以下数据。

订单ID订单状态支付金额支付方式ID用户ID操作时间商品分类

IDSTATUSPAY_MONEYPAYWAYUSER_IDOPERATION_DATECATEGORY

000001已提交4070149441912020-04-25 12:09:16手机;

  PUT操作

HBase中的put命令,可以用来将数据保存到表中。但put一次只能保存一个列的值。以下是put的语法结构:

put '表名','ROWKEY','列蔟名:列名','值'

 

要添加以上的数据,需要使用7次put操作。如下:

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','手机;'

查看添加的数据

需求

要求将rowkey为:000001对应的数据查询出来。

get命令

在HBase中,可以使用get命令来获取单独的一行数据。语法:

get '表名','rowkey'

查询指定订单ID的数据

get 'ORDER_INFO','000001'

 

COLUMNCELL         

 C1:CATEGORY       timestamp=1588415690678, value=\xE6\x89\x8B\xE6\x9C\xBA;             

 C1:OPERATION_DATE timestamp=1588415689773, value=2020-04-25 12:09:16                   

 C1:PAYWAY         timestamp=1588415689681, value=1                                     

 C1:PAY_MONEY      timestamp=1588415689643, value=4070                                  

 C1:STATUS         timestamp=1588415689591, value=\xE5\xB7\xB2\xE6\x8F\x90\xE4\xBA\xA4  

 C1:USER_ID        timestamp=1588415689721, value=4944191                               

显示中文

在HBase shell中,如果在数据中出现了一些中文,默认HBase shell中显示出来的是十六进制编码。要想将这些编码显示为中文,我们需要在get命令后添加一个属性:{FORMATTER => 'toString'}

查看订单的数据

get 'ORDER_INFO','000001', {FORMATTER => 'toString'}

 

注:

l{ key => value},这个是Ruby语法,表示定义一个HASH结构

lget是一个HBase Ruby方法,’ORDER_INFO’、’000001’、{FORMATTER => 'toString'}是put方法的三个参数

lFORMATTER要使用大写

l在Ruby中用{}表示一个字典,类似于hashtable,FORMATTER表示key、’toString’表示值

更新操作

需求

将订单ID为000001的状态,更改为「已付款」

使用put来更新数据

同样,在HBase中,也是使用put命令来进行数据的更新,语法与之前的添加数据一模一样。

更新指定的列

put 'ORDER_INFO', '000001', 'C1:STATUS', '已付款'

 

注意:

l HBase中会自动维护数据的版本

l 每当执行一次put后,都会重新生成新的时间戳

C1:STATUS   timestamp=1588748844082, value=已提交

C1:STATUS   timestamp=1588748952074, value=已付款

C1:STATUS   timestamp=1588748994244, value=已付款

删除操作

删除状态列数据

需求

将订单ID为000001的状态列删除。

delete命令

在HBase中,可以使用delete命令来将一个单元格的数据删除。语法格式如下:

delete '表名', 'rowkey', '列蔟:列'。

注意:此处HBase默认会保存多个时间戳的版本数据,所以这里的delete删除的是最新版本的列数据。

删除指定的列

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

删除整行数据

需求

将订单ID为000001的信息全部删除(删除所有的列)

deleteall命令

deleteall命令可以将指定rowkey对应的所有列全部删除。语法:

deleteall '表名','rowkey'

删除指定的订单

deleteall 'ORDER_INFO','000001'

清空表

需求

将ORDER_INFO的数据全部删除

truncate命令

truncate命令用来清空某个表中的所有数据。语法:

truncate "表名"

清空ORDER_INFO的所有数据

truncate 'ORDER_INFO'

    扫描操作

  需求一:查询订单所有数据

   需求

查看ORDER_INFO表中所有的数据

scan命令

HBase,我们可以使用scan命令来扫描HBase中的表。语法:

scan '表名'

   扫描ORDER_INFO

scan 'ORDER_INFO',{FORMATTER => 'toString'}

 

注意:要避免scan一张大表!

 需求二:查询订单数据(只显示3条)

scan 'ORDER_INFO', {LIMIT => 3, FORMATTER => 'toString'}

  需求三:查询订单状态、支付方式


  
需求

只查询订单状态以及支付方式,并且只展示3条数据

  命令

scan 'ORDER_INFO', {LIMIT => 3, COLUMNS => ['C1:STATUS', 'C1:PAYWAY'], FORMATTER => 'toString'}

 

注意:

l  [‘C1:STATUS’, …]Ruby[]表示一个数组

  需求四:查询指定订单ID的数据并以中文展示

根据ROWKEY来查询对应的数据,ROWKEY02602f66-adc7-40d4-8485-76b5632b5b53,只查询订单状态、支付方式,并以中文展示。

 

要查询指定ROWKEY的数据,需要使用ROWPREFIXFILTER,用法为:

scan '表名', {ROWPREFIXFILTER => 'rowkey'}

 

实现指令:

 

scan 'ORDER_INFO', {ROWPREFIXFILTER => '02602f66-adc7-40d4-8485-76b5632b5b53', COLUMNS => ['C1:STATUS', 'C1:PAYWAY'], FORMATTER => 'toString'}


语法:

create '表名','列蔟名'...

 

创建订单表,表名为ORDER_INFO,该表有一个列蔟为C1

create 'ORDER_INFO','C1';

 

posted on 2021-10-03 20:15  季昂  阅读(360)  评论(0编辑  收藏  举报