HBase数据表的创建、更改和删除(附带实例)
HBase 使用表来组织和存储数据,在进行表操作前需要先创建表。
与关系数据库不同, HBase 数据表没有对应的数据库,而是位于相应的命名空间中。HBase 在创建表时需指定列族的数量和属性。下面介绍表的基本操作。
具体代码如下:
2) 创建 Student 表,指定列族并设置参数,具体代码如下:
3) 查看 Student 表是否存在,具体代码如下:
4) 查看表的结构信息可以使用 describe 命令,也可以使用该命令的缩写 desc,具体如下:
1) 更改列族的参数,将 Grades 列族的 VERSIONS 参数值改为 3,具体代码如下:
2) 给 Student 表增加一个列族 Hobby,具体代码如下:
3) 删除 Hobby 列族,具体代码如下:
常用的 HBase Shell 命令如下表所示:
与关系数据库不同, HBase 数据表没有对应的数据库,而是位于相应的命名空间中。HBase 在创建表时需指定列族的数量和属性。下面介绍表的基本操作。
HBase表的创建
1) 创建表,以下表展示的学生信息为例:
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 表示指定的列族,这里需要注意以下几点:
- HBase Shell 中所有的字符串参数需使用单引号,且字符串名区分大小写;
- 表名和列族之间使用逗号隔开,末尾没有分号。
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 表示参数名,无须使用单引号,其中:
- 参数 NAME 表示列族的名字;
- VRESIONS 表示单元格可以存储版本数;
- BLOCKCACHE 为 true 表示读取数据时允许缓存。
=> 符号表示赋值操作。
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 命令如下表所示:
命令 | 描述 |
---|---|
create | 创建一个表 |
alter | 更改表 |
describe | 查看表信息 |
list | 列出所有的表 |
disable/enable | 禁用/解除禁用表 |
disable_all | 禁用所有的表 |
is_disabled | 表是否被禁用 |
drop | 删除表 |
truncate | 清空表数据 |