hbase的過濾器有不少:大體分爲兩大類:比較過濾器和專用過濾器,過濾器的做用是在服務端判斷數據是否知足條件,而後只將知足條件的數據返回給客戶端;
hbase 過濾器的比較運算符:數組
LESS ----- < LESS_OR_EQUAL ----- <= EQUAL ----- = NOT_EQUAL ----- <> GREATER_OR_EQUAL ----- >= GREATER ----- > NO_OP #排除全部
HBase 過濾器的比較器(指定比較機制):ide
BinaryComparator 按字節索引順序比較指定字節數組,採用 Bytes.compareTo(byte[]) BinaryPrefixComparator 跟前面相同,只是比較左端的數據是否相同 NullComparator 判斷給定的是否爲空 BitComparator 按位比較 RegexStringComparator 提供一個正則的比較器,僅支持 EQUAL 和非 EQUAL SubstringComparator 判斷提供的子串是否出如今 value 中。
//行鍵過濾器 RowFilter Filter filter1 = new RowFilter(CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("user0000"))); scan.setFilter(filter1);
//列簇過濾器 FamilyFilter Filter filter1 = new FamilyFilter(CompareOp.LESS, new BinaryComparator(Bytes.toBytes("base_info"))); scan.setFilter(filter1);
//列過濾器 QualifierFilter Filter filter = new QualifierFilter(CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("name"))); scan.setFilter(filter1);
//值過濾器 ValueFilter Filter filter = new ValueFilter(CompareOp.EQUAL, new SubstringComparator("zhangsan") ); scan.setFilter(filter1);
//時間戳過濾器 TimestampsFilter List<Long> tss = new ArrayList<Long>(); tss.add(1495398833002l); Filter filter1 = new TimestampsFilter(tss); scan.setFilter(filter1);
//單列值過濾器 SingleColumnValueFilter ----會返回知足條件的整行 SingleColumnValueFilter filter = new SingleColumnValueFilter( Bytes.toBytes("colfam1"), Bytes.toBytes("col-5"), CompareFilter.CompareOp.NOT_EQUAL, new SubstringComparator("val-5")); filter.setFilterIfMissing(true); //若是不設置爲 true,則那些不包含指定 column 的行也會返回 scan.setFilter(filter1);
//單列值排除器 SingleColumnValueExcludeFilter -----返回排除了該列的結果 SingleColumnValueExcludeFilter filter = new SingleColumnValueExcludeFilter( Bytes.toBytes("colfam1"), Bytes.toBytes("col-5"), CompareFilter.CompareOp.NOT_EQUAL, new SubstringComparator("val-5")); filter.setFilterIfMissing(true); //若是不設置爲 true,則那些不包含指定 column 的行也會返回 scan.setFilter(filter1);
//前綴過濾器 PrefixFilter----針對行鍵 Filter filter = new PrefixFilter(Bytes.toBytes("row1")); scan.setFilter(filter1);
//列前綴過濾器 ColumnPrefixFilter Filter filter = new ColumnPrefixFilter(Bytes.toBytes("qual2")); scan.setFilter(filter1);
實戰案例:oop
public class HBase_Filter01 { private static String ZK_KEY = "hbase.zookeeper.quorum"; private static String ZK_VALUE = "hadoop01:2181,hadoop02:2181,hadoop03:2181"; private static Configuration conf; private static Connection connection; private static Admin admin; static { conf = HBaseConfiguration.create(); conf.set(ZK_KEY,ZK_VALUE); try { connection= ConnectionFactory.createConnection(conf); admin=connection.getAdmin(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { Scan scan=new Scan(); ValueFilter filter = new ValueFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("a")); scan.setFilter(filter); TableName tableName =TableName.valueOf("user_info"); try { Table table = connection.getTable(tableName); ResultScanner scanner = table.getScanner(scan); Iterator<Result> iterator=scanner.iterator(); while(iterator.hasNext()){ Result result = iterator.next(); System.out.println(result.list()); byte[] row = result.getRow(); System.out.println(new String(row)); } } catch (IOException e) { e.printStackTrace(); } } }