Comment exporter un fichier plat avec différentes lignes à l'aide de SSIS?

StackOverflow https://stackoverflow.com/questions/213411

  •  03-07-2019
  •  | 
  •  

Question

J'ai des tables d'arborescence, Client, Facture et InvoiceRow avec les relations standard.

Celles-ci doivent être exportées dans un fichier de longueur de champ fixe avec les deux premiers caractères de chaque ligne identifiant le type de ligne. Les types de ligne ont des spécifications différentes.

Je pourrais probablement le faire avec une boucle imbriquée dans un bloc de script, mais il s'agit de mon tout premier package SSIS et cette solution semble erronée.

modifier:

La sortie doit avoir:

Customer  
Invoice  
Rows  
Customer  
Invoice  
Rows  
and so on
Était-ce utile?

La solution

Votre intuition de le faire en utilisant un composant de destination de script est correcte. Malheureusement, ce scénario ne fonctionne pas bien avec SSIS. Je ne considère pas cela comme un forfait débutant. Si vous devez utiliser SSIS, je commencerai par joindre toutes les données de manière interne. Il y aura donc une ligne pour chaque InvoiceRow, contenant les données nécessaires des trois tables.

CustomerCols, InvoiceCols, RowCols

Ensuite, dans le composant de destination du script, vous devez suivre les valeurs du client et de la facture. Au fur et à mesure de leur modification, vous devez écrire des lignes supplémentaires dans le résultat.

Voir Créer une destination avec le composant de script pour plus d'informations. sur la destination du script.

Mon expérience montre que les destinations de script peuvent avoir de bonnes performances.

Autres conseils

J'éviterais d'écrire Destination du script et utiliserais uniquement Script Transform + Destination de fichier plat. De cette façon, vous vous concentrez sur la sortie logique (chaînes de données), tout en permettant à SSIS d’écrire dans le fichier (cela peut être un peu plus efficace, plus vous vous concentrez sur votre activité, pas sur l’écriture dans des fichiers).

Tout d'abord, vous devez obtenir des données dénormalisées. Vous pouvez faire des jointures et des tris dans le SGBD, mais si vous ne voulez pas exercer trop de pression sur le SGBD, il vous suffit d'extraire les données triées et de les fusionner à l'aide de deux transformations SSIS Merge Join.

Ensuite, exécutez le script: conservez les valeurs actuelles du client et de la facture en cours, affichez-les lorsqu’elles sont modifiées, indiquez InvoiceRow à chaque entrée. Quelque chose comme ça:

if (this.CustomerID != InputBuffer.CustomerID) {
  this.CustomerID = InputBuffer.CustomerID;
  OutputBuffer.AddRow();
  OutputBuffer.OutputColumn = "Customer: " + InputBuffer.CustomerID + " " + InputBuffer.CustomerName;
}
// repeat the same code for Invoice

OutputBuffer.AddRow();
OutputBuffer.OutputColumn = "InvoiceRow: " + InputBuffer.InvoiceRowPrice;

Enfin, ajoutez une destination de fichier à plat avec une seule colonne (OutputColumn créée par le script) pour l'écrire dans le fichier.

Traitez vos trois tables pour que les sorties soient toutes appropriées pour votre fichier de sortie (y compris l'indicateur de type de ligne). Vous devrez le faire dans trois chemins de flux distincts dans votre flux de données, puis regrouper les lignes dans un élément de flux Union All. À partir de là, traitez-les au besoin pour créer votre fichier de sortie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top