2012-11-07 2 views
5

A l'intérieur d'un flux de données, est-il possible d'effectuer une recherche, d'insérer les lignes non-assorties, de re-rechercher et de continuer avec l'ensemble de données complet (original)?Comment continuer le processus après l'insertion de lignes de recherche non correspondantes dans une table?

Je ne vois pas comment vous/réutiliser les lignes insérées après ils sont allés à un OLE DB Destination, et je ne peux voir que Multicast pourrait attendre une finalise la branche d'insertion de recherche (et l'union-les tous -dans).

Si cela ne peut pas être fait dans le flux de données, devrais-je répéter toute ma logique de filtrage dans une tâche précédente de flux de données simplement pour faire les insertions de recherche en premier?

Cela peut être une question évidente/déjà répondu, mais je ne peux pas trouver beaucoup après la recherche.

+0

Je ne comprends pas. Vous avez les données de la première requête, vous avez également les données que vous souhaitez insérer. Pourquoi ne les combinez-vous pas et ne les utilisez pas séparément? Multicast les données d'insertion vers la destination OLEDB et vers une destination d'union. Envoyer les données d'origine à cette union (et les envoyer en multidiffusion n'importe où ailleurs) et maintenant vous avez tout l'ensemble de données. –

+0

N'aurais-je pas besoin d'attendre la fin de l'insertion pour réexécuter la recherche et reprendre le chemin normal? – PeterX

Répondre

3

Ceci n'est pas possible dans un seul flux de données. Il y a différentes "solutions" autour si vous google assez, mais ils négligent la réalité architecturale que les lignes parcourent un flux de données dans des tampons/lots, traitées en parallèle.

Donc, l'image vous avez plusieurs "nouvelles" lignes arrivant dans 2 tampons adjacents. Il n'y a aucun moyen de garantir que votre traitement en aval des "nouvelles" lignes du tampon 1 a été achevé avant que le tampon 2 n'atteigne votre recherche amont. Cela entraînera l'insertion de plusieurs "nouvelles" lignes dans votre table cible de recherche pour la même clé.

Vous devez disposer d'une tâche de flux de données en amont qui effectue toutes les insertions de recherche requises. Ce sera une solution plus efficace globalement à l'exécution, car vos insertions de recherche peuvent utiliser Fast Load et Table Lock, et votre recherche en aval peut être Full Cache.

+0

Merci. Alors peut-être la question doit maintenant se concentrer sur "comment puis-je réutiliser la même logique avant la recherche" à la fois dans le flux de données en amont et le flux de données en aval. Peut-être un paquet réutilisable qui effectue les mêmes étapes, mais je ne vois pas encore de chemin praticable avec ça. – PeterX

+0

Oui "réutiliser la logique" serait bien mais réaliste - c'est SSIS. Peut-être pourriez-vous déplacer le code SQL dans Variables et déplacer Lookups vers une tâche de flux de données précédente qui crée des caches de recherche, mais c'est probablement à propos de la réutilisation. –

Questions connexes