ErrorColumn valeur n'existe pas en tant que Lignée ID
Lors de l'insertion dans une table de destination, toute erreur qui se produit est redirigé vers la table des Erreurs où l'on peut voir le ErrorCode
et ErrorColumn
. Le problème est que nous avons obtenu une valeur dans ErrorColumn
qui n'existe nulle part dans le package. À savoir, il n'y a pas une seule colonne qui a LineageID
qui est égal à ErrorColumn
.
Plus tard, tout en permettant la valeur NULL dans chaque colonne, un par un, j'ai trouvé la colonne qui est la cause du problème. Lorsque j'ai analysé la colonne à l'intérieur d'une tâche de Flux de Données, il n'a pas le LineageID
qui a été rapporté dans un ErrorColumn
. Par exemple, le ErrorColumn
rapporté était de 413, mais LineageID
est de 84 au cours de la première fusion, et elle change au cours de différents tris. Indépendamment de cela, il ne devient jamais 413. Cette ErrorColumn
ID (413), il n'existe pas encore, il est signalé au cours de l'erreur de redirection insérer dans destination, source d'Erreur (tableau).
J'ai vérifié de nombreux sites, mais ils ont tous suggéré l'énumération dans ComponenteMetaData.InputCollection
ou ComponentMetaData.OutputCollection
dans une tâche de script, puis d'énumérer les colonnes afin de trouver LineageID
, mais c'était sans succès.
Comme je l'ai dit, j'ai résolu le problème, mais comme nous sommes dans le stade précoce du processus ETL, ce qui pourrait se produire dans certains autres cas. Comment ce problème peut être abordé?
OriginalL'auteur Husein Roncevic | 2013-12-03
Vous devez vous connecter pour publier un commentaire.
Je suis la copie de ma réponse afin que nous puissions obtenir d'une autorité Q&A sur le site
Quel est le moyen le plus simple pour trouver le nom de la colonne à partir de Lineageid dans SSIS
Je me souviens en disant que cela ne peut pas être si difficile que ça, je peux écrire un script dans l'erreur de redirection de recherche le nom de la colonne à partir de la collection d'entrée.
string badColumn = this.ComponentMetaData.InputCollection[Row.ErrorColumn].Name;
Ce que j'ai appris était le défaut de la colonne n'est pas dans cette collection. Bien, mais c'est le ErrorColumn indiqué n'est pas tout à fait ce dont j'avais besoin. Je ne pouvais pas trouver ce paquet, mais voici un exemple de pourquoi je ne pouvais pas obtenir ce dont j'avais besoin. J'espère que vous aurez plus de chance.
C'est un simple flux de données qui va générer une erreur une fois qu'il frappe la colonne dérivée en raison de la division par zéro. La colonne Dérivée génère une nouvelle colonne de sortie (LookAtMe) comme le résultat de la division. Le visualiseur de données sur la Sortie d'Erreur me dit que le défaut de la colonne est de 73. En utilisant le script ci-dessus, la logique, si j'ai tenté d'accéder à la colonne 73 dans la collection d'entrée, c'est voué à l'échec parce que ce n'est pas dans la collection. LineageID 73 est LookAtMe et LookAtMe n'est pas dans mon erreur de branche, c'est seulement dans la non-erreur de branche.
C'est une copie de mon XML et vous pouvez le voir, oui, le outputColumn id 73 est LookAtme.
Je voulais vraiment que les données et si je suis intelligent, donc je peux l'union de tous mes résultats et ensuite de fractionnement conditionnel à revenir à l'obtenir. Le problème est, L'Union de Tous est une transformation asynchrone. Async transformations de résultat dans les données copiées à partir d'un ensemble de beurres à l'autre, entraînant...nouvelle lignée id être affecté de sorte que même avec un syndicat, le tout amenant les deux flux de retour ensemble, vous ne seriez pas en mesure de se rappeler le flux de données de la chaîne pour trouver que l'origine de la lignée id parce que c'est dans un autre tampon.
Autour de ce point, j'ai concédé la défaite et décidé que je pouvais vivre sans intelligent/utiles les rapports d'erreurs dans mes paquets.
2012
La version 2012 de SSIS changé la façon dont ils ont utilisé LineageID de garder les colonnes de la synchronisation. Au lieu de composants de la cartographie d'un nombre à partir d'une source à l'évier, ils sont allés avec une représentation textuelle de l'élément. Le XML référencé ci-dessus ressemblerait maintenant comme
Si vous regardez la ErrorColumn maintenant, ils n'ont même pas de référence textuelle lineageid. Au lieu de cela, ils font référence à la colonne 6. Si je recherche par le biais de la source XML, je ne vais pas à trouver une référence à la Colonne 6 de n'importe où. Il doit y avoir un certain moment de l'exécution de la magie.
Le résultat net est malheureusement la même - vous ne pouvez pas accéder à la colonne d'erreur car il est en cours de création dans cette partie, car elle n'existe que dans les colonnes de Sortie de la collection. Il n'est pas disponible dans les Colonnes d'Erreur de la collection.
outputColumn
que vous montrez dans votre exemple ne sera pas de ce format dans SSIS 2012. LineageID n'est pas une valeur numérique, mais plutôt une valeur de chaîne qui ressemble à un chemin d'accès. En tout cas merci pour la réponse, mais il doit y avoir un moyen d'identifier la problématique de la colonne.Convenu que le XML a été daté j'ai donc mis à jour la réponse à l'adresse 2012. J'ai hâte de vous la résolution du problème et la publication d'une réponse que j'ai encore à découvrir, malgré des tentatives répétées.
Salut Downvoter (@TheOptimusPrimus) Pouvez-vous m'aider à comprendre ce à propos de cette réponse n'est pas utile que le DV bouton indique donc que je peut améliorer la réponse?
Depuis c'est le plus haut voté répondre à ce point, je voudrais souligner la solution que j'ai trouvé dans cette réponse,
OriginalL'auteur billinkc
Je réalise que j'ai une réponse tardive, mais je suis de nouveau à la SSIS de jeu. J'ai créé une solution qui
Découvrez la solution complète ici.
MODIFIER
Voici la version courte.
execsObj
etlineageIds
4. Créer un Script Composant de Flux de données avec accès En lecture seule à
lineageIds
et le code suivant.Certainement une solide approche, mais à s'adapter AFIN que les normes de la communauté, vous pourriez vouloir voir si vous pouvez incorporer le matériau de lien ici. La théorie de l'être si le lien est mort, si trop l'utilité de la réponse pour les futurs lecteurs
OriginalL'auteur sorrell
Clic droit sur CSV composant (et de nombreux autres composants) et sélectionnez "afficher l'éditeur avancé". Allez au dernier onglet, "entrée et sortie" propriétés de la
Sur cet écran rechercher dans l'arborescence de menu pour vous des colonnes de sortie (PAS(!) colonnes externes). Ceux-ci ont la lignée de l'id dans le "commun" propriétés de la
Il y a beaucoup de jabber que c'est dur à trouver, impossible de le trouver sans avoir à ré-écrire le code de visual studio et de ce pas, mais je viens de vérifier ce sur 2010 et en 2012 sur des systèmes différents et il n'est pas plus difficile que je viens de décrire.
Script Component
de sorte que je peux ajouter le nom de la colonne dans la table des erreurs dans une base de données. Manuellement ce n'est pas une solution pour mon projet.OriginalL'auteur Tristan