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'