WS 2 Kettle

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.

Introduzione

Pentaho - Spoon Input Step 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.

Pentaho - Kettle simple Transformation 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).

Trasformazione da Web Service

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. Caricamento dati da Web Service con Kettle Ecco gli step previsti:

Dettaglio Step

Vediamo ora in dettaglio come configurare ogni singolo step procedendo lungo la sequenza indicata nella figura a destra: Step Kettle di caricamento dati da Web Service

Step 1: Input->Generate rows

Generare una riga (chiamata 'url' nell'esempio). Questa riga (tipo String) conterrĂ  su 'valore' l'effettiva url dell'api da richiamare. WS2Kettle - Generate rows

Step 2: Lookup->REST Client (HTTP)

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'. WS2Kettle - HTTP loookup

Infine nella tab 'Autenticazione' basta inserire le credenziali del webservice al quale si vuole accedere. WS2Kettle - HTTP loookup

Step 3: Input->JSON Input

Spuntare 'La sorgente e' definita in un campo', e selezionare appunto il campo 'result' del passo precedente WS2Kettle - JSON Input

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. WS2Kettle - HTTP loookup

Step 4: Transform->Select Values

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.

Step 5: Output!

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.

HTTPS

In caso il webservice al quale si fa riferimento abbia un certificato di sicurezza occorre fare un procedimento in piu'.

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).

cd C:\Program Files\Java\jre1.8.0_191\bin keytool -importcert -trustcacert -file "path/to/certificate.cer" -keystore "C:\Program Files\Java\jre1.8.0_191\lib\security\cacert" -alias "namesite"

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).

Varie ed eventuali

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 (3/5)
Data: 1 Aprile 2019
Versione: 1.0.0 - 1 Aprile 2019
Autori: Fabio Bottiglieri, mail [AT] meo.bogliolo.name