Noções básicas sobre transformações síncronas e assíncronas

Aplica-se a: SQL Server SSIS Integration Runtime em Azure Data Factory

Para compreender a diferença entre uma transformação síncrona e uma assíncrona nos Serviços de Integração, é mais fácil começar por compreender uma transformação síncrona. Se uma transformação síncrona não satisfizer as suas necessidades, o seu design pode exigir uma transformação assíncrona.

Transformações Síncronas

Uma transformação síncrona processa as linhas recebidas e passa-as para o fluxo de dados uma linha de cada vez. A saída é síncrona com a entrada, o que significa que ocorre ao mesmo tempo. Portanto, para processar uma dada linha, a transformação não precisa de informação sobre outras linhas do conjunto de dados. Na implementação real, as linhas são agrupadas em buffers à medida que passam de um componente para o seguinte, mas estes buffers são transparentes para o utilizador, e pode-se assumir que cada linha é processada separadamente.

Um exemplo de transformação síncrona é a transformação de Conversão de Dados. Para cada linha recebida, converte o valor na coluna especificada e envia a linha no seu caminho. Cada operação de conversão discreta é independente de todas as outras linhas do conjunto de dados.

No scripting e programação dos Serviços de Integração, especifica-se uma transformação síncrona procurando o ID da entrada de um componente e atribuindo-o à propriedade SynchronousInputID das saídas do componente. Isto indica ao motor de fluxo de dados para processar cada linha da entrada e enviar cada linha automaticamente para as saídas especificadas. Se quiseres que cada linha vá para todas as saídas, não precisas de escrever código adicional para gerar os dados. Se usar a propriedade ExclusionGroup para especificar que as linhas devem ir apenas para uma ou outra de um grupo de saídas, como na transformação de Divisão Condicional, deve chamar o método DirectRow para selecionar o destino apropriado para cada linha. Quando tem uma saída de erro, deve chamar o DirectErrorRow para enviar linhas com problemas para a saída de erro em vez da saída padrão.

Transformações Assíncronas

Pode decidir que o seu design requer uma transformação assíncrona quando não é possível processar cada linha independentemente de todas as outras. Ou seja, não pode passar cada linha no fluxo de dados enquanto é processada, mas sim deve emitir dados de forma assíncrona, ou num momento diferente, da entrada. Por exemplo, os seguintes cenários requerem uma transformação assíncrona:

  • O componente tem de adquirir múltiplos buffers de dados antes de poder realizar o seu processamento. Um exemplo é a transformação Sort, onde o componente tem de processar o conjunto completo de linhas numa única operação.

  • O componente tem de combinar linhas de múltiplas entradas. Um exemplo é a transformação Merge, onde o componente tem de examinar várias linhas de cada entrada e depois fundi-las por ordem ordenada.

  • Não existe correspondência um-para-um entre as linhas de entrada e as de saída. Um exemplo é a transformação agregada, onde o componente tem de adicionar uma linha à saída para conter os valores agregados calculados.

No scripting e programação dos Serviços de Integração, especifica-se uma transformação assíncrona atribuindo um valor 0 à propriedade SynchronousInputID das saídas do componente. . Isto indica ao motor de fluxo de dados para não enviar cada linha automaticamente para as saídas. Depois, deve escrever código para enviar cada linha explicitamente para a saída apropriada, adicionando-a ao novo buffer de saída criado para a saída de uma transformação assíncrona.

Note

Como um componente fonte deve também adicionar explicitamente cada linha que lê da fonte de dados aos seus buffers de saída, uma fonte assemelha-se a uma transformação com saídas assíncronas.

Também seria possível criar uma transformação assíncrona que emule uma transformação síncrona ao copiar explicitamente cada linha de entrada para a saída. Usando esta abordagem, pode renomear colunas ou converter tipos ou formatos de dados. No entanto, esta abordagem degrada o desempenho. Pode obter os mesmos resultados com melhor desempenho utilizando componentes integrados dos Serviços de Integração, como Copy Column ou Data Conversion.