Hadoop Sqoop导出插入重复条目
我试图了解sqoop导出是如何工作的。我在mysql中有一个表站点,它包含两列id和url,并包含两行Hadoop Sqoop导出插入重复条目,hadoop,sqoop,cloudera-quickstart-vm,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导出--表站点--连接jdbc:mysql://localhost/loudacre --用户名培训
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导出--表站点--连接jdbc:mysql://localhost/loudacre --用户名培训--密码培训--导出目录/站点/--更新模式allowinsert--更新密钥id
因此,与其更新已经存在的id,不如再次插入重复的id(即两个1,一个用于www.one.com,一个用于www.yahoo.com)
即使删除--update键,结果也是一样的。发生这种情况是因为表没有主键吗
我在Cloudera quickstart VM中使用SQOOP1.4.5
有什么帮助吗?根据Sqoop
MySQL将尝试插入新行,如果插入失败并出现重复的唯一键错误,它将更新相应的行
因此,--updatekey
列应该是主键,或者在其上有唯一索引
在内部,sqoop将创建如下查询
在重复密钥更新email=www.one.com上的表(id,电子邮件)中插入值(1,www.one.com)
依此类推所有其他值。根据Sqoop
MySQL将尝试插入新行,如果插入失败并出现重复的唯一键错误,它将更新相应的行
因此,--updatekey
列应该是主键,或者在其上有唯一索引
在内部,sqoop将创建如下查询
在重复密钥更新email=www.one.com上的表(id,电子邮件)中插入值(1,www.one.com)
依此类推所有其他值。是,当id=1时,它将更新行,但我无法理解为什么它再次插入id=1的新条目。我是否做错了什么。@Deepak_Spark_初学者,正如您所说,
id
不是主键。您是否在id
字段上创建了唯一索引?不,我的表没有。我将创建它,然后再试一次。非常感谢您的快速帮助response@Deepak_Spark_Beginner正如我在回答中提到的,只有当它是主键或上面有唯一索引时,它才会工作。您可以使用-createuniqueindex index_1在站点上创建索引(id)
Yes当id=1时,它将更新该行,但我不明白为什么它再次插入id=1的新条目。我是否做错了什么。@Deepak_Spark_初学者,正如你所说的id
不是主键。您是否在id
字段上创建了唯一索引?不,我的表没有。我将创建它,然后再试一次。非常感谢您的快速帮助response@Deepak_Spark_Beginner正如我在回答中提到的,只有当它是主键或具有唯一索引时,它才会工作。您可以使用-create unique index index_1 on site(id)