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 |
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.
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
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
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; |
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 |
|
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
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. |
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.
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
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.
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) ); |
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 |
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; |
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).
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 |
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; |
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; |
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.
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 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.
|
-- 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) ); |
|
-- 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 |
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
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 <> '' |
|
-- 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 |
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
Ein produktionstaugliches Datenpipeline-Framework braucht mehr als funktionierende Transformationen. Es braucht Nachvollziehbarkeit, Qualitätssicherung und Auditing.
|
-- 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; |
|
-- 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 |
|
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
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.
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 |
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
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.
|
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 |
|
-- 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; |
|
-- 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
|
|
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. |
■ 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
■ 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?
■ 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
■ 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. |
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.
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.
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.
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.
Dieses Dokument und alle Inhalte sind urheberrechtlich geschützt. © 2026 Sascha Hess, xenosystems.de. Alle Rechte vorbehalten.
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.
Es gilt ausschließlich deutsches Recht. Gerichtsstand für alle Streitigkeiten ist, soweit gesetzlich zulässig, Weimar, Thüringen, Deutschland.
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
Strategische Wissens-Roadmap · Checklisten · Praxisbeispiele
49,90 €
Sichere Zahlung über PayPal · Sofort-Download nach Zahlungseingang