我需要每天使用sqoop将数据从RDBMS导入HDFS。记录在HDFS上的DeptID列上进行分区,并且还分区为Hive。有可能添加新记录,并且每天都会从源数据库中删除一些记录。我知道sqoop merge可以处理更新。我们总是希望HDFS中的文件状态与数据库记录的状态相同,即如果在数据库中删除/更新的记录应该在HDFS中删除/更新。让我举一个小例子。
我想知道是否可以使用sqoop的当前行为,或者需要自定义map-reduce来实现此目的。
任何帮助表示感谢。
提前致谢。
答案 0 :(得分:0)
如果你的桌子不是太大,你可以通过sqoop做的最好的事情是每天完全导入,覆盖以前的状态。删除已删除的数据是一项艰巨的任务,因为您不知道哪些数据已被删除...
答案 1 :(得分:0)
这不是不可能的。我使用Sqoop和pig脚本实现了相同的场景。您可以使用sqoop每天逐步获取数据。
如果在源上删除了某些数据,则源应该为这些记录发送一些标志。这可以在源端实现。
一旦你获得了带有旗帜的记录,你就可以写一个猪/蜂巢(我更喜欢猪)从你在hdfs中的数据中过滤出那些记录。
请阅读以下链接中的SCD Type 2(慢速变化尺寸): https://en.wikipedia.org/wiki/Slowly_changing_dimension
这应该清除你所有的疑虑。
来自sqoop的快照加载也是一种选择,但如果您的数据规模庞大,则无法提供帮助。
希望这有帮助