1.数据模型
术语 | 解释 |
Name Space | 命名空间,类似于关系型数据库的 database 概念,每个命名空间下有多个表。HBase 两个自带的命名空间,分别是 hbase 和 default,hbase 中存放的是 HBase 内置的表,default表是用户默认使用的命名空间。 |
Table | 类似于关系型数据库的表概念。不同的是,HBase 定义表时只需要声明列族即可,不需要声明具体的列。因为数据存储时稀疏的,所有往 HBase 写入数据时,字段可以动态、按需指定。因此,和关系型数据库相比,HBase 能够轻松应对字段变更的场景。 |
Row | HBase 表中的每行数据都由一个 RowKey 和多个 Column(列)组成,数据是按照 RowKey的字典顺序存储的,并且查询数据时只能根据 RowKey 进行检索,所以 RowKey 的设计十分重要。 |
Column | HBase 中的每个列都由 Column Family(列族)和 Column Qualifier(列限定符)进行限定,例如 info:name,info:age。建表时,只需指明列族,而列限定符无需预先定义。 |
Time Stamp | 用于标识数据的不同版本(version),每条数据写入时,系统会自动为其加上该字段,其值为写入 HBase 的时间。 |
Cell | 由{rowkey, column Family:column Qualifier, timestamp} 唯一确定的单元。cell 中的数据全部是字节码形式存贮。 |
2.HBase基本操作
2.1namespace
2.1.1创建命名空间
使用 help 语法查看命令如何使用
help 'create_namespace'
创建 命名空间语法 如下:
举例:
create_namesapce 'bigdata'
2.1.2查看所有命名空间
list_namespace
2.2DDL语句
2.2.1创建表
创建表有两种情况:
1.多个列族,且有列族属性
2.单个列族,且无列族属性
3.多个列族,且无列族属性
情况1:创建表格 student,两个列族。info 列族数据维护的版本数为 5 个
create 'bigdata:student',{NAME => 'info',VERSIONS => 5},{NAME => 'msg'}
情况2:创建表格 studen1,1个列族。info默认版本数为 1
create 'bigdata:student1','info'
情况3:创建表格 studen2,1个列族。info,msg默认版本数为 1
create 'bigdata:student2','info','msg'
*****默认版本数与指定版本数区别:
2.2.2查看表
查看所有表
list
查看单表详情
describe 'bigdata:student'
2.2.3修改表
(1)增加列族和修改信息都使用覆盖的方法
alter 'bigdata:student1', {NAME => 'msg', VERSIONS => 3}
之前 bigdata命名空间下的 student1 只有一个info列族,上面新增列族之后如图:
(2)删除列族
#第一种方式alter 'bigdata:student1', NAME => 'msg', METHOD => 'delete'#第二种方式alter 'bigdata:student1', 'delete' => 'msg'
2.2.4删除表
#方式一:
disable 'bigdata:student2'#方式二:
drop 'bigdata:student2'
2.3DML语句
2.3.1写入数据
hbase创建表时,不需要创建列,直接写入即可。
如果重复写入相同 rowKey,相同列的数据,会写入多个版本进行覆盖。
put 'bigdata:student','1001','info:name','zhangsan'put 'bigdata:student','1001','info:name','lisi'put 'bigdata:student','1001','info:age','22'
2.3.2读取数据
读取数据有2种方式:get 、scan
get 最大范围是一行数据,也可以进行列的过滤,读取数据的结果为多行 cell 。
get 'bigdata:student','1001'get 'bigdata:student','1001' , {COLUMN => 'info:name'}
读取版本数,查出student这张表 的name 字段两个版本,2.3.1中 put写入数据 第一次1001 name 为张三,第二次写入1001 name 为lisi
get 'bigdata:student','1001' , {COLUMN => 'info:name', VERSIONS => 2}
scan可以扫描数据,能读取多行数据,使用startRow 和 stopRow 来控制读取的数据,默认范围左闭右开。
scan 'bigdata:student',{STARTROW => '1001',STOPROW => '1002'}
2.3.3删除数据
删除数据的方法有两个:delete 和 deleteall 。
delete 表示删除一个版本的数据,即为 1 个 cell ,不填写版本默认删除最新的一个版本
delete 'bigdata:student','1001','info:name'
deleteall 表示删除所有版本的数据,即为当前行当前列的多个 cell。
deleteall 'bigdata:student','1001','info:name'
实际开发中使用 shell 的机会不多