Sqoop导出插入重复条目

时间:2016-08-25 05:24:07

标签: hadoop sqoop cloudera-quickstart-vm

我试图理解sqoop导出是如何工作的。我在mysql中有一个表站点,其中包含两列id和url并包含两行

1,www.yahoo.com
2,www.gmail.com

该表没有主键

当我通过执行以下命令将条目从HDFS导出到mysql站点表时,它会插入重复的条目

我在HDFS中有以下条目

1,www.one.com
2,www.2.com
3,www.3.com
4,www.4.com

sqoop export --table site --connect jdbc:mysql://localhost/loudacre -- username training --password training --export-dir /site/ --update-mode allowinsert --update-key id

因此,不再更新已存在的ID,而是再次插入重复ID(意味着两个1,1为www.one.com,1为www.yahoo.com)

即使我删除了--update-key,结果也一样。它发生了,因为表没有主键

我在Cloudera quickstart VM中使用sqoop 1.4.5

任何帮助?

1 个答案:

答案 0 :(得分:2)

根据Sqoop docs

  

MySQL将尝试插入新行,如果插入失败并出现重复的唯一键错误,则会更新相应的行。

因此,--update-key列应为主键,或者唯一索引

在内部,sqoop将创建这样的查询

INSERT INTO table (id,email) VALUES (1,www.one.com) ON DUPLICATE KEY UPDATE email=www.one.com

所有其他值都是

等等。