ELT, ETL en datapijplijnen: do it yourself geautomatiseerd data inladen

Mijn naam is Don en in mijn werk voor Young Mavericks combineer ik mijn kennis als Data Engineer met mijn expertise in Data Science. In de praktijk komt dit erop neer dat ik repetitieve taken automatiseer, inzichten uit data genereer en een coördinerende en adviserende rol heb binnen projecten. Ik geniet het meest van het creatieve proces dat nodig is om problemen op te lossen met behulp van data.

In de loop der tijd ben ik erachter gekomen dat bedrijven vaak tegen vergelijkbare problemen oplopen bij het verzamelen en verplaatsen van data. Zo kan het genereren en opslaan van waardevolle gegevens voor een bedrijf geen probleem zijn, maar heeft hetzelfde bedrijf geen toegankelijk overzicht van welke data waar wordt opgeslagen. Ik werkte eens bij een bedrijf waar ik naar de ene afdeling moest gaan om de data te interpreteren en bij een andere afdeling terecht moest om erachter te komen waar de gegevens stonden opgeslagen. Zo’n inefficiënt organisatiesysteem is natuurlijk tijdrovend.

Een ander veelvoorkomend probleem is dat bedrijven niet optimaal gebruik maken van hun data bij het nemen van besluiten. Vaak mist de deskundigheid, waardoor de interpretatie van gegevens onjuist is of in z’n geheel ontbreekt bij bedrijfsgerelateerde beslissingen. Denk hierbij aan een supermarkt die op gevoel of impulsief voorraden of producten inkoopt in plaats van de verkoopcijfers te analyseren. Daarnaast slaan veel bedrijven hun gegevens handmatig op in hun systeem en schonen ze dit slechts periodiek op voor gebruik. Deze passieve methode kost relatief veel tijd, kan verwarrend zijn voor werknemers en is zeer foutgevoelig. Bijvoorbeeld: het handmatig importeren van wekelijkse verkoopcijfers en deze vervolgens – ook handmatig – bewerken om er visualisaties mee te maken in Excel. 

In de rest van dit artikel deel ik werkwijzen die bovenstaande en andere problemen helpen voorkomen. Mocht je er tijdens het lezen achter komen dat je een bepaald concept al onder de knie hebt, ga dan gerust verder naar het volgende onderwerp.

Achtergrondgegevens inladen: ELT

Laten we, voordat we in de oplossingen duiken, eerst kijken naar de specifieke stappen voor het inladen van data. In het algemeen kan het proces worden onderverdeeld in drie verschillende stappen: Extract, Load en Transform (ELT). Extract omvat het proces waarbij de doelgegevens uit de bron worden geëxporteerd. Load verwijst naar het proces waarbij de gegevens uit de vorige stap worden opgeslagen in jouw eigen systeem. Transform is het proces waarin de gegevens worden opgeschoond en getransformeerd naar een vorm die bruikbaar is voor de beoogde processen. In de rest van dit artikel zal dit stappenplan worden afgekort met ‘ELT’. Als jij al weet wat dit proces precies inhoudt, ga dan gerust verder naar de volgende sectie.

Tijdens de eerste stap, Extract, haal je de data binnen die je wilt gebruiken uit de bron. Dit betekent meestal dat de API van die dienst periodiek wordt aangeroepen om de data op te halen. De opgehaalde gegevens zijn meestal semigestructureerd of ongestructureerd en bruikbaar voor de beoogde analyse. Gestructureerde data is georganiseerd volgens een vooraf bepaald (pre-defined) schema, zoals in een Excel-sheet. Semigestructureerde data volgt een paar standaard stijlregels, maar de data kan binnen deze regels inconsistent worden opgeslagen – zoals in een JSON-bestand. Ongestructureerde data heeft geen standaard stijlregels waarna deze wordt opgeslagen – denk aan een social media-bericht (met tekst, foto’s, links, enz.). 

Stap twee, Load, omvat het proces waarbinnen de data uit de Extract-stap wordt opgeslagen, zonder enige transformatie van de gegevens. We noemen de opslag hiervan een Data Lake. Grote hoeveelheden data wordt in een Data Lake opgeslagen volgens een platte structuur. Dit is vergelijkbaar met het systeem op je eigen computer (‘Verkenner’ of ‘Finder’), maar met meer vrijheid om de opslaglocatie zelf te kiezen. Dit kan bij een cloud-dienst zijn of op een lokale server. Vergeet hierbij niet om de data een unieke ID te geven, zodat het gemakkelijk teruggevonden kan worden. De laatste stap, Transformeren, is het proces waarbij de opgeslagen data uit het Data Lake wordt geladen en er transformaties op worden toegepast om deze bruikbaar te maken voor analyse. Deze stap staat enigszins los van Extract en Load omdat de voorgaande stappen meestal één keer per dataset worden opgezet, waarna deze periodiek de nieuwe data binnenhalen. De Transform-stap vindt echter alleen plaats als er iets met de data gedaan moet worden. Daarom is het heel goed mogelijk dat dezelfde data meerdere Transform-processen ondergaat of dat meerdere datasets uit het Data Lake door één en dezelfde Transform-stap gaan.

Datagedreven cultuur

Het opzetten van een data-driven culture stelt een bedrijf in staat diens datapijplijn op de meest optimale manier te gebruiken. Dit houdt het volgende in:

Allereerst worden alle beslissingen binnen het bedrijf genomen op basis van inzichten die gegenereerd worden uit de data die binnen het bedrijf beschikbaar is. In een niet-datagedreven cultuur worden beslissingen vaak gebaseerd op ervaringen uit het verleden. Het nadeel hiervan is dat opkomende trends in de markt worden gemist en potentiële gaten of kansen niet of niet op tijd worden gezien. Door besluitvormingen te baseren op data worden patronen zichtbaar waarop kan worden ingespeeld.Ten tweede moeten alle bedrijfsprocessen volledig worden gedocumenteerd. Dit maakt het gemakkelijk om precies te achterhalen waarom en hoe bepaalde beslissingen zijn genomen. Bovendien is het mogelijk de data en bijbehorende inzichten opnieuw te genereren. Dit vermindert het black box-probleem, waarbij de bron van beslissingen of inzichten uiteindelijk onduidelijk wordt. Tot slot krijgen de klanten van bedrijven toegang tot datagedreven inzichten over hun eigen profiel. Dit geeft ook hen de tools om datagedreven besluiten te nemen.

ELT versus ETL en datapijplijnen

De hierboven besproken methode voor het inladen van gegevens vormt een goede basis voor een datagedreven cultuur. Om als bedrijf datagedreven te zijn moet de data namelijk openlijk toegankelijk en bruikbaar zijn voor de medewerkers. De belangrijkste methoden om data binnen het bedrijf in te laden zijn ELT (Extract, Load, Transform) en ETL (Extract, Transform, Load). Bij ETL wordt – in tegenstelling tot ELT – de data eerst getransformeerd en vervolgens opgeslagen in een vooraf gedefinieerd format; bij ELT wordt de data eerst in een ruwe vorm opgeslagen. 

Is de ene methode beter dan de andere?

Het voordeel van ETL ten opzichte van ELT is dat er minder vreemde waarden in de data te vinden zijn en dat de gegevens gemakkelijker te interpreteren zijn. De grootste valkuil van deze methode is echter dat het veel tijd kost voordat de gegevens in het systeem kunnen worden opgeslagen. Bovendien kan het voorkomen dat er op een bepaald moment aanvullende data nodig is uit een bron met een corrupte link, waarbij geen geschiedenis is opgebouwd vanaf het moment van toevoegen.

ELT heeft als voordeel dat de data in de meest ruwe vorm in het systeem wordt opgeslagen. Dit geeft medewerkers de vrijheid om vanuit het Data Lake hun eigen dataset samen te stellen en hier hun eigen transformaties op toe te passen. De grootste valkuil van deze methode is het kwijtraken van het overzicht van de data en het risico op dat alle Transform-processen verloren gaan.

Wat de beste methode is, hangt af van de situatie. Hoewel ELT in de meeste situaties de voorkeur heeft, kunnen sommige projecten het best worden uitgevoerd met ETL, of een combinatie van beide. Om deze reden is het beter een datapijplijn te bouwen die voor elke situatie de beste stappen kiest. Kortom: de beste methode is om geen universele methode toe te passen, maar per databron de meest optimale stappen te bepalen.

Tools voor de datapijplijn

Laten we het nu in meer detail hebben over de datapijplijnen en handige tools om deze te ontwikkelen. Mocht je geen interesse hebben in details over datapijplijnen, ga dan verder met het lezen van de conclusie van dit artikel. Voor de liefhebber heb ik hieronder een overzicht gemaakt van tools die volgens ons goede keuzes zijn – en de concepten en motivaties hierachter. 

Voor het bouwen van datapijplijnen maken wij gebruik van Python, SQL en DBT. DBT (Data Build Tool) stelt je in staat datatransformaties uit te voeren door enkel SELECT-statements te schrijven. Het is een soort SQL-vereenvoudiging. Als de benodigde data al in een cloud database staat, is het handiger SQL en DBT te gebruiken. SQL voert de operaties namelijk rechtstreeks uit op de database. In feite kan de database engine SQL-queries zeer goed optimaliseren, wat kan resulteren in een efficiëntere operatie dan een Python-implementatie. Bovendien zijn SQL-queries gemakkelijker leesbaar dan Python-code voor de meeste medewerkers bij klantbedrijven.

Het voordeel van DBT ten opzichte van SQL is dat werknemers enkel SELECT-statements hoeven te schrijven, welke vervolgens door DBT worden vertaald naar volledige SQL-statements. Zo kunnen werknemers dezelfde optimalisatieresultaten bereiken zonder geavanceerde SQL-kennis.

Python heeft de voorkeur wanneer de data via een API moeten worden opgevraagd en niet op een gestructureerde manier is opgeslagen. Python kan ook worden gebruikt om de gegevens in een cloud database te laden, om vervolgens verdere transformaties uit te voeren met SQL of DBT. Overweeg daarnaast het gebruik van Python als je datavisualisaties wilt maken en meer geavanceerde Machine Learning-stappen wilt uitvoeren met als doel inzichten uit de data vergaren.

Data versioning is een goede manier om wijzigingen in data bij te houden en heeft als bijkomend voordeel dat je gemakkelijk terug kunt keren naar een eerdere versie van de gegevens. Dit kan wenselijk zijn als er onverhoopt fouten zijn in de data of wanneer bepaalde datapunten uit het systeem zijn verwijderd. Ook zijn transformatiestappen uit het verleden met data versioning reproduceerbaar met de vorige versies van de getransformeerde gegevens. Dit kan helpen bepaalde gegenereerde inzichten te valideren. Een goede implementatie van data versioning is DVC – een open-source tool die veel integratiemogelijkheden biedt met andere opslagdiensten, zoals cloud databases, cloud storages en on-premise dataopslag. Wij gebruiken een ander hulpmiddel, een Scheduler, om de datapijplijn periodiek uit te voeren. Het voordeel van het runnen van de datapijplijn volgens een bepaald schema is dat deze niet meer handmatig ingeschakeld hoeft te worden, wat veel tijd bespaart. Er hoeft alleen ingegrepen te worden als er een fout optreedt die de Scheduler niet zelf kan oplossen – verder zijn er geen handmatige acties vereist. Bovendien biedt de Scheduler een gestructureerde monitoring – een soort bewakingsstructuur. Hiermee kan de status van alle datapijplijnen in de gaten worden gehouden en snel worden ingegrepen als dat nodig is – alles vanuit één centrale tooling. Apache Airflow en Prefect zijn goede Scheduler-implementaties. Apache Airflow biedt meer mogelijkheden dan Prefect, maar Prefect is eenvoudiger te implementeren en levert beter leesbare code op.

Conclusie

We hebben het concept van datapijplijnen geïntroduceerd om problemen te voorkomen en aan te pakken die kunnen ontstaan rond het opslaan en gebruik van data. De meeste stappen met betrekking tot het laden en gebruiken van data kunnen worden onderverdeeld in drie secties: Extract, waarbij de benodigde data wordt binnengehaald; Load, waarin de benodigde data wordt geladen in een lokaal data-opslagsysteem; en Transform, waarbinnen de benodigde data wordt getransformeerd voor analyse. 

De invoering van een datagedreven cultuur binnen ondernemingen zorgt ervoor dat de beschikbare data optimaal wordt benut. Hierbij wordt de bedrijfsbesluitvoering gebaseerd op data – en wordt deze data aangeboden als product aan eindgebruikers. 

De meest optimale manier om data te laden en gebruiken hangt af van de betreffende dataset en waar je de gegevens voor wilt gebruiken. Alle stappen samen vormen de datapijplijn. Tot slot zijn er handige tools aan bod gekomen voor het implementeren van een datapijplijn. In het volgende deel van dit artikel zal ik een datapijplijn-implementatie uitvoeren aan de hand van een stappenplan, welke ik vervolgens implementeer in een werkende Python-code. 

Veel succes met het geautomatiseerd inladen van je data!

ELT, ETL en datapijplijnen: do it yourself geautomatiseerd data inladen

Mijn naam is Don en in mijn werk voor Young Mavericks combineer ik mijn kennis als Data Engineer met mijn expertise in Data Science. In de praktijk komt dit erop neer dat ik repetitieve taken automatiseer, inzichten uit data genereer en een coördinerende en adviserende rol heb binnen projecten. Ik geniet het meest van het creatieve proces dat nodig is om problemen op te lossen met behulp van data.

Lees meer

Datapijplijn implementeren: Toepassen van het datapijplijn-concept

Deze handleiding bouwt voort op het ‘ELT, ETL en datapijplijnen’- artikel, waarin veelvoorkomende problemen van bedrijven bij het opslaan en gebruik van data worden besproken. Als antwoord op deze en meer problemen introduceerde Don – Data Scientist en Data Engineer bij Young Mavericks – het concept ‘datapijplijnen’, waarmee bedrijven een datagedreven cultuur kunnen creëren en zo optimaal mogelijk hun data kunnen inladen – en welke tools hiervan handig zijn. In dit artikel past Don de eerder behandelde concepten achter datapijplijnen toe bij het daadwerkelijk implementeren van een werkende datapijplijn. De complete code is te vinden op onze Gitlab.

Lees meer