hbase中是否有最大版本号?
如果要在表中插入:hbase中是否有最大版本号?,hbase,Hbase,如果要在表中插入: row | fam:qualifier | timestamp | value 1 | foo:bar | 12345 | 2 1 | foo:bar | 12346 | 3 1 | foo:bar | 12347 | 2 1 | foo:bar | 12348 | 1 . . . 1 | foo:bar | 123410 | 2 我可以在hbase shell中指定要获取特定行的最大版本数,但当我指定例如“100”时,它只返回4个版本。。。 是否有最大值?它只返回4个版
row | fam:qualifier | timestamp | value
1 | foo:bar | 12345 | 2
1 | foo:bar | 12346 | 3
1 | foo:bar | 12347 | 2
1 | foo:bar | 12348 | 1
.
.
.
1 | foo:bar | 123410 | 2
我可以在hbase shell中指定要获取特定行的最大版本数,但当我指定例如“100”时,它只返回4个版本。。。
是否有最大值?它只返回4个版本,因为列族设置为最多存储4个版本 如果要存储更多版本,则需要使用hbase外壳更改CF:
hbase> alter 'table_foo', {NAME => 'column_fam_foo', VERSIONS => 100}
最大版本的默认值为1*:
*max版本的默认值似乎在某个时候从3更改为1。答案部分正确。不正确:hbase存储三个版本。证据见下文。 True:您可以设置hbase通过返回的最大版本数
alter 'marketdata', NAME => 'field', VERSIONS => 100
但是现在让我们假设,我没有更改版本变量
我的hbase中有十个条目,时间戳从0到9。
最新的时间戳是:
hbase(main):025:0> get 'marketdata', 'instrument1', {COLUMN => 'field:ask'}
COLUMN CELL
field:ask timestamp=9, value=0.9940174211042572
1 row(s) in 0.0590 seconds
hbase(main):026:0>
显示的时间戳1到5之间的值为:
hbase(main):027:0> get 'marketdata', 'instrument1', {COLUMN => 'field:ask', TIMERANGE => [0,5], VERSIONS=>5}
COLUMN CELL
field:ask timestamp=4, value=0.530618878519702
field:ask timestamp=3, value=0.051028316270589014
field:ask timestamp=2, value=0.11949750640509116
3 row(s) in 0.0130 seconds
hbase(main):028:0>
。。。当我将结束时间戳设置为10时,它仍然只显示该时间戳之前的最后三个版本,并抑制前三个版本:
hbase(main):028:0> get 'marketdata', 'instrument1', {COLUMN => 'field:ask', TIMERANGE => [0,10], VERSIONS=>5}
COLUMN CELL
field:ask timestamp=9, value=0.9940174211042572
field:ask timestamp=8, value=0.6941263513176372
field:ask timestamp=7, value=0.1814043435754933
3 row(s) in 0.0400 seconds
hbase(main):029:0>
版本的概念在列族级别得到严格维护。这是一个可配置的参数
columnFamily.setMaxVersions(required version);
版本越多,从多个HFiles读取数据的机会也就越大
最好的方法是保持最低版本并将数据封装在一个blob中 等等,如果hbase只存储3个版本,那么如何查看版本4、3、2和9、8、7?不管出于什么原因,shell可能只返回了3,但是您似乎已经“证明”了还有更多版本。真正的答案也更复杂,因为hbase删除版本的方式:它实际上并没有。如果显式删除数据,它将添加一个墓碑,并且在墓碑之前不会看到任何数据。所有其他数据都将可用(并且所有数据都将被存储),直到下一次主要压缩,该压缩将重写存储文件并只保留正确的版本数。嗨,David,你根据codingFoo编辑的回复投了反对票。这个答案仍然有点误导。您缺少的是压缩问题。当HBase存储一个值时,它只是将其附加到文件中。它从不删除数据。为了实现delete,他们附加了一个墓碑,本质上说应该忽略一个值。现在,当压缩发生时,文件将被重新写入,旧版本或删除的版本都不会被重写为新文件。因此,当您能够看到旧版本时,有一个时间窗口,但该时间窗口是有限的,您不应该依赖旧版本。