如果具有相同的值,则停止Hbase更新操作

时间:2018-08-15 10:39:30

标签: hadoop nosql hbase bigdata

我在Hbase中有一个名为'xyz'的表。当我对此表执行更新操作时,即使它是同一记录,它也会更新一个表。

如何控制第二条记录不被添加。

例如:

create 'ns:xyz',{NAME=>'cf1',VERSIONS => 5}

put 'ns:xyz','1','cf1:name','NewYork'

put 'ns:xyz','1','cf1:name','NewYork'

如果我检查所有版本,上述put语句将给出2条具有不同时间戳的记录。我希望它不应该添加第二条记录,因为它具有相同的值

2 个答案:

答案 0 :(得分:0)

HBase不会遍历整个行并确定是否与要添加的数据相同。这将是一个昂贵的操作,并且HBase以其快速的插入速度而自豪。

如果您真的很想这样做(我想问您是否真的想这样做),则应该首先执行GET来查看表中是否已经存在数据。

您还可以编写一个协处理器,以在每次输入PUT数据时执行此操作,但同样会降低性能。

答案 1 :(得分:0)

正如@Ben Watson提到的那样,HBase以其书面性能而闻名,因为它不需要检查值的存在,因为默认情况下会维护多个版本。

您可以采取的一种方法就是使用自定义版本控制。如下面的屏幕截图所示,行键已经有两个版本。现在,如果您要插入具有相同时间戳的相同记录。 HBase将仅使用该值覆盖同一记录。

enter image description here

注意:留给您的应用程序为特定的值获得相同的时间戳。