7 Python ETL eszköz adatmérnököknek kódpéldákkal

Az adatfolyamatok (ETL: Extract, Transform, Load) építése az adatmérnökök egyik legfontosabb feladata. Bár tisztán Python és Pandas használatával is lehetséges, a specializált eszközök jobban kezelik az ütemezést, hibakezelést és skálázhatóságot. A választás azonban nehéz lehet, mert egyes eszközök túl bonyolultak, mások pedig korlátozottak. Ez a cikk hét olyan Python alapú ETL eszközt mutat be, amelyek aktív közösséggel rendelkeznek és éles környezetben is megállják a helyüket. A cikkben a bemutatás mellett, minta kódokat és a mélyebb tanuláshoz szükséges forrásokat is elérhetővé teszünk.

1. Apache Airflow, a munkafolyamatok karmestere

Amikor a szkriptek már túl bonyolultak, szükség van egy karmesterre. Az Apache Airflow az iparági szabvány a munkafolyamatok programozott létrehozására és felügyeletére.

Főbb jellemzői:

  • A folyamatokat irányított aciklikus gráfként (DAG) definiálhatod Python kódban.
  • Erős webes felületet biztosít a folyamatok figyelésére és a hibák keresésére.
  • Rengeteg beépített operátorral rendelkezik adatbázisokhoz és API-khoz.

Így néz ki egy egyszerű irányított gráf vagyis DAG definíciója:

from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime

def feladat():
    print("Adatok feldolgozása...")

with DAG('elso_dag', start_date=datetime(2025, 1, 1)) as dag:
    task1 = PythonOperator(
        task_id='feldolgozas',
        python_callable=feladat
    )

Ha bonyolult függőségeket kell kezelned akkor ez a legjobb választás.

További információ: Airflow hivatalos dokumentáció

2. Luigi, az egyszerűség ereje

Ha az Airflow túl soknak tűnik, a Luigi jó alternatíva lehet. Ezt a Spotify fejlesztette ki kifejezetten hosszú futású kötegelt (batch) folyamatokhoz.

Miért érdemes használni:

  • Osztályalapú megközelítést alkalmaz, ahol minden feladat egy Python osztály.
  • Automatikusan kezeli a függőségeket.
  • Kisebb csapatok számára könnyebben fenntartható.

A kód felépítése objektumorientált szemléletet követ:

import luigi

class AdatLetoltes(luigi.Task):
    def output(self):
        return luigi.LocalTarget('adat.csv')

    def run(self):
        with self.output().open('w') as f:
            f.write('id,nev\n1,Teszt')

if __name__ == '__main__':
    luigi.run()

Kisebb csapatoknak ideális a könnyű karbantarthatóság miatt.

További információ: Luigi GitHub oldal

3. Prefect, a modern megközelítés

A Prefect a modern adatmérnökök választása. Könnyebb megtanulni, mint az Airflow-t, de képes kezelni a nagy méretű rendszereket is.

Előnyei:

  • Szabványos Python függvényeket használ dekorátorokkal.
  • Kiváló hibakezelést és automatikus újrapróbálkozást kínál.
  • Felhő alapú és saját szerveres verziója is van.

Nézd meg mennyire letisztult a szintaxis:

from prefect import flow, task

@task
def adat_kinyeres():
    return [1, 2, 3]

@task
def transzformacio(adat):
    return [x * 2 for x in adat]

@flow
def etl_folyamat():
    nyers = adat_kinyeres()
    transzformacio(nyers)

if __name__ == "__main__":
    etl_folyamat()

Kiváló hibakezelést és automatikus újrapróbálkozást kínál külön konfiguráció nélkül.

További információ: Prefect dokumentáció

4. Dagster, adatközpontú tervezés

A Dagster nem feladatokra, hanem adatvagyonra (data assets) fókuszál. A deklaratív megközelítés miatt könnyebb átlátni az adat útját a rendszerben.

Kiemelt funkciók:

  • Szoftverdefiniált eszközök (Software-defined Assets) használata.
  • Beépített tesztelési eszközök és lokális fejlesztői környezet.
  • Világos adatkapcsolati térkép (data lineage).

A kód így garantálja a típusbiztonságot:

from dagster import asset

@asset
def nyers_adatok():
    return [1, 2, 3]

@asset
def feldolgozott_adatok(nyers_adatok):
    return [x + 1 for x in nyers_adatok]

A beépített tesztelési eszközök miatt nagyon stabil rendszereket építhetsz vele.

További információ: Dagster.io

5. PySpark, ha nagyban kell játszani

A hatalmas adathalmazok feldolgozásához elosztott rendszer kell. A PySpark az Apache Spark Python felülete, amely lehetővé teszi a klasztereken történő számítást.

Miért elengedhetetlen:

  • Automatikusan elosztja a feladatokat több gép között.
  • Magas szintű API-t nyújt az adattranszformációkhoz.
  • Támogatja a kötegelt és a valós idejű (streaming) feldolgozást is.

Így olvass be és szűrj gigabájtnyi adatot:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("ETL").getOrCreate()

df = spark.read.csv("nagy_adat.csv", header=True)
szurt_df = df.filter(df['ar'] > 1000)

szurt_df.show()

Ez az eszköz elengedhetetlen a Big Data világában.

További információ: PySpark útmutató

6. Mage AI, a notebookok utódja

A Mage AI ötvözi a notebookok egyszerűségét a gyártási rendszerek stabilitásával. Ideális azoknak, akik gyorsan akarnak prototípusból éles rendszert építeni.

Erősségei:

  • Interaktív fejlesztői felület.
  • Beépített blokkok az adatforrásokhoz és célállomásokhoz.
  • Átlátható felület a hibakereséshez.

Egy tipikus adatbetöltő blokk így néz ki:

import pandas as pd

if 'data_loader' not in globals():
    from mage_ai.data_preparation.decorators import data_loader

@data_loader
def load_data(*args, **kwargs):
    url = 'https://pelda.hu/adat.csv'
    return pd.read_csv(url)

Gyors prototípusok építésére ez a leggyorsabb eszköz.

További információ: Mage AI dokumentáció

7. Kedro, szoftvermérnöki alapok

A Kedro segít rendszert vinni a káoszba. Ez a keretrendszer szoftvermérnöki elveket alkalmaz az adatfolyamatokra, így a kód fenntartható és tesztelhető marad.

Jellemzők:

  • Szabványosított projektstruktúrát kényszerít ki.
  • Beépített adatkatalógussal kezeli a fájlútvonalakat.
  • Jól integrálható az Airflow-val vagy Prefect-tel.

A node és a pipeline kapcsolata így épül fel:

from kedro.pipeline import node, pipeline

def tisztitas(adat):
    return adat.dropna()

def create_pipeline(**kwargs):
    return pipeline([
        node(
            func=tisztitas,
            inputs="nyers_adat",
            outputs="tiszta_adat",
            name="tisztito_node"
        )
    ])

Nagyvállalati környezetben ez a struktúra aranyat ér.

További információ: Kedro dokumentáció

Összehasonlító táblázat

A táblázat segít a gyors döntésben a feladat típusa alapján.

EszközFő erősségKinek ajánlott
AirflowÜtemezésNagy csapatoknak
LuigiFüggőségekEgyszerűbb projektekhez
PrefectModern szintaxisPython fejlesztőknek
DagsterAdatbiztonságAkiknek a minőség a fő
PySparkSkálázhatóságBig Data mérnököknek
Mage AIGyorsaságKezdőknek és startupoknak
KedroStruktúraSzoftvermérnököknek

Válassz a feladatodhoz illő Python ETL eszköz típust. A legjobb tanulási módszer ha a fenti kódokat lefuttatod a saját gépeden. Kezdd el még ma!

Kérjük, ellenőrizd a mező formátumát, és próbáld újra.
Köszönjük, hogy feliratkoztál.

vagyunk.hu hírlevél

Hozzászólás

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük