hbase 过滤器
1.private私有化,this,构造方法,面向对象标准写法(1,2,3)2.Extends继承3.static 静态4.final 关键字5.多态6.abstract 关键字7.接口8.常用类--Scanner,object9.常用类--String10.常用类--StringBuffer11.异常问题解决12.递归13.递归举例(test)14.IO流 - File()文件的相关知识15.IO流读写文件(字节流(单个字节,字节数组),字节缓冲流(..),字符流(..),字符缓冲流(..))16.多线程17.线程安全案例18.定时器19.线程-设计模式20.网路编程21.常用类:包装类,System类,Random类,Arrays22.Collection23.泛型<>类 方法 接口24.增强for循环25.Map集合26.clickhouse27.redis 安装28.redis 命令29.Redis持久化机制与位图api30.hadoop31.mapreduce流程32.hive--学习33.数据仓库34.HBaseAPI
35.hbase 过滤器
36.hbase进阶37.HBase * 三大类过滤器:
* 1. 比较过滤器
* 2. 专用过滤器
* 3. 包装过滤器
比较运算符
* LESS <
* LESS_OR_EQUAL <=
* EQUAL =
* NOT_EQUAL <>
* GREATER_OR_EQUAL >=
* GREATER >
* NO_OP 排除所有
比较过滤器 (行键,列簇,列名,列值)
1.rowKey过滤器:RowFilter 行键过滤器
通过RowFilter与BinaryComparator过滤比rowKey 1500100010小的所有值出来
点击查看代码
/**
* 需求1:通过RowFilter与BinaryComparator过滤比rowKey 1500100010小的所有值出来
*/
@Test
public void rowFilterAndBinaryFun(){
try {
//将表名封装成TableName的对象
TableName students = TableName.valueOf("students");
//获取表的实例
Table table = conn.getTable(students);
//创建Scan对象
Scan scan = new Scan();
//创建BinaryComparator比较器
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 resultScanner = table.getScanner(scan);
//输出结果
printResultScanner(resultScanner);
}catch (Exception e){
e.printStackTrace();
}
}
列簇过滤器:FamilyFilter
通过FamilyFilter与SubstringComparator查询列簇名包含in的所有列簇下面的数据
点击查看代码
/**
* 通过FamilyFilter与SubstringComparator查询列簇名包含in的所有列簇下面的数据
*/
@Test
public void FamilyFilterAndSubstringFun(){
try {
TableName students = TableName.valueOf("students2");
Table table = conn.getTable(students);
Scan scan = new Scan();
//创建包含比较in
SubstringComparator substringComparator = new SubstringComparator("in");
//创建列簇过滤器
//public FamilyFilter(final CompareOperator op, final ByteArrayComparable familyComparator)
FamilyFilter familyFilter = new FamilyFilter(CompareOperator.EQUAL, substringComparator);
scan.setFilter(familyFilter);
ResultScanner resultScanner = table.getScanner(scan);
printResultScanner(resultScanner);
}catch (Exception e){
e.printStackTrace();
}
}
列名过滤器QualifierFilter
通过QualifierFilter与SubstringComparator查询列名包含ge的列的值
点击查看代码
/**
* 通过QualifierFilter与SubstringComparator查询列名包含 ‘级’ 的列的值
*/
@Test
public void qualifierFilterAndSubstringFun(){
try {
TableName students = TableName.valueOf("students2");
Table table = conn.getTable(students);
Scan scan = new Scan();
//创建包含比较器
SubstringComparator substringComparator = new SubstringComparator("级");
//创建列名过滤器
//public QualifierFilter(final CompareOperator op, final ByteArrayComparable qualifierComparator)
QualifierFilter qualifierFilter = new QualifierFilter(CompareOperator.EQUAL, substringComparator);
scan.setFilter(qualifierFilter);
ResultScanner scanner = table.getScanner(scan);
printResultScanner(scanner);
}catch (Exception e){
e.printStackTrace();
}
}
列值过滤器:ValueFilter
通过ValueFilter与BinaryPrefixComparator过滤出所有的cell中值以 "张" 开头的学生
只会查询出列值是张前缀的这一列,其他列不查
点击查看代码
/**
* 通过ValueFilter与BinaryPrefixComparator过滤出所有的cell中值以 "张" 开头的学生
*/
@Test
public void valueFilterAndBinaryPrefixFun(){
try {
TableName students = TableName.valueOf("students2");
Table table = conn.getTable(students);
Scan scan = new Scan();
//创建二进制前缀比较器
BinaryPrefixComparator binaryPrefixComparator = new BinaryPrefixComparator(Bytes.toBytes("张"));
//创建列值过滤器
//public ValueFilter(final CompareOperator valueCompareOp, final ByteArrayComparable valueComparator)
ValueFilter valueFilter = new ValueFilter(CompareOperator.EQUAL, binaryPrefixComparator);
scan.setFilter(valueFilter);
ResultScanner scanner = table.getScanner(scan);
printResultScanner(scanner);
}catch (Exception e){
e.printStackTrace();
}
}
专用过滤器
单列值过滤器:SingleColumnValueFilter
SingleColumnValueFilter会返回满足条件的cell所在行的所有cell的值(即会返回一行数据)
通过SingleColumnValueFilter与查询文科班所有学生信息
点击查看代码
public static void xuQiu1() throws Exception {
//获取表对象
Table students2 = HbaseTool.getOneTable("students");
Scan scan = new Scan();
//SingleColumnValueFilter
//SingleColumnValueFilter(final byte [] family, final byte [] qualifier,
// final CompareOperator op,
// final org.apache.hadoop.hbase.filter.ByteArrayComparable comparator)
SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter(Bytes.toBytes("info"), Bytes.toBytes("age"),
CompareOperator.EQUAL, new BinaryPrefixComparator(Bytes.toBytes("22")));
//设置过滤器
//Scan setFilter(Filter filter)
scan.setFilter(singleColumnValueFilter);
ResultScanner studentsScanner = students2.getScanner(scan);
for (Result rs : studentsScanner) {
HbaseTool.printResult(rs);
}
HbaseTool.close();
}
列值排除过滤器:SingleColumnValueExcludeFilter
与SingleColumnValueFilter相反,会排除掉指定的列,其他的列全部返回
通过SingleColumnValueExcludeFilter与BinaryComparator查询文科一班所有学生信息,最终不返回clazz列
点击查看代码
public static void xuQiu2() throws Exception {
//获取表对象
Table students2 = HbaseTool.getOneTable("students");
Scan scan = new Scan();
//单列值排除过滤器
//SingleColumnValueExcludeFilter(final byte[] family, final byte[] qualifier,
// final CompareOp compareOp, ByteArrayComparable comparator)
SingleColumnValueExcludeFilter singleColumnValueExcludeFilter = new SingleColumnValueExcludeFilter(Bytes.toBytes("info"), Bytes.toBytes("age"),
CompareOperator.EQUAL, new BinaryPrefixComparator(Bytes.toBytes("22")));
//设置过滤器
//Scan setFilter(Filter filter)
scan.setFilter(singleColumnValueExcludeFilter);
ResultScanner studentsScanner = students2.getScanner(scan);
for (Result rs : studentsScanner) {
HbaseTool.printResult(rs);
}
HbaseTool.close();
}
rowkey前缀过滤器:PrefixFilter
通过PrefixFilter查询以15001001开头的所有前缀的rowkey
点击查看代码
//做法1:使用比较过滤器实现,行键过滤器+前缀比较器
public static void xuQiu3() throws Exception {
//获取表对象
Table students2 = HbaseTool.getOneTable("students2");
Scan scan = new Scan();
RowFilter rowFilter = new RowFilter(CompareOperator.EQUAL, new BinaryPrefixComparator(Bytes.toBytes("15001005")));
//设置过滤器
//Scan setFilter(Filter filter)
scan.setFilter(rowFilter);
ResultScanner studentsScanner = students2.getScanner(scan);
for (Result rs : studentsScanner) {
HbaseTool.printResult(rs);
}
HbaseTool.close();
}
//做法2:专用过滤器,PrefixFilter
public static void xuQiu4() throws Exception {
//获取表对象
Table students2 = HbaseTool.getOneTable("students2");
Scan scan = new Scan();
PrefixFilter prefixFilter = new PrefixFilter(Bytes.toBytes("15001005"));
//设置过滤器
//Scan setFilter(Filter filter)
scan.setFilter(prefixFilter);
ResultScanner studentsScanner = students2.getScanner(scan);
for (Result rs : studentsScanner) {
HbaseTool.printResult(rs);
}
HbaseTool.close();
}
分页过滤器:PageFilter
查询前3页数据,每10条数据为一页
`
点击查看代码
public static void xuQiu5() throws Exception {
//获取表对象
Table students2 = HbaseTool.getOneTable("students2");
Scan scan = new Scan();
//定义页数
int pageNum = 3;
//定义每页的条数
int pageDataNum = 10;
//定义开始行
String startRowKey = "";
//创建一个分页过滤器
PageFilter pageFilter = new PageFilter(pageDataNum);
for (int i = 1; i <= pageNum; i++) {
System.out.println("=======================当前是第 " + i + " 页数据=======================");
scan.withStartRow(Bytes.toBytes(startRowKey));
scan.setFilter(pageFilter);
ResultScanner scanner = students2.getScanner(scan);
for (Result result : scanner) {
HbaseTool.printResult(result);
startRowKey = Bytes.toString(result.getRow()) + "0";
}
}
HbaseTool.close();
}
包装过滤器
SkipFilter过滤器
> SkipFilter包装一个过滤器,当被包装的过滤器遇到一个需要过滤的 KeyValue
实例时,则拓展过滤整行数据。下面是一个使用示例:
点击查看代码
public static void xuQiu1() throws Exception{
//SkipFilter
//获取表对象
Table students2 = HbaseTool.getOneTable("students2");
Scan scan = new Scan();
ValueFilter valueFilter = new ValueFilter(CompareOperator.NOT_EQUAL, new SubstringComparator("理科"));
//创建跳过过滤器
//SkipFilter(Filter filter)
SkipFilter skipFilter = new SkipFilter(valueFilter);
//设置过滤器
//Scan setFilter(Filter filter)
scan.setFilter(skipFilter);
ResultScanner studentsScanner = students2.getScanner(scan);
for (Result rs : studentsScanner) {
HbaseTool.printResult(rs);
}
HbaseTool.close();
}
WhileMatchFilter过滤器
> WhileMatchFilter 包装一个过滤器,**当被包装的过滤器遇到一个需要过滤的 KeyValue 实例时**,
**WhileMatchFilter 则结束本次扫描**,返回已经扫描到的结果。下面是其使用示例:
点击查看代码
public static void xuQiu2() throws Exception{
//WhileMatchFilter
//获取表对象
Table students2 = HbaseTool.getOneTable("students2");
Scan scan = new Scan();
ValueFilter valueFilter = new ValueFilter(CompareOperator.NOT_EQUAL, new BinaryPrefixComparator(Bytes.toBytes("黄")));
//创建WhileMatchFilter
WhileMatchFilter whileMatchFilter = new WhileMatchFilter(valueFilter);
//设置过滤器
//Scan setFilter(Filter filter)
scan.setFilter(whileMatchFilter);
ResultScanner studentsScanner = students2.getScanner(scan);
for (Result rs : studentsScanner) {
HbaseTool.printResult(rs);
}
HbaseTool.close();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!