《Hbase葱岭探秘 过滤器Api - 数据库服务器 - 最新IT资讯_电脑知识大全_网络安全教程 -.docx》由会员分享,可在线阅读,更多相关《Hbase葱岭探秘 过滤器Api - 数据库服务器 - 最新IT资讯_电脑知识大全_网络安全教程 -.docx(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Hbase葱岭探秘过滤器Api-数据库服务器-最新IT资讯_电脑知识大全_网络安全教程-次元立方网Hbase中提供了很多的过滤器接口,以此来对数据进行过滤,使得查询出想要的数据。针对行信息进行过滤,参数中能够采用前缀匹配、按位与、或、异或以及子串匹配等匹配的方式。同时能够控制EQUAL、NOT_EQUAL选项进行控制挑选数据的条件。*行过滤器BinaryComparatorNullComparator:是不是空值*BitComparator:通过BitwiseOp类提供的按位与、或、异或操作进行位级别比拟RegexStringComparator:正则匹配*SubStringComparato
2、r:子串是不是包含进行匹配privatestaticvoidtestRowFilter()tryHTabletable=newHTable(config,testtableScanscan=newScan();scan.addColumn(col1.getBytes(),name.getBytes();/行过滤器Filterfilter=newRowFilter(CompareOp.EQUAL,newBinaryComparator(row2.getBytes();scan.setFilter(filter);ResultScannerresult=table.getScanner(scan)
3、;for(Resultres:result)log.info(行过滤器+res);/正则的行过滤器Filterfilter2=newRowFilter(CompareOp.EQUAL,newRegexStringComparator(.*.2scan.setFilter(filter2);ResultScannerresultRegx=table.getScanner(scan);for(Resultres:resultRegx)log.info(正则+res);FilterfilterSubString=newRowFilter(CompareOp.EQUAL,newSubstringCom
4、parator(w2scan.setFilter(filterSubString);ResultScannerresultSubString=table.getScanner(scan);for(Resultres:resultSubString)log.info(子串+res);table.close();catch(IOExceptione)log.error(e);列族过滤器根据列族的数据进行挑选,形式和上面的行过滤器类似,通过控制相应的参数中的挑选的条件进行相应的挑选。*列族过滤器privatestaticvoidtestFamlyFilter()tryHTabletable=newH
5、Table(config,testtableFilterfilter=newFamilyFilter(CompareOp.EQUAL,newBinaryComparator(col1.getBytes();Scanscan=newScan(row2.getBytes(),filter);ResultScannerresult=table.getScanner(scan);for(Resultres:result)log.info(res);FilterfilterNull=newFamilyFilter(CompareOp.EQUAL,newRegexStringComparator(.*.1
6、ScanscanNull=newScan(row2.getBytes(),filterNull);scanNull.addFamily(col1.getBytes();ResultScannerresultNull=table.getScanner(scanNull);if(resultNull!=null)for(Resultres:resultNull)log.info(res);elselog.info(nulltable.close();catch(IOExceptione)log.error(e);列名过滤器和上面几个过滤器类似,这里是根据列进行挑选,设置相应的条件后就能够进行相应的
7、挑选了。*列名过滤器publicstaticvoidtestColumFilter()tryHTabletable=newHTable(config,testtableFilterfilter=newQualifierFilter(CompareOp.EQUAL,newBinaryComparator(name.getBytes();Scanscan=newScan(row2.getBytes(),filter);ResultScannerresult=table.getScanner(scan);for(Resultres:result)log.info(res);Getget=newGet
8、(row2.getBytes();get.setFilter(filter);ResultresultGet=table.get(get);log.info(resultGet);table.close();catch(IOExceptione)log.info(e);参考列过滤器参考列过滤器根据列族和列限定符进行挑选,返回与参考列一样时间戳的行的所有键值对。*参考列过滤器publicstaticvoidtestDependentColumnFilter()tryHTabletable=newHTable(config,testtableFilterfilter=newDependentCol
9、umnFilter(col1.getBytes(),name.getBytes(),false);Scanscan=newScan();scan.setFilter(filter);ResultScannerresu=table.getScanner(scan);for(Resultresult:resu)log.info(result);Getget=newGet(row2.getBytes();get.setFilter(filter);Resultresult=table.get(get);log.info(result);table.close();catch(IOExceptione
10、)log.error(e);单列过滤器通过一列的值进行判定是不是需要进行过滤。*单列过滤器publicstaticvoidtestSingleColumnValueFilter()tryHTabletable=newHTable(config,testtableFilterfilter=newSingleColumnValueFilter(col1.getBytes(),name.getBytes(),CompareOp.EQUAL,wy.getBytes();Scanscan=newScan();scan.setFilter(filter);ResultScannerresult=table
11、.getScanner(scan);for(Resultres:result)log.info(res);Getget=newGet(row2.getBytes();get.setFilter(filter);ResultresultGet=table.get(get);log.info(resultGet);table.close();catch(IOExceptione)log.info(e);前缀过滤器根据前缀进行匹配行键的数据,本例中给出的是以row为前缀的行的数据。*前缀过滤器publicstaticvoidtestPrefixFilter()tryHTabletable=newHT
12、able(config,testtableFilterfilter=newPrefixFilter(row.getBytes();Scanscan=newScan();scan.setFilter(filter);ResultScannerresult=table.getScanner(scan);for(Resultres:result)log.info(res+res);Getget=newGet(row2.getBytes();ResultresultGet=table.get(get);log.info(get+resultGet);table.close();catch(IOExce
13、ptione)log.info(e);分页过滤器通过pageFilter设置一页中数据的条数,注意,在重新设置起始行的时候,要使得新的行和数据库中有区别,否则,会死循环无法停止。*分页过滤器publicstaticvoidtestPageFilter()tryHTabletable=newHTable(config,testtableFilterfilter=newPageFilter(10);inttotalRows=0;bytelastRow=null;Scanscan=newScan();while(true)scan.setFilter(filter);if(lastRow!=null
14、)/加上0后表示新的开场防止row的内容一样造成死循环bytestartRow=Bytes.add(lastRow,POSTFIX);scan.setStartRow(startRow);ResultScannerresultScan=table.getScanner(scan);intlocalRows=0;Resultresult=resultScan.next();while(result!=null)log.info(result);localRows+;totalRows+;lastRow=result.getRow();result=resultScan.next();if(loc
15、alRows=0)break;log.info(totalRows);table.close();catch(IOExceptione)log.info(e);*列分页过滤publicstaticvoidtestColumnPaginationFilter()tryHTabletable=newHTable(config,testtableFilterfilter=newColumnPaginationFilter(5,10);Scanscan=newScan();scan.setFilter(filter);ResultScannerresult=table.getScanner(scan)
16、;for(Resultres:result)log.info(res);table.close();catch(IOExceptione)log.info(e);Skip过滤器与ValueFilter结合使用,假如一行中某一列不符合要求的话直接被过滤掉。*跳过过滤器publicstaticvoidtestSkipFilter()tryHTabletable=newHTable(config,testtableFilterfilt=newValueFilter(CompareOp.NOT_EQUAL,newBinaryComparator(v.getBytes();ScanscanValue=n
17、ewScan();scanValue.setFilter(filt);ResultScannerress=table.getScanner(scanValue);for(Resultresult:ress)log.info(+result);Filterfilter=newSkipFilter(filt);Scanscan=newScan();scan.setFilter(filter);ResultScannerresult=table.getScanner(scan);for(Resultres:result)log.info(+res);table.close();catch(IOExc
18、eptione)log.info(e);全匹配过滤器在碰到某个条件之前的数据全部查询出来,直到碰到知足该条件的数据之后结束查询。*全匹配过滤器publicstaticvoidtestWhileMatch()tryHTabletable=newHTable(config,testtableFilterfilt=newRowFilter(CompareOp.NOT_EQUAL,newBinaryComparator(row6.getBytes();Scanscan=newScan();scan.setFilter(filt);ResultScannerresults=table.getScanne
19、r(scan);for(Resultres:results)log.info(+res);Filterfilter=newWhileMatchFilter(filt);scan.setFilter(filter);ResultScannerresultScan=table.getScanner(scan);for(Resultres:resultScan)log.info(+res);table.close();catch(IOExceptione)log.info(e);过滤器组合能够将上面的过个过滤器放在一个List中,然后构成多个过滤器的组合的形式进行过滤。*过滤器组合publicsta
20、ticvoidtestFilterList()ListFilterfilterList=newArrayListFilterFilterfilter1=newSingleColumnValueFilter(col1.getBytes(),name.getBytes(),CompareOp.EQUAL,x.getBytes();filterList.add(filter1);Filterfilter2=newRowFilter(CompareOp.NOT_EQUAL,newBinaryComparator(row2.getBytes();filterList.add(filter2);FilterListfilters=newFilterList(filterList);Scanscan=newScan();scan.setFilter(filters);tryHTabletable=newHTable(config,testtableResultScannerresult=table.getScanner(scan);for(Resultres:result)log.info(res);table.close();catch(IOExceptione)log.info(e);转载注明出处::/