Hbase shell常用语句和查询过滤器集合

本文详细介绍HBase数据库的启动、停止、表操作、数据操作及过滤器使用方法,涵盖创建、查询、更新、删除等核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.启动和停止

启动
[bdp@host166 ~]$ hbase shell
hbase(main):002:0>
停止
hbase(main):002:0> quit

2.常用命令

2.1查看所有表

hbase(main):016:0> list
TABLE                                                                                                                    
bdtest:t1 

2.2创建表

格式:create '表名', '列族名1','列族名2','列族名N'

hbase(main):013:0> create 'student','info','course'
0 row(s) in 2.3250 seconds

=> Hbase::Table - student

2.3查看表结构

hbase(main):015:0> describe 'student'

2.4判断表名是否存在

hbase(main):017:0> exists 'student'
Table student does exist 

2.5判断是否禁用启用表

hbase(main):018:0> is_enabled 'student'
true                                                                                                                     
0 row(s) in 0.0280 seconds

hbase(main):019:0> is_disabled 'student'
false

2.6添加一个列族

hbase(main):020:0> alter 'student','other'
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.3930 seconds

备注:最好不要修改列簇,因为涉及到物理存储更新,所以最好在建表的时候,指定好表结构,之后尽量不要去修改。可以看到当添加一个列簇的时候,执行了update all region操作。

2.7删除列族

hbase(main):021:0> alter 'student', {NAME => 'other', METHOD => 'delete'}
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.6910 seconds

备注:NAME 和 METHOD必须为大写

2.8添加数据

格式:put  ‘表名’, ‘rowKey’, ‘列族 : 列‘ ,  '值'

hbase(main):024:0> put 'student',1,'info:name','xiaoming'
hbase(main):025:0> put 'student',1,'info:age',18
hbase(main):026:0> put 'student',1,'info:address','luoxi da dao zhong'

2.9查看某个rowkey的所有键值对

hbase(main):050:0> get 'student',1
COLUMN                          CELL                                                                                     
 info:address                   timestamp=1588431806148, value=luoxi da dao zhong                                        
 info:age                       timestamp=1588431758544, value=18                                                        
 info:name                      timestamp=1588431732463, value=xiaoming    

2.10统计当前表的记录数据

hbase(main):053:0> count 'student'
6 row(s) in 0.0270 seconds

=> 6

2.11获取列族的某个列

格式:get '表名','rowkey','列族:列’

hbase(main):054:0> get 'student',1,'info:name'
COLUMN                          CELL                                                                                     
 info:name                      timestamp=1588431732463, value=xiaoming                                                  
1 row(s) in 0.0050 seconds

2.12删除列族某个列

格式:delete  '表名' ,'行名' , '列族:列'

hbase(main):055:0> delete 'student',1,'info:age'
0 row(s) in 0.0390 seconds
hbase(main):056:0> get 'student',1
COLUMN                          CELL                                                                                     
 info:address                   timestamp=1588431806148, value=luoxi da dao zhong                                        
 info:name                      timestamp=1588431732463, value=xiaoming 

2.13删除整行记录

格式:deleteall '表名','rowkey'

hbase(main):057:0> deleteall 'student',1
0 row(s) in 0.0140 seconds
hbase(main):058:0> get 'student',1
COLUMN                          CELL                                                                                     
0 row(s) in 0.0040 seconds

2.14清空表

hbase(main):059:0> truncate 'student'

2.15删除表

备注:先要屏蔽该表,才能对该表进行删除

hbase(main):060:0> disable 'student'
hbase(main):060:0> drop 'student'

2.16查看所有记录

hbase(main):061:0> scan 'student'
ROW                             COLUMN+CELL                                                                              
 2                              column=info:address, timestamp=1588431942542, value=pan yu                               
 2                              column=info:age, timestamp=1588431942498, value=19                                       
 2                              column=info:name, timestamp=1588431942462, value=xiaoming                                
 3                              column=info:address, timestamp=1588431942645, value=hui jiang 

2.17扫描某个列族的数据

hbase(main):075:0> scan 'student' , {COLUMNS=>'info'}
ROW                             COLUMN+CELL                                                                              
 1                              column=info:age, timestamp=1588433531669, value=18                                       
 1                              column=info:name, timestamp=1588433531815, value=xiaodu                                  
 2                              column=info:address, timestamp=1588431942542, value=pan yu                               
 2                              column=info:age, timestamp=1588431942498, value=19                                       
 2                              column=info:name, timestamp=1588433275411, value=zhao                                    
 3                              column=info:address, timestamp=1588431942645, value=hui jiang                            
 3                              column=info:age, timestamp=1588431942621, value=20                                       
 3                              column=info:name, timestamp=1588433275465, value=huang                                   
 4                              column=info:address, timestamp=1588431942741, value=guang zhon                           
 4                              column=info:age, timestamp=1588431942717, value=21                                       
 4                              column=info:name, timestamp=1588433275511, value=qian                                    
 5                              column=info:address, timestamp=1588431942823, value=bei jing                             
 5                              column=info:age, timestamp=1588431942803, value=22                                       
 5                              column=info:name, timestamp=1588433275539, value=xun                                     
 6                              column=info:address, timestamp=1588431945004, value=luoxi                                
 6                              column=info:age, timestamp=1588431942891, value=23                                       
 6                              column=info:name, timestamp=1588433276672, value=li                                      
6 row(s) in 0.0290 seconds

2.18查看指定某个列族下某一列数据

hbase(main):076:0> scan 'student' , {COLUMNS=>'info:name'}
ROW                             COLUMN+CELL                                                                              
 1                              column=info:name, timestamp=1588433531815, value=xiaodu                                  
 2                              column=info:name, timestamp=1588433275411, value=zhao                                    
 3                              column=info:name, timestamp=1588433275465, value=huang                                   
 4                              column=info:name, timestamp=1588433275511, value=qian                                    
 5                              column=info:name, timestamp=1588433275539, value=xun                                     
 6                              column=info:name, timestamp=1588433276672, value=li                                      
6 row(s) in 0.0230 seconds

2.19查看服务器状态

hbase(main):078:0> status
1 active master, 0 backup masters, 2 servers, 0 dead, 5.0000 average load

3.hbase常用过滤器

3.1支持过滤器查询

hbase(main):084:0> show_filters
DependentColumnFilter                                                                                                    
KeyOnlyFilter                                                                                                            
ColumnCountGetFilter                                                                                                     
SingleColumnValueFilter                                                                                                  
PrefixFilter                                                                                                             
SingleColumnValueExcludeFilter                                                                                           
FirstKeyOnlyFilter                                                                                                       
ColumnRangeFilter                                                                                                        
TimestampsFilter                                                                                                         
FamilyFilter                                                                                                             
QualifierFilter                                                                                                          
ColumnPrefixFilter                                                                                                       
RowFilter                                                                                                                
MultipleColumnPrefixFilter                                                                                               
InclusiveStopFilter                                                                                                      
PageFilter                                                                                                               
ValueFilter                                                                                                              
ColumnPaginationFilter

3.2过滤器用法

行键过滤器

RowFilter:针对行键进行过滤
hbase(main):085:0> scan 'student',FILTER=>"RowFilter(>=,'binary:5')" 
说明:把student的rowkey大于等5的所有键值对过滤出来

PrefixFilter:行键前缀过滤器
hbase(main):093:0> scan 'student',FILTER=>"PrefixFilter('1')" 
说明:把前rokey是前缀是1的全部过滤出来

FirstKeyOnlyFilter:扫描全表,显示每个逻辑行的第一个键值对
hbase(main):001:0> scan 'student',FILTER=>"FirstKeyOnlyFilter()"
一个rowkey可以有多个version,同一个rowkey的同一个column也会有多个的值,只拿出key中的第一个column的第一个version
KeyOnlyFilter:只要key,不要value
hbase(main):056:0> scan 'student', FILTER=>"FirstKeyOnlyFilter() AND ValueFilter(=,'binary:xiao') AND KeyOnlyFilter()"

InclusiveStopFilter:替代ENDROW返回终止条件行
hbase(main):003:0> scan 'student', {STARTROW =>'1',FILTER =>"InclusiveStopFilter('2')"}
上面效果与下面的等同
hbase(main):004:0> scan 'student', {STARTROW =>'1',ENDROW => '3'}

列族与列过滤器

FamilyFilter:针对列族进行比较和过滤
hbase(main):008:0> scan 'student',FILTER=>"FamilyFilter(=,'substring:in')"
说明:显示列族前缀为stu开头的键值对

QualifierFilter:列标识过滤器
hbase(main):005:0> scan 'student',FILTER=>"QualifierFilter(=,'substring:name')"  
说明:只显示列名为name的记录

ColumnPrefixFilter:对列名前缀进行过滤
hbase(main):017:0> scan 'student',FILTER=>"ColumnPrefixFilter('age')"
说明:显示列名为name的记录

MultipleColumnPrefixFilter:可以指定多个前缀
hbase(main):043:0> scan 'student',FILTER=>"MultipleColumnPrefixFilter('name','age')" 
说明:显示列名前缀为name和age的记录

ColumnRangeFilter:设置范围按字典序对列名进行过滤
hbase(main):026:0> scan 'student',FILTER=>"ColumnRangeFilter('address',true,'age',true)"

ValueFilter:值过滤器
hbase(main):035:0> scan 'student', FILTER=>"ValueFilter(=,'binary:xiaoming')"
说明:查询值等于xiaoming的所有键值对
hbase(main):036:0> scan 'student',FILTER=>"ValueFilter(=,'substring:xiaoming')" 
说明:查询值包含xiaoming的所有键值对

SingleColumnValueFilter:在指定的列族和列中进行值过滤器
hbase(main):037:0> scan 'student', {COLUMN=>'info:age',FILTER=>"SingleColumnValueFilter('info','age',=,'binary:19')"}说明:查询info列族age列中值等于19的所有键值对

其他过滤器

ColumnCountGetFilter:限制每个逻辑行返回的键值对数
hbase(main):039:0> get 'student',1,FILTER=>"ColumnCountGetFilter(2)" 

PageFilter:基于行的分页过滤器,设置返回行数
hbase(main):040:0> scan 'student',FILTER=>"PageFilter(1)"

ColumnPaginationFilter:基于列的进行分页过滤器,需要设置偏移量与 返回数量
hbase(main):041:0> scan 'student',FILTER=>"ColumnPaginationFilter(2,1)"
说明:显示每行第1列之后的2个键值对

3.3复杂查询

查询值包含xiao的前5条记录
hbase(main):047:0> scan 'student', {LIMIT=>5,FILTER=>"ColumnPrefixFilter('name') AND ValueFilter(=,'substring:xiao')"}

查询列前缀是name的列,并且名字中包含xiao或者li的
hbase(main):051:0> scan 'student', FILTER=>"ColumnPrefixFilter('name') AND ( ValueFilter(=,'substring:xiao') OR ValueFilter(=,'substring:li') )"

查询名字和年龄列,且年龄小于19岁的
hbase(main):052:0> scan 'student', {FILTER=>"MultipleColumnPrefixFilter('name','age') AND SingleColumnValueFilter('info','age',<=,'binary:19')"} 

查询所有rowkey是以1开头的列
hbase(main):053:0> scan 'student', FILTER => "PrefixFilter ('1')"

从rowkey是1的开始找,找到所有前缀是1的键值对,如10,11,13......
hbase(main):069:0> scan 'student', {STARTROW=>'1', FILTER => "PrefixFilter ('1')"}

把rowkey里面包含11的所有键值对查找出来
hbase(main):093:0> scan 'student', {FILTER => RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'), SubstringComparator.new('11'))}

查询所有rowkey是有1开头且是数字结尾的键值对
hbase(main):099:0> scan 'student', {FILTER => RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'),RegexStringComparator.new('^1\d+$'))}

查找列列族info中,是na开头的列,且值是xiaoming开头的
hbase(main):096:0> scan 'student', {COLUMNS => 'info:name', FILTER => SingleColumnValueFilter.new(Bytes.toBytes('info'), Bytes.toBytes('na'), CompareFilter::CompareOp.valueOf('EQUAL'), Bytes.toBytes('xiaoming'))}

3.4hbase shell引入相关的类

hbase(main):009:0> import org.apache.hadoop.hbase.util.Bytes
hbase(main):009:0> import org.apache.hadoop.hbase.filter.SingleColumnValueFilter
hbase(main):009:0> import org.apache.hadoop.hbase.filter.BinaryComparator
hbase(main):009:0> import org.apache.hadoop.hbase.filter.CompareFilter
hbase(main):009:0> import org.apache.hadoop.hbase.filter. Filter
hbase(main):084:0> import org.apache.hadoop.hbase.filter.RowFilter
hbase(main):087:0> import org.apache.hadoop.hbase.filter.RegexStringComparator
hbase(main):091:0> import org.apache.hadoop.hbase.filter.SubstringComparator

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值