SSIS - Composant de Script, Split seule ligne à plusieurs lignes (Parent-Enfant): Variation de la
Merci d'avance pour votre aide. Je suis dans le besoin d'aide sur la rédaction de SSIS composant de script pour délimiter la ligne unique pour plusieurs lignes. Il y avait beaucoup de blog utile et après j'ai regardé ci-dessous:
http://bi-polar23.blogspot.com/2008/06/splitting-delimited-column-in-ssis.html
Cependant, j'ai besoin d'un peu d'aide supplémentaire pour le codage pour terminer le projet. Fondamentalement, c'est ce que je veux faire.
Données d'entrée
ID Nom de l'Élément 1 Apple01,02,Banana01,02,03 2 Spoon1,2,Fork1,2,3,4
Données de sortie
ParentID ChildID Nom De L'Élément 1 1 Apple01 1 2 Apple02 1 3 Banana01 1 4 Banana02 1 5 Banana03 2 1 Spoon1 2 2 Spoon2 2 3 Fork1 2 4 Fork2 2 5 Fork3 2 6 Fork4
Ci-dessous est ma tentative de code, mais n'hésitez pas à réviser son ensemble, si c'est illogic. SSIS Asynchrone de sortie est réglé.
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
Dim posID As Integer, childID As Integer
Dim delimiter As String = ","
Dim txtHolder As String, suffixHolder As String
Dim itemName As String = Row.ItemName
Dim keyField As Integer = Row.ID
If Not (String.IsNullOrEmpty(itemList)) Then
Dim inputListArray() As String = _
itemList.Split(New String() {delimiter}, _
StringSplitOptions.RemoveEmptyEntries)
For Each item As String In inputListArray
Output0Buffer.AddRow()
Output0Buffer.ParentID = keyField
If item.Length >= 3 Then
txtHolder = Trim(item)
Output0Buffer.ItemName = txtHolder
'when item length is less than 3, it's suffix
Else
suffixHolder = Trim(item)
txtHolder = Left(txtHolder.ToString(), Len(txtHolder) _
- Len(suffixHolder)) & suffixHolder.ToString()
Output0Buffer.ItemName = txtHolder
End If
Next
End If
End Sub
Le code actuel génère la sortie suivante
ID Nom de l'Élément 1 Apple01 1 02 1 Banana01 1 02 1 03 2 Spoon1 2 2 2 Fork1 2 2 2 3 2 4
Alors, quelles erreurs avez-vous?
J'ai un problème logique avec le codage. Ce n'est pas l'analyse de la ligne comme je l'aurais voulu.
Veuillez mettre à jour le problème avec ce que le code actuel est de produire donné ci-dessus des entrées.
Le code actuel ne l'analyse par des virgules. Mais il a les questions suivantes. 1) Il n'est pas concaténer le préfixe et le suffixe.e.g. Je reçois Apple01,02 dans des lignes distinctes. Il est censé sortie Apple01, Apple02 dans des lignes séparées 2)Ne produisent pas de parent-enfant ID de numérotation.
Le projet de loi, je vous remercie pour les commentaires. Je suis nouveau sur le codage et ayant un problème de dépannage
J'ai un problème logique avec le codage. Ce n'est pas l'analyse de la ligne comme je l'aurais voulu.
Veuillez mettre à jour le problème avec ce que le code actuel est de produire donné ci-dessus des entrées.
Le code actuel ne l'analyse par des virgules. Mais il a les questions suivantes. 1) Il n'est pas concaténer le préfixe et le suffixe.e.g. Je reçois Apple01,02 dans des lignes distinctes. Il est censé sortie Apple01, Apple02 dans des lignes séparées 2)Ne produisent pas de parent-enfant ID de numérotation.
Le projet de loi, je vous remercie pour les commentaires. Je suis nouveau sur le codage et ayant un problème de dépannage
OriginalL'auteur ElegantFellow | 2012-03-05
Vous devez vous connecter pour publier un commentaire.
Si vous trouvez que j'ai pédant dans cette réponse, il n'est pas mon intention. Basé sur le commentaire "je suis nouveau au codage et à avoir un problème de dépannage" je voulais marcher à travers mes observations et comment j'en suis venu à eux.
L'analyse du problème
Le désir est de diviser une ligne en plusieurs lignes de sortie basé sur un délimité le champ associé à la ligne.
Le code tel qu'il se présente aujourd'hui est de générer le nombre approprié de lignes de sorte que vous avez la partie asynchrone (split) dans le script, de travail, de sorte que c'est un plus. Ce qui doit arriver, c'est que nous avons besoin de 1) Remplir l'Enfant de l'ID de la colonne 2) Appliquer l'élément préfixe pour toutes les lignes suivantes lors de la génération de l'enfant les éléments.
Je traiter la plupart de chaque problème comme ça. Que suis-je en train d'accomplir? Qu'est-ce que travailler? Ce n'est pas de travail? Ce qui doit être fait pour le faire fonctionner. La décomposition de problèmes en problèmes plus petits et plus petits problèmes éventuellement aboutir à quelque chose que vous peut faire.
Code observations
Le coller dans le code fourni a entraîné une erreur que itemList n'a pas été déclarée. En fonction de l'utilisation, il semble qu'il était destiné à être itemName.
Après la fixation, vous devriez remarquer l'IDE indiquant que vous avez 2 variables inutilisées (posID, childID) et que le
variable txHolder is used before it's been assigned a value. A null reference exception could result at runtime.
Mon collègue le dit si souvent mises en garde sont des erreurs qui n'ont pas grandi encore donc, mon conseil pour vous comme un jeune développeur est de prêter attention aux avertissements, sauf si vous explicitement attendre le compilateur pour vous avertir dit scénario.Prise en main
Avec un choix entre la résolution de l'Enfant de l'ID de la situation et le nom de préfixe/suffixe trucs, j'aimerais commencer avec un facile, l'enfant id
La génération d'une clé de substitution
C'est la fantaisie phrase titre que si vous lancez une recherche sur vous auriez beaucoup de coups à ssistalk ou sqlis ou un nombre quelconque de fabuleusement smart blogueurs. Diable, bien sûr, est de savoir quoi chercher. Non où avez-vous jamais calculer ou de céder l'enfant la valeur de l'id du flux qui bien sûr est pourquoi il ne s'affiche pas.
Nous avons simplement besoin de générer de plus en plus monotone nombre qui se réinitialise à chaque fois la source de changements d'identité. Je fais l'hypothèse que le trafic entrant l'ID est unique dans les données entrantes comme une vente, le numéro de facture unique en son genre et nous sommes à la séparation des articles achetés. Toutefois, si ces Identifiants ont été répétées dans le jeu de données, peut-être, au lieu de représenter des numéros de facture, elles sont id vendeur. Personne de ventes 1 peut avoir une autre ligne dans le lot à vendre des légumes. C'est un scénario plus complexe et nous pouvons revoir si qui décrit mieux votre source de données.
Il y a deux parties à la génération de nos clé de substitution (encore une fois, pause des problèmes en petits morceaux). La première chose à faire est de faire une chose qui compte de 1 à N. Vous avez défini un
childId
variable pour la servir. Initialiser cette variable (1), puis l'incrémente à l'intérieur de votre boucle foreach.Maintenant que nous comptage, nous avons besoin de pousser cette valeur sur le flux de sortie. Mettre les deux ensemble, pourrait ressembler
Exécuter le package et le succès! Scratch générer la clé de substitution de la liste.
Chaîne de brassage
Je ne sais pas d'un terme de fantaisie pour ce qui doit être fait dans l'autre moitié du problème, mais j'avais besoin d'un titre pour cette section. Compte tenu de la source de données, celui-ci pourrait être plus difficile d'obtenir le droit. Vous avez fourni la valeur de Apple01, Banana01, Spoon1, Fork1. Il semble qu'il y ait un modèle là (nom concaténé avec un code), mais ce que c'est? Votre code indique que si c'est moins de 3, c'est un suffixe, mais comment savez-vous ce que le base est? La première ligne utilise un 0 et il est à deux chiffres tandis que la seconde ligne ne pas utiliser un zéro. C'est là que vous avez besoin de comprendre vos données. Quelle est la règle pour identifier le "code" de la première ligne? Certains algorithmes
J'ai fait aucune modification à apporter au généré nom de l'élément de travail au-delà de la fixation de variables locales ItemName/itemList. Code Final élimine les avertissements en supprimant PosID et de l'initialisation d'txtHolder à une chaîne vide.
Je ne peux pas appliquer la cohérence des données de longueur. Il semble que je ne peux pas filtrer toutes les particularités de mes données, mais juste de les purifier en général modèle pour l'avenir de la convivialité. Une fois que les données sont nettoyées, j'ai l'intention de faire référence à ces données à l'aide de recherche floue comme Levenshtein ou de l'Indice de Jaccard. Merci encore pour votre aimable aide. La clé de substitution fonctionne à merveille.
OriginalL'auteur billinkc