我试图理解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
任何帮助?
答案 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
等等。