Comment faire pour éliminer la fraction inutilisée de la sortie de la colonne " mises en garde dans SSIS emplois?
Je suis en train d'essayer de se débarrasser de quelques fausses mises en garde dans mon SSIS de journal en cours. Je vais avoir un tas de mises en garde sur les colonnes inutilisées dans les tâches qui utilisent SQL brut pour faire leur travail. J'ai un Flux de Données responsable de l'archivage des données dans une table intermédiaire avant le chargement de nouvelles données. Le Flux de Données ressemble à ceci:
+--------------------+
| OLEDB Source task: |
| read staging table |
+--------------------+
|
|
+---------------------------+
| OLEDB Command task: |
| upsert into history table |
+---------------------------+
|
|
+---------------------------+
| OLEDB Command task: |
| delete from staging table |
+---------------------------+
mon upsert la tâche est quelque chose comme:
--------------------------------------
-- update existing rows first...
update history
set field1 = s.field1
...
from history h
inner join staging s
on h.id = s.id
where h.last_edit_date <> s.last_edit_date -- only update changed records
-- ... then insert new rows
insert into history
select s.*
from staging s
join history h
on h.id = s.id
where h.id is null
--------------------------------------
La tâche de nettoyage est également une commande SQL:
--------------------------------------
delete from staging
--------------------------------------
Depuis le upsert tâche n'ont pas de sortie définitions de colonne, je vais avoir un tas de mises en garde dans le journal:
[DTS.Pipeline] Warning: The output column "product_id" (693) on output
"OLE DB Source Output" (692) and component "read Piv_product staging table" (681)
is not subsequently used in the Data Flow task. Removing this unused output column
can increase Data Flow task performance.
Comment puis-je éliminer les références à ces colonnes? J'ai essayé de les déposer dans quelques tâches différentes, mais aucune d'entre elles semblent laisser moi "avaler" les colonnes d'entrée et les supprimer à partir de la tâche de production. J'aimerais garder mes journaux propre, alors je ne vois que des problèmes réels. Des idées?
Merci!
OriginalL'auteur Val | 2008-11-05
Vous devez vous connecter pour publier un commentaire.
Union All - sélectionnez uniquement les colonnes que vous voulez passer par - supprimer les autres.
Je pensais qu'ils allaient traiter de cette question dans la version de 2008 pour permettre à colonnes garni/supprimés à partir de la canalisation.
OriginalL'auteur Cade Roux
OK, j'ai obtenu une solution de contournement sur la Les forums MSDN:
utiliser un Composant de Script de transformation entre la tâche 1 et 2; sélectionner toutes les colonnes d'entrée; quitter le corps d'un script vide.
Qui consomme les colonnes, les processus de travail correctement et aucun avertissement n'est connecté.
Pas encore clair pourquoi j'ai besoin de la Source OLEDB à tous, depuis le SQL dans la tâche 2 se connecte à la source de tables et de fait tout le travail, mais quand j'enlève la Source OLEDB le flux de données s'exécute mais ne traite pas des lignes, la mise en scène de la table n'est jamais vide, et puis le procédé en aval de mettre les lignes modifiées dans la table intermédiaire échoue en raison de PK violations. Mais c'est un problème pour un autre jour. C'est un peu maladroit, mais mon des journaux sont propres.
OriginalL'auteur Val
Les avertissements de votre pipeline sont causés par des colonnes choisies dans votre source de données qui ne sont pas utilisés dans toutes les Tâches à venir.
La solution facile c'est double-cliquez sur votre source de données. Dans votre cas (OLEDB Source de la tâche: |
lecture | mise en scène de la table), Puis cliquez sur les colonnes et désélectionner toutes les colonnes que vous n'avez pas besoin dans vos futurs éléments de tâche.
Cela permettra d'éliminer ces avertissements à partir de votre journal en cours.
Cependant la lecture de votre article ci-dessus et comme expliqué par d'autres réponses que vous n'utilisez pas les colonnes de la Source de la Tâche, dans la suite des articles de sorte qu'il peut être tout simplement supprimé.
OriginalL'auteur Dale Wright
J'ai la même question. J'ai reçu une bonne réponse. Vous pouvez le trouver ici.
"Marque Wojciechowicz", A déclaré :
Voici quelques recommandations pour la réduction de la complexité, qui, à son tour, améliorer les performances:
sont pas par la suite utilisé de quelque façon, puis les retirer de la requête
ou décochez la case à partir de la source du composant. En supprimant des colonnes de cette façon les supprime de la mémoire tampon, qui occupent moins de mémoire.
OriginalL'auteur Ardalan Shahgholi
À la recherche à votre problème, je pense que vous êtes en utilisant SSIS "contre le grain". Je ne suis pas vraiment à la suite de ce que vous êtes la lecture de la table intermédiaire, depuis votre upsert ne semble pas dépendre uniquement dans une ligne particulière, pas plus que le nettoyage.
Il me semble que le nettoyage serait exécuté une fois pour chaque ligne, mais qui n'a pas vraiment de sens.
Les flux de données sont généralement pas utilisés pour exécuter des actions globales pour chaque ligne à venir dans le pipeline. Si vous utilisez un pipeline UPSERTs être géré à l'aide de Recherche (ou de tiers TableDifference) de composants et puis un scinder dans le pipeline à un OLEDB Destination (BULK INSERT) et un OLEDB Commande (une fois par JOUR) ou un autre OLDEB de Destination pour une "mise à JOUR de la table intermédiaire".
Normalement, je voudrais faire cela avec un Flux de données à charger la table intermédiaire, sans split, puis une seule Tâche d'Exécution SQL dans le flux de contrôle pour effectuer tout le reste dans la droite SQL UPSERT (comme vous l'avez) par appel à un SP.
OLEDBCommand est utile si vous NE voulez PAS avoir une table intermédiaire, et au lieu de lire un fichier plat et voulez exécuter une mise à JOUR ou d'INSÉRER à l'aide d'une Recherche de composant ou de quelque chose. Mais elle sera appelée pour chaque ligne dans le pipeline.
OriginalL'auteur Cade Roux
Votre
DataFlow Task
devrait terminer avec le "upsert". Puis retour dans le contrôle des flux de créer unExecute SQL Task
pour le supprimer de la mise en scène. Lien de votreDataFlow Task
à votre exec sql.Je n'utilise pas un outil 3ème partie de mon upserts, mais le faire comme Cade suggère, qui est de diviser votre flux de données dans de nouveaux dossiers que juste la tête pour un
OLE DB Destination
(ou similaire), et mettre à jour des enregistrements qui peut aller à votre oledb de commande pour les mises à jour. Vous pouvez diviser le débit à l'aide d'une fusion-rejoindre ou une recherche.OriginalL'auteur AdamH