Indice articolo
In questo articolo andremo ad illustrare come leggere da un database tramite Sme.UP Provider e come importarli in SmeUp. Verranno illustrati i principi generali, fare riferimento alla documentazione dell’oggetto V3 ASE JA_00_19 per gli approfondimenti.
Premessa
Il tema del trasferimento di dati tra due database è molto complesso ed esistono appositi strumenti per questo tipo di attività.
Quanto offre SmeupProvider è un approccio semplificato e orientato ad alimentare file su iSeries in formato SmeUp.
Semplificato perché il provider si limita a traferire su iSeries quanto legge, senza offrire esplicite funzionalità di trattamento del dato. Tutto il trattamento viene rimandato a programmi specifici. E’ stato seguito questo approccio per garantire la massima libertà.
Introduzione
Tramite SmeupProvider è possibile leggere le tabelle di qualunque database che supporti la tecnologia JDBC.
La lettura dei dati passa attraverso il servizio interno JA_00_19, che funnizza l’utilizzo di questa tecnologia.
Per leggere una tabella o eseguire una select su un DB, è necessario specificare
- Il driver: si tratta di una classe java
- La stringa di connessione (url): si tratta di una stringa che contiene i parametri per collegarsi al database. Tipicamente, è necessario indicare, l’ip del server e il nome del database.
- L’utente
- La password
- la tabella (o SELECT ) da eseguire.
Come identificare il driver
Il driver è una classe Java, distribuita dentro un archivio (JAR), ogni driver è specifico per ogni database e spesso dipende anche dalla versione.
Nella cartella di installazione dello SmeUpProvider, cartella libs\driverjdbc, sono distribuiti i driver per connettersi a Hypersonic SQL, Informix, Microsoft SQL Server, My Sql, file CSV, DB2(1).
Se il database a cui ci si vuole collegare non è tra quelli elencati sopra o non è stato possibile collegarsi, andrà cercato o aggiornato il driver.
Google è di aiuto nella ricerca del driver corretto.
Come identificare la URL di connessione
Le URL di connessione hanno una sintassi del tipo:
jdbc:<TIPO_DATABASE>://<HOST>:<PORT>/<DATABASE_NAME>
Utilizzando la scheda di esempio dell’oggetto servizio (V3 ASE) JA_00_19 è possibile vedere le FUN e in queste individuare le URL di connessione (parametro JDBCCON):
F(...) P(... JDBCCON(jdbc:mysql://gilberto.smea.it/performance) ... )
Quanto evidenziato è l’URL di connessione per collegarsi al database MYSQL performance residente sul server gilberto.smea.it.
Per i database non presenti tra gli esempi, fare ricorso a un buon motore di ricerca.
La FUN di interrogazione
Una volta identificato driver e URL di connessione vediamo la composizione della fun che restituirà una matrice con i dati letti:
F(EXB;JA_00_19;MAT.JDB) P(JDBCDRV(com.mysql.jdbc.Driver) JDBCCON(jdbc:mysql://gilberto.smea.it/performance) DBMUSR(utente) DBMPWD(password) DBMTABLE(prestazioni) MAXROW(10000) )
Il parametro DBMTABLE, può contenere un nome di tabella o anche una SELECT.
Se contiene un nome di tabella, verrà eseguita la select SELECT * from nome_tabella.
Questa fun nasce con l’intento di testare la URL di connessione e per fornire un’anteprima dei dati che verranno importati: non prevede nessun meccanismo di paginazione, è importante quindi ricordarsi del parametro MAXROW per limitare il recordset.
La FUN di importazione
Partendo dalla fun di interrogazione potremo facilmente convertirla in una fun di importazione:
- il metodo MAT.JDB va sostituito con IMP.JDB
- va tolto il parametro MAXROW
- va aggiunta la libreria di destinazione, parametro DBMLIB (deve esistere)
- va aggiunto il file di destinazione, parametro DBMDEST
esempio:
F(EXB;JA_00_19;IMP.JDB) P( JDBCDRV(com.mysql.jdbc.Driver) JDBCCON(jdbc:mysql://gilberto.smea.it/performance) DBMUSR(utente) DBMPWD(password) DBMTABLE(prestazioni) DBMLIB(W_FORFED) DBMDEST(PREST001) CutLongName(1) )
Il JA_00_19, leggerà i metadati della select e andrà a creare il file PREST001, nel formato SmeUp.
I campi verranno ridenominati perché la lunghezza è di max 10 caratteri, utilizzando il criterio di tagliare i campi più lunghi di 7 caratteri aggiungendo un progressivo, per garantire l’univocità:
CUSTOME001 CUSTOMERNUMBER CUSTOME002 CUSTOMERNAME CONTACT003 CONTACTLASTNAME
Impostando invece il parametro DBMFNAUT(1) avremo che i cami saranno composti dal prefisso FLD+un progressivo di 7 cifre:
FLD0000001 CUSTOMERNUMBER FLD0000002 CUSTOMERNAME FLD0000003 CONTACTLASTNAME
Verranno eseguite delle conversioni di tipo implicite per esempio un campo di tipo DATE, verrà convertito in formato numerico e scritto come AAAAMMGG, i DOUBLE in numeri di 30 caratteri con un numero di decimali che dipende dalla precisione del campo di origine, gli interi in numeri con 0 decimali, tutto il resto in CHAR.
Alcune note sulla scheda di esempio
La scheda di esempio del servizio JA_00_19 è pienamente utilizzabile solamente quando si è nella rete SmeUp e si è collegati al server SRVLAB01, ambiente SVI. Questo perché i database che si possono interrogare sono in lan.
La scheda di esempio consente l’accesso a vari tipi di database: file CSV, Excel, sia in formato XLS che XLSX. Sono inoltre preconfigurate le connessioni a database MySql e Microsoft SQL Server.
Una volta identificata l’url di connessione, modificando la scheda di esempio del JA_00_19, è possibile navigare all’interno del database: il ja_00_19 accede anche ai metadati o leggere il contenuto di una tabella.
Principali limitazioni
Nono sono gestiti i campi di tipo BLOB.
Non sono gestite tabelle in cui il singolo record occupa più di 32736 byte.
Strumenti
Per la messa a punto dell’url di connessione e delle query di interrogazione può essere utile Squirrel SQL Client.
Nel caso l’importazione richiedesse particolari regole, interfacciamento a webservice, aggiunta di campi calcolati quali hash o timestamp, uno strumento dedicato, free, è Penthao Data Integration.
NOTE:
(1) Il driver del databse DB2 è dentro al file Jt400.jar