3 votes

Quelle transformation SSIS peut exécuter la contrainte 'NOT IN' utilisée dans une requête SQL ?

J'ai deux sources de données OLEDB qui ont des colonnes similaires :

TMP_CRUZTRANS
-------------
CUENTA_CTE numeric (20,0)

TMP_CTACTE_S_USD
----------------
CON_OPE numeric(20,0)

Je dois soustraire toutes les valeurs similaires entre ces deux tables et conserver les lignes qui sont différentes. Existe-t-il une transformation/tâche au sein de SSIS qui puisse effectuer la soustraction de toutes les valeurs similaires entre ces deux tables et conserver les lignes qui sont différentes ? NOT IN La contrainte est normalement utilisée dans les requêtes SQL ?

Actuellement, j'effectue cette opération en utilisant Execute SQL Task sur Control Flow .

enter image description here

Le flux de données supérieur crée le premier tableau TMP_CRUZTRANS (Fusionner la jointure entre les 2 autres tables...) Mais je suppose que ce n'est pas important pour ma question) que j'ai besoin de garder les différentes valeurs avec la deuxième table.

Dans le cadre de la Execute SQL Task J'ai la déclaration suivante :

INSERT  INTO [dbo].[TMP_CYA] 
SELECT RUT_CLIE, CUENTA_CTE, MONTO_TRANSAC 
FROM [dbo].[TMP_CRUZTRANS]
WHERE CUENTA_CTE NOT IN (SELECT CON_OPE FROM TMP_CTACTE_S_USD)

Enfin, avec le nouveau tableau TMP_CYA Je peux continuer à travailler.

Le problème de cette approche est que le TMP_CRUZTRANS a environ 5 millions de lignes, il est donc TRÈS lent d'insérer toutes ces données dans une table à l'aide de la tâche Execute SQL. Il faut environ 5 heures pour effectuer cette opération. C'est pourquoi j'ai besoin de le faire à l'intérieur de la tâche Data Flow.

7voto

Vous pouvez utiliser Lookup transformation disponibles dans la tâche Data Flow pour répondre à vos besoins.

Voici un exemple qui illustre ce que vous essayez de faire.

Créer un paquet avec une tâche de flux de données. Dans la tâche de flux de données, utilisez OLE DB Source pour lire les données de votre table source. TMP_CRUZTRANS . Utiliser la transformation Lookup pour valider l'existence des valeurs par rapport à la table. dbo.TMP_CTACTE_S_USD entre des colonnes données. Rediriger ensuite la sortie non correspondante vers la destination OLE DB afin d'insérer des lignes dans la table. dbo.TMP_CYA

Voici à quoi ressemblerait la tâche de flux de données à la place de la tâche Execute SQL que vous utilisez actuellement.

Data flow task

Configurer le Lookup transformation comme indiqué ci-dessous :

Dans la page à onglet Général, sélectionnez Redirect rows to no match output de Specify how to handle rows with no matching entries car vous ne vous intéressez qu'aux lignes non correspondantes.

Lookup transformation General

Dans la page à onglet Connexion, sélectionnez le gestionnaire de connexion OLE DB approprié et sélectionnez la table dbo.TMP_CTACTE_S_USD. Il s'agit de la table par rapport à laquelle vous souhaitez valider les données.

Lookup transformation Connection

Dans la page à onglet Colonnes, faites glisser la colonne CUENTA_CTE et déposez-la sur CON_OPE pour établir la correspondance entre les tables source et de consultation. Cliquez sur OK.

Lookup transformation Columns

Lorsque vous connectez le Transformation de la consultation con Destination OLE DB , Sélection de l'entrée et de la sortie apparaît. Veillez à sélectionner Lookup No Match Output .

Voici l'exemple avant l'exécution du paquet.

Before execution

Vous pouvez constater que seules 2 lignes non correspondantes ont été transférées vers la destination OLE DB.

Execution

Vous pouvez remarquer que la table de destination contient maintenant les deux lignes non correspondantes après l'exécution du paquet.

After execution

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X