-
启动HBase
[atguigu@hadoop102 hbase]$bin/start-hbase.sh
-
关闭HBase
[atguigu@hadoop102 hbase]$bin/stop-hbase.sh
-
进入 HBase 客户端命令行
[atguigu@hadoop102 hbase]$bin/hbase shell
-
查看帮助命令
hbase(main):001:0>help
DDL(操作表和命名空间本身的增删改查)
DML(操作表内部的增删改查)
DDL
表
-
创建表
hbase(main):002:0>create 'student','info'
一个是表名一个是列族 -
删除表
首先需要先让该表为 disable 状态:
hbase(main):019:0>disable 'student'
然后才能 drop 这个表:
hbase(main):020:0>drop 'student'
提示:如果直接 drop 表,会报错:ERROR: Table student is enabled. Disable it first.
truncate 'stu'
也是删除整个表,而且不用自己去disabled表 -
改变表信息
将 info 列族中的数据存放 3 个版本:
hbase(main):022:0>alter 'student',{NAME=>'info',VERSIONS=>3}
-
查看当前数据库中有哪些表
hbase(main):002:0>list
查看表结构
hbase(main):011:0> describe 'student'
命名空间
- 创建命名空间
create_namespace 'bigdata'
在命名空间下创建表
create 'bigdata:stu','info'
如果直接`create ‘student’,'info’是默认在default命名空间下创建表 - 删除命名空间
要保证namespace是empty才能删除,所以先要删除在namespace下的表再删除表
drop_namespace 'bigdata'
- 改
很少改 - 查
list_namespace
DML
1. 增加数据 put
put 'stu','1001','info1:name','zs'
在stu表的1001row上的info1列族里加一个叫name的列,值为zs
put 'stu' ,'1002','info1:age','18'
在stu表的1002row上的info1列族里加一个叫age的列,值为18
put 'stu' ,'10010','info1:add','nj'
在stu表的10010row上的info1列族里加一个叫add的列,值为nj
scan查看表信息看到10010是在1002前面,而我们先创建1002再创建10010,说明HBase的row是按照字典排序的
put 'stu' ,'1001','info1:add','bj'
在stu表的1001row上的info1列族里加一个叫add的列,值为bj
2. 删除delete
delete 'stu', '1001', 'info:add'
删除stu表1001row下列族为info中列名为add的列,是删除操作的时间戳大于之间add下数据的时间戳,type为Delete,也就不显示数据了
发现的一个BUG
delete 'stu', '1001', 'info1'
明明删除info列族所有信息成功但是scan查看后还是存在,这时HBase的shell一个BUG,,以后我们可以在API下成功删除
deleteall
delete不可以删除rowkey,因为比须要三个参数
可以直接删除rowkey
deleteall 'stu', '1001'
3. 修改put
依然是个put,显示时间戳最大的那个值,时间戳小的不显示,用户以为是改了但是实际上被覆盖了
put 'stu' '1001' 'info1:name' 'ls'
把zs改成ls
如果我加一个ww,但是时间戳在ls之前,scan 'stu’后还是显示ls,就是前面说的时间戳问题
put ‘stu’, ‘1001’, ‘info1:name’, ‘ww’,1602310939550
scan 'stu', {RAW => true, VERSIONS => 10}
就是查看最近10个版本数的历史信息,可以看到zs和ww还存在的
4. 查看 get 与 scan
- 按指定rowkey获取唯一一条记录:get方法,用法单一
按指定条件获取一批记录:scan方法,还可以添加STARTROW、TIMERANGE和FITLER等高级功能
get
hbase> t.get 'r1'
hbase> t.get 'r1', {TIMERANGE => [ts1, ts2]}
hbase> t.get 'r1', {COLUMN => 'c1'}
hbase> t.get 'r1', {COLUMN => ['c1', 'c2', 'c3']}
hbase> t.get 'r1', {COLUMN => 'c1', TIMESTAMP => ts1}
hbase> t.get 'r1', {COLUMN => 'c1', TIMERANGE => [ts1, ts2], VERSIONS => 4}
hbase> t.get 'r1', {COLUMN => 'c1', TIMESTAMP => ts1, VERSIONS => 4}
hbase> t.get 'r1', {FILTER => "ValueFilter(=, 'binary:abc')"}
hbase> t.get 'r1', 'c1'
hbase> t.get 'r1', 'c1', 'c2'
hbase> t.get 'r1', ['c1', 'c2']
hbase> t.get 'r1', {CONSISTENCY => 'TIMELINE'}
hbase> t.get 'r1', {CONSISTENCY => 'TIMELINE', REGION_REPLICA_ID => 1}
例如:
获取一个id的所有数据
get 'table_name','row_index'
获取一个id,一个列族的所有数据
get 'table_name','row_index','info'
#获取一个id,一个列族中一个列的所有数据
get 'table_name','row_index','info:age'
scan
hbase> scan 'hbase:meta'
hbase> scan 'hbase:meta', {COLUMNS => 'info:regioninfo'}
hbase> scan 'ns1:t1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
hbase> scan 't1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
hbase> scan 't1', {COLUMNS => 'c1', TIMERANGE => [1303668804, 1303668904]}
hbase> scan 't1', {REVERSED => true}
hbase> scan 't1', {ALL_METRICS => true}
hbase> scan 't1', {METRICS => ['RPC_RETRIES', 'ROWS_FILTERED']}
hbase> scan 't1', {ROWPREFIXFILTER => 'row2', FILTER => "
1.限制条件
scan 'qy',{COLUMNS=>'name'}
scan 'qy',{COLUMNS=>'name:gender'}
scan 'qy',{COLUMNS=>['name','foo']}
限制查找条数:
scan 'qy',{COLUMNS=>['name','foo'],LIMIT=>1}
scan 'qy',{COLUMNS=>['name','foo'],LIMIT=>2}
限制时间范围:
scan 'qy',{TIMERANGE=>[1448045892646,1448045892647]}
2.filter 过滤部分
PrefixFilter:rowKey前缀过滤
scan 'qy',{FILTER=>"PrefixFilter('001')"}
scan 'qy',{FILTER=>PrefixFilter('t')}
QualifierFilter:列过滤器
QualifierFilter对列的名称进行过滤,而不是列的值。
scan 'qy',{FILTER=>"PrefixFilter('t') AND QualifierFilter(>=,'binary:b')"}
TimestampsFilter:时间戳过滤器
scan 'qy',{FILTER=>"TimestampsFilter(1448069941270,1548069941230)" }
scan 'qy',{FILTER=>"(QualifierFilter(>=,'binary:b')) OR (TimestampsFilter(1348069941270,1548069941270))" }