HBase的shell基本操作
- HBase Shell命令基本操作
- 进入Hbase的shell客户端
- help命令
- list 查看当前数据库有哪些表
- create 创建表
- put 插入数据
- 查询数据操作
- 通过rowkey进行查询
- 查看rowkey下某个列族的信息
- 查看rowkey指定列族指定列的值
- 查看rowkey指定多个列族的值
- 指定rowkey与列值过滤器查询
- 指定rowkey与列名模糊查询
- 查询某表所有行的数据
- 列族查询
- 多列族查询
- 指定列族与某个列名查询
- 指定多个列族与按照数据值模糊查询
- 指定rowkey的范围查询
- 指定rowkey模糊查询
- 指定数据版本的范围查询
- 更新数据库操作
- 更新数据值
- 更新版本号
- 删除数据以及删除表操作
- 指定rowkey以及列名进行删除
- 指定rowkey,列名以及版本号进行删除
- 删除一个列族
- 清空表数据
- 删除表
- 统计一张表有多少行数据
- HBase shell管理命令
- 显示服务器状态
- 显示当前用户
- 显示当前所有表
- 查询指定表的记录数
- 显示表的结构信息
- 显示表是否存在
- 显示表是否启用\禁用
- 启用、禁用表
- 删除表
- 清空表
- 更改表的列族
HBase Shell命令基本操作
shell客户端删除光标前面的字符:Ctrl+删除键,很麻烦。最好在外面写好之后粘贴过去
进入Hbase的shell客户端
# 在hbase/bin下
hbase shell
help命令
# 从Help中可以的看到hbase command包含的种类
help
- 查看某个命令详解:
list 查看当前数据库有哪些表
create 创建表
- 创健表需要指定至少1个列族,官网建议列族数为1-3
- HBase0.96前默认版本是3,HBase0.96之后默认版本是1
NAME
和VERSIONS
大小写敏感,小写会报错
# 创建user表,包含两个列族:info data
create ‘user’,'info','data'
# 创健user表,包含两个列族:info,data。 info 版本数为3,data版本数为2
# 大于3的版本,会被打上墓碑标记,在flush的时候删除
create 'user' ,{NAME=>'info',VERSIONS => '3'},{NAME=>'data',VERSIONS=>'2'}
put 插入数据
- put只能插入一条数据。需要批量插入可以使用Java API循环插入
- 插入数据需要制定,列族和列名。形式为列族:列名
- 列族+列名+rowkey可以确定唯一cell,列族+列名+rowkey+version可以确定cell中某一版本的值
# 像user表的info列族中插入信息,rowkey为rk0001,添加列:name,值为zhangsan
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'
查询数据操作
查看某些字段的语法固定,通过不同的组合,即可查询到指定条件的值,查询的中文字段显示的是十六进制。
通过rowkey进行查询
get 'user' 'rk0001'
查看rowkey下某个列族的信息
get 'user', 'rk0001', 'info'
查看rowkey指定列族指定列的值
get 'user' ,'rk0001', 'info:name','info:age'
get 'user', 'rk0001', 'info:name', 'data:pic'
查看rowkey指定多个列族的值
# 两种写法效果一致,前者简洁,后者查询意义更直观
get 'user', 'rk0001', 'info', 'data'
get 'user', 'rk0001', {COLUMN => ['info', 'data']}
指定rowkey与列值过滤器查询
- FILTER 为固定字段,不能更改
- ValueFilter和下面的QualifierFilter分别为列值过滤器和列名过滤器
更多过滤器相关可以参考HBase过滤器
# 获取user表中row key为rk0001,cell的值为zhangsan的信息r
get 'user', 'rk0001', {FILTER => "ValueFilter(=, 'binary:zhangsan')"}
指定rowkey与列名模糊查询
# 获取user表中row key为rk0001,列标示符中含有a的信息
get 'user', 'rk0001', {FILTER => "QualifierFilter(=,'substring:a')"}
范围查询使用scan关键字
查询某表所有行的数据
scan 'user'
列族查询
- 此处
COLUMNS
不可以省略 - 某些列的值执行删除操作后,不会在物理上进行删除,而是打上墓碑标记
- 想显示被打上墓碑标记的值,使用RAW =>true
- RAW默认值是false,不想显示被打上墓碑标记的值,不写此字段即可
scan 'user', {COLUMNS => 'info'}
scan 'user', {COLUMNS => 'info', RAW => true, VERSIONS => 5}
scan 'user', {COLUMNS => 'info', RAW => true}
scan 'user', {COLUMNS => 'info'}
多列族查询
scan 'user', {COLUMNS => ['info', 'data']}
指定列族与某个列名查询
# 查询user表中列族为info、列标示符为name的信息
scan 'user', {COLUMNS => 'info:name'}
# 查询info:name列、data:pic列的数据
scan 'user', {COLUMNS => ['info:name', 'data:pic']}
# 查询user表中列族为info、列标示符为name的信息,并且版本最新的5个
scan 'user', {COLUMNS => 'info:name', VERSIONS => 5}
指定多个列族与按照数据值模糊查询
scan 'user', {COLUMNS => ['info', 'data'],
FILTER => "(QualifierFilter(=,'substring:a'))"}
指定rowkey的范围查询
- 指定
rowkey
的范围查询是左闭右开区间
查询user表中列族为info,rk范围是[rk0001, rk0002)的数据
scan 'user', {COLUMNS => 'info', STARTROW => 'rk0001', ENDROW => 'rk0002'}
指定rowkey模糊查询
# 查询user表中row key以rk字符开头的数据
scan 'user',{FILTER=>"PrefixFilter('rk')"}
指定数据版本的范围查询
# 查询user表中指定范围的数据(前闭后开)
scan 'user', {TIMERANGE => [1392368783980, 1392380169184]}
更新数据库操作
更新数据值
- 更新数据和插入数据操作一样,使用
put
。有数据执行更新,没数据执行插入
在这里插入代码片
更新版本号
alter 'user', NAME => 'info', VERSIONS => 5
删除数据以及删除表操作
删除的数据在上还存在,只是被打上墓碑标记。等待特定时机从物理上删除。
指定rowkey以及列名进行删除
# 实际上就是删除某个cell
delete 'user', 'rk0001', 'info:name'
指定rowkey,列名以及版本号进行删除
#实际上就是删除指定cell的某个版本的值
delete 'user', 'rk0001', 'info:name', 1392383705316
删除一个列族
alter 'user', NAME => 'info', METHOD => 'delete'
# 或
alter 'user', 'delete' => 'info'
清空表数据
truncate 'user'
删除表
- 删除表前,要先置表为disable状态
disable 'user'
- 然后使用drop删除表
drop 'user'
统计一张表有多少行数据
count 'user'
显示服务器状态
status 'hbaseServerName'
显示当前用户
whoami
显示当前所有表
list
查询指定表的记录数
count 'user'
显示表的结构信息
describe 'user'
显示表是否存在
exists 'user'
显示表是否启用\禁用
is_enabled 'user'
is_disabled 'user'
启用、禁用表
enable 'user'
disable 'user'
删除表
- 删除表前要先disable表
drop 'user'
清空表
truncate 'user'
更改表的列族
- 为当前表增加列族
alter 'user',NAME => 'TESTCF',VERSIONS =>2
- 删除当前表某个列族
alter 'user', 'delete' => 'CF2'