如何在Sqoop Export中使用复合键实现Oracle数据Upsert?
使用Sqoop Export实现复合键的Upsert操作
很高兴看到你已经搞定了单主键的Sqoop Upsert功能!要切换为复合键的场景其实非常直接,只需要调整--update-key参数的写法即可,下面是具体的操作步骤和示例:
核心修改点
- Sqoop的
--update-key参数支持传入多个列名,只需要用逗号将复合键的各个字段分隔开,不需要额外添加其他参数。 - 确保你指定的复合键列在Oracle目标表中确实是联合主键(或者用于匹配记录的唯一标识组合),同时Hive源表中的对应列名和数据类型要与Oracle表完全一致,避免匹配失败。
修改后的完整命令示例
假设你的复合键是roll和student_id,修改后的命令如下:
hadoop jar sqoop-job-launcher-0.0.1.jar com.myclass.sqoop.SqoopLauncher sqoop export \ --connect 'SQLconnectionString' \ --table 'SQLtableName' \ --update-mode allowinsert \ --update-key roll,student_id \ --hcatalog-database 'HiveDatabaseName' \ --hcatalog-table 'hiveTableName' \ --input-null-string null
关键注意事项
- 复合键的列名顺序不强制要求和Oracle表的主键顺序一致,但建议保持一致,避免后续维护混淆。
- 要保证Hive表中复合键组合的唯一性,否则可能会出现Oracle表中一条记录被Hive中多条记录重复更新的情况。
--update-mode allowinsert参数保持不变,它依然负责控制当复合键匹配不到时执行插入操作,匹配到时执行更新操作。
内容的提问来源于stack exchange,提问作者Adarsh Kumar
相关产品推荐
相关产品推荐

