如果我想在表格中插入:
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个版本... 有没有最大值?
答案 0 :(得分:14)
它只返回4个版本,因为列族设置为最多存储4个版本。
如果您想存储更多版本,则需要更改CF.使用hbase shell:
hbase> alter 'table_foo', {NAME => 'column_fam_foo', VERSIONS => 100}
最大版本的默认值为1 *:
http://hbase.apache.org/book/schema.versions.html
*似乎最大版本的默认值在某些时候从3更改为1.
答案 1 :(得分:2)
答案是部分正确的。不正确:hbase STORES有三个版本。证明见下文。 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>
答案 2 :(得分:0)
版本概念在列族级别上得到严格维护。它是一个可配置的参数。
columnFamily.setMaxVersions(required version);
一个版本的版本越多,同时从多个HFile读取数据的机会越多。
最好的方法是维护最低版本并将数据封装在一个blob中。