# HBase 命令
进入 HBase Shell 控制台:
./bin/hbase shell
如果有 kerberos 认证,需要事先使用相应的 keytab 进行一下认证(使用 kinit 命令),认证成功之后再使用 hbase shell 进入可以使用 whoami 命令可查看当前用户.
# 一、基本命令
- 获取帮助信息:
help
- 获取命令的详细帮助信息:
help 'status'
- 查看服务器状态:
status
- 查看版本信息:
version
- 查看当前登录用户:
whoami
# 二、DDL
# 创建表
【语法】create '表名称','列族名称 1','列族名称 2','列名称 N'
【示例】
# 创建一张名为 test 的表,columnFamliy1、columnFamliy2 是 table1 表的列族。
create 'test','columnFamliy1','columnFamliy2'
# 启用、禁用表
- 启用表:
enable 'test'
- 禁用表:
disable 'test'
- 检查表是否被启用:
is_enabled 'test'
- 检查表是否被禁用:
is_disabled 'test'
# 删除表
注意:删除表前需要先禁用表
disable 'test'
drop 'test'
# 修改表
# 添加列族
命令格式: alter '表名', '列族名'
alter 'test', 'teacherInfo'
# 删除列族
命令格式:alter '表名', {NAME => '列族名', METHOD => 'delete'}
alter 'test', {NAME => 'teacherInfo', METHOD => 'delete'}
# 更改列族存储版本的限制
默认情况下,列族只存储一个版本的数据,如果需要存储多个版本的数据,则需要修改列族的属性。修改后可通过 desc
命令查看。
alter 'test',{NAME=>'columnFamliy1',VERSIONS=>3}
# 查看表
- 查看所有表:
list
- 查看表的详细信息:
describe 'test'
- 检查表是否存在:
exists 'test'
# 三、增删改
# 插入数据
命令格式:put '表名', '行键','列族:列','值'
注意:如果新增数据的行键值、列族名、列名与原有数据完全相同,则相当于更新操作
put 'test', 'rowkey1', 'columnFamliy1:a', 'valueA'
put 'test', 'rowkey1', 'columnFamliy1:b', 'valueB'
put 'test', 'rowkey1', 'columnFamliy1:c', 'valueC'
put 'test', 'rowkey2', 'columnFamliy1:a', 'valueA'
put 'test', 'rowkey2', 'columnFamliy1:b', 'valueB'
put 'test', 'rowkey2', 'columnFamliy1:c', 'valueC'
put 'test', 'rowkey3', 'columnFamliy1:a', 'valueA'
put 'test', 'rowkey3', 'columnFamliy1:b', 'valueB'
put 'test', 'rowkey3', 'columnFamliy1:c', 'valueC'
put 'test', 'rowkey1', 'columnFamliy2:a', 'valueA'
put 'test', 'rowkey1', 'columnFamliy2:b', 'valueB'
put 'test', 'rowkey1', 'columnFamliy2:c', 'valueC'
# 获取指定行、列族、列
- 获取指定行中所有列的数据信息:
get 'test','rowkey2'
- 获取指定行中指定列族下所有列的数据信息:
get 'test','rowkey2','columnFamliy1'
- 获取指定行中指定列的数据信息:
get 'test','rowkey2','columnFamliy1:a'
# 删除指定行、列
- 删除指定行:
delete 'test','rowkey2'
- 删除指定行中指定列的数据:
delete 'test','rowkey2','columnFamliy1:a'
# 四、查询
hbase 中访问数据有两种基本的方式:
- 按指定 rowkey 获取数据:
get
方法; - 按指定条件获取数据:
scan
方法。
scan
可以设置 begin 和 end 参数来访问一个范围内所有的数据。get 本质上就是 begin 和 end 相等的一种特殊的 scan。
# get 查询
- 获取指定行中所有列的数据信息:
get 'test','rowkey2'
- 获取指定行中指定列族下所有列的数据信息:
get 'test','rowkey2','columnFamliy1'
- 获取指定行中指定列的数据信息:
get 'test','rowkey2','columnFamliy1:a'
# scan 查询
# 查询整表数据
scan 'test'
# 查询指定列簇的数据
scan 'test', {COLUMN=>'columnFamliy1'}
# 条件查询
# 查询指定列的数据
scan 'test', {COLUMNS=> 'columnFamliy1:a'}
除了列 (COLUMNS)
修饰词外,HBase 还支持 Limit
(限制查询结果行数),STARTROW
(ROWKEY
起始行,会先根据这个 key
定位到 region
,再向后扫描)、STOPROW
(结束行)、TIMERANGE
(限定时间戳范围)、VERSIONS
(版本数)、和 FILTER
(按条件过滤行)等。
如下代表从 rowkey2
这个 rowkey
开始,查找下两个行的最新 3 个版本的 name 列的数据:
scan 'test', {COLUMNS=> 'columnFamliy1:a',STARTROW => 'rowkey2',STOPROW => 'rowkey3',LIMIT=>2, VERSIONS=>3}
# 条件过滤
Filter 可以设定一系列条件来进行过滤。如我们要查询值等于 24 的所有数据:
scan 'test', FILTER=>"ValueFilter(=,'binary:24')"
值包含 valueA 的所有数据:
scan 'test', FILTER=>"ValueFilter(=,'substring:valueA')"
列名中的前缀为 b 的:
scan 'test', FILTER=>"ColumnPrefixFilter('b')"
FILTER 中支持多个过滤条件通过括号、AND 和 OR 进行组合:
# 列名中的前缀为 b 且列值中包含1998的数据
scan 'test', FILTER=>"ColumnPrefixFilter('b') AND ValueFilter ValueFilter(=,'substring:A')"
PrefixFilter
用于对 Rowkey 的前缀进行判断:
scan 'test', FILTER=>"PrefixFilter('wr')"