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)

?
È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top