首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何批量删除hbase中的多行?

如何批量删除hbase中的多行?
EN

Stack Overflow用户
提问于 2015-09-16 00:52:25
回答 2查看 19.9K关注 0票数 25

我在hbase表"mytable“中有以下几行具有这些键的行

代码语言:javascript
运行
AI代码解释
复制
user_1
user_2
user_3
...
user_9999999

我想使用Hbase shell删除以下内容中的行:

user_500到user_900

我知道没有办法删除,但是有没有办法我可以用"BulkDeleteProcessor“来删除呢?

我在这里看到:

https://github.com/apache/hbase/blob/master/hbase-examples/src/test/java/org/apache/hadoop/hbase/coprocessor/example/TestBulkDeleteProtocol.java

我只想粘贴导入内容,然后将其粘贴到shell中,但不知道如何操作。有人知道如何在jruby hbase shell中使用这个端点吗?

代码语言:javascript
运行
AI代码解释
复制
   Table ht = TEST_UTIL.getConnection().getTable("my_table");
    long noOfDeletedRows = 0L;
    Batch.Call<BulkDeleteService, BulkDeleteResponse> callable =
      new Batch.Call<BulkDeleteService, BulkDeleteResponse>() {
      ServerRpcController controller = new ServerRpcController();
      BlockingRpcCallback<BulkDeleteResponse> rpcCallback =
        new BlockingRpcCallback<BulkDeleteResponse>();

      public BulkDeleteResponse call(BulkDeleteService service) throws IOException {
        Builder builder = BulkDeleteRequest.newBuilder();
        builder.setScan(ProtobufUtil.toScan(scan));
        builder.setDeleteType(deleteType);
        builder.setRowBatchSize(rowBatchSize);
        if (timeStamp != null) {
          builder.setTimestamp(timeStamp);
        }
        service.delete(controller, builder.build(), rpcCallback);
        return rpcCallback.get();
      }
    };
    Map<byte[], BulkDeleteResponse> result = ht.coprocessorService(BulkDeleteService.class, scan
        .getStartRow(), scan.getStopRow(), callable);
    for (BulkDeleteResponse response : result.values()) {
      noOfDeletedRows += response.getRowsDeleted();
    }
    ht.close();

如果无法通过JRuby、Java或其他方法快速删除多行,则也可以。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-28 09:13:11

你真的想在shell中做这件事吗?因为还有其他更好的方法。一种方法是使用本机java API。

  • 构造一个删除数组列表
  • 将此数组列表传递给Table.delete方法

方法一:如果你已经知道键的范围。

代码语言:javascript
运行
AI代码解释
复制
public void massDelete(byte[] tableName) throws IOException {
    HTable table=(HTable)hbasePool.getTable(tableName);

    String tablePrefix = "user_";
    int startRange = 500;
    int endRange = 999;

    List<Delete> listOfBatchDelete = new ArrayList<Delete>();

    for(int i=startRange;i<=endRange;i++){
        String key = tablePrefix+i; 
        Delete d=new Delete(Bytes.toBytes(key));
        listOfBatchDelete.add(d);  
    }

    try {
        table.delete(listOfBatchDelete);
    } finally {
        if (hbasePool != null && table != null) {
            hbasePool.putTable(table);
        }
    }
}

方法2:如果要根据扫描结果进行批量删除。

代码语言:javascript
运行
AI代码解释
复制
public bulkDelete(final HTable table) throws IOException {
    Scan s=new Scan();
    List<Delete> listOfBatchDelete = new ArrayList<Delete>();
    //add your filters to the scanner
    s.addFilter();
    ResultScanner scanner=table.getScanner(s);
    for (Result rr : scanner) {
        Delete d=new Delete(rr.getRow());
        listOfBatchDelete.add(d);
    }
    try {
        table.delete(listOfBatchDelete);
    } catch (Exception e) {
        LOGGER.log(e);

    }
}

现在来讨论使用CoProcessor的问题。只有一个建议,除非你是HBase专家,否则不要使用CoProcessor。CoProcessors有很多内置的问题,如果你需要,我可以为你提供详细的描述。其次,当您从HBase中删除任何内容时,它永远不会直接从Hbase中删除,而是有一个墓碑标记附加到该记录上,然后在重大压缩期间将其删除,因此不需要使用高度耗尽资源的协处理器。

修改代码以支持批处理操作。

代码语言:javascript
运行
AI代码解释
复制
int batchSize = 50;
int batchCounter=0;
for(int i=startRange;i<=endRange;i++){

String key = tablePrefix+i;
Delete d=new Delete(Bytes.toBytes(key));
listOfBatchDelete.add(d);  
batchCounter++;

if(batchCounter==batchSize){
    try {
        table.delete(listOfBatchDelete);
        listOfBatchDelete.clear();
        batchCounter=0;
    }
}}

创建HBase配置并获取表实例。

代码语言:javascript
运行
AI代码解释
复制
Configuration hConf = HBaseConfiguration.create(conf);
hConf.set("hbase.zookeeper.quorum", "Zookeeper IP");
hConf.set("hbase.zookeeper.property.clientPort", ZookeeperPort);

HTable hTable = new HTable(hConf, tableName);
票数 17
EN

Stack Overflow用户

发布于 2015-09-28 13:20:24

如果您已经知道要从HBase表中删除的记录的行键,则可以使用以下方法

1.首先使用这些行键创建一个列表对象

代码语言:javascript
运行
AI代码解释
复制
for (int rowKey = 1; rowKey <= 10; rowKey++) {
    deleteList.add(new Delete(Bytes.toBytes(rowKey + "")));
}

2.然后使用HBase连接获取表对象

代码语言:javascript
运行
AI代码解释
复制
Table table = connection.getTable(TableName.valueOf(tableName));

3.一旦有了表对象,就可以通过传递列表来调用delete()

代码语言:javascript
运行
AI代码解释
复制
table.delete(deleteList);

完整的代码如下所示

代码语言:javascript
运行
AI代码解释
复制
Configuration config = HBaseConfiguration.create();
config.addResource(new Path("/etc/hbase/conf/hbase-site.xml"));
config.addResource(new Path("/etc/hadoop/conf/core-site.xml"));

String tableName = "users";

Connection connection = ConnectionFactory.createConnection(config);
Table table = connection.getTable(TableName.valueOf(tableName));

List<Delete> deleteList = new ArrayList<Delete>();

for (int rowKey = 500; rowKey <= 900; rowKey++) {
    deleteList.add(new Delete(Bytes.toBytes("user_" + rowKey)));
}

table.delete(deleteList);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32598003

复制
相关文章
简化 SQL 递归查询
自引用类型的表结构处理起来比较麻烦,比如“分类”表,通常包括自己的ID和父分类ID,当我们要做父分类路径、子分类路径之类的查询时很不方便,例如我们会使用嵌套查询,或者添加冗余字段来记录分类路径信息,都比较麻烦,有没有简单的办法呢?
dys
2018/10/23
1.2K0
sql无限递归查询
--------------所有子集数据包括自己--------------------- CREATE PROCEDURE ALLSON @ID INT AS BEGIN WITH CTE AS ( SELECT ID,PID,NAME,0 AS LVL FROM TEST1 WHERE ID = @ID UNION ALL SELECT D.ID,D.PID,D.NAME,LVL+1 FROM CTE C INNER JOI
磊哥
2018/05/08
8760
SQL递归查询(with cte as)
  递归CTE最少包含两个查询(也被称为成员)。第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点。第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发。在逻辑上可以将CTE名称的内部应用理解为前一个查询的结果集。
跟着阿笨一起玩NET
2018/09/18
1.3K0
sql server递归查询
-----------------------------------------------
跟着阿笨一起玩NET
2018/09/20
2K0
sql server递归查询
SQL递归查询知多少
最近工作中遇到了一个问题,需要根据保存的流程数据,构建流程图。数据库中保存的流程数据是树形结构的,表结构及数据如下图: 仔细观察表结构,会发现其树形结构的特点: FFIRSTNODE:标记是否为根节点
圣杰
2018/01/11
4.6K0
SQL递归查询知多少
SQL 高级查询 ——(层次化查询,递归)
层次化结构可以理解为树状数据结构,由节点构成。比如常见的组织结构由一个总经理,多个副总经理,多个部门部长组成。再比如在生产制造中一件产品会有多个子零件组成。举个简单的例子,如下图所示
Lenis
2019/12/25
3.8K0
SQL 高级查询 ——(层次化查询,递归)
SQL如何实现MYSQL的递归查询,SQL实现MYSQL递归
所周知,目前的mysql版本中并不支持直接的递归查询,但是通过递归到迭代转化的思路,还是可以在一句SQL内实现树的递归查询的。这个得益于Mysql允许在SQL语句内使用@变量。以下是示例代码。
IT小马哥
2020/03/18
5.1K0
如何进行域名注册网站查询,域名可以转卖吗
域名注册现在越来越受人欢迎,因为想要做好一个网站,就必须要进行域名注册了,有的时候很多人会遇见域名重复的原因,因为现在进行域名注册的企业越来越多,所以当我们进行域名注册之前,就需要进行域名注册网站查询。
用户8739990
2021/07/23
22.5K0
如何进行域名注册网站查询,域名可以转卖吗
oracle中sql的递归查询运用
主键 名字 职位 上级id 部门id
小小鱼儿小小林
2020/06/23
2.8K0
Oracle 递归sql,mybatis的递归查询,与存储过程调用
引用文献:https://www.cnblogs.com/Soprano/p/10659127.html
斯文的程序
2019/11/07
1.1K0
递归查询
oracle ------------------------------------------------------------------------------------------------- Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。 创建示例表: CREATE TABLE TBL_TEST (   ID    NUMBER,   NAME  VARCHAR2(100 BYTE),   PID   NUMBER             
阿新
2018/04/12
9960
10个高级SQL写法,包括窗口函数、联合查询、交叉查询、递归查询
SQL是结构化查询语言的缩写,是一种用于管理关系型数据库的计算机语言。通过使用SQL语句,可以对数据库中的表格进行查询、更新、删除等操作。
网络技术联盟站
2023/06/05
1.5K0
SQL审核 | SQLE 可以进行问题 SQL 下钻分析了
SQL审核工具 SQLE 1.2206.0-pre2 于今天发布。以下对新版本的 Release Notes 进行详细解读。
爱可生开源社区
2022/09/26
6250
SQL审核 | SQLE 可以进行问题 SQL 下钻分析了
mysql省市区递归查询_mysql 递归查询
) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8;
全栈程序员站长
2022/07/02
11.1K0
mysql省市区递归查询_mysql 递归查询
oracle递归查询
这个子句主要是用于B树结构类型的数据递归查询,给出B树结构类型中的任意一个结点,遍历其最终父结点或者子结点。
陈灬大灬海
2018/09/12
1.5K0
oracle递归查询
PostgreSQL=>递归查询
PostgreSQL=>递归查询 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/8232073.html   距上次博客更新刚好两周,这两周发生了很多,比如:S
上帝
2018/06/26
1.9K0
PostgreSQL=>递归查询
转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/8232073.html
上帝
2018/09/27
9110
mysql递归查询
注意:只支持单个查询,意思是不可以根据两个或者两个以上的子节点同时查询出所有父节点。我们可以看到,上面参数都是单个值进行递归查询的。 西面提供一个函数支持多个查询
全栈程序员站长
2022/07/02
3K0
mysql递归查询
汉诺塔递归太难理解了_函数定义时可以用递归吗
记得我第一次做汉诺塔这道题时,是2017年11月。当时,我坐在山大青岛校区图书馆3楼,不知怎么地,看到了这个题。
全栈程序员站长
2022/11/17
7770
oracle递归查询
这个子句主要是用于B树结构类型的数据递归查询,给出B树结构类型中的任意一个结点,遍历其最终父结点或者子结点。
Java架构师必看
2021/12/12
8710
oracle递归查询

相似问题

是否可以使用进行递归SQL查询?

13

递归cte查询可以进行分支剪枝吗?

11

Peewee+sqlite可以进行递归的CTE查询吗?

13

使用此查询可以进行SQL注入吗?

41

可以对sql查询进行批处理吗?

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档