Datenintegration mit SQL und Pivot/Unpivot

Im Data-Warehouse Umfeld gibt es viele gute Softwarewerkzeuge, die beim Aufbereiten, Analysieren und Integrieren von Daten unterstützen. Wer auf diese oftmals teuren Produkte verzichten möchte und seine Daten in einer relationalen Datenbank vorhält, kann mit SQL die Aufgaben meist ebenso gut erledigen. Vor allem die kommerziellen Datenbanksysteme von Microsoft und Oracle, aber auch die Open Source Alternative Postgres, verfügen über mächtige Sprachkonstrukte, die teils im SQL Sprachstandard definiert sind oder ihn erweitern. PIVOT und UNPIVOT sind zwei dieser Sprachkonstrukte. Wie sich damit Datenintegration realisieren lässt, ist Thema dieses Artikels.

 

Datenaufbereitung, Strukturierung und Transformation

Ein Data-Warehouse integriert heterogene und verteilte Datenquellen in ein globales Datenmodell. Da die zu integrierenden Daten nur selten mit dem globalen Datenmodell kompatibel sind, müssen Maßnahmen zur Datenaufbereitung und Restrukturierung durchgeführt werden.

Das Vertauschen von Zeilen und Spalten ist eine Möglichkeit, Daten in eine grundlegend andere Struktur zu bringen. Oracle und Microsoft bieten in ihren kommerziellen Datenbanksystemen mit PIVOT und UNPIVOT komfortable Operatoren an. Postgres unterstützt nur das Pivotieren mit der crosstab Funktion. DB2 und MySQL fehlen diese Operatoren und Funktionen.

 

UNPIVOT

Mit einem UNPIVOT lassen sich Spalten in Zeilen transponieren. Breite Datenbank-tabellen, mit vielen Spalten, können so in eine Key-Value ähnliche Struktur überführt werden, wie nachfolgendes Beispiel zeigt. Dort werden die Kundenumsatzdaten  aus Tabelle 1 in ein Data-Warehouse integriert. Das UNPIVOT aus Listing 1 liefert eine flache Datenstruktur, die mit der Tabelle 2 FAKT_KUNDEN_UMSATZ  übereinstimmt und eine einfache Integration, z.B. über ein INSERT,  ermöglicht.

 

image

PIVOT

Ebenso gut ist es möglich, mit dem PIVOT in Listing 2, Zeilen in Spalten zu transponieren. Die FAKT_KUNDEN_UMSATZ aus Tabelle 2 könnte somit in die Datenstruktur der KUNDEN_UMSATZ_QUELLE überführt werden.

Die Pivot Funktion berechnet vor dem Transponieren eine Aggregation durch implizite Gruppierung aller Spalten, die nicht aggregiert werden. Darin liegt auch begründet, warum UNVIPOT im Allgemeinen keine Umkehrfunktion von PIVOT ist. Das Bespiel in Tabelle 3 und Tabelle 4 soll dies verdeutlichen. PIVOT erzeugt nicht nur eine neue Datenstruktur, sondern führt mit der Aggregatfunktion COUNT auch eine Auswertung durch, indem es Zeilen gruppiert.

image

Der PIVOT Operator eignet meist bei Key-Value ähnlichen Strukturen. Bei Anwendung muss allerdings der Wertebereich der Key-Spalte bekannt sein oder vorher eingegrenzt werden, da dieser die IN-Clause bildet.

 

Pivotieren in anderen Datenbanksystemen

Wie bereits erwähnt unterstützen nicht alle Datenbanksysteme PIVOT und UNPIVOT. Jedoch können diese Operatoren mit ANSI-SQL nachgebildet werden. Die Pivotierung der Tabelle 3 lässt sich z.B. umschreiben in:


SELECT KUNDEN_NR,
SUM(case when AKTION='ÜBERWEISUNG' then 1 else 0 end) UEBERWEISUNG,
SUM(case when AKTION='LOGIN' then 1 else 0 end) LOGIN
FROM KUNDE_TRANSAKTIONEN
GROUP BY KUNDEN_NR;

Analoges gilt für UNPIVOT. Hier erfolgt die Realisierung mit UNION. Am Beispiel für Tabelle 1 ergibt sich daraus:


SELECT KUNDEN_NUMMER, '2016' as JAHR, "2016" FROM KUNDE_UMSATZ
UNION
SELECT KUNDEN_NUMMER, '2017' as JAHR, "2017" FROM KUNDE_UMSATZ
UNION
SELECT KUNDEN_NUMMER, '2018' as JAHR, "2018" FROM KUNDE_UMSATZ;

 

Mehr Performance

Das Vertauschen von Zeilen und Spalten kann eine effiziente Datenverarbeitung fördern, vor allem dann, wenn durch diesen Vorgang JOINS mit anderen Tabellen möglich werden. Als Beispiel soll nachfolgend das Wetter dienen. In der Tabelle MESS_WERTE befinden sich die tatsächlich gemessenen Höchsttemperaturen der Städte Berlin, Hamburg und Köln an verschiedeneren Tagen. Die prognostizierten Höchsttemperaturen stehen in der Tabelle PROGNOSE. Ziel ist eine Gegenüberstellung der tatsächlichen Mess- und Prognosewerte.

Leider lassen sich dich Mess- und Prognosewerte nicht ohne Weiteres miteinander verknüpfen. Ein vorheriges UNPIVOT der Tabelle PROGNOSE löst das Problem jedoch.  Es sorgt dafür, dass beide Tabellen miteinander verknüpft werden können. Bei großen Datenmengen kann diese einen erheblichen Performancegewinn bringen.

Performance Optimierung mit Pivot

Fazit

Dieser Artikel zeigt, dass das Vertauschen von Zeilen und Spalten einen Beitrag zur Datenintegration leisten kann. Nutzer von Oracle und Microsoft sind leicht im Vorteil. Sie können mit PIVOT und UNPIVOT diese Aufgabe komfortabler lösen als Nutzer anderer Datenbanksysteme. Es geht aber auch mit ANSI-SQL und ohne zusätzliche Softwarewerkzeuge.

Leave a Comment

Ich akzeptiere die Datenschutzerklärung und stimme der Verarbeitung meiner Daten zu.