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:

  1. il metodo MAT.JDB va sostituito con IMP.JDB
  2. va tolto il parametro MAXROW
  3. va aggiunta la libreria di destinazione, parametro DBMLIB (deve esistere)
  4. 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