目录
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表格,我们可以最小力度操作到每个单元格。欢迎大家有什么问题在文后提出来,我会第一时间答复。