整理一下最近工作实际开发用到的各种情况吧,持续更新。因为公司内网,纯手打,兄弟们采纳的时候报错见谅,欢迎评论指出。
1. SingleColumnValueFiter 作用:用一列的值决定这一行的数据是否被过滤
//添加过滤器
//用于综合使用多个过滤器 其实严格来说也是一种过滤器
FilterList filterList = new FilterList();
SingleolumnValueFilter transCodeFilter = new SingleColumnValueFilter(Bytes.toBytes("C"), //列族
Bytes.toBytes("transcode"), //列名
CompareOp.EQUAL,Bytes.toBytes("transcode1") ); //值
//对于咱们要使用作为条件的列,如果这一列本身就不存在,那么如果为true,这样的行将会被过滤掉,如果为false,这样的行会包含在结果集中
transCodeFilter.setFilterIfMissing(true);
filterList .addFilter(transCodeFilter);
scan.setFilter(filterList)
踩坑:结果总不是所期望的,如果要正确使用还得必须在scan中添加上面的列 => scan.addColumn('CF','C');
确实这玩意不百度会弄得人很难受,若不想添加列,可用该过滤器:SingleColumnValueExcludeFilter
2. 正则过滤器 说是正则,其实就是RowFilter的延伸,即 RegexStringComparator
相关的过滤方法使用:
提取rowkey以01结尾数据
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new RegexStringComparator(".*01$"));
提取rowkey以包含201407的数据
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new SubstringComparator("201407"));
提取rowkey以123开头的数据
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new BinaryPrefixComparator("123".getBytes()));
以上是网上搜的,再记录一下我实际开发的正则以供参考
=> String regexString = "(F-AAM|F-BAM|F-EBANKC\(FOVA\)|F-FCF)"
+"\\d#"
+"0#201910151614#"
+"\\d{2}#"
+".*";
//解释:我的rowkey=>'F-AAM#两位任意数字#0#日期#uuid',自己对应上面来理解咯
RegexStringComparator compartor = new RegexStringComparator(regextring);
RowFilter rowFilter = new RowFilter(CompareFilter.Compare.Op.EQUAL,cmparator);
scan.setFilter(rowFilter);
其他过滤器没在实际开发用过就不厚着脸皮写了,留个大佬链接,有需要的可以去看看。
https://blog.csdn.net/cnweike/article/details/42920547