Python per gli ingegneri dei dati

Python per data engineer

Tecniche avanzate di ETL per principianti

Foto di Boitumelo su Unsplash

In questa storia parlerò delle tecniche avanzate di ingegneria dei dati in Python. Non c’è dubbio che Python sia il linguaggio di programmazione più popolare per i dati. Durante i miei quasi dodici anni di carriera nell’ingegneria dei dati, mi sono trovato di fronte a diverse situazioni in cui il codice aveva problemi. Questa storia è un breve riassunto di come li ho risolti e imparato a scrivere un codice migliore. Mostrerò alcune tecniche che rendono il nostro ETL più veloce e aiutano a migliorare le prestazioni del nostro codice.

Comprensioni di liste

Immagina di scorrere una lista di tabelle. Tipicamente, faremmo così:

data_pipelines = ['p1', 'p2', 'p3']
processed_tables = []
for table in data_pipelines:
    processed_tables.append(table)

Ma invece, potremmo utilizzare delle comprensioni di liste. Non solo sono più veloci, ma riducono anche il codice, rendendolo più conciso:

processed_tables = [table for table in data_pipelines]

Ad esempio, scorrere un file super grande con dati da trasformare (ETL) per ogni riga non è mai stato così facile:

def etl(item):
    # Effettua alcune trasformazioni dei dati qui
    return json.dumps(item)

data = u"\n".join(etl(item) for item in json_data)

Le comprensioni di liste sono estremamente utili per l’elaborazione ETL di file di dati di grandi dimensioni. Immagina un file di dati che dobbiamo trasformare in un formato delimitato da newline. Prova ad eseguire questo esempio nel tuo ambiente Python:

import io
import json

def etl(item):
    return json.dumps(item)

# File di testo caricato come un blob
blob = """[{"id":"1","first_name":"John"},{"id":"2","first_name":"Mary"}]"""
json_data = json.loads(blob)
data_str = u"\n".join(etl(item) for item in json_data)
print(data_str)

# Questo file di dati è pronto per BigQuery come JSON delimitato da newline
data_file = io.BytesIO(data_str.encode())
print(data_file)

L’output sarà un JSON delimitato da newline. Questo è un formato standard per i dati nel data warehouse BigQuery ed è pronto per essere caricato nella tabella:

{"id": "1", "first_name": "John"}
{"id": "2", "first_name": "Mary"}
<_io.BytesIO object at 0x10c732430>

Generatori