我通过 Pig 将数据加载到 HBase 。 pig脚本每天运行以在各种配置单元表中查找更新的记录,执行连接和处理,然后加载到HBase。我遇到的问题是,有时记录的一部分会更新,但不会更新其他部分。
示例:带有密钥abcd123的记录存在于hive表1和hive表2中。在hive表1中,有新数据,但不在hive表2中。我的猪脚本连接两个表和然后将连接的记录加载到hbase,更新密钥abcd123的hbase中的现有记录。
有没有办法可以让HBase检查以查看当前在密钥的hbase中的数据是否与pig脚本尝试加载的数据不同,然后只接受写入不同的值?没有必要用一串没有改变的数据来更新行,只是为了得到一个已经改变的值。
答案 0 :(得分:1)
您需要开发自定义解决方案才能实现这一目标,您可以尝试:
方法1 - 您可以维护数据集的两个副本,首先是 hive / pig ,另一个是hbase,保持两者始终同步。每当您收到新的更改(表1或表2)时,请连接表1和表2,然后将旧数据集与新创建的数据集进行比较,以找出需要更新的增量记录。将增量更改更新为 hbase 。
方法2 - 将日期列附加到两个表(表1和表2),这将帮助您找出增量变化。加入两个表并使用日期列查找delta chagnes。 (如果您需要更多细节,请添加评论) 对于增量变化的每个记录,使用行键查询hbase,然后在新值与 hbase 值之间进行比较(如果已更改某些内容),然后更新 hbase 中的rowkey值。