HBase過濾器[RowFilter]之比較過濾器

RowFilter是用來對(duì)rowkey進(jìn)行過濾的,比較符如下:

添加數(shù)據(jù)

 /** 
    * @Description: 向Hbase表中插入單條數(shù)據(jù) 
    * @Param:  tableName 表名
    * @Param:  rowKey 唯一標(biāo)識(shí)
    * @Param:  cfName 列族名
    * @Param:  qualifier 列標(biāo)識(shí)
    * @Param:  data 數(shù)據(jù)
    * @return:  是否插入成功
    * @Author: zhoucan
    * @Date: 2018/8/2 
    */  
    public static boolean putRow(String tableName,String rowKey,String cfName,String qualifier,String data){


        try(Table table = HBaseConn.getTable(tableName)){

            Put put = new Put(Bytes.toBytes(rowKey));
            put.addColumn(Bytes.toBytes(cfName),Bytes.toBytes(qualifier),Bytes.toBytes(data));
            table.put(put);

        }catch (IOException e){
            e.printStackTrace();
        }




        return true;
    }


    @Test
    public void addData(){

        HBaseUtil.putRow("FileTable","rowkey0","fileInfo","name","file0.txt");
        HBaseUtil.putRow("FileTable","rowkey0","fileInfo","type","txt");
        HBaseUtil.putRow("FileTable","rowkey0","fileInfo","size","1014");
        HBaseUtil.putRow("FileTable","rowkey0","saveInfo","creator","zhoucan");

        HBaseUtil.putRow("FileTable","rowkey1","fileInfo","name","file1.txt");
        HBaseUtil.putRow("FileTable","rowkey1","fileInfo","type","txt");
        HBaseUtil.putRow("FileTable","rowkey1","fileInfo","size","1024");
        HBaseUtil.putRow("FileTable","rowkey1","saveInfo","creator","zhoucan");

        HBaseUtil.putRow("FileTable","rowkey2","fileInfo","name","file2.txt");
        HBaseUtil.putRow("FileTable","rowkey2","fileInfo","type","txt");
        HBaseUtil.putRow("FileTable","rowkey2","fileInfo","size","1025");
        HBaseUtil.putRow("FileTable","rowkey2","saveInfo","creator","zhoucan");

        HBaseUtil.putRow("FileTable","rowkey3","fileInfo","name","a.jpg");
        HBaseUtil.putRow("FileTable","rowkey3","fileInfo","type","jpg");
        HBaseUtil.putRow("FileTable","rowkey3","fileInfo","size","11025");
        HBaseUtil.putRow("FileTable","rowkey3","saveInfo","creator","wuchao");

        HBaseUtil.putRow("FileTable","rowkey4","fileInfo","name","file4.txt");
        HBaseUtil.putRow("FileTable","rowkey4","fileInfo","type","txt");
        HBaseUtil.putRow("FileTable","rowkey4","fileInfo","size","10251");
        HBaseUtil.putRow("FileTable","rowkey4","saveInfo","creator","fangshuo");

        HBaseUtil.putRow("FileTable","rowkey5","fileInfo","name","file5.png");
        HBaseUtil.putRow("FileTable","rowkey5","fileInfo","type","png");
        HBaseUtil.putRow("FileTable","rowkey5","fileInfo","size","10225");
        HBaseUtil.putRow("FileTable","rowkey5","saveInfo","creator","wuchao");

}

1.RowFilter

//過濾器練習(xí)
     //過濾器練習(xí)
    @Test
    public void rowFilterTest(){


        String[] qualifiers = new String[]{"name","size"};

        rowFilter("FileTable","fileInfo",qualifiers,"rowkey3",CompareOperator.LESS_OR_EQUAL);

    }




    //基于行鍵過濾器
    public void rowFilter(String tableName,String cfName,String[] qualifiers,String rowkey,CompareOperator operator){


        try(Table table = HBaseConn.getTable(tableName)){

            Scan scan = new Scan();


            for(String name:qualifiers){

                scan.addColumn(Bytes.toBytes(cfName),Bytes.toBytes(name));
            }


          //行過濾器
            Filter filter = new RowFilter(operator,new BinaryComparator(Bytes.toBytes(rowkey)));

            scan.setCaching(1000);

            scan.setFilter(filter);

            ResultScanner scanner = table.getScanner(scan);


            scanner.forEach(result -> {

                if (result != null){
                    System.out.println("rowkey="+Bytes.toString(result.getRow()));
                    System.out.println("fileName="+Bytes.toString(result.getValue(Bytes.toBytes("fileInfo"),Bytes.toBytes("name"))));
                    System.out.println("szie="+Bytes.toString(result.getValue(Bytes.toBytes("fileInfo"),Bytes.toBytes("size"))));
                }

            });




            scanner.close();



        }catch (IOException e){
            e.printStackTrace();
        }



    }

結(jié)果:

rowkey=rowkey0
fileName=file0.txt
szie=1014
rowkey=rowkey1
fileName=file1.txt
szie=1024
rowkey=rowkey2
fileName=file2.txt
szie=1025
rowkey=rowkey3
fileName=a.jpg
szie=11025

總結(jié):

1.
//Get the column from the specified family with the specified qualifier.
public Scan addColumn(byte [] family, byte [] qualifier)

上面返回特定列族特定列,注釋掉下面,則返回rowkey對(duì)應(yīng)的所有數(shù)據(jù)

for(String name:qualifiers){                
  scan.addColumn(Bytes.toBytes(cfName),Bytes.toBytes(name));
 }

2. /**
   * 參數(shù)詳情介紹下圖所示
   * @param op the compare op for row matching
   * @param rowComparator the comparator for row matching
   */
  public RowFilter(final CompareOperator op,
                   final ByteArrayComparable rowComparator) {
    super(op, rowComparator);
  }



//比較運(yùn)算符
public enum CompareOperator {
  // Keeps same names as the enums over in filter's CompareOp intentionally.
  // The convertion of operator to protobuf representation is via a name comparison.
  /** less than */
  LESS,
  /** less than or equal to */
  LESS_OR_EQUAL,
  /** equals */
  EQUAL,
  /** not equal */
  NOT_EQUAL,
  /** greater than or equal to */
  GREATER_OR_EQUAL,
  /** greater than */
  GREATER,
  /** no operation */
  NO_OP,
}
過濾器比較運(yùn)算符和比較器
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 一、簡介 Hbase:全名Hadoop DataBase,是一種開源的,可伸縮的,嚴(yán)格一致性(并非最終一致性)的分...
    菜鳥小玄閱讀 2,411評(píng)論 0 12
  • 學(xué)著多點(diǎn)耐心~
    禧珍閱讀 310評(píng)論 3 3
  • 想過分手會(huì)是怎樣的情景,卻沒想過是這樣的平靜。 想起那個(gè)小心翼翼問我是不是這樣拖手的你,想起那個(gè)一早滿頭大汗抱著花...
    記憶時(shí)光機(jī)閱讀 151評(píng)論 0 0