Symptômes

Considérez le scénario suivant :

  • Vous créez un modèle de package SQL Server Integration Services (SSIS) qui utilise le composant de nettoyage de données Quality Services (DQS) pour nettoyer les données de flux de données dans un environnement Microsoft SQL Server 2012 ou 2014 de Microsoft SQL Server.

  • Vous déplacez le package SSIS à partir d’un environnement de serveur dans un environnement de serveur différent. Par exemple, vous déployez le package SSIS vers un autre serveur.

  • Vous mettez à jour le Gestionnaire de connexions de nettoyage DQS pour pointer vers le nouveau nom du serveur.


Dans ce cas de figure, le message d’erreur suivant s’affiche :

Erreur : nom de la tâche de flux de données : Microsoft.Ssdqs.Infra.Exceptions.EntryPointException : la Base de connaissances n’existe pas [Id : 1000999].
à Microsoft.Ssdqs.Proxy.Database.DBAccessClient.Exec()
à Microsoft.Ssdqs.Proxy.EntryPoint.KnowledgebaseManagementEntryPointClient.DQProjectGetById (id Int64)
à Microsoft.Ssdqs.Component.DataCorrection.Logic.DataCorrectionComponent.PostExecute()
à Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostPostExecute (wrapper IDTSManagedComponentWrapper100)

Erreur : nom de la tâche de flux de données : System.NullReferenceException : ne pas définie à une instance d’un objet de référence d’objet.
à Microsoft.Ssdqs.Component.DataCorrection.Logic.DataCorrectionComponent.ProcessChunk (ReadOnlyCollection'1 fieldMappings, ReadOnlyCollection'1 enregistre, CorrectedRecordsStatusStatistics et correctedRecordsTotalStatusStatistics)
à Microsoft.Ssdqs.Component.DataCorrection.Logic.DataCorrectionComponent.ProcessInput (Int32 inputID, PipelineBuffer tampon)
à Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostProcessInput (IDTSManagedComponentWrapper100 wrapper, Int32 inputID, IDTSBuffer100 pDTSBuffer, IntPtr bufferWirePacket)


Cause

Ce problème se produit lorsque le numéro d’identification de base de connaissances DQS, comme 1000999, n’existe pas sur l’instance de destination de SQL Server dans la base de données DQS_MAIN.

Le nombre peut varier chaque fois que vous modifiez et publiez la base de connaissances (KB) de DQS. Le numéro d’identification est un identificateur unique pour chaque publication Ko de DQS et correspond à uniquement un Ko.

Lorsque le package SSIS est rendues persistantes dans le fichier .dtsx ou dans la base de données SSISDB, l’ID numérique de la base de connaissances de DQS est mémorisée dans les balises de la conception, comme dans l’exemple suivant :

< propriété
dataType="System.Int64"
name="KnowledgebaseName"
typeConverter="NOTBROWSABLE">1000999</property>
L’objectif est que le nom de serveur DQS et le nombre de Ko reste cohérents même si vous déplacez les packages SSIS vers différents serveurs.

Pour vérifier qu’il s’agit de la cause, se connecter pour le moteur de base de données SQL Server qui héberge les bases de données des Services de qualité de données, puis exécutez la requête suivante pour déterminer l’existence de l’ID de la base de connaissances qui est mentionné dans le message d’erreur :

SELECT * from [DQS_MAIN].[dbo].[A_KNOWLEDGEBASE] where id=1000999


Remarque  Si vous exportez un Ko DQS puis importerez la base de connaissances dans une instance DQS, le numéro d’identification changera lorsque la base de connaissances est importé et publié. Par conséquent, même si les éléments de conception de base de connaissances sont identiques, le nombre peut devenir désynchronisé entre la conception de package SSIS et la base de connaissances DQS publiés.

Remarque La propriété KnowledgebaseName du composant de nettoyage DQS n’est pas dynamique et n’est pas configurable avec le standard SSIS configurations, expressions, des variables ou des environnements. Il s’agit d’une limitation de conception dans SQL Server 2012 et 2014 de SQL Server.

Solution de contournement

Pour contourner ce problème, procédez comme suit :

  1. Modifier le nom du serveur DQS ou déployer le package SSIS vers un environnement de serveur différent.

  2. Ouvrir le Package d’intégration de Services dans le Concepteur d’outils de données de SQL Server.

  3. Localisez la tâche de flux de données affectées.

  4. Double-cliquez sur le composant de nettoyage DQS pour afficher l’éditeur personnalisé.

  5. Mettre à jour la base de connaissances qui est répertorié dans la liste déroulante Base de connaissances de qualité de données .

  6. Cliquez sur OKet enregistrez le package.


Pour éviter ce problème, assurez-vous que vous pointez sur la même instance DQS même lorsque vous déployez des packages SSIS entre différents serveurs. Par conséquent, lors du développement de SSIS et avant le déploiement pour un système de production, vous souhaiterez ajuster les noms de serveur dans le Gestionnaire de connexions et d’effectuer cette solution de contournement.

Remarque  Bien que vous pouvez modifier manuellement les balises XML dans une conception de package SSIS, nous ne gèrent pas cette opération. Peut-être cela à vos risques et périls, afficher le code du fichier .dtsx dans un éditeur de texte, localisez la balise XML appropriée, puis en réglant la propriété KnowledgeBaseName pour corriger le numéro de. Pour déterminer le nombre possible, exécutez la requête suivante pour passer en revue la colonne ID pour chaque nom correspondant de la base de connaissances :

SELECT ID from [DQS_MAIN].[dbo].[A_KNOWLEDGEBASE] where Name like '%KBName%'


Besoin d’aide ?

Développez vos compétences

Découvrez des formations >

Accédez aux nouvelles fonctionnalités en avant-première

Rejoindre Microsoft Insider >

Ces informations vous ont-elles été utiles ?

Dans quelle mesure êtes-vous satisfait(e) de la qualité de la langue ?
Qu’est-ce qui a affecté votre expérience ?

Nous vous remercions de vos commentaires.

×