java統計hbase條數(開始rowkey,結束rowkey,字符反轉,模糊匹配)


代碼如下,不需要配置文件

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/*todo  查hbase數據條數
 */
public class HBaseLocalTest {
    public static Configuration conf;
    public static Connection conn;

    static {
        conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        conf.set("hbase.zookeeper.quorum", "*");
        try {
            conn = ConnectionFactory.createConnection(conf);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //將傳入的日期參數轉換成rowkey的反轉
    public static String Fdate(String s) {
        char[] array = s.toCharArray();
        String reverse = "";
        //倒敘拿出
        for (int i = array.length - 1; i >= 0; i--)
            reverse += array[i];
        return reverse;
    }
    //補齊傳入的字符串
    public static String Complement(String busNo) {//預先定義一個6位0
        StringBuilder zero =new StringBuilder("000000");
        String result = zero.substring(0, zero.length() - busNo.length()) + busNo;
        return result;
    }

    /**
     * 根據startRowKey和endRowKey篩選出區間,然后根據regxKey正則匹配和num查出最終的結果
     * @param tableName 表名
     * @param startRowKey 開始的范圍
     * @param endRowKey 結束的范圍
     * @param regxKey 正則匹配
     * @param num 查詢的條數
     * @return List<Result>
     */
    public static List<Result> getNumRegexRow(String tableName,String startRowKey,String endRowKey, String regxKey,int num) {
        HTableInterface table = null;
        List<Result> list = null;
        try {
            table = new HTable(conf, tableName);
            //創建一個過濾器容器,並設置其關系(AND/OR)
            FilterList fl = new FilterList(FilterList.Operator.MUST_PASS_ALL);
            //設置正則過濾器
            RegexStringComparator rc = new RegexStringComparator(regxKey);
            RowFilter rf = new RowFilter(CompareFilter.CompareOp.EQUAL, rc);
            //過濾獲取的條數 
            if (num != 0) {
                Filter filterNum = new PageFilter(num);//展示條數
                fl.addFilter(filterNum);
            }
            //過濾器的添加
            fl.addFilter(rf);
            Scan scan = new Scan();
            //設置取值范圍
            scan.setStartRow(startRowKey.getBytes());//開始的key
            scan.setStopRow(endRowKey.getBytes());//結束的key
            scan.setFilter(fl);//為查詢設置過濾器的list
            ResultScanner scanner = table.getScanner(scan) ;
            list = new ArrayList<Result>() ;
            for (Result rs : scanner) {
                list.add(rs) ;
            }
        } catch (Exception e) {
            e.printStackTrace() ;
        }
        finally
        {
            try {
                table.close() ;

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return list;
    }
    public static void main(String[] args) throws Exception {
        String startDate= "181017";
        String endDate ="181017";
        String tablename = "Table";
        String zao="00";  //這里是根據一天24小時匹配查詢
        String wan="23";
        String wei = "000000001";
        String wei2= "999999999";
        String startRowkey = Fdate(startDate)+zao+wei;
        String endRowkey = Fdate(endDate)+wan+wei2;
        List<Result> list = getNumRegexRow(tablename,startRowkey,endRowkey,"[^\\\\\\/\\^]",0);  //后面的0,是查詢所有符合的。如果改為5,只會打印符合條件的前5條數據 for (int j = 0; j < list.size(); j++) {
//            System.out.print("PROID:");  //下面是打印字段的值
//            System.out.print(Bytes.toString(list.get(j).getValue(Bytes.toBytes("YB"),Bytes.toBytes("PROID"))));
//            System.out.print("     ORIDATA:");
//            System.out.println(Bytes.toString(list.get(j).getValue(Bytes.toBytes("YB"),Bytes.toBytes("ORIDATA"))));
////            System.out.print("     SITE_TIME:");
////            System.out.print(Bytes.toString(list.get(j).getValue(Bytes.toBytes("f"),Bytes.toBytes("SITE_TIME"))));
////            System.out.print("     DOWN:");
////            System.out.print(Bytes.toString(list.get(j).getValue(Bytes.toBytes("f"),Bytes.toBytes("IS_UP+DOWN"))));
////            System.out.print("     LAT:");
////            System.out.print(Bytes.toString(list.get(j).getValue(Bytes.toBytes("f"),Bytes.toBytes("LAT"))));
////            System.out.print("     LNG:");
////            System.out.println(Bytes.toString(list.get(j).getValue(Bytes.toBytes("f"),Bytes.toBytes("LNG"))));
        }
        System.out.println("數據量:"+list.size());
        conn.close();
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM