目录

1.进入命令行

2.表的操作

2.1创建表

2.2修改表

2.3删除表

3.数据的操作

3.1插入数据

3.2修改数据

3.3删除数据

3.4查询数据


上一篇文章教会了大家在最小的环境中搭建HBase,能快速体验HBase数据库。今天教会大家所有的增删改查命令,期待通过数据的操纵更好的体验列式存储数据库的魅力。

1.进入命令行

在安装目录的bin目录下输入下面的命令进入命令行:

hbase shell

成功进入shell环境会显示下面的信息:

HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
Version 2.4.5, r20e7ba45b0c3affdc0c06b1a0e5cbddd1b2d8d18, Mon Jun  7 15:31:55 PDT 2021
Took 0.0009 seconds

这个里面包含了三个信息:

help:使用该命令可以获得帮助,知道还有哪些其他的命令

exit:使用该命令可以退出shell环境

操作说明:给了一个网页版的操作指导

2.表的操作

2.1创建表

创建表必须连带一起创建列簇

create 'student', 'baseinfo'

查询已创建的表,使用命令:list

hbase:010:0> list
TABLE                                                                                                                                                                                                            
student                                                                                                                                                                                                          
1 row(s)
Took 5.1282 seconds

2.2修改表

给表增加列簇,例如增加scoreinfo

hbase:011:0> alter 'student','scoreinfo'
Updating all regions with the new schema...
1/1 regions updated.
Done.
Took 6.7114 seconds

查看列簇是否添加成功,使用命令:describe

hbase:013:0> describe 'student'
Table student is ENABLED                                                                                                                                                                                         
student                                                                                                                                                                                                          
COLUMN FAMILIES DESCRIPTION                                                                                                                                                                                      
{NAME => 'baseinfo', BLOOMFILTER => 'ROW', IN_MEMORY => 'false', VERSIONS => '1', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', COMPRESSION => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', BLO
CKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}                                                                                                                                               

{NAME => 'scoreinfo', BLOOMFILTER => 'ROW', IN_MEMORY => 'false', VERSIONS => '1', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', COMPRESSION => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', BL
OCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}                                                                                                                                              

2 row(s)
Quota is disabled
Took 0.0739 seconds

删除表的列簇

hbase:014:0> alter 'student','delete'=>'scoreinfo'
Updating all regions with the new schema...
1/1 regions updated.
Done.
Took 6.6054 seconds

2.3删除表

在删除表前,先新增一个表

hbase:016:0> create 'table1','cf1'
Created table table1
Took 8.1231 seconds                                                                                                                                                                                              
=> Hbase::Table - table1
hbase:017:0> list
TABLE                                                                                                                                                                                                            
student                                                                                                                                                                                                          
table1                                                                                                                                                                                                           
2 row(s)
Took 0.0020 seconds

table1已经创建成功,然后使用drop命令删除表

hbase:018:0> drop 'table1'

ERROR: Table table1 is enabled. Disable it first.

For usage try 'help "drop"'

Took 0.0607 seconds

这个功能真好,可以防止误删表,其实如果你真不想用这个表,将其disable掉也可以。我们还是按照它的提示操作看能否删成功。

hbase:019:0> disable 'table1'
Took 0.3652 seconds                                                                                                                                                                                              
hbase:020:0> drop 'table1'
Took 0.1169 seconds                                                                                                                                                                                              
hbase:021:0> list
TABLE                                                                                                                                                                                                            
student                                                                                                                                                                                                          
1 row(s)
Took 0.0015 seconds                                                                                                                                                                                              
=> ["student"]

针对删除成功了,太棒了。此外,HBase也提供了类似关系型数据库一样的清空表数据的命令。

hbase:006:0> truncate 'table1'
Truncating 'table1' table (it may take a while):
Disabling table...
Truncating table...
Took 0.9951 seconds

3.数据的操作

3.1插入数据

每一次只能插入一个表的一个列簇下的某一列的这个单元格的数据。使用put命令插入数据:

hbase:007:0> put 'student','003','baseinfo:name','lucy' 
Took 5.0636 seconds

put命令后面的每个参数都用逗号隔开,第一个为表名,第二个为rowkey,第三个为列簇名+列名,第四个为值。这里列簇名必须存在,列可以动态新增。

3.2修改数据

修改数据仍然是使用put命令,将最新的数据写入即可。还可以给列簇设置版本,比如设置最多有5个版本,如下:

hbase:006:0> alter 'student',NAME => 'baseinfo',VERSIONS=>5
Updating all regions with the new schema...
1/1 regions updated.
Done.
Took 6.6370 seconds

这个时候只能查询某个表的某个列,以及指定返回的版本数量,这样就会返回所有版本的数据,例如:

hbase:005:0> get 'student','003',{COLUMN=>'baseinfo:name',VERSIONS=>5}
COLUMN                                                CELL                                                                                                                                                       
 baseinfo:name                                        timestamp=2021-08-07T10:38:00.792, value=lucy one                                                                                                          
 baseinfo:name                                        timestamp=2021-08-06T17:01:24.384, value=lucy gaga                                                                                                         
 baseinfo:name                                        timestamp=2021-08-06T13:45:06.784, value=lucy                                                                                                              
1 row(s)
Took 0.0502 seconds

3.3删除数据

HBase支持按照行删除这一行所有列的数据,例如:

hbase:007:0> deleteall 'student','003'
Took 0.0644 seconds

另外还能只删除一行中的某列的数据,即一个单元格的数据:

hbase:009:0> delete 'student','002','baseinfo:age'
Took 0.0620 seconds

3.4查询数据

获取一行的数据

hbase:011:0> get 'student','002'
COLUMN                                                CELL                                                                                                                                                       
 baseinfo:gender                                      timestamp=2021-08-06T10:07:34.365, value=girl                                                                                                              
 baseinfo:name                                        timestamp=2021-08-06T10:07:11.354, value=lily                                                                                                              
1 row(s)
Took 0.0734 seconds

获取某一行的某一列的数据,即一个单元格的数据

hbase:012:0> get 'student','002','baseinfo:gender'
COLUMN                                                CELL                                                                                                                                                       
 baseinfo:gender                                      timestamp=2021-08-06T10:07:34.365, value=girl                                                                                                              
1 row(s)
Took 0.0634 seconds

获取某几行的数据

hbase:018:0> scan 'student',{STARTROW=>'002',ENDROW=>'003'}
ROW                                                   COLUMN+CELL                                                                                                                                                
 002                                                  column=baseinfo:gender, timestamp=2021-08-06T10:07:34.365, value=girl                                                                                      
 002                                                  column=baseinfo:name, timestamp=2021-08-06T10:07:11.354, value=lily                                                                                        
1 row(s)
Took 0.0024 seconds

获取某几行指定列的数据

hbase:006:0> scan 'student',{COLUMN=>['baseinfo:name','baseinfo:age'],STARTROW=>'001',ENDROW=>'003'}
ROW                                                   COLUMN+CELL                                                                                                                                                
 001                                                  column=baseinfo:age, timestamp=2021-08-05T16:45:57.958, value=18                                                                                           
 001                                                  column=baseinfo:name, timestamp=2021-08-05T16:18:09.651, value=jim                                                                                         
 002                                                  column=baseinfo:name, timestamp=2021-08-06T10:07:11.354, value=lily                                                                                        
2 row(s)
Took 5.0630 seconds

今天从表级操作和行级操作两个层面讲了HBase如何创建表、修改表以及对表中的数据进行增删改查。由于HBase的存储结构是列式存储,和关系型数据库的结构差异很大,因此需要大家去理解为什么表要分列簇,列簇里面又按列进行存储。在查询的时候我们怎么样一步获取所有行的数据,又怎么样获取某一列的所有行的数据。上面的语法讲解应该是比较详细的。简单来说,大家可以把HBase的表看成是一张Excel表格,我们可以最小力度操作到每个单元格。欢迎大家有什么问题在文后提出来,我会第一时间答复。