2016-08-25 5 views
0

Я пытаюсь понять, как sqoop экспорт works.I имеет место таблицы в MySQL, которая содержит два столбца идентификатор и URL и содержит два рядаSqoop экспорт вставив дубликаты записи

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

Таким образом, вместо обновления уже существующего идентификатора его вставки дубликата идентификатор еще раз (то есть два 1, 1 для www.one.com и 1 для www.yahoo.com)

даже если удалить --update ключ исход same.Does его происходит потому, что таблица не имеет первичного ключа

Я использую sqoop 1.4.5 в Cloudera QuickStart VM

Любая помощь?

ответ

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

и так далее для всех остальных значений.

+0

Да, когда id = 1, он обновит строку, но я не понимаю, почему она снова вставляет новую запись с id = 1. Я делаю что-то неправильно. –

+0

@Deepak_Spark_Beginner, как вы сказали, 'id' не является первичным ключом. Вы создали уникальный индекс в поле 'id'? –

+0

В моей таблице нет этого. Я создам его, а затем попробую. Спасибо за быстрый ответ –

Смежные вопросы