HBase 清空表数据

本文详细介绍了在HBase中清除指定表所有数据的具体实现方式,包括通过分批读取和删除数据的方法来确保操作的高效性和安全性。该方法适用于大规模数据清理场景,通过循环读取并批量删除数据,避免了一次性操作大量数据可能导致的问题。
    public int clearTableByTableName(String tableName) throws Exception {
        logger.debug("======InitHbaseServiceImpl clearTableByTableName=======");
        int count = 0;
        List<HBaseRow> rowsList = hbaseUtil.getRowsByStartAndEnd(tableName, null, null, HBaseConsts.FILTER_RECORD_COUNT);
        count += deleteData(tableName, rowsList, 0); //解决返回查找第一条为前一页最后一条数据
        while (rowsList.size() == HBaseConsts.FILTER_RECORD_COUNT) {
            String startKey = rowsList.get(rowsList.size() - 1).getRowKey();
            rowsList.clear();
            try {
                rowsList = hbaseUtil.getRowsByStartAndEnd(tableName, startKey, null, HBaseConsts.FILTER_RECORD_COUNT);
            } catch (Exception e) {
                logger.error("==========获取" + tableName + "数据异常==========");
            }
            count += deleteData(tableName, rowsList, 1);
            if (rowsList.size() < HBaseConsts.FILTER_RECORD_COUNT) {
                break;
            }
        }
        return count;
    }

    /**
     * 删除数据
     *
     * @param tableName
     * @param rowsList
     * @param startIdx
     * @throws Exception
     */
    private int deleteData(String tableName, List<HBaseRow> rowsList, int startIdx) throws Exception {
        logger.debug("=======deleteData rowsList:{}========", rowsList.size());
        int successCount = 0;
        for (int i = startIdx; i < rowsList.size(); i++) {
            HBaseRow baseRow = rowsList.get(i);
            String rowKey = baseRow.getRowKey();
            try {
                hbaseUtil.deleteRow(tableName, rowKey);
                successCount++;
            } catch (Exception e) {
                logger.error("=====清数据出现异常bug=====");
                throw new InvokeException(ResultEnum.FAILED.getCode(), "清数据出现异常bug");
            }

        }
        logger.debug("==========deleteData========本次删除成功数据:{}", successCount);
        return successCount;
    }

 

转载于:https://www.cnblogs.com/zgzf/p/10194385.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值