Reverse engineering di una pipeline ETL

3

Ho una pipeline ETL grande unidirezionale in Scala, dove comincio con lo schema protobuf A e finisco con lo schema protobuf B. Voglio creare un mapping molti-a-molti tra i campi dello schema A e dello schema B, dove lo schema B utilizza un sottoinsieme dei campi dello schema A. L'ETL è complesso e ha molte trasformazioni in cui le informazioni sono memorizzate in variabili e poi trasformate in vari modi prima di essere esportate nello schema B. Cose che ho tentato finora:

  • Prendi un pezzo di dati che consiste in un set completamente popolato di schema A con valori come "flags", eseguilo attraverso l'ETL e analizza l'output dello schema B per far corrispondere tali flag. Ciò non tiene conto delle trasformazioni dei valori, non riesce su alcuni vincoli di input e non è possibile collegare tali "flag" ai valori dei campi booleani o enumerati.
  • Costruire un plug-in del compilatore Scala che analizzi l'AST per l'utilizzo dei tipi nello Schema A e dove vanno inseriti nello Schema B. Questo mi dà la maggior parte del modo, ma l'approccio finisce per introdurre ambiguità e complessità come dove le variabili sono memorizzate in funzioni comuni e riutilizzate in posizioni e ambiti diversi nel codice ETL.
  • Eseguendo qualcosa di simile al precedente, ma in runtime con AspectJ. Questo introduce lo stesso tipo di problemi del punto elenco precedente.

Esiste un approccio di livello inferiore o più diretto per fare qualcosa del genere? Come attaccare una specie di flag ai dati che la seguiranno durante la sua trasformazione e output?

    
posta Conor 02.08.2017 - 16:53
fonte

2 risposte

1

Potrei arrivare a questo in un modo che è difficile per la tua situazione.

Ma credo che dovresti considerarlo più come un problema di comprensione di persone e domini, e meno un problema tecnico. Sembra che tu sia rimasto bloccato con un progetto ETL scritto da uno, o pochissimi, a cui è difficile accedere, ed è ora il tuo lavoro risolverlo e prenderlo in consegna.

La cosa migliore al 100% che puoi fare è avere accesso a quante più persone possibile chi ha qualcosa a che fare con questo progetto, e ad adattarsi il più possibile al tuo periodo di scoperta. Se puoi parlare con uno degli sviluppatori è lo scenario migliore.

Non riesco a capire perché ti aspetteresti un grande successo con l'armeggiare con gli input e l'esecuzione del processo ETL come una "scatola nera". Solo alcune differenze fondamentali tra i due schemi causerebbero molte piccole stranezze che sarebbero molto difficili da risolvere. A lungo termine avresti una comprensione molto migliore dell'esecuzione studiando la struttura del progetto, i suoi commenti, la denominazione degli oggetti, ecc.

Sicuramente devi studiare il dominio in questione prima sul sistema di origine o di destinazione, indipendentemente dai loro schemi. Poni domande alle parti interessate che utilizzano i sistemi su entrambe le estremità per avere un'idea di cosa stanno cercando di modellare gli schemi di origine e di destinazione. Quindi confronta i nomi delle tabelle e cerca di risolvere le differenze nelle ipotesi dei modelli, utilizzando il progetto ETL lungo il percorso per arricchire il tuo ragionamento.

In breve, non si vuole arrivare a questo come un problema di reverse engineering con gli strumenti di tracciamento e guardando i risultati di input e output. Vorresti affrontarlo come un problema aziendale e coinvolgere gli stakeholder, per avere una buona idea del quadro generale.

    
risposta data 06.11.2017 - 03:25
fonte
0

Potresti provare a ispezionare più operazioni di basso livello durante l'esecuzione dell'ETL.

Ad esempio, se vuoi scoprire un mapping tra il valore della variabile A e il valore di una variabile di uscita B:

  1. ... molte istruzioni ...
  2. Leggi il valore dall'indirizzo di A nell'indirizzo XYZ
  3. ... molte istruzioni ...
  4. Esegui alcune operazioni con valore dall'indirizzo XYZ
  5. ... molte istruzioni ...
  6. Copia il valore dall'indirizzo XYZ nell'indirizzo di B

Quindi, devi analizzare le trasformazioni fatte usando i valori negli indirizzi A, XYZ e, infine, B.

    
risposta data 07.08.2017 - 21:15
fonte

Leggi altre domande sui tag