Почему Talend пропускает больше строк, чем просто те, у которых есть уникальный ключ?

#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 строками на вставку. Я снял этот флажок, и теперь, похоже, он работает. Большое спасибо.