HBase Filter使用方法(二)

二、Dedicated Filtersdom

        2.1 SingleColumnValueFilter √ide

      2.2 SingleColumnValueExcludeFilter √函數

      2.3 PrefixFilter √spa

      2.4 PageFilter √code

      2.5 KeyOnlyFilter √ci

      2.6 FirstKeyOnlyFilter √get

      2.7 TimestampsFilter ×io

      2.8 RandomRowFilter √table

2.1   SingleColumnValueFilterast

             例子:Filter filter=new SingleColumnValueExcludeFilter(Bytes.toBytes(Family), Bytes.toBytes(Qualifier), CompareOp.EQUAL, Bytes.toBytes(Value));

       2.2   SingleColumnValueExcludeFilter

               使用:跟singlecolumnvaluefilter正好相反,這個是顯示錶中除了過濾的這條之外的全部數據 

               例子:

1

2

Filter filter=new SingleColumnValueExcludeFilter(Bytes.toBytes(Family), Bytes.toBytes(Qualifier), CompareOp.EQUAL, Bytes.toBytes(Value));

((SingleColumnValueExcludeFilter) filter).setFilterIfMissing(true);

注意:!須要加((SingleColumnValueExcludeFilter) filter).setFilterIfMissing(true); 

2.3   PrefixFilter   和ColumnPrefixFilter    

              使用:根據Row或Column的前綴取數據

              例子:Filter filter=new PrefixFilter(Bytes.toBytes("r"));

                    取出RowKey以r開頭的全部數據

2.4    PageFilter

               經過設置pageside返回每一頁page的數量

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

final byte[] POSTFIX = new byte[] { 0x00 };  

        HTable table;

try {

table = new HTable(config, tablename);

Filter filter = new PageFilter(pageside);  

        byte[] lastRow = null;  

        int totalRows = 0;  

        while (true) {  

            Scan scan = new Scan();  

            scan.setFilter(filter);  

            if(lastRow != null){  

                //注意這裏添加了POSTFIX操做,否則死循環了  

                byte[] startRow = Bytes.add(lastRow,POSTFIX);  

                scan.setStartRow(startRow);  

            }  

            ResultScanner scanner = table.getScanner(scan);  

            int localRows = 0;  

            Result result;  

            while((result = scanner.next()) != null){  

                System.out.println(localRows++ + ":" + result);  

                totalRows ++;  

                lastRow = result.getRow();  

            }  

            scanner.close();  

            if(localRows == 0break;  

        }  

        System.out.println("total rows:" + totalRows);  

catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

2.5    KeyOnlyFilter

              

         * 通常與其餘過濾器配合使用

 * Filter:KeyOnlyFilter(boolean lenAsVal)

 * lenAsVal默認爲假,表示不把val的長度做爲val。不然val的長度將做爲val輸出。

 * 鍵過濾器能夠簡單的設置過濾的結果集中只包含鍵而忽略值,這裏有一個選項能夠把結果集的值保存爲值的長度

             例子:Filter filter = new KeyOnlyFilter(false);  

2.6    firstkeyonlyFilter

            用法:同上,但僅會返回相同key的第一條kv

       2.8    RandomRowFilter  

              隨即的返回row的數據,構造函數爲

              RandomRowFilter(float chance)  

              chance取值爲0到1.0,若是<0則爲空,若是>1則包含全部的行。

              例子:Filter filter=new RandomRowFilter(0.5f)

相關文章
相關標籤/搜索