I dati relazionali per file flat
-
18-09-2019 - |
Domanda
Spero che possa aiutare a trovare una risposta a un problema che diventerà un tema ricorrente nel lavoro. Ciò comporta denormalizzare dati da tabelle RDBMS ai formati di file flat con gruppi ripetuti (dominio condivisione e significato) attraverso le colonne. Purtroppo questo è inevitabile.
Ecco un esempio molto semplificato della trasformazione che avevo Richiede:
TABLE A TABLE B ------------------- 1 -> MANY ---------------------------- A_KEY FIELD_A B_KEY A_KEY FIELD_B A_KEY_01 A_VALUE_01 B_KEY_01 A_KEY_01 B_VALUE_01 A_KEY_02 A_VALUE_02 B_KEY_02 A_KEY_01 B_VALUE_02 B_KEY_03 A_KEY_02 B_VALUE_03
Questo diventerà:
A_KEY FIELD_A B_KEY1 FIELD_B1 B_KEY2 FIELD_B2 A_KEY_01 A_VALUE_01 B_KEY_01 B_VALUE_01 B_KEY_02 B_VALUE_02 A_KEY_02 A_VALUE_02 B_KEY_03 B_VALUE_03
Ogni voce dalla TABLE A
avrà una riga nel file flat di output con una colonna per campo correlato da TABLE B
. Colonne nel file di output possono avere valori vuoti per i campi ottenuti da TABLE B
.
Mi rendo conto che questo creerà un ampia di file estremamente , ma questo è un requisito. Ho dato un'occhiata al MapForce e Apatar, ma penso che questo problema è troppo bizzarro o non posso usare in modo corretto.
La mia domanda: esiste già uno strumento che raggiungere questo o dovrei sviluppare uno da zero (non voglio reinventare la ruota)
?Soluzione 3
Grazie per il vostro aiuto. Come si scopre la relazione è ONE -> MAX di 3 e questo vincolo non cambierà come i dati sono ormai statico in modo funziona il seguente SQL run-of-the-mill:
select A.A_KEY, A.FIELD_A, B.B_KEY, B.FIELD_B, B2.B_KEY, B2.FIELD_B, B3.B_KEY, B3.FIELD_B from A left join B on (A.A_KEY = B.A_KEY) left join B B2 on (A.A_KEY = B2.A_KEY and B2.B_KEY != B.B_KEY) left join B B3 on (A.A_KEY = B3.A_KEY and B3.B_KEY != B.B_KEY and B3.B_KEY != B2.B_KEY) group by A.A_KEY order by A.A_KEY
Altri suggerimenti
Sono abbastanza sicuro che non è possibile risolvere questo in SQL pianura, ma a seconda del RDBMS, potrebbe essere possibile creare una stored procedure o qualcosa del genere. Altrimenti è una cosa abbastanza facile da fare in un linguaggio di scripting. Quale tecnologia stai usando?
Fa questo aiuto?