ETL für Faulpelze Einführung in Biml für SSIS Ben Weissman – Solisyon GmbH Our Sponsors Wer bin ich? Ben Weissman, Solisyon, Nürnberg @bweissman [email protected] SQL Server seit Version 6.5 Zu blöd für C# Ausgangssituation DTSX Pakete Quelle Was wir haben Staging Umgebung Was wir wollen (möglichst automatisiert) Was ist Biml? – Der 3D Drucker für SSIS (und mehr) Was ist eigentlich Biml? Biml ist eine Markup Sprache – also: XML Erfunden/Entwickelt von Varigence So sieht Biml aus: <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <Package Name="HelloBiml"/> </Packages> </Biml> Wird erst in Verbindung mit BimlScript/APIs mächtig Kann neben SSIS auch für T-SQL und SSAS genutzt werden Verschiedenste Frontends Das heißt so viel, wie…? Kompatibilität zwischen SQL Versionen wird belanglos Gesteigerte Produktivität durch Zeitersparnis bei “dummen” Datenbeladungen – Suche nach Mustern! Je besser ein Task standardisierbar ist (z.B. Beladung einer Staging Umgebung), desto höher der Zeitgewinn Biml ist der “3D Drucker für SSIS” Basis Konstrukt Pakete Tabellen Schemata Datenbanken Verbindungen META DATEN Wie funktioniert das dann? Biml Code Biml Engine Ergebnis </> XML, BimlScript, C#, VB … SQL Server Tabellen, DTSX Pakete etc. Frontends BimlScript Coding <# Code Block #> <#+ Module Level Code Block #> <#= Inline Code Block #> Ruft die .NET ToString() Methode auf der im Block enthaltenen Expression auf Kann kein Statement, void oder NULL sein <#@ Directive #> Alle Biml Objekte folgen dem Namensschema Ast----Node Rootnode = Biml Meta Store Let‘s write some basic Biml… Demo Was brauchen wir für ein echtes erstes Ergebnis? Auswahl eines Frontends Erstellen einer Zieldatenbank mit entsprechenden Steuertabellen Befüllen der Steuertabellen Welche Daten sollen von wo geladen werden? Erstellen einer Biml Lösung auf dieser Basis Wie steuern wir das? Im einfachsten Fall gibt es nur eine Steuertabelle: Tables Hier definieren wir einfach alle Tabellen (per Name), die wir importieren wollen Wie sieht diese Tabelle wirklich aus? Demo Schritt 1 – Verbindungs Meta Daten 01_Environment.biml Verbindungsdaten (statisch) META DATEN Schritt 1 – Verbindungs Meta Daten 01_Environment.biml Schritt 2 – Tabellen Meta Daten FOR EACH LOOP 02_BuildMeta.biml Tabellen META DATEN Schritt 2 – Tabellen Meta Daten 02_BuildMeta.biml Schritt 3 – Erstellen der Staging Tabellen FOR EACH LOOP 03_BuildStaging.biml Erstellen der Staging Tabellen Schritt 3 – Erstellen der Staging Tabellen 03_BuildStaging.biml Schritt 4 – Befüllen der Staging Tabellen FOR EACH LOOP 04_PopulateStaging.biml Schritt 4 – Befüllen der Staging Tabellen 04_PopulateStaging.biml Coding time – My Simple Biml! Zeit für eine richtige Demo! Zusammenfassung Mit nur 1 Tabelle haben wir die Staging Umgebung erstellt und befüllt Sehr überschaubarer Code (< 80 Zeilen XML/BimlScript in 4 Dateien) Für einfache Tasks ist das ggf. schon sehr hilfreich Nicht sehr flexibel und, gerade bei großen Tabellen, viel Overhead Was kann man da machen? Wir brauchen etwas mehr Steuerinformationen Connections Aus welchen Quellen beziehen wir Daten? Tables Aus welchen Tabellen beziehen wir welche Spalten? Packages In welchen Unterpaketen wollen wir die Tabellen aufteilen? Schritt 1 – Verbindungs Meta Daten FOR EACH LOOP 01_Environment.biml Verbindungsdaten META DATEN Schritt 2 – Tabellen Meta Daten 02_BuildMeta.biml FOR EACH LOOP FOR EACH LOOP FOR EACH LOOP SELECT * SELECT col1, col2, … Tables META DATEN Schritt 3 – Erstellen der Staging Tabellen FOR EACH LOOP 03_BuildStaging.biml Erstellen der Staging Tabellen Schritt 4 – Befüllen der Staging Tabellen FOR EACH LOOP FOR EACH LOOP 04_PopulateStaging.biml / 05_PopulateTable.biml My Full Biml! Nun kommt die noch viel coolere Demo! Da muss doch noch mehr gehen? Index management – nicht einfach nur „drop and recreate“ „Housekeeping“ – Automatisches löschen von nicht mehr benötigten Tabellen Inkrementelle Beladung / Erstellung Da muss doch noch mehr gehen? Timestamps zu Dataloads hinzufügen <DerivedColumns Name=“TS"> <Columns> <Column Name="LoadDate“ DataType="DateTime">@[System::StartTime]</Column> </Columns> </DerivedColumns> Includes, Reference Scripts etc. nutzen um Redundanzen zu minimieren und Lesbarkeit zu erhöhen Reverse engineering von bestehenden Warehouses … Mehr? Biml Tutorials https://www.bimlscript.com/ Stairway to Biml http://www.sqlservercentral.com/stairway/100550/ Cathrine Wilhelmsen http://www.cathrinewilhelmsen.net/biml/ Solisyon Biml Blog http://Biml-Blog.de Gibt es noch… Fragen? Gerne auch im Nachgang per Mail ([email protected]) oder Twitter (@bweissman) How did you like it? Please give us feedback! to the event: www.sqlsaturday.com/579/eventeval.aspx to me as a speaker: www.sqlsaturday.com/579/sessions/sessionevaluation.aspx Ressources SQL Server 2016 in 15 Minuten https://channel9.msdn.com/Series/SQLServer-2016-in-15-Minuten SQL PASS Austria Homepage http://austria.sqlpass.org SQL PASS Austria Meeting Archive http://sdrv.ms/ZFVdnM Thank You!