1、HBase定义

由谷歌的BigTable发展而来,是NoSQL数据库。

2、HBase逻辑结构

数据存储在一张表中,有行有列,但底层无力存储结构(K-V)看,HBase更像一个multi-dimensional map

hbase 列过滤 命令 hbase列名_大数据


hbase 列过滤 命令 hbase列名_big data_02


1)Name Space

命名空间,每个命名空间下有多个表,Hbase有两个自带的命名空间:hbase、default,

hbase存放的是HBase内置的表,default表是用户默认使用的命名空间

2)Region
类似关系型数据库的表的概念。HBase定义表时只需要申明列族即可,无需申明具体的列,所以写入数据时,字段可以动态、按需指定。

3)Row
每行数据都由一个RowKey和多个列组成,数据按照RowKey的字典顺序存储,且查询数据时只能根据RowKey进行检索。

4)Column
每个列由ColumnFamily(列族)和ColumnQualifier(列限定符)进行限定,建表时只需指名列族,列限定符无需预先定义。

5)Time Stamp
用于标识数据的不同版本(version),如果不指定时间戳,系统会自动为其加上该字段,其值为写入HBase的时间。

6)Cell
由{rowkey,column family:column qualifier,time stamp} 唯一确定的单元,cell中的数据没有类型,都是字节码形式存储。

hbase 列过滤 命令 hbase列名_hbase_03

操作数据:DML;操作表:DDL;

3、HBase Shell 操作

1)基本操作

1、 进入Hbase客户端命令行
hbase shell
quit 退出

2、 查看帮助命令
help ‘命令名’

3、 查看数据库中有哪些表
list

2)表的操作DDL

1、创建表

create ‘student’ , ‘info’ //前者为表名,后者为列族,列族可多个、至少一个
 create ‘表名’, {NAME => ‘列族名1’, VERSIONS => 版本号, TTL => 过期时间, BLOCKCACHE => true}

2、描述表

describe ‘student’
COLUMN FAMILIES DESCRIPTION
 {NAME => ‘info1’, DATA_BLOCK_ENCODING => ‘NONE’, BLOOMFILTER => ‘ROW’, REPLICATION_SCOPE => ‘0’, VERSIONS => ‘1’, COMPRESSION => ‘NONE’, MIN_VERSIONS => ‘0’, TTL => ‘FOREVER’, KE
 EP_DELETED_CELLS => ‘FALSE’, BLOCKSIZE => ‘65536’, IN_MEMORY => ‘false’, BLOCKCACHE => ‘true’}
 {NAME => ‘info2’, DATA_BLOCK_ENCODING => ‘NONE’, BLOOMFILTER => ‘ROW’, REPLICATION_SCOPE => ‘0’, VERSIONS => ‘1’, COMPRESSION => ‘NONE’, MIN_VERSIONS => ‘0’, TTL => ‘FOREVER’, KE
 EP_DELETED_CELLS => ‘FALSE’, BLOCKSIZE => ‘65536’, IN_MEMORY => ‘false’, BLOCKCACHE => ‘true’}
 2 row(s) in 0.0790 seconds

3、改变表

alter ‘student’ ,{NAME=>‘info’, VERSIONS=>3} //VERSIONS为3说明将info列族的数据存放3个版本
 alter ‘student’ ,‘info2’ //增加列族
 alter ‘student’ ,{NAME=>‘info2’, METHOD=>‘delete’}

4、删除表

disable ‘student’ 先令表下线,上线为enable
 drop ‘student’ 再删除表,不然报错删不掉

5、展示命名空间

list_namespace

6、创建命名空间

create_namespace ‘bigdata’

7、在别打命名空间创建表

create “bigdata:student”,“info”


在表的前面加上 命名空间名:,不加为默认default命名空间

8、删除命名空间

drop_namespace ‘bigdata’


注意:命名空间内要没有表了才能删

9、判断表是否存在

exists ‘user’

3)数据的操作DML

1、插入数据

put ‘student’, ‘1001’, ‘info:name’, ‘zhangsan’

student:表名,1001:row key,info:name:族列:列名,zhangsan:要插入的值。

2、查询数据

scan ‘student’ //全表扫描,表中数据按照keyrow的字典序升序排列
 scan ‘student’, {STARTROW=>‘1001’, STOPROW=>‘1003’} //指定rowkey的扫描,[1001,1003),也可只写一边
 get ‘student’, ‘1001’ //返回row key = 1001的所有列族:列的信息,get至少要2个参数
 get ‘student’, ''1001, ‘info1’ //返回1001的info1的所有值
 get ‘student’, ‘1001’, ‘info1:name’ //返回1001的info1:name的值count ‘student’ //查询记录数

3、更改数据

put ‘student’, ‘1001’, ‘info:name’, ‘zhangsan2’


注意:此时原来的值zhangsan还未被删除,可用
scan ‘student’, {RAW=>true, VERSIONS=>10} 来查看10个版本以内的所有值,但正常返回时zhangsan不会返回给用户。
也可指定时间戳,会返回用于时间戳最大的那条信息。

4、删除数据

delete ‘student’, ‘1001’, ‘info1:name’ //至少3个参数
 delete之后,时间戳最大的type=DeleteColumn, 不会被返回,旧的时间戳到值也不会被返回。deleteall ‘student’, ‘1001’ //删除整一行
truncate ‘student’ //清空表