在单个put调用中覆盖hbase cell

时间:2014-08-29 07:09:04

标签: java hbase

我想知道使用Java API在单个put调用中覆盖单元格值的行为是什么。例如

HTable table;
....
Put p = new Put("key".getBytes());
p.add("cf".getBytes(), "qualifier".getBytes(), "value1".getBytes());
p.add("cf".getBytes(), "qualifier".getBytes(), "value2".getBytes());`
table.put(p);

我想知道这会是什么行为?

  1. 是否只有一个版本的单元格插入行"键"?如果是哪一个?
  2. 是否会为行插入两个版本的单元格" key"?如果是的话,订单会是什么?
  3. 如果在某处记录,那么文档的链接也可以阅读。

2 个答案:

答案 0 :(得分:0)

我使用一段简单的代码验证了

public class HbaseSample {
  public static void main(String[] args) throws IOException {
    Configuration config = HBaseConfiguration.create();
    HTable table = new HTable(config, "ehsan_test");
    Put p = new Put("key".getBytes());
    p.add("cf1".getBytes(), "qualifier".getBytes(), "value1".getBytes());
    p.add("cf1".getBytes(), "qualifier".getBytes(), "value2".getBytes());
    table.put(p);
  }
}

看起来问题中的选项(1)是正确的行为。更多的是它存储的“value2”。 任何文档参考,仍然会受到赞赏。

答案 1 :(得分:0)

简而言之,第一个add电话被第二个覆盖。而不是文档参考,让我们来看看代码:

  • addPut来电createPutKeyValue
  • 的实例上
  • 它创建KeyValue的实例,在这种情况下使用相同的行键,列族和限定符参数,
  • Put中的familyMap由姓氏键入,因此第二次调用add会替换第一个中指定的值。

所以最后一个获胜;)