Xenosystems Logo
Sascha Hess

Diplom-Biologe | Senior IT-Consultant

SH

Sascha Hess

xenosystems.de - IT-Consulting & Data Management

www.xenosystems.de

 

 

Strategische Wissens-Roadmap 2026

 

 

 

BI & Governance

 

Datenintegration

 

Entscheidungshilfe für mittelständische Datenarchitekturen

WAS SIE IN DIESEM KIT ERHALTEN:

 

1

ETL vs. ELT Entscheidungsmatrix

Klare Kriterien - welches Muster wann und warum einsetzen

 

 

2

10 Architektur-Fallen

Die häufigsten Fehler bei der Wahl des falschen Musters

 

 

3

Praxisbeispiele mit SQL & dbt

Fertige Templates für SQL Server, Azure Synapse & Fabric

 

 

4

Governance-Framework

Datenlineage, Qualitätssicherung und Auditing für beide Muster

 

 

5

30-Tage-Migrationsplan

Schrittweise vom Legacy-ETL zur modernen ELT-Architektur

 


Rechtliche Hinweise und Haftungsausschluss

 

HAFTUNGSAUSSCHLUSS

 

Alle Skripte, Architekturempfehlungen und Entscheidungshilfen wurden sorgfältig erarbeitet. Da jede Umgebung individuell ist, übernimmt der Autor keinerlei Haftung für Datenverlust, Systemausfälle oder sonstige Schäden. Validieren Sie alle Muster in einer Testumgebung, bevor Sie sie produktiv einsetzen.

 

KEINE ERGEBNISGARANTIE

 

Die genannten Kennzahlen zu Performance-Gewinnen und Kostenreduktionen sind Erfahrungswerte aus realen KMU-Umgebungen und keine verbindliche Zusicherung. Tatsächliche Ergebnisse hängen stark von Datenvolumen, Systemlandschaft und Teamkompetenz ab.

 

VERSIONSHINWEIS

 

Die Inhalte beziehen sich auf SQL Server 2022/2025, Azure Synapse Analytics, Microsoft Fabric, dbt Core 1.8+ und Power BI, Stand März 2026. Durch künftige Updates können Abweichungen entstehen.

 

URHEBERRECHT

 

Dieses Dokument ist für den persönlichen oder betriebsinternen Gebrauch des Käufers lizenziert. Weiterverkauf, Weitergabe an Dritte und öffentliche Veröffentlichung sind ohne schriftliche Genehmigung nicht gestattet.

 

KEINE VERBINDUNG ZU MICROSOFT ODER DRITTEN

 

Dieses Kit ist ein unabhängiges Werk ohne Verbindung zur Microsoft Corporation, dbt Labs oder anderen genannten Anbietern. Alle Produktnamen sind Marken der jeweiligen Unternehmen.

 

Eine ausführliche Version dieses Haftungsausschlusses befindet sich am Ende dieses Dokuments.

 


 

Inhaltsverzeichnis

 

 

01  Einleitung

Warum die Wahl zwischen ETL und ELT über Ihr BI-Projekt entscheidet

 

02  Grundlagen

ETL und ELT verstehen — Konzepte, Geschichte, Unterschiede

 

03  Entscheidungsmatrix

Wann ETL, wann ELT — 12 Kriterien mit Bewertungsschema

 

04  Die 10 Architektur-Fallen

Typische Fehler bei der Musterwahl und wie Sie sie vermeiden

 

05  ETL in der Praxis

SSIS, SQL Agent und klassische Pipelines für SQL Server

 

06  ELT in der Praxis

dbt, Azure Synapse, Microsoft Fabric und moderne Stacks

 

07  Governance-Framework

Lineage, Qualitätssicherung und Auditing für beide Muster

 

08  Hybride Architekturen

Wenn ETL und ELT zusammenarbeiten müssen

 

09  Migration & Modernisierung

Vom Legacy-ETL zur modernen ELT-Architektur

 

10  30-Tage-Architekturplan

Strukturierte Entscheidung und Umsetzung — Schritt für Schritt

 

 


 

01

Einleitung

 

Warum die Wahl zwischen ETL und ELT über Ihr BI-Projekt entscheidet

 

In mittelständischen Unternehmen werden täglich Entscheidungen über Datenarchitekturen getroffen — oft ohne klares Bewusstsein über deren langfristige Konsequenzen. Ein Data Warehouse wird mit SSIS aufgebaut, weil "das immer so gemacht wurde". Oder ein junges Team migriert alles auf dbt und Snowflake, weil es modern klingt — und stellt sechs Monate später fest, dass die vorhandene SQL-Server-Infrastruktur die Transformation schneller und günstiger erledigt hätte.

 

Die Entscheidung ETL vs. ELT ist keine technische Modeentscheidung. Sie ist eine strategische Weichenstellung.

 

Beide Muster haben ihre Berechtigung — und beide können in der falschen Umgebung teuer werden:

 

  ETL (Extract → Transform → Load) transformiert Daten vor dem Laden in das Zielsystem. Die Transformation findet außerhalb des Ziel-Warehouses statt — klassisch in SSIS, Talend oder einem dedizierten ETL-Server.

 

  ELT (Extract → Load → Transform) lädt Rohdaten zuerst ins Zielsystem und transformiert dort. Die Rechenleistung des Warehouses — ob SQL Server, Synapse oder Fabric — übernimmt die gesamte Transformation.

 

Seit Cloud-Warehouses und columnar Storage preisgünstig geworden sind, hat ELT stark an Popularität gewonnen. Doch für viele KMU-Umgebungen bleibt ETL das überlegene Muster — aus Kostengründen, Compliance-Anforderungen oder wegen komplexer Quellsystem-Eigenheiten.

 

  Ihr Warehouse hat begrenzte Kapazität und jede Transformation kostet Geld pro Query.

 

  Ihre Quelldaten enthalten sensible Informationen, die vor dem Laden anonymisiert werden müssen.

 

  Ihre BI-Abteilung hat starke SQL-Kompetenz, aber keine dbt-Erfahrung.

 

  Ihre Quelldaten sind so unstrukturiert, dass eine Zwischenverarbeitung zwingend ist.

 

Dieses Kit ist kein theoretisches Architekturwerk. Es ist ein pragmatisches Entscheidungs- und Umsetzungshandbuch für IT-Verantwortliche und Data Engineers im Mittelstand — mit konkreten Mustern, fertigen Templates und klaren Entscheidungskriterien.

 

 

WAS SIE IN DIESEM KIT ERWARTEN DÜRFEN

  Entscheidungsmatrix — 12 gewichtete Kriterien, die in 30 Minuten Klarheit schaffen.

  10 Architektur-Fallen — Die häufigsten Fehler bei der Musterwahl, mit Gegenmaßnahmen.

  Praxisbeispiele — Fertige SQL-, SSIS- und dbt-Templates für beide Muster.

  Governance-Framework — Lineage, Qualitätsprüfung und Auditing für produktionstaugliche Pipelines.

  30-Tage-Plan — Strukturierte Migration vom Legacy-ETL zur modernen Architektur.

 

 

ZIEL DIESES KITS

Nach dem Durcharbeiten dieses Kits treffen Sie begründete Architekturentscheidungen statt Modeentscheidungen — und haben die wichtigsten Muster sofort einsatzbereit als Template in Ihrer Umgebung.

 


 

02

Grundlagen

 

ETL und ELT verstehen — Konzepte, Geschichte und der entscheidende Unterschied

 

2.1 ETL — der klassische Ansatz

 

ETL entstand in den 1970er-Jahren, als Datenbanken noch teuer und Speicher knapp war. Die Grundidee: Verarbeite die Daten, bevor sie ins Zielsystem gelangen, damit dort nur bereinigte, verdichtete, korrekt typisierte Daten ankommen.

 

  Extract: Daten werden aus Quellsystemen (ERP, CRM, Flat Files, APIs) extrahiert.

 

  Transform: Transformationslogik läuft auf einem dedizierten ETL-Server oder -Dienst. Bereinigung, Anreicherung, Aggregation, Typisierung — alles außerhalb des Ziel-Warehouses.

 

  Load: Nur die fertigen, transformierten Daten werden ins Warehouse geladen.

 

-- Klassisches ETL-Muster: Transformation im Staging-Bereich vor dem Load

-- Schritt 1: Extract in Staging

INSERT INTO Staging.Auftraege_Raw

SELECT * FROM [ERP-Server].dbo.SalesOrders

WHERE ModifiedDate >= @LastExtractDate;

 

-- Schritt 2: Transform im ETL-Prozess (außerhalb des Ziel-DWH)

INSERT INTO DWH.Fact_Auftraege

SELECT

    s.OrderID,

    dk.KundenKey,

    dd.DatumKey,

    s.Nettobetrag * w.WechselkursEUR AS Betrag_EUR,

    CASE WHEN s.Nettobetrag > 10000 THEN 'GROSS'

         WHEN s.Nettobetrag > 1000  THEN 'MITTEL'

         ELSE 'KLEIN' END AS Groessenklasse

FROM Staging.Auftraege_Raw s

JOIN DWH.Dim_Kunden dk ON s.KundenNr = dk.KundenNr_Src

JOIN DWH.Dim_Datum dd ON CAST(s.OrderDate AS DATE) = dd.Datum

JOIN Staging.Wechselkurse w ON s.Waehrung = w.Waehrung

    AND CAST(s.OrderDate AS DATE) = w.GueltigAm

WHERE s.Status NOT IN ('STORNO', 'ENTWURF');

 

-- Schritt 3: Staging bereinigen

TRUNCATE TABLE Staging.Auftraege_Raw;

 

 

 

 

2.2 ELT — der moderne Ansatz

 

ELT entstand mit dem Aufkommen günstiger Cloud-Warehouses (BigQuery, Snowflake, Redshift, Azure Synapse) und massiv paralleler Verarbeitung. Die Grundidee: Lade erst alles roh ins Warehouse, nutze dann dessen Rechenleistung für die Transformation.

 

  Extract: Quelldaten werden extrahiert — oft vollständig, nicht inkrementell.

 

  Load: Rohdaten landen direkt in einer Raw-Schicht des Warehouses, unverändert.

 

  Transform: SQL-Transformationen laufen direkt im Warehouse — heute oft orchestriert durch dbt.

 

-- ELT-Muster: Rohdaten landen zuerst, Transformation danach im Warehouse

-- Raw-Schicht enthält unveränderte Quelldaten

-- (Beispiel als dbt-Modell in SQL)

 

-- models/staging/stg_auftraege.sql

SELECT

    OrderID,

    KundenNr,

    CAST(OrderDate AS DATE)         AS order_date,

    Nettobetrag,

    Waehrung,

    Status,

    _loaded_at                      -- Ladezeit-Metadaten

FROM {{ source('erp_raw', 'SalesOrders') }}

WHERE Status NOT IN ('STORNO', 'ENTWURF')

 

-- models/marts/fact_auftraege.sql

SELECT

    s.OrderID,

    dk.kunden_key,

    dd.datum_key,

    s.Nettobetrag * w.kurs_eur      AS betrag_eur,

    CASE WHEN s.Nettobetrag > 10000 THEN 'GROSS'

         WHEN s.Nettobetrag > 1000  THEN 'MITTEL'

         ELSE 'KLEIN'               END AS groessenklasse

FROM {{ ref('stg_auftraege') }} s

LEFT JOIN {{ ref('dim_kunden') }} dk USING (KundenNr)

LEFT JOIN {{ ref('dim_datum') }} dd ON s.order_date = dd.datum

LEFT JOIN {{ ref('stg_wechselkurse') }} w

    ON s.Waehrung = w.waehrung AND s.order_date = w.gueltig_am

 

 

2.3 Der entscheidende Unterschied auf einen Blick

 

Kriterium

ETL

ELT

Wo wird transformiert?

ETL-Server / Middleware

Im Ziel-Warehouse selbst

Rohdaten im Warehouse?

Nein — nur Endergebnis

Ja — vollständig vorhanden

Skalierung

ETL-Server ist Flaschenhals

Warehouse skaliert mit

Kosten bei großen Volumen

Günstiger (weniger Storage)

Kann teuer werden (Compute)

Nachvollziehbarkeit

Begrenzt (Black Box)

Sehr gut (alle Schichten sichtbar)

Tooling

SSIS, Talend, Informatica

dbt, Spark SQL, Fabric Notebooks

Einstiegshürde

Hoch (grafische Tools)

Mittel (SQL + Git)

Re-Transformation möglich?

Aufwendig

Jederzeit ohne Reload

 


 

03

Entscheidungsmatrix

 

Wann ETL, wann ELT — 12 Kriterien mit Bewertungsschema

 

Diese Matrix hilft Ihnen, die richtige Entscheidung für Ihre konkrete Umgebung zu treffen. Bewerten Sie jeden Punkt mit 1 (trifft nicht zu) bis 3 (trifft voll zu) und addieren Sie die Punkte je Spalte.

 

#

Kriterium

Punkte für ETL

Punkte für ELT

1

Quelldaten enthalten sensible/personenbezogene Daten, die vor dem Speichern anonymisiert werden müssen

3

0

2

Ziel-Warehouse hat begrenzte Compute-Kapazität oder hohe Kosten pro Query

3

0

3

Datenvolumen < 50 GB pro Tag

2

1

4

Team hat starke SSIS/SQL-Agent-Kompetenz, keine dbt-Erfahrung

3

0

5

Quelldaten sind stark unstrukturiert oder kommen aus Legacy-Systemen mit proprietären Formaten

2

1

6

Compliance erfordert, dass Rohdaten das Unternehmen nie verlassen dürfen

3

0

7

Datenvolumen > 1 TB pro Tag oder starkes Wachstum erwartet

0

3

8

Cloud-Warehouse (Synapse, Fabric, Snowflake) bereits vorhanden oder geplant

0

3

9

Transformationslogik ändert sich häufig — Re-Transformation ohne Reload gewünscht

0

3

10

Data Lineage und Dokumentation sind geschäftskritisch

1

3

11

Team will moderne Tools (dbt, Git, CI/CD) einsetzen

0

3

12

Bestehende ETL-Infrastruktur ist bereits amortisiert und stabil

3

0

 

 

AUSWERTUNG

  ETL-Score > ELT-Score um mehr als 6 Punkte → ETL klar vorteilhaft.

  ELT-Score > ETL-Score um mehr als 6 Punkte → ELT klar vorteilhaft.

  Scores liegen nahe beieinander (< 6 Punkte Abstand) → Hybride Architektur prüfen (Kapitel 8).

  Beide Scores unter 10 → Architekturanforderungen klären, bevor entschieden wird.

 

3.1 Sonderfall: Datenschutz als hartes Ausschlusskriterium

 

Wenn Kriterium 1 oder 6 mit 3 bewertet wurde, sollte ETL unabhängig vom Gesamtscore bevorzugt werden. Personenbezogene Daten, die unverändert in ein Cloud-Warehouse landen, können DSGVO-Probleme erzeugen — selbst wenn der Anbieter EU-Rechenzentren nutzt, da Zugriff durch nicht-europäische Konzernmütter rechtlich problematisch sein kann.

 

3.2 Sonderfall: Bestandssysteme

 

Wenn SQL Server On-Premise bereits vorhanden und leistungsfähig ist, bietet ELT mit SQL Server als Warehouse eine elegante Lösung — ohne Cloud-Kosten und mit vertrauter Toolchain:

 

-- ELT direkt in SQL Server: Raw-Schicht via Linked Server oder BULK INSERT

CREATE SCHEMA raw;   -- Rohdaten-Schicht

CREATE SCHEMA stg;   -- Staging / Bereinigung

CREATE SCHEMA dwh;   -- Fertiges Data Warehouse

CREATE SCHEMA rpt;   -- Reporting Views für Power BI

 

-- Raw-Tabelle: unveränderte Quelldaten mit Ladezeit

CREATE TABLE raw.SalesOrders (

    _src_id        INT,

    _loaded_at     DATETIME2 DEFAULT SYSUTCDATETIME(),

    _src_system    NVARCHAR(50) DEFAULT 'ERP',

    OrderID        INT,

    KundenNr       NVARCHAR(20),

    OrderDate      NVARCHAR(30),  -- bewusst als String — keine Transformation hier

    Nettobetrag    NVARCHAR(30),  -- bewusst als String

    Waehrung       NVARCHAR(10),

    Status         NVARCHAR(20)

);

 

 


 

04

Die 10 Architektur-Fallen

 

Typische Fehler bei der Musterwahl — und wie Sie sie vermeiden

 

01 ELT wählen, weil es modern klingt

 

Das häufigste und teuerste Muster: Ein Team migriert auf dbt + Cloud-Warehouse, weil die Community begeistert ist — ohne zu prüfen, ob das Volumen die Cloud-Kosten rechtfertigt. Bei 10 GB Tagesdaten und SQL Server On-Premise ist ELT oft nicht günstiger, nur komplexer.

 

LÖSUNG:

 

  Entscheidungsmatrix aus Kapitel 3 konsequent ausfüllen — mit echten Zahlen.

  Total Cost of Ownership berechnen: ETL-Server-Kosten vs. Warehouse-Compute-Kosten.

  Proof of Concept auf echten Produktionsdaten, nicht auf Muster-Datasets.

 

02 ETL-Black-Box ohne Lineage

 

Ein gewachsenes SSIS-Paket transformiert Daten durch 47 Datenflusstasks — aber niemand weiß mehr, welche Quelltabelle welches Reporting-Feld befüllt. Fehler sind nicht rückverfolgbar, Änderungen sind riskant.

 

LÖSUNG:

 

  Lineage-Tabelle für alle ETL-Prozesse führen (Kapitel 7).

  SSIS-Pakete mit Annotationen und Package-Logs versehen.

  Jedes ETL-Paket dokumentiert: Quelle → Transformationsregel → Ziel.

 

-- Lineage-Tabelle für ETL-Prozesse

CREATE TABLE dbo.ETL_Lineage (

    LineageID      INT IDENTITY PRIMARY KEY,

    ProzessName    NVARCHAR(200),

    QuelleServer   NVARCHAR(100),

    QuelleDatenbank NVARCHAR(100),

    QuelleObjekt   NVARCHAR(200),

    ZielObjekt     NVARCHAR(200),

    TransformRegel NVARCHAR(MAX),

    LetzteAenderung DATETIME2,

    Verantwortlich NVARCHAR(100)

);

 

 

03 Raw-Schicht im ELT vergessen

 

Ein ELT-Projekt lädt Daten direkt in die Staging-Schicht und überschreibt sie bei jedem Lauf. Nach drei Monaten stellt sich heraus, dass ein Quellsystem falsche Daten geliefert hat — aber die Rohdaten sind weg. Re-Transformation ist unmöglich.

 

LÖSUNG:

 

  Immer eine unveränderliche Raw-Schicht anlegen — Daten werden nur hinzugefügt, nie überschrieben.

  Ladezeit-Metadaten (_loaded_at, _src_system) in jeder Raw-Tabelle.

  Aufbewahrungsdauer festlegen (typisch: 90 Tage für operationale Daten, länger für Compliance).

 

-- Unveränderliche Raw-Schicht: nur INSERT, kein UPDATE/DELETE

-- Trigger verhindert ungewollte Änderungen

CREATE TRIGGER raw.TR_SalesOrders_NoUpdate

ON raw.SalesOrders

INSTEAD OF UPDATE, DELETE

AS

BEGIN

    RAISERROR('Raw-Schicht ist unveränderlich. Kein UPDATE oder DELETE erlaubt.', 16, 1);

    ROLLBACK;

END

 

 

04 Inkrementalität falsch implementiert

 

Ein ETL-Prozess lädt täglich alle 50 Millionen Zeilen neu, weil niemand einen sauberen Inkremental-Mechanismus implementiert hat. Ladezeit: 4 Stunden. Wartungsfenster: 2 Stunden. Das System ist täglich 4 Stunden nicht aktuell.

 

LÖSUNG:

 

  Wasserzeichenfeld (Last_Modified, RowVersion, CDC) in Quellsystemen identifizieren.

  Inkrementales Laden via Change Data Capture (CDC) für SQL-Server-Quellen.

  Soft Delete erkennen: Sätze, die aus der Quelle verschwinden, müssen auch im DWH behandelt werden.

 

-- Inkrementales Laden mit Wasserzeichen

DECLARE @LastLoadTime DATETIME2;

SELECT @LastLoadTime = MAX(ExtractDatum) FROM dbo.ETL_Protokoll

WHERE ProzessName = 'Auftraege_Load' AND Status = 'ERFOLG';

 

INSERT INTO raw.SalesOrders

SELECT *, SYSUTCDATETIME() AS _loaded_at

FROM [ERP].dbo.SalesOrders

WHERE ModifiedDate > ISNULL(@LastLoadTime, '1900-01-01');

 

-- Soft Deletes erkennen: im Quellsystem weggefallene Sätze

UPDATE dwh.Fact_Auftraege SET IsDeleted = 1, DeletedAt = SYSUTCDATETIME()

WHERE OrderID NOT IN (SELECT OrderID FROM [ERP].dbo.SalesOrders)

  AND IsDeleted = 0;

 

 

05 Transformationslogik im Reporting-Tool

 

Business-Logik — z.B. die Definition einer "aktiven" Kundenbeziehung oder der Berechnung von Deckungsbeiträgen — landet als berechnetes Measure in Power BI. Drei Monate später existieren vier verschiedene DAX-Formeln für dieselbe KPI in vier verschiedenen Berichten.

 

LÖSUNG:

 

  Transformationslogik gehört in die Datenpipeline (ETL oder dbt), nicht ins Reporting-Tool.

  Power BI liest ausschließlich aus Views oder fertigen Fact/Dim-Tabellen.

  Einheitliche KPI-Definitionen in einer zentralen Dokumentation (Data Dictionary).

 

06 Keine Fehlerbehandlung in ELT-Pipelines

 

dbt läuft durch — aber 3 % der Zeilen wurden wegen eines NULL-Werts in einem Join silently verworfen. Power BI zeigt korrekte Summen, die aber 3 % zu niedrig sind. Niemand bemerkt es, bis ein Controller die Zahlen gegen das ERP prüft.

 

LÖSUNG:

 

  Row-Count-Checks vor und nach jeder Transformation.

  dbt-Tests (not_null, unique, referential integrity) für alle kritischen Felder.

  Reconciliation-Query täglich: DWH-Summen vs. ERP-Summen.

 

-- Reconciliation: DWH vs. ERP Umsatz-Abgleich

SELECT

    'ERP'  AS Quelle, SUM(Nettobetrag) AS Umsatz_EUR, COUNT(*) AS Zeilen

FROM [ERP].dbo.SalesOrders

WHERE YEAR(OrderDate) = YEAR(GETDATE())

  AND Status NOT IN ('STORNO', 'ENTWURF')

UNION ALL

SELECT

    'DWH', SUM(betrag_eur), COUNT(*)

FROM dwh.Fact_Auftraege

WHERE YEAR(order_date) = YEAR(GETDATE());

-- Abweichung > 0,1% → Alert auslösen

 

 

07 Schema-Änderungen in Quellsystemen ignorieren

 

Das ERP-System erhält ein Update, eine Spalte wird umbenannt. Die ETL-Pipeline bricht. Oder schlimmer: Sie bricht nicht, lädt aber Nullwerte. Das fällt erst beim Monatsabschluss auf.

 

LÖSUNG:

 

  Schema-Monitoring auf allen Quellsystemen einrichten.

  Contract Testing: Erwartetes Schema explizit definieren und täglich prüfen.

  Alerting bei Schema-Änderungen, bevor die Pipeline läuft.

 

-- Schema-Monitoring: Spaltenstruktur täglich protokollieren

INSERT INTO dbo.Schema_Snapshots (Datum, Tabelle, Spaltenanzahl, SpaltenHash)

SELECT

    CAST(GETDATE() AS DATE),

    TABLE_SCHEMA + '.' + TABLE_NAME,

    COUNT(*),

    HASHBYTES('SHA2_256',

        STRING_AGG(COLUMN_NAME + ':' + DATA_TYPE, '|' ORDER BY ORDINAL_POSITION))

FROM INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_CATALOG = 'ERP_Datenbank'

GROUP BY TABLE_SCHEMA, TABLE_NAME;

 

-- Alert bei Schema-Änderung

SELECT s1.Tabelle, s1.SpaltenHash AS Gestern, s2.SpaltenHash AS Heute

FROM dbo.Schema_Snapshots s1

JOIN dbo.Schema_Snapshots s2 ON s1.Tabelle = s2.Tabelle

WHERE s1.Datum = CAST(GETDATE()-1 AS DATE)

  AND s2.Datum = CAST(GETDATE() AS DATE)

  AND s1.SpaltenHash <> s2.SpaltenHash;

 

 

08 Keine SLAs für Datenfreshness

 

Das Data Warehouse soll bis 07:00 Uhr aktuell sein — aber niemand überwacht, ob die Pipelines rechtzeitig fertig sind. Der Controller startet seinen Morgenbericht mit gestrigen Zahlen.

 

LÖSUNG:

 

  Freshness-Tabelle mit erwarteten Ladezeiten pro Objekt.

  Monitoring-Job prüft täglich um 07:05 Uhr, ob alle SLAs eingehalten wurden.

  Automatischer Alert per Database Mail oder Teams-Webhook bei Überschreitung.

 

-- Freshness-SLA-Monitoring

SELECT

    ProzessName,

    MAX(ExtractEnde) AS LetzterErfolg,

    DATEDIFF(MINUTE, MAX(ExtractEnde), GETDATE()) AS MinutenZurück,

    SLA_MaxMinuten,

    CASE WHEN DATEDIFF(MINUTE, MAX(ExtractEnde), GETDATE()) > SLA_MaxMinuten

         THEN 'SLA VERLETZT' ELSE 'OK' END AS SLA_Status

FROM dbo.ETL_Protokoll p

JOIN dbo.ETL_SLA s ON p.ProzessName = s.ProzessName

WHERE Status = 'ERFOLG'

GROUP BY p.ProzessName, s.SLA_MaxMinuten

HAVING MAX(ExtractEnde) < DATEADD(HOUR, -8, GETDATE())

    OR DATEDIFF(MINUTE, MAX(ExtractEnde), GETDATE()) > s.SLA_MaxMinuten;

 

 

09 ELT ohne Kostensteuerung in der Cloud

 

Ein ELT-Prozess auf Azure Synapse transformiert täglich 500 GB — und niemand hat einen Spending Cap gesetzt. Nach dem ersten Monatsabschluss kommt eine Azure-Rechnung, die das Jahresbudget für BI überschreitet.

 

LÖSUNG:

 

  Materialized Views statt Full-Scans für häufig abgefragte Aggregationen.

  Result Set Caching in Synapse aktivieren für wiederholte Abfragen.

  Kostenalerts in Azure Cost Management konfigurieren — täglich, nicht monatlich.

  Workload Management: Teure Transformationsjobs nur in Off-Peak-Zeiten.

 

10 Kein Rollback-Konzept

 

Eine fehlerhafte Transformation lädt falsche Daten in das DWH. Power BI zeigt falschen Umsatz. Die Lösung: manuelles Rollback. Dauer: zwei Tage. Wäre eine unveränderliche Raw-Schicht vorhanden, dauert es 20 Minuten.

 

LÖSUNG:

 

  Unveränderliche Raw-Schicht ist das wichtigste Versicherungsmittel (Kapitel 4, Punkt 3).

  Snapshot-Tabellen für kritische DWH-Objekte vor jedem Transformationslauf.

  Rollback-Stored-Procedure für jede Fact-Tabelle vorbereiten und regelmäßig testen.

 


 

05

ETL in der Praxis

 

SSIS, SQL Agent und klassische Pipelines für SQL Server

 

ETL ist nicht legacy — es ist für viele KMU-Umgebungen nach wie vor das richtige Werkzeug. Ein gut strukturiertes SSIS-Projekt mit klarer Schichtenarchitektur ist wartbar, auditierbar und zuverlässig.

 

5.1 Schichtenarchitektur für ETL

 

-- Empfohlene Datenbankstruktur für ETL-Projekte

-- Alle Schichten in einer Datenbank, getrennt durch Schemas

 

CREATE SCHEMA stg;   -- Staging: rohe Quelldaten, temporär

CREATE SCHEMA ods;   -- Operational Data Store: bereinigt, historisiert

CREATE SCHEMA dwh;   -- Data Warehouse: Dimensions & Facts

CREATE SCHEMA rpt;   -- Reporting: Views und Aggregationen für Power BI

 

-- ETL-Protokoll für alle Prozesse

CREATE TABLE dbo.ETL_Protokoll (

    ProtokollID    INT IDENTITY PRIMARY KEY,

    ProzessName    NVARCHAR(200),

    ExtractStart   DATETIME2,

    ExtractEnde    DATETIME2,

    ZeilenGelesen  INT,

    ZeilenGeladen  INT,

    ZeilenFehler   INT,

    Status         NVARCHAR(20),  -- LAUFEND / ERFOLG / FEHLER

    Fehlermeldung  NVARCHAR(MAX)

);

 

 

5.2 Wiederverwendbare ETL-Stored-Procedure

 

-- Template für robuste ETL-Prozedur mit Protokollierung

CREATE OR ALTER PROCEDURE dbo.ETL_Lade_Auftraege

AS

BEGIN

    DECLARE @StartTime DATETIME2 = SYSUTCDATETIME();

    DECLARE @ProtoID INT;

    DECLARE @ZeilenGelesen INT, @ZeilenGeladen INT;

 

    -- Protokolleintrag öffnen

    INSERT INTO dbo.ETL_Protokoll (ProzessName, ExtractStart, Status)

    VALUES ('ETL_Lade_Auftraege', @StartTime, 'LAUFEND');

    SET @ProtoID = SCOPE_IDENTITY();

 

    BEGIN TRY

        -- Staging laden

        TRUNCATE TABLE stg.Auftraege;

        INSERT INTO stg.Auftraege

        SELECT * FROM [ERP-Linked].dbo.SalesOrders

        WHERE ModifiedDate > (SELECT ISNULL(MAX(ExtractEnde), '1900-01-01')

            FROM dbo.ETL_Protokoll WHERE ProzessName = 'ETL_Lade_Auftraege'

            AND Status = 'ERFOLG');

        SET @ZeilenGelesen = @@ROWCOUNT;

 

        -- In DWH übertragen (MERGE für Upsert)

        MERGE dwh.Fact_Auftraege AS ziel

        USING stg.Auftraege AS quelle

            ON ziel.OrderID = quelle.OrderID

        WHEN MATCHED AND ziel.Nettobetrag <> quelle.Nettobetrag THEN

            UPDATE SET ziel.Nettobetrag = quelle.Nettobetrag,

                       ziel.GeaendertAm = SYSUTCDATETIME()

        WHEN NOT MATCHED THEN

            INSERT (OrderID, KundenNr, OrderDate, Nettobetrag)

            VALUES (quelle.OrderID, quelle.KundenNr,

                    quelle.OrderDate, quelle.Nettobetrag);

        SET @ZeilenGeladen = @@ROWCOUNT;

 

        -- Protokoll schließen

        UPDATE dbo.ETL_Protokoll SET

            ExtractEnde = SYSUTCDATETIME(), Status = 'ERFOLG',

            ZeilenGelesen = @ZeilenGelesen, ZeilenGeladen = @ZeilenGeladen

        WHERE ProtokollID = @ProtoID;

 

    END TRY

    BEGIN CATCH

        UPDATE dbo.ETL_Protokoll SET

            ExtractEnde = SYSUTCDATETIME(), Status = 'FEHLER',

            Fehlermeldung = ERROR_MESSAGE()

        WHERE ProtokollID = @ProtoID;

        THROW;

    END CATCH

END

 

 

5.3 SQL Agent Job Struktur

 

Empfohlene Job-Kette für ein ETL-Projekt mit abhängigen Schritten:

 

  Schritt 1: Quellerreichbarkeit prüfen (Linked Server Test).

 

  Schritt 2: Staging laden (alle Quellobjekte parallel, wenn möglich).

 

  Schritt 3: Validierung (Row-Count, NULL-Checks, Reconciliation).

 

  Schritt 4: DWH laden (erst nach erfolgreicher Validierung).

 

  Schritt 5: Reporting-Views aktualisieren / Caches leeren.

 

  Schritt 6: SLA-Check und Benachrichtigung.

 


 

06

ELT in der Praxis

 

dbt, Azure Synapse, Microsoft Fabric und moderne Stacks

 

6.1 dbt auf SQL Server — der pragmatische Einstieg

 

dbt (data build tool) funktioniert mit SQL Server On-Premise — ohne Cloud-Migration. Es bringt Versionskontrolle, Dokumentation und Tests in die Transformationsschicht.

 

-- dbt-Projektstruktur für SQL Server

-- profiles.yml (Verbindung zu SQL Server)

-- my_project:

--   target: dev

--   outputs:

--     dev:

--       type: sqlserver

--       server: MEIN-SERVER

--       database: DWH

--       schema: dbt_dev

--       windows_login: true

 

-- models/staging/stg_kunden.sql

-- Bereinigung der rohen Kundendaten

SELECT

    KundenNr                                AS kunden_nr,

    TRIM(Name)                              AS name,

    LOWER(TRIM(Email))                      AS email,

    CASE WHEN LEN(PLZ) = 5 AND PLZ NOT LIKE '%[^0-9]%'

         THEN PLZ ELSE NULL END             AS plz,

    Ort,

    AnlageDatum                             AS angelegt_am,

    SYSUTCDATETIME()                        AS _transformiert_am

FROM {{ source('erp_raw', 'Kunden') }}

WHERE Name IS NOT NULL AND Name <> ''

 

 

6.2 dbt-Tests für Datenqualität

 

-- schema.yml — Datenqualitätstests direkt im dbt-Modell

-- version: 2

-- models:

--   - name: stg_kunden

--     columns:

--       - name: kunden_nr

--         tests:

--           - unique

--           - not_null

--       - name: email

--         tests:

--           - not_null:

--               severity: warn  -- Warnung, kein Fehler

--       - name: plz

--         tests:

--           - not_null:

--               severity: warn

 

-- Eigener dbt-Test: Umsatz-Reconciliation

-- tests/assert_dwh_umsatz_stimmt.sql

SELECT COUNT(*) AS fehler_anzahl

FROM (

    SELECT SUM(betrag_eur) AS dwh_umsatz FROM {{ ref('fact_auftraege') }}

    WHERE YEAR(order_date) = YEAR(GETDATE())

) dwh

CROSS JOIN (

    SELECT SUM(Nettobetrag) AS erp_umsatz

    FROM {{ source('erp_raw', 'SalesOrders') }}

    WHERE YEAR(OrderDate) = YEAR(GETDATE())

      AND Status NOT IN ('STORNO', 'ENTWURF')

) erp

WHERE ABS(dwh_umsatz - erp_umsatz) / NULLIF(erp_umsatz, 0) > 0.001

 

 

6.3 Microsoft Fabric — ELT ohne Infrastruktur

 

Microsoft Fabric vereint Data Factory, Synapse, Power BI und dbt in einer Plattform. Für KMU mit Microsoft-Lizenzierung ist es der direkteste Weg zu moderner ELT-Architektur:

 

  Lakehouse: OneLake als unveränderliche Raw-Schicht (Delta-Format).

 

  Data Factory Pipelines: Extraktion aus ERP, CRM und APIs.

 

  Notebooks / dbt: Transformation direkt im Lakehouse via Spark SQL oder T-SQL.

 

  Power BI DirectLake: Berichte ohne Datenimport — direkt aus dem Lakehouse.

 

 

FABRIC VS. ON-PREMISE ENTSCHEIDUNG

Microsoft Fabric lohnt sich ab ca. 100 GB Datenvolumen/Monat oder wenn Power BI Premium bereits lizenziert ist (Fabric ist in P1+ enthalten). Darunter ist SQL Server On-Premise mit dbt oft günstiger und einfacher zu betreiben.

 


 

07

Governance-Framework

 

Lineage, Qualitätssicherung und Auditing — für beide Muster

 

Ein produktionstaugliches Datenpipeline-Framework braucht mehr als funktionierende Transformationen. Es braucht Nachvollziehbarkeit, Qualitätssicherung und Auditing.

 

7.1 Datenlineage-Tabelle

 

-- Vollständiges Lineage-Modell für ETL und ELT

CREATE TABLE dbo.Lineage_Knoten (

    KnotenID       INT IDENTITY PRIMARY KEY,

    KnotenTyp      NVARCHAR(20),    -- QUELLE / STAGING / ODS / DWH / REPORT

    Schicht        NVARCHAR(50),

    ObjektName     NVARCHAR(200),

    Beschreibung   NVARCHAR(500),

    Verantwortlich NVARCHAR(100),

    LetzteAenderung DATETIME2

);

 

CREATE TABLE dbo.Lineage_Kanten (

    KanteID        INT IDENTITY PRIMARY KEY,

    VonKnotenID    INT REFERENCES dbo.Lineage_Knoten(KnotenID),

    NachKnotenID   INT REFERENCES dbo.Lineage_Knoten(KnotenID),

    TransformRegel NVARCHAR(MAX),

    ProzessName    NVARCHAR(200),

    AktivSeit      DATETIME2 DEFAULT SYSUTCDATETIME()

);

 

-- Lineage eines Feldes zurückverfolgen (rekursiv)

WITH Lineage AS (

    SELECT k.KnotenID, k.ObjektName, k.KnotenTyp, 0 AS Tiefe

    FROM dbo.Lineage_Knoten k WHERE k.ObjektName = 'rpt.V_Umsatz_Gesamt'

    UNION ALL

    SELECT vk.KnotenID, vk.ObjektName, vk.KnotenTyp, l.Tiefe + 1

    FROM Lineage l

    JOIN dbo.Lineage_Kanten e ON l.KnotenID = e.NachKnotenID

    JOIN dbo.Lineage_Knoten vk ON e.VonKnotenID = vk.KnotenID

)

SELECT Tiefe, KnotenTyp, ObjektName FROM Lineage ORDER BY Tiefe;

 

 

 

 

 

 

 

 

 

7.2 Zentrales Qualitäts-Framework

 

-- Wiederverwendbare Qualitätsprüfungen für alle Pipelines

CREATE TABLE dbo.DQ_Regeln (

    RegelID        INT IDENTITY PRIMARY KEY,

    ObjektName     NVARCHAR(200),

    RegelName      NVARCHAR(100),

    RegelSQL       NVARCHAR(MAX),   -- SQL gibt Anzahl Fehler zurück

    Schweregrad    NVARCHAR(10),    -- KRITISCH / WARNUNG / INFO

    SLA_MaxFehler  INT DEFAULT 0

);

 

CREATE OR ALTER PROCEDURE dbo.DQ_FuehreAlleRegelnAus AS

BEGIN

    DECLARE @RegelID INT, @ObjektName NVARCHAR(200), @RegelSQL NVARCHAR(MAX);

    DECLARE @FehlerAnzahl INT, @Schweregrad NVARCHAR(10);

 

    DECLARE regel_cursor CURSOR FOR

        SELECT RegelID, ObjektName, RegelSQL, Schweregrad, SLA_MaxFehler

        FROM dbo.DQ_Regeln WHERE Aktiv = 1;

 

    OPEN regel_cursor;

    FETCH NEXT FROM regel_cursor INTO @RegelID, @ObjektName,

        @RegelSQL, @Schweregrad, @SLA_MaxFehler;

 

    WHILE @@FETCH_STATUS = 0

    BEGIN

        EXEC sp_executesql @RegelSQL, N'@n INT OUTPUT', @FehlerAnzahl OUTPUT;

 

        INSERT INTO dbo.DQ_Ergebnisse

            (RegelID, PruefZeitpunkt, FehlerAnzahl, Status)

        VALUES (@RegelID, SYSUTCDATETIME(), @FehlerAnzahl,

            CASE WHEN @FehlerAnzahl <= @SLA_MaxFehler THEN 'OK' ELSE @Schweregrad END);

 

        FETCH NEXT FROM regel_cursor INTO @RegelID, @ObjektName,

            @RegelSQL, @Schweregrad, @SLA_MaxFehler;

    END

    CLOSE regel_cursor; DEALLOCATE regel_cursor;

END

 

 

7.3 Audit-Log für Datenpipelines

 

Audit-Dimension

ETL-Umsetzung

ELT/dbt-Umsetzung

Wer hat geladen?

SQL Agent Job Owner in ETL_Protokoll

dbt run --target mit Service Account

Was wurde geladen?

ZeilenGelesen / ZeilenGeladen

dbt run results.json

Wann wurde geladen?

ExtractStart / ExtractEnde

dbt invocation_id + started_at

Warum abgewichen?

Fehlermeldung in ETL_Protokoll

dbt test results mit Fehler-Rows

Rollback möglich?

Raw-Schicht vorhanden?

Raw-Layer in Lakehouse (unveränderlich)

 


 

08

Hybride Architekturen

 

Wenn ETL und ELT zusammenarbeiten müssen

 

In der Praxis sind reine ETL- oder reine ELT-Architekturen seltener als hybride Ansätze. Das ist kein Kompromiss — es ist oft die ehrlichste Antwort auf heterogene Anforderungen.

 

8.1 Das Medaillon-Muster (Bronze / Silber / Gold)

 

Das von Databricks geprägte Medaillon-Muster passt ETL- und ELT-Stärken zusammen:

 

  Bronze (Raw): Rohdaten landen unverändert — ETL-artig extrahiert, aber ohne Transformation geladen. Unveränderlich.

 

  Silber (Staged): Bereinigung, Typisierung, Deduplizierung — SQL-Transformation im Warehouse (ELT). Historisiert.

 

  Gold (Curated): Business-Logik, Aggregationen, KPI-Berechnung — fertige Fact/Dim-Tabellen für Power BI. ELT oder Materialized Views.

 

-- Medaillon-Schichten in SQL Server

CREATE SCHEMA bronze;   -- Rohdaten — unveränderlich, kein Transform

CREATE SCHEMA silver;   -- Bereinigt — Typen korrekt, Nulls behandelt

CREATE SCHEMA gold;     -- Business-fertig — KPIs, Aggregationen

 

-- Bronze → Silber Transformation (ELT innerhalb SQL Server)

CREATE OR ALTER VIEW silver.Auftraege AS

SELECT

    OrderID,

    KundenNr,

    TRY_CAST(OrderDate AS DATE)              AS order_date,

    TRY_CAST(Nettobetrag AS DECIMAL(18,2))   AS nettobetrag,

    UPPER(TRIM(Waehrung))                    AS waehrung,

    CASE WHEN Status IN ('STORNO','ENTWURF') THEN 0 ELSE 1 END AS ist_aktiv,

    _loaded_at

FROM bronze.SalesOrders

WHERE TRY_CAST(OrderDate AS DATE) IS NOT NULL;  -- Zeilen mit ungültigem Datum filtern

 

 

 

 

 

 

 

8.2 ETL für sensible Daten, ELT für Analytik

 

Eine bewährte hybride Strategie für DSGVO-relevante Umgebungen:

 

  ETL pseudonymisiert personenbezogene Daten vor dem Laden ins Warehouse.

 

  ELT/dbt übernimmt alle analytischen Transformationen auf den anonymisierten Daten.

 

  Der Schlüssel für Re-Identifikation liegt ausschließlich On-Premise, nie im Cloud-Warehouse.

 

-- ETL: Pseudonymisierung vor dem Cloud-Load

INSERT INTO CloudStaging.Kunden_Pseudonymisiert

SELECT

    HASHBYTES('SHA2_256', CAST(KundenNr AS VARBINARY)) AS KundenKey_Pseudo,

    -- KEIN Name, KEIN Email, KEINE direkt identifizierende Information

    LEFT(PLZ, 2) + '000'   AS PLZ_Aggregiert,   -- nur Region, nicht exakte PLZ

    Branche,

    Umsatzklasse,

    AnlageDatum

FROM dbo.Kunden;

-- ELT in Azure Synapse arbeitet nur mit pseudonymisierten Daten

 

 


 

09

Migration & Modernisierung

 

Vom Legacy-ETL zur modernen Architektur — schrittweise und risikoarm

 

Eine Komplettmigration von SSIS auf dbt in einem Schritt ist fast immer ein Fehler. Der richtige Ansatz ist Strangler Fig: neue Prozesse werden modern gebaut, bestehende schrittweise abgelöst.

 

9.1 Migrationsstrategie in fünf Phasen

 

Phase

Inhalt

Dauer

Risiko

1. Inventar

Alle ETL-Prozesse katalogisieren, Abhängigkeiten kartieren

1–2 Wochen

Kein

2. Stabilisieren

Bestehende Pipelines mit Protokollierung und Tests nachrüsten

2–4 Wochen

Niedrig

3. Raw-Schicht

Unveränderliche Bronze-Schicht als Fundament anlegen

1–2 Wochen

Niedrig

4. Parallelbetrieb

Neue ELT-Pipeline parallel zum bestehenden ETL aufbauen und vergleichen

4–8 Wochen

Mittel

5. Ablösung

ETL-Prozess deaktivieren, sobald ELT Parität erreicht und validiert ist

pro Prozess 1 Woche

Mittel

 

9.2 Inventar bestehender ETL-Prozesse

 

-- ETL-Inventar: Überblick über alle bestehenden Pipelines

CREATE TABLE dbo.ETL_Inventar (

    InventarID     INT IDENTITY PRIMARY KEY,

    ProzessName    NVARCHAR(200),

    Kategorie      NVARCHAR(50),    -- STAMMDATEN / TRANSAKTION / AGGREGATION

    Quellsystem    NVARCHAR(100),

    Zieltabelle    NVARCHAR(200),

    Lauffrequenz   NVARCHAR(50),    -- TÄGLICH / STÜNDLICH / WÖCHENTLICH

    LetzterLauf    DATETIME2,

    DurchschnittMin DECIMAL(8,2),

    MigrationStatus NVARCHAR(30) DEFAULT 'OFFEN', -- OFFEN / IN_ARBEIT / MIGRIERT / BEHALTEN

    Prioritaet     INT,             -- 1=hoch, 2=mittel, 3=niedrig

    Notizen        NVARCHAR(MAX)

);

 

-- Migrationsfortschritt abfragen

SELECT

    MigrationStatus,

    COUNT(*) AS Anzahl,

    ROUND(100.0 * COUNT(*) / SUM(COUNT(*)) OVER(), 1) AS Anteil_Pct

FROM dbo.ETL_Inventar

GROUP BY MigrationStatus

ORDER BY Anzahl DESC;

 

 

9.3 Parallelvalidierung: Alt vs. Neu

 

-- Vergleich: Legacy-ETL-Ergebnis vs. neue ELT-Pipeline

-- Beide Pipelines laufen parallel, Ergebnisse werden verglichen

SELECT

    'Zeilenanzahl Abweichung' AS Metrik,

    ABS(etl.Zeilen - elt.Zeilen) AS Differenz,

    CASE WHEN ABS(etl.Zeilen - elt.Zeilen) = 0 THEN 'IDENTISCH'

         WHEN ABS(etl.Zeilen - elt.Zeilen) < 10 THEN 'AKZEPTABEL'

         ELSE 'PRÜFEN' END AS Status

FROM

    (SELECT COUNT(*) AS Zeilen FROM dwh.Fact_Auftraege_Legacy) etl,

    (SELECT COUNT(*) AS Zeilen FROM dwh.Fact_Auftraege_ELT) elt

UNION ALL

SELECT

    'Umsatz Abweichung EUR',

    ABS(etl.Summe - elt.Summe),

    CASE WHEN ABS(etl.Summe - elt.Summe) < 0.01 THEN 'IDENTISCH'

         WHEN ABS(etl.Summe - elt.Summe) / NULLIF(etl.Summe, 0) < 0.001 THEN 'AKZEPTABEL'

         ELSE 'PRÜFEN' END

FROM

    (SELECT SUM(betrag_eur) AS Summe FROM dwh.Fact_Auftraege_Legacy) etl,

    (SELECT SUM(betrag_eur) AS Summe FROM dwh.Fact_Auftraege_ELT) elt;

 

 


 

10

30-Tage-Architekturplan

 

Strukturierte Entscheidung und Umsetzung — von der Analyse bis zum laufenden Betrieb

 

 

VOR DEM START

Sichern Sie alle bestehenden ETL-Prozesse (SSIS-Pakete, Stored Procedures, SQL Agent Jobs). Dokumentieren Sie den aktuellen Ist-Zustand mit Laufzeiten und Volumen. Bilden Sie ein kleines Entscheidungsteam: IT-Leitung, ein Data Engineer, ein Business-Vertreter.

 

WOCHE 1: BESTANDSAUFNAHME & ENTSCHEIDUNG

 

■ TAG 1-2: INVENTAR ERSTELLEN

 

  ETL-Inventar-Tabelle anlegen und alle bestehenden Pipelines katalogisieren

  Laufzeiten, Volumen und Abhängigkeiten aus ETL_Protokoll extrahieren

  Quellsysteme und Zielobjekte für jeden Prozess dokumentieren

  Kritische vs. unkritische Prozesse priorisieren (Auswirkung auf Power-BI-Berichte)

 

■ TAG 3-4: ENTSCHEIDUNGSMATRIX AUSFÜLLEN

 

  Kapitel 3 Entscheidungsmatrix mit realem Team ausfüllen — nicht alleine

  Datenschutzanforderungen mit Datenschutzbeauftragtem klären (Kriterien 1 und 6)

  Cloud-Budget vs. On-Premise-Kosten gegenüberstellen

  Architekturentscheidung dokumentieren und von IT-Leitung freigeben lassen

 

■ TAG 5-7: FUNDAMENT LEGEN

 

  Bronze/Raw-Schicht für die drei wichtigsten Quelltabellen anlegen (Kapitel 3.2 / 8.1)

  ETL_Protokoll-Tabelle auf alle bestehenden Prozesse nachrüsten (Kapitel 5.1)

  Schema-Monitoring auf allen Quellsystemen einrichten (Kapitel 4, Punkt 7)

  Erster Governance-Workshop: Lineage-Modell und DQ-Regeln skizzieren

 

 

 

 

 

WOCHE 2: ERSTE PIPELINE MODERNISIEREN

 

■ TAG 8-10: PILOT-PROZESS AUSWÄHLEN UND UMBAUEN

 

  Niedrig-Risiko-Prozess aus Inventar als Pilot auswählen (Priorität 3, kein Kernprozess)

  Bei ETL-Entscheidung: Prozedur-Template aus Kapitel 5.2 auf Pilot anwenden

  Bei ELT-Entscheidung: dbt installieren, erstes Staging-Modell für Pilot erstellen

  Reconciliation-Query für Pilot implementieren (Kapitel 4, Punkt 6)

 

■ TAG 11-13: GOVERNANCE AUFBAUEN

 

  Lineage-Knoten und -Kanten für alle bestehenden Prozesse erfassen (Kapitel 7.1)

  Erste fünf DQ-Regeln in dbo.DQ_Regeln eintragen und testen

  SLA-Tabelle für alle produktiven Pipelines anlegen (Kapitel 4, Punkt 8)

  Freshness-Monitoring-Job täglich 07:05 Uhr aktivieren

 

■ TAG 14: PILOT VALIDIEREN UND DOKUMENTIEREN

 

  Pilot-Pipeline 7 Tage im Parallelbetrieb neben Legacy laufen lassen

  Parallelvalidierungs-Query aus Kapitel 9.3 täglich prüfen

  Abweichungen dokumentieren und beheben

  Entscheidung: Pilot freigeben für Produktivbetrieb?

 

WOCHE 3: ROLLOUT & AUTOMATISIERUNG

 

■ TAG 15-17: WEITERE PIPELINES MIGRIEREN

 

  Nächste zwei Prozesse aus Inventar auf Basis der Pilot-Erfahrungen umbauen

  Migrations-Checkliste je Prozess: Inventar aktualisieren, Parallel, Validieren, Ablösen

  Rollback-Prozeduren für jede migrierte Fact-Tabelle erstellen

  Bestehende SSIS-Pakete als BEHALTEN oder IN_ARBEIT markieren

 

■ TAG 18-20: QUALITÄTS-AUTOMATISIERUNG

 

  DQ_FuehreAlleRegelnAus-Prozedur produktiv schalten (Kapitel 7.2)

  Automatischen Wochenbericht per Database Mail einrichten

  Power-BI-Qualitätsdashboard: DQ-Ergebnisse, ETL_Protokoll, Freshness-SLAs

  Alerting bei SLA-Verletzung via Database Mail oder Teams-Webhook einrichten

 

■ TAG 21: TEAM-ENABLEMENT

 

  Kurzschulung Data Engineers: gewähltes Muster, Templates, Debugging-Vorgehensweise

  Dokumentation: Architecture Decision Record (ADR) für ETL vs. ELT Entscheidung

  Data Dictionary für alle neuen Objekte aktualisieren

  Onboarding-Leitfaden für neue Pipelines schreiben

 

WOCHE 4: STABILISIERUNG & AUSBLICK

 

■ TAG 22-25: BESTEHENDE PROZESSE NACHRÜSTEN

 

  Alle verbleibenden Legacy-Prozesse mit ETL_Protokoll nachrüsten

  Inkremental-Mechanismus für Full-Load-Prozesse prüfen und ggf. umstellen (Kapitel 4, Punkt 4)

  Schema-Monitoring-Alerts auf alle produktiven Quellsysteme ausdehnen

  Raw-Schicht für alle produktiven Quelltabellen vollständig anlegen

 

■ TAG 26-28: KOSTENOPTIMIERUNG

 

  Laufzeiten aller Pipelines aus ETL_Protokoll analysieren

  Längste Prozesse optimieren: Inkrementalität, Indizes auf Staging-Tabellen

  Bei Cloud-ELT: Kostenreport aus Azure Cost Management auswerten

  Materialized Views für häufig abgefragte Aggregationen prüfen (Kapitel 4, Punkt 9)

 

■ TAG 29-30: ABSCHLUSS & ROADMAP

 

  Abschlussmessung: alle Pipelines in ETL_Protokoll, SLA-Einhalten, DQ-Score

  Migrationsstatus im Inventar aktualisieren: Anteil MIGRIERT vs. OFFEN

  Roadmap für die nächsten 6 Monate: welche Prozesse kommen als nächstes?

  Architecture Decision Record finalisieren und archivieren

  Ergebnis feiern — eine gut dokumentierte, testbare Datenpipeline ist ein echter Wettbewerbsvorteil! ■

 

 

ERGEBNIS NACH 30 TAGEN

Ihr Ergebnis nach 30 Tagen: Eine begründete, dokumentierte Architekturentscheidung, mindestens drei modernisierte Pipelines mit Protokollierung und Qualitätssicherung, ein laufendes Governance-Framework und ein Team, das weiß, wie neue Pipelines korrekt gebaut werden.

 


 

Ausführlicher Haftungsausschluss und Lizenzbestimmungen

 

1. Allgemeiner Haftungsausschluss

 

Die in diesem Dokument enthaltenen Informationen, Skripte, Architekturmuster und Empfehlungen wurden nach bestem Wissen und Gewissen auf der Grundlage langjähriger praktischer Erfahrung erstellt. Dennoch kann keine Gewähr für die Vollständigkeit, Richtigkeit oder Aktualität der bereitgestellten Inhalte übernommen werden.

 

Der Autor übernimmt ausdrücklich keinerlei Haftung für unmittelbare oder mittelbare Schäden, einschließlich, aber nicht beschränkt auf: Datenverlust oder -korruption, Systemausfälle, Produktionsunterbrechungen, entgangenen Gewinn sowie unerwartete Cloud-Kosten.

 

Die Nutzung der bereitgestellten Muster und Empfehlungen erfolgt ausschließlich auf eigenes Risiko des Anwenders. Es wird dringend empfohlen, alle Muster zunächst in einer Testumgebung zu validieren und auf die eigene Systemlandschaft anzupassen.

 

2. Haftung für Skripte und Architekturmuster

 

Alle SQL-Skripte, dbt-Modelle und Architekturmuster wurden in realen KMU-Umgebungen erprobt. Dennoch können aufgrund unterschiedlicher Systemkonfigurationen, Datenbankversionen und Datenvolumina unerwartete Verhaltensweisen auftreten.

 

3. Kostenangaben und Cloud-Dienste

 

Angaben zu Cloud-Kosten (Azure Synapse, Microsoft Fabric, Snowflake) sind Richtwerte, Stand März 2026. Tatsächliche Kosten hängen von Lizenzmodell, Region, Datenvolumen und Nutzungsverhalten ab. Konfigurieren Sie stets Kostenalerts, bevor Sie Cloud-Dienste produktiv einsetzen.

 

4. Versionsabhängigkeit und Aktualität

 

Die Inhalte beziehen sich auf SQL Server 2022/2025, dbt Core 1.8+, Azure Synapse und Microsoft Fabric, Stand März 2026. Durch künftige Updates können Abweichungen entstehen.

 

5. Urheberrecht und Nutzungsrechte

 

Dieses Dokument und alle Inhalte sind urheberrechtlich geschützt. © 2026 Sascha Hess, xenosystems.de. Alle Rechte vorbehalten.

6. Markenrechte

 

SQL Server, Azure Synapse, Microsoft Fabric, Power BI und weitere Microsoft-Produktnamen sind eingetragene Marken der Microsoft Corporation. dbt ist eine Marke von dbt Labs, Inc. Snowflake ist eine Marke der Snowflake Inc.

 

7. Anwendbares Recht und Gerichtsstand

 

Es gilt ausschließlich deutsches Recht. Gerichtsstand für alle Streitigkeiten ist, soweit gesetzlich zulässig, Weimar, Thüringen, Deutschland.

 


 

Über den Autor

 

Sascha Hess ist Diplom-Biologe und IT-Professional mit über 20 Jahren Erfahrung in der Administration von ERP-, BI- und Datenbanksystemen. Er hat mehr als 300 Oracle- und SQL-Server-Instanzen administriert und betreut — von mittelständischen KMU bis zu Universitäten und Energieversorgern.

 

Sein Ansatz verbindet naturwissenschaftliche Präzision mit hochgradiger IT-Spezialisierung. Schwerpunkte: SQL Server Performance-Tuning, ERP-Einführungen, Business Intelligence (Power BI, DeltaMaster), Prozessdigitalisierung und IT-Interim-Management.

 

Web: www.xenosystems.de | E-Mail: info@xenosystems.de | Standort: Weimar, Thüringen / Remote

 

Service

Beschreibung

BI-Architektur-Review

Professionelle Analyse Ihrer Datenpipeline-Architektur — Risikobewertung, ETL/ELT-Entscheidungshilfe und Modernisierungsfahrplan. Scope: 3-5 Tage.

ERP-Einführungsberatung

Begleitung von ERP-Projekten (MACH, Dynamics NAV, APplus) — Datenmigration, Schnittstellenentwicklung, Go-Live-Support.

BI-Dashboard-Aufbau

Power BI / DeltaMaster Dashboards inkl. ETL-Strecken und Data-Warehouse-Aufbau — für KMU ab 1 Woche Projektumfang.

dbt-Einführung & Migration

Hands-on Einführung von dbt auf SQL Server oder Azure — von der Pilotpipeline bis zum Produktivbetrieb.

Interim IT-Management

Übernahme der IT-Steuerung auf Zeit — Budgetplanung, Dienstleister-Management, strategische IT-Ausrichtung.

 

Vollständiges Dokument

ETL vs. ELT Einsatzgebiete 2026

Strategische Wissens-Roadmap · Checklisten · Praxisbeispiele

49,90 €

Sichere Zahlung über PayPal · Sofort-Download nach Zahlungseingang