打开Hbase Shell:
# hbase shell
# 获取帮助
help
# 获取命令的详细信息
help 'status'
status
version
list
命令格式: create ‘表名称’, ‘列族名称1’,‘列族名称2’,‘列名称N’
# 创建一张名为Student的表,包含基本信息(baseInfo)、学校信息(schoolInfo)两个列族
create 'Student','baseInfo','schoolInfo'
命令格式:desc ‘表名’
describe 'Student'
enable和disable可以启用/禁用这个表,is_enabled和is_disabled来检查表是否被禁用
# 禁用表
disable 'Student'
# 检查表是否被禁用
is_disabled 'Student'
# 启用表
enable 'Student'
# 检查表是否被启用
is_enabled 'Student'
exists 'Student'
# 删除表前需要先禁用表
disable 'Student'
# 删除表
drop 'Student'
命令格式: alter ‘表名’, ‘列族名’
alter 'Student', 'teacherInfo'
命令格式:alter ‘表名’, {NAME => ‘列族名’, METHOD => ‘delete’}
alter 'Student', {NAME => 'teacherInfo', METHOD => 'delete'}
默认情况下,列族只存储一个版本的数据,如果需要存储多个版本的数据,则需要修改列族的属性。修改后可通过desc
命令查看。
alter 'Student',{NAME=>'baseInfo',VERSIONS=>3}
命令格式:put ‘表名’, ‘行键’,‘列族:列’,‘值’
注意:如果新增数据的行键值、列族名、列名与原有数据完全相同,则相当于更新操作
put 'Student', 'rowkey1','baseInfo:name','tom'
put 'Student', 'rowkey1','baseInfo:birthday','1990-01-09'
put 'Student', 'rowkey1','baseInfo:age','29'
put 'Student', 'rowkey1','schoolInfo:name','Havard'
put 'Student', 'rowkey1','schoolInfo:localtion','Boston'
put 'Student', 'rowkey2','baseInfo:name','jack'
put 'Student', 'rowkey2','baseInfo:birthday','1998-08-22'
put 'Student', 'rowkey2','baseInfo:age','21'
put 'Student', 'rowkey2','schoolInfo:name','yale'
put 'Student', 'rowkey2','schoolInfo:localtion','New Haven'
put 'Student', 'rowkey3','baseInfo:name','maike'
put 'Student', 'rowkey3','baseInfo:birthday','1995-01-22'
put 'Student', 'rowkey3','baseInfo:age','24'
put 'Student', 'rowkey3','schoolInfo:name','yale'
put 'Student', 'rowkey3','schoolInfo:localtion','New Haven'
put 'Student', 'wrowkey4','baseInfo:name','maike-jack'
# 获取指定行中所有列的数据信息
get 'Student','rowkey3'
# 获取指定行中指定列族下所有列的数据信息
get 'Student','rowkey3','baseInfo'
# 获取指定行中指定列的数据信息
get 'Student','rowkey3','baseInfo:name'
# 删除指定行
delete 'Student','rowkey3'
# 删除指定行中指定列的数据
delete 'Student','rowkey3','baseInfo:name'
hbase中访问数据有两种基本的方式:
scan
可以设置begin和end参数来访问一个范围内所有的数据。get本质上就是begin和end相等的一种特殊的scan。
# 获取指定行中所有列的数据信息
get 'Student','rowkey3'
# 获取指定行中指定列族下所有列的数据信息
get 'Student','rowkey3','baseInfo'
# 获取指定行中指定列的数据信息
get 'Student','rowkey3','baseInfo:name'
scan 'Student'
scan 'Student', {COLUMN=>'baseInfo'}
# 查询指定列的数据
scan 'Student', {COLUMNS=> 'baseInfo:birthday'}
除了列(COLUMNS)
修饰词外,HBase还支持Limit
(限制查询结果行数),STARTROW
(ROWKEY
起始行,会先根据这个key
定位到region
,再向后扫描)、STOPROW
(结束行)、TIMERANGE
(限定时间戳范围)、VERSIONS
(版本数)、和FILTER
(按条件过滤行)等。
如下代表从rowkey2
这个rowkey
开始,查找下两个行的最新3个版本的name列的数据:
scan 'Student', {COLUMNS=> 'baseInfo:name',STARTROW => 'rowkey2',STOPROW => 'wrowkey4',LIMIT=>2, VERSIONS=>3}
Filter可以设定一系列条件来进行过滤。如我们要查询值等于24的所有数据:
scan 'Student', FILTER=>"ValueFilter(=,'binary:24')"
值包含yale的所有数据:
scan 'Student', FILTER=>"ValueFilter(=,'substring:yale')"
列名中的前缀为birth的:
scan 'Student', FILTER=>"ColumnPrefixFilter('birth')"
FILTER中支持多个过滤条件通过括号、AND和OR进行组合:
# 列名中的前缀为birth且列值中包含1998的数据
scan 'Student', FILTER=>"ColumnPrefixFilter('birth') AND ValueFilter ValueFilter(=,'substring:1998')"
PrefixFilter
用于对Rowkey的前缀进行判断:
scan 'Student', FILTER=>"PrefixFilter('wr')"
更多大数据系列文章可以参见个人 GitHub 开源项目: 程序员大数据入门指南