HBase常用的Filter过滤器操作
HBase过滤器种类很多,我们选择8种常用的过滤器进行介绍。为了获得更好的示例效果,先利用HBase Shell新建students表格,并往表格中进行写入多行数据。
一、数据准备工作
(1)在默认命名空间中新建表格students,设置列族info、score。
hbase:002:0> create 'students','info','score'
2024-03-26 00:22:15,810 INFO [main] client.HBaseAdmin (HBaseAdmin.java:postOperationResult(3591)) - Operation: CREATE, Table Name: default:students, procId: 290 completed
Created table students
Took 3.1425 seconds
=> Hbase::Table - students
(2)往students表格中写入5行数据,并用scan 'students'命令查看写入结果。
hbase:005:0> put 'students','s001','info:name','Jack'
Took 30.6978 seconds
hbase:017:0> put 'students','s001','info:age','18'
Took 0.0419 seconds
hbase:019:0> put 'students','s001','score:English','95'
Took 0.0472 seconds
hbase:021:0> put 'students','s002','info:name','Tom'
Took 0.0255 seconds
hbase:022:0> put 'students','s002','info:age','20'
Took 0.0160 seconds
hbase:023:0> put 'students','s002','score:Chinese','85'
Took 0.0296 seconds
hbase:024:0> put 'students','s002','score:Math','90'
Took 0.0155 seconds
hbase:025:0> put 'students','s003','info:name','Mike'
Took 0.0188 seconds
hbase:026:0> put 'students','s003','info:age','19'
Took 0.0183 seconds
hbase:027:0> put 'students','s003','score:Chinese','90'
Took 0.0178 seconds
hbase:028:0> put 'students','s003','score:Math','95'
Took 0.0445 seconds
hbase:029:0> put 'students','s004','info:name','Lucy'
Took 0.0104 seconds
hbase:030:0> put 'students','s004','score:English','100'
Took 0.0170 seconds
hbase:031:0> put 'students','s005','info:name','Lily'
Took 0.0249 seconds
hbase:032:0> put 'students','s005','score:Chinese','99'
Took 0.0228 seconds
hbase:033:0> scan 'students'
ROW COLUMN+CELL s001 column=info:age, timestamp=2024-03-26T00:25:17.982, value=18 s001 column=info:name, timestamp=2024-03-26T00:24:39.510, value=Jack s001 column=score:English, timestamp=2024-03-26T00:25:52.207, value=95 s002 column=info:age, timestamp=2024-03-26T00:26:46.922, value=20 s002 column=info:name, timestamp=2024-03-26T00:26:26.924, value=Tom s002 column=score:Chinese, timestamp=2024-03-26T00:27:13.181, value=85 s002 column=score:Math, timestamp=2024-03-26T00:27:28.787, value=90 s003 column=info:age, timestamp=2024-03-26T00:28:08.402, value=19 s003 column=info:name, timestamp=2024-03-26T00:27:48.629, value=Mike s003 column=score:Chinese, timestamp=2024-03-26T00:28:46.714, value=90 s003 column=score:Math, timestamp=2024-03-26T00:29:01.881, value=95 s004 column=info:name, timestamp=2024-03-26T00:29:19.868, value=Lucy s004 column=score:English, timestamp=2024-03-26T00:29:44.831, value=100 s005 column=info:name, timestamp=2024-03-26T00:30:04.231, value=Lily s005 column=score:Chinese, timestamp=2024-03-26T00:30:25.477, value=99
5 row(s)
Took 0.3369 seconds
二、过滤器的使用介绍
1.ValueFilter过滤器
根据数据列单元格的值进行过滤。值过滤器的比较方式有二进制位比较(binary)和子字符串匹配比较(substring)。
(1)按二进制位进行值比较
使用get命令,查询students表格中,行键为s001,单元格值为Jack的数据结果。
#ValueFilter(=,'binary:Jack')是值过滤器,比较方式是binary二进制
hbase:034:0> get 'students','s001',{FILTER=>"ValueFilter(=,'binary:Jack')"}
COLUMN CELL info:name timestamp=2024-03-26T00:24:39.510, value=Jack
1 row(s)
Took 0.6506 seconds
使用scan命令,扫描出students表格中,单元格值为90的数据结果。
#查询结果是多条,需要用scan命令全表扫描,不能使用get命令
hbase:036:0> scan 'students',{FILTER=>"ValueFilter(=,'binary:90')"}
ROW COLUMN+CELL s002 column=score:Math, timestamp=2024-03-26T00:27:28.787, value=90 s003 column=score:Chinese, timestamp=2024-03-26T00:28:46.714, value=90
2 row(s)
Took 0.2162 seconds
(2)按子字符串匹配比较
使用get命令,查询students表格中,行键为s001,单元格值包含子字符串ac的数据结果。
hbase:037:0> get 'students','s001',{FILTER=>"ValueFilter(=,'substring:ac')"}
COLUMN CELL info:name timestamp=2024-03-26T00:24:39.510, value=Jack
1 row(s)
Took 0.1578 seconds
使用scan命令,扫描出表格students中单元格值包含子字符串0的数据结果。
#查询结果是多条,需要用scan命令全表扫描,不能使用get命令
hbase:038:0> scan 'students',{FILTER=>"ValueFilter(=,'substring:0')"}
ROW COLUMN+CELL s002 column=info:age, timestamp=2024-03-26T00:26:46.922, value=20 s002 column=score:Math, timestamp=2024-03-26T00:27:28.787, value=90 s003 column=score:Chinese, timestamp=2024-03-26T00:28:46.714, value=90 s004 column=score:English, timestamp=2024-03-26T00:29:44.831, value=100
3 row(s)
Took 0.0868 seconds
2.QualifierFilter过滤器
列限定符过滤器QualifierFilter是只根据数据列的列限定符进行过滤,并不关注列族名称。列限定符过滤器的常用比较方式为二进制位(binary)比较。
使用get命令,查询students表格中,行键为s001,列限定符为name的数据结果。
hbase:039:0> get 'students','s001',{FILTER=>"QualifierFilter(=,'binary:name')"}
COLUMN CELL info:name timestamp=2024-03-26T00:24:39.510, value=Jack
1 row(s)
Took 0.3310 seconds
使用scan命令,扫描students表格中,列限定符为name的数据结果。
hbase:041:0> scan 'students',{FILTER=>"QualifierFilter(=,'binary:name')"}
ROW COLUMN+CELL s001 column=info:name, timestamp=2024-03-26T00:24:39.510, value=Jack s002 column=info:name, timestamp=2024-03-26T00:26:26.924, value=Tom s003 column=info:name, timestamp=2024-03-26T00:27:48.629, value=Mike s004 column=info:name, timestamp=2024-03-26T00:29:19.868, value=Lucy s005 column=info:name, timestamp=2024-03-26T00:30:04.231, value=Lily
5 row(s)
Took 0.0845 seconds
3.ColumnPrefixFilter过滤器
列前缀符过滤器ColumnPrefixFilter是根据数据列的列限定符的前缀进行过滤。前缀过滤必须从第一个字符开始匹配,而子字符串过滤可以从任何位置开始进行子串匹配。前缀过滤器严格区分字母大小写。
使用get命令,查询出students表格中,行键为s002,列限定符的前缀字符串为Chi的数据结果。
hbase:042:0> get 'students','s002',{FILTER=>"ColumnPrefixFilter('Chi')"}
COLUMN CELL score:Chinese timestamp=2024-03-26T00:27:13.181, value=85
1 row(s)
Took 0.1693 seconds
使用scan命令,扫描students表格,列限定符的前缀字符串为Chi的数据结果。
hbase:044:0> scan 'students',{FILTER=>"ColumnPrefixFilter('Chi')"}
ROW COLUMN+CELL s002 column=score:Chinese, timestamp=2024-03-26T00:27:13.181, value=85 s003 column=score:Chinese, timestamp=2024-03-26T00:28:46.714, value=90 s005 column=score:Chinese, timestamp=2024-03-26T00:30:25.477, value=99
3 row(s)
Took 0.0397 seconds
4.RowFilter过滤器
行键过滤器RowFilter是根据行键对数据列进行过滤。
注意:一般不在get命令中使用行键过滤器,get命令必须指定唯一确定完整的行键,没有必要再对行键进行过滤。
(1)按二进制位比较。
使用scan命令,扫描students表格,筛选出行键值为s001的所有数据结果。
hbase:045:0> scan 'students',{FILTER=>"RowFilter(=,'binary:s001')"}
ROW COLUMN+CELL s001 column=info:age, timestamp=2024-03-26T00:25:17.982, value=18 s001 column=info:name, timestamp=2024-03-26T00:24:39.510, value=Jack s001 column=score:English, timestamp=2024-03-26T00:25:52.207, value=95
1 row(s)
Took 0.1297 seconds
(2)按子字符串匹配比较。
使用scan命令,扫描students表格,筛选出行键值包含子字符串01的所有数据结果。
hbase:046:0> scan 'students',{FILTER=>"RowFilter(=,'substring:01')"}
ROW COLUMN+CELL s001 column=info:age, timestamp=2024-03-26T00:25:17.982, value=18 s001 column=info:name, timestamp=2024-03-26T00:24:39.510, value=Jack s001 column=score:English, timestamp=2024-03-26T00:25:52.207, value=95
1 row(s)
Took 0.3426 seconds
5.PrefixFilter过滤器
行键前缀过滤器PrefixFilter是根据行键的前缀进行过滤。前缀过滤必须从行键的第一个字符开始匹配,严格区分字母大小写。
使用scan命令,扫描students表格,筛选出行键值以s00为前缀开头的数据结果。
hbase:047:0> scan 'students',{FILTER=>"PrefixFilter('s00')"}
ROW COLUMN+CELL s001 column=info:age, timestamp=2024-03-26T00:25:17.982, value=18 s001 column=info:name, timestamp=2024-03-26T00:24:39.510, value=Jack s001 column=score:English, timestamp=2024-03-26T00:25:52.207, value=95 s002 column=info:age, timestamp=2024-03-26T00:26:46.922, value=20 s002 column=info:name, timestamp=2024-03-26T00:26:26.924, value=Tom s002 column=score:Chinese, timestamp=2024-03-26T00:27:13.181, value=85 s002 column=score:Math, timestamp=2024-03-26T00:27:28.787, value=90 s003 column=info:age, timestamp=2024-03-26T00:28:08.402, value=19 s003 column=info:name, timestamp=2024-03-26T00:27:48.629, value=Mike s003 column=score:Chinese, timestamp=2024-03-26T00:28:46.714, value=90 s003 column=score:Math, timestamp=2024-03-26T00:29:01.881, value=95 s004 column=info:name, timestamp=2024-03-26T00:29:19.868, value=Lucy s004 column=score:English, timestamp=2024-03-26T00:29:44.831, value=100 s005 column=info:name, timestamp=2024-03-26T00:30:04.231, value=Lily s005 column=score:Chinese, timestamp=2024-03-26T00:30:25.477, value=99
5 row(s)
Took 0.4404 seconds
6.FamilyFilter过滤器
列族过滤器FamilyFilter是根据列族名称进行过滤。列族过滤器的比较方式有二进制位比较(binary)、子字符串匹配比较(substring)等。
(1)按二进制位比较。
使用scan命令,扫描表格students,筛选出列族名称值为info的数据结果。
hbase:005:0> scan 'students',FILTER=>"FamilyFilter(=,'binary:info')"
ROW COLUMN+CELL s001 column=info:age, timestamp=2024-03-26T00:25:17.982, value=18 s001 column=info:name, timestamp=2024-03-26T00:24:39.510, value=Jack s002 column=info:age, timestamp=2024-03-26T00:26:46.922, value=20 s002 column=info:name, timestamp=2024-03-26T00:26:26.924, value=Tom s003 column=info:age, timestamp=2024-03-26T00:28:08.402, value=19 s003 column=info:name, timestamp=2024-03-26T00:27:48.629, value=Mike s004 column=info:name, timestamp=2024-03-26T00:29:19.868, value=Lucy s005 column=info:name, timestamp=2024-03-26T00:30:04.231, value=Lily
5 row(s)
Took 0.0399 seconds
(2)按子字符串匹配比较。
使用scan命令,扫描表格students,筛选出列族名称包含子字符串s的数据结果。
hbase:008:0> scan 'students',FILTER=>"FamilyFilter(=,'substring:s')"
ROW COLUMN+CELL s001 column=score:English, timestamp=2024-03-26T00:25:52.207, value=95 s002 column=score:Chinese, timestamp=2024-03-26T00:27:13.181, value=85 s002 column=score:Math, timestamp=2024-03-26T00:27:28.787, value=90 s003 column=score:Chinese, timestamp=2024-03-26T00:28:46.714, value=90 s003 column=score:Math, timestamp=2024-03-26T00:29:01.881, value=95 s004 column=score:English, timestamp=2024-03-26T00:29:44.831, value=100 s005 column=score:Chinese, timestamp=2024-03-26T00:30:25.477, value=99
5 row(s)
Took 0.0915 seconds
7.SingleColumnValueFilter过滤器
单列值过滤器SingleColumnValueFilters是根据指定列族和列限定符的单个数据列的单元格值进行过滤,类似SQL中的”select列名from表名where列名=值”语句。
(1)按二进制位比较。
使用scan命令,扫描表格students,筛选出列族info,列限定符age的单元格值为19的数据列。
hbase:006:0> scan 'students',{COLUMN=>'info:age',FILTER=>"SingleColumnValueFilter('info','age',=,'binary:19')"}
ROW COLUMN+CELL s003 column=info:age, timestamp=2024-03-26T00:28:08.402, value=19
1 row(s)
Took 0.4166 seconds
(2)按子字符串匹配比较。
使用scan命令,扫描表格students,筛选出列族info,列限定符name的值包括子字符串y的数据。
hbase:008:0> scan 'students',{COLUMN=>'info:name',FILTER=>"SingleColumnValueFilter('info','name',=,'substring:y')"}
ROW COLUMN+CELL s004 column=info:name, timestamp=2024-03-26T00:29:19.868, value=Lucy s005 column=info:name, timestamp=2024-03-26T00:30:04.231, value=Lily
2 row(s)
Took 0.0658 seconds
相关文章:
HBase常用的Filter过滤器操作
HBase过滤器种类很多,我们选择8种常用的过滤器进行介绍。为了获得更好的示例效果,先利用HBase Shell新建students表格,并往表格中进行写入多行数据。 一、数据准备工作 (1)在默认命名空间中新建表格students…...

容器安全与防御(德迅蜂巢)
通过容器可以快速的运行应用、迁移应用、快速集成、快速部署、也提高了系统的资源利用率,因此现在越来越多的企业把应用上云,来达到快速上线应用、方便运维的目的。容器安全也逐渐地被重视起来,了解容器如何检测当前企业环境内容器环境是否安…...

【面经八股】搜广推方向:面试记录(十一)
【面经&八股】搜广推方向:面试记录(十一) 文章目录 【面经&八股】搜广推方向:面试记录(十一)1. 自我介绍2. 实习经历问答4. 编程题5. 反问1. 自我介绍 。。。。。。 2. 实习经历问答 就是对自己实习事情要足够的清晰,不熟的不要写在简历上!!! 其中,有个 …...

第十四章 MySQL
一、MySQL 1.1 MySql 体系结构 MySQL 架构总共四层,在上图中以虚线作为划分。 1. 最上层的服务并不是 MySQL 独有的,大多数给予网络的客户端/服务器的工具或者服务都有类似的架构。比如:连接处理、授权认证、安全等。 2. 第二层的架构包括…...

C++项目——集群聊天服务器项目(七)Model层设计、注册业务实现
在前几节的研究中,我们已经实现网络层与业务层分离,本节实现数据层与业务层分离,降低各层之间的耦合性,同时实现用户注册业务。 网络层专注于处理网络通信与读写事件 业务层专注于处理读写事件到来时所需求的各项业务 数据层专…...

VBA语言専攻介绍(20240331更新)
VBA语言専攻简介 “VBA语言専攻”是大家汲取知识的源泉,是提高自己能力的净土,正如我对平台的介绍:社会的进步,源于对知识的尊重和敬仰。希望每一位学员,每一位关注平台的朋友,都能很好的利用这个平台来学…...
Golang- 邮件服务,发送邮件
依赖 go get -u github.com/jordan-wright/email文档 文档 示例代码 邮箱的相关配置 # email configuration email:port: 25 # 端口要配置25 否则可能出现EOF错误from: xxx1qq.comhost: smtp.qq.comis-ssl: truesecret: xxxxxnickname: 大锦余发送邮件代码 package utili…...

C语言:编译和链接
前言 在ANSI C的任何一种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令(二进制指令)。第2种是执行环境,它用于实际执行代码。 目录 1.翻译环境1.1 预处理(预编…...

JavaEE 初阶篇-深入了解多线程安全问题(出现线程不安全的原因与解决线程不安全的方法)
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 多线程安全问题概述 1.1 线程不安全的实际例子 2.0 出现线程不安全的原因 2.1 线程在系统中是随机调度且抢占式执行的模式 2.2 多个线程同时修改同一个变量 2.3 线…...

计算机网络⑦ —— 网络层协议
1. ARP协议 在传输⼀个 IP 数据报的时候,确定了源 IP 地址和⽬标 IP 地址后,就会通过主机路由表确定 IP 数据包下⼀跳。然⽽,⽹络层的下⼀层是数据链路层,所以我们还要知道下⼀跳的 MAC 地址。由于主机的路由表中可以找到下⼀跳的…...

正弦实时数据库(SinRTDB)的使用(7)-历史统计查询
前文已经将正弦实时数据库的使用进行了介绍,需要了解的可以先看下面的博客: 正弦实时数据库(SinRTDB)的安装 正弦实时数据库(SinRTDB)的使用(1)-使用数据发生器写入数据 正弦实时数据库(SinRTDB)的使用(2)-接入OPC DA的数据 正弦实时数据库(SinRTDB)…...

编译和链接知识点
为什么我们在vs等编译器上写出的代码通过运行就会实现相关功能呢? 解决这个问题的关键就是关于编译与链接的知识。 首先从大的分类里有两部分:编译和链接 而编译这一大的部分又分为预处理(也叫预编译),编译…...

大话设计模式之工厂模式
工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需指定将要创建的对象的确切类。通过使用工厂模式,我们可以将对象的创建和使用分离,从而使代码更具灵活性和可维护性。…...
Windows MySQL通过data 文件夹恢复数据
前言 在MySql数据库中,为了备份和恢复数据,通常会使用mysqldump工具来导出和导入数据。但是,如果数据库非常大,name导出和导入数据可能会需要很长时间。这时,一种更快速的备份和恢复数据的方式就是直接复制mysql的data文件夹。 什么是mysql的…...

ARP协议定义及工作原理
ARP的定义 地址解析协议(Address Resolution Protocol,ARP):ARP协议可以将IPv4地址(一种逻辑地址)转换为各种网络所需的硬件地址(一种物理地址)。换句话说,所谓的地址解析的目标就是发现逻辑地址与物理地址的映射关系。 ARP仅用于IPv4协议&a…...

express实现用户登录和注册接口
目录 1 创建数据库2 连接数据库3 集成ORM库4 创建业务逻辑5 创建路由7 测试接口总结 我们在编写后端接口的时候操作数据库是一种常见的功能需求,express本身并不提供直接操作数据库的能力,需要借助第三方库来操作数据库,本篇讲解一下软件开发…...
数字化转型,效率增长才是王道
在当今商业世界,数字化已经成为推动企业增长的强大引擎。然而,值得注意的是,数字化并非只是简单地追求规模扩张,更重要的是实现降本增效。没有效率的增长,就像是在加速自我毁灭。在数字化转型的道路上,企业…...
RHCE-2-chrony服务器
简介 重要性 由于IT系统中,准确的计时非常重要,有很多种原因需要准确计时: 在网络传输中,数据包括和日志需要准确的时间戳 各种应用程序中,如订单信息,交易信息等 都需要准确的时间戳 Linux的两个时钟 硬…...
音频RK809
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、目的二、知识准备2.1Audio框架2.1.1 DAI2.1.2 CODEC2.1.3 machine三、原理图3.1 整体原理图3.2 喇叭部分3.3 麦克风部分四、设备树4.1 sound 部分4.2 codec 部分五、驱动讲...

解决 linux 服务器 java 命令不生效问题
在Linux系统中,当你安装Java并设置了JAVA_HOME环境变量后,你可能需要使用source /etc/profile命令来使Java命令生效。这是因为/etc/profile是一个系统级的配置文件,它包含了系统的全局环境变量设置。 但是需要注意的是,source /e…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...