2009-07-31 5 views
-1

Für alle ETLs, die ich bisher geschrieben habe, habe ich nie Transaktionen gemacht - d. H., Wenn Tabelle 4 fehlschlägt, alles zurückrollen.ETL als eine Transaktion

Was ist die beste Praxis in dieser Hinsicht?

To "BeginTran + Commit" oder nicht "BeginTran + Commit"

EDIT: ich einen Master-Paket haben 4 andere Pakete fordern - ist es möglich, in einer einzigen Transaktion, sie alle bis zu rollen?

Antwort

2

Begin + commit in verwaltbaren Losgrößen. Sie möchten nicht jeden Abend einen 6-Stunden-Import in eine einzelne Transaktion einpacken. Halten Sie Ihre Chargen bei einer Größe, die höchstens 2-3 Minuten dauern kann. Dass Sie Datenreinheitsprobleme treffen werden, die eine ETL nicht bestehen, ist eine gegebene, also reduzieren Sie die Auswirkung auf etwas, das gehandhabt werden kann (dh. ein anderes 6 Stunden zum Abschluss).

2

In SSIS, ich immer Begin Trans + Commit. Ich möchte sicherstellen, dass ich das Paket ohne Problem erneut ausführen kann (oder herausfinden muss, welche Zeilen tatsächlich eingefügt wurden), falls es fehlschlägt.

Es macht einfach Erholung und Reinigung so viel einfacher.

1

Sie verschieben häufig zu viele Daten in ETL, um eine SQL-Transaktion zu verwenden (das Protokoll muss ALLE Daten speichern, die zurückgesetzt werden sollen, nicht vergessen). Ich bevorzuge es, Pakete so zu gestalten, dass sie zerstörungsfrei wiederverwendet werden können. Idealerweise sollten sie so eingerichtet sein, dass sie, wenn sie mitten im Strom sterben, einfach starten können und sie irgendwo weitermachen, wo sie aufgehört haben. Manchmal gibt es dafür eine Leistungsstrafe, aber ich denke, es ist es wert.

Technisch können Sie Pakete in einer einzigen Transaktion rollen; praktisch, vielleicht nicht.