Передовая практика инкрементного извлечения ETL

Мне нужно экспертное мнение о моем дизайне для ежедневной дополнительной выписки. Я использую SQL 2008 R2, и у меня есть БД приличного размера, около 1 миллиона записей о людях со всеми их атрибутами и отношениями с ролью другого человека.

Я хочу сделать две вещи (по крайней мере сейчас)

  1. Потребитель хочет получить дамп того, что изменилось (новое/обновления) в плоском файле.
  2. Другому потребителю нужны новые данные только в плоском файле (другой формат).

Исходя из этих требований, кажется, что общего только одно: они оба хотят «что изменилось сегодня». Итак, вот мой подход:

  1. Создайте управляющую таблицу с Tablename и LastExtractDateTime в виде двух столбцов.
  2. Создайте рабочую таблицу практически со всеми полями, которые нужны потребителям.
  3. У меня есть CreatedDate и LastModifiedDate для всех транзакционных таблиц.
  4. Каждый день, скажем, в 22:00, заполняйте таблицу stage (специальный пакет SSIS) изменениями. Хранимые процедуры для извлечения всех новых данных (на основе CreatedDate) и всех измененных данных (на основе LastModifiedDate) всех дат, превышающих дату в столбце Control.LastExtractDateTime.
  5. При успешном извлечении данных этапа обновите Control.LastExtractDateTime, указав текущую дату.
  6. Запустите другие пакеты SSIS в зависимости от того, удалось ли это или нет (у нас есть собственный планировщик).

Прокомментируйте, пожалуйста. Спасибо.


person user3726933    schedule 25.09.2014    source источник
comment
Вы можете использовать отслеживание изменений, чтобы отслеживать свои изменения, а затем переходить к промежуточной таблице. Отслеживание изменений будет отслеживать все изменения, независимо от того, есть поле даты изменения или нет. Мы запускаем наш процесс несколько раз в течение дня, и, поскольку он использует таблицы отслеживания изменений для получения изменений, он оказывает меньшее влияние на рабочие таблицы. Отслеживание изменений разработано таким образом, чтобы упростить работу с рабочими столами.   -  person HLGEM    schedule 25.09.2014


Ответы (1)


Мы используем что-то подобное, за исключением того, что в вашем дизайне вы используете :control table, а мы используем Extract_Log_table. В котором запись вставляется путем извлечения вместе с , временем извлечения, общим временем, которое потребовалось для выполнения (время начала и окончания) и количеством строк. Таблица становится справочной для ответов на такие вопросы, как сколько времени требуется для извлечения данных в один конкретный день (например, конец месяца, конец года, воскресенье и т. д.)

Спасибо

person user3851404    schedule 25.09.2014