Compartilhar via


Otimização de transformações

Use as estratégias a seguir para otimizar o desempenho das transformações em fluxos de dados de mapeamento nos pipelines do Azure Data Factory e do Azure Synapse Analytics.

Otimização de transformações de junções, existências e pesquisas

Difundindo

Nas transformações de junções, pesquisas e existências, se um ou ambos os fluxos de dados forem pequenos o bastante para se ajustarem à memória do nó de trabalho, é possível otimizar o desempenho habilitando a Transmissão. A transmissão é quando você envia quadros de dados pequenos para todos os nós do cluster. Isso permite que o mecanismo do Spark execute uma junção sem reorganizar os dados no fluxo maior. Por padrão, o mecanismo do Spark decide automaticamente se deseja ou não transmitir um lado de uma junção. Se você já conhecer seus dados de entrada e souber que um fluxo de dados é menor do que o outro, você poderá selecionar a transmissão Fixa. A transmissão fixa força o Spark a transmitir o fluxo selecionado.

Se o tamanho dos dados transmitidos for muito grande para o nó do Spark, você poderá receber um erro de memória insuficiente. Para evitar erros de memória insuficiente, use clusters com otimização de memória. Se a transmissão alcançar o tempo limite durante execuções de fluxo de dados, desative a otimização de transmissão. No entanto, isso resultará em fluxos de dados de execução mais lentos.

Ao trabalhar com fontes de dados que podem levar mais tempo para consultar, como consultas de banco de dados grandes, é recomendável desativar a transmissão para junções. Uma fonte com tempos de consulta longos pode fazer com que o Spark alcance o tempo limite quando o cluster tenta transmitir para os nós de computação. Outra boa opção para desativar a transmissão é ter um fluxo em seu fluxo de dados agregando valores para usar posteriormente em uma transformação de pesquisa. Esse padrão pode confundir o otimizador do Spark e fazer com que ele alcance o tempo limite.

Join Transformation optimize

Junções cruzadas

Se você usar valores literais em suas condições de junção ou tiver várias correspondências em ambos os lados de uma junção, o Spark a executará como uma junção cruzada. Uma junção cruzada é um produto cartesiano completo que filtra os valores associados. Isso é mais lento do que outros tipos de junção. Verifique se você tem referências de coluna em ambos os lados de suas condições de junção para não afetar o desempenho.

Classificação antes de junções

Ao contrário da junção de mesclagem em ferramentas como o SSIS, a transformação de junção não é uma operação de junção de mesclagem obrigatória. As chaves de junção não exigem classificação antes da transformação. Não é recomendável usar transformações de classificação no fluxos de dados de mapeamento.

Desempenho de transformação de janelas

A Transformação de janelas em fluxo de dados de mapeamento particiona os dados por valor em colunas que você seleciona como parte da cláusula over() nas configurações de transformação. Há uma série de funções analíticas e de agregação muito populares expostas na transformação de janelas. No entanto, se seu caso de uso for gerar uma janela sobre todo o conjunto de dados para fins de classificação rank() ou número de linha rowNumber(), é recomendável que você use a Transformação de classificação e a Transformação chave alternativa. Essas transformações executarão melhor as operações completas de conjunto de dados usando essas funções.

Repartição de dados distorcidos

Determinadas transformações, como junções e agregações, reorganizam suas partições de dados e podem levar a dados distorcidos. Dados distorcidos significam que os dados não foram distribuídos uniformemente entre as partições. Dados muito distorcidos podem levar a transformações de downstream mais lentas e gravações de coletor. Você pode verificar a distorção de seus dados em qualquer ponto de uma execução de fluxo de dados clicando na transformação, na tela Monitoramento.

Skewness and kurtosis

A tela de monitoramento mostra como os dados são distribuídos em cada partição junto a duas métricas, distorção e curtose. A distorção mede a assimetria dos dados e pode ter um valor positivo, zero, negativo ou indefinido. Distorção negativa significa que a cauda esquerda é maior do que a direita. A curtose é a medida que indica se os dados são pesados ou leves. Não é desejável obter valores altos de curtose. Os intervalos ideais de distorção ficam entre -3 e 3, e os intervalos de curtose são inferiores a 10. Uma maneira fácil de interpretar esses números é examinar o gráfico de partição e observar se uma barra é maior do que o restante.

Se os dados não forem particionados uniformemente após uma transformação, é possível usar a Guia Otimizar para reparticionar. Reorganizar os dados leva tempo e pode não melhorar o desempenho do fluxo de dados.

Dica

Se você reparticionar seus dados, mas tiver transformações de downstream que reorganizam seus dados, use o particionamento de hash em uma coluna usada como chave de junção.

Observação

As transformações dentro de seu fluxo de dados (com exceção da transformação do coletor) não modificam a partição de arquivos e pastas de dados inativos. O particionamento em cada transformação reparticiona os dados dentro dos quadros de dados do cluster Spark sem servidor temporário que o ADF gerencia para cada uma de suas execuções de fluxo de dados.

Consulte outros artigos sobre Fluxo de Dados relacionados ao desempenho: