Hbase之一月速成:Hbase的shell命令
hbase 的shell初认识
目录
一、命令总汇
命令 | 功能 | 命令 | 功能 |
create | 创建表 | count | 统计行数 |
put | 插入或更新数据 | delete | 删除指定的行或列的数据 |
get | 获取指定行或列的数据 | deleteall | 删除整个行或者列的数据 |
scan | 扫描表并返回表的数据 | truncate | 删除表的数据,结构还在 |
describe | 查看表的结构 | drop | 删除整个表(包括数据和结构)慎用 |
二、需求
订单id | 订单状态 | 支付金额 | 支付方式id | 用户id | 操作时间 | 商品分类 |
001 | 已付款 | 200.5 | 1 | 1001 | 2021-3-1 18:01:40 | 手机 |
三、基本操作
1、创建表
语法:create ‘表名‘,’列簇名1’,’列簇名2’
2、查看表
语法:list(查看库中有多少表)
describe ‘表名’(详细查看)
3、删除表
1)禁用表
语法:disable ‘表名’
2)启用表
语法:enable ‘表名’
3)删除表
语法:drop ‘表名’(删除表前需要禁用表)
四、数据的操作
1、添加数据
语法:put ‘表名’,’rowkey’,’列簇名:列名字’,’值’
2、 获取数据
语法:get ‘表名’,’rowkey
注意:如果显示中文乱码,是因为hbase shell中显示中文是十六制编码,要正确显示中文需要添加选项,格式:
{‘FORMATTER‘=>’toString’}
3、更新数据
语法:put ‘表名’,’rowkey’,’列簇名:列名字’,’新值’
4、删除数据
1)删除指定列
语法:delete ‘表名’,’rowkey’,’info:’,’值’
2)删除整行整列的数据
语法:deleteall ‘表名’,’rowkey’
Hbase删除数据并不是真正的删除,而是给数据做一个删除的标注,再查询数据时不显示
3)清空表数据
语法:truncate ‘表名’
五、数据文件的导入
1、准备数据文件
2、创建表
3、执行命令导入数据文件
4、查看数据
六、计数操作
1、计数命令
语法:count ‘表名’
2、MR程序计数
当数据量很大时,可以用HBase提供的mapreduce程序进行运行
hbase org.apache.hadoop.hbase.mapreduce.RowCounter '表名’
注意:
启动yarn集群
启动历史服务器:mapred —daemon start historyserver
七、扫描操作
1、全表扫描
语法:scan ‘表名’,{FORMATTER=>’toString’}
注意:
尽量避免全表扫描一张很大很大的表
2、限定记录数
语法:scan ‘表名‘,{FORMATTER=>’toString’,LIMIT=>数字}
3、限定列
语法:scan ‘表名‘,{FORMATTER=>’toString’,COLUMNS=>[‘列簇名1:列名1’,’列簇名2:列名2’…]}
4、限定行
语法:get “表名” ,”rowkey”
语法:scan"ORDER_INFO",{FORMATTER=>'toString',COLUMNS=>['C1:PAYWAY','C1:STATUS'],ROWPREFIXFILTER=>''}
八、过滤器
1、简介
2、过滤器
类别 | 过滤器 | 功能 |
rowkey过滤器 | RowFilter | 实现行键字符串的比较和过滤 |
PrefixFilter | rowkey前缀过滤器 | |
KeyOnlyFilter | 只对单元格的键过滤不显示值 | |
FirstKeyOnlyFilter | 只扫描显示相同键的第一个单元格,其键值对会显示出来 | |
列过滤器 | FamilyFilter | 列簇过滤器 |
QualifierFilter | 列限定符过滤器,只显示对应列簇列名的数据 | |
ColumnPrefixFilter | 对列名称的前缀进行过滤 | |
MultipleColumnPrefixFilter | 可以指定多个前缀对列名过滤 | |
ColumnRangeFilter | 列名称范围过滤器 | |
值过滤器 | ValueFilter | 值过滤器,找到符合值条件的键值对 |
SingleColumnValueFilter | 在指定的列簇和列名中进行比较的值过滤器 | |
ColumnValueFilter | 列值过滤器 | |
SingleColumnValueExcludeFilter | 排出匹配成功的值 | |
其他过滤器 | ColumnPaginationFilter | 对一行的所有列分页,只返回[offset,offset+limit]范围内的列 |
PageFilter | 对显示结果按行进行分页显示 | |
TimestampsFilter | 时间戳过滤器,支持等值,可以设置多个时间戳 | |
ColumnCountGetFilter | 限制每个逻辑行返回值对的个数,在get方法中使用 | |
DependentColumnFilter | 允许用户指定一个参考列或引用列来过滤其他列的过滤器 |
3、过滤器的用法
过滤器一般结合scan命令来使用,
语法:scan ‘表名’,{FILTER=>“过滤器(比较运算符,’比较器表达式‘)”
示例:查询指定订单数据
scan "ORDER_INFO",{FORMATTER=>'toString',FILTER=>"RowFilter(=,'binary:02602f66-adc7-40d4-8485-76b5632b5b53')"}
1)比较运算符
比较运算符 | 功能 |
= | 等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
!= | 不等于 |
2)比较器
比较器 | 功能 |
BinaryComparator | 匹配完整字节数组 |
BinaryPrefixComparator | 匹配字节数组前缀 |
BitComparator | 匹配比特位 |
NullComparator | 匹配空值 |
RegexStringComparator | 匹配正则表达式 |
SubStringComparator | 匹配子字符串 |
3)比较表达式
比较器 | 表达式语音缩写 |
BinaryComparator | binary:值 |
BinaryPrefixComparator | binaryprefix:值 |
BitComparator | bit:值 |
NullComparator | null |
RegexStringComparator | regexstring:正则表达式 |
SubStringComparator | substring:值 |
用法参照官方文档
Apache HBase 3.0.0-alpha-3-SNAPSHOT API
4、案例一:使用RowFilter查询指定订单id的数据
1)需求
查询指定订单的数据,订单号为“02602f66-adc7-40d4-8485-76b5632b5b53”、订单状态及支付方式
2)分析
- 因为订单id就是表的rowkey,所以应该使用rowkey过滤器RowFilter来过滤数据
- 比较运算符:=
- 比较器表达式:binary:值
3)命令
scan 'ORDER_INFO',{FORMATTER=>'toString',FILTER=>"RowFilter(=,'binary:02602f66-adc7-40d4-8485-76b5632b5b53')",COLUMNS=>['C1:PAYWAY','C1:STATUS']}
5、案例查询状态为已付款的订单
1)需求
查询状态为已付款的订单
2)分析
- 因为状态为已付款要查询指定值的数据,所以不能使用rowkey过滤器,而是要使用值过滤器
- 状态为列名,已付款为值,所以可以选用SingleColumnValueFilter,查看api文档,需要传入四个参数:
- 列簇
- 列标识符(列名)
- 比较运算符
- 比较器
3)命令
scan 'ORDER_INFO',{FORMATTER=>'toString',FILTER=>"SingleColumnValueFilter('C1','STATUS',=,'binary:已付款')"}
注意:
- 列簇名和列名大小写一定要对
- 列名写错了过滤不了数据,但是hbase不会报错,因为hbase是无模式的
6、案例组合多条件过滤
1)需求
查询支付方式为1,且金额大于3000的订单
2)分析
- 此处需要使用多个过滤器组合使用共同实现查询的要求,多个过滤器可以使用AND(且)、OR(或者)来进行组合。
- 使用值过滤器SingleColumnValueFilter实现对应列值的查询
- 支付方式为1的过滤器:SingleColumnValueFilter('C1','PAYWAY',=,'binary:1')
- 金额大于3000的过滤器:SingleColumnValueFilter('C1','PAY_MONEY',>,'binary:3000')
- 两个过滤器的关系:且用AND来实现
3)命令
scan 'ORDER_INFO',{FORMATTER=>'toString',FILTER=>"SingleColumnValueFilter('C1','PAYWAY',=,'binary:1') AND SingleColumnValueFilter('C1','PAY_MONEY',>,'binary:3000')",COLUMNS=>['C1:PAYWAY','C1:PAY_MONEY']}
7、练习1:支付方式为1,,且金额不大于3000的订单
scan 'ORDER_INFO',{FORMATTER=>'toString',FILTER=>"SingleColumnValueFilter('C1','PAYWAY',=,'binary:1') AND SingleColumnValueFilter('C1','PAY_MONEY',<=,'binary:3000')",COLUMNS=>['C1:PAYWAY','C1:PAY_MONEY']}
8、练习2:实现该案例,列的限定用过滤器实现
scan "ORDER_INFO",{FORMATTER=>'toString',FILTER=>"SingleColumnValueFilter('C1','PAYWAY',=,'binary:1') AND SingleColumnValueFilter('C1','PAY_MONEY',<=,'binary:3000') AND ColumnPrefixFilter('PAY')"}
9、练习3:选择某个时间段内的订单
scan "ORDER_INFO",{FORMATTER=>'toString',FILTER=>"SingleColumnValueFilter('C1','OPERATION_DATE',>=,'binary:2020-04-25 12:09:16') AND SingleColumnValueFilter('C1','OPERATION_DATE',<=,'binary:2020-04-25 12:09:50')"}
九、INCR
1、需求
新闻ID | 访问次数 | 时间段 | rowkey |
0000000001 | 12 | 00:00-01:00 | 0000000001_00:00-01:00 |
0000000002 | 20 | 01:00-02:00 | 0000000002_01:00-02:00 |
2、incr操作
语法:
incr ‘表名’,’rowkey’,’列簇’,’列名’,’累加值(默认累加1)’
说明:
如果某一列要实现计数功能,必须要使用incr来创建对应的列
使用put创建的列是不能实现累加的
3、导入测试数据
上传成功
查看前五行数据
scan "NEWS_VISIT_CNT",{FORMATTER=>'toString',LIMIT=>5}
4、获取计数器的值
语法:
get_counter ,‘表名’,’rowkey’,’列簇:列名’
get_counter "NEWS_VISIT_CNT",'0000000001_00:00-01:00','C1:CNT'
5、使用incr进行计数器累加操作
十、Shell的管理操作
1、status
显示服务器的状态
2、whoami
3、list
显示所有的表
4、count
查看表的结构
5、describe
6、exists
7、is_enabled、is_disabled
判断表是否启用或是禁用
8、alte
改变表或列簇的模式
9、disable和enable
禁用和启动表
10、drop
删除表
11、truncate
清空表数据
更多推荐
所有评论(0)