Tarefa de Fluxo de Dados

A tarefa de Fluxo de Dados encapsula o mecanismo de fluxo de dados que move dados entre as origens e os destinos, permitindo que o usuário transforme, limpe e modifique os dados à medida que são movidos. A adição de uma tarefa de Fluxo de Dados em um pacote de fluxo de controle permite que o pacote extraia, transforme e carregue dados.

Um fluxo de dados consiste em pelo menos um componente de fluxo de dados, mas normalmente é um conjunto de componentes de fluxo de dados conectados: fontes que extraem dados; transformações que modificam, indicam ou resumem dados; e destinos que carregam dados. Os componentes estão conectados no fluxo de dados através de caminhos. Cada caminho especifica os dois componentes que são o início e o término do caminho. Para obter mais informações, consulte Elementos de fluxo de dados.

Em tempo de execução, a tarefa de Fluxo de Dados cria um plano de execução a partir do fluxo de dados e o mecanismo de fluxo de dados executa o plano. Você pode criar uma tarefa de Fluxo de Dados que não tenha nenhum fluxo de dados, porém a tarefa será executada somente se pelo menos um fluxo de dados for incluído.

O diagrama a seguir mostra uma tarefa de Fluxo de Dados com um fluxo de dados.

Fluxo de dados

Uma tarefa de Fluxo de Dados pode incluir vários fluxos de dados. Se uma tarefa copiar vários conjuntos de dados e se a ordem na qual os dados são copiados não for significativa, poderá ser mais conveniente incluir vários fluxos de dados na tarefa de Fluxo de Dados. Por exemplo, você poderia criar cinco fluxos de dados, cada um copiando dados de um arquivo simples para uma tabela de dimensão diferente em um esquema em estrela de data warehouse.

Entretanto, o mecanismo de fluxo de dados determina a ordem de execução quando há vários fluxos de dados em uma tarefa de fluxo de dados. Portanto, quando a ordem for importante, o pacote deverá usar várias tarefas de Fluxo de Dados, cada tarefa contendo um fluxo de dados. Você poderá então aplicar restrições de precedência para controlar a ordem de execução das tarefas.

O diagrama a seguir mostra uma tarefa de Fluxo de Dados com vários fluxos de dados.

Fluxos de dados

Um pacote pode incluir várias tarefas de Fluxo de Dados, o que ocorre com freqüência nos pacotes complexos. Por exemplo, se um pacote exige que os fluxos de dados sejam executados em uma seqüência específica ou que outras tarefas sejam executadas entre os fluxos de dados, você deverá usar uma tarefa de Fluxo de Dados separada para cada fluxo de dados.

A tarefa de Fluxo de Dados também gerencia fluxos de erro. No tempo de execução, podem ocorrer erros no nível de linha quando componentes de fluxo de dados convertem dados, executam uma pesquisa ou avaliam expressões. Por exemplo, uma coluna de dados com um valor de cadeia de caracteres não pode ser convertido em um número inteiro ou uma expressão tenta fazer uma divisão por zero. As duas operações geram erros e as linhas que contêm os erros podem ser processadas separadamente usando um fluxo de erro. Para obter mais informações sobre como usar fluxos de erro em um fluxo de dados de pacote, consulte Manipulando erros em dados.

Para inserir dados de arquivos de texto em massa em um banco de dados do SQL Server, você pode usar a tarefa Inserção em Massa em vez de uma tarefa de Fluxo de Dados e um fluxo de dados. Porém, a tarefa de Inserção em Massa não pode transformar dados. Para obter mais informações, consulte Tarefa Inserção em Massa.

Usando expressões de propriedades com elementos de fluxo de dados

Vários componentes de fluxo de dados — origens, transformações e destinos — oferecem suporte ao uso de expressões de propriedade em algumas de suas propriedades. Uma expressão de propriedade é uma expressão que substitui o valor da propriedade quando o pacote é carregado. Em tempo de execução, o pacote usa os valores atualizados de propriedade. As expressões são criadas usando a sintaxe de expressão do Integration Services e podem incluir as funções, os operadores, os identificadores e as variáveis do Integration Services. Para obter mais informações, consulte Referência de Expressões do Integration Services, Usando expressões em pacotes e Usando expressões de propriedade em pacotes.

Se você criar um pacote no Business Intelligence Development Studio, as propriedades de quaisquer componentes de fluxo de dados que oferecem suporte às expressões de propriedade estarão expostas na tarefa de Fluxo de Dados à qual pertencem. Para adicionar, alterar e remover as expressões de propriedade dos componentes de fluxo de dados, clique na tarefa de Fluxo de Dados e, em seguida, use a janela Propriedades ou o editor para a tarefa adicionar, alterar ou excluir expressões de propriedade. As expressões de propriedades para a tarefa de Fluxo de Dados em si são gerenciadas na janela Propriedades.

Se o fluxo de dados contiver componentes que usem expressões, essas expressões também serão exibidas na janela Propriedades. Para exibir expressões, selecione a tarefa de Fluxo de Dados à qual o componente pertence. Você pode exibir propriedades por categorias ou em ordem alfabética. Se você usar a exibição categorizada na janela Propriedades, as expressões que não são usadas em uma propriedade específica serão relacionadas na categoria Diversos. Se você usar a exibição alfabética, as expressões serão relacionadas na ordem do nome do componente de fluxo de dados.

Entradas de log

O Integration Services fornece um conjunto de eventos de log que estão disponíveis para todas as tarefas. O Integration Services também fornece entradas de log personalizadas a muitas tarefas. Para obter mais informações, consulte Implementando logs em pacotes e Mensagens personalizadas para log. A tarefa de Fluxo de Dados inclui as seguintes entradas de log personalizadas:

Entrada de log

Descrição

BufferSizeTuning

Indica que a tarefa de Fluxo de Dados alterou o tamanho do buffer. A entrada de log descreve os motivos da mudança de tamanho e relaciona o novo tamanho do buffer temporário.

OnPipelinePostEndOfRowset

Indica que um componente recebeu o sinal de final do conjunto de linhas, definido pela última chamada do método ProcessInput. Uma entrada é gravada para cada componente no fluxo de dados que processa a entrada. A entrada contém o nome do componente.

OnPipelinePostPrimeOutput

Indica que o componente completou sua última chamada para o método PrimeOutput. Dependendo do fluxo de dados, várias entradas de log podem ser gravadas. Se o componente for uma fonte, essa entrada de log significa que o componente tem linhas de processamento concluídas.

OnPipelinePreEndOfRowset

Indica que um componente está prestes a receber o sinal de final do conjunto de linhas, definido pela última chamada do método ProcessInput. Uma entrada é gravada para cada componente no fluxo de dados que processa a entrada. A entrada contém o nome do componente.

OnPipelinePrePrimeOutput

Indica que o componente está prestes a receber sua chamada a partir do método PrimeOutput. Dependendo do fluxo de dados, várias entradas de log podem ser gravadas.

OnPipelineRowsSent

Informa o número de linhas fornecido a uma entrada de componente por uma chamada para o método ProcessInput. A entrada de log inclui o nome do componente.

PipelineBufferLeak

Fornece informações sobre qualquer componente que manteve buffers ativos depois que o gerenciador de buffers for desativado. Se um buffer ainda estiver ativo, os recursos de buffers não foram liberados e pode haver perdas de memória. A entrada de log fornece o nome do componente e a ID do buffer.

PipelineComponentTime

Reporta o tempo (em milissegundos) que o componente gastou em cada uma das cinco principais etapas de processamento — Validate, PreExecute, PostExecute, ProcessInput e ProcessOutput.

PipelineExecutionPlan

Informa o plano de execução do fluxo de dados. O plano de execução fornece informações sobre como os buffers serão enviados para os componentes. Essas informações, em combinação com a entrada de log PipelineExecutionTrees, descrevem o que está ocorrendo na tarefa de Fluxo de Dados.

PipelineExecutionTrees

Informa as árvores de execução sobre o layout do fluxo de dados. O agendador do mecanismo de fluxo de dados usa as árvores para criar o plano de execução do fluxo de dados.

PipelineInitialization

Fornece informações de inicialização sobre a tarefa. Essas informações incluem os diretórios para armazenamento temporário de dados de BLOB, o tamanho do buffer padrão e o número de linhas em um buffer. Dependendo da configuração da tarefa de Fluxo de Dados, várias entradas de log podem ser gravadas.

Essas entradas de log fornecerão informações detalhadas sobre a execução da tarefa de Fluxo de Dados sempre que você executar um pacote. Ao executar os pacotes repetidamente, você poderá coletar informações que com o passar do tempo fornecerá informações históricas importantes sobre o processamento que a tarefa executa, problemas que podem afetar o desempenho e o volume de dados que a tarefa controla.

Para obter mais informações sobre como usar essas entradas de log para monitorar e melhorar o desempenho do fluxo de dados, consulte um dos seguintes tópicos:

Mensagens de amostra de uma tarefa de Fluxo de Dados

A tabela a seguir relaciona as mensagens de amostra de entradas de log para um pacote simples. O pacote usa uma origem OLE DB para extrair dados de uma tabela, uma transformação Classificar para classificar os dados e um destino OLE DB para gravar os dados em uma tabela diferente.

Entrada de log

Mensagens

BufferSizeTuning

As linhas de buffer do tipo 0 podem fazer com que um buffer fique maior do que o tamanho máximo configurado. Haverá somente 9637 linhas em buffers desse tipo.

As linhas de buffer do tipo 2 podem fazer com que um buffer fique maior do que o tamanho máximo configurado. Haverá somente 9497 linhas em buffers desse tipo.

As linhas de buffer do tipo 3 podem fazer com que um buffer fique maior do que o tamanho máximo configurado. Haverá somente 9497 linhas em buffers desse tipo.

OnPipelinePostEndOfRowset

Um componente receberá o sinal de final do conjunto de linhas. : 1180: Classificação: 1181: Classificação de entrada

Um componente receberá o sinal de final do conjunto de linhas. : 1291: Destino OLE DB: 1304: Entrada de destino OLE DB

OnPipelinePostPrimeOutput

Um componente foi retornado de sua chamada PrimeOutput. : 1180: Classificação

Um componente foi retornado de sua chamada PrimeOutput : 1: Fonte de OLE DB

OnPipelinePreEndOfRowset

Um componente terminou todo o processamento de suas linhas. : 1180: Classificação: 1181: Classificação de entrada

Um componente terminou todo o processamento de suas linhas. : 1291: Destino OLE DB: 1304: Entrada de destino OLE DB

OnPipelinePrePrimeOutput

PrimeOutput será chamado em um componente. : 1180: Classificação

PrimeOutput será chamado em um componente. : 1: Fonte de OLE DB

OnPipelineRowsSent

Foram fornecidas linhas a um componente de fluxo de dados como entrada. : : 1185: Saída de fonte OLE DB: 1180: Classificação: 1181: Classificação de entrada: 76

Foram fornecidas linhas a um componente de fluxo de dados como entrada. : : 1308 : Classificar Saída : 1291 : Destino OLE DB : 1304: Entrada de Destino OLE DB : 76

PipelineComponentTime

O componente "Calcular LineItemTotalCost" (3522) gastou 356 milissegundos em ProcessInput.

O componente "Quantidade de Soma e LineItemTotalCost" (3619) gastou 79 milissegundos em ProcessInput.

O componente "Calcular Custo Médio" (3662) gastou 16 milissegundos em ProcessInput.

O componente "Classificar por ProductID" (3717) gastou 125 milissegundos em ProcessInput.

O componente "Carregar Dados" (3773) gastou 0 milissegundos em ProcessInput.

O componente "Extrair Dados" (3869) gastou 688 milissegundos em PrimeOutput preenchendo buffers na saída "Saída de Origem OLE DB" (3879).

O componente "Quantidade de Soma e LineItemTotalCost" (3619) gastou 141 milissegundos em PrimeOutput preenchendo buffers na saída "Saída de Agregação 1" (3621).

O componente "Classificar por ProductID" (3717) gastou 16 milissegundos em PrimeOutput preenchendo buffers na saída "Classificar Saída" (3719).

PipelineExecutionPlan

SourceThread0

Unidades: 1

Influências: 1180 1291

Lista de trabalho de saída

CreatePrimeBuffer de tipo 1 para ID de saída 11.

SetBufferListener: "WorkThread0" para ID de entrada 1181

CreatePrimeBuffer de tipo 3 para ID de saída 12.

CallPrimeOutput no componente "Origem OLE DB" (1)

Término de lista de trabalho de saída

Término de SourceThread0

WorkThread0

Unidades: 1180

Influências: 1180 1291

Lista de trabalho de entrada, ID de entrada 1181 (1 EORs Esperados)

CallProcessInput na ID de entrada 1181 no componente "Classificar" para (1180) exibição do tipo 2

Término da lista de trabalho de entrada para entrada 1181

Lista de trabalho de saída

CreatePrimeBuffer de tipo 4 para ID de saída 1182.

SetBufferListener: "WorkThread1" para ID de entrada 1304

CallPrimeOutput no componente "Classificar" (1180)

Término de lista de trabalho de saída

Término de WorkThread0

WorkThread1

Unidades: 1291

Influências: 1291

Lista de trabalho de entrada, ID de entrada 1304 (1 EORs Esperados)

CallProcessInput na ID de entrada 1304 no componente "Destino OLE DB " (1291) para exibição do tipo 5

Término da lista de trabalho de entrada para a entrada 1304

Lista de trabalho de saída

Término de lista de trabalho de saída

Término de WorkThread1

PipelineExecutionTrees

Inicio de árvore de execução 0

Saída "Saída de origem OLE DB" (11)

Entrada "Classificar entrada " (1181):

Término de árvore de execução 0

Inicio de árvore de execução 1

Saída "Saída de erro de origem OLE DB" (12)

Término de árvore de execução 1

Inicio de árvore de execução 2

Saída "Classificar Saída" (1182)

Entrada "Entrada de destino OLE DB" (1304)

Saída "Saída de erro de destino OLE DB" (1305)

Término de árvore de execução 2

PipelineInitialization

Nenhum local temporário de armazenamento de dados BLOB foi fornecido. O gerenciador de buffer considerará os diretórios nas variáveis do ambiente TEMP e TMP.

O tamanho de buffer padrão é de 10485760 bytes.

Os buffers terão por padrão 10000 linhas.

O fluxo de dados não removerá componentes não usados, porque sua propriedade RunInOptimizedMode será definida como falsa.

Muitos eventos de log gravam várias entradas e as mensagens para várias entradas de log contêm dados complexos. Para facilitar a compreensão e comunicar o conteúdo de mensagens complexas, você pode analisar a mensagem de texto. Dependendo do local dos logs, você poderá usar as instruções Transact-SQL ou um componente Script para separar o texto complexo em colunas ou em outros formatos que considere mais útil.

Por exemplo, a tabela a seguir contém a mensagem "Foram fornecidas linhas para um componente de fluxo de dados como entrada. : : 1185: Saída de origem OLE DB: 1180: Classificação: 1181: Classificar entrada: 76", analisado em colunas. A mensagem foi gravada pelo evento OnPipelineRowsSent quando foram enviadas linhas da origem OLE DB para a transformação Classificação.

Coluna

Descrição

Valor

PathID

O valor da propriedade ID do caminho entre a origem OLE DB e a transformação Classificação.

1185

PathName

O valor da propriedade Name do caminho.

Saída da origem OLE DB

ComponentID

O valor da propriedade ID da transformação Classificação.

1180

ComponentName

O valor da propriedade Name da transformação Classificação.

Classificação

InputID

O valor da propriedade ID da entrada para a transformação Classificação.

1181

InputName

O valor da propriedade Name da entrada para a transformação Classificação.

Classificar entrada

RowsSent

O número de linhas enviadas para a entrada da transformação Classificação.

76

Origens

As origens a seguir têm propriedades que podem ser atualizadas através de expressões de propriedades:

Para obter mais informações, consulte Propriedades personalizadas de fontes.

Transformações

Destinos

Os destinos a seguir têm propriedades que podem ser atualizadas através de expressões de propriedades:

Para obter mais informações, consulte Propriedades personalizadas de destino.

Configurando a tarefa de Fluxo de Dados

Você pode definir as propriedades na janela Propriedades ou programaticamente.

Para obter mais informações sobre como definir essas propriedades na janela Propriedades, clique no tópico a seguir:

Configurando programaticamente a tarefa de Fluxo de Dados

Para obter mais informações sobre como adicionar uma tarefa de fluxo de dados programaticamente em um pacote e definir propriedades de fluxo de dados, clique no tópico a seguir:

Ícone do Integration Services (pequeno) Fique atualizado com o Integration Services

Para obter os mais recentes downloads, artigos, exemplos e vídeos da Microsoft, bem como soluções selecionadas da comunidade, visite a página do Integration Services no MSDN ou TechNet:

Para receber uma notificação automática das atualizações, assine os feeds RSS disponíveis na página.