微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HBase - 在不扫描的情况下删除具有时间戳范围的行列

如何解决HBase - 在不扫描的情况下删除具有时间戳范围的行列

我想知道是否可以在不扫描整个数据库的情况下删除带有时间戳的某些行的某些列

我的代码如下:

public static final void deleteBatch(long date,String column,String...ids) throws Exception{
    Connection con = null; // connection instance
    HTable table = null; // htable instance
    
    List<Delete> deletes = new ArrayList<Delete>(ids.length);
    for(int i = 0; i < ids.length; i++){
        String id = ids[i];
        Delete delete = new Delete(id.getBytes());
        delete.addColumn(/* CF */,Bytes.toString(column));
        /*
            also tried:
            delete.addColumn(/* CF */,Bytes.toString(column),date);
        */
        delete.setTimestamp(date);
        
        deletes.add(delete);
    }
    
    
    table.delete(deletes);
    table.close();
}

这有效,但会删除给定日期之前的所有列, 我想要这样的东西:

Delete delete = new Delete(id.getBytes());
delete.setTimestamp(date-1,date);

我不想在特定日期之前或之后删除,我想删除我给出的确切时间范围。 此外,我的 HTableDescriptor 的 MaxVersion 设置为 Integer.MAX_VALUE 以保留所有更改。

Delete API Documentation中所述:

指定时间戳,deleteFamily 和 deleteColumns 将删除所有 时间戳小于或等于通过的版本

删除所有时间戳等于或小于给定日期的列。

我怎样才能做到这一点?

感谢任何答案

解决方法

经过数周的努力,我找到了解决此问题的方法。

apache HBase 有一个名为 coprocessor 的功能,它托管和管理数据级操作(获取、删除、放置...)的核心执行,并且可以为自定义计算覆盖(开发),例如针对客户端范围之外的数据进行数据聚合和批量处理。

对于bulk delete等常见问题有一些基本的实现。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。