Hbase常用shell操作
标题1、启动HBase shell:hbase shell2、CRUD操作1.创建表【语法】:create '表名','列蔟名'...【示例】:创建订单表,表名为ORDER_INFO,该表有一个列蔟为C1create 'ORDER_INFO','C1';2、查看表list3、删除表要删除某个表,必须要先禁用表3.1 禁用表【语法】:disable "表名"disable "ORDER_INFO"3
标题
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
SingleColumnValueFilter('C1', 'PAYWAY', = , 'binary:1')
- 查询金额大于3000的订单
SingleColumnValueFilter('C1', 'PAY_MONEY', > , 'binary:3000')
- 组合查询
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/
更多推荐
所有评论(0)