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?