【HBase之轨迹】(2)使用 hbase命令 和 JavaAPI 操作 HBase(包括复杂查询--过滤器,HBase 工具类)

本文介绍了如何在HBase中使用命令行进行DDL(表操作)和DML(数据操作),包括增删改查,以及Java API的使用,重点讲解了过滤器和比较器在复杂查询中的应用。通过实例演示了创建表、数据插入、过滤查询等操作,适合HBase初学者和进阶者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


0. 前置

前面一弹介绍了如何使用 docker 搭建 hbase
【HBase之轨迹】(1)使用 Docker 搭建 HBase 集群

现在开始通过 hbase 命令和 JavaAPI 使用 HBase
对 HBase 的介绍、运作流程原理和架构等,将在总集篇一起放出来

本篇介绍了 HBase 一系列命令的使用,包括表的增删改查,数据的增删改查
同时列出了官网中提到的各个过滤器和比较器及其功能,最后在命令行和 Java 中进行使用
JavaAPI 另外整理了一个工具集,以及其简单使用


1. 命令行使用

首先进入操作界面

./hbase shell

① DDL :表的增删改查

操作过程中,可以关注 Web 端的 Tables,能看到创建的表的信息

1)	创建表
	create <表名>,<列族名1>,<列族名2>...
例:	create 'user','address','info'

2)	查询所有用户表
	list

3)	查看表详情,可以看到各列族的属性
	describe <表名>
例:	describe 'user'

4)	更改表中列族的属性
	alter <表名>,{
   
   NAME=><列族名>,<属性名称>=><属性值>}
例:	alter 'user',{
   
   NAME=>'address',VERSIONS=>3}
	该例将 address 列族的最大版本数改为了 3
	表示列族将存储最近 3 个版本的数据,更旧的数据删去
	默认为 1,表示只保留最新版本,有新数据时,其余旧版本的数据都将倍删去

5)	删除表
	先 disable <表名>,后 drop <表名>
例:	disable 'user'
	drop 'user'

6)	创建命名空间
	create_namespace <命名空间名>
例:	create_namespace 'iceclean'

7)	查看所有命名空间
	list_namespace

8)	在指定的命名空间中建表
	create <命名空间名:表名>
例:	create 'iceclean:skill','live','program'
	上边在建表时,没有指定哪一个命名空间,默认就在 default 下建表

9)	删除命名空间
	要删除的命名空间必须为空(下面没有表),不为空的话得先将表删除
	drop_namespace <命名空间名>

② DML :数据的增删改查

注意:在增删操作中,最后边都可以加上时间戳手动指明时间,不加的花由系统默认生成

1)	插入数据(兼更新数据,只要指定了同一个列,就是更新)
	put <表名>,<行键>,<列族名:列名>,<>
例:	put 'user','1','info:name','iceclean'

2)	删除列族/列
	delete <表名>,<行键>,<列族名>
	delete <表名>,<行键>,<列族名:列名>
	注意:如果某个列有多个版本,删除的是最新的版本(所以老版本会跳出来)

3)	删除一整行数据
	deleteall <表名>,<行键>

4)	清空表中的数据
	truncate <表名>

5)	指定行键查询,也可以精确到列族或者列
	get <表名>,<行键>
	get <表名>,<行键>,<列族名>
	get <表名>,<行键>,<列族名:列名>
	注意:如果出现中文,可以加一个参数:{
   
   FORMATTER => "toString"}

6)	查询列,且精确到版本号
	get <表名>,<行键>,{
   
   COLUMN=><列族名:列名>,VERSIONS=><数量>}
例:	get 'user','101c',{
   
   COLUMN=>'info:name',VERSIONS=>10}
	注意,这里虽然指明了要查看 10 个版本,也确实修改了很多个版本
	但如果在建表时,该列指定保留的版本数只为 1,则这里依旧只显示 1 个版本
	因为其余的旧版本并没有被保留下来,自然就查不到啦

7)	全表扫描查询数据
	scan <表名>

8)	计算表数据量
	count <表名> 
	
9)	范围查询,左闭右开,STARTROW 缺省默认为最小,STOPROW 缺省默认为最大
	scan <表名>,{
   
   STARTROW=><行键>,STOPROW=><行键>}
例:	scan 'user',{
   
   STARTROW=>'101a',STOPROW=>'103f'}

10)	指定列名查询
	增加参数:{
   
   COLUMNS => ['<列族名1>:<列名1>', '<列族名2>:<列名2>', ...]}

11)	限制查询
	增加参数:{
   
   LIMIT => 3}

12)	查看操作日志
	其中 VERSIONS 表示每条数据最多查看到第几个版本
	scan <表名>,{
   
   RAW=>true,VERSIONS=>10}

③ 原子自增 incr

在很多情况下,我们需要某个列值进行自增,如常见的点赞收藏和阅读量等的自增
使用 put 创建的列是不支持自增的,需要使用 incr,语法如下:

icnr <表名>, <行键>, <列族名:列名>, [累加值,默认为1]

2. 过滤器:复杂查询语句

使用 get 只能通过 rowKey 查询数据
而当需要通过条件过滤查询数据时,get 做不到,就需要用到过滤器了

过滤器通常和 scan 结合使用
其实底层也是调用了 HBase 的 JavaAPI,后边 SpringBoot 整合会直接 new 出来用

① 默认过滤器

以下过滤器都有对应的 Java 实现类

种类 过滤器名 功能
行键过滤器 RowFilter 实现行键字符串的比较和过滤
PrefixFilter rowkey 前缀过滤器
KeyOnlyFilter 只对单元格的键进行过滤和显示,不显示值
FirstKeyOnlyFilter 只扫描显示相同键的第一个单元格,其键值对会显示出来
InclusiveStopFilter 替代 ENDROW 返回终止条件行
列过滤器 FamilyFilter 列簇过滤器,只显示对应列簇的数据
QualifierFilter 列标识过滤器,只显示对应列名的数据
ColumnPrefixFilter 对列名称的前缀进行过滤
MultipleColumnPrefixFilter 可以指定多个前缀对列名称过滤
ColumnRangeFilter 过滤列名称的范围
值过滤器 ValueFilter 找到符合值条件的键值对
SingleColumnValueFilter 按指定列和指定值过滤,相当于 where key [比较符] value
SingleColumnValueExcludeFilter 过滤掉匹配上的键值对
其他过滤器 ColumnPaginationFilter 对一行的所有列分页,只返回 [offset,offset+limit] 范围内的列
PageFilter 对显示结果按行进行分页显示
TimestampsFilter 时间戳过滤,支持等值,可以设置多个时间戳
ColumnCountGetFilter 限制每个逻辑行返回键值对的个数,在 get 方法中使用
DependentColumnFilter 允许用户指定一个参考列或引用列来过滤其他列的过滤器

② 比较器

无论在 Java 还是在 Shell 中,进行过滤都需要比较器辅佐进行

比较器名 功能描述 表达式缩写
BinaryComparator 匹配完整字节数组(字符串) binary:值
BinaryPrefixComparator 匹配字节数组前缀(字符串前缀) binaryprefix:值
BitComparator 匹配比特位 bit:值
NullComparator 匹配空值 null
RegexStringComparator 匹配正则表达式
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒冰小澈IceClean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值