2010-05-17 2 views
3

J'ai une table avec trois champs, un champ d'identité, et j'ai besoin d'ajouter de nouveaux enregistrements d'une source qui a les deux autres champs. J'utilise SSIS, et je pense que je devrais utiliser l'outil de fusion, car l'une des sources n'est pas dans la base de données locale. Mais, je suis confus par l'outil de fusion et le processus approprié.Instructions pour l'utilisation de la tâche de fusion dans SSIS

J'ai ma source (une table Oracle), et j'obtiens deux champs, well_id et well_name, avec un tri après, tri par well_id. J'ai la table de destination (serveur sql), et je l'utilise aussi comme source. Il a trois champs: well_key (champ d'identité), well_id, et well_name, et j'ai alors une tâche de tri, triant sur well_id. Les deux sont entrées dans ma tâche de fusion. J'allais sortir sur une table temporaire, puis récupérer les nouveaux enregistrements dans la table du serveur sql. Cependant, je ne pense pas que ce soit la meilleure façon d'utiliser cet outil. Quelles sont les étapes appropriées pour une fusion comme celle-ci? L'une des raisons pour lesquelles je remets en question cette méthode est que ma fusion a une erreur, me disant que l'entrée "Merge Input 2" doit être triée, mais que sa source est une tâche de tri, donc elle est triée.

Exemple de données

SQL Well (before merge) 
well_key well_id well_name 
1   123  well k 
2   292  well c 
3   344  well t 
5   439  well d 

Oracle Well 
well_id  well_name 
123   well k 
292   well c 
311   well y 
344   well t 
439   well d 
532   well j 

SQL Well (after merge) 
well_key well_id well_name 
1   123  well k 
2   292  well c 
3   344  well t 
5   439  well d 
6   311  well y 
7   532  well j 

Serait-il préférable de charger mon Oracle bien dans un fichier local temporaire, puis il suffit d'utiliser un insert sql statment là-dessus?

Répondre

4

Tout d'abord, je recommande fortement de se débarrasser de la transformation de tri avant de fusionner. Le tri est très coûteux, bloquant la transformation asynchrone et peut être facilement évité en passant commande et en modifiant vos propriétés d'avance de vos colonnes de sortie vers issorted = true et en changeant la propriété sortkeyposition de cette colonne à 1. N'oubliez pas d'ajouter votre Trier par dans votre tsql depuis la source db ole ne fait pas automatiquement pour vous:

Synchronous vs Asynchronous

Oledb Src IsSorted Property

Ensuite, je tester la performance du pkg en utilisant la fusion. On dirait que les champs que vous tirez ne sont pas si gros; cependant, s'il y a des dizaines de millions d'enregistrements, je vous recommande également de créer un pkg qui place les données dans deux tables de transfert, les joignant, puis insérant les données comme vous l'avez suggéré ci-dessus pour voir si vous obtenez de meilleures performances. cette approche.

Espérons que cela aide.

+0

Examinez l'instruction MERGE en combinaison avec les tables de transfert ... – IMHO

+0

J'ai supprimé la tâche de tri et ajouté des tris aux deux entrées. Je n'ai jamais pu avoir la deuxième entrée pour reconnaître qu'elle a été triée. Vos directions sont claires, et cela a bien fonctionné sur la première entrée. Parce que je me suis battu sans succès contre la fusion, j'essaye une piste complètement différente, et essaye de fusionner en utilisant le code SQL contre un resultset. Cela cause aussi des problèmes, alors je peux y revenir. Il y a seulement 10 000 enregistrements ou plus, et ce sont de petites données dans les champs. – thursdaysgeek

Questions connexes