Frage

Ich bin ein ETL-Prozess in MS SQL Server zu schaffen, und ich möchte Fehler spezifisch für eine bestimmte Spalte einer bestimmten Zeile haben. Zum Beispiel wird die Daten zunächst von Excel-Dateien in eine Tabelle geladen (wir werden die Initial Tabelle nennen), in der alle Spalten varchar(2000) sind und dann Stufe I wird die Daten an einem anderen Tisch (die DataTypedTable), die spezifischen Datentypen (datetime enthält, int, etc.) oder mehr eng beschränkt VARCHAR Längen. Ich muss in der Lage, Fehlermeldungen für ein bestimmtes Feld zu schaffen, wie zum Beispiel: „13. Januar“ ist kein gültiges Datumsformat für das Einreichungsdatum. Bitte verwenden Sie ein Format MM / DD / YYYY

Diese Fehlermeldungen müssten in irgendeiner Weise gespeichert werden, so dass später im Prozess ein automatisierter Prozess können Berichte mit den Fehlermeldungen erstellen, so dass jeder Nachricht verweist auf eine bestimmte Zeile und Feld (jemand gehen müssen zurück und korrigieren die Daten in dem Quellsystem und erneut übermitteln die Excel-Datei). So ideal wäre es in eine Failures Tabellen irgendeine Art und enthält den Primärschlüssel der gescheiterten Zeile eingefügt werden, die Spaltennamen, und die Fehlermeldung.

Frage: Also ich frage mich, ob diese mit SSIS erreicht werden können, oder ein Open-Source-Tool wie Talend, und wenn ja, was würden Sie Ihr allgemeiner Ansatz sein? Oder welche Hand codiert Ansatz würden Sie nehmen?

Paar nähert sich dachte ich habe SQL verwenden (bis keine bis ich getan habe ETL von Hand in SQL Procs, aber ich möchte andere Ansätze berücksichtigen Mögliche C # selbst..):

Verwenden Sie einen Cursor durch die Initial-Tabelle zu lesen, und für jede Zeile Einsatz eines leeren Datensatz nur mit dem Primärschlüssel in die DataTyped Tabelle, verwenden Sie dann eine einzelne Update-Anweisung für jede Spalte, so dass, wenn das Update fehlschlägt kann ich einfügen eine sehr spezifische Fehlermeldung spezifisch für diese Spalte in der Tabelle Fehlermeldungen.

Fügen Sie alle Daten in die DataTyped Tabelle ist, haben aber doppelte Spalten wie SubmissionDate und SubmissionDateOld. Nach dem anfänglichen Einsatz der * Alten Spalten Daten haben, der Rest ist leer, und ich habe ein einzelnes Update für jede Spalte, dass die SubmissionDate auf dem SubmissionDateOld Sätze basieren.

Darüber hinaus einen Ansatz darauf hindeutet, ich möchte wissen, ob Sie diesen Ansatz oder etwas Ähnliches bereits in der Arbeit verwenden Sie tun.

War es hilfreich?

Lösung

Ich verwende den aproach, wo ich in den Datenfluss eine bedingte Spaltung setzen. Die Aufzeichnungen, die die Bedingungen (ungültiges Datum, keine Daten in einem Pflichtfeld, etc.) nicht besteht, werden dann in eine Ausnahmetabelle gesendet, die die Satzkennung enthält, die schlechten Daten, den Grund, es ist fehlgeschlagen. Anschließend können Sie erstellen später auf eine Tabelle oder Textdatei von Fehlern aus dieser Information zu der Gruppe, die Datei bereitstellt zurück zu senden. Gute Aufzeichnungen natürlich gehen zum pther Weg und werden in die Tabelle eingefügt.

Andere Tipps

Wie wäre es mit Reinigung / Transformation vor dem Laden in die Staging-Tabellen (was Sie Anfangs Tabellen nennen)? Dump die Daten aus Excel zu einer Registerkarte oder Komma getrennt Datei und dann einige Programmiersprachen Ihrer Wahl verwenden, um die Daten zu tun Reinigung, dass Sie festgestellt haben. Auch, wie groß ist jede Datenlast? Sie können die Verwendung von Multi-Threaded-oder Multi-Process-Anwendung machen zu großen Lasten handhaben (wie in einer Zeit, einige Millionen Zeilen laden). Während dieses Prozesses jeder Fehler, den Sie in die Ausnahmetabelle geladen mit Kennung, Fehler und kommentieren Details werden zu begegnen. Diese Technik hilft bei der besseren Kontrolle bei der Datenreinigungsphase.

Wenn die Last nicht so hoch ist, und Sie möchten die meisten Ihrer Arbeit in der Datenbank (SQL) tun, dann können Sie tun möchten, so viele Daten wie möglich Profilierung und haben gute understading von möglichen Datenänderungen, die Sie erwarten können. Damit Sie entsprechende Komponente (Talend oder SSIS) verwenden können, um die Transformation zu tun oder den Datenfluss steuern. Auch durch die mit regulären Ausdrücken können Sie jede Entität, dass weicht von der eingestellten Regel fangen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top