Hbase数据模型及Hbase Shell

目录

1 数据模型

1.1 相关名词概念

1.2 模型分析

2 Hbase Shell操作

2.1 命名空间

2.2 表操作

2.2.1 创建表

2.2.2 更改表结构

2.2.3 表的其他操作

2.3 数据操作

2.3.1 添加数据(put)

2.3.2 删除数据(delete)

2.3.3 获取数据(get|scan)

3 过滤器

3.1 比较运算符和比较器

3.2 行键过滤器

3.3 列族与列过滤器

3.4 值过滤器

3.5 其他过滤器


1 数据模型

1.1 相关名词概念

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

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

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

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

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

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

1.2 模型分析

 与传统关型数据库的区别

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

NULL不占用存储空间

面向行存储面向列存储

2 Hbase Shell操作

2.1 命名空间

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

list_namespace                    #查看所有的命名空间create_namespace 'ns'             #创建命名空间nslist_namespace_tables 'ns'        #查看ns命名空间下的所有表alter_namespace 'ns'              #更改命名空间nsdescribe_namespace 'ns'           #查看命名空间nsdrop_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匹配子串

过滤器语法:scan 'Student' , Filter => "过滤器 (比较运算符 , '比较器')"

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

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)"}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

非关型数据库之Hbase

目录 1 Hbase简介 1.1 初识Hbase 1.2 Hbase的特性 2 HDFS专项模块 2.1 HDFS的基本架构 2.1.1 HDFS各组件的功能&#xff1a; 2.2 HFDFS多种机制 2.2.1 分块机制 2.2.2 副本机制 2.2.3 容错机制 2.2.4 读写机制 3 Hbase组件及其功能 3.1 客户端 3.2 Zookeeper 3.3 …

MongoDB Shell操作

目录 1 数据库操作 2 集合操作 3 文档操作 3.1 插入文档(insert|insertOne|insertMany) 3.2插入、删除的循环操作 3.2 删除文档(remove|deleteOne|deleteMany) 3.3 更新文档(update|save) 3.4 查询文档(find) 4 游标 5 索引 6 聚合 1 数据库操作 当新创建的数据库里…

MongoDB副本集、分片集的伪分布式部署(保姆级教程)

目录 1 集群架构(概念篇) 1.1 MongoDB核心组件 1.2 主从复制 1.3 副本集 1.4 分片集 2 集群搭建 2.1 部署副本集(伪分布式) 2.2 分片集部署(伪分布式) 2.3 副本集与分片集区别 1 集群架构(概念篇) MongoDB有三种集群部署模式&#xff0c;分别是主从复制(Master-Slave)…

【手把手 脑把脑】教会你使用idea基于MapReduce的统计数据分析(从问题分析到代码编写)

目录 1 编程前总分析 1.1 数据源 1.2 需要掌握的知识 1.2.1 Hadoop对比java的数据类型 1.2.2 MapReduce流程简介 1.3.3 MapReduce流程细分 2 编码阶段 2.1 导入依赖 2.2 mapper 2.3 reducer 2.4 main 1 编程前总分析 1.1 数据源 英语,李沐,85,男,20 数学,李沐,54,男…

【细节拉满】Hadoop课程设计项目,使用idea编写基于MapReduce的学生成绩分析系统(附带源码、项目文件下载地址)

目录 1 数据源(学生成绩.csv) 2 hadoop平台上传数据源 3 idea代码 3.1 工程框架 3.2 导入依赖 3.3 系统主入口(menu) 3.4 六个mapreduce 3.4.1 计算每门成绩的最高分、最低分、平均分(Mma) 3.4.2 计算每个学生的总分及平均成绩并进行排序(Sas) 3.4.3 统计所有学生的信…

Git 的安装、使用、分支、命令 一篇博客全都学会

目录 1 版本控制 1.1 什么是版本控制 1.2 为什么需要版本控制 2 Git概述 2.1 Git的工作机制 2.2 分布式版本控制工具与集中式的区别 2.3 Git是如何诞生的 3 Git的安装 4 Git常用命令 4.1 用户签名的设置和修改 4.2 查看用户签名的设置 4.3 初始化本地库 4.4 添加、…

生成一个GitHub的token用于git推送本地库至远程库

1 一步步选择设置 2 使用链接直接跳转到最后一步的设置页 git push 的时候需要token&#xff0c;所以在GitHub上生成一个临时的token 1 一步步选择设置 2 使用链接直接跳转到最后一步的设置页 前提是你已经在这个浏览器上登陆了GitHub https://github.com/settings/tokens

都2021年了,还不会使用GitHub创建、推送、拉取、克隆远程库、团队协作开发?

1 对自己的远程库操作 1.1 在GitHub上创建远程库 1.2 推送本地库至远程库 1.3 拉取远程库到本地库 1.4 克隆远程仓库到本地 2 对别人的远程库两种操作方式 2.1 使用GitHub进行团队内协作开发 2.2 使用GitHub进行跨团队协作开发 众所周知&#xff0c;GitHub是一个大型的国…

2021 最新 IDEA集成Gitee、Gitee迁移GitHub【图文讲解】

1 创建远程库 2 IDEA集成Gitee 2.1 安装gitee插件并绑定账号 2.2 IDEA推送本地库至远程库的两种方式 2.3 修改后推送本地库至远程库 2.4 拉取远程库 2.5 使用IDEA克隆远程库 3 Gitee迁移GitHub的远程库的两种方式 3.1 自己的账户之间迁移 3.2 使用链接进行迁移 3.3 强制刷…

只需五步学会Maven 3.6.1OR 3.6.3及其他版本的下载安装与配置【图文详解】

第一步&#xff0c;下载并解压缩包 ​第二步&#xff0c;配置两个环境变量 ​第三步&#xff0c;测试是否安装成功 ​第四步&#xff0c;指定本地仓库的路径 第五步&#xff0c;修改镜像仓库 第一步&#xff0c;下载并解压缩包 Maven官方下载地址&#xff1a;https://mav…

只需四步完成java JDK1.8的下载安装与配置【图文详解】

第一步&#xff0c;下载安装包并安装 第二步&#xff0c;安装JDK 第三步&#xff0c;配置三个环境变量 第四步&#xff0c;测试是否安装成功 第一步&#xff0c;下载安装包并安装 Oracle的官方下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#ja…

从Maven中央仓库网站下载jar包的两种方式,将会伴随java后端开发者的整个职业生涯

这个肥肠重要的网站就是&#xff1a;https://mvnrepository.com/ 下面我会以mysql-connector-java-8.0.26.jar为例&#xff0c;教会你使用两种方式下载使用jar包资源 首先在搜索栏使用全称或者是关键字对jar包进行搜索 选择你想要的版本 方式一&#xff1a;导入pom文件依赖(…

2021 使用IDEA创建并编写你的第一个Maven项目【图文详解】

1 使用IDEA创建你的第一个Maven项目 2 使用IDEA编写一个Maven项目 1 使用IDEA创建你的第一个Maven项目 新建一个空白项目 File-->New-->Project-->Empty Project 在IDEA中配置JDK 在IDEA中配置Maven 新建一个Maven模块 在test目录下面新建一个resources文件夹 2 使…

能让你的Intellij IDEA 起飞的几个设置(设置背景 字体 快捷键 鼠标悬停提示 提示忽略大小写 取消单行显示)

1 设置主题(背景图片) 2 设置字体 2.1 设置默认的字体及其大小、行间距**墙裂推荐** 2.2 设置字体大小可以随意改变**墙裂推荐** 3 设置鼠标悬停提示 4 提示的时候忽略大小写**墙裂推荐** ​​5 取消单行显示tabs**墙裂推荐** 6 修改类头的文档注释信息 7 设置项目文…

控制台:Unable to import maven project: See logs for details日志:Unable to create injector, see the follow

问题描述&#xff1a; 当我在使用IDEA 完成一个Maven项目的时候&#xff0c;在第一步的pom.xml文件导入依赖时就发生了这个问题&#xff0c;弹窗弹出Uable to import maven project 控制台报 Unable to import maven project: See logs for details的异常。 既然人家都让查看l…

Maven基础教程

1 Maven简介 2 Maven基础概念 2.1 仓库 2.2 坐标 3 依赖的相关知识点 4 生命周期与插件 5 使用Inteli idea完成第一个Maven项目 1 Maven简介 Maven的本质就是一个项目管理工具&#xff0c;用于将项目开发和管理过程抽象成一个项目对象模型(project object model POM) Ma…

【Java从入门到头秃专栏 】(一)学在Java语法之前

目录 1 初识Java 2 Java环境JDK 3 Java规范 1 初识Java Java是美国的sun(Stanford University Network)公司在1995年推出的一门计算机高级编程语言&#xff0c;虽然说当时参与开发Java的人员有好几名&#xff0c;但是业内公认的Java之父是詹姆斯高斯林(James Gosling)。 Jav…

【Java从入门到头秃专栏 】(二) 注释 数据类型 变量 常量 关键字 标识符 运算符 输入输出

目录 1 注释 2 数据类型 3 变量与常量 4 关键字、标识符 5 运算符 6 键入值、输出值 1 注释 注释就是写在程序中对代码进行解释说明的文字&#xff0c;方便自己和其他人查看&#xff0c;以便大家更加容易理解程序。注释虽然写在程序中&#xff0c;但是并不参与程序的执行&#…

【Java从入门到头秃专栏 】(三) 控制流程 Math Date DateFormat Calendar System BigDecimal Random

目录 1 控制流程 2 Math类 3 Date类 4 DateFormat类 5 Calendar类(日历类) 6 System类 7 BigDecimal类 8 Random类(随机数) 1 控制流程 1.1 块作用域 块(即复合语句)就是指由若干条Java语句组成的语句&#xff0c;并用一条大括号括起来&#xff0c;并借此形式确定了变量…

IntelliJ IDEA最常用的一些快捷键,学会了室友还以为你在祖安对线

目录 1 快速生成语句 1.1 main语句 1.2 输出语句 1.3 流程控制语句 1.3.1 if判断语句 1.3.2 while循环 1.3.3 for循环 1.3.4 数组、集合的循环操作 1.3.5 迭代器循环操作 1.4 对象实例化、定义变量 1.5 try-catch异常 2 快捷键 2.1 Ctrl系列 2.2 alt系列 2.2.1…