HBASEUtil

import lombok.extern.slf4j.Slf4j;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.*;

/**
 * 应用模块名称:
 * <p>
 * 代码描述:
 * <p>
 * Copyright: Copyright (C) 2020 XXX, Inc. All rights reserved.
 * <p>
 * Company: 
 *
 * @author mirror
 * @date: 2020年10月19日 17:12
 **/
@Slf4j
@Service
public class HbaseUtils implements HBaseCURD {

    private boolean isTableExist(String table) {
        log.info("isTableExist方法,判断表是否存在,表名是:" + table);
        boolean flag = false;

        try {
            TableName tablename = TableName.valueOf(table);
            Admin admin = HBaseConnectionUtils.getInstance().getAdmin();
            if (admin.tableExists(tablename)) {
                flag = true;
            }
        } catch (IOException var5) {
            log.error("isTableExist方法,错误信息:" + var5.getMessage());
            var5.printStackTrace();
        }

        log.info("isTableExist方法,判断表是否存在,flag标志:" + flag);
        return flag;
    }

    public ResultScanner getResultScanner(String name, FilterList filterList) {

        TableName tableName = TableName.valueOf(name);
        Table table = null;
        try {
            table = HBaseConnectionUtils.getInstance().getConnection().getTable(tableName);
        } catch (IOException e) {
            log.error("建立hbase连接失败,错误信息是" + e.getMessage());
            e.printStackTrace();
        }
        Scan scan = new Scan();
        scan.setFilter(filterList);

        if (table == null) {
            return null;
        }
        ResultScanner scanner = null;
        try {
            scanner = table.getScanner(scan);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //关闭资源
                table.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
        }
        return scanner;
    }

    public List<RowVO> loopResults(ResultScanner results) {
        log.info("loopResults方法,用scan方式获取数据");
        List<RowVO> rowVOList = new ArrayList();
        Iterator var3 = results.iterator();

        while (var3.hasNext()) {
            Result result = (Result) var3.next();
            RowVO row = new RowVO();
            List<String> familyNameList = new ArrayList();
            List<String> columnNameList = new ArrayList();
            List<String> valueList = new ArrayList();
            row.setRowkey(Bytes.toString(result.getRow()));
            long timestamp = 0L;
            Cell[] cells = result.rawCells();
            Cell[] var12 = cells;
            int var13 = cells.length;

            for (int var14 = 0; var14 < var13; ++var14) {
                Cell cell = var12[var14];
                String familyName = Bytes.toString(CellUtil.cloneFamily(cell));
                familyNameList.add(familyName);
                String columnName = Bytes.toString(CellUtil.cloneQualifier(cell));
                columnNameList.add(columnName);
                String value = Bytes.toString(CellUtil.cloneValue(cell));
                valueList.add(value);
                timestamp = cell.getTimestamp();
            }

            row.setTimestamp(timestamp);
            row.setFamilyName(familyNameList);
            row.setColumnName(columnNameList);
            row.setValue(valueList);
            rowVOList.add(row);
        }

        log.info("loopResults方法,用scan方式获取数据,rowVOList的条数:" + rowVOList.size());
        return rowVOList;
    }

    private List<RowVO> loopResults(Result[] results) {
        log.info("loopResults方法,用List<Get>方式获取批量数据");
        List<RowVO> rowVOList = new ArrayList();
        Result[] var3 = results;
        int var4 = results.length;

        for (int var5 = 0; var5 < var4; ++var5) {
            Result result = var3[var5];
            RowVO row = new RowVO();
            List<String> familyNameList = new ArrayList();
            List<String> columnNameList = new ArrayList();
            List<String> valueList = new ArrayList();
            row.setRowkey(Bytes.toString(result.getRow()));
            long timestamp = 0L;
            Cell[] cells = result.rawCells();
            Cell[] var14 = cells;
            int var15 = cells.length;

            for (int var16 = 0; var16 < var15; ++var16) {
                Cell cell = var14[var16];
                String familyName = Bytes.toString(CellUtil.cloneFamily(cell));
                familyNameList.add(familyName);
                String columnName = Bytes.toString(CellUtil.cloneQualifier(cell));
                columnNameList.add(columnName);
                String value = Bytes.toString(CellUtil.cloneValue(cell));
                valueList.add(value);
                timestamp = cell.getTimestamp();
            }

            row.setTimestamp(timestamp);
            row.setFamilyName(familyNameList);
            row.setColumnName(columnNameList);
            row.setValue(valueList);
            rowVOList.add(row);
        }

        log.info("loopResults方法,用List<Get>方式获取批量数据,rowVOList数据条数:" + rowVOList.size());
        return rowVOList;
    }

    public Map<String, Object> getMapByPage(Table table, ResultScanner resultScanner, int pageSize, int pageNum) throws IOException {
        Map<String, Object> map = new HashMap();
        List<String> rowkeyList = new ArrayList();
        Iterator var7 = resultScanner.iterator();

        while (var7.hasNext()) {
            Result result = (Result) var7.next();
            String rowkey = Bytes.toString(result.getRow());
            rowkeyList.add(rowkey);
        }

        int totalCount = rowkeyList.size();
        if (totalCount == 0) {
            map.put("totalCount", 0);
            map.put("rowVOList", (Object) null);
            return map;
        } else {
            map.put("totalCount", totalCount);
            int startIndex = 0;
            int endIndex;
            if (pageNum >= 1 && pageSize > 0) {
                int lastPage = totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
                if (pageNum == lastPage) {
                    startIndex = pageSize * (pageNum - 1);
                    endIndex = totalCount - 1;
                } else {
                    startIndex = pageSize * (pageNum - 1);
                    endIndex = pageSize * pageNum - 1;
                }
            } else {
                endIndex = totalCount - 1;
            }

            List<Get> getList = new ArrayList();

            for (int i = startIndex; i <= endIndex; ++i) {
                Get get = new Get(Bytes.toBytes((String) rowkeyList.get(i)));
                getList.add(get);
            }

            Result[] results = table.get(getList);
            map.put("rowVOList", this.loopResults(results));
            return map;
        }
    }

    public void addOrUpdateRow(String hbaseTableName, List<RowVO> rowVOList) {
        log.info("addOrUpdateRow方法,批量增加或更新记录,rowVOList数据条数:" + rowVOList);
        Table table = null;

        try {
            if (this.isTableExist(hbaseTableName)) {
                TableName tablename = TableName.valueOf(hbaseTableName);
                List<Put> putList = new ArrayList();
                Iterator var6 = rowVOList.iterator();

                while (var6.hasNext()) {
                    RowVO vo = (RowVO) var6.next();
                    Put put = new Put(Bytes.toBytes(vo.getRowkey()));
                    List<String> familyNameList = vo.getFamilyName();
                    List<String> columnNameList = vo.getColumnName();
                    List<String> valueList = vo.getValue();

                    for (int i = 0; i < familyNameList.size(); ++i) {
                        put.addColumn(Bytes.toBytes((String) familyNameList.get(i)), Bytes.toBytes((String) columnNameList.get(i)), Bytes.toBytes((String) valueList.get(i)));
                    }

                    putList.add(put);
                }

                table = HBaseConnectionUtils.getInstance().getConnection().getTable(tablename);
                table.put(putList);
            }
        } catch (IOException var21) {
            log.error("addOrUpdateRow方法,错误信息:" + var21.getMessage());
            var21.printStackTrace();
        } finally {
            try {
                if (table != null) {
                    table.close();
                }
            } catch (IOException var20) {
                var20.printStackTrace();
            }

        }

    }

    public void deleteRows(String hbaseTableName, List<RowVO> rowVOList) {
        log.info("deleteRows方法,根据多个主键rowkey批量删除表的行,表名是:" + hbaseTableName + "--删除行数是:" + rowVOList);
        Table table = null;

        try {
            TableName tablename = TableName.valueOf(hbaseTableName);
            table = HBaseConnectionUtils.getInstance().getConnection().getTable(tablename);
            List<Delete> deleteList = new ArrayList();
            Iterator var6 = rowVOList.iterator();

            while (var6.hasNext()) {
                RowVO rowVO = (RowVO) var6.next();
                Delete delete = new Delete(Bytes.toBytes(rowVO.getRowkey()));
                deleteList.add(delete);
            }

            table.delete(deleteList);
            log.info("deleteRows方法,根据多个主键rowkey批量删除表的行,deleteList删除了多少行:" + deleteList.size());
        } catch (IOException var17) {
            log.error("deleteRows方法,错误信息:" + var17.getMessage());
            var17.printStackTrace();
        } finally {
            try {
                if (table != null) {
                    table.close();
                }
            } catch (IOException var16) {
                var16.printStackTrace();
            }

        }

    }

    public void dropTable(String hbaseTableName) {
        log.info("dropTable方法,删除表,表名是:" + hbaseTableName);
        Admin admin = null;

        try {
            admin = HBaseConnectionUtils.getInstance().getAdmin();
            TableName tablename = TableName.valueOf(hbaseTableName);
            if (this.isTableExist(hbaseTableName)) {
                admin.disableTable(tablename);
                admin.deleteTable(tablename);
            }

            log.info("dropTable方法,完成。");
        } catch (Exception var12) {
            log.error("dropTable方法,错误信息:" + var12.getMessage());
            var12.printStackTrace();
        } finally {
            try {
                if (admin != null) {
                    admin.close();
                }
            } catch (IOException var11) {
                var11.printStackTrace();
            }

        }

    }

    public void truncateTable(String hbaseTableName) {
        log.info("truncateTable方法,清空表,表名是:" + hbaseTableName);
        Admin admin = null;

        try {
            admin = HBaseConnectionUtils.getInstance().getAdmin();
            TableName tablename = TableName.valueOf(hbaseTableName);
            if (this.isTableExist(hbaseTableName)) {
                admin.disableTable(tablename);
                admin.truncateTable(tablename, true);
            }
        } catch (Exception var12) {
            log.error("truncateTable方法,错误信息:" + var12.getMessage());
            var12.printStackTrace();
        } finally {
            try {
                if (admin != null) {
                    admin.close();
                }
            } catch (IOException var11) {
                var11.printStackTrace();
            }

        }

    }

    public void createTable(String hbaseTableName, String[] columnFamilys) {
        log.info("createTable方法,创建表,表名是:" + hbaseTableName);
        Admin admin = null;

        try {
            TableName tableName = TableName.valueOf(hbaseTableName);
            admin = HBaseConnectionUtils.getInstance().getAdmin();
            if (this.isTableExist(hbaseTableName)) {
                log.info(hbaseTableName + "--表已经存在!");
            } else {
                HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);
                String[] var6 = columnFamilys;
                int var7 = columnFamilys.length;

                for (int var8 = 0; var8 < var7; ++var8) {
                    String columnFamily = var6[var8];
                    HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(columnFamily);
                    hTableDescriptor.addFamily(hColumnDescriptor);
                }

                admin.createTable(hTableDescriptor);
            }
        } catch (IOException var19) {
            log.error("createTable方法,错误信息:" + var19.getMessage());
            var19.printStackTrace();
        } finally {
            try {
                if (admin != null) {
                    admin.close();
                }
            } catch (IOException var18) {
                var18.printStackTrace();
            }

        }

    }


    public List<RowVO> getAllData(String hbaseTableName) {
        log.info("getAllData方法,扫描全表,表名是:" + hbaseTableName);
        Table table = null;
        List<RowVO> rowVOList = null;

        try {
            TableName tableName = TableName.valueOf(hbaseTableName);
            table = HBaseConnectionUtils.getInstance().getConnection().getTable(tableName);
            Scan scan = new Scan();
            scan.setCaching(1000);
            ResultScanner resultScanner = table.getScanner(scan);
            rowVOList = this.loopResults(resultScanner);
        } catch (IOException var15) {
            log.error("getAllData方法,错误信息:" + var15.getMessage());
            var15.printStackTrace();
        } finally {
            try {
                if (table != null) {
                    table.close();
                }
            } catch (IOException var14) {
                var14.printStackTrace();
            }

        }

        log.info("getAllData方法,扫描全表,数据条数是:" + rowVOList.size());
        return rowVOList;
    }

    public List<RowVO> getAllDataFilter(String hbaseTableName, FilterList filters) {
        log.info("getAllData方法,扫描全表,表名是:" + hbaseTableName);
        Table table = null;
        List rowVOList = null;

        try {
            TableName tableName = TableName.valueOf(hbaseTableName);
            table = HBaseConnectionUtils.getInstance().getConnection().getTable(tableName);
            Scan scan = new Scan();
            scan.setFilter(filters);
            scan.setCaching(1000);
            ResultScanner resultScanner = table.getScanner(scan);
            rowVOList = this.loopResults(resultScanner);
        } catch (IOException var15) {
            log.error("getAllData方法,错误信息:" + var15.getMessage());
            var15.printStackTrace();
        } finally {
            try {
                if (table != null) {
                    table.close();
                }
            } catch (IOException var14) {
                var14.printStackTrace();
            }

        }

        log.info("getAllData方法,扫描全表,数据条数是:" + rowVOList.size());
        return rowVOList;
    }

    public RowVO getOneRow(String hbaseTableName, String rowkey) {
        log.info("getOneRow方法,根据rowkey获取一行数据,表名是:" + hbaseTableName + "--主键是:" + rowkey);
        Table table = null;
        RowVO row = null;

        try {
            TableName tableName = TableName.valueOf(hbaseTableName);

            HBaseConnectionUtils instance = HBaseConnectionUtils.getInstance();

            Connection connection = instance.getConnection();
            table =connection.getTable(tableName);


            Get get = new Get(Bytes.toBytes(rowkey));
            Result result = table.get(get);
            row = new RowVO();
            List<String> familyNameList = new ArrayList();
            List<String> columnNameList = new ArrayList();
            List<String> valueList = new ArrayList();
            row.setRowkey(Bytes.toString(result.getRow()));
            long timestamp = 0L;
            Cell[] cells = result.rawCells();
            Cell[] var14 = cells;
            int var15 = cells.length;

            for (int var16 = 0; var16 < var15; ++var16) {
                Cell cell = var14[var16];
                String familyName = Bytes.toString(CellUtil.cloneFamily(cell));
                familyNameList.add(familyName);
                String columnName = Bytes.toString(CellUtil.cloneQualifier(cell));
                columnNameList.add(columnName);
                String value = Bytes.toString(CellUtil.cloneValue(cell));
                valueList.add(value);
                timestamp = cell.getTimestamp();
            }

            row.setTimestamp(timestamp);
            row.setFamilyName(familyNameList);
            row.setColumnName(columnNameList);
            row.setValue(valueList);
        } catch (IOException var29) {
            log.error("getOneRow方法,错误信息:" + var29.getMessage());
            var29.printStackTrace();
        } finally {
            try {
                if (table != null) {
                    table.close();
                }
            } catch (IOException var28) {
                var28.printStackTrace();
            }

        }

        log.info("getOneRow方法,根据rowkey获取一行数据,这行数据是:" + row);
        return row;
    }

    public Map<String, Object> selectByRowFilterPage(String hbaseTableName, String min, String max, String type, int pageSize, int pageNum) {
        log.info("selectByRowFilterPage方法,根据主键过滤分页方法,表名是:" + hbaseTableName + ",最小值是:" + min + ",最大值是:" + max + ",类型是:" + type + ",页面大小:" + pageSize + ",页数:" + pageNum);
        Table table = null;
        Map map = null;

        try {
            TableName tableName = TableName.valueOf(hbaseTableName);
            table = HBaseConnectionUtils.getInstance().getConnection().getTable(tableName);
            Scan scan = new Scan();
            scan.setFilter(this.getRowFilters(min, max, type, (String) null));
            scan.setCaching(1000);
            ResultScanner resultScanner = table.getScanner(scan);
            map = this.getMapByPage(table, resultScanner, pageSize, pageNum);
        } catch (IOException var20) {
            log.error("selectByRowFilterPage方法,错误信息是" + var20.getMessage());
            var20.printStackTrace();
        } finally {
            try {
                if (table != null) {
                    table.close();
                }
            } catch (IOException var19) {
                var19.printStackTrace();
            }

        }

        log.info("selectByRowFilterPage方法,根据主键过滤分页方法,map条数是:" + map.size());
        return map;
    }

    /**
     * 根据行过滤分页方法
     *
     * @param hbaseTableName Hbase 表名称
     * @param startRowKey    开始RowKey
     * @param endRowKey      结束RowKey
     * @param filters        过滤条件
     * @param pageSize       每页多少条数据
     * @param pageNum        页码
     * @param isReverse      是否倒序
     * @return
     */
    public Map<String, Object> selectDataByRowFilterPage(String hbaseTableName, String startRowKey, String endRowKey, FilterList filters, int pageSize, int pageNum, boolean isReverse) {
        log.info("selectDataByRowFilterPage,根据行过滤分页方法,表名:" + hbaseTableName + ",开始RowKey:" + startRowKey + ",结束RowKey:" + endRowKey + ",页面大小:" + pageSize + ",页数:" + pageNum + ", 是否倒序:" + isReverse);
        Table table = null;
        Map<String, Object> map = new HashMap();
        List rowVOList = null;
        List rowVOResultList = null;

        label147:
        {
            Map<String, Object> var31;
            try {
                TableName tableName = TableName.valueOf(hbaseTableName);
                table = HBaseConnectionUtils.getInstance().getConnection().getTable(tableName);
                Scan scan = new Scan();
                scan.withStartRow(Bytes.toBytes(startRowKey));
                scan.withStopRow(Bytes.toBytes(endRowKey));
                scan.setFilter(filters);
                scan.setCaching(1000);
                ResultScanner resultScanner = table.getScanner(scan);
                rowVOList = this.loopResults(resultScanner);

                int totalCount = rowVOList.size();// 记录总数
                if (totalCount != 0) {
                    map.put("totalCount", totalCount);
                    if (isReverse) {
                        Collections.reverse(rowVOList);
                    }
                    if (pageNum >= 1 && pageSize > 0) {
                        Integer pageCount = 0; // 页数
                        if (totalCount % pageSize == 0) {
                            pageCount = totalCount / pageSize;
                        } else {
                            pageCount = totalCount / pageSize + 1;
                        }
                        int fromIndex = 0; // 开始索引
                        int toIndex = 0; // 结束索引
                        if (pageNum != pageCount) {
                            fromIndex = (pageNum - 1) * pageSize;
                            toIndex = fromIndex + pageSize;
                        } else {
                            fromIndex = (pageNum - 1) * pageSize;
                            toIndex = totalCount;
                        }

                        rowVOResultList = rowVOList.subList(fromIndex, toIndex);
                    } else {
                        rowVOResultList = rowVOList;
                    }

                    map.put("rowVOList", rowVOResultList);
                    break label147;
                }
                map.put("totalCount", 0);
                map.put("rowVOList", (Object) null);
                var31 = map;
            } catch (IOException var28) {
                log.error("selectDataByRowFilterPage,错误信息是" + var28.getMessage());
                var28.printStackTrace();
                break label147;
            } finally {
                try {
                    if (table != null) {
                        table.close();
                    }
                } catch (IOException var27) {
                    var27.printStackTrace();
                }

            }
            return var31;
        }

        log.info("selectDataByRowFilterPage,根据行过滤分页方法,map条数是:" + map.size());
        return map;
    }

    public Map<String, Object> selectByRowFilterPageReverse(String hbaseTableName, String min, String max, String type, int pageSize, int pageNum) {
        log.info("selectByRowFilterPageReverse方法,根据主键过滤分页倒排方法,表名是:" + hbaseTableName + ",最小值是:" + min + ",最大值是:" + max + ",类型是:" + type + ",页面大小:" + pageSize + ",页数:" + pageNum);
        Table table = null;
        Map<String, Object> map = new HashMap();
        List rowVOList = null;

        label147:
        {
            Map<String, Object> var31;
            try {
                TableName tableName = TableName.valueOf(hbaseTableName);
                table = HBaseConnectionUtils.getInstance().getConnection().getTable(tableName);
                Scan scan = new Scan();
                scan.setFilter(this.getRowFilters(min, max, type, (String) null));
                scan.setCaching(1000);
                ResultScanner resultScanner = table.getScanner(scan);
                List<String> rowkeyList = new ArrayList();
                Iterator var14 = resultScanner.iterator();

                String endRowkey;
                while (var14.hasNext()) {
                    Result result = (Result) var14.next();
                    endRowkey = Bytes.toString(result.getRow());
                    rowkeyList.add(endRowkey);
                }

                int totalCount = rowkeyList.size();
                if (totalCount != 0) {
                    map.put("totalCount", totalCount);
                    Collections.reverse(rowkeyList);
                    String startRowkey = "";
                    endRowkey = "";
                    if (pageNum >= 1 && pageSize > 0) {
                        int lastPage = totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
                        if (pageNum == lastPage) {
                            startRowkey = (String) rowkeyList.get(pageSize * (pageNum - 1));
                            endRowkey = (String) rowkeyList.get(totalCount - 1);
                        } else {
                            startRowkey = (String) rowkeyList.get(pageSize * (pageNum - 1));
                            endRowkey = (String) rowkeyList.get(pageSize * pageNum - 1);
                        }
                    } else {
                        startRowkey = (String) rowkeyList.get(0);
                        endRowkey = (String) rowkeyList.get(totalCount - 1);
                    }

                    Scan scanTemp = new Scan();
                    scanTemp.withStartRow(endRowkey.getBytes(), true);
                    scanTemp.withStopRow(startRowkey.getBytes(), true);
                    scanTemp.setCaching(1000);
                    ResultScanner resultScannerTemp = table.getScanner(scanTemp);
                    rowVOList = this.loopResults(resultScannerTemp);
                    Collections.reverse(rowVOList);
                    map.put("rowVOList", rowVOList);
                    break label147;
                }

                map.put("totalCount", 0);
                map.put("rowVOList", (Object) null);
                var31 = map;
            } catch (IOException var28) {
                log.error("selectByRowFilterPageReverse方法,错误信息是" + var28.getMessage());
                var28.printStackTrace();
                break label147;
            } finally {
                try {
                    if (table != null) {
                        table.close();
                    }
                } catch (IOException var27) {
                    var27.printStackTrace();
                }

            }
            return var31;
        }

        log.info("selectByRowFilterPageReverse方法,根据主键过滤分页倒排方法,map条数是:" + map.size());
        return map;
    }

    public HbaseResultDO selectByRowFilterPage(String hbaseTableName, FilterList filter, int pageSize, int pageNum) {
        log.info(
                "selectByRowFilterPage方法,根据主键过滤分页方法,表名是:" + hbaseTableName
                        + ",页面大小:" + pageSize + ",页数:" + pageNum);

        Table table = null;

        HbaseResultDO hbaseResultDO = new HbaseResultDO();

        try {

            TableName tableName = TableName.valueOf(hbaseTableName);

            table = HBaseConnectionUtils.getInstance().getConnection().getTable(tableName);

            Scan scan = new Scan();
            FilterList rowFilters = getRowFilters(null, null, null, null);
            if (filter != null) {
                rowFilters.addFilter(filter);
            }
            scan.setFilter(rowFilters);

            scan.setCaching(1000);

            ResultScanner resultScanner = table.getScanner(scan);

            hbaseResultDO = getHbaseResultDO(table, resultScanner, pageSize, pageNum);

        } catch (IOException e) {

            log.error("selectByRowFilterPage方法,错误信息是" + e.getMessage());

            e.printStackTrace();
        } finally {
            try {
                //关闭资源
                if (table != null) {

                    table.close();
                }
            } catch (IOException e) {

                e.printStackTrace();
            }
        }

        return hbaseResultDO;
    }



    private HbaseResultDO getHbaseResultDO(Table table, ResultScanner resultScanner, int pageSize, int pageNum)
            throws IOException {

        HbaseResultDO hbaseResultDO = new HbaseResultDO();

        List<String> rowkeyList = new ArrayList<>();

        for (Result result : resultScanner) {

            String rowkey = Bytes.toString(result.getRow());

            rowkeyList.add(rowkey);
        }

        int totalCount = rowkeyList.size();

        if (totalCount == 0) {

            hbaseResultDO.setTotal(0);

            return hbaseResultDO;
        }

        hbaseResultDO.setTotal(totalCount);

        int startIndex = 0;

        int endIndex = 0;

        if (pageNum >= 1 && pageSize > 0) {

            int lastPage = totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;

            if (pageNum == lastPage) {

                startIndex = pageSize * (pageNum - 1);

                endIndex = totalCount - 1;

            } else {
                startIndex = pageSize * (pageNum - 1);

                endIndex = pageSize * pageNum - 1;
            }
        } else {
            endIndex = totalCount - 1;
        }
        List<Get> getList = new ArrayList();

        for (int i = startIndex; i <= endIndex; i++) {//把rowkey加到get里,再把get装到list中

            Get get = new Get(Bytes.toBytes(rowkeyList.get(i)));

            getList.add(get);
        }
        //重点在这,直接查getList<Get>
        Result[] results = table.get(getList);

        hbaseResultDO.setResults(results);
        return hbaseResultDO;
    }


    private FilterList getRowFilters(String max, String min, String type, String prefix) {
        FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
        RowFilter filter3;
        if (max != null && !"".equals(max)) {
            filter3 = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(max.getBytes()));
            filterList.addFilter(filter3);
        }

        if (min != null && !"".equals(min)) {
            filter3 = new RowFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL, new BinaryComparator(min.getBytes()));
            filterList.addFilter(filter3);
        }

        if (type != null && !"".equals(type)) {
            filter3 = new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator(".*-" + type));
            filterList.addFilter(filter3);
        }

        if (prefix != null && !"".equals(prefix)) {
            PrefixFilter filter5 = new PrefixFilter(prefix.getBytes());
            filterList.addFilter(filter5);
        }

        KeyOnlyFilter filter6 = new KeyOnlyFilter();
        filterList.addFilter(filter6);
        return filterList;
    }









    private FilterList getFamilyFilter(String[] params) {
        FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
        String[] var3 = params;
        int var4 = params.length;

        for (int var5 = 0; var5 < var4; ++var5) {
            String param = var3[var5];
            Filter filter = new FamilyFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator(param.getBytes()));
            filterList.addFilter(filter);
        }

        KeyOnlyFilter filter1 = new KeyOnlyFilter();
        filterList.addFilter(filter1);
        return filterList;
    }

    private FilterList getQualifierFilter(String[] params) {
        FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
        String[] var3 = params;
        int var4 = params.length;

        for (int var5 = 0; var5 < var4; ++var5) {
            String param = var3[var5];
            Filter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator(param.getBytes()));
            filterList.addFilter(qualifierFilter);
        }

        KeyOnlyFilter filter1 = new KeyOnlyFilter();
        filterList.addFilter(filter1);
        return filterList;
    }

    private FilterList getValueFilter(String[] params) {
        FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
        String[] var3 = params;
        int var4 = params.length;

        for (int var5 = 0; var5 < var4; ++var5) {
            String param = var3[var5];
            Filter valueFilter = new ValueFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator(param));
            filterList.addFilter(valueFilter);
        }

        KeyOnlyFilter filter1 = new KeyOnlyFilter();
        filterList.addFilter(filter1);
        return filterList;
    }


    public void queryTable(String tableNameString) throws Exception{

        TableName tableName = TableName.valueOf(tableNameString);

        Table table = HBaseConnectionUtils.getInstance().getConnection().getTable(tableName);

        ResultScanner scanner = table.getScanner(new Scan());

        for (Result result : scanner) {

            byte[] row = result.getRow();
            System.out.println("rowKey = " + row);


        }


    }




}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值