HBase更新操作 我是HBase新手,在HBase客户端API中发现不支持更新操作?对吗 如果是,建议的最佳实践是什么来更新特定行键的值

HBase更新操作 我是HBase新手,在HBase客户端API中发现不支持更新操作?对吗 如果是,建议的最佳实践是什么来更新特定行键的值,hbase,Hbase,我认为您要做的是执行Put操作。 您可以查看HBase以及这篇名为:的博客文章,了解一些示例和操作说明 要更新一行,您必须在单个突变中发出一个“Delete”和“Put”序列,因此它们被视为外部更新 请参阅有关如何构建此类调用的说明。您可以使用PUT来创建或更新任何单元格的值。 除非希望新版本不包含一些旧单元格,否则您不需要使用delete 说我们有 r1:f1:c1:value1 r1:f1:c2:value2 您可以将r1:f1:c1放入新值,您将得到: r1:f1:c1:new val

我认为您要做的是执行Put操作。 您可以查看HBase以及这篇名为:的博客文章,了解一些示例和操作说明

要更新一行,您必须在单个突变中发出一个“Delete”和“Put”序列,因此它们被视为外部更新


请参阅有关如何构建此类调用的说明。

您可以使用PUT来创建或更新任何单元格的值。 除非希望新版本不包含一些旧单元格,否则您不需要使用delete

说我们有

r1:f1:c1:value1
r1:f1:c2:value2 
您可以将r1:f1:c1放入新值,您将得到:

r1:f1:c1:new value 
r1:f1:c2:value2 

请注意,实际上每个单元格都存储为行键、列族、单元格、时间戳、版本和值。因此,根据您设置版本控制的方式(每个列族),您还可以访问旧值,包括执行时间点查询以查看已删除的值。

您好,tonio,如果我错了,请纠正我。我在示例代码中没有看到任何Put API支持更新操作。对于update,我的意思是,HBase表中已经有一行,例如,行键是r1,它有一列名为c1,单元格r1/c1中有一个值。对于更新,我的意思是我想把单元格r1/c1的值改成其他值。如果我错了,请随时纠正我。是的,如果你想更改一行中的值,你必须将delete和put组合在一个原子调用中。请参阅更新的答案。谢谢,您的答案很清楚,并帮助我更好地理解HBase(我只是刚刚开始研究)。你好@Arnon,我的问题更多的是关于如何以原子方式更新。我想以原子操作顺序进行读取(GET)和更新。假设在某种情况下,如何更新取决于读取的值,因此我希望避免在读取和更新之间进行任何更新。在您的示例中,如何实现目标?您可以在HTable API中使用checkAndPut或checkAndDelete,byte[],byte[],byte[],org.apache.hadoop.hbase.client.Put)@tonio hbase是一个“仅附加”存储。这就是为什么HBase会时不时地进行冲突(您需要注意和控制的事情请参见中的“拆分/兼容”部分)是的。HBase为单行上的操作提供原子性-请参阅