Import und Validierung der XML-Datei mithilfe des SSIS-oder einfach T-SQL?
Was ist die beste Vorgehensweise beim importieren und validieren einer XML-Datei eine einzelne Tabelle (abgeflacht) in der SQL Server ?
Ich habe eine XML-Datei, die enthält etwa 15 komplexe Typen, die alle bezogen auf ein einzelnes übergeordnetes element.
Die SSIS-design könnte wie folgt Aussehen:
Aber es ist immer sehr kompliziert mit all den (15) verbindet.
Ist es vielleicht eine bessere Idee, einfach schreiben T-SQL-code, um :
1) Importieren Sie die XML-Daten in eine Spalte des XML-Typs und ist mit einem XSD-schema.
2) diesen code Verwenden:
TRUNCATE TABLE XML_Import
INSERT INTO XML_Import(ImportDateTime, XmlData)
SELECT GETDATE(), XmlData
FROM
(
SELECT *
FROM OPENROWSET (BULK 'c:\XML-Data.xml', SINGLE_BLOB) AS XMLDATA
) AS FileImport (XMLDATA)
delete from dbo.UserFlat
INSERT INTO dbo.UserFlat
SELECT
user.value('(UserIdentifier)', 'varchar(8)') as UserIdentifier,
user.value('(Emailaddress)', 'varchar(70)') as Emailaddress,
businessaddress.value('(Fax)', 'varchar(70)') as Fax,
employment.value('(EmploymentData)', 'varchar(8)') as EmploymentData,
-- More values here ...
FROM
XML_Import CROSS APPLY
XmlData.nodes('//user') AS User(user) CROSS APPLY
user.nodes('BusinessAddress') AS BusinessAddress(businessaddress) CROSS APPLY
user.nodes('Employment') AS Employment(employment)
-- More 'joins' here ...
füllen die 'UserFlat' - Tabelle ?
Einige Nachteile sind, dass müssen Sie manuell geben Sie den SQLcode, aber der Vorteil hier ist, dass ich mehr direkte Steuern, wie die Elemente bearbeitet und konvertiert werden. Aber ich weiß nicht, ob es irgendwelche performance-Unterschiede zwischen der Verarbeitung von XML in SSIS und Verarbeitung der XML-Daten mit T-SQL-XML-Anweisungen.
Beachten Sie, dass einige andere Voraussetzungen sind:
- Fehlerbehandlung : im Falle eines Fehlers eine E-Mail muss an eine person.
- Verarbeiten zu können, mehrere input-Dateien mit einem bestimmten Dateinamen Muster : XML_{Datum}_{Zeit}.xml -
- Bewegen der verarbeiteten XML-Dateien in einen anderen Ordner.
Bitte um Rat.
- SSIS ist ein visuelles Werkzeug, das ermöglicht die SQL beeinträchtigt, um einfache Aufgaben ausführen. Wenn Sie schreiben können T-SQL, SSIS-wird nur im Weg sein.
- offensichtlich nicht verstehen, SSIS, wenn er beschreibt es so. Jedem das seine - wenn Sie mehr vertraut mit, oder lieber T-SQL - verwenden Sie es dann. SSIS' XML-Quelle ist begrenzt, aber wenn es funktioniert, in Ihrem Fall, und Sie haben es meistens aus, dann würde ich es verwenden, solange die Leistung war vergleichbar. Ich würde erwarten, dass T-SQL durchführen schneller, aber SSIS unbestreitbar bessere Fehlerbehandlung als T-SQL.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf den Anforderungen, die Sie erwähnt haben, ich würde sagen, dass können Sie beste aus beiden Welten (T-SQL & SSIS).
Ich das Gefühl, dass T-SQL bietet mehr Flexibilität beim laden der XML-Daten, die Sie beschrieben haben, in Frage.
Gibt es viele verschiedene Möglichkeiten, wie Sie diese erreichen können. Hier ist eine mögliche option:
Erstellen Sie eine Gespeicherte Prozedur, die den Pfad der XML-Datei als input-parameter.
Führen Sie Ihre XML-Daten laden-Vorgang mithilfe der T-SQL-Weise, die Sie fühlen, ist einfacher.
Verwendung von SSIS-Paket auszuführen, error-handling, Datei-Verarbeitung, Archivierung und E-Mail senden.
Protokollierung verwenden feature in SSIS. Es erfordert nur eine einfache Konfiguration. Hier ist ein Beispiele, die zeigen, wie Sie die Protokollierung konfigurieren in SSIS - So verfolgen Sie den status der Zeilen, die erfolgreich verarbeitet wurden oder fehlgeschlagen im SSIS-Datenflusstask?
Einer Probe mock-up von Ihrem flow wäre so wie im screenshot unten gezeigt. Schleife die Dateien mit Foreach-Schleifen-container. Pass den Pfad der Datei als parameter an die Execute-SQL-Task, die wiederum würde rufen Sie die T-SQL, die Sie erwähnt hatte. Nach der Verarbeitung der Datei mit dem File-System-Task zum verschieben der Datei an einen Archiv-Ordner.
Probe, die in SSIS Lesen mehrerer xml-Dateien aus dem Ordner
zeigt, wie eine Schleife durch die Dateien mithilfe von Foreach-Schleifen-container. Es durchläuft xml-Dateien, sondern verwendet die Daten-Fluss-Vorgang, weil die xml-Dateien sind in einfacheren format.
Probe, die in Wie zum senden der Datensätze aus einer Tabelle in eine e-mail-body mit dem SSIS-Paket? zeigt, wie e-mail senden mit E-Mail Senden Aufgabe.
Probe, die in Wie Verschiebe ich Dateien in einen Archiv-Ordner, nachdem die Dateien verarbeitet wurden? zeigt, wie verschieben von Dateien zu einem Archiv-Ordner.
Probe, die in Verzweigung nach einer Datei-system-task in SSIS, ohne zu Versagen Paket zeigt, wie es weiter Paket Ausführung, auch nach einer bestimmten Aufgabe nicht. Dies wird Ihnen helfen, gehen mit Paket-Ausführung, auch wenn der Foreach-Schleife fehlschlägt, so dass Sie E-Mails versenden können. Blauer Pfeil in der Abbildung zeigt an, nach Abschluss der vorherigen Aufgabe.
Probe, die in Wie wähle ich den zuletzt erstellten Ordner mithilfe von Foreach-Schleifen-container SSIS-Paket? zeigt, wie pattern-matching durchführen.
Hoffe, dass gibt Ihnen eine Idee.