下面是我的一个场景,我在hive仓库中有一个数据,我想将这个数据导出到mysql中“test”数据库的一个名为“sample”的表中。如果sample.test中有一列是主键,并且配置单元(我们正在导出)中的数据在该键下有重复的值,那么很明显作业将失败,那么我如何处理这种情况?提前谢谢
t5zmwmid1#
在执行导出操作之前,通过删除主键中的重复项来处理数据。在主列上使用distinct,然后导出到mysql。
o3imoua42#
如果希望mysql表只包含重复项中的最后一行,可以使用以下方法:
sqoop export --connect jdbc:mysql://<*ip*>/test -table sample --username root -P --export-dir /user/hive/warehouse/sample --update-key <*primary key column*> --update-mode allowinsert
在导出时,默认情况下,sqoop将每一行转换为insert语句。通过指定--update key,可以将每一行转换为update语句。但是,如果特定行不存在以进行更新,则默认情况下会跳过该行。这可以通过使用--update模式allowinsert来重写,它允许将这些行转换为insert语句。
2条答案
按热度按时间t5zmwmid1#
在执行导出操作之前,通过删除主键中的重复项来处理数据。在主列上使用distinct,然后导出到mysql。
o3imoua42#
如果希望mysql表只包含重复项中的最后一行,可以使用以下方法:
在导出时,默认情况下,sqoop将每一行转换为insert语句。通过指定--update key,可以将每一行转换为update语句。但是,如果特定行不存在以进行更新,则默认情况下会跳过该行。这可以通过使用--update模式allowinsert来重写,它允许将这些行转换为insert语句。