ETL für Faulpelze

Werbung
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!
Herunterladen