Экспорт Sqoop со вставкой повторяющихся записей

Я пытаюсь понять, как работает экспорт 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

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

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

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

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

1 ответ

Решение

Согласно документам Sqoop,

MySQL попытается вставить новую строку, и если вставка завершится неудачно с ошибкой дублирования уникального ключа, она обновит соответствующую строку.

Так что либо --update-key столбец должен быть первичным ключом или иметь уникальный индекс на нем.


Внутренне sqoop создаст такой запрос

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

и так далее для всех других ценностей.

Другие вопросы по тегам