我想存储具有相同系列的行的多个版本:限定符但不同的值和时间戳。
Put put = new Put(Bytes.toBytes(key));
put.add(family, qualifier,timestamp0, value0);
put.add(family, qualifier,timestamp1, value1);
table.put(put);
但是,只有其中一个具有较高时间戳的内容将存储在表中。问题不在于MaxVersions。有没有办法让hbase存储这两个版本?
答案 0 :(得分:0)
没有。对于给定的rowkey,列中只能有一个值。如果你想要另一个值,你必须给它自己的rowkey,或者把它放在不同的列中。
答案 1 :(得分:0)
你错了。
默认情况下,Hbase在一个单元格中有3个版本。这意味着如果在单元格中保存和更新3次,hbase会将它们存储为3个版本的时间戳。 您无法存储带有时间戳的单元格。
如果您想要其他值,则必须将其放在不同的列族或不同的列中。
答案 2 :(得分:0)
我写了一个测试,没关系。 请检查您的配置。
byte[] rowKey = Bytes.toBytes("allen_test_row");
Put put = new Put(rowKey);
put.add(ColumnFamilyName, QName1, 1000, Bytes.toBytes("a"));
put.add(ColumnFamilyName, QName1, 2000, Bytes.toBytes("b"));
table.put(put);
Get get = new Get(rowKey);
get.setMaxVersions(10);
Result result = table.get(get);
KeyValue[] keyValues = result.raw();
Assert.assertEquals(2, keyValues.length);
//have a and b both.
Assert.assertEquals('a' + 'b', keyValues[0].getValue()[0]
+ keyValues[1].getValue()[0]);
从hbase获取数据时? 你指定了maxversion吗?
顺便说一句 您可以将https://github.com/zhang-xzhi/simplehbase用于一个rowkey - 许多DO映射。