首页 > 编程笔记 > MySQL笔记 阅读:4

HBase数据表的创建、更改和删除(附带实例)

HBase 使用表来组织和存储数据,在进行表操作前需要先创建表。

与关系数据库不同, HBase 数据表没有对应的数据库,而是位于相应的命名空间中。HBase 在创建表时需指定列族的数量和属性。下面介绍表的基本操作。

HBase表的创建

1) 创建表,以下表展示的学生信息为例:

表:HBase的数据模型
具体代码如下:
hbase(main):007:0> create 'Student','StuInfo','Grades'
0 row(s) in 1.3170 seconds
=> Hbase::Table - Student
# 或者在命名空间ns1下创建表Student
hbase(main):008:0> create 'ns1:Student','StuInfo','Grades'
0 row(s) in 1.2230 seconds
=> Hbase::Table - ns1:Student
hbase(main):009:0> list_namespace_tables 'ns1'
TABLE
Student
1 row(s) in 0.0090 seconds
在上述代码中,第一个字符串 Student 表示表名,其后的 StuInfo、Grades 表示指定的列族,这里需要注意以下几点:
2) 创建 Student 表,指定列族并设置参数,具体代码如下:
hbase(main):018:0> create 'Student',{NAME => 'StuInfo',VERSIONS => 3},{NAME => 'Grades',
# BLOCKCACHE => true}
0 row(s) in 1.2250 seconds
=> Hbase::Table – Student
在以上代码中,NAME、VERSIONS、BLOCKCACHE 表示参数名,无须使用单引号,其中:

=> 符号表示赋值操作。


3) 查看 Student 表是否存在,具体代码如下:
hbase(main):021:0* exists 'Student'
Table Student does exist
0 row(s) in 0.0040 seconds
# 查看已有的表,使用list
hbase(main):022:0> list
TABLE
Student
my1:student
ns1:Student
3 row(s) in 0.0150 seconds
=> ["Student", "my1:student", "ns1:Student"]
# 查看命名空间ns1下的所有表
hbase(main):023:0> list_namespace_tables 'ns1'
TABLE
Student
1 row(s) in 0.0030 seconds

4) 查看表的结构信息可以使用 describe 命令,也可以使用该命令的缩写 desc,具体如下:
# 查看表的结构信息
hbase(main):023:0> describe 'student'
Table Student is ENABLED
Student COLUMN FAMILIES DESCRIPTION
{NAME => 'Grades',BLOOMFILTER => 'ROW',VERSIONS => '1',IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE',DATA_BLOCK_ENCODING =>'NONE',TTL => 'FOREVER', COMPRESSION =>'NONE',MIN_VERSIONS => '0',BLOCKCACHE => 'true',BLOCKSIZE =>'65536',REPLICATION_SCOPE =>'0'}
{NAME => 'StuInfo',BLOOMFILTER => 'ROW',VERSIONS => '3',IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE',DATA_BLOCK_ENCODING =>'NONE',TTL => 'FOREVER', COMPRESSION => 'NONE',MIN_VERSIONS => '0',BLOCKCACHE => 'true',BLOCKSIZE =>'65536',REPLICATION_sCOPE => '0'}
2 row (s)in 0.1440 seconds

HBase表的更改

更改表结构可以使用 alter 命令,例如增加列族、删除列族、修改列族的参数等。

1) 更改列族的参数,将 Grades 列族的 VERSIONS 参数值改为 3,具体代码如下:
hbase(main):024:0> alter 'Student',{NAME => 'Grades',VERSIONS => 3}
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.1590 seconds
需要注意的是,当修改已经存储数据的列族参数时,HBase 会对所有数据进行更改。当数据量很大时,更改速度会很慢。

2) 给 Student 表增加一个列族 Hobby,具体代码如下:
hbase(main):026:0> alter 'Student','Hobby'
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 1.8690 seconds
hbase(main):027:0> describe 'Student'
Table Student is ENABLED
Student
COLUMN FAMILIES DESCRIPTION
{NAME => 'Grades', BLOOMFILTER => 'ROW', VERSIONS => '3', IN_MEMORY => 'false',KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION=> 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
{NAME => 'Hobby', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION=> 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
{NAME => 'StuInfo', BLOOMFILTER => 'ROW', VERSIONS => '3', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
3 row(s) in 0.0110 seconds

3) 删除 Hobby 列族,具体代码如下:
hbase(main):028:0> alter 'Student',{METHOD => 'delete',NAME => 'Hobby'}
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 1.8760 seconds
hbase(main):029:0> describe 'Student'
Table Student is ENABLED
Student
COLUMN FAMILIES DESCRIPTION
{NAME => 'Grades', BLOOMFILTER => 'ROW', VERSIONS => '3', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => ' 65536', REPLICATION_SCOPE => '0'}
{NAME => 'StuInfo', BLOOMFILTER => 'ROW', VERSIONS => '3', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
2 row(s) in 0.0130 seconds
# 也可以使用以下命令进行删除
hbase(main):030:0> alter 'Student','delete' => 'Hobby'
注意,若表中只有一个列族则无法删除,因为 HBase 数据表至少要有一个列族。

HBase表的删除

删除表之前需要先禁用表,具体操作如下:
# 禁用表
hbase(main):036:0> disable 'Student'
0 row(s) in 2.3720 seconds
# 查看是否禁用
hbase(main):037:0> is_disabled 'Student'
true
0 row(s) in 0.0050 seconds
# 删除表
hbase(main):038:0> drop 'Student'
0 row(s) in 1.3370 seconds
如果只想删除表中的数据,则可以使用 truncate 命令。该命令删除表中数据的操作相当于先禁用表,再删除表,最后重新创建该表结构。

常用的 HBase Shell 命令如下表所示:

表:HBase Shell 的常用命令
命令 描述
create 创建一个表
alter 更改表
describe 查看表信息
list 列出所有的表
disable/enable 禁用/解除禁用表
disable_all 禁用所有的表
is_disabled 表是否被禁用
drop 删除表
truncate 清空表数据

相关文章