ETL come transazione
-
06-07-2019 - |
Domanda
Per tutti gli ETL che ho scritto finora, non ho mai effettuato transazioni - ovvero se la tabella 4 fallisce, ripristina tutto.
Qual è la migliore pratica in questo senso?
Per " BeginTran + Commit " oppure no per " BeginTran + Commit "
EDIT: ho un pacchetto principale che chiama altri 4 pacchetti - è possibile raggrupparli tutti in una transazione?
Soluzione
begin + commit in batch batch gestibili. Non vuoi concludere un'importazione di 6 ore in una singola transazione ogni notte. Mantenere i lotti di dimensioni che possono terminare al massimo in 2-3 minuti. Il fatto che si verifichino problemi di purezza dei dati che falliranno un ETL è un dato di fatto, quindi almeno ridurre l'impatto su qualcosa di gestibile (cioè non attivare un rollback che durerà un altro 6 ore per il completamento) .
Altri suggerimenti
In SSIS, ho sempre Inizia Trans + Commit
. Voglio assicurarmi di poter rieseguire il pacchetto senza problemi (o dover trovare quali righe sono state effettivamente inserite) se fallisce.
Semplifica notevolmente il recupero e la pulizia.
Spesso si spostano troppi dati in ETL per utilizzare una transazione SQL (il registro deve memorizzare TUTTI i dati per il rollback, ricordare). Preferisco progettare pacchetti in modo che possano essere rieseguiti in modo non distruttivo. Idealmente, dovrebbero essere impostati in modo che se muoiono a metà flusso, puoi semplicemente avviarli e continueranno da qualche parte approssimativamente da dove erano stati interrotti. A volte c'è una penalità per questo, ma penso che ne valga la pena.
Tecnicamente puoi raggruppare i pacchetti in un'unica transazione; praticamente, forse no.