使用相同的系列在hbase行中存储多个版本:限定符但不同的时间戳。

时间:2014-03-23 04:20:15

标签: java hbase

我想存储具有相同系列的行的多个版本:限定符但不同的值和时间戳。

    Put put = new Put(Bytes.toBytes(key));
    put.add(family, qualifier,timestamp0, value0);
    put.add(family, qualifier,timestamp1, value1);
    table.put(put);

但是,只有其中一个具有较高时间戳的内容将存储在表中。问题不在于MaxVersions。有没有办法让hbase存储这两个版本?

3 个答案:

答案 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映射。