Hbase数据模型及Hbase Shell

简介: Hbase数据模型及Hbase Shell

1 数据模型

1.1 相关名词概念

表(Table):类似于关型数据库中的表


行(Row):以行键进行唯一标识,代表一个数据对象,按照字典顺序由低到高存储在表。


列族(Column Family):列的集合,支持动态扩展(无需预定义列的类型及数量,可随意增删),所有列默认以字符串形式存储在表中,用户可根据需求自行进行数据类型转换。


列标识(Column Qualifier):没有固定的数据类型,以二进制字节存储,对列进行定位。


单元格(Cell):以行键、列族、列标识共同确定一个单元格,单元格没有固定的数据类型,以二进制字节存储,可用<Row Key,Column Family : Column Qualifier,Timestamp>来访问。


时间戳(Timestamp):表示数据的版本信息,如不设置默认为当前时间。


1.2 模型分析

image.png


与传统关型数据库的区别


关型数据库 Hbase
表结构和数据类型需要预定义 表结构和数据类型不需要预定义
添加列需要修改表结构 支持动态扩展
NULL占用存储空间

NULL不占用存储空间

面向行存储 面向列存储

2 Hbase Shell操作

2.1 命名空间

       关型数据库中的所有表存储在数据库中,数据库作为表的一个逻辑分组。Hbase中存在一种类似与数据库的表的逻辑分组——命名空间。


list_namespace                    #查看所有的命名空间
create_namespace 'ns'             #创建命名空间ns
list_namespace_tables 'ns'        #查看ns命名空间下的所有表
alter_namespace 'ns'              #更改命名空间ns
describe_namespace 'ns'           #查看命名空间ns
drop_namespace 'ns'               #删除命名空间ns

2.2 表操作

2.2.1 创建表

       表名区分大小写,所有的字符串都必须包含在单引号里。


#创建包含StuInfo,Grades两个列族的Student表
create 'Student','StuInfo','Grades'
#指定参数创建
create 'Student',{NAME => 'StuInfo',VERSION => 3},{NAME => 'Grades',VERSION => 3}

2.2.2 更改表结构

       在对表进行更改或者删除时,必须先禁用表,等修改之后必须解禁表。


#增加hobby列族
alter 'Student' , 'hobby'
#删除hobby列族(设置METHOD属性的值)
alter 'Student' , {NAME => 'hobby' , METHOD => 'delete'}
#修改Grades列族(通过修改属性值实现)
alter 'Student' , {NAME => 'Grades' , VERSION => 3}

2.2.3 表的其他操作

       Hbase表最少要包含一个列族,当表中只有一个列族的时候将无法删除该表。


#删除表
is_disable 'Student'    #查询表是否被禁用
disable 'Student'       #设置表使之被禁用
enable 'Student'        #解禁表
drop 'Student'          #删除表
#清空表中的数据
truncate 'Student'
#查看表是否存在
exists 'Student'
#查看已有的表名
list
#查看表的列族信息
describe 'Student'

2.3 数据操作

2.3.1 添加数据(put)

       列支持动态扩展可以使之前未定义的值,列族则必须是提前创建好的。


       put命令一次只能插入一个单元格的数据,单元格存在数据的情况下是修改数据


put 'Student' , '0001' , 'StuInfo:Name' , 'Tom Green' , 1
        |         |             |              |        |
      表名       行键        列族:列        修改后的值  时间戳

2.3.2 删除数据(delete)

delete操作并不会马上删除数据,只是将对应的数据打上删除标记(tombstone),只有在数据产生合并时,数据才会被删除。


#

删除列族
删除Student表里行键为0002的Grades列族数据
delete 'Student' , '0002' , 'Grades'
#删除单元格
删除Student表里行键为0001、Grades列族成员为Math,并且时间戳小于等于2的数据
delete 'Student' , '0001' , 'Grades:Math' , 2
#删除一行
删除Student表里行键为0001的一行数据
deleteall 'Student' , '0001'

2.3.3 获取数据(get|scan)

       get和scan命令都可以配合参数指定进行查询想要更加精准的查询就要配合过滤器进行查询


#以行键为索引条件获取一行信息
get 'Student' , '0001'
#扫描全表的数据
scan 'Student'
#配合参数指定查找信息
scan 'Student' , {COLUMN => 'StuInfo'}                         #指定列族
scan 'Student' , {COLUMN => 'StuInfo:Name'}                    #指定列
scan 'Student' , {LIMIT => 1}                                  #限制查询返回的行数
scan 'Student' , {STARTROW => '0001' , ENDROW => '0003'}       #限制查询返回的行范围

3 过滤器

3.1 比较运算符和比较器

比较运算符 描述        比较器 描述

= 等于  BinaryComparator 匹配完整字节数组

> 大于  BinaryPrefixComparator 匹配字节数组前缀

>= 大于等于  BitComparator 匹配比特位

< 小于  NullParator 匹配空值

<= 小于等于  RegexStringComparator 匹配正则表达式

!= 不等于  SubStringComparator 匹配子串


注意引号的使用(单引还是双引)


3.2 行键过滤器

#RowFilter(行键过滤器)
scan 'Student' , Filter => "RowFilter( = , 'substring:0001' )"
scan 'Student' , Filter => "RowFilter( > , 'binary:0001' )"
#PrefixFilter(比较行键前缀)
查询行键前缀为0001的所有行
scan 'Student' , Filter => "PrefixFilter('0001')"
#KeyOnlyFilter(只返回键不返回值)
scan 'Student' , Filter => "KeyOnlyFilter()"
#FirstKeyOnlyFilter(每行的第一列的数据信息)
scan 'Student' , Filter => "FirstKeyOnlyFilter()"
#InclusiveStopFilter(终止行信息)
查询0001到0002行的数据信息
scan 'Student' , {STARTROW => '0001' , Filter => "InclusiveStopFilter('binary:0002')"}
3.3 列族与列过滤器
#列族过滤器(用法与RowFilter类似)
scan 'Student' , Filter => "FamilyFilter( = , 'substring:Grades' )"
#QualifierFilter(列标识过滤器)
scan 'Student' , Filter => "QualifierFilter( = , 'substring:Math' )"
#ColumnPrefixFilter(比较列名前缀)
查询列名前缀为'Ma'的所有行
scan 'Student' , Filter => "ColumnPrefixFilter('Ma')"
#MultipleColumnPrefixFilter(指定多个前缀对列名进行过滤)
scan 'Student' , Filter => "MultipleColumnPrefixFilter('Ma','Ag')"
#ColumnRangeFilter(按范围过滤列名左闭右开)
查询从Big前缀开始到Math前缀的前一列为止的所有数据
scan 'Student' , Filter => "ColumnRangeFilter('Big',true,'Math',false)"
3.4 值过滤器
#ValueFilter(值过值器)
查询表中所有单元格的值为curry的数据
scan 'Student' , Filter => "ValueFilter( = , 'substring:curry' )"
#SingleColumnValueFilter(指定列族和列名的值过滤)
查询StuInfo列族中的Name列里单元格的值为curry的所有数据
scan 'Student' , Filter => "SingleColumnValueFilter('StuInfo','Name'= ,'substring:curry')"
#SingleColumnValueExcludeFilter(指定列族和列名的值过滤)
查询StuInfo列族中的Name列里除了单元格的值为curry的所有数据
scan 'Student',Filter=>"SingleColumnValueExcludeFilter('StuInfo','Name',=,'substring:curry')"

3.5 其他过滤器

#ColumnCountGetFilter(限制每个行返回的个数,在get方法中使用)
scan 'Student' , Filter => "FamilyFilter( = , 'substring:Grades' )"
#TimestampsFilter(时间戳过滤)
scan 'Student' , Filter => "TimestampsFilter(1,4)"
#InclusiveStopFilter(设置结束行,STARTROW和ENDROW的组合是左闭右开,STARTROW和InclusiveStopFilter的组合是左闭右闭)
查询0001到0003行的数据
scan 'Student' , {STARTROW => '0001',Filter => "InclusiveStopFilter('0003')"}
#PageFilter(对返回结果进行分页)
scan 'Student' , {STARTROW => '0001',ENDROW => '0005'Filter => "PageFilter(3)"}
#ColumnPaginationFilter(对一行的所有列进行分页)
scan 'Student' , {STARTROW => '0001',ENDROW => '0005'Filter => "ColumnPaginationFilter(2,1)"}


相关文章
|
10月前
|
缓存 监控 Shell
如何使用 HBase Shell 进行数据的实时监控和备份?
如何使用 HBase Shell 进行数据的实时监控和备份?
182 5
|
10月前
|
Shell 分布式数据库 Hbase
如何使用 HBase Shell 进行数据的批量导入和导出?
如何使用 HBase Shell 进行数据的批量导入和导出?
761 5
|
11月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
238 4
|
11月前
|
分布式计算 Hadoop Shell
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
147 3
|
6月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
4月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
103 17
|
4月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
122 4
|
4月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
267 3
|
5月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
428 25