Из вашего краткого описания у вас есть две исходные базы данных, которые должны быть синхронизированы c, но не всегда. Вы используете это задание в Пентахо, чтобы найти различия, но при запуске вы обнаруживаете ложные срабатывания, различия, которые исчезают в течение короткого времени из-за того, что системы снова нагоняют.
Если вы хотите найти постоянные различия, Ваши варианты зависят от обстоятельств ваших операционных систем.
Если вам повезет, у вас есть (или вы можете получить) версия строки из таблиц MS SQL. Они обновляются при изменении строки. Если репликация в DB2 включает их, вы точно знаете, сравниваете ли вы одну и ту же версию строки.
Однако вы, вероятно, не спросите здесь, если у вас уже есть вышеприведенное, так что сейчас Я предполагаю, что вы должны обойтись без надежных меток времени. Кроме того, вероятно, нет тихих часов, которые видят очень мало изменений.
В вашей ситуации я буду обрабатывать «маленькие» наборы строк по 10k, 100k или 1M за раз в преобразовании и использовать родительское задание для увеличения Стартовый ID каждый раз. Это сокращает время запросов и, надеюсь, различия.
Полный пример вы можете увидеть в одном из моих предыдущих ответов здесь . Это немного отличается, потому что это было для смещения / предела с неизвестными итоговыми записями.
Идея состоит в том, что ваше преобразование принимает параметры в качестве входных данных, указывающих, с какого идентификатора начинать и сколько строк брать. Затем он обрабатывает их и сообщает количество обработанных записей. Если последний запрос получил около 0 записей назад, все готово. Из-за изменений в реальном времени он может не достигать 0 точно.
Родительское задание проверяет, завершено ли, а если нет, обновляет новый START_ID и снова выполняет преобразование.
Ваши входные данные из таблицы будут измените это для DB2:
SELECT ...
FROM TABLE
WHERE ID >= ${START_ID}
ORDER BY ID
LIMIT ${BATCH_SIZE}
и MS SQL (это было давно, может быть не правильно):
SELECT TOP ${BATCH_SIZE} ...
FROM TABLE
WHERE ID >= ${START_ID}
ORDER BY ID
Если идентификатор числовой, вы можете вероятно, пропустите шаги Сортировки строк в преобразовании, сэкономив много времени. Если они буквенно-цифровые, сохраните их.
Шаг Merge (diff) делает то же, что и в строках Merge Join и Filter, но требует идентичной компоновки полей. Может быть вариант.
Наконец, я бы добавил Get System Info для метки времени, а затем сохранил любые измененные идентификаторы в таблице с меткой времени, которую вы их обнаружили. Затем сообщайте только о различиях, которые сохраняются более X минут / часов / пробегов.