В Kettle я использую следующую логику в преобразовании, учитывая в качестве входных данных несколько строк X и Y:
[User Defined Java Expression] Generate ID
[Insert / Update] Update/Insert table set id = generatedId, name=X, company=Y where name = X; don't update the ID column
[Database Value Lookup]select id from table where name = X
Идея состоит в том, чтобы обновить существующие записи в таблице или создать новые и получить идентификаторинтересной строки на следующем шаге (который может быть существующим или только что сгенерированным).
Это прекрасно работает при выполнении на MySQL + MyISAM, но не на MySQL + InnoDB, при этом все остальные параметры идентичны,Последний шаг завершается неудачно, когда строка просто вставляется на втором шаге, но работает для строк, уже существующих в базе данных.Кажется, что соединение пытается выполнить SELECT последнего шага до того, как произошла фактическая вставка.Все параметры установлены по умолчанию в настройках MySQL (MySQL 5.1 и 5.5 показывают одинаковое поведение).
Итак, мои вопросы: Каковы соответствующие параметры в Kettle и / или MySQL?Как я могу гарантировать, что это работает как положено?Я не могу вернуться к MyISAM.