Le attività di data engineering sono di fondamentale importanza perché forniscono dati puliti, affidabili e accessibili che alimentano tutti i processi basati sui dati, dai modelli di machine learning alle dashboard di business intelligence. Alcune attività chiave riguardano la creazione e la manutenzione di pipeline e architetture di dati, la garanzia della qualità e della governance dei dati e l’ottimizzazione dei sistemi in termini di prestazioni e scalabilità per supportare gli obiettivi aziendali.
Questo secondo articolo della nostra serie Databricks & KNIME approfondisce il modo in cui le due piattaforme semplificano le attività di data engineering, come la pulizia, l’unione e la trasformazione dei dati su larga scala, eliminando i silos e ottimizzando le pipeline con flussi di lavoro intuitivi e low-code.
Dalla BI alla GenAI: il percorso finora
Nell’ambito di una serie di quattro blog, stiamo esaminando i modi in cui KNIME e Databricks si integrano per supportare ogni fase del ciclo di vita dei dati e dell’IA. Nelle sezioni precedenti abbiamo trattato gli aspetti fondamentali di:
• Business Intelligence. Abbiamo mostrato come KNIME si collega in modo sicuro a Databricks, offrendo agli analisti la possibilità di interrogare le tabelle Databricks, sfogliare Unity Catalog ed eseguire analisi direttamente sulla piattaforma, garantendo una governance adeguata dei dati.
Ora, in questa seconda fase, partiamo dalle basi della BI per esplorare come i data engineer, grazie all’integrazione KNIME – Databricks, possono combinare la governance e la scalabilità dei dati di Databricks con le funzionalità no-code di KNIME, per creare, automatizzare e orchestrare pipeline ETL ed ELT.
Estrazione dei dati in KNIME
KNIME eccelle nell’estrazione di dati grezzi da diverse fonti, tra cui:
• File system e archiviazione. KNIME supporta file locali o remoti (ad esempio HDFS, Amazon S3, Azure Data Lake Storage Gen2, Google Cloud Storage) in formati strutturati (CSV, Parquet), semi-strutturati (JSON, XML) o non strutturati (testo, immagini, audio). KNIME è particolarmente utile per accedere ai dati on-premise non direttamente disponibili per i notebook Databricks.
• Database. Estrae dati transazionali da database OLTP (relazionali o NoSQL) progettati per l’elaborazione in tempo reale, fungendo da fonti di dati grezzi per le pipeline ETL/ELT.
• Fonti di dati esterne e servizi web. Accede ai dati tramite API REST o web scraping, con KNIME che offre nodi per richieste REST, web scraping e wrapper API per sistemi come Salesforce.
Trasformazione dei dati in KNIME
La trasformazione è un passaggio fondamentale e KNIME fornisce opzioni no-code/low-code sia per i flussi di lavoro ETL che ELT, a seconda di dove avvengono le trasformazioni:
• ETL (trasformazioni locali): utilizza nodi KNIME nativi per trasformare i dati in locale.
• ELT (trasformazioni Databricks): sfruttate la potenza di calcolo di Databricks (SQL Warehouse o cluster Spark) per trasformare i dati in remoto, senza che debbano uscire dall’ambiente Databricks.
Le tecniche di trasformazione comuni includono:
• Blending dei dati: combinare dati provenienti da più fonti (cloud o locali) utilizzando nodi come Concatenate o Joiner.
• Standardizzazione: garantire la coerenza sostituendo i valori (ad esempio, standardizzando i nomi dei paesi) o convertendo i formati (ad esempio, da testo a data e ora).
• Gestione dei valori mancanti: rileva e risolvi le problematiche relative a valori mancanti sostituendo i valori, filtrando le righe ridondanti o generando avvisi.
• Deduplicazione: rimuovere i record duplicati per garantire accuratezza ed efficienza.
• Presentazione dei dati: rimodellare i dati in formati wide o long in base al caso d’uso, ottimizzando l’archiviazione o la flessibilità dello schema.
• Aggiunta delle date di acquisizione: includere timestamp per tracciare l’acquisizione dei dati.
• Conversione JSON: trasformare JSON semi-strutturato in formato tabellare per facilitare l’interrogazione.
Caricamento dei dati su Databricks
KNIME semplifica il caricamento dei dati in Databricks, come file o tabelle:
• File su volumi Unity:
o Crea volumi tramite l’interfaccia utente di Databricks, il nodo SQL Statement Executor o l’API REST (utilizzando l’estensione REST Client di KNIME).
o Carica file utilizzando i nodi Writer, tra i quali Parquet Writer o ORC Writer, che sono consigliati per set di dati di grandi dimensioni.
• Tabelle in SQL Warehouse:
o Crea tabelle utilizzando il nodo DB Table Creator.
o Carica i dati in modo efficiente con il nodo DB Loader per il caricamento in blocco, oppure utilizza DB Writer, Spark to DB o altri nodi KNIME Database Extension.
1. Caricamento dei dati nel volume Databricks
Per caricare i file nei volumi, il volume deve già esistere. È possibile creare un volume tramite l’interfaccia utente Databricks o direttamente da un flusso di lavoro KNIME utilizzando il nodo SQL Statement Executor o tramite una richiesta POST utilizzando l’API Databricks.

Figura 3.1: Creazione di un volume su Databricks
In questo flusso di lavoro, il primo passo è creare una connessione al workspace Databricks. Il passo successivo dipende dalla scelta del servizio. Se per creare il volume si utilizza il magazzino SQL, è necessario specificare il nome del catalogo, il nome dello schema e il nome del volume utilizzando un’istruzione SQL:

Figura 3.2: Configurazione di un volume tramite DB SQL Executor
Se si utilizza il servizio API Databricks, è necessario lo strumento di richiesta POST per eseguire l’autenticazione e la creazione del volume desiderato su Databricks. Questo processo può essere eseguito con una chiamata API specificando il nome del catalogo, il nome del volume, il nome dello schema e il tipo di volume:

Figura 3.3: Definizione dell’URL
Il passaggio dell’URL e della richiesta nella configurazione dello strumento Post Request facilita la creazione del volume desiderato su Databricks:


Figura 3.4: Impostazione della richiesta API
Una volta creato il volume, il processo di caricamento può essere completato dopo l’estrazione e la trasformazione dei dati.

Figura 3.5: Schema del flusso di lavoro sviluppato per creare un volume su Databricks (da KNIME Learning Center)
In questo esempio:
-
I dati vengono estratti da due fonti diverse, una tabella SQLite e un CSV (file locale).
-
Dopodiché, vengono utilizzati i nodi KNIME di base per preparare e trasformare i dati.
-
Il processo di caricamento viene avviato collegandosi al workspace e al volume esistenti.
-
Il nodo Parquet Writer scrive la tabella di dati KNIME in un file Parquet. A seconda della modalità selezionata, il nodo scrive un singolo file o suddivide i dati in più file che vengono memorizzati all’interno della cartella specificata.
2. Caricamento dei dati nella tabella su Databricks
Proprio come per i volumi, una tabella deve esistere in Databricks prima che i dati possano essere caricati tramite un workflow KNIME. Il nodo DB Table Creator semplifica questo processo consentendo di definire lo schema, il nome della tabella, la modalità di esecuzione (append, overwrite o errore se la tabella esiste già), i nomi e i tipi delle colonne e le chiavi primarie.
Nell’esempio seguente, utilizziamo questo nodo per creare una tabella direttamente in Databricks.

Figura 4.2: Configurazione del nodo DB Table Creator
Una volta creata la tabella, è possibile avviare il processo di caricamento dei dati. Nell’esempio seguente, i dati provenienti da due fonti diverse (un database SQLite e un file CSV) vengono estratti e preparati con i nodi standard di KNIME. Il flusso di lavoro si connette quindi al workspace Databricks, alla tabella di destinazione e al warehouse appropriato prima di caricare i dati.

Figura 4.3: Schema del flusso di lavoro sviluppato per creare una tabella su Databricks
Il nodo DB Loader è uno strumento molto efficiente per il caricamento in bulk dei dati: riceve la connessione alla tabella e al magazzino, nonché i dati da caricare su Databricks. Una volta stabilite le connessioni, i dati possono essere caricati eseguendo il flusso di lavoro.
Trasformazione dei dati su Databricks (ELT)
Per le pipeline ELT, KNIME sfrutta le risorse di calcolo di Databricks in uno dei due modi seguenti:
• SQL Warehouse: interrogazione e trasformazione dei dati utilizzando i nodi del database KNIME, mantenendo i dati su Databricks.
• Elaborazione Spark: utilizzare l’estensione KNIME per Apache Spark per trasformazioni avanzate o machine learning su grandi set di dati.
Elaborazione dei dati Databricks con Spark in KNIME
Nel seguente workflow si eseguono i passaggi necessari per creare un contesto Spark, importare i dati, trasformarli, esportare i risultati e infine eliminare il contesto Spark creato.

Figura 5.1: Schema di un workflow per ELT su Databricks di KNIME (da KNIME Learning Center)
-
Crea un contesto Spark
In questo esempio, il nodo Create Databricks Environment viene utilizzato per connettersi a un cluster, autenticato tramite Workspace Connector. L’output grigio è il contesto Spark creato che viene poi utilizzato per importare i dati (file parquet) in un dataframe Spark.

Figura 5.2: Creazione dell’ambiente Databricks su KNIME (da KNIME Learning Center)
-
Importa i dati
Carica i dati da Unity Catalog (CSV, Parquet o tabelle) in Spark DataFrames utilizzando i nodi Spark.

Figura 5.3: Importazione di file in un dataframe Spark (di KNIME Learning Center)
-
Trasforma e analizza
Applica trasformazioni o addestra modelli utilizzando i nodi Spark, con configurazioni familiari e molto simili a quelle dei nodi standard di KNIME, o, in alternativa, utilizza codice Spark SQL / PySpark per attività più avanzate.

Figura 5.4: Nodi KNIME Spark per la trasformazione dei dati con Spark (di KNIME Learning Center)
-
Esporta i risultati
Salva i risultati in file, tabelle o altri formati oppure esporta i modelli in base alle necessità.

Figura 5.5: Esportazione da Spark (di KNIME Learning Center)
-
Distruggi il contesto Spark
Utilizzare il nodo Destroy Spark Context per liberare le risorse del cluster e ridurre al minimo i costi.

Figura 5.6: Liberare le risorse del cluster utilizzando Destroy Spark Context (da KNIME Learning Center)
Creare un ambiente Big Data locale
Per ridurre i costi durante lo sviluppo e il collaudo, KNIME fornisce il nodo Create Local Big Data Environment, che consente di prototipare i flussi di lavoro Spark in locale senza avviare uno o più cluster Databricks. Questo nodo rende possibile configurare un ambiente Big Data completo (Hive, HDFS, Spark) sul proprio computer, utilizzando porte standard per il database, il filesystem e le connessioni Spark.
Nel passare dal prototipo alla produzione, è sufficiente sostituire questo nodo con i connettori Databricks, mantenendo invariata la logica del resto del workflow.

Figura 6.1: Databricks Workspace Connector (di KNIME Learning Center)
Automatizzare e orchestrare le pipeline di dati
L’automazione e l’orchestrazione delle pipeline migliorano l’efficienza, riducono al minimo gli errori, supportano la collaborazione e consentono la scalabilità. In più, riducendo le attività manuali ripetitive e garantendo la coerenza tra i flussi di lavoro, i team possono concentrarsi su attività di maggior valore, mantenendo al contempo una chiara visibilità e il controllo sulle operazioni.
Automatizza le pipeline di dati su KNIME Hub
Su KNIME Hub, i workflow possono essere automatizzati in due modi principali:
• Gli schedule eseguono i flussi di lavoro automaticamente a orari predefiniti, riducendo l’intervento manuale e il rischio di errori.
• I trigger eseguono i flussi di lavoro in risposta a eventi specifici, come il caricamento di un file o l’aggiornamento di un database.
Per impostare l’automazione, pubblica e crea una versione del tuo flusso di lavoro in uno spazio Hub e configura un contesto di esecuzione per il tuo team. Nella pagina del flusso di lavoro, fai clic su Deploy per accedere alle opzioni “Create schedule” e “Create trigger”. Nel pannello di configurazione, puoi definire l’ora di esecuzione, la frequenza o il percorso dell’evento a seconda del tipo di automazione scelto.

Figura 7.1: Crea pianificazione e crea trigger (da KNIME Learning Center)
Orchestrazione delle pipeline di dati
Spesso i flussi di lavoro richiedono un’orchestrazione: alcuni devono essere eseguiti in sequenza a causa delle dipendenze, mentre altri devono essere eseguiti in parallelo per garantire l’efficienza. I flussi di lavoro KNIME funzionano naturalmente come grafi aciclici diretti (DAG), rendendoli adatti all’orchestrazione. È possibile creare un workflow di orchestrazione dedicato che gestisce l’esecuzione di altri flussi di lavoro, piuttosto che creare un flusso solo molto complesso.
I nodi Workflow Service consentono l’orchestrazione permettendo di:
• Attivare l’esecuzione di altri flussi di lavoro.
• Trasferire dati tra flussi di lavoro.
• Monitorare i risultati dell’esecuzione.
• Configurare le impostazioni di retry e timeout.
Questo approccio modulare migliora la riutilizzabilità, semplifica i test e la manutenzione dei flussi di lavoro.

Figura 7.2: Esempio di flusso di lavoro “service” (da KNIME Learning Center)

Figura 7.3: Esempio di flusso di lavoro “client” (di KNIME Learning Center)
I flussi di lavoro KNIME possono anche essere esposti come servizi RESTful, consentendo alle applicazioni esterne (ad esempio un sito web o uno script Python) di richiamarli. In questo caso, i dati vengono scambiati in formato JSON attraverso i nodi Container Input e Container Output.

Figura 7.4: Esempio di flusso di lavoro richiamato da un client esterno (da KNIME Learning Center)
Presentazione dei dati agli utenti finali
KNIME rende i dati elaborati da Databricks accessibili a diversi tipi di utenti:
• Gli utenti più tecnici, che hanno familiarità con Databricks, possono interrogare direttamente le tabelle Databricks utilizzando i nodi KNIME Database Extension, scrivendo molto meno codice rispetto ai metodi tradizionali.
• Gli utenti esperti di flussi di lavoro ma non di Databricks possono accedere a componenti predefiniti e riutilizzabili (con connettori e query pre-configurati) condivisi tramite KNIME Hub.
• Gli utenti business possono interagire con i dati Databricks tramite KNIME Data Apps, filtrando, esplorando o scaricando set di dati tramite interfacce intuitive.
Considerazioni finali
L’integrazione KNIME – Databricks accelera e semplifica ogni fase della data engineering: dall’estrazione da diverse fonti, alle trasformazioni (ETL ed ELT) e al caricamento dei risultati su tabelle o volumi Databricks. Progettando pipeline nell’ambiente low-code di KNIME, i team possono automatizzare e orchestrare flussi di lavoro su larga scala, abbattendo i silos e migliorando la collaborazione tra esperti di dominio e consumatori di dati.
Questo conclude la nostra analisi approfondita di Databricks e KNIME per la data engineering.
Nel prossimo articolo esploreremo come queste due piattaforme supportano le attività di Data Science & Machine Learning.




