Junte-se à transformação no mapeamento do fluxo de dados

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Gorjeta

Data Factory em Microsoft Fabric é a próxima geração de Azure Data Factory, com uma arquitetura mais simples, IA incorporada e novas funcionalidades. Se és novo na integração de dados, começa pelo Fabric Data Factory. As cargas de trabalho existentes do ADF podem atualizar para o Fabric para aceder a novas capacidades em ciência de dados, análise em tempo real e relatórios.

Os fluxos de dados estão disponíveis tanto nos pipelines do Azure Data Factory como no do Azure Synapse Analytics. Este artigo aplica-se ao mapeamento de fluxos de dados. Se você é novo em transformações, consulte o artigo introdutório Transformar dados usando fluxos de dados de mapeamento.

Gorjeta

Para a transformação equivalente (consultas de fusão) na Gen2 do Dataflow, consulte Um guia para o Dataflow Gen2 para mapear utilizadores do fluxo de dados.

Use a transformação de junção para combinar dados de duas fontes ou fluxos em um fluxo de dados de mapeamento. O fluxo de saída inclui todas as colunas de ambas as fontes, emparelhadas com base numa condição de junção.

Tipo de junção

Atualmente, o mapeamento de fluxos de dados oferece suporte a cinco tipos diferentes de junção.

Junção Interna

A junção interna produz apenas linhas com valores correspondentes em ambas as tabelas.

Junção Externa Esquerda

A junção externa esquerda retorna todas as linhas do fluxo esquerdo e os registros correspondentes do fluxo direito. Se uma linha do fluxo esquerdo não tiver correspondência, as colunas de saída do fluxo direito serão definidas como NULL. A saída são as linhas retornadas por uma junção interna mais as linhas não correspondidas do fluxo esquerdo.

Nota

O motor Spark usado pelos fluxos de dados falha ocasionalmente devido a possíveis produtos cartesianos nas suas condições de junção. Se isto acontecer, pode mudar para uma união cruzada personalizada e introduzir manualmente a condição de junção. Isto pode resultar num desempenho mais lento nos fluxos de dados, pois o motor de execução pode precisar de calcular todas as linhas de ambos os lados da relação e depois filtrar as linhas.

Exterior direito

A junção externa direita retorna todas as linhas do fluxo direito e os registros correspondentes do fluxo esquerdo. Se uma linha do fluxo da direita não tiver correspondência, as colunas de saída do fluxo da esquerda serão definidas como NULL. A saída são as linhas retornadas por uma junção interna mais as linhas não combinadas do fluxo direito.

Exterior Completo

A junção externa completa retorna todas as colunas e linhas de ambos os lados, com valores NULL para as colunas que não têm correspondentes.

Junção cruzada personalizada

A junção cruzada produz o produto cruzado dos dois fluxos com base em uma condição. Se você estiver usando uma condição que não seja igualdade, especifique uma expressão personalizada como sua condição de junção cruzada. O fluxo de saída são todas as linhas que cumprem a condição de junção.

Você pode usar este tipo de junção para junções não equi e condições OR.

Se pretender produzir explicitamente um produto cartesiano completo, utilize a transformação Coluna Derivada em cada um dos dois fluxos independentes antes da junção para criar uma chave sintética para correspondência. Por exemplo, crie uma nova coluna em Coluna derivada em cada fluxo chamado SyntheticKey e defina-a como 1. Em seguida, use a.SyntheticKey == b.SyntheticKey como sua expressão de junção personalizada.

Nota

Certifique-se de incluir pelo menos uma coluna de cada lado da relação esquerda e direita em uma associação cruzada personalizada. Executar junções cruzadas com valores estáticos em vez de colunas de cada lado resulta em verificações completas de todo o conjunto de dados, o que provoca um baixo desempenho no fluxo de dados.

Junção difusa

Você pode optar por ingressar com base na lógica de junção difusa em vez da correspondência exata do valor da coluna ativando a opção de caixa de seleção "Usar correspondência difusa".

  • Combinar partes de texto: use esta opção para encontrar correspondências removendo espaço entre palavras. Por exemplo, o Data Factory é correspondido com o DataFactory se essa opção estiver habilitada.
  • Coluna de pontuação de similaridade: opcionalmente, você pode optar por armazenar a pontuação correspondente para cada linha em uma coluna inserindo um novo nome de coluna aqui para armazenar esse valor.
  • Limite de similaridade: escolha um valor entre 60 e 100 como uma correspondência percentual entre os valores nas colunas selecionadas.

Junção difusa

Nota

Atualmente, a correspondência difusa funciona apenas com tipos de coluna de cadeia de caracteres e com tipos de junção interna, externa esquerda e externa completa. Você deve desativar a otimização de difusão ao usar associações de correspondência difusas.

Configuração

  1. Escolha com qual fluxo de dados está a juntar-se na lista pendente Fluxo à direita.
  2. Selecione o seu tipo de Adesão
  3. Escolha quais colunas de chave você deseja corresponder para sua condição de associação. Por padrão, o fluxo de dados procura igualdade entre uma coluna em cada fluxo. Para comparar através de um valor calculado, passe o mouse sobre a lista suspensa de colunas e selecione Coluna computada.

Captura de ecrã da Transformação de Junção

Junções não-equi

Para usar um operador condicional como não igual a (!=) ou maior que (>) em suas condições de junção, altere a lista suspensa do operador entre as duas colunas. As junções não equi exigem que pelo menos um dos dois fluxos seja difundido usando Transmissão Fixa na guia Otimizar.

Adesão não equivocada

Otimizando o desempenho de junção

Ao contrário da junção por mesclagem em ferramentas como o SSIS, a transformação de junção não é uma operação obrigatória de junção por mesclagem. As chaves de junção não exigem classificação. A operação de junção ocorre com base na operação de junção ideal no Spark, seja transmissão ou junção do lado do mapa.

Otimizar a transformação de junções

Na transformação de junções, buscas e verificações de existência, se um ou ambos os fluxos de dados couberem na memória do nó de trabalho, pode otimizar o desempenho habilitando a Difusão. Por defeito, o motor Spark decide automaticamente se transmite ou não um dos lados. Para escolher manualmente o lado da transmissão, selecione Fixo.

Não é recomendável desativar a transmissão por meio da opção Desativado a menos que as suas junções apresentem erros de tempo limite.

Auto-adesão

Para unir automaticamente um fluxo de dados consigo mesmo, crie um alias para um fluxo existente com uma transformação de seleção. Crie uma nova ramificação clicando no ícone de adição ao lado de uma transformação e selecionando Nova ramificação. Adicione uma transformação select para criar um alias do fluxo original. Adicione uma transformação de junção e escolha o fluxo original como o fluxo esquerdo e a transformação selecionada como o fluxo direito.

Auto-adesão

Testar condições de junção

Ao executar testes das transformações de junção com pré-visualização de dados no modo de depuração, use um pequeno conjunto de dados conhecidos. Ao amostrar linhas de um grande conjunto de dados, não se pode prever quais linhas e chaves são lidas para testes. O resultado é não determinístico, o que significa que as suas condições de junção podem não devolver resultados.

Script de fluxo de dados

Sintaxe

<leftStream>, <rightStream>
    join(
        <conditionalExpression>,
        joinType: { 'inner'> | 'outer' | 'left_outer' | 'right_outer' | 'cross' }
        broadcast: { 'auto' | 'left' | 'right' | 'both' | 'off' }
    ) ~> <joinTransformationName>

Exemplo de junção interna

Este exemplo é uma transformação de junção chamada JoinMatchedData que usa o fluxo TripData esquerdo e o fluxo TripFare direito. A condição de junção é a expressão hack_license == { hack_license} && TripData@medallion == TripFare@medallion && vendor_id == { vendor_id} && pickup_datetime == { pickup_datetime} que retorna verdadeiro se as colunas hack_license, medallion, vendor_id e pickup_datetime em cada fluxo corresponderem. O joinType é 'inner'. Estamos habilitando a transmissão apenas no fluxo esquerdo, então broadcast tem valor 'left'.

Na interface, esta transformação assemelha-se a isto:

A captura de tela mostra a transformação com a guia Configurações de Junção selecionada e um tipo de junção Inner.

O script de fluxo de dados para esta transformação encontra-se neste excerto:

TripData, TripFare
    join(
        hack_license == { hack_license}
        && TripData@medallion == TripFare@medallion
        && vendor_id == { vendor_id}
        && pickup_datetime == { pickup_datetime},
        joinType:'inner',
        broadcast: 'left'
    )~> JoinMatchedData

Exemplo de junção cruzada personalizada

Este exemplo é uma transformação de agregação chamada JoiningColumns, que recebe o fluxo LeftStream esquerdo e o fluxo RightStream direito. Esta transformação recebe dois fluxos e une todas as linhas em que a coluna leftstreamcolumn é maior que a coluna rightstreamcolumn. O joinType é cross. A transmissão não está ativada broadcast tem valor 'none'.

Na interface, esta transformação assemelha-se a isto:

A captura de tela mostra a transformação com a guia Configurações de Junção selecionada e um tipo de Junção Personalizada (cruzada).

O script de fluxo de dados para esta transformação encontra-se no excerto:

LeftStream, RightStream
    join(
        leftstreamcolumn > rightstreamcolumn,
        joinType:'cross',
        broadcast: 'none'
    )~> JoiningColumns

Depois de unir dados, crie uma coluna derivada e colete seus dados para um armazenamento de dados de destino.