Daten sind das neue Öl

Das Zitat „the world’s most valuable resource is no lon­ger oil, but data“ (the eco­no­mist 2017) ist nach fünf Jah­ren immer noch aktu­ell. Daten zei­gen ein enor­mes Poten­tial in ihrer wei­te­ren Nut­zung, wie z.B. in Big Data Ana­ly­sen, Pre­dic­tive Main­ten­ance und zahl­rei­chen Appli­ka­tion im Bereich Machine Lear­ning. Zum ande­ren müs­sen Daten auf­wän­dige Pro­zesse durch­lau­fen, bevor sie erfolg­reich wei­ter­ver­ar­bei­tet wer­den kön­nen, wie zum Bei­spiel zu BI Reports, für Sta­tis­ti­ken und Data Science. 

Ein Data Ware­house oder eine ana­ly­ti­sche Platt­form in der Cloud oder on-premises legen hierzu für jedes Unter­neh­men den Grund­stein und sind essen­zi­ell für daten­ge­trie­bene Ana­ly­sen. Ziel ist es, einen dif­fe­ren­zier­ten Gesamt­über­blick der exis­tie­ren­den Daten im Unter­neh­men zu schaf­fen, der bei der Unter­neh­mens­pla­nung unter­stützt. Hierzu stellt ein Data Ware­house the­men­be­zo­gene, kon­so­li­dierte und per­sis­tente Daten zwecks unter­neh­mens­wei­ter Aus­wer­tun­gen und Ana­ly­sen bereit.

Die Schlüs­sel­rolle des ETL Prozesses

Der ETL Pro­zess spielt in der Bela­dung von Data Warehou­ses eine wich­tige Rolle. Er über­führt Roh­da­ten aus Quell­sys­te­men in das Ziel­sys­tem DWH. Er stellt einen Daten­trans­for­ma­ti­ons­pro­zess von Aus­gangs­da­ten bis hin zu dedi­zier­ten Anwen­der-Views dar, wel­cher immer nach fol­gen­den drei Arbeits­schrit­ten abläuft.

  1. Extrak­tion
  2. Trans­for­ma­tion
  3. Laden

Im ers­ten Schritt wer­den aus­ge­wählte Daten abge­zo­gen und in die soge­nannte Sta­ging Area gela­den. Im zwei­ten Schritt erfol­gen Trans­for­ma­tio­nen und Mani­pu­la­tio­nen der Daten: Anglei­chen von Daten­ty­pen und Daten­for­ma­ten, ent­fer­nen von Dupli­ka­ten und Durch­füh­rung von Aggre­ga­tio­nen und Berech­nun­gen. Je nach Anfor­de­rung wer­den in die­sem Schritt die Daten durch wei­tere Stamm­da­ten ange­rei­chert, nor­ma­li­siert und/ oder his­to­ri­siert. Im Lade-Pro­zess wer­den die Daten in das Data Ware­house gespeichert.

ETL Pro­zesse kön­nen sowohl mit Hilfe von ETL-Tools wie Tal­end, Infor­ma­tica Power­Cen­ter oder Matil­lion, als Modul­bau­steine zusam­men­ge­setzt wer­den (Gra­phi­cal User Inter­faces, GUIs), oder aber via SQL und Python in Skript­form pro­gram­miert wer­den. Dabei haben beide Umset­zungs­mög­lich­kei­ten ihre eige­nen Vor- und Nach­teile und Limitierungen.

Im Wei­te­ren wird die Pro­gram­mie­rung von ETL Stre­cken mit SQL und Python näher betrach­tet. Hierzu gibt es einen Ein­blick in beide Pro­gram­mier­spra­chen, inwie­weit Python und SQL in Data Ware­house Archi­tek­tu­ren zusam­men funk­tio­nie­ren, wel­che Auf­ga­ben Python über­neh­men kann und für wel­che Anwen­dun­gen SQL unver­zicht­bar ist.

SQL und Python

In den Top 10 Pro­gram­mier- und Skript­spra­chen fin­den sich sowohl Python als auch meh­rere SQL-Dia­lekte wie­der. Beide Spra­chen sind einsteigerfreundlich.

Wenn es um Daten­ban­ken geht, führt kein Weg an SQL vor­bei. SQL basiert auf rela­tio­na­ler Alge­bra und zeich­net sich durch eine ein­fa­che Syn­tax aus, die seman­tisch an die eng­li­sche Spra­che ange­lehnt ist. Die Stan­dar­di­sie­rung von SQL durch ISO und IEC ermög­licht platt­form­über­grei­fende Anwen­dun­gen zu vie­len Daten­ban­ken­sys­te­men. Eine SQL-Abfrage (Query) ruft struk­tu­rierte Daten aus einer rela­tio­na­len Daten­bank ab und stellt diese direkt dem User oder einer Appli­ka­tion zur Ver­fü­gung. Es exis­tie­ren ver­schie­dene Kate­go­rien von SQL-Befehlen:

  • Data Mani­pu­la­tion Lan­guage (DML) – Befehle zur Daten­ma­ni­pu­la­tion (Ändern, Ein­fü­gen, Löschen von Daten­sät­zen) und lesen­dem Zugriff
  • Data Defi­ni­tion Lan­guage (DDL) – Befehle zur Defi­ni­tion des Daten­bank­sche­mas (Erzeu­gen, Ändern, Löschen von Daten­bank­ta­bel­len, Defi­ni­tion von Pri­mär­schlüs­seln und Fremdschlüsseln)
  • Data Con­trol Lan­guage (DCL) – Befehle für die Rechteverwaltung

Bei kom­ple­xen Daten­ma­ni­pu­la­tio­nen und ‑trans­for­ma­tio­nen stößt SQL an seine Gren­zen. Sta­tis­ti­sche Tests, wie Regres­sio­nen oder Zeit­rei­hen Ana­ly­sen sind nur mit hohem Auf­wand oder Erwei­te­run­gen möglich.

Python ist eine gut les­bare und viel­sei­tig ein­setz­bare Pro­gram­mier­spra­che. Sie deckt sowohl die objekt­ori­en­tierte, aspekt­ori­en­tierte und funk­tio­nale Pro­gram­mie­rung ab und ist daher bei Hobby-Codern und IT-Pro­fes­sio­nals eta­bliert. In ver­schie­de­nen IT-Indi­ces zählt Python bereits zu den meist­ge­nutz­ten Pro­gram­mier­spra­chen. Die ver­schie­de­nen Libra­ries und Funk­tio­nen ermög­li­chen ein brei­tes Spek­trum an Appli­ka­tio­nen: mit Frame­works, wie Django und Flask kön­nen Web­ent­wick­lun­gen pro­gram­miert wer­den. Pan­das, Sci­kit-Learn, NumPy sind für Data Sci­en­tists essen­zi­elle Werk­zeuge der Daten­ana­lyse. Mit Mat­plot­lib oder Sea­born kön­nen Ergeb­nisse visua­li­siert wer­den. Sci­ence Fact: das Foto des Schwar­zen Loches ist mit Hilfe von Python Skrip­ten zusam­men­ge­setzt wor­den. Auch im Data Engi­nee­ring Bereich die­nen Python Skripte der Auto­ma­ti­sie­rung, bspw. in der Bewirt­schaf­tung eines Data Warehouses.

Ver­gleich SQL und Python

Für einen Ver­gleich der bei­den Pro­gram­mier­spra­chen lohnt es sich auch ver­schie­dene Archi­tek­tu­ren der Daten­hal­tung mit­ein­an­der zu ver­glei­chen. Inner­halb der letz­ten Jahre gab es einen Wan­del in der Archi­tek­tur der ana­ly­ti­schen Platt­for­men von on-premises Lösun­gen zu Cloud bzw. SaaS (Soft­ware as a Ser­vice) Lösun­gen. On-premises Struk­tu­ren basie­ren auf der loka­len Nut­zung von lizen­zier­ter Daten­bank-Soft­ware, die voll­stän­dig oder als Lizenz­mo­dell erwor­ben und in eige­ner Ver­ant­wor­tung genutzt wird. Die Daten­bank-Soft­ware läuft über eigene oder gemie­tete Hard­ware und Rechen­zen­tren. Cloud Ser­vices bie­ten auf das Unter­neh­men zuge­schnit­tene Lösun­gen als On-Demand und Zeit-Ver­träge an. Die unter­neh­mens­spe­zi­fi­schen Anpas­sun­gen (Kon­fi­gu­ra­tio­nen, APIs, etc.) wer­den im Rah­men des Dienst­leis­tungs­ver­tra­ges fest­ge­legt und rea­li­siert. Cloud Ser­vices zeich­nen sich durch ihre hohe Ska­lier­bar­keit in Spei­cher­ka­pa­zi­tät, Fle­xi­bi­li­tät und nied­rige Rechen­zei­ten aus.

On-Pre­mise

In on-premises Lösun­gen – Data Ware­house – wer­den pri­mär rela­tio­nale Daten­ban­ken­sys­teme genutzt und die Daten in struk­tu­rier­ter Form per­sis­tiert. SQL ist genau für Abfra­gen auf sol­che Daten kon­zi­piert. Daher wer­den ETL-Stre­cken in die­ser Daten­hal­tungs­struk­tur mit SQL pro­gram­miert. Es kön­nen dabei andere Spra­chen als Wrap­per der SQLs auf die Daten­bank genutzt wer­den, wie z.B. Python. Dar­über hin­aus bie­tet Python die Mög­lich­keit den Auto­ma­ti­sie­rungs­grad zu stei­gern. Für eine Über­füh­rung von DDLs ver­schie­de­ner SQL-Dia­lekte kön­nen Python Skripte für das auto­ma­ti­sierte Ein­le­sen, Über­set­zen und Anle­gen in die Ziel­da­ten­bank genutzt werden.

Cloud Ser­vices

In Cloud Struk­tu­ren ergän­zen Data Lakes das Data Ware­house. Data Lakes spei­chern Roh­da­ten ver­schie­de­ner For­men und Quel­len, wie PDF, JSON, Tabel­len oder Par­quet. Data Lakes besit­zen wie Data Warehou­ses ver­schie­dene Schich­ten zur Spei­che­rung, Ana­lyse und Bereit­stel­lung für Anwen­der. Für die Ana­ly­se­schicht haben sich u.a. Snow­flake, Ama­zon Reds­hift und dat­ab­ricks von Apa­che Spark eta­bliert. Das Ein­le­sen und Ver­ar­bei­ten der Daten fin­det auf Spark Clus­tern statt. An die­ser Stelle kommt SQL an seine Gren­zen und Python über­nimmt. Pyspark ist ein python­ba­sier­ter Frame­work für „dat­ab­ricks“, der es ermög­licht mit Python-Syn­tax Spark zu pro­gram­mie­ren. Es ist aller­dings auch mög­lich, dass Python und SQL in dat­ab­ricks zusam­men­ar­bei­ten. Pyspark liest struk­tu­rierte, semi-struk­tu­rierte und unstruk­tu­rierte Daten ein und regis­triert diese als Data­frame. Mit SparkSQL, einem SQL-Dia­lekt von Spark, ist es mög­lich mit gewohn­ten SQL-Befeh­len eine Query auf den Data­frame abzuschicken.

Fazit

Python und SQL kön­nen in ver­schie­de­nen daten­ana­ly­ti­schen Platt­for­men zusam­men funk­tio­nie­ren. Dabei schließt die Nut­zung der einen Spra­che nicht die andere aus.

SQL arbei­tet effi­zi­ent für Daten­ab­fra­gen auf struk­tu­rierte Daten, mit Aggre­ga­tio­nen, simp­len Berech­nun­gen und Tabel­len-Ver­knüp­fun­gen. Nimmt der Grad an Kom­ple­xi­tät jedoch zu, sinkt die Effi­zi­enz der SQL-Abfrage. Python ist open source und ermög­licht ein brei­tes Anwen­dungs­spek­trum. In der on-premises Welt kann Python als Wrap­per für SQL basierte ETL-Stre­cken genutzt wer­den. Wei­ter bie­tet Python die Mög­lich­keit in Daten­ban­ken Pro­zesse zu auto­ma­ti­sie­ren: DDLs ver­schie­de­ner SQL-Dia­lekte kön­nen mit Python Skrip­ten auto­ma­ti­siert über­setzt und in der Ziel­da­ten­bank ange­legt wer­den. In cloud­ba­sier­ten Data Lakes sticht Python durch die Ver­ar­bei­tung von unstruk­tu­rier­ten Daten her­vor. Die Ver­wen­dung von Python und SQL in der Cloud ver­ein­facht die Migra­tion von on-premises in die Cloud, da ETL-Stre­cken nicht auf­wän­dig von SQL in Pyspark über­setzt wer­den müssen.