Hbase中的过滤器_比较过滤器

news/2024/11/20 16:50:58/文章来源:https://www.cnblogs.com/w-ll/p/18558720
  • 概念

HBase 的基本 API,包括增、删、改、查等。
增、删都是相对简单的操作,与传统的 RDBMS 相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根据行键的范围来查询(Scan)。
HBase 不仅提供了这些简单的查询,而且提供了更加高级的过滤器(Filter)来查询。
过滤器可以根据列族、列、版本等更多的条件来对数据进行过滤,
基于 HBase 本身提供的三维有序(行键,列,版本有序),这些过滤器可以高效地完成查询过滤的任务,带有过滤器条件的 RPC 查询请求会把过滤器分发到各个 RegionServer(这是一个服务端过滤器),这样也可以降低网络传输的压力。
使用过滤器至少需要两类参数:
一类是抽象的操作符,另一类是比较器

  • 作用

过滤器的作用是在服务端判断数据是否满足条件,然后只将满足条件的数据返回给客户端

  • 种类

过滤器的类型很多,但是可以分为三大类:
比较过滤器:可应用于rowkey、列簇、列、列值过滤器
专用过滤器:只能适用于特定的过滤器
包装过滤器:包装过滤器就是通过包装其他过滤器以实现某些拓展的功能。

  • 比较过滤器

所有比较过滤器均继承自 CompareFilter。创建一个比较过滤器需要两个参数,分别是比较运算符比较器实例

  • 比较运算符

LESS <
LESS_OR_EQUAL <=
EQUAL =
NOT_EQUAL <>
GREATER_OR_EQUAL >=
GREATER >
NO_OP 排除所有

  • 常见的六大比较器
  • 1、BinaryComparator

等值比较器

  • 2、BinaryPrefixComparator

前缀比较器,只是比较左端前缀的数据是否相同

  • 3、NullComparator

判断给定的是否为空

  • 4、BitComparator

按位比较

  • 5、RegexStringComparator

提供一个正则的比较器,仅支持 EQUAL 和非EQUAL

  • 6、SubstringComparator

包含比较器,判断提供的子串是否出现在中

一、RowFilter 行键过滤器

需求:通过RowFilter与BinaryComparator过滤比rowKey 1500100010小的所有值出来

import com.wll.utils.HbaseTool;
import org.apache.hadoop.hbase.CompareOperator;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.filter.BinaryComparator;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.util.Bytes;public class HbaseBiJiaoFilter {public static void main(String[] args) throws Exception{//通过RowFilter与BinaryComparator过滤比rowKey 1500100010小的所有值出来xuQiu1();}public static void xuQiu1() throws Exception{//通过RowFilter与BinaryComparator过滤比rowKey 1500100010小的所有值出来//获取表对象Table students = HbaseTool.getOneTable("students");//全表查询Scan scan = new Scan();//创建等值比较器BinaryComparator binaryComparator = new BinaryComparator(Bytes.toBytes("1500100010"));//创建行键过滤器//public RowFilter(final CompareOperator op,final ByteArrayComparable rowComparator)RowFilter rowFilter = new RowFilter(CompareOperator.LESS, binaryComparator);//设置过滤器scan.setFilter(rowFilter);ResultScanner scanner = students.getScanner(scan);for (Result result : scanner) {HbaseTool.printResult(result);}HbaseTool.close();}
}

二、列簇过滤器:FamilyFilter

需求:通过FamilyFilter与SubstringComparator查询列簇名包含in的所有列簇下面的数据

public static void xuQiu2() throws Exception{//通过FamilyFilter与SubstringComparator查询列簇名包含in的所有列簇下面的数据//获取表对象Table students = HbaseTool.getOneTable("students");//全表查询Scan scan = new Scan();//创建包含比较器SubstringComparator in = new SubstringComparator("in");//创建列簇过滤器FamilyFilter familyFilter = new FamilyFilter(CompareOperator.EQUAL, in);//设置过滤器scan.setFilter(familyFilter);ResultScanner scanner = students.getScanner(scan);for (Result result : scanner) {HbaseTool.printResult(result);}HbaseTool.close();}

三、列名过滤器:QualifierFilter

需求:通过QualifierFilter与SubstringComparator查询列名包含na的列的值

public static void xuQiu3() throws Exception{
//        通过QualifierFilter与SubstringComparator查询列名包含na的列的值//获取表对象Table students = HbaseTool.getOneTable("students");//全表查询Scan scan = new Scan();//创建包含比较器SubstringComparator in = new SubstringComparator("na");//创建列名过滤器QualifierFilter qualifierFilter = new QualifierFilter(CompareOperator.EQUAL, in);//设置过滤器scan.setFilter(qualifierFilter);ResultScanner scanner = students.getScanner(scan);for (Result result : scanner) {HbaseTool.printResult(result);}HbaseTool.close();}

四、列值过滤器:ValueFilter

需求:通过ValueFilter与BinaryPrefixComparator过滤出所有的cell中值以 "张" 开头的学生
只会查询出列值是张前缀的这一列,其他列不查

public static void xuQiu4() throws Exception{
//        通过ValueFilter与BinaryPrefixComparator过滤出所有的cell中值以 "张" 开头的学生//获取表对象Table students = HbaseTool.getOneTable("students");//全表查询Scan scan = new Scan();//创建前缀比较器BinaryPrefixComparator binaryPrefixComparator = new BinaryPrefixComparator(Bytes.toBytes("张"));//创建列值过滤器ValueFilter valueFilter = new ValueFilter(CompareOperator.EQUAL, binaryPrefixComparator);//设置过滤器scan.setFilter(valueFilter);ResultScanner scanner = students.getScanner(scan);for (Result result : scanner) {HbaseTool.printResult(result);}HbaseTool.close();}

五、组合过滤器

需求:查询列名叫name且,列值以'张'开头的

public static void xuQiu5() throws Exception{//查询列名叫name且,列值以'张'开头的//获取表对象Table students = HbaseTool.getOneTable("students");//全表查询Scan scan = new Scan();//创建等值比较器BinaryComparator binaryComparator = new BinaryComparator(Bytes.toBytes("name"));//创建前缀比较器BinaryPrefixComparator binaryPrefixComparator = new BinaryPrefixComparator(Bytes.toBytes("张"));//创建列名过滤器QualifierFilter qualifierFilter = new QualifierFilter(CompareOperator.EQUAL, binaryComparator);//创建列值过滤器ValueFilter valueFilter = new ValueFilter(CompareOperator.EQUAL, binaryPrefixComparator);//创建过滤器集合FilterList filterList = new FilterList();//添加过滤器到过滤器集合中filterList.addFilter(qualifierFilter);filterList.addFilter(valueFilter);//设置过滤器scan.setFilter(filterList);ResultScanner scanner = students.getScanner(scan);for (Result result : scanner) {HbaseTool.printResult(result);}HbaseTool.close();}

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

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

相关文章

CH592工具更新说明

①首先拔除电脑上的所有串口工具,再插入我们需要烧录程序的串口,确保能找到我们要下载固件的COM口,一般同一个串口工具在同一台电脑上所分配的COM号是唯一的 ②打开工具,点击Search Device,会跳出对应的COM号③搜索到COM号后可以拔掉串口,开始硬件接线,VCC接串口3V3,GN…

批量解除 此文件来自其他计算机,可能被阻止以帮助保护该计算机

下载微软工具 - Streams https://learn.microsoft.com/en-us/sysinternals/downloads/ streams -s -d D:/file留待后查,同时方便他人 联系我:renhanlinbsl@163.com

使用linq查询报错English Message : Join a needs to be the same as OrderBy it

可以使用 .Select 和 .MergeTable() 将多表结果集变成单表:这样问题就可以解决了

【淘汰9成NLP工程师的常识题】LSTM的前向计算如何进行加速?

【淘汰9成NLP工程师的常识题】LSTM的前向计算如何进行加速? 重要性:★★★ 💯 这是我常用的【淘汰9成NLP工程师的常识题】LSTM的前向计算如何进行加速? 重要性:★★★ 💯这是我常用的一个面试题。看似简单的基础题,但在面试中能准确回答的不足10% ,常识题的错误反而会…

【论文阅读笔记】多模态大语言模型必读 —— LLaVA

LLaVA (Large Language and Vision Assistant),proposed by Haotian Liu (UWM), et al.论文地址:https://arxiv.org/abs/2304.08485 代码地址:https://github.com/haotian-liu/LLaVA目录简介Visual Instruction 数据生成视觉指令微调模型架构训练 简介 人类对于世界的认知是…

接口文档和编写接口测试用例

一、熟悉接口文档和分析接口 1、发送接口文档 2、分析接口文档 3、了解需要测试接口,分析需求文档接口请求参数:接口返回参数:成功整理接口:(自己项目有哪些借款) cms项目接口:查询接口,登录接口,添加用户接口,用户管理接口,文章管理接口,删除用户接口,删除栏目接…

python代码实现RNN, LSTM, GRU

安装torch, transformers, loguru(本代码实现为下方版本,其余版本实现可比葫芦画瓢自行摸索)pip install torch==1.13.1 transformers==4.44.1 numpy==1.26.4 loguru -i https://pypi.tuna.tsinghua.edu.cn/simple/RNN:Recurrent Neural Network,网络结构如下图所示:import nu…

ChatGPT国内中文版镜像网站整理合集(2024/11/20)

ChatGPT 镜像站的用途 镜像站(Mirror Site)ChatGPT镜像网站是指通过复制原始网站内容和结构,创建的备用网站。其主要目的是在原始网站无法访问时,提供相同或类似的服务和信息。​ 一、ChatGPT中文镜像站 ① yixiaai.com 支持4o以及o1,支持MJ绘画 ② chat.lify.vip 支持通用…

鸿蒙NEXT开发案例:随机数生成

【引言】 本项目是一个简单的随机数生成器应用,用户可以通过设置随机数的范围和个数,并选择是否允许生成重复的随机数,来生成所需的随机数列表。生成的结果可以通过点击“复制”按钮复制到剪贴板。 【环境准备】 • 操作系统:Windows 10• 开发工具:DevEco Studio NEXT Be…

13、优化器_(执行计划、统计信息)_1

执行计划 一个SQL文本,经过解析,经过解析之后,oracle发现有很多种执行方案,然后oracle在这多种执行方案中,选出一种oracle认为最优的一种执行方案,来作为执行计划,然后oracle按照执行计划一步步去执行 因为oracle有多种的执行方案,但是,有的执行方案快,有的执行方案慢…