Экспорт 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
и так далее для всех других ценностей.