目录
概要
HBase的命令只会添加,并不会覆盖和删除。在HBase进行major_compact
时才会对被标记的键值对进行压缩。
验证准备
创建表stu ,含有一个列族info,其保存的最大版本数为1
create 'stu',{NAME => 'info', VERSIONS =>1}
注意点总结
1、delete只会添加标记,不会直接删除数据
delete操作仅仅是加个tombstone标记,未被真正删除。
put 'stu','001','info:name','jack1'
put 'stu','001','info:name','jack2'
delete 'stu','001','info:name'
scan 'stu',{RAW => true}
#RAW=>true 可输出未被压缩的数据
#输出结果:
#ROW COLUMN+CELL
# 001 column=info:name, timestamp=2021-02-22T18:23:49.506, type=Delete
# 001 column=info:name, timestamp=2021-02-22T18:23:49.506, value=jack2
2、put覆盖的旧数据不会直接消失,在最新数据被删除时还有可能会出现
当最新的数据(jack2)被删除后,尝试get最新的数据,会尝试获得前一个未被压缩的数据(jack1),而不是一定返回空值。
get 'stu','001','info:name'
# 输出结果:
# ROW COLUMN+CELL
# 001 column=info:name, timestamp=2021-02-22T18:23:46.932, value=jack1
3、deleteall时间戳≤T的数据行后,再put时间戳≤T的数据会失败
put 'stu','002','info:age','20',100
deleteall 'stu','002','',1000
put 'stu','002','info:age','20',200
get 'stu','002'
# 输出结果为空
# 因为deleteall添加了时间戳≤1000的tombstone标记,再次put时间戳小于1000的将不可见
put 'stu','002','info:age','20',4000
# 时间戳大于1000,成功输出:
# COLUMN CELL
# info:age timestamp=1970-01-01T08:00:04, value=20