2012-11-07 14 views
5

All'interno di un flusso di dati, è possibile eseguire una ricerca, inserire le righe non corrispondenti, rieseguire la ricerca e quindi continuare con il set di dati completo (originale)?Come posso continuare il processo dopo aver inserito righe di ricerca non corrispondenti in una tabella?

non riesco a vedere come si ottiene/ri-utilizzare le righe inserite dopo che sono andati ad un OLE DB Destination, né posso vedere che un Multicast poteva aspettare fino a completa l'inserto ramo di ricerca (e quindi l'unione tutti indietro -in).

Se non può essere eseguito all'interno del flusso di dati, dovrei ripetere tutte le mie logiche di filtraggio in un'attività di flusso di dati precedente semplicemente per fare prima le inserzioni di ricerca?

Questa potrebbe essere una domanda ovvia/già risposta, ma non riesco a trovare molto dopo la ricerca.

+0

Non capisco. Hai i dati della prima query, hai anche i dati che vuoi inserire. Perché non li combini e li usi separatamente? Multicast i dati di inserimento nella destinazione OLEDB e in una destinazione unione. Invia i dati originali a questa unione (e li metti in multicast dove vuoi) e ora disponi dell'intero set di dati. –

+0

Non dovrei aspettare fino a quando l'inserimento non è completo, quindi posso rieseguire la ricerca e riprendere il percorso normale? – PeterX

risposta

3

Questo non è possibile all'interno di un singolo flusso di dati. Ci sono varie "soluzioni" in giro se sei abbastanza google, ma trascurano la realtà architettonica che le file viaggiano lungo un flusso di dati in buffer/batch, elaborate in parallelo.

Quindi l'immagine ha più "nuove" righe che arrivano in 2 buffer adiacenti. Non è possibile garantire che la gestione downstream di "nuove" righe dal buffer 1 sia stata completata prima che il buffer 2 tocchi la ricerca upstream. Ciò comporterà l'inserimento di più "nuove" righe nella tabella di destinazione della ricerca per la stessa chiave.

È necessario disporre di un'attività di flusso di dati a monte che esegua tutti gli inserimenti di ricerca richiesti. Questa soluzione sarà una soluzione più efficiente in fase di esecuzione, poiché gli inserimenti di ricerca possono utilizzare Fast Load e Table Lock e la ricerca downstream può essere Full Cache.

+0

Grazie. Quindi forse la domanda ora deve concentrarsi su "come riutilizzare la stessa logica prima della ricerca" sia nel flusso di dati upstream che nel flusso di dati a valle. Forse un pacchetto riutilizzabile che esegue gli stessi passaggi, ma non riesco ancora a vedere un percorso lavorabile con quello. – PeterX

+0

Sì, "riutilizzare la logica" sarebbe bello ma realisticamente - questo è SSIS. Forse è possibile spostare il codice SQL in variabili e spostare le ricerche su una precedente attività di flusso di dati che costruisce le cache di ricerca, ma probabilmente lo si deve riutilizzare. –

Problemi correlati