0

我试图了解 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 快速入门 VM 中使用 sqoop 1.4.5

有什么帮助吗?

4

1 回答 1

2

根据 Sqoop文档

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

因此,任--update-key一列都应该是主键或具有唯一索引


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

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

对于所有其他值,依此类推。

于 2016-08-25T05:59:45.917 回答