Hbase数据真正的删除时间

Flush会进行删数据

Flush只会删除当前memStore中重复的数据(timestamp较小的删除)

StoreFile重复的并不会删

被标记为DeleteColumn的不会被删除

 

Major Compact也会进行删数据(当文件数>=3时,compact调用的也是major compact)

major compact 会将全部重复的数据进行删除,包括Storefile中的

major compact会将被标记为DeleteColumn的删除

 

在建表时如果指定存储2个版本,那么put进去相同rowkey的数据时,只会保留两个timestamp大的

 

为什么flush时被标记为删除的数据不会被删除?

如果flush时,被标记的数据删除了,StoreFile中有相同rowkey的数据。此时查看这个rowkey的数据时任然显示,这就不合常理了。

 

在hbaseAPI层面,delete其实是put的过程,普通的put是添加一个value值,而delete的过程是添加一个Type为delete的过程。

关于Delete:(代码层面)

如果删除时只指定了rowkey,将会删除全部rowkey相同的数据(全部versions) =>  delete标记为DeleteFamily

如果删除时指定了rowkey+columnfamily,将会删除整个rowkey相同的columnFamily(全部versions)  => delete标记为DeleteFamily

如果删除时指定了rowkey+columnFamily+column:有两种API:

一:只会删除指定的versions,如果不传时间戳,删除最新的versions(开发中慎用!)   => delete标记为Delete(此标记只会影响这一条数据,别的数据在查询时还会返回)

Delete delete = new Delete(Bytes.toBytes(row));

delete.addColumn(Bytes.toBytes(columnF),Bytes.toBytes(column),152365988745L);

二:删除小于等于传入时间戳的全部的versions ,如果不传时间戳删除指定列所有versions   => delete标记为  Delete column

Delete delete = new Delete(Bytes.toBytes(row));

delete.addColumns(Bytes.toBytes(columnF),Bytes.toBytes(column),152365988745L);

你可能感兴趣的:(大数据-Hbase)