#mysql #sql #csv #talend
Вопрос:
Я загружал данные в MySQL из CSV-файла через Talend, в таблице SQL есть уникальный ключ по номеру (который не является первичным ключом), чтобы гарантировать отсутствие дублирования.
Пример Таблицы:
`id` int(11) NOT NULL AUTO_INCREMENT,
`network_id` varchar(45) DEFAULT NULL,
`num1` varchar(45) DEFAULT NULL,
`num2` varchar(45) DEFAULT NULL,
`date` date DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `num2_unique` (`num2`)
Я обнаружил, что часть данных не была загружена, и единственная причина, которую я могу найти, связана с уникальным ключом в num1.
Из примерно 550 тысяч строк данных 1,5 тысячи строк отсутствовали в таблице после запуска.
Я изолировал 1,5 тыс. строк и загрузил их отдельно, что сработало нормально, но я понятия не имею, почему они не загрузились в первую очередь.
Чтобы проверить, я попробовал это еще раз всего с 50 строками, одна из которых уже была в таблице SQL, поэтому Talend должен был пропустить ее при загрузке, однако Talend взял дублированный уникальный ключ, но не загрузил ни одну из строк, загруженных в таблицу SQL. Как только одна повторяющаяся строка была удалена из CSV-файла, остальные 59 загрузились идеально.
Буду признателен за любые советы о том, почему это происходит и / или как это обойти.
Ответ №1:
в вашем компоненте tDBOutput проверьте, используете ли вы «пакетную вставку» (или «расширенную вставку» или что-то подобное, имя зависит от компонента бд). Массовая вставка часто является поведением по умолчанию : она откатит все данные, которые вы пытаетесь вставить, если в пакете возникнет проблема. Также вы проверили свою схему на компоненте dboutput ? В нем есть столбец «ключ» (флажок), убедитесь, что «num1» не установлен в качестве ключа.
Комментарии:
1. «Расширенная вставка» была выбрана со 100 строками на вставку. Я снял этот флажок, и теперь, похоже, он работает. Большое спасибо.