ETL как транзакция - PullRequest
       16

ETL как транзакция

0 голосов
/ 31 июля 2009

Для всех ETL, которые я написал до сих пор, я никогда не выполнял их транзакции - то есть, если таблица 4 не работает, откатите все назад.

Какая лучшая практика в этом отношении?

«BeginTran + Commit» или не «BeginTran + Commit»

РЕДАКТИРОВАТЬ: у меня есть один основной пакет, вызывающий 4 других пакета - возможно ли свернуть их все в одну транзакцию?

Ответы [ 3 ]

2 голосов
/ 31 июля 2009

begin + commit в управляемых размерах партии. Вы не хотите заключать импорт по 6 часов в одну транзакцию каждую ночь. Держите свои партии в размере, который может закончиться через 2-3 минуты максимум. То, что вы столкнетесь с проблемами чистоты данных, которые приведут к сбою ETL, является само собой разумеющимся, поэтому, по крайней мере, уменьшите влияние на что-то управляемое (т.е. не запускайте откат, который будет длиться еще 6 часов до завершения).

2 голосов
/ 31 июля 2009

В SSIS я всегда Begin Trans + Commit. Я хочу убедиться, что я могу перезапустить пакет без проблем (или необходимость найти, какие строки были вставлены), если он потерпит неудачу.

Это намного упрощает восстановление и очистку.

1 голос
/ 01 августа 2009

Вы часто перемещаете слишком много данных в ETL, чтобы использовать транзакцию SQL (журнал должен хранить ВСЕ данные для отката, помните). Я предпочитаю разрабатывать пакеты таким образом, чтобы их можно было повторно запускать без разрушения. В идеале они должны быть установлены так, чтобы, если они умирают в середине потока, вы могли просто запустить их, и они продолжат где-то примерно там, где они остановились. Иногда за это снижается производительность, но я думаю, что оно того стоит.

Технически вы можете свернуть пакеты в одну транзакцию; практически, может и нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...