Kettle e' il potente strumento di ETL fornito da Pentaho.
Kettle si occupa dell'estrazione, della trasformazione e del trasferimento dei dati
da e verso database ed altre sorgenti di informazioni.
In questa paginetta vediamo come estrarre i dati da un Web Service.
Kettle e' lo strumento di ETL fornito da Pentaho. ETL sta per Extract, Transform and Load. Ovvero reperire i dati da diverse sorgenti, trasformarli e caricarli da qualche parte. In realta' la suite Pentaho fa anche un passo in piu': il Transport e quindi a volte si usa l'acronimo ETTL. Storicamente si tratta del pacchetto Open Source Kettle. Ora un nuovo nome ufficiale piu' lungo: Pentaho Data Integration o PDI... pero' io sono vecchio quindi continuero' a chiamarlo Kettle! Kettle e' realizzato per la maggior parte in Java ed un'unica distribuzione e' utilizzabile su piu' piattaforme (eg. Linux, MS-Windows, MAC OS).
Gli oggetti fondamentali di Kettle sono le Trasformazioni ed i Job.
Le Trasformazioni indicano come debbono essere raccolti, trasformati e ricaricati i dati.
Le trasformazioni sono composte da vari Step connessi tra loro da collegamenti chiamati Hop.
Una tipica trasformazione inizia con uno Step di Input, uno o piu' Step di trasformazione ed uno
Step di Output.
Vi sono diversi possibili Step organizzati per tipologia:
Input, Output, Transform, Utility,
Flow, Scripting, Lookup, Joins, Data Warehouse, Validation, Statistics, Job,
Mapping, Inline, Experimental, Bulk loading,
...
A sua volta ciascuna tipologia di Step contiene decine di possibilita'. Ad esempio
uno Step di Input puo' prelevare i dati: da una tabella di un DB relazionale (un qualsiasi database
raggiungibile via JDBC), da un file con tracciato record fisso, da un file CSV,
da un foglio MS-Excel, ...
Gli Hop che collegano i vari step di una trasformazione rappresentano il flusso dei dati e trasportano
il contenuto dei Field da uno Step a quello successivo.
I Job sono graficamente simili alle trasformazioni poiche' sono anch'essi composti da una serie di Step collegati tra loro con Hop ma hanno un obiettivo differente: servono a coordinare tra loro differenti trasformazioni ed attivita' sui sistemi ospite (eg. ricezione file, script SQL).
Sono disponibili diversi step in Kettle che possono raccogliere dati da un Web Service. In questo esempio utilizzeremo una tecnica didattica che prevede diversi step, utilizza un lookup da un servizio REST, analizza la risposta in formato JSON ed infine pone il risultato su un file di output. Ecco gli step previsti:
Generare una riga che contenga l'URL dell'api da richiamare.
Questo passo riceve in input la stringa definita nello step 1 e la utilizza come URL per accedere come client REST.
I dati sono raccolti in formato JSON che e' quello piu' tipicamente utilizzato dai servizi WEB.
Questo step indica quali campi dal campo precedente si vogliano selezionare ed eventuali conversioni.
Il risultato va salvato!
Naturalmente possiamo utilizzare qualsiasi step di Output...
in questo esempio usiamo Excel output ma potrebbe essere un Table output per salvare i dati
su un qualsiasi database raggiungibile via JDBC
Vediamo ora in dettaglio come configurare ogni singolo step procedendo lungo la sequenza indicata nella figura a destra:
Generare una riga (chiamata 'url' nell'esempio). Questa riga (tipo String) conterrĂ su 'valore' l'effettiva url dell'api da richiamare.
Questo passo riceve in input la stringa definita nello step 1, percio' applicando la spunta su 'Accettare URL dal campo' e selezionando 'url' (il nome della riga creata prima) avremo l'API pronta per essere lanciata. Scegliere il metodo e il tipo dell'applicazione opportuni (nell'esempio vengono usati un GET per restituire un JSON). Il nome del campo contenente il risultato e' 'result'.
Infine nella tab 'Autenticazione' basta inserire le credenziali del webservice al quale si vuole accedere.
Spuntare 'La sorgente e' definita in un campo', e selezionare appunto il campo 'result' del passo precedente
In campi bisogna definire cosa vogliamo prendere dal json di output. Conoscendo l'output e' semplice: copiandolo su https://jsonpath.com/ possiamo ricavare il relativo path da impostare su 'Percorso', mentre il 'Nome' e' a scelta.
Questo step indica semplicemente quali campi dal campo precedente si vogliano selezionare, e magari convertirli in qualche formato leggibile, ad esempio un unix time che diventi un timestamp.
Il risultato viene posto in un file Excel. Naturalmente e' possibile utilizzare un qualsiasi altro Step di output inserendo il risultato in un file con un altro formato o, meglio, su una tabella di un database.
Innanzitutto bisogna ricevere dalla fonte il certificato (il formato utilizzato nell'esempio e' .pem) X.509 codificato a Base64. Successivamente e' necessario importarlo nel nostro CAcert di java. E' possibile farlo in diversi modi, tra questi vediamo quello da linea di comando.
Innanzi tutto bisogna verificare la variabile d'ambiente JAVA_HOME e il relativo path (es C:\Program Files\Java\jre1.8.0_191\bin).
VerrĂ chiesta la password del keystore (quella di default e' changeit) Dopodiche' riavviando spoon, pentaho sarĂ in grado di leggere dal suddetto keystore il certificato ed eseguire la https request.
Con questo procedimento il certificato risulta importato per tutti i tool Pentaho, quindi anche per l'eventuale schedulazione della trasformazione.
Un'alternativa ai comandi in linea e' utilizzare un tool con una GUI (eg. Portecle).
Per un'introduzione agli argomenti trattati leggere il documento sulla Suite Pentaho e sull'ETL Kettle.
Le versioni ed i rilasci di Pentaho/Kettle sono riportati su questo documento.
Titolo: WS 2 Kettle
Livello: Avanzato
Data:
1 Aprile 2019
Versione: 1.0.0 - 1 Aprile 2019
Autori: Fabio Bottiglieri, mail [AT] meo.bogliolo.name