概念
- 命名空间:
- 类似于MySQL中的数据库(Schema)的概念
- HBase中有一个默认的命名空间,default
- 表:
- HBase中用于存储数据的容器
- 如果在创建表的时候没有指定命名空间,则会被放到默认的命名空间中
- 行键(RowKey):类似于MySQL中的主键;必需的
- 列族(Column Family):若干列的集合;在创建表的时候,至少需要提供一个列族
- 列(Column):任意;在添加数据的时候需要指定列族下的列
- 值(Value):列和行键对应的单元格中的数据
- 版本(Version):
- HBase中一个值可以有多个版本,在创建表提供列族信息时,可以指定该列族下的列中可以存放多少个版本的数据 默认是1
- 版本信息由时间戳表示
命令行操作
创建命名空间
create namespace '命名空间名'
删除命名空间
drop namespace '命名空间'
说明: 只能删除没有表(空的)的命名空间,如果指定的命名空间中存在表,则需要先删除表再删除命名空间
查看命名空间描述:
describe namespace '命名空间名'
修改命名空间属性:
- 添加属性:
alter namespace '命名空间名',{METHOD=>'set','属性名'=>'属性值'}
- 移除属性:
alter namespace '命名空间名',{METHOD=>'unset',NAME=>'属性名'}
创建表
create '[命名空间名:]表名',{NAME=>'列族名1'[,'属性名1'=>'属性值1',...]}[,{NAME=>'列族2'[,'属性名1'=>'属性值1',...]}]
create '[命名空间名:]表名','列族名1'[,'列族名2',...]
删除表
drop '表名'
drop all '匹配表名的正则'
注意:
- 在删除表之前需将表禁用
disable '表名'
disable all '匹配表名的正则'
- 启用被禁用的表
enable '表名'
enable all '匹配表名的正则'
- 判断表是否被禁用/启用
is_disabled '表名'
is_enabled '表名'
查看表
list
list namespace tables '命名空间'
修改表
alter '表名',NAME=>'列族名','属性名'=>'属性值'
alter '表名','列族名','属性名'=>'属性值'
注意:
- 如果指定的列族名存在,则指的是修改该列族的信息
- 如果指定的列族名不存在,指的是添加一个新的列族
- 删除列族:
alter '表名',NAME=>'列族名',METHOD=>'delete'
添加数据
put '[命名空间:]表名','行键','列族名:列名','值',时间戳
查看数据
get '表名','行键'
查看指定的行键的一行数据scan '表名'
扫描整张表中的数据
删除数据
-
delete '表名','行键','列族名:列名'[,时间戳]
- 如果不指定时间戳,则删除对应列中的时间戳最新的数据
- 如果指定了时间戳,则删除指定的时间戳的数据
-
deleteall '表名','行键'[,'列名',时间戳]
- 如果没有指定列名,则删除行键对应的一整行数据
- 如果指定了列名,没有指定时间戳,则删除该行建对应的该列中的所有版本(时间戳)数据
- 如果指定了列名,指定了时间戳,则删除比指定的时间戳(包含)旧的数据
-
truncate '表名'
- 删除整张表中的数据,删除逻辑是利用drop命令先将表删除,然后再根据指定的表的结构新创建一张表
统计行数
count '表名'
表行数不多时
$HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'tablename'
示例
#创建一张表,指定版本号为3
create 'test:teacher',{NAME=>'baseinfo',VERSIONS=>3},{NAME=>'extrainfo',VERSIONS=>5}
#创建表,预定义分区,在rowkey为0<= <10 10<= 20 20<= 30
create 'test:teacher2', {NAME=>'baseinfo',VERSIONS=>3}, SPLITS => ['10', '20', '30', '40']
#获得某一个特定值
get 'test:teacher','10001','baseinfo:name'
#扫描表中某一列
scan 'test:student',{COLUMNS=>'baseinfo:name'}
#使用limit进行行数限制
scan 'test:student',{COLUMNS=>'baseinfo:name',LIMIT=>2}
#指定从某一行开始扫描
scan 'test:teacher',{COLUMNS=>'baseinfo:name',LIMIT=>2,STARTROW=>'20001'}
过滤器
#使用过滤器 行健前缀过滤器,只有这一个有属性
scan 'test:teacher', {ROWPREFIXFILTER => '10'}
#使用空值行健过滤器,只返回行健
scan 'test:teacher',{FILTER=>'KeyOnlyFilter()'}
#使用行健过滤器,binary: 帮助数据类型转化
scan 'test:teacher',{FILTER =>"RowFilter (!=,'binary:10001')"}
#使用列名过滤器
scan 'test:student',{FILTER =>"QualifierFilter (>=,'binary:baseinfo:name')"}
#使用子串过滤器
scan 'test:student',{FILTER =>"ValueFilter (=,'binary:zhao')"}
#列名前缀过滤器
scan 'test:student',{FILTER =>"ColumnPrefixFilter ('name')"}
#使用多种过滤器进行条件结合
scan 'test:teacher',{FILTER =>"(ValueFilter (=,'binary:hello')) OR (RowFilter (>,'binary:10'))"}
#使用page过滤器,限制每页展示数量
scan 'test:teacher',{FILTER =>org.apache.hadoop.hbase.filter.PageFilter.new(2)}
Comments NOTHING