Free PlyxSQL© - 1.0.0.105 Super ETL
POSTED , 28 SETT 2026
Free DOWNLOAD Clicca qui Info https://pgsoft.it/plyxhtml
ETL Engine: una nuova generazione di affidabilità, automazione e controllo dei processi dati
Nel mondo della gestione dei dati non è sufficiente trasferire informazioni da una sorgente a una destinazione. Un moderno motore ETL deve saper gestire grandi quantità di dati, errori, interruzioni, ripartenze, trasformazioni, lookup, deduplicazione, transazioni, pianificazioni e controlli di coerenza, mantenendo tracciabilità e affidabilità.
È proprio in questa direzione che si è evoluto il nostro ETL Engine, trasformandosi progressivamente da semplice strumento di importazione dati in una piattaforma completa per la progettazione e l'esecuzione di processi ETL professionali.
L'obiettivo è chiaro: rendere l'elaborazione dei dati più sicura, controllabile, ripristinabile e adatta anche a scenari enterprise.
Un ETL progettato per scenari reali
Un processo ETL reale non si limita al semplice schema:
SOURCE → TRANSFORM → DESTINATION
In produzione possono verificarsi:
- interruzioni del processo;
- perdita della connessione;
- errori su singoli record;
- duplicati;
- dati non validi;
- modifiche allo schema;
- errori di rete;
- timeout;
- deadlock;
- riavvio del computer;
- necessità di riprendere un'elaborazione interrotta;
- necessità di sapere esattamente cosa è successo.
Per questo motivo l'architettura è stata arricchita con numerosi meccanismi di controllo, monitoraggio e recupero dagli errori.
Checkpoint e Resume
Una delle funzionalità più importanti introdotte è il sistema di checkpoint e resume. Durante una lunga elaborazione l'ETL mantiene informazioni sul punto raggiunto.
In caso di interruzione non è quindi necessariamente necessario ricominciare dall'inizio. Il processo può riprendere dal checkpoint disponibile, riducendo i tempi di recupero e il carico sulle sorgenti e sulle destinazioni.
Il sistema tiene conto della corretta sequenza operativa:
READ
↓
TRANSFORM
↓
WRITE
↓
SUCCESS
↓
CHECKPOINT
Il checkpoint non viene avanzato semplicemente perché un record è stato letto. Questo evita uno degli errori più pericolosi nei sistemi ETL: considerare elaborato un record che in realtà non è stato correttamente scritto nella destinazione.
La gestione del checkpoint è stata inoltre separata dal semplice stato visuale dell'interfaccia, diventando parte effettiva del runtime di esecuzione.
Persistenza robusta
Il sistema dispone di una gestione dedicata della persistenza delle configurazioni e degli stati dell'ETL. La persistenza è stata progettata tenendo conto anche della possibilità di interruzione durante una scrittura.
Sono state introdotte strategie per:
- salvataggio atomico;
- gestione delle versioni;
- verifica della consistenza;
- backup e restore;
- controllo della validità dei dati persistiti.
L'obiettivo è evitare che un'interruzione durante il salvataggio lasci il progetto in uno stato parzialmente scritto o inutilizzabile.
Transazioni reali
Un ETL professionale deve distinguere chiaramente tra record, batch, fase ed esecuzione. Il motore dispone di una gestione transazionale che consente di adottare strategie differenti in base allo scenario.
Particolare attenzione è stata dedicata alla modalità Transaction per Phase:
BEGIN
↓
operazioni ETL
↓
validazione
↓
COMMIT
In caso di errore:
BEGIN
↓
operazioni ETL
↓
ERRORE
↓
ROLLBACK
Questa modalità permette di ottenere una semantica più affidabile, mantenendo la fase come unità logica di elaborazione e controllo.
La gestione delle transazioni è stata separata dalle semplici operazioni di scrittura. In questo modo il runtime mantiene il controllo sul ciclo di vita della transazione.
Gestione del batch
L'elaborazione dei dati è stata progettata per lavorare a blocchi. Il concetto di batch consente di controllare meglio:
- consumo di memoria;
- frequenza dei commit;
- checkpoint;
- progressione;
- gestione degli errori;
- performance.
SOURCE
↓
BATCH
↓
TRANSFORM
↓
WRITE
↓
CHECKPOINT
↓
NEXT BATCH
Questa struttura è particolarmente importante quando si lavora con dataset di grandi dimensioni, importazioni massive o processi che devono mantenere un consumo di risorse prevedibile.
Lookup evoluti
Il motore dispone di un sistema Lookup dedicato, utilizzabile in diversi scenari operativi. È possibile utilizzare lookup:
- precaricati;
- on-demand;
- con chiavi multiple;
- con gestione dei duplicati;
- con cache;
- con query parametrizzate.
È stata inoltre introdotta una gestione esplicita delle politiche relative ai duplicati. Tra le modalità disponibili troviamo:
FIRST;LAST;ERROR.
Questo evita che la gestione dei duplicati sia lasciata a comportamenti impliciti.
Il sistema dispone inoltre del concetto di LookupOrderBy, utile per controllare l'ordinamento
quando necessario.
Deduplicazione e idempotenza
La deduplicazione è stata resa parte integrante del motore ETL. Il sistema può identificare record duplicati sulla base di chiavi e criteri configurabili.
SOURCE
↓
FILTER
↓
DEDUP
↓
TRANSFORM
↓
DESTINATION
In questo modo si riduce la necessità di implementare manualmente la logica di deduplicazione nei singoli progetti.
Un altro importante miglioramento riguarda l'idempotenza: l'obiettivo è evitare che la ripetizione della stessa elaborazione produca effetti indesiderati.
Sono stati introdotti concetti come:
- Idempotency Key;
- campi utilizzabili come chiave;
- espressioni per la generazione della chiave;
- verifica preventiva;
- preload;
- lookup on-demand;
- gestione dei vincoli univoci.
L'idempotenza è particolarmente importante nei processi che utilizzano resume, retry, scheduler e REST, perché un processo interrotto potrebbe dover rieseguire una parte dei dati.
Dead Letter Queue
Gli errori sui singoli record non devono necessariamente compromettere l'intera elaborazione. Per questo è stata introdotta una Dead Letter Queue.
I record problematici possono essere isolati e registrati in una struttura dedicata, ad esempio:
.deadletter.jsonl
Il flusso può quindi essere rappresentato in questo modo:
PROCESSO
│
├── Record OK
│
└── Record ERROR
↓
DEAD LETTER
Il vantaggio è significativo: un errore circoscritto può essere analizzato senza perdere la visibilità sull'intera elaborazione.
Audit Trail e monitoraggio
Il motore dispone di un sistema di audit che permette di registrare le attività dell'elaborazione. L'obiettivo non è soltanto sapere che l'importazione è terminata, ma poter ricostruire:
- quale esecuzione è partita;
- quale fase era in esecuzione;
- quali batch sono stati elaborati;
- quali errori si sono verificati;
- quando l'esecuzione è terminata.
L'Audit Trail costituisce quindi la base per una maggiore tracciabilità operativa e per una diagnosi più rapida dei problemi.
Il motore dispone inoltre di componenti dedicati a report e feedback dell'esecuzione:
START
↓
SOURCE
↓
TRANSFORM
↓
DESTINATION
↓
RESULT
La visibilità sull'avanzamento è particolarmente importante per importazioni lunghe, milioni di record, operazioni batch ed elaborazioni schedulate.
Expression Engine 2
Una delle evoluzioni più importanti del progetto è il nuovo Expression Engine 2. Il motore non si limita più alle semplici trasformazioni di campo, ma introduce una vera famiglia di funzioni logiche:
IF;AND;OR;NOT;EQ;NE;GT;GE;LT;LE.
Per esempio:
IF(
GT([IMPORTO], 1000),
"ALTO",
"NORMALE"
)
Oppure:
AND(
GE([ETA], 18),
LT([ETA], 65)
)
E ancora:
OR(
EQ([STATO], "A"),
EQ([STATO], "B")
)
Il vantaggio principale è la possibilità di costruire trasformazioni complesse mantenendo la logica all'interno del motore ETL, senza dover ricorrere continuamente a codice personalizzato.
Wizard per le espressioni
L'Expression Engine è stato accompagnato da strumenti visuali per la costruzione delle espressioni. Questo riduce la necessità di scrivere manualmente formule complesse.
Il progettista può costruire una trasformazione partendo dai campi disponibili e dalle funzioni supportate, con un approccio più vicino a un vero ambiente visuale di progettazione ETL.
Condizioni e trasformazioni
La gestione delle condizioni è stata integrata nell'architettura del motore. È quindi possibile realizzare scenari come:
IF condizione
→ destinazione A
ELSE
→ destinazione B
Le condizioni possono essere combinate con AND, OR e NOT,
insieme ai confronti EQ, NE, GT, GE,
LT e LE.
Schema Fingerprint e Type Compatibility
Lo schema di una tabella non è statico nel tempo. Possono cambiare colonne, tipi, lunghezze, proprietà nullable, struttura e metadati.
La gestione dello Schema Fingerprint consente di confrontare lo schema atteso con quello effettivamente disponibile.
ETL progettato ieri
↓
database modificato oggi
↓
schema differente
↓
rischio di errore
Il controllo dello schema diventa così una fase importante della validazione del processo.
Il sistema dispone inoltre di controlli di compatibilità tra i tipi, particolarmente importanti durante la generazione o l'esecuzione delle operazioni di mapping.
SOURCE TYPE
↓
non compatibile
↓
DESTINATION TYPE
Il motore può quindi individuare potenziali incompatibilità prima che il problema provochi un errore durante la scrittura.
Data Compare
È stato introdotto un sistema di confronto dei dati. Il Data Compare consente di confrontare sorgente e destinazione per individuare:
- record mancanti;
- record differenti;
- record presenti da una sola parte;
- differenze nei valori.
È stata inoltre introdotta una modalità di preview con limite controllato, evitando che una semplice operazione di analisi carichi quantità potenzialmente enormi di dati.
CSV, Fixed Layout e REST
Il motore dispone di funzionalità dedicate all'estrazione e all'importazione di dati da sorgenti non esclusivamente database.
Sono presenti componenti per:
- file CSV;
- file a layout fisso;
- estrazione dati;
- mapping dei campi.
È quindi possibile costruire flussi come:
CSV
↓
ETL
↓
DATABASE
Oppure:
DATABASE
↓
ETL
↓
FIXED LAYOUT
Il motore integra inoltre funzionalità REST per consentire lo scambio di dati con servizi esterni.
DATABASE
↓
ETL
↓
REST API
Oppure:
REST API
↓
ETL
↓
DATABASE
La gestione delle richieste è integrata nell'architettura del processo e può quindi essere utilizzata insieme a trasformazioni, mapping e gestione degli errori.
Scheduler ed esecuzione automatizzata
È stato sviluppato un sistema di pianificazione integrato. L'ETL può quindi essere utilizzato non soltanto manualmente, ma anche come processo automatizzato.
Sono stati introdotti elementi per:
- gestione delle pianificazioni;
- elenco degli scheduler;
- dialog di configurazione;
- gestione delle esecuzioni;
- controllo delle attività pianificate.
L'architettura considera anche il problema della concorrenza attraverso meccanismi di Execution Gate e Distributed Locking. Questo evita che lo stesso job venga eseguito contemporaneamente quando non previsto.
Gestione della concorrenza
Un ETL moderno può avere contemporaneamente scheduler, REST, esecuzioni manuali, elaborazioni in background, lookup e operazioni sul database.
Il sistema dispone quindi di meccanismi per controllare l'accesso concorrente alle risorse e impedire che più esecuzioni entrino in conflitto.
Questo è fondamentale quando più processi utilizzano:
- la stessa configurazione;
- lo stesso database;
- lo stesso checkpoint;
- gli stessi file di persistenza.
L'Execution Gate può essere rappresentato in questo modo:
REQUEST EXECUTION
↓
EXECUTION GATE
↓
┌───┴───┐
│ │
OK BUSY
│ │
START WAIT/STOP
Questo contribuisce a rendere il comportamento dell'ETL più prevedibile e controllabile.
Integrazione con l'intelligenza artificiale
Il progetto dispone inoltre di un componente dedicato all'integrazione AI. Questo apre la strada a scenari in cui l'intelligenza artificiale può assistere nella progettazione e nella gestione delle trasformazioni.
L'integrazione AI è stata mantenuta separata dal core del motore, evitando di rendere l'esecuzione ETL dipendente dall'intelligenza artificiale.
È un approccio importante: l'AI può assistere il progettista, ma il motore ETL deve rimanere deterministico, verificabile e prevedibile.
Connessioni e sicurezza SQL
La gestione delle connessioni è stata separata in componenti dedicati. Questo consente di gestire in maniera più ordinata:
- apertura;
- riutilizzo;
- materializzazione;
- chiusura;
- gestione delle risorse.
L'obiettivo è evitare che il codice delle trasformazioni debba occuparsi direttamente di tutti gli aspetti infrastrutturali delle connessioni.
È presente anche un componente dedicato alla gestione sicura degli identificatori SQL. Questo è particolarmente importante quando nomi di tabelle, colonne, schemi o database devono essere utilizzati nella costruzione dinamica delle query.
La separazione della gestione degli identificatori dal resto del codice riduce il rischio di generare SQL non valido o ambiguo.
Test automatici e architettura modulare
Il progetto dispone di una base di test automatizzati, con test dedicati a componenti fondamentali come la gestione degli identificatori SQL e il Lookup.
Questa base costituisce il punto di partenza per verificare automaticamente le parti più delicate del motore e supportare le successive attività di hardening.
L'evoluzione del progetto ha portato alla separazione di numerosi componenti:
FDDataMapper
FDDataMapperExecute
FDDataMapperCheckpoint
FDDataMapperPersistence
FDDataMapperExpression
FDDataMapperExpression2
FDDataMapperLookup
FDDataMapperCondition
FDDataMapperSchemaFingerprint
FDDataMapperExtract
FDDataMapperSchedule
FDDataMapperAI
FDDataMapperReport
FDTreeExplorerDataCompare
FDTreeExplorerCompare
Questa organizzazione permette di mantenere separate responsabilità diverse. Il risultato è un'architettura molto più adatta all'evoluzione rispetto a un motore ETL monolitico.
Un ETL costruito per il recupero dagli errori
Uno degli aspetti più importanti dell'evoluzione del progetto è il cambio di filosofia. Un errore non viene più considerato necessariamente come:
ERROR → STOP EVERYTHING
Ma può diventare:
ERROR
↓
CLASSIFY
↓
LOG
↓
DEAD LETTER
↓
CONTINUE / ROLLBACK
Il comportamento dipende dalla politica configurata e dal tipo di errore. Questo è esattamente l'approccio necessario per sistemi destinati a processare grandi quantità di dati in contesti operativi reali.
Dalla semplice importazione all'ETL enterprise
Considerando tutte le funzionalità introdotte, l'architettura può essere rappresentata così:
┌───────────────┐
│ Scheduler │
└───────┬───────┘
│
▼
┌───────────────┐
│ Execution Gate│
└───────┬───────┘
│
▼
┌───────────┐ ┌────────────────┐ ┌─────────────┐
│ SOURCE │──────▶│ ETL ENGINE │──────▶│ DESTINATION │
└───────────┘ └────────────────┘ └─────────────┘
│
┌──────────────┼──────────────┐
▼ ▼ ▼
Expression Lookup Dedup
Engine
│ │ │
└──────────────┼──────────────┘
▼
┌──────────────┐
│ Transaction │
└──────┬───────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
Checkpoint Audit Trail Dead Letter
│
▼
Resume
Questa architettura consente di gestire processi molto più complessi rispetto al tradizionale modello:
SELECT → INSERT
Una piattaforma pensata per i dati critici
Le funzionalità introdotte hanno un obiettivo comune: ridurre il rischio operativo.
Quando un ETL gestisce dati amministrativi, finanziari, tributari o aziendali, non è sufficiente che funzioni nel caso ideale. Deve continuare a comportarsi correttamente anche quando:
- una connessione cade;
- un record è errato;
- una fase fallisce;
- il processo viene interrotto;
- il database cambia struttura;
- la destinazione contiene duplicati;
- un job viene avviato due volte;
- è necessario riprendere un'elaborazione.
È proprio in questi scenari che emergono le differenze tra un semplice importatore e un vero motore ETL.
Il risultato non è semplicemente un programma che sposta dati. È un motore ETL orientato all'affidabilità, progettato per gestire trasformazioni, controlli, errori, ripartenze, pianificazioni e grandi quantità di informazioni mantenendo il processo sotto controllo.
#SQL #database #ETL #DataEngineering #plyxSQL #FireDAC #PGSOFT
Nessun commento:
Posta un commento