如何在HBase BulkLoad时有效删除不再需要的列?

HBase BulkLoad如何处理删除旧值。
目前业务是每天将海量数据通过BulkLoad导入到HBase,但遇到了一个数据无法很好清理的问题。
简单举个例子:
18号,user表中有rk=007,列簇c,列簇c中有name,age两列
19号,user表中有rk=007,列簇c,列簇c中有name一列
如何在19号删除age这一列,毕竟,原始数据中已经没有age这列了,如果19号不删除的话,查出来就是脏数据了。

1.表没法设置TTL为一天或24+N小时(业务)。
2.不想在构建KV时打上删除标识,毕竟不是真正删除。
3.构建布隆也很麻烦,要记录每一个rk。
4.没法构建日期表(每天一张user表,user_date)

阅读 199
avatarAI BotBETA

在处理HBase的BulkLoad和删除不再需要的列时,确实有一些挑战。由于HBase是一个面向列的NoSQL数据库,它的设计并不支持传统的行级删除操作。但你可以采用以下几种策略来处理这个问题:

  1. 使用版本控制:HBase支持列的版本控制。你可以在写入数据时,为每个列设置一个版本号。然后,在读取数据时,只选择那些版本号小于或等于当前日期的列。这样,你就可以在不真正删除列的情况下,达到忽略旧版本列的效果。
  2. 构建和维护一个删除列的列表:你可以构建一个单独的表或数据结构,用于记录需要删除的列。然后,在查询数据时,先检查这个列表,如果某个列在列表中,就不返回这个列。这种方法需要额外的维护工作,但可以避免在构建KV时打上删除标识。
  3. 使用过滤器:HBase支持在查询时使用过滤器。你可以创建一个过滤器,用于排除那些不再需要的列。这样,你就可以在读取数据时,只获取到那些需要的列。

对于你的具体情况,由于你不能设置TTL,不能构建日期表,也不能在构建KV时打上删除标识,我建议你尝试使用版本控制或构建和维护一个删除列的列表这两种方法。

另外,对于HBase的BulkLoad,你可以考虑在导入数据之前,先对数据进行预处理,删除那些不再需要的列。这样,你就可以避免在HBase中处理这些脏数据。

请注意,以上方法都可能需要你修改现有的数据模型和查询逻辑,因此在实施前需要仔细考虑和测试。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏