В 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.