Hbase scan通過rowkey條件查詢

Configuration config = new Configuration();
config.set("hbase.zookeeper.quorum", "10.1.1.1");//需根據hbase配置進行設置
HBaseConfiguration hbaseConfig = new HBaseConfiguration(config);

Scan scan = new Scan();
scan.setStartRow(Bytes.toBytes(time1+uid));
scan.setStopRow(Bytes.toBytes(time2+uid));
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new RegexStringComparator(".*"+uid));
scan.setFilter(filter);

ResultScanner rs = null;
HTable table = new HTable(hbaseConfig, Bytes.toBytes(tableName));
String rowkey = null;
rs = table.getScanner(scan);
for (Result r : rs) {
    for (KeyValue kv : r.list()) {
        rowkey = Bytes.toString(kv.getRow());
        System.out.println(rowkey);
    }   
}

一般rowkey的名字是uuid+time. 如果只想用uuid模糊查詢,可以這樣。


public static List<Map<String,String>> getList(String tableName,String starttime,String stoptime,String uuid,String muuid) throws IOException{
			 HTablePool pool = new HTablePool(configuration, 1000);	 
			 uuid = "285836d1-cc0f-11e7-982d-00163e32a1d5";
		/*	 Filter filter1 = new SingleColumnValueFilter(Bytes
						.toBytes("MpsId"), null, CompareOp.EQUAL, Bytes
						.toBytes(muuid));*/
          //時間段查詢
            Scan scan = new Scan();
            scan.addFamily(Bytes.toBytes("automate"));
            scan.setStartRow(Bytes.toBytes(uuid+"_"+starttime));
            scan.setStopRow(Bytes.toBytes(uuid+"_"+stoptime));
         //   scan.setFilter(filter1);
            List<Map<String, String>> list = new ArrayList<>();
            Map<String, String> maps = new LinkedHashMap<>();
           
            ResultScanner scanner1 = pool.getTable(tableName).getScanner(scan);
            //ResultScanner scanner1 = table.getScanner(scan);
            for (Result res : scanner1) {
           	 Map<String, String> map = new LinkedHashMap<>();
           	 System.out.println("==="+res.toString());
           	 for (KeyValue kv : res.raw()) {
           	  //測量值
      		   if(new String(kv.getQualifier()).equals("MeasValue")){
      		   	 System.err.println( new String(kv.getQualifier()) + ":" + (int)(Float.parseFloat(new String(kv.getValue()))*100)/100.0);
      		    	 map.put(new String(kv.getQualifier()),  new String(kv.getValue()));
      		    }
      		    //差值
      		    if(new String(kv.getQualifier()).equals("DiffValue")){
         		   	 System.err.println( new String(kv.getQualifier()) + ":" + (int)(Float.parseFloat(new String(kv.getValue()))*100)/100.0);
         		        map.put(new String(kv.getQualifier()),  new String(kv.getValue()));
      		    }
      		    //累計
      		    if(new String(kv.getQualifier()).equals("AccValue")){
            		   	 System.err.println( new String(kv.getQualifier()) + ":" + (int)(Float.parseFloat(new String(kv.getValue()))*100)/100.0);
            		   map.put(new String(kv.getQualifier()),  new String(kv.getValue()));
      		    }
      		    //時間
      		    if(new String(kv.getQualifier()).equals("MeasTime")){
            		   	 System.err.println( new String(kv.getQualifier()) + ":" + new String(kv.getValue()));
            		   map.put(new String(kv.getQualifier()),  new String(kv.getValue()));
      		    } 
      		  if(new String(kv.getQualifier()).equals("CH1")){
      		   	 System.err.println( new String(kv.getQualifier()) + ":" + new String(kv.getValue()));
 		    } 
      		  if(new String(kv.getQualifier()).equals("CH2")){
     		   	 System.err.println( new String(kv.getQualifier()) + ":" + new String(kv.getValue()));
		    } 
 		    if(new String(kv.getQualifier()).equals("CH3")){
     		   	 System.err.println( new String(kv.getQualifier()) + ":" + new String(kv.getValue()));
		    } 
 		    
 		   if(new String(kv.getQualifier()).equals("CH1")){
    		   	 System.err.println( new String(kv.getQualifier()) + ":" + new String(kv.getValue()));
		    } 
    		  if(new String(kv.getQualifier()).equals("CH2")){
   		   	 System.err.println( new String(kv.getQualifier()) + ":" + new String(kv.getValue()));
		    } 
		    if(new String(kv.getQualifier()).equals("CH3")){
   		   	 System.err.println( new String(kv.getQualifier()) + ":" + new String(kv.getValue()));
		    } 
 		    if(new String(kv.getQualifier()).equals("V0")){
     		   	 System.err.println( new String(kv.getQualifier()) + ":" + new String(kv.getValue()));
		    } 
                }
            }
            scanner1.close();
            list.add(maps);
            return list;
		}
以上是實現通過時間段查詢hbase裏的數據。

注意:rowkey必須是跟時間信息的。如: new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:00").format(new Date())+name形式。

發佈了33 篇原創文章 · 獲贊 37 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章