Как импортировать уникальные данные с Talend?
У меня есть 100M наборов данных в Oracle, и я пытаюсь импортировать все эти наборы данных в Neo4j с Talend. Мой вопрос заключается в том, что, поскольку 100M наборы данных обновляются каждый день, как я могу убедиться, что Talend будет импортировать только наборы данных, которых еще нет в базе данных neo4j? Другими словами, talend будет импортировать только обновленные наборы данных.
Например, предположим, что Neo4j содержит 38890, 38891, 38892 прямо сейчас. В Oracle обновленные наборы данных: 38890,38891, 38892, 38893. Ожидаемый результат - 38893, будут только импортированные.
Наборы данных очень большие, кажется, не очень эффективно каждый день импортировать эти наборы данных в Neo4j и удалять дубликаты. Может ли кто-нибудь помочь мне, пожалуйста? Заранее спасибо.
2 ответа
Вы должны сделать 2 загрузки, 1 для начальной полной нагрузки, точно так же, как вы делаете это сейчас, и еще одну для ежедневных дополнительных нагрузок.
Проверьте ваши первичные ключи и найдите способ сделать запрос SELECT, который будет возвращать ваши новые / измененные строки. Вам нужен еще один запрос, который покажет вам, какие строки были удалены / изменены, так как вам нужно удалить эти строки перед добавлением новых / измененных строк в вашу базу данных.
Чтобы запустить это автоматически, вам нужно щелкнуть правой кнопкой мыши на вашей работе и выбрать "Экспортировать работу". Она создаст вашу работу в виде файла JAVA JAR. С пусковой установкой.sh и.bat. Затем вы можете использовать планировщик Windows, чтобы выполнять это ежедневно, или использовать CRON, чтобы выполнять его ежедневно, если у вас есть сервер Linux.
У вас наверняка есть обновленная временная метка в ваших таблицах в oracle, поэтому я бы использовал ее для фильтрации данных, которые были обновлены только после последнего импорта, а это будет намного меньше данных, например, 1-5M строк.
Для этих записей вы можете иметь уникальное ограничение, а затем использовать шифр с MERGE для записей, которые можно получить или создать.
Убедитесь, что вы используете параметры для обновления данных против встроенных или серверных API.
FOREACH (p in {people} |
MERGE (person:Person {name:{p.name}})
ON CREATE SET person.age = p.age, ...
}