• java实现Hbase中的查询(一)Filter方式


    1、需要的jar包:

    commons-codec-1.4.jar

    commons-logging-1.0.4.jar

    hadoop-0.20.2-core.jar

    hbase-0.20.6.jar

    log4j-1.2.15.jar

    zookeeper-3.2.2.jar

    2、已有表结构:

    1、表名:scores

    2、列族:

    course:art

    course:math

    grade:

       

    3、scan 'scores'的内容:

    ROW                          COLUMN+CELL                                                                     
     Jerry                       column=course:art, timestamp=1301294630194, value=80                            
     Jerry                       column=course:math, timestamp=1301294630132, value=100                          
     Jerry                       column=grade:, timestamp=1301294630073, value=2                                 
     Jim                         column=course:art, timestamp=1301294630363, value=97                            
     Jim                         column=course:math, timestamp=1301294630305, value=100                          
     Jim                         column=grade:, timestamp=1301294630247, value=3                                 
     Tom                         column=course:art, timestamp=1301294630015, value=97                            
     Tom                         column=course:math, timestamp=1301294629987, value=87                           
     Tom                         column=grade:, timestamp=1301294629931, value=1

    4、代码:

    [java:nogutter] view plaincopy
    1. package org.myhbase;  
    2.   
    3. import java.io.IOException;  
    4. import java.util.ArrayList;  
    5. import java.util.List;  
    6.   
    7. import org.apache.hadoop.conf.Configuration;  
    8. import org.apache.hadoop.hbase.HBaseConfiguration;  
    9. import org.apache.hadoop.hbase.KeyValue;  
    10. import org.apache.hadoop.hbase.client.Get;  
    11. import org.apache.hadoop.hbase.client.HTable;  
    12. import org.apache.hadoop.hbase.client.Result;  
    13. import org.apache.hadoop.hbase.client.ResultScanner;  
    14. import org.apache.hadoop.hbase.client.Scan;  
    15. import org.apache.hadoop.hbase.filter.FilterList;  
    16. import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;  
    17. import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;  
    18. import org.apache.hadoop.hbase.io.Cell;  
    19. import org.apache.hadoop.hbase.util.Bytes;  
    20.   
    21. public class HBaseBasic03 {  
    22.     private static HBaseConfiguration hbaseConfig=null;  
    23.     static{  
    24.         Configuration config=new Configuration();  
    25.         config.set("hbase.zookeeper.quorum","192.168.10.149,192.168.10.44,192.168.10.49");  
    26.         config.set("hbase.zookeeper.property.clientPort", "2181");  
    27.         hbaseConfig=new HBaseConfiguration(config);  
    28.     }  
    29.       
    30.     /** 
    31.      * get方式,通过rowKey查询 
    32.      * @param tablename 
    33.      * @param rowKey 
    34.      * @throws IOException 
    35.      */  
    36.     public static void selectByRowKey(String tablename,String rowKey) throws IOException{  
    37.         HTable table=new HTable(hbaseConfig,tablename);  
    38.         Get g = new Get(Bytes.toBytes(rowKey));  
    39.         Result r=table.get(g);  
    40.         for(KeyValue kv:r.raw()){  
    41.             System.out.println("column: "+new String(kv.getColumn()));  
    42.             System.out.println("value: "+new String(kv.getValue()));  
    43.         }  
    44.     }  
    45.       
    46.     /** 
    47.      * get方式,通过rowKey、column查询 
    48.      * @param tablename 
    49.      * @param rowKey 
    50.      * @param column 
    51.      * @throws IOException 
    52.      */  
    53.     public static void selectByRowKeyColumn(String tablename,String rowKey,String column) throws IOException{  
    54.         HTable table=new HTable(hbaseConfig,tablename);  
    55.         Get g = new Get(Bytes.toBytes(rowKey));  
    56.         g.addColumn(Bytes.toBytes(column));  
    57.         Result r=table.get(g);  
    58.         for(KeyValue kv:r.raw()){  
    59.             System.out.println("column: "+new String(kv.getColumn()));  
    60.             System.out.println("value: "+new String(kv.getValue()));  
    61.         }  
    62.     }  
    63.       
    64.       
    65.     public static void selectByFilter(String tablename,List<String> arr) throws IOException{  
    66.         HTable table=new HTable(hbaseConfig,tablename);  
    67.         FilterList filterList = new FilterList();  
    68.         Scan s1 = new Scan();  
    69.         for(String v:arr){ // 各个条件之间是“与”的关系  
    70.             String [] s=v.split(",");  
    71.             filterList.addFilter(new SingleColumnValueFilter(Bytes.toBytes(s[0]),  
    72.                                                              Bytes.toBytes(s[1]),  
    73.                                                              CompareOp.EQUAL,Bytes.toBytes(s[2])  
    74.                                                              )  
    75.             );  
    76.             // 添加下面这一行后,则只返回指定的cell,同一行中的其他cell不返回  
    77. //          s1.addColumn(Bytes.toBytes(s[0]), Bytes.toBytes(s[1]));  
    78.         }  
    79.         s1.setFilter(filterList);  
    80.         ResultScanner ResultScannerFilterList = table.getScanner(s1);  
    81.         for(Result rr=ResultScannerFilterList.next();rr!=null;rr=ResultScannerFilterList.next()){  
    82.             for(KeyValue kv:rr.list()){  
    83.                 System.out.println("row : "+new String(kv.getRow()));  
    84.                 System.out.println("column : "+new String(kv.getColumn()));  
    85.                 System.out.println("value : "+new String(kv.getValue()));  
    86.             }  
    87.         }  
    88.     }  
    89.       
    90.     public static void main(String [] args) throws IOException{  
    91.           
    92.         // 按rowkey查询,查询Tom行的所有cell  
    93.         HBaseBasic03.selectByRowKey("scores","Tom");  
    94.           
    95.         // 按rokey 和 column 来查询,查询Tom行course列族的所有列值  
    96.         HBaseBasic03.selectByRowKeyColumn("scores","Tom","course");  
    97.           
    98.         // Filter多条件查询,条件:查询 course列族中art列值为97 ,且 course列族中math列值为100的行  
    99.         List<String> arr=new ArrayList<String>();  
    100.         arr.add("course,art,97");  
    101.         arr.add("course,math,100");  
    102.         HBaseBasic03.selectByFilter("scores",arr);  
    103.           
    104.     }  
    105.       

  • 相关阅读:
    友盟推送
    主流推送平台分析
    “完成”的定义和测试的职责
    HDU 1069 Monkey and Banana
    HDU 5587 Array
    ACM组队安排(hdu校赛)
    逆袭指数(hdu校赛)
    玩骰子(hdu校赛)
    Codeforce 546 A. Soldier and Bananas
    Codeforce 546 B. Soldier and Badges
  • 原文地址:https://www.cnblogs.com/end/p/2652455.html
Copyright © 2020-2023  润新知