Database Link

Navigation:  Il Package: lavorazione dei dati > Acquisizione dei dati > Lettura dei dati: i Data Link >

Database Link

Previous pageReturn to chapter overviewNext page

Il Database Link DatabaseDatalink_16 è un adapter che consente di interrogare direttamente tabelle e richiamare entities, come viste o funzioni, da un DB esterno, opportunamente connesso al Package mediante Database Connection. In particolare, se la Connection lo consente (i.e. opzione LoadMetadata attiva), può visualizzare anche i metadati della sorgente, rendendoli disponibili nell’IntelliSense per la costruzione di query.

 

Gli elementi definitori propri di un Database Link sono esposti nel tab Query, dove è possibile specificare:

la Database Connection da utilizzare come sorgente;

il listato SQL con cui interrogare il DB.

 

warning

Per interrogare DB esterni, è necessario usare il dialetto SQL da essi atteso (e.g. per Oracle utilizzare PL/SQL).

 

L'utente può specificare le istruzioni SQL desiderate

manualmente, nell'editor di testo del tab Query oppure mediante il Query Builder (accessibile con il pulsante Builder QueryBuilder16);

graficamente, mediante il SQL Visual Editor (accessibile attivando Visual Mode con il pulsante SQLEditorMode16).

 

warning

Coerentemente con il paradigma EAsT™, il Database Link restituisce una sola tabella. In caso l'output sia composto da più di un dataset, solo il primo viene preso in considerazione.

 

Un ulteriore elemento definitore del Database Link è l'iteratore, ossia il dataset su cui iterare istruzioni SQL. In particolare tali istruzioni vengono eseguite per ogni record restituito dall'oggetto specificato nel campo Iterator del tab Query.

L'iteratore può essere un qualsiasi altro oggetto del Package oppure una custom query, come descritto dai seguenti esempi.

 

ex

ESEMPIO: RESOURCE come ITERATOR

Assumiamo che:

nel DB SQL Server, a cui siamo connessi, sia presente una tabella contenente tutti gli ordini effettuati dai nostri clienti;

all'interno del Package esista una Resource contenente la lista di tre nostri impiegati.

Per ottenere una tabella contenente tutti gli ordini del cliente "Rossi Mario", eseguiti dai tre impiegati elencati nella Resource, è possibile utilizzare un Database Link ed un iteratore.

Inserendo la Resource nel campo Iterator, mediante la relativa drop-down, la query che interroga il DB SQL Server, restituendo la tabella desiderata, è:

SELECT * FROM Orders o

WHERE o.CustomerName = 'Rossi Mario'

AND o.EmployeeID = :EmployeeID

dove " : " identifica un campo presente nell'iteratore.

 

ex

ESEMPIO: CUSTOM QUERY come ITERATOR

Con riferimento alle ipotesi dell'esempio precedente, è possibile ottenere il medesimo risultato anche utilizzando una custom query come iteratore.

Selezionando <Custom Query> nel campo Iterator, mediante la drop-down relativa, l'iteratore viene definito mediante query. IrionEDM  mette a disposizione dell'utente un Query Builder, attivabile con il pulsante ArrowRight_16, accanto al campo Iterator.

La sintassi corretta per interrogare il DB SQL Server ed ottenere la tabella di output desiderata, è identica all'esempio precedente.

 

La sintassi corretta per richiamare campi di un Iterator nelle istruzioni SQL con cui interrogare un DB esterno è :[FieldName]. In particolare ogni iteratore dispone di due ulteriori colonne speciali:

IsLastIteration, flag che indica se l'iterazione corrente è l'ultima;

IterationRow, numero progressivo delle iterazioni effettute.

 

L'uso di iteratori all'interno di query si estende anche ai DataBox Link, come analizzato nel capitolo Archiviazione permanente dei dati: il DataShelf.

 

Ulteriori dettagli sulla sintassi utilizzabile negli Iterator sono disponibili nell'appendice dedicata.

 

Il Database Link dispone di ulteriori proprietà di configurazione non esposte direttamente nella corrispondente UI, raggiungibili mediante il visualizzatore della Property Grid (tasto F4).

La principale property avanzata di un Database Link è la SameServerOptimization. Essa consente di abilitare/disabilitare l'ottimizzazione del trasferimento dati per DB che risiedono sullo stesso server di IrionEDM.

 

warning

In caso il trasferimento dati da DB sia ottimizzato, mediante SameServerOptimization, vengono ignorate sia la property NullOnDataError sia eventuali Parse Format presenti nella Column List.

 

La property IteratorMode consente di specificare la modalità di iterazione, che può essere:

Default: viene generato uno statement parametrico che è richiamato per ogni riga della tabella iteratore valorizzando i parametri di volta in volta. I risultati delle query sono collezionati in un unico dataset.

Batch: le istruzioni generate dalla risoluzione dell’iteratore, vengono inviate al server a gruppi. La dimensione del gruppo di istruzioni da inviare è determinata dal server ricevente. Questa opzione non prevede la restituzione di un output, quindi non è adatta per il reperimento di dati.

ArrayBind: valido solo per connessioni Oracle. Sfrutta la capacità di “Array Binding” proprietaria di Oracle; questo sistema permette di inviare al server lo statement una volta sola e poi passare un array di dati contenente tutti i valori che andranno sostituiti ai parametri dello statement. Il server Oracle si occuperà di iterare lo statement in autonomia riducendo così la quantità di informazioni transitanti su rete. Questa opzione non prevede la restituzione di un output, quindi non è adatta per il reperimento di dati.

 

Il Database Link dispone di ulteriori proprietà di configurazione non esposte direttamente nella corrispondente UI, raggiungibili mediante il visualizzatore della Property Grid (tasto F4).

La principale property avanzata è DataMapping, che permette di velocizzare l’esecuzione dell’istruzione T-SQL, in particolari condizioni.

 

La proprietà DataMapping può assumere i seguenti valori:

Disabled, il sistema materializza i dati sul Working DB;

 Auto, il motore di esecuzione tenta di eseguire l’operazione nel modo più performante, se non è possibile scala a quello meno performante;

 Enabled (a partire da Irion EDM 2016 Update 11), il motore di esecuzione accede direttamente al contenuto della DataBox creando una vista sui dati interrogati. Se l’operazione non è possibile viene restituito un errore.

 

LightBulb

Il DataMapping può essere molto utile in caso si interroghino dataset voluminosi.

 

Se la proprietà Data Mapping è valorizzata a Disabled:

l’output del Database Link viene trasferito in una tabella temporanea del database Working di IrionEDM.

eventuali indici definiti sulle tabelle di un Database non vengono utilizzati nella generazione degli output, essendo fisicamente determinati a livello di Working DB.

 

Se la proprietà è valorizzata a Auto, in ordine di performance decrescente, viene utilizzata la modalità DataMappingSameServerOptimizationDataReader (materializzazione su database Working)

 

APPROFONDIMENTI E ARGOMENTI CORRELATI

& Database Connection

& Query verso Oracle