我想在hbase上把ttl设置成一行。我无法将ttl设置为列族,因为该表已经存在,我无法更改它。
我尝试的是在put操作中使用setttl函数。但它似乎不起作用,因为当我对表进行扫描操作时,即使时间已经过去,信息仍然存在。
如果我在函数中输入一个负值,我在表中没有任何数据,我认为这是有意义的,因为我使用的是负的ttl,因此数据根本没有被存储。。。
1) 你认为我用的是正确的函数吗?
2) 有没有办法在hbase中查看这些信息(行的ttl值)?
edit:下面是descripe命令的输出(请注意,我不能更改列族的ttl值):
hbase(main):010:0> describe "Snapshot"
Table Snapshot is ENABLED
Snapshot, {CONFIGURATION => {'KeyPrefixRegionSplitPolicy.prefix_length' => '8', 'SPLIT_POLICY' => 'org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy'}}
COLUMN FAMILIES DESCRIPTION
{NAME => 'metadata', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'GZ', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}
{NAME => 'sample', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'GZ', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}
edit2:我想我可能在hbase版本1.0.0中遇到了一个bug或者一些奇怪的东西,因为ttl在大多数情况下都是按预期工作的。但是如果我设置了它,在它过期之前,我在表中强制拆分,我发现ttl将不再工作。就像分裂过程中没有保持单元格ttl值一样。我发现它以前对我不起作用,因为我的ttl是近似的。一天,我有一些分裂的事件在这段时间。
我将在其他版本中验证此行为,如果发现新的内容,请告诉您。
1条答案
按热度按时间xmjla07d1#
该列族的最小版本参数是什么?如这里所提到的,如果它是1,即使ttl已经过期,hbase也会保留值。
http://comments.gmane.org/gmane.comp.java.hadoop.hbase.user/44036
(谢谢你的提问,我今天学到了新东西:)