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

Posted

技术标签:

【中文标题】如果具有相同的值,则停止 Hbase 更新操作【英文标题】:Stop Hbase update operation if it have same value 【发布时间】:2018-08-15 10:39:29 【问题描述】:

我在 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 条具有不同时间戳的记录。我期望它不应该添加第二条记录,因为它具有相同的值

【问题讨论】:

【参考方案1】:

HBase 不会查看整行并确定它是否与您添加的数据相同。这将是一项昂贵的操作,而 HBase 以其快速的插入速度而自豪。

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

您也可以在每次 PUT 数据时编写一个协处理器来执行此操作,但同样性能不佳。

【讨论】:

【参考方案2】:

正如@Ben Watson 所提到的,HBase 最出名的是它的写入性能,因为它不需要检查值是否存在,因为默认情况下会维护多个版本。

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

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

【讨论】:

以上是关于如果具有相同的值,则停止 Hbase 更新操作的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 如果对应的值都相同,则使用值更新字段

pyspark:如果列在不同行中具有相同的值,则合并两行或多行

UnSafe类中的CAS操作

Leetcode练习(Python):树类:第100题:相同的树:给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

如果所有列中的值相同,则删除行

按具有相同值的值排序时定义的 SQL 行为