HBase的使用
1、自带了shell命令行
$ bin/hbase shell
2、输入help获取帮助信息
3、shell命令行的删除,需要按住ctrl+删除键才可以删除
4、list列出当前数据库中的表

5、list_namespace列出当前数据库中的所有namespace

 

 

HBase的DDL操作
1、创建namespace
-》查看帮助信息,找到创建的语法格式:help 'create_namespace',注意要加上引号
create_namespace 'nstest'
2、描述查看namespace的结构
describe_namespace 'nstest'
3、删除namespace
drop_namespace 'nstest2'

 

 

 

4、创建表
示例:

create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}
 -》ns1指的就是namespace
 -》t1代表table_name
 -》ns1:t1这样的格式就是唯一确定了一张表
 -》在hbase中=>符号表示等于
 -》f指的是列簇
 -》VERSIONS => 5代表同时能够存储的版本数
 -》建表时要指定一个列簇
 -》可以指定多个列簇,一个大括号中只能指定一个NAME(变量)
 -》一个列簇就是一个大括号


建表:

create 'stu_test','f1'
 create 't1', 'f1', 'f2', 'f3'
 create 'nstest:tb1','info'


在建表的时候可以指定在某个namespace下,比如:ns1:t1,没有指定就是在默认的数据库下面创建


/hbase/data 该目录下存放 namespace namespace下有相对应的表

 

 

 

描述表结构
desc 't1'


删除表:


在hbase中表有启用和禁用的状态区分,在删除和修改前需要先禁用,如果是修改那么完成后需要再启用


禁用:
disable 't1'


删除:
drop 't1'


禁用
disable, disable_all
启用
enable, enable_all


六、HBase的DML操作
1、添加数据
示例:

put 'ns1:t1', 'r1', 'c1', 'value'
 -》r代表rowkey
 -》c代表列+列簇
 -》value代表具体插入的值




插入值:必须唯一确定到一个值

put 'nstest:tb1','20170521_10001','info:name','leo'
 put 'nstest:tb1','20170521_10001','info:age','18'
 put 'nstest:tb1','20170521_10001','info:sex','male'
 put 'nstest:tb1','20170521_10002','info:name','jack'
 put 'nstest:tb1','20170521_10003','info:name','tom'




2、查询数据
示例:

get 'ns1:t1', 'r1'


 get 'nstest:tb1','20170521_10001'




一个rowkey可能有多个列簇,可以指定列簇进行查询

get 'nstest:tb1','20170521_10001','info'


指定某一列查询

get 'nstest:tb1','20170521_10001','info:name'




scan:表示全表扫描  -》类似select * 
 scan 'table_name'
 scan 'nstest:tb1'




STARTROW代表开始的行号


scan 'ns1:t1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}


 scan 'nstest:tb1', {STARTROW => '20170521_10002'}



-》大括号中的所有变量都必须是大写


scan 'nstest:tb1', {STARTROW => '20170521_10001',STOPROW => '20170521_10003'}




STARTROW:包含头部的列簇到结尾
STOPROW:包头不包尾


3、删除 

deleteall直接删除列簇
 deleteall 'test:toltable','20170521_10003'
 delete 'nstest:tb1','20170521_10001','info:name'



put 'nstest:tb1','20170521_10001','info:age','20'-------修改

 

 

 

4、创建一张表

创建user表,包含info、data两个列族

hbase(main):010:0> create 'user', 'info', 'data'

或者

hbase(main):010:0> create 'user', {NAME => 'info', VERSIONS => '3'},{NAME => 'data'}

 

5、添加数据操作

向user表中插入信息,row key为rk0001,列族info中添加name列标示符,值为zhangsan

hbase(main):011:0> put 'user', 'rk0001', 'info:name', 'zhangsan'

向user表中插入信息,row key为rk0001,列族info中添加gender列标示符,值为female

hbase(main):012:0> put 'user', 'rk0001', 'info:gender', 'female'

向user表中插入信息,row key为rk0001,列族info中添加age列标示符,值为20

hbase(main):013:0> put 'user', 'rk0001', 'info:age', 20

 

向user表中插入信息,row key为rk0001,列族data中添加pic列标示符,值为picture

hbase(main):014:0> put 'user', 'rk0001', 'data:pic', 'picture'

 

6、查询数据操作

1、通过rowkey进行查询

获取user表中row key为rk0001的所有信息

hbase(main):015:0> get 'user', 'rk0001'

 

2、查看rowkey下面的某个列族的信息

获取user表中row key为rk0001,info列族的所有信息

hbase(main):016:0> get 'user', 'rk0001', 'info'

 

 

3、查看rowkey指定列族指定字段的值

获取user表中row key为rk0001,info列族的name、age列标示符的信息

hbase(main):017:0> get 'user', 'rk0001', 'info:name', 'info:age'

 

4、查看rowkey指定多个列族的信息

获取user表中row key为rk0001,info、data列族的信息

hbase(main):018:0> get 'user', 'rk0001', 'info', 'data'

或者你也可以这样写

hbase(main):019:0> get 'user', 'rk0001', {COLUMN => ['info', 'data']}

或者你也可以这样写,也行

hbase(main):020:0> get 'user', 'rk0001', {COLUMN => ['info:name', 'data:pic']}

4、指定rowkey与列值查询

获取user表中row key为rk0001,cell的值为zhangsan的信息

hbase(main):030:0> get 'user', 'rk0001', {FILTER => "ValueFilter(=, 'binary:zhangsan')"}

5、指定rowkey与值模糊查询

获取user表中row key为rk0001,列标示符中含有a的信息

hbase(main):031:0> get 'user', 'rk0001', {FILTER => "(QualifierFilter(=,'substring:a'))"}

继续插入一批数据

hbase(main):032:0> put 'user', 'rk0002', 'info:name', 'fanbingbing'
hbase(main):033:0> put 'user', 'rk0002', 'info:gender', 'female'
hbase(main):034:0> put 'user', 'rk0002', 'info:nationality', '中国'
hbase(main):035:0> get 'user', 'rk0002', {FILTER => "ValueFilter(=, 'binary:中国')"}

6、查询所有数据

 

查询user表中的所有信息

scan 'user'

 

7、列族查询

 

查询user表中列族为info的信息

scan 'user', {COLUMNS => 'info'}
scan 'user', {COLUMNS => 'info', RAW => true, VERSIONS => 5}
scan 'user', {COLUMNS => 'info', RAW => true, VERSIONS => 3}

 

8、多列查询

查询user表中列族为info和data的信息

scan 'user', {COLUMNS => ['info', 'data']}
scan 'user', {COLUMNS => ['info:name', 'data:pic']}

9、指定列族与某个列名查询

查询user表中列族为info、列标示符为name的信息

scan 'user', {COLUMNS => 'info:name'}

10、指定列族与列名以及限定版本查询

查询user表中列族为info、列标示符为name的信息,并且版本最新的5个

scan 'user', {COLUMNS => 'info:name', VERSIONS => 5}

 

11、指定多个列族与按照数据值模糊查询

查询user表中列族为info和data且列标示符中含有a字符的信息

scan 'user', {COLUMNS => ['info', 'data'], FILTER => "(QualifierFilter(=,'substring:a'))"}

12、rowkey的范围值查询

查询user表中列族为info,rk范围是[rk0001, rk0003)的数据

scan 'user', {COLUMNS => 'info', STARTROW => 'rk0001', ENDROW => 'rk0003'}

 

13、指定rowkey模糊查询

查询user表中row key以rk字符开头的

scan 'user',{FILTER=>"PrefixFilter('rk')"}

 

14、指定数据范围值查询

查询user表中指定范围的数据

scan 'user', {TIMERANGE => [1392368783980, 1392380169184]}

 

 

7、更新数据操作

1、更新数据值

更新操作同插入操作一模一样,只不过有数据就更新,没数据就添加

 

2、更新版本号

将user表的f1列族版本号改为5

hbase(main):050:0> alter 'user', NAME => 'info', VERSIONS => 5

8、删除数据以及删除表操作

1、指定rowkey以及列名进行删除

删除user表row key为rk0001,列标示符为info:name的数据

hbase(main):045:0> delete 'user', 'rk0001', 'info:name'

2指定rowkey,列名以及字段值进行删除

删除user表row key为rk0001,列标示符为info:name,timestamp为1392383705316的数据

delete 'user', 'rk0001', 'info:name', 1392383705316

 

3、删除一个列族

删除一个列族:

alter 'user', NAME => 'info', METHOD => 'delete'
或 alter 'user', 'delete' => 'info'

 

4、清空表数据

hbase(main):017:0> truncate 'user'

 

5、删除表

首先需要先让该表为disable状态,使用命令:

hbase(main):049:0> disable 'user'

然后才能drop这个表,使用命令:

hbase(main):050:0> drop 'user'

注意:如果直接drop表,会报错:Drop the named table. Table must first be disabled)

9、统计一张表有多少行数据

hbase(main):053:0> count 'user'