阅读 114

Hbase学习03-api操作02

1、根据表名查询他所有的rowkey

 /*--------------根据表名查询所有的rowkey*/
    @Test
    public void getRowKey() throws IOException {
        String tableName="WATER_BILL";
        Table table = connection.getTable(TableName.valueOf(tableName));
        Scan scan = new Scan();
        ResultScanner results = table.getScanner(scan);
        ArrayList list = new ArrayList<>();
        for (Result result : results) {
            list.add(Bytes.toString(result.getRow()));
            System.out.println(Bytes.toString(result.getRow()));
        }
    }

 

 

 2、根据表名和rowkey获取一行所有数据

 /*--------------根据表名和rowkey获取一行所有数据*/
    @Test
    public void getRoWDetail() throws IOException {
        String tablename,rowkey;
        rowkey="4944191";
        Table table = connection.getTable(TABLE_NAME);
        byte[] row = Bytes.toBytes(rowkey);
        Get get = new Get(row);
        Result r = table.get(get);

        HashMap rst = new HashMap<>();
        List ans = new ArrayList<>();
        if(null!=r && !r.isEmpty())
        {
            for (Cell cell : r.listCells()) {
                String key = Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
                String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
                rst.put(key,value);//保存操作
                System.out.println(key+" -> "+value);
            }
            ans.addAll(rst.entrySet());
        }
    }

 

 

 3、根据表名和rowkey和列蔟获取列的个数

  /*根据表名和rowkey和列蔟查询当前的列的数量*/
    @Test
    public void getCountKeyColumnFamily() throws IOException {
        String tablename,rowkey,columnFamily;
        rowkey="4944191";
        columnFamily="C1";
        Table table = connection.getTable(TABLE_NAME);
        byte[] row = Bytes.toBytes(rowkey);
        Get get = new Get(row);
        Result result = table.get(get);
        if(null!=result && !result.isEmpty())
        {
            NavigableMap<byte[], byte[]> familyMap = result.getFamilyMap(Bytes.toBytes(columnFamily));
            System.out.println(familyMap.size());
        }

    }

 

 4、根据key的范围查询数据

   /*根据key的范围查询数据*/
    @Test
    public void getRowRangeData() throws IOException {
        Table table = connection.getTable(TABLE_NAME);
        String tablename,startRowkey,endRowkey;
        startRowkey="4944192";
        endRowkey="4944193";
        Scan scan = new Scan();
        scan.setStartRow(Bytes.toBytes(startRowkey));
        scan.setStopRow(Bytes.toBytes(endRowkey));
        ResultScanner results = table.getScanner(scan);
        Map map = new HashMap<>();
        for (Result result : results) {
            String key=new String(result.getRow());
            map.put(key,result);
            System.out.println(key+ "  -> " +result);
        }
        List list = new ArrayList<>();
        list.addAll(map.entrySet());
    }

 5、查询复合范围的数据。参数有表名、列蔟、列名、开始值、结束值

   /*询复合范围的数据。参数有表名、列蔟、列名、开始值、结束值*/
    @Test
    public void getRangeData() throws IOException {
        String tablename,columnFamily,column,begin,end;
        columnFamily="C1";
        column="NUM_USAGE";
        begin="24";
        end="26";
        Table table = connection.getTable(TABLE_NAME);
        Scan scan = new Scan();
        List filters = new ArrayList<>();
        SingleColumnValueFilter filter1 = new SingleColumnValueFilter(Bytes.toBytes(columnFamily), Bytes.toBytes(column), CompareFilter.CompareOp.GREATER_OR_EQUAL, Bytes.toBytes(begin));
        SingleColumnValueFilter filter2 = new SingleColumnValueFilter(Bytes.toBytes(columnFamily), Bytes.toBytes(column), CompareFilter.CompareOp.LESS, Bytes.toBytes(end));
        filters.add(filter1);
        filters.add(filter2);
        FilterList filterList = new FilterList(filters);
        scan.setFilter(filterList);
        ResultScanner results = table.getScanner(scan);
        Map map = new HashMap<>();
        for (Result result : results) {
            String key=new String (result.getRow());
            System.out.println(key+" - > "+result);
            map.put(key,result);
        }
        List list = new ArrayList<>();
        list.addAll(map.entrySet());
    }

 

 6、根据条件查询

 

  /*根据条件查询*/
    @Test
    public void getData() throws IOException {
        String tablename,columnFamily;
        columnFamily="C1";
//        Map columnAndValue = null;
//        columnAndValue.put("NUM_USAGE","25");
        Table table = connection.getTable(TABLE_NAME);
        Scan scan = new Scan();
        List filters = new ArrayList();
        String k,v;
        k="NUM_USAGE";
        v="25";
        Filter filter = new SingleColumnValueFilter(Bytes.toBytes(columnFamily),Bytes.toBytes(k),
                CompareFilter.CompareOp.EQUAL,Bytes.toBytes(v));
        filters.add(filter);
//        columnAndValue.forEach((k,v)->{
//            Filter filter = new SingleColumnValueFilter(Bytes.toBytes(columnFamily),Bytes.toBytes(k),
//                    CompareFilter.CompareOp.EQUAL,Bytes.toBytes(v));
//            filters.add(filter);
//        });
        FilterList filterList = new FilterList(filters);
        scan.setFilter(filterList);
        ResultScanner results =  table.getScanner(scan);
        Map map = new HashMap<>();
        for(Result result:results){
            String key = new String(result.getRow());
            map.put(key,result);
            System.out.println(key+" -> "+result);
        }
        List list = new ArrayList<>();
        list.addAll(map.entrySet());
    }

 

原文:https://www.cnblogs.com/dazhi151/p/13843848.html

文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐