3.2 表的操作
3.2.1 创建表
create 'student','info'
说明:
- 创建一个表, 表名叫
student
, 这个表内有一个列族叫info
- 定义表的时候不需要定义列.
补充:
很多初学者都在焦急地寻找着怎样为 HBase 的表定义列。因为在传统的关系型数据库里面,建表都必须定义列,不然我的数据要放哪里?
但是你会发现 HBase 的表在新建的时候并没有地方让你定义列。这是因为 HBase 中的列全部都是灵活的,可以随便定义的。
列只有在你插入第 一条数据的时候才会生成。不过确切地说,不能叫“生成”,因为并没 有生成列定义之类的操作。你只是向 HBase 中插入了一个单元格,而这个单元格是由
表:列族:行:列
来定位的,所以是你在 TableA 中插入了一个单元格,这个单元格的列属性叫 A,才让这行数据有了一个 A 列,而别的行有没有 A 列 HBase 并不知道。只有在HBase 遍历到这行的时候它才能知道
3.2.2 插入数据
Hbase 是使用 put 命令向表中插入数据的.
put 'student','1001','info:sex','male'
put 'student','1001','info:age','20'
put 'student','1002','info:name','zhiling'
put 'student','1002','info:sex','female'
put 'student','1002','info:age','18'
以put 'student','1001','info:sex','male'
为例说明:
- 向
student
表中插入一个单元格(cell) - 这个单元格的的 rowkey 是
1001
, 也就是说它是1001
这行中的一个列 - 该单元格的列族是
info
- 该单元格的列名是
sex
- 该单元格的值是
male
3.2.3 查看表数据
1. 全表扫描
Hbase 使用scan
命令来查看表数据.
类似于传统数据库的selec
语句.
scan 'student'
2. 限制起始行和结束行的扫描
scan 'student', {STARTROW => '1002'}
scan 'student', {STARTROW => '1001', STOPROW => '1001'}
注意:
STARROW
和STOPROW
必须大写.- 显示的结果也是前闭后开的区间
3. 获取指定行或者指定列的数据
使用 get 命令来获取.
指定行
get 'student', '1001'
指定列
get 'student', '1001', 'info:age'
指定版本
前面我们学习知道, Hbase 每个列都会保存着以前的版本的数据(创建表的时候需要指定保存的版本数, 否则默认只保存最新的一个版本). 我们也可以获取到指定版本的数据.
如果不指定版本, 就是获取的最新版本的数据.
get 'student', '1001', {COLUMN => 'info:age', VERSIONS => 2}
4. 统计表数据行
count 'student'
3.2.4 更新指定列的数据
更新数据和添加数据的操作是一样的, 都是使用的 put 命令.
如果指定行的列不存在就是添加, 如果存在就是更新值. 但是旧值还存在, 只是形成了不同的版本.
put 'student','1002','info:name','lisi'
put 'student','1002','info:name','fengjie'
3.2.5 删除数据
1. 删除某行所有数据
deleteall 'student', '1001'
2. 删除某列数据
delete 'student','1002','info:sex'
3.2.6 清空表数据
truncate 'student'
说明:
- 清空表的操作顺序为先 disable,然后再 truncate。
3.2.7 删除表
需要先把表 disable, 然后再 drop
disable 'student'
drop 'student'
3.2.8 查看表结构
describe 'student'
3.2.9 变更表结构
使用 alert 命令来变更表结构
比如下面的命令: 设置表 student 中ifno
列族每列可以保存 3 个版本的数据
alter 'student', {NAME => 'info', VERSIONS => 3}