Pentaho Импортировать уникальные записи в базу данных

Я новичок в Pentaho Spoon, и я хотел бы импортировать записи файла csv в таблицу базы данных. Однако в таблицу базы данных следует импортировать только уникальные записи. Вот почему мне нужно сравнивать КАЖДУЮ запись со всеми записями таблицы базы данных, чтобы определить, следует ли импортировать запись или нет.

Пока что я опробовал предложенный CRUD-шаблон, который выглядит так:  введите описание изображения здесь

Как вы можете видеть на картинке, я объединяю входные данные excel и входные данные таблицы (игнорируйте этапы приведения. Мне нужно было привести значение, потому что оно отличалось в формате с плавающей запятой: формат базы данных был # .000000, а формат csv с плавающей точкой. было # .0)

После объединения слиянием я сравниваю флаг (который задается строками слияния (diff), и если сравниваемые записи новые, я импортирую их в таблицу базы данных, если они изменены, я обновляю запись и если они удаляются или идентичные, я просто ничего не делаю. Пока все хорошо.

Но вот проблема: если я перетасовываю записи входного файла csv и заново запускаю преобразование, все записи импортируются заново и, следовательно, дублируются в моей таблице базы данных (чего я хотел избежать). Еще раз подчеркну: правильный способ решить эту проблему состоит в том, что каждая строка входного файла csv сравнивается со ВСЕМИ записями в таблице базы данных.

Как я могу это реализовать? Какие-либо предложения? Огромное спасибо заранее!!


person user7335295    schedule 22.11.2017    source источник


Ответы (2)


Merge Rows (diff) ожидают, что ввод будет отсортирован. Обычно вас предупреждают об этом во всплывающем окне.

Поместите шаг Sort rows в поток вывода входных данных Excel, прежде чем он достигнет Merge Rows (diff).

Вы должны сделать то же самое между Table Input и Merge Rows (diff). Конечно, вы можете подумать, что можете сделать это в sql-операторе Table Input.

Однако здесь есть ловушка для новичков. У вас есть 3 других шага Output Rows, Update и Delete, которые работают с той же таблицей. И эти шаги могут заблокировать таблицу. Так как в Kettle все шаги выполняются одновременно, вы не знаете, какие шаги будут запущены первыми, а таблица может быть заблокирована и никогда не сможет прочитать даже первую запись. На жаргоне это называется автоблокировкой, и для ее решения можно использовать шаг Sort Row в качестве буфера. .

person AlainD    schedule 22.11.2017

Вы можете использовать элемент управления «Поиск / обновление измерений», который обеспечивает те же функции, которых вы пытаетесь достичь.

Спасибо, нилеш

person NNaseet    schedule 25.11.2017