Инкрементное извлечение применяется для переноса только измененных данных.
Пакетное инкрементное извлечение используется, в случае, если в источнике есть поля, по которым можно определить измененные строки, например, дата/время изменения. Таким образом можно отфильтровать данные, измененные с момента предыдущей загрузки.
➕ Тоже достаточно просто реализовать
➕ Практически нет проблем с сохранением истории изменений. Но сохраняться будут только конечные состояние строк. Если в течение регламентного периода строка менялась несколько раз, то промежуточные изменения мы не увидим
➖Нельзя отследить удаленные на источнике записи
➖ Последние загруженные значения нужно где-то хранить, каждый раз вычислять их на большом объеме будет тяжелой задачей. Но тут может помочь использование оркестратора, например, Apache Airflow
➖Мало кто строит индексы по подобным полям, а значит процесс извлечения может быть медленным
Потоковое инкрементное извлечение подразумевает передачу изменений практически в реальном времени. Есть несколько подходов для реализации такой передачи.
Например, при возникновении изменений источник сразу записывает их в приемник. Такой подход называется trigger-based.
Или же log-based подход, который применяется, если система-источник ведет лог изменения данных. В таком случае специальные CDC-инструменты могут читать этот лог и отправлять изменения в систему-приемник. Пример – Debezium и Apache Kafka.
➕ Есть возможность получать все изменения практически в реальном времени
➖ Триггеры могут замедлить работу системы-источника, а для чтения логов придется "пошаманить" со специальными инструментами.
Post #24
265
- 👍 7