标题

1、启动HBase shell:

hbase shell

2、CRUD操作

2.1.创建表

【语法】:create '表名','列蔟名'...

【示例】:创建订单表,表名为ORDER_INFO,该表有一个列蔟为C1

create 'ORDER_INFO','C1';

2.2、查看表

list

2.3、删除表

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

2.3.1 禁用表

【语法】:disable "表名"

disable "ORDER_INFO"
2.3.2 删除表

【语法】:drop "表名"

drop "ORDER_INFO"

2.3、添加数据

【语法】: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','手机;'
2.3.1 查看添加的数据

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

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

【语法】:get '表名','rowkey'

get 'ORDER_INFO','000001'

【需求2】:查看订单的数据
{FORMATTER => 'toString'}:显示中文(默认十六进制编码)

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

2.4.更新操作

【需求】:将订单ID为000001的状态,更改为「已付款」
【语法】:put ‘表名’, ‘rowkey’, ‘簇:列’, ‘值’

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

2.5.删除操作

【需求1】:将订单ID为000001的状态列删除。
【语法】:delete '表名', 'rowkey', '列蔟:列'

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

【需求2】:删除整行数据
【语法】:deleteall '表名','rowkey'
deleteall命令可以将指定rowkey对应的所有列全部删除

deleteall 'ORDER_INFO','000001'

2.6清空表

【需求】:将ORDER_INFO的数据全部删除
【truncate】:truncate命令用来清空某个表中的所有数据。
【语法】:truncate "表名"
【示例】:truncate 'ORDER_INFO'

2.7导入数据集

【文件】:ORDER_INFO.txt
【命令】:hbase shell /export/software/ORDER_INFO.txt

2.8计数操作

【count】:用来统计一个表中有多少条数据。
【语法】:count ‘表名’
注意:这个操作是比较耗时的。在数据量大的这个命令可能会运行很久。
【示例】:count 'ORDER_INFO'
【需求】:大量数据的计数统计
【语法】:

$HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'ORDER_INFO'

2.10扫描操作

【需求1】:查看ORDER_INFO表中所有的数据
【语法】:scan '表名'
【示例】:scan 'ORDER_INFO',{FORMATTER => 'toString'}
【注意】:要避免scan一张大表!

【需求2】:查询订单数据(只显示3条)
【示例】:scan 'ORDER_INFO', {LIMIT => 3, FORMATTER => 'toString'}

【需求3】:查询订单状态、支付方式
【示例】:scan 'ORDER_INFO', {LIMIT => 3, COLUMNS => ['C1:STATUS', 'C1:PAYWAY'], FORMATTER => 'toString'}
【注意】: [‘C1:STATUS’, …]在Ruby中[]表示一个数组

【需求4】:查询指定订单ID的数据并以中文展示
【语法】:scan '表名', {ROWPREFIXFILTER => 'rowkey'}
【示例】:

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

2.11.过滤器

【查看Hbase中的过滤器】:show filters
在这里插入图片描述
在这里插入图片描述
用法:

scan ‘表名’, { Filter => “过滤器(比较运算符, ‘比较器表达式’)” }
【比较运算符】:
在这里插入图片描述
【比较器】:
在这里插入图片描述
【比较器表达式】:
在这里插入图片描述
【需求一】:使用RowFilter查询指定订单ID的数据
【示例】:

`scan 'ORDER_INFO', 
{FILTER => "RowFilter(=,'binary:订单ID')"}`

【需求二】:查询状态为已付款的订单
【示例】:

scan 'ORDER_INFO', 
{FILTER => "SingleColumnValueFilter('C1', 'STATUS', =, 'binary:已付款')", 
FORMATTER => 'toString'}

【需求三】:查询支付方式为1,且金额大于3000的订单

  1. 查询支付方式为1
SingleColumnValueFilter('C1', 'PAYWAY', = , 'binary:1')
  1. 查询金额大于3000的订单
SingleColumnValueFilter('C1', 'PAY_MONEY', > , 'binary:3000')
  1. 组合查询
scan 'ORDER_INFO', {FILTER => "SingleColumnValueFilter('C1', 'PAYWAY', = , 'binary:1') AND SingleColumnValueFilter('C1', 'PAY_MONEY', > , 'binary:3000')", FORMATTER => 'toString'}

2.12 INCR

【INCR】: incr可以实现对某个单元格的值进行原子性计数。
【语法】:incr ‘表名’,‘rowkey’,‘列蔟:列名’,累加值(默认累加1)
【导入测试数据】:
在这里插入图片描述
【需求一】:对0000000020新闻01:00 - 02:00访问计数+1
1.获取0000000020这条新闻在01:00-02:00当前的访问次数

get_counter 'NEWS_VISIT_CNT','0000000020_01:00-02:00','C1:CNT'

结果:

base(main):029:0> get 'NEWS_VISIT_CNT','0000000020_01:00-02:00','C1:CNT'
COLUMN          CELL                                                                                                                                        
 C1:CNT         timestamp=1599529533072,value=\x00\x00\x00\x00\x00\x00\x00\x06                                                                             
1 row(s)
Took 0.0243 seconds

2.使用incr进行累加

incr 'NEWS_VISIT_CNT','0000000020_01:00-02:00','C1:CNT'

3.再次查案新闻当前的访问次数

get_counter 'NEWS_VISIT_CNT','0000000020_01:00-02:00','C1:CNT'

2.13.更多的操作

以下连接可以查看到所有HBase中支持的SHELL脚本。
https://learnhbase.net/2013/03/02/hbase-shell-commands/

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐