【问题标题】:how to add column to column family in hbase如何在hbase中将列添加到列族
【发布时间】:2012-09-12 21:03:17
【问题描述】:

我是 hbase 的新手。你能告诉我如何将列添加到列族。我有这样的数据:

{
name: abc
addres: xyz
}

我有一个列族人的表格测试。如何将姓名和地址作为一列添加到此人。请在 hbase 命令行和 java 中显示。

【问题讨论】:

    标签: java command-line hbase


    【解决方案1】:

    HBase 外壳:

    来自 Hbase shell 维基:http://hbase.apache.org/book.html#shell

    在指定的表/行/列和可选的时间戳坐标处放置一个单元格“值”。要将单元格值放入标有时间 'ts1' 的列 'c1' 下的行 'r1' 的表 't1' 中,请执行以下操作:

    hbase> put 't1', 'r1', 'c1', 'value', ts1
    

    在你的情况下是这样的:

    hbase> put 'test', 'yourRow', 'person:name', 'abc'
    hbase> put 'test', 'yourRow', 'person:address', 'xyz'
    

    在 Java 中:

    Configuration config = HBaseConfiguration.create();
    HTable table = new HTable(config, "test");
    
    Put p = new Put(Bytes.toBytes("yourRow"));
    p.add(Bytes.toBytes("person"), Bytes.toBytes("name"),
        Bytes.toBytes("abc"));
    table.put(p);
    

    【讨论】:

    • 您知道 Hbase 的“person:name”是否与其他任何名称不同?换句话说,“:”在hbase中有特殊含义还是只是将整个作为一个字符串?
    • 提供的值需要采用这种格式:“:”。 是列族中的列名, 是列族
    • 我可以看到我必须有第一个家庭列,但是如果我想添加另一列像“person:name:firstname”这样的列,那么“name:firstname”在 hbase 中是否被特殊对待?
    • 你不能这样做,你不能有嵌入的列族......在这种情况下避免使用 person:name 并直接使用 person:firstname
    • 在 java 示例中,您可以将 Column Family 设置为“person”,将 Column Qualifier 设置为“name:firstname”:p.add(Bytes.toBytes("person"), Bytes.toBytes ("name:firstname"), Bytes.toBytes("Sean"));所有行键、列族名称、列限定符和值都只是字节数组,因此它们可以是您想要的任何东西。这就是 Bytes.toBytes(val) 调用的目的
    【解决方案2】:

    JP Bond 为您提供了您需要的示例代码 - 我只是想补充一点,HBase 的优点之一是它是稀疏的(即不为没有值的行保留列空间)。此设计决策的一个特点是,您只需为其编写即可创建一个新列(列族 + 限定符)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      相关资源
      最近更新 更多