第五章 HBase分布式数据库
5.3 HBase的基本操作
5.3.1 HBase的Shell操作
HBase Shell提供大量操作HBase的命令,通过Shell命令很方便地操作HBase数据库,如创建、删除及修改表、向表中添加数据、列出表中的相关信息等操作。当使用Shell命令行操作HBase时,需要进入HBase Shell交互界面,执行“bin/hbase shell”命令进入到目录/hbase-1.2.1的界面。
进入HBase Shell交互界面后,可以通过一系列Shell命令操作HBase, 接下来,通过一张表列举一些操作HBase表常见的Shell命令,具体如表所示。
表5-1 常见的Shell命令
命令名称 | 相关说明 |
---|---|
create | 创建表 |
put | 插入或更新数据 |
scan | 扫描表并返回表的所有数据 |
describe | 查看表的结构 |
get | 获取指定行或列的数据 |
count | 统计表中数据的行数 |
delete | 删除指定行或者列的数据 |
deleteall | 删除整个行或列的数据 |
truncate | 删除整个表中的数据,但是结构还在 |
drop | 删除整个表,数据和结构都删除(慎用) |
关于HBase中常见的Shell操作的讲解具体如下:
1.创建表
通过create创建表,具体语法如下:
create 'table name', ' column family'
在上述语法中,“table name"为表名,创建表必须指定;“column family"为列族名,创建表也必须指定。
例如,创建一个名称为student、 列族名为info的HBase表,命令如下:
执行"list"命令,查看数据库中的数据表,命令如下:
在上述代码中,出现了student数据表,说明创建表成功。
2.插入操作
通过使用put插入或者更新表中的数据,具体语法如下:
put 'table name', 'row1', 'column family: column name', 'value'
在上述语法中,“row1 ”为行键(即Row Key) ;“column family: column name’为列族和列名的值。
例如,向student表中插入五条数据,命令如下:
hbase(main):009:0> put 'student','1001','info:sex','male'
0 row(s) in 0.5600 seconds
hbase(main):010:0> put 'student','1001','info:age','18'
0 row(s) in 0.0150 seconds
hbase(main):011:0> put 'student','1002','info:name','Janan'
0 row(s) in 0.0320 seconds
hbase(main):012:0> put 'student','1002','info:sex','female'
0 row(s) in 0.0360 seconds
hbase(main):013:0> put 'student','1002','info:age','20'
0 row(s) in 0.0240 seconds
3.扫描操作
通过scan扫描表中的数据,具体语法如下:
scan ‘table name’
例如,扫描student表的所有数据,如下:
4.查看操
通过describe查看表结构,具体语法如下:
describe tabfe name
查看student表的表结构,命令如下:
上述代码中,通过describe输出了 student表的结构,表结构包含很多字段,具体介绍如下:
●NAME:表示列族名。
●BLOOMFILTER: 表示为列族级别的类型(读者只作了解即可)。
●VERIONS: 表示版本数,默认值为1。
●IN_ MEMORY:设置是否存入内存。
●KEEP_ DELETED_ CELLS:设置被删除的数据,在基于时间的历史数据查询中是否依然可见。
●DATA_ .BLOCK_ ENCODING: 表示数据块的算法(读者只作了解即可)。
TTL:表示版本存活的时间。
●COMPRESSION: 表示设置压缩算法。
●MIN_ _VERSIONS:表示最小版本数。
●BLOCKCACHE: 表示是否设置读缓存。
REPLICATION:表示设置备份。
5.更新操作
通过使用put更新student表指定字段的数据,具体语法如下:
put 'table name',' row ' ,' column family :column name',' new value
6.获取指定字段的操作
通过使用get获取指定行或指定列族:列的数据,具体语法如下:
//查看指定行的数据
get ' table name','row1 '
获取student表中行键为1001的数据,命令如下:
查看指定行,指定列的数据, 获取行键为1001,的age列的数据,命令如下:
7.创建表时定义列族的版本值
在创建表时定义列族的版本值(可以存储历史版本的个数)。
接下来插入数据,查看历史版本的数据。
通过scan扫描对表指定列进行查询,语法如下:
Scan ‘tablename’,{
COLUMN=>’columnfamliy:columnname’,VERSONS=>’value’}
扫描表中的列族info中的name列:
8.alter修改表
通过alter可以在表中增加列族。语法如下:
alter ‘tablename’NAME=>?,VERSIONS=?
演示:
插入数据,并查看结果:
alter 可以删除表中的数据,但alter只能以列族为单位删除,语法如下:
alter '表名’ , NAME => '列族' , METHOD => 'delete'
或者
alter '表名' , 'delete' => '列族'
删除表student1中的列族info
hbase(main):009:0> alter 'student1' , 'delete' => 'info'
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.7580 seconds
9.统计操作
通过使用count统计表中数据的行数,具体语法如下:
count 'table name'
统计student表中数据的行数,命令如下:
10.删除操作
通过使用delete删除表中“指定字段”的数据,具体语法如下:
deletg 'table name', ' row', ' column name', ' timestamp
删除student表中行键为1002、列名为info:sex的一条数据,命令如下:
上述命令执行成功后,使用scan获取数据表中的数据,命令如下:
从上述代码可以看出,行键为1002、列名为info:sex的数据已经被删除。
如果要删除表中一-行所有的数据,可以使用deleteall命令, 具体语法如下: