仅当值不同时才更新 HBase 表

Posted

技术标签:

【中文标题】仅当值不同时才更新 HBase 表【英文标题】:Updating HBase table only if value is different 【发布时间】:2016-10-25 15:49:51 【问题描述】:

我正在通过 Pig 将数据加载到 HBase。 pig 脚本每天运行以在各种 hive 表中查找更新的记录,执行连接和处理,然后加载到 HBase。我遇到的问题是有时记录的一部分会更新,但其他部分不会。

示例: 带有键 abcd123 的记录存在于 hive 表 1 和 hive 表 2 中。在 hive 表 1 中,有新数据,但在 hive 表 2 中没有。我的 pig 脚本连接两个表和然后将连接的记录加载到 hbase,更新 hbase 中密钥 abcd123 的现有记录。

有没有办法让 HBase 检查当前在 hbase 中的密钥数据是否与 pig 脚本尝试加载的数据不同,然后只接受不同值的写入?用一堆没有改变的数据来更新行只是为了得到一个已经改变的值是没有意义的。

【问题讨论】:

【参考方案1】:

您需要开发您的自定义解决方案来实现这一点,您可以尝试:

方法 1- 您可以维护数据集的两个副本,第一个在 hive/pig 中,另一个在 hbase 中,始终保持同步。每当您收到新的更改(表 1 或表 2)时,连接表 1 和表 2,然后将旧数据集与新创建的数据集进行比较,以找出需要更新的增量记录。将 delta 更改更新为 hbase

方法 2- 将日期列附加到两个表(表 1 和表 2),这将帮助您找出增量变化。加入这两个表并使用日期列找出 delta chagnes。 (如果您需要更多详细信息,请添加评论)。 对于 delta 更改的每条记录,使用 row key 查询 hbase,然后在新值与 hbase 值之间进行比较,如果某些内容已更改,然后更新 hbase 中的 rowkey 值。

【讨论】:

谢谢,方法 2 似乎对我有用。谢谢

以上是关于仅当值不同时才更新 HBase 表的主要内容,如果未能解决你的问题,请参考以下文章

仅当值不为空时,Laravel 才请求验证规则?

仅当值不存在时才使用 lodash 推送到数组?

仅当值不存在时才使用lodash push到数组?

仅当值不存在时才返回行

Spring - 仅当值不为空时才设置属性

仅当值存在时,才通过 vlookup 另一个数据框替换列中的值