Attività Flusso di dati

L'attività Flusso di dati incapsula il motore flusso di dati, che consente di spostare i dati dalle origini alle destinazioni e offre la possibilità di trasformare, pulire e modificare i dati durante lo spostamento. L'aggiunta di un'attività Flusso di dati al flusso di controllo di un pacchetto consente al pacchetto di estrarre, trasformare e caricare dati.

Un flusso di dati è costituito da almeno un componente dei flussi di dati, ma è in genere formato da un set di componenti dei flussi di dati opportunamente connessi: origini che estraggono i dati, trasformazioni che modificano, inviano o riepilogano i dati e destinazioni che caricano i dati. All'interno del flusso di dati i componenti sono connessi tramite percorsi. Ogni percorso specifica i due componenti che costituiscono l'inizio e la fine del percorso. Per ulteriori informazioni, vedere Elementi dei flussi di dati.

In fase di esecuzione l'attività Flusso di dati compila un piano di esecuzione, basato sul flusso di dati, che viene eseguito dal motore flusso di dati. È possibile creare un'attività Flusso di dati priva di flusso di dati, ma l'attività verrà eseguita solo se include almeno un flusso di dati.

Nella figura seguente viene illustrata un'attività Flusso di dati con un solo flusso di dati.

Flusso di dati

Un'attività Flusso di dati può includere più flussi di dati. Se un'attività copia più set di dati e l'ordine in cui i dati vengono copiati non è significativo, è consigliabile includere più flussi di dati in un'unica attività Flusso di dati. È ad esempio possibile creare cinque flussi di dati, ognuno dei quali copia dati da un file flat a una tabella delle dimensioni diversa in uno schema star di data warehouse.

Se un'attività flusso di dati contiene più flussi di dati, l'ordine di esecuzione verrà automaticamente determinato dal motore flusso di dati. Se l'ordine di esecuzione è rilevante, sarà pertanto necessario includere nel pacchetto più attività Flusso di dati, ognuna contenente un solo flusso di dati. Sarà quindi possibile applicare vincoli di precedenza per controllare l'ordine di esecuzione delle attività.

Nella figura seguente viene illustrata un'attività Flusso di dati che include più flussi di dati.

Flussi di dati

Un pacchetto può includere più attività Flusso di dati, come avviene in genere nei pacchetti complessi. Se ad esempio i flussi di dati contenuti in un pacchetto devono essere eseguiti in una sequenza specifica o alternati ad altre attività, sarà necessario utilizzare un'attività Flusso di dati distinta per ogni flusso di dati.

L'attività Flusso di dati gestisce anche i flussi degli errori. Quando, in fase di esecuzione, i componenti del flusso di dati convertono dati, eseguono ricerche o valutano espressioni, possono verificarsi errori a livello di riga. Può verificarsi un errore ad esempio quando si converte in un valore integer una colonna di dati con un valore stringa o se un'espressione tenta di eseguire una divisione per zero. Entrambe le operazioni provocano errori e le righe contenenti gli errori possono essere elaborate separatamente in un flusso degli errori. Per ulteriori informazioni sull'utilizzo di flussi degli errori nei flussi di dati dei pacchetti, vedere Gestione degli errori nel flusso di dati.

Per l'inserimento bulk dei dati di file di testo in un database di SQL Server, è possibile utilizzare l'attività Inserimento bulk anziché un'attività Flusso di dati e un flusso di dati. L'attività Inserimento bulk non consente tuttavia la trasformazione dei dati. Per ulteriori informazioni, vedere Attività Inserimento bulk.

Utilizzo di espressioni di proprietà con gli elementi di un flusso di dati

Molti componenti dei flussi di dati, ad esempio origini, trasformazioni e destinazioni, supportano l'utilizzo di espressioni di proprietà in alcune delle relative proprietà. Un'espressione di proprietà è un'espressione che sostituisce il valore della proprietà quando il pacchetto viene caricato. In fase di esecuzione il pacchetto utilizza i valori aggiornati delle proprietà. Le espressioni vengono compilate utilizzando la sintassi delle espressioni di Integration Services e possono includere funzioni, operatori, identificatori e variabili di Integration Services. Per ulteriori informazioni, vedere Guida di riferimento alle espressioni in Integration Services, Utilizzo di espressioni nei pacchetti e Utilizzo delle espressioni di proprietà nei pacchetti.

Se si crea un pacchetto in Business Intelligence Development Studio, le proprietà dei componenti di un flusso di dati che supportano espressioni di proprietà vengono esposte nell'attività Flusso di dati a cui appartengono. Per aggiungere, modificare e rimuovere espressioni di proprietà dei componenti di un flusso di dati, fare clic sull'attività Flusso di dati e quindi utilizzare la finestra Proprietà o l'editor dell'attività per aggiungere, modificare o eliminare espressioni di proprietà. Le espressioni di proprietà per l'attività Flusso di dati possono essere gestite nella finestra Proprietà.

Se il flusso di dati contiene componenti che utilizzano espressioni, anche le espressioni vengono esposte nella finestra Proprietà. Per visualizzare le espressioni, selezionare l'attività Flusso di dati a cui appartiene il componente. È possibile visualizzare le proprietà in base alle categorie o in ordine alfabetico. Se nella finestra Proprietà si utilizza la visualizzazione Per categoria, le espressioni non utilizzate in una proprietà specifica vengono visualizzate nella categoria Varie. Se si utilizza la visualizzazione in ordine alfabetico, le espressioni sono elencate in base al nome del componente del flusso di dati.

Voci di log

Integration Services include un set di eventi del log disponibili per tutte le attività. Integration Services offre inoltre voci di log personalizzate per molte attività. Per ulteriori informazioni, vedere Implementazione della registrazione nei pacchetti e Messaggi personalizzati per la registrazione. L'attività Flusso di dati include le voci di log personalizzate seguenti:

Voce di log

Descrizione

BufferSizeTuning

Indica che l'attività Flusso di dati ha modificato le dimensioni del buffer. In questa voce di log vengono indicati i motivi della modifica delle dimensioni del buffer e le nuove dimensioni temporanee del buffer.

OnPipelinePostEndOfRowset

Indica che a un componente è stato inviato il segnale di fine del set di righe, che viene impostato dall'ultima chiamata al metodo ProcessInput. Viene scritta una voce per ogni componente del flusso di dati che elabora dati di input. Tale voce include il nome del componente.

OnPipelinePostPrimeOutput

Indica che il componente ha completato l'ultima chiamata al metodo PrimeOutput. A seconda del flusso di dati, è possibile che vengano scritte più voci di log. Se il componente è un'origine, questa voce di log indica che tale componente ha terminato l'elaborazione delle righe.

OnPipelinePreEndOfRowset

Indica che un componente sta per ricevere il segnale di fine del set di righe, che viene impostato dall'ultima chiamata al metodo ProcessInput. Viene scritta una voce per ogni componente del flusso di dati che elabora dati di input. Tale voce include il nome del componente.

OnPipelinePrePrimeOutput

Indica che un componente sta per ricevere una chiamata dal metodo PrimeOutput. A seconda del flusso di dati, è possibile che vengano scritte più voci di log.

OnPipelineRowsSent

Specifica il numero delle righe inviate all'input di un componente da una chiamata al metodo ProcessInput. La voce di log include il nome del componente.

PipelineBufferLeak

Fornisce informazioni su tutti i componenti che hanno mantenuto attivi i buffer dopo la chiusura di Gestione buffer. Se vi è ancora un buffer attivo, le risorse dei buffer non sono state rilasciate e potrebbero verificarsi perdite di memoria. Nella voce di log vengono indicati il nome del componente e l'ID del buffer.

PipelineComponentTime

Indica la quantità di tempo (in millisecondi) utilizzata dal componente per ciascuno dei cinque passaggi principali dell'elaborazione, ovvero Validate, PreExecute, PostExecute, ProcessInput e ProcessOutput.

PipelineExecutionPlan

Specifica il piano di esecuzione del flusso di dati. Il piano di esecuzione offre informazioni sulle modalità di invio dei buffer ai componenti. Insieme alla voce di log PipelineExecutionTrees, queste informazioni illustrano ciò che avviene nell'attività Flusso di dati.

PipelineExecutionTrees

Specifica gli alberi di esecuzione del layout nel flusso di dati. L'utilità di pianificazione del motore flusso di dati utilizza tali alberi per compilare il piano di esecuzione del flusso di dati.

PipelineInitialization

Fornisce le informazioni di inizializzazione relative all'attività, che includono le directory da utilizzare per l'archiviazione temporanea dei dati BLOB, le dimensioni predefinite del buffer e il numero di righe in un buffer. A seconda della configurazione dell'attività Flusso di dati, è possibile che vengano scritte più voci di log.

Queste voci di log forniscono numerose informazioni sull'esecuzione dell'attività Flusso di dati ogni volta che si esegue un pacchetto. L'esecuzione ripetuta dei pacchetti consente nel tempo di acquisire importanti informazioni cronologiche sull'elaborazione eseguita dall'attività, gli eventuali problemi che possono influire sulle prestazioni e il volume di dati gestito dall'attività.

Per ulteriori informazioni sull'utilizzo di queste voci di log per monitorare e migliorare le prestazioni del flusso di dati, vedere uno degli argomenti seguenti:

Messaggi di esempio di un'attività Flusso di dati

Nella tabella seguente vengono elencati messaggi di esempio per le voci di log relative a un pacchetto molto semplice. Il pacchetto utilizza un'origine OLE DB per estrarre dati da una tabella, una trasformazione Ordinamento per ordinare i dati e una destinazione OLE DB per scrivere i dati in una tabella diversa.

Voce di log

Messaggi

BufferSizeTuning

Le righe nel tipo di buffer 0 porterebbero a dimensioni del buffer maggiori del massimo configurato. Nei buffer di questo tipo saranno presenti solo 9637 righe.

Le righe nel tipo di buffer 2 porterebbero a dimensioni del buffer maggiori del massimo configurato. Nei buffer di questo tipo saranno presenti solo 9497 righe.

Le righe nel tipo di buffer 3 porterebbero a dimensioni del buffer maggiori del massimo configurato. Nei buffer di questo tipo saranno presenti solo 9497 righe.

OnPipelinePostEndOfRowset

A un componente verrà inviato il segnale di fine del set di righe. : 1180 : Ordinamento : 1181 : Input ordinamento

A un componente verrà inviato il segnale di fine del set di righe. : 1291 : Destinazione OLE DB : 1304 : Input destinazione OLE DB

OnPipelinePostPrimeOutput

Un componente ha completato la chiamata PrimeOutput. : 1180 : Ordinamento

Un componente ha completato la chiamata PrimeOutput. : 1 : Origine OLE DB

OnPipelinePreEndOfRowset

Un componente ha terminato l'elaborazione di tutte le righe. : 1180 : Ordinamento : 1181 : Input ordinamento

Un componente ha terminato l'elaborazione di tutte le righe. : 1291 : Destinazione OLE DB : 1304 : Input destinazione OLE DB

OnPipelinePrePrimeOutput

Verrà eseguita una chiamata di PrimeOutput su un componente. : 1180 : Ordinamento

Verrà eseguita una chiamata di PrimeOutput su un componente. : 1 : Origine OLE DB

OnPipelineRowsSent

Sono state passate righe come input per un componente del flusso di dati. : : 1185 : Output origine OLE DB : 1180 : Ordinamento : 1181 : Input ordinamento: 76

Sono state passate righe come input per un componente del flusso di dati. : : 1308 : Output ordinamento: 1291 : Destinazione OLE DB : 1304 : Input destinazione OLE DB : 76

PipelineComponentTime

356 millisecondi dedicati da "Calculate LineItemTotalCost" (3522) a ProcessInput.

79 millisecondi dedicati da "Sum Quantity and LineItemTotalCost" (3619) a ProcessInput.

16 millisecondi dedicati da "Calculate Average Cost" (3662) a ProcessInput.

125 millisecondi dedicati da "Sort by ProductID" (3717) a ProcessInput.

0 millisecondi dedicati da "Load Data" (3773) a ProcessInput.

688 millisecondi dedicati da "Extract Data" (3869) per consentire a PrimeOutput di riempire i buffer in "Output origine OLE DB" (3879).

141 millisecondi dedicati da "Sum Quantity and LineItemTotalCost" (3619) per consentire a PrimeOutput di riempire i buffer in "Output di aggregazione 1" (3621).

16 millisecondi dedicati da "Sort by ProductID" (3717) per consentire a PrimeOutput di riempire i buffer in "Output ordinamento" (3719).

PipelineExecutionPlan

SourceThread0

Unità: 1

Si applica a: 1180 1291

Elenco operazioni output

CreatePrimeBuffer di tipo 1 per l'ID di output 11.

SetBufferListener: "WorkThread0" per ID di input 1181

CreatePrimeBuffer di tipo 3 per l'ID di output 12.

CallPrimeOutput su componente "Origine OLE DB" (1)

Fine elenco operazioni output

End SourceThread0

WorkThread0

Unità: 1180

Si applica a: 1180 1291

Elenco operazioni input, ID input 1181 (1 prevista fine delle righe)

CallProcessInput sull'ID di input 1181 sul componente "Ordinamento" (1180) per il tipo di vista 2

Fine elenco operazioni input per l'input 1181

Elenco operazioni output

CreatePrimeBuffer di tipo 4 per l'ID di output 1182.

SetBufferListener: "WorkThread1" per ID di input 1304

CallPrimeOutput su componente "Ordinamento" (1180)

Fine elenco operazioni output

End WorkThread0

WorkThread1

Unità: 1291

Si applica a: 1291

Elenco operazioni input, ID input 1304 (1 prevista fine delle righe)

CallProcessInput sull'ID di input 1304 sul componente "Destinazione OLE DB" (1291) per il tipo di vista 5

Fine elenco operazioni input per l'input 1304

Elenco operazioni output

Fine elenco operazioni output

End WorkThread1

PipelineExecutionTrees

inizio dell'albero di esecuzione 0

output "Output origine OLE DB" (11)

input "Input ordinamento" (1181)

fine dell'albero di esecuzione 0

inizio dell'albero di esecuzione 1

output "Output errori origine OLE DB" (12)

fine dell'albero di esecuzione 1

inizio dell'albero di esecuzione 2

output "Output ordinamento" (1182)

input "Input destinazione OLE DB" (1304)

output "Output errori destinazione OLE DB" (1305)

fine dell'albero di esecuzione 2

PipelineInitialization

Nessuna posizione temporanea di archiviazione dei dati BLOB disponibile. Gestione buffer prenderà in considerazione le directory indicate nelle variabili di ambiente TEMP e TMP.

Le dimensioni predefinite del buffer sono di 10485760 byte.

I buffer conterranno 10000 righe per impostazione predefinita

Il flusso di dati non rimuoverà i componenti inutilizzati perché la relativa proprietà RunInOptimizedMode è impostata su False.

Per molti eventi vengono scritte più voci nel log e i messaggi relativi a numerose voci di log contengono dati complessi. Per semplificare la comprensione e la comunicazione del contenuto dei messaggi complessi, è possibile analizzare il testo dei messaggi. In base alla posizione dei log, è possibile utilizzare istruzioni Transact-SQL o un componente script per separare il testo complesso in colonne o altri formati che si ritengono più utili.

Nella tabella seguente viene ad esempio illustrato il messaggio "Sono state passate righe come input per un componente del flusso di dati. : : 1185 : Output origine OLE DB : 1180 : Ordinamento : 1181 : Input ordinamento : 76", scomposto in colonne. Il messaggio è stato scritto dall'evento OnPipelineRowsSent quando le righe sono state inviate dall'origine OLE DB alla trasformazione Ordinamento.

Colonna

Descrizione

Valore

PathID

Valore della proprietà ID del percorso tra l'origine OLE DB e la trasformazione Ordinamento.

1185

PathName

Valore della proprietà Name del percorso.

Output origine OLE DB

ComponentID

Valore della proprietà ID della trasformazione Ordinamento.

1180

ComponentName

Valore della proprietà Name della trasformazione Ordinamento.

Sort

InputID

Valore della proprietà ID dell'input della trasformazione Ordinamento.

1181

InputName

Valore della proprietà Name dell'input della trasformazione Ordinamento.

Input ordinamento

RowsSent

Numero di righe inviate all'input della trasformazione Ordinamento.

76

Origini

Le origini seguenti includono proprietà che possono essere aggiornate tramite espressioni di proprietà:

Per ulteriori informazioni, vedere Proprietà personalizzate delle origini.

Trasformazioni

Destinazioni

Le destinazioni seguenti includono proprietà che possono essere aggiornate tramite espressioni di proprietà:

Per ulteriori informazioni, vedere Proprietà personalizzate delle destinazioni.

Configurazione dell'attività Flusso di dati

È possibile impostare le proprietà a livello di programmazione o nella finestra Proprietà.

Per ulteriori informazioni sull'impostazione di queste proprietà nella finestra Proprietà, fare clic sull'argomento seguente:

Configurazione dell'attività Flusso di dati a livello di programmazione

Per ulteriori informazioni sull'aggiunta di un'attività Flusso di dati a un pacchetto a livello di programmazione e sulle impostazioni delle proprietà del flusso di dati, fare clic sull'argomento seguente:

Icona di Integration Services (piccola) Rimanere aggiornati con Integration Services

Per informazioni sui download, gli articoli, gli esempi e i video Microsoft più recenti, nonché sulle soluzioni selezionate dalla community, visitare la pagina Integration Services su MSDN o Technet:

Per ricevere notifica automatica su questi aggiornamenti, sottoscrivere i feed RSS disponibili nella pagina.