今日问题:发现delete操作不起作用
看如下的解释
- 删除指定的所有版本以及删除指定列
- 删除指定列的最新版本,意思就是:如果删除了最新的版本,老的版本就会被使用。。。。
/**
* 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这个才能实现删除掉所有版本。
网友评论