hbase delete 踩坑

今日问题:发现delete操作不起作用

看如下的解释

  1. 删除指定的所有版本以及删除指定列
  2. 删除指定列的最新版本,意思就是:如果删除了最新的版本,老的版本就会被使用。。。。
/**
 * Delete all versions of the specified column.
 * @param family family name
 * @param qualifier column qualifier
 * @return this for invocation chaining
 */
  public Delete addColumns(final byte [] family, final byte [] qualifier) {
addColumns(family, qualifier, this.ts);
return this;
}


 /**
   * Delete the latest version of the specified column.
   * This is an expensive call in that on the server-side, it first does a
  * get to find the latest versions timestamp.  Then it adds a delete using
  * the fetched cells timestamp.
 * @param family family name
 * @param qualifier column qualifier
  * @return this for invocation chaining
  */
 public Delete addColumn(final byte [] family, final byte [] qualifier) {
   this.deleteColumn(family, qualifier, this.ts);
   return this;
 }

但是举个例子:


image.png

一个表有两个列,这时候如果调用

delete.addColumn(Bytes.toBytes("cf"),Bytes.toBytes("a"))
delete.addColumn(Bytes.toBytes("cf"),Bytes.toBytes("b"))

table.delete
执行删除后


image.png

你会发现还是没有删除掉 a这个列,但是仔细一看你发现 这个a的 timestamp和上面那个的已经不一样了。!!!

一个是1515146085231 ,
一个是1515146081020
也就是最新的这个被删除了,老的还在!!!。

所以必须通过addColumns这个才能实现删除掉所有版本。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容