Skip to main content

Foreign Data Wrapper

Come già accennato nella pagina DB di analisi, il Foreign Data Wrapper (FDW) è uno strumento che ci consente di recuperare agevolmente i dati da database esterni senza dover utilizzare estensioni che richiedono sintassi particolari (ad es. dblink) e senza dover fare una copia fisica dei dati nel DB di analisi.

Di fatto il FDW è un collegamento alle tabelle (e alle viste se presenti) dei database esterni che ci consente di lavorare con il codice SQL esattamente come se tutti i dati fossero all'interno del nostro DB di analisi.

Nel nostro caso il FDW viene utilizzato per avere a disposizione all'interno del nostro database di analisi BI i dati dei database di tipo raw data store (vedi la pagina Architettura del data warehouse) popolati tramite la procedura di ingestion.

Di seguito illustriamo brevemente i passaggi per configurare il FDW

1. Creare l'estensione per il FDW desiderato, nel nostro caso postgres_fdw:

CREATE EXTENSION IF NOT EXISTS postgres_fdw;

2. Creare il server remoto per connettersi al database esterno desiderato:

CREATE SERVER server_remoto
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname 'altrodb', host 'localhost');

3. Creare uno User Mapping per l'accesso al server remoto creato al punto precedente:

CREATE USER MAPPING FOR tuoutente
SERVER server_remoto
OPTIONS (user 'tuoutente', password 'tuapassword');

4. Importare dal server remoto lo schema desiderato:

IMPORT FOREIGN SCHEMA public
FROM SERVER server_remoto
INTO schema_locale;


Prima di importare lo schema dal server remoto è importante creare manualmente lo schema da popolare nel server locale (sono gli schemas che abbiamo definito "Raw data", vedi la pagina DB di analisi).

Una volta effettuati questi passaggi il FDW è correttamente configurato e all'interno della cartella "Foreign Tables" del nostro schema compariranno i collegamenti alle tabelle (e alle viste se presenti) dello schema remoto, come mostrato nell'immagine seguente.

image.png

Azioni gestite

Di seguito si riporta uno specchietto con l'indicazione delle azioni gestite o meno dal FDW.

Azioni effettuate sulla tabella remota Gestita dal FDW
Modifica dati
Aggiunta colonna no
Rename colonna no (viene restituito errore)
Scambio posizione colonna no la posizione, sì i dati (vengono associati al campo giusto)
Eliminazione colonna no (viene restituito errore)
Aggiunta tabella no
Eliminazione tabella no (viene restituito errore)

Le azioni che non vengono gestite dal FDW dovranno essere necessariamente gestite a mano.

Mentre per alcune azioni non gestite viene restituito un errore che ci fa accorgere dell'anomalia, per altre azioni non gestite come l'aggiunta di una tabella o di una colonna non viene restituito nessun errore, e quindi dovremo essere noi a modificare la struttura della foreign table nel momento in cui ci serve quella tabella o quella colonna (o meglio ancora, quando la nuova tabella o la nuova colonna vengono create nel data source).

Nel caso in cui fosse necessario aggiungere una o più nuove tabelle, un'alternativa all'aggiunta manuale è l'utilizzo del seguente script. In sostanza viene effettuato nuovamente l'import dell'intero schema, ma limitatamente alle sole tabelle specificate, che non essendo ancora presenti come foreign tables non mandano in errore l'import.

IMPORT FOREIGN SCHEMA public LIMIT TO (tabella_a, tabella_b)
FROM SERVER server_remoto
INTO schema_locale;