Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop Sqoop导出插入重复条目_Hadoop_Sqoop_Cloudera Quickstart Vm - Fatal编程技术网

Hadoop Sqoop导出插入重复条目

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 --用户名培训

我试图了解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 --用户名培训--密码培训--导出目录/站点/--更新模式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)