文章目录
2. hbase数据库——命令行操作
2.1. 启动hbase及其命令行
启动hbase及其命令行一般流程:
-
hbase安装完成并且能够正常启动与使用
-
开启hbase集群
${hbase_home}/bin/start-hbase.sh
注意:hbase非单机模式启动前你需要先启动hadoop集群
${hadoop_home}/sbin/start-dfs.sh
-
打开hbase的命令行
${hbase_home}/bin/hbase shell
eg:我的${hadoop_home}=/usr/local/hadoop2
,${hbase_home}=/usr/local/hbase
,并且hbase集群配置是非单机模式的。所以我的前置操作如下:
# 1.启动hadoop集群
/usr/local/hadoop2/sbin/start-dfs.sh
# 2.启动hbase集群
/usr/local/hbase/bin/start-hbase.sh
# 3.启动hbase命令行
/usr/local/hbase/bin/hbase shell
一些可能会用到的hbase操作知识:
2.2. hbase数据库的常用操作命令
注意:下面将以student表的操作为例,并且有些命令只提供示例不提供说明(有时候一例胜千言,学习是需要一定的关联、联想、抽象能力的)
一些杂七杂八的思考:
2.2.1. 获取帮助命令
命令格式:help ['具体命令']
使用示例:
# 获取hbase命令帮助(会输出所有hbase命令及详情?)
help
#获取status这条具体命令的详细信息
help 'status'
2.2.2. hbase系统层次操作命令
命令 | 格式格式 | 使用示例 | 示例任务 |
---|---|---|---|
查看服务器状态 | status | status | 查看服务器状态 |
查看版本信息 | version | version | 查看版本信息 |
查询有哪些表 | list | list | 查询有哪些表 |
检查表是否存在 | exists ‘表名’ | exists ‘student’ | 检查student表是否存在 |
表的启用/禁用命令
eg:使用示例(以student表为例):
# 禁用表
disable 'student'
# 检查表是否被禁用
is_disabled 'student'
# 启用表
enable 'student'
# 检查表是否被启用
is_enabled 'student'
2.2.3. hbase的表层次操作命令
3.1、创建表
命令格式:
create ‘表名称’, ‘列族名称1’,‘列族名称2’, ... ,‘列名称n’
#或:
create '表名', {name=>'列族名',versions=>'值',...}, {name=>'列族名',versions=>'值',...},...
eg:创建一张名为student的表,包含基本信息(baseinfo)、学校信息(schoolinfo)两个列族
create 'student','baseinfo','schoolinfo'
3.2、查看表的基本信息
命令格式:
desc ‘表名’
#或者?
describe ‘表名’
eg:查看我们创建的那一张student表的基本信息
describe 'student'
3.3、删除表
命令格式:
drop '表名'
#注意:删除表前需要先禁用表-->>disable '表名'
eg:删除student表
# 禁用student表
disable 'student'
# 删除student表
drop 'student'
3.4、表的修改
3.4.1、添加列族
命令格式:
alter ‘表名’, ‘列族名’
eg:为student表添加列族teacherinfo
alter 'student', 'teacherinfo'
3.4.2、更改列族的信息
eg:更改student表的列族baseinfo的存储版本的限制为3(默认情况下,列族只存储一个版本的数据,如果需要存储多个版本的数据,则需要修改列族的属性。修改后可通过desc命令查看)
alter 'student',{name=>'baseinfo',versions=>3}
3.4.3、删除列族
命令格式:
alter ‘表名’, {name => ‘列族名’, method => ‘delete’}
eg:删除student表的teacherinfo列族
alter 'student', {name => 'teacherinfo', method => 'delete'}
2.2.4. hbase的数据层次操作命令
4.1、插入数据
命令格式:
put ‘表名’, ‘行键’,‘列族:列’,‘值’
注意:如果新增数据的行键值、列族名、列名与原有数据完全相同,则相当于更新操作
eg:下面为student插入一些数据的示例
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'
4.2、删除数据
eg:一些删除示例
# 删除指定行(删除student表的rowkey3这一行数据)
delete 'student','rowkey3'
# 删除指定行中指定列的数据(删除student表的rowkey3这一行的baseinfo:name这一列的数据)
delete 'student','rowkey3','baseinfo:name'
4.3、修改(更新)数据
4.4、查询数据
2.2.5. hbase的数据层次操作命令——查询数据
5.1、get查询
eg:get查询的一些使用示例
# 获取指定行中所有列的数据信息
get 'student','rowkey3'
# 获取指定行中指定列族下所有列的数据信息
get 'student','rowkey3','baseinfo'
# 获取指定行中指定列的数据信息
get 'student','rowkey3','baseinfo:name'
5.2、scan查询
5.2.1、查询整表数据
# 查询student表整表数据
scan 'student'
5.2.2、column条件参数,条件查询/指定查询
# 查询指定列簇的数据
scan 'student', {column=>'baseinfo'}
# 注意:因为是单个条件参数,所以花括号可以省略(下同),即命令可以写作:
scan 'student', column=>'baseinfo'
# 查询指定列的数据
scan 'student', {columns=> 'baseinfo:birthday'}
# 查询指定多个列或列族
sana 'student',{columns=> "baseinfo:birthday,schoolinfo"}
# 查询从rowkey2这个rowkey开始,查找下两个行的最新3个版本的name列的数据:
scan 'student', {columns=> 'baseinfo:name',startrow => 'rowkey2',stoprow => 'wrowkey4', limit=>2, versions=>3}
5.2.3、filter条件参数,条件过滤/过滤查询
eg:一些示例
# 行键等于24
scan 'student', filter=>"rowfilter(=,'binary:24')"
# 行键包含24
scan 'student', filter=>"rowfilter(=,'substring:24')"
# 行键的前缀等于wr
scan 'student', filter=>"prefixfilter('wr')"
# 列族等于24
scan 'student', filter=>"familyfilter(=,'binary:24')"
# 列族包含24
scan 'student', filter=>"familyfilter(=,'substring:24')"
# 列标识符等于“b”的,注意是列标识符不是列族!!!
scan 'student', filter => "qualifierfilter(=,'binary:b')"
# 列标识符含有“b”的,注意是列标识符不是列族!!!
scan 'student', filter => "qualifierfilter(=,'substring:b')"
# 列标识符前缀为birth的,注意是列标识符不是列族!!!
scan 'student', filter=>"columnprefixfilter('birth')"
# 时间戳?范围还是...?这个过滤器暂时不了解
timestampsfilter(参数1,参数2)
# 列值等于24的所有数据
scan 'student', filter=>"valuefilter(=,'binary:24')"
# 列值包含yale的所有数据
scan 'student', filter=>"valuefilter(=,'substring:yale')"
# 针对单个列的值进行过滤,这个过滤器暂时不了解
singlecolumnvaluefilter
# 限制返回的行数,这个过滤器暂时不了解
pagefilter
思考:filter的这些过滤器,如valuefilter(=,‘binary:24’),valuefilter(=,‘substring:yale’),columnprefixfilter(‘birth’),是不是长得像函数调用?
##filter中支持多个过滤条件通过括号、and和or进行组合:
eg:
# 列名中的前缀为birth且列值中包含1998的数据
scan 'student', filter=>"columnprefixfilter('birth') and valuefilter valuefilter(=,'substring:1998')"
#上面这条命令是不是错了?应该改成下面这样才对?
scan 'student', filter=>"columnprefixfilter('birth') and valuefilter(=,'substring:1998')"
5.2.4、多条件参数的scan查询
# 完整点的多条件参数的scan查询示例
scan 'student', {columns=> 'baseinfo:name',startrow => 'rowkey2',stoprow => 'wrowkey4', limit=>2, versions=>3, filter=>"columnprefixfilter('birth') and valuefilter(=,'substring:1998')"}
发表评论