hbase的PageFilter思路到代码(简洁明了)

设计思路:


 * 每页显示3行数据一次性的按照页数来显示出所有的数据
 *
 * 1、select * from tableName limit 3;(第一页)
 * 第二页的行数要大于第一页的最大行数,为了在写逻辑语句,无特殊性处理(对第一页),写成通用性处理,
 * 确认通用性,下一页读取的开始行是比上一页的最后一行的rowkey大的
 * 改成  select * from tableName rowKey > " " limit 3;
 *
 * 2、select * from tableName where rowKey > maxKey limit 3;
 *
 * 3、怎么判断数据读取完成,退出循坏 -->  给读出的行数计数, 当rowcount  < 3时,退出

 


    /**
     * 每页显示3行数据一次性的按照页数来显示出所有的数据
     *
     * 1、select * from tableName limit 3;(第一页)
     * 第二页的行数要大于第一页的最大行数,为了在写逻辑语句,无特殊性处理(对第一页),写成通用性处理,
     * 确认通用性,下一页读取的开始行是比上一页的最后一行的rowkey大的
     * 改成  select * from tableName rowKey > " " limit 3;   
     *
     * 2、select * from tableName where rowKey > maxKey limit 3; 
     *
     * 3、怎么判断数据读取完成,退出循坏 -->  给读出的行数计数, 当rowcount  < 3时,退出
     *
     * @throws IOException
     */
    @Test
    public void testPageFilter() throws IOException {
        PageFilter pageFilter = new PageFilter(3); //每页展示行数
        Scan scan = new Scan();
        scan.setFilter(pageFilter);
        HbaseUtils.getTable("ns2:t_user_info");
        String maxKey = "";  //设置第一页开始的maxkey是空
        int rowCount = 0;
        while (true) {
            rowCount = 0;
            //字典顺序,加上001,一定比前一个rowkey大
            scan.setStartRow(Bytes.toBytes(maxKey + "\001"));

            ResultScanner resultScanner = table.getScanner(scan);
            Iterator resultIterator = resultScanner.iterator();
            while (resultIterator.hasNext()) {
                Result result = resultIterator.next();
                HbaseUtils.printRS(result);// 封装的方法,输出result里的值
                maxKey = result.getRow().toString(); //记录最后一行的rowkey
                rowCount++; //给一页里的行计数,方便判断是否已经读取完表里的全部数据了
            }
            if (rowCount < 3) {  //退出读取表数据的条件
                break;
            }
        }

    }

printRS(Result result ):


    public static void printRS(Result result) throws IOException {
        //输出主键
        System.out.println("rowkey" + Arrays.toString(result.getRow()));
        CellScanner cellScanner = result.cellScanner();
        while (cellScanner.advance()) {
            Cell cell = cellScanner.current();
            //输出列簇
            System.out.println("\t"+new String(CellUtil.cloneFamily(cell), "utf-8"));
            //列
            System.out.println(":"+new String(CellUtil.cloneQualifier(cell), "utf-8"));
            //列值
            System.out.println("value"+new String(CellUtil.cloneValue(cell), "utf-8"));
        }
    }

 

你可能感兴趣的:(hadoop,Hbase)