Daten sind das neue Öl
Das Zitat „the world’s most valuable resource is no longer oil, but data“ (the economist 2017) ist nach fünf Jahren immer noch aktuell. Daten zeigen ein enormes Potential in ihrer weiteren Nutzung, wie z.B. in Big Data Analysen, Predictive Maintenance und zahlreichen Applikation im Bereich Machine Learning. Zum anderen müssen Daten aufwändige Prozesse durchlaufen, bevor sie erfolgreich weiterverarbeitet werden können, wie zum Beispiel zu BI Reports, für Statistiken und Data Science.
Ein Data Warehouse oder eine analytische Plattform in der Cloud oder on-premises legen hierzu für jedes Unternehmen den Grundstein und sind essenziell für datengetriebene Analysen. Ziel ist es, einen differenzierten Gesamtüberblick der existierenden Daten im Unternehmen zu schaffen, der bei der Unternehmensplanung unterstützt. Hierzu stellt ein Data Warehouse themenbezogene, konsolidierte und persistente Daten zwecks unternehmensweiter Auswertungen und Analysen bereit.
Die Schlüsselrolle des ETL Prozesses
Der ETL Prozess spielt in der Beladung von Data Warehouses eine wichtige Rolle. Er überführt Rohdaten aus Quellsystemen in das Zielsystem DWH. Er stellt einen Datentransformationsprozess von Ausgangsdaten bis hin zu dedizierten Anwender-Views dar, welcher immer nach folgenden drei Arbeitsschritten abläuft.
- Extraktion
- Transformation
- Laden
Im ersten Schritt werden ausgewählte Daten abgezogen und in die sogenannte Staging Area geladen. Im zweiten Schritt erfolgen Transformationen und Manipulationen der Daten: Angleichen von Datentypen und Datenformaten, entfernen von Duplikaten und Durchführung von Aggregationen und Berechnungen. Je nach Anforderung werden in diesem Schritt die Daten durch weitere Stammdaten angereichert, normalisiert und/ oder historisiert. Im Lade-Prozess werden die Daten in das Data Warehouse gespeichert.
ETL Prozesse können sowohl mit Hilfe von ETL-Tools wie Talend, Informatica PowerCenter oder Matillion, als Modulbausteine zusammengesetzt werden (Graphical User Interfaces, GUIs), oder aber via SQL und Python in Skriptform programmiert werden. Dabei haben beide Umsetzungsmöglichkeiten ihre eigenen Vor- und Nachteile und Limitierungen.
Im Weiteren wird die Programmierung von ETL Strecken mit SQL und Python näher betrachtet. Hierzu gibt es einen Einblick in beide Programmiersprachen, inwieweit Python und SQL in Data Warehouse Architekturen zusammen funktionieren, welche Aufgaben Python übernehmen kann und für welche Anwendungen SQL unverzichtbar ist.
SQL und Python
In den Top 10 Programmier- und Skriptsprachen finden sich sowohl Python als auch mehrere SQL-Dialekte wieder. Beide Sprachen sind einsteigerfreundlich.
Wenn es um Datenbanken geht, führt kein Weg an SQL vorbei. SQL basiert auf relationaler Algebra und zeichnet sich durch eine einfache Syntax aus, die semantisch an die englische Sprache angelehnt ist. Die Standardisierung von SQL durch ISO und IEC ermöglicht plattformübergreifende Anwendungen zu vielen Datenbankensystemen. Eine SQL-Abfrage (Query) ruft strukturierte Daten aus einer relationalen Datenbank ab und stellt diese direkt dem User oder einer Applikation zur Verfügung. Es existieren verschiedene Kategorien von SQL-Befehlen:
- Data Manipulation Language (DML) – Befehle zur Datenmanipulation (Ändern, Einfügen, Löschen von Datensätzen) und lesendem Zugriff
- Data Definition Language (DDL) – Befehle zur Definition des Datenbankschemas (Erzeugen, Ändern, Löschen von Datenbanktabellen, Definition von Primärschlüsseln und Fremdschlüsseln)
- Data Control Language (DCL) – Befehle für die Rechteverwaltung
Bei komplexen Datenmanipulationen und ‑transformationen stößt SQL an seine Grenzen. Statistische Tests, wie Regressionen oder Zeitreihen Analysen sind nur mit hohem Aufwand oder Erweiterungen möglich.
Python ist eine gut lesbare und vielseitig einsetzbare Programmiersprache. Sie deckt sowohl die objektorientierte, aspektorientierte und funktionale Programmierung ab und ist daher bei Hobby-Codern und IT-Professionals etabliert. In verschiedenen IT-Indices zählt Python bereits zu den meistgenutzten Programmiersprachen. Die verschiedenen Libraries und Funktionen ermöglichen ein breites Spektrum an Applikationen: mit Frameworks, wie Django und Flask können Webentwicklungen programmiert werden. Pandas, Scikit-Learn, NumPy sind für Data Scientists essenzielle Werkzeuge der Datenanalyse. Mit Matplotlib oder Seaborn können Ergebnisse visualisiert werden. Science Fact: das Foto des Schwarzen Loches ist mit Hilfe von Python Skripten zusammengesetzt worden. Auch im Data Engineering Bereich dienen Python Skripte der Automatisierung, bspw. in der Bewirtschaftung eines Data Warehouses.
Vergleich SQL und Python
Für einen Vergleich der beiden Programmiersprachen lohnt es sich auch verschiedene Architekturen der Datenhaltung miteinander zu vergleichen. Innerhalb der letzten Jahre gab es einen Wandel in der Architektur der analytischen Plattformen von on-premises Lösungen zu Cloud bzw. SaaS (Software as a Service) Lösungen. On-premises Strukturen basieren auf der lokalen Nutzung von lizenzierter Datenbank-Software, die vollständig oder als Lizenzmodell erworben und in eigener Verantwortung genutzt wird. Die Datenbank-Software läuft über eigene oder gemietete Hardware und Rechenzentren. Cloud Services bieten auf das Unternehmen zugeschnittene Lösungen als On-Demand und Zeit-Verträge an. Die unternehmensspezifischen Anpassungen (Konfigurationen, APIs, etc.) werden im Rahmen des Dienstleistungsvertrages festgelegt und realisiert. Cloud Services zeichnen sich durch ihre hohe Skalierbarkeit in Speicherkapazität, Flexibilität und niedrige Rechenzeiten aus.
On-Premise
In on-premises Lösungen – Data Warehouse – werden primär relationale Datenbankensysteme genutzt und die Daten in strukturierter Form persistiert. SQL ist genau für Abfragen auf solche Daten konzipiert. Daher werden ETL-Strecken in dieser Datenhaltungsstruktur mit SQL programmiert. Es können dabei andere Sprachen als Wrapper der SQLs auf die Datenbank genutzt werden, wie z.B. Python. Darüber hinaus bietet Python die Möglichkeit den Automatisierungsgrad zu steigern. Für eine Überführung von DDLs verschiedener SQL-Dialekte können Python Skripte für das automatisierte Einlesen, Übersetzen und Anlegen in die Zieldatenbank genutzt werden.
Cloud Services
In Cloud Strukturen ergänzen Data Lakes das Data Warehouse. Data Lakes speichern Rohdaten verschiedener Formen und Quellen, wie PDF, JSON, Tabellen oder Parquet. Data Lakes besitzen wie Data Warehouses verschiedene Schichten zur Speicherung, Analyse und Bereitstellung für Anwender. Für die Analyseschicht haben sich u.a. Snowflake, Amazon Redshift und databricks von Apache Spark etabliert. Das Einlesen und Verarbeiten der Daten findet auf Spark Clustern statt. An dieser Stelle kommt SQL an seine Grenzen und Python übernimmt. Pyspark ist ein pythonbasierter Framework für „databricks“, der es ermöglicht mit Python-Syntax Spark zu programmieren. Es ist allerdings auch möglich, dass Python und SQL in databricks zusammenarbeiten. Pyspark liest strukturierte, semi-strukturierte und unstrukturierte Daten ein und registriert diese als Dataframe. Mit SparkSQL, einem SQL-Dialekt von Spark, ist es möglich mit gewohnten SQL-Befehlen eine Query auf den Dataframe abzuschicken.
Fazit
Python und SQL können in verschiedenen datenanalytischen Plattformen zusammen funktionieren. Dabei schließt die Nutzung der einen Sprache nicht die andere aus.
SQL arbeitet effizient für Datenabfragen auf strukturierte Daten, mit Aggregationen, simplen Berechnungen und Tabellen-Verknüpfungen. Nimmt der Grad an Komplexität jedoch zu, sinkt die Effizienz der SQL-Abfrage. Python ist open source und ermöglicht ein breites Anwendungsspektrum. In der on-premises Welt kann Python als Wrapper für SQL basierte ETL-Strecken genutzt werden. Weiter bietet Python die Möglichkeit in Datenbanken Prozesse zu automatisieren: DDLs verschiedener SQL-Dialekte können mit Python Skripten automatisiert übersetzt und in der Zieldatenbank angelegt werden. In cloudbasierten Data Lakes sticht Python durch die Verarbeitung von unstrukturierten Daten hervor. Die Verwendung von Python und SQL in der Cloud vereinfacht die Migration von on-premises in die Cloud, da ETL-Strecken nicht aufwändig von SQL in Pyspark übersetzt werden müssen.