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;
 }

但是举个例子:


hbase delete 踩坑_第1张图片
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这个才能实现删除掉所有版本。

你可能感兴趣的:(hbase delete 踩坑)