Да, для большого объема данных потребуется много времени. Однако вы можете оптимизировать процесс, воспользовавшись преимуществами оптимизации, которую могут выполнять базы данных.
Типичным способом сделать это является создание преобразования с двумя шагами ввода таблицы и шагом слияния (diff). Этот шаг принимает два входных потока, сопоставляет ключи и затем сравнивает любые другие поля, которые вы укажете, добавляя флаг в выходной поток с «новым», «удаленным», «измененным» или «идентичным». В вашем случае вы заботитесь только о «удаленных».
Если вы хотите проверить наличие записей, вам нужны только первичные / уникальные ключи, никаких других полей. Это позволит исходной базе данных использовать индекс и даже не касаться самой таблицы. То же самое касается получения записей из целевой таблицы, хотя, очевидно, вы внесете в нее изменения позже.
Входные данные таблицы должны выбирать столбцы первичного / уникального ключа и их порядок. Возможно, вам придется отсортировать строки в Pentaho, если исходные базы данных отличаются, и у вас есть не-числовой ключ c, но я предполагаю, что используется целое число или bigint.
Соедините два потока с шаг слияния (различий). Целевая таблица - это ссылка (старое состояние), исходная таблица - это сравнение (новое состояние). Используйте кнопку Получить поля, чтобы получить ключевые поля и сравнить поля. Это должны быть только ваши ключевые столбцы.
Добавьте шаг фильтрации строк и отфильтруйте по flagfield = "Удалено". Добавьте два фиктивных шага и соедините их как true и false. Теперь запустите преобразование и убедитесь, что строки, имеющие значение «true», действительно присутствуют в цели, но больше не в источнике.
После того, как вы проверили это и подтвердили, что он дает правильные строки, вы бы хотите использовать шаг «Удалить», чтобы удалить записи целевой таблицы. Это может привести к взаимоблокировке, если вы делаете это непосредственно в одной и той же трансформации, поскольку вы одновременно читаете и удаляете из целевой таблицы. Поэтому вместо этого вы можете добавить шаг «Копировать строки в результат», который передаст строки родительскому заданию.
В родительском задании вы выполняете второе преобразование. Для этого нужно всего два шага: получить строки из результата и удалить.