hbase 常用过滤器相关知识(SingleColumnValueFiter、正则过滤器等)及踩坑

整理一下最近工作实际开发用到的各种情况吧,持续更新。因为公司内网,纯手打,兄弟们采纳的时候报错见谅,欢迎评论指出。

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

 

 

 

你可能感兴趣的:(大数据)