Les scripts asynchrones dans Integration Services

Il arrive souvent que l’on ait à réaliser des opérations sur une ligne de données qui donnent comme résultat plusieurs lignes. Un exemple pourrait être de parser une chaine de caractères et d’en récupérer les mots. Cette question est inspirée d’une interrogation d’un collègue, embêté par le fonctionnement du Term Extraction.

Ce genre d’opération peut être réalisé simplement avec un ScriptComponent en Integration Services, sous réserve de le configurer correctement (ce qui n’est pas forcément simple à trouver comme documentation).

Soit mon fichier d’exemple (Source.txt). Je souhaite extraire les mots composant les phrases de chaque ligne et les stocker dans un fichier séparé, tout en stockant ailleurs mes phrases d’entrée traitées.

On va donc créer une source de type File, sur mon fichier Source.txt

On rajoute à la suite un composant de script de type transformation que l’on nomme « Parsing ».
Dans la partie Input and Outputs, on note que le script comprend une entrée par défaut et une sortie dite « synchrone » qui utilise le buffer d’entrée (basiquement elle recopie les entrées dans les sorties). Cela se voit car cet Output0 dispose d’un SynchronousInputId égal à l’Id de l’Input0.

Si l’on rajoute une sortie (Add Output) celle ci se crée par défaut en mode asynchrone (à vous de la gérer dans le script) ce que l’on voit par l’attribution d’un SynchronousInputId à 0. Rajoutons une colonne appellée « Mot » de type string.


Maintenant, si l’on édite le script, on peut réaliser le split de la chaine et l’insertion dans le Buffer asynchrone (Output1Buffer). Très basique: on splitte sur un espace et pour chaque occurence de mot on crée une ligne dans le buffer asynchrone dans laquelle on place ce mot…

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
Dim phrase As String
phrase = Row.Phrase
Dim mots As String()
mots = phrase.Split(CChar( » « ))
For Each mot As String In mots
Output1Buffer.AddRow()
Output1Buffer.Mot = mot
Next mot
End Sub

Ne reste plus qu’à créer deux destinations pour stocker les buffers, un sort component avant les mots pour enlever les duplicates, un petit F5 et vous obtenez ceci:

Et dans les fichiers:

Destination.txt:
Toto a dit Toto
Tata a entendu Toto
Tata a dit Tata a Titi

Mots.txt
a
dit
entendu
Tata
Titi
Toto

A vous de trouver d’autres utilisations!

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s