MarkLogic - Инкрементная загрузка с использованием MLCP
Версия MarkLogic: 9.0-6.2
Мы пытаемся использовать mlcp для загрузки ежедневных изменений данных клиентов в data-hub-STAGING, а затем используем гармонизированный поток для внесения изменений в data-hub-FINAL.
Как я понимаю, "collector.sjs" используется для возврата Uris, который должен быть согласован. После полной загрузки в 1-й день, существует ли способ, с помощью которого коллектор может определить изменения предыдущего дня и согласовать только эти строки?
У меня есть пара дизайнов
Сохраняйте время пакетного запуска при каждом запуске и имейте логику в сборщике для возврата Uris с более высоким временем выполнения пакета (каждый документ сохраняется с временем выполнения пакета)
Сохраните каждый документ в две коллекции (customer и customer_currentDate), а затем попросите сборщика вернуть документы из коллекции customer_currentDate. Тем не менее, это будет иметь проблемы, если проглатывать и гармонизировать запустить в разные дни
Сохраните каждый документ в две коллекции (customer и customer_batchDateTime), а затем создайте маркер (что-то вроде строки в коллекции PROCESS с PROCESS_IND в качестве 'N'). Затем сборщик просматривает коллекцию PROCESS и ищет документы с PROCESS_IND в виде 'N' и возвращает документы из коллекции customer_batchDateTime. Наконец, writer.sjs будет превращать PROCESS_IND в "Y"
Прежде чем перейти к какому-либо из перечисленных выше вариантов, я просто хочу проверить, есть ли какая-либо встроенная возможность в процессе загрузки или гармонизации, чтобы легко идентифицировать дельта / изменения записей, чтобы я не перегружал процесс.
2 ответа
Я думаю, что "встроенная" возможность - это возможность передавать опции в модуль коллектора. Это позволяет вам выбрать лучший подход для ограничения того, что возвращает коллектор.
Для вашего случая использования, похоже, что лучший / самый простой подход - вставлять все документы каждый день в коллекцию с именем, например, "input-(current date)", а затем подавать ее как опцию в модуль коллектора, чтобы он может применить запрос коллекции.
В качестве альтернативы, вы можете рассмотреть возможность касания документов в Staging, добавив коллекцию с именем processed
например. Вы можете сделать это из основного скрипта в скрипте гармонизации после запуска писателя. Сборщик может просто подавить обработанные документы и работать только с необработанными документами. Возможно, даже проще и надежнее, чем работа с более конкретными именами коллекций.
НТН!