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

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Gorjeta

Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange tudo, desde a movimentação de dados até ciência de dados, análises em tempo real, business intelligence e relatórios. Saiba como iniciar uma nova avaliação gratuitamente!

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

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 incluirá todas as colunas de ambas as fontes correspondentes com base em uma condição de junção.

Tipos de junção

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

Junte-se Internamente

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

Exterior esquerdo

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 será as linhas retornadas por uma junção interna mais as linhas incomparáveis do fluxo esquerdo.

Nota

O mecanismo Spark usado pelos fluxos de dados ocasionalmente falhará devido a possíveis produtos cartesianos em suas condições de junção. Se isso ocorrer, você pode alternar para uma junção cruzada personalizada e inserir manualmente sua condição de associação. Isso pode resultar em um desempenho mais lento em seus fluxos de dados, pois o mecanismo de execução pode precisar calcular todas as linhas de ambos os lados da relação e, em seguida, filtrar 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 será as linhas retornadas por uma junção interna mais as linhas incomparáveis do fluxo direito.

Exterior Completo

A junção externa completa produz todas as colunas e linhas de ambos os lados com valores NULL para colunas que não são correspondidas.

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 será todas as linhas que atendem à condição de junção.

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

Se você quiser produzir explicitamente um produto cartesiano completo, use a transformação Coluna derivada em cada um dos dois fluxos independentes antes da junção para criar uma chave sintética para corresponder. 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. A execução de 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, fazendo com que o fluxo de dados tenha um desempenho insatisfatório.

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.

Fuzzy join

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 junções de correspondência difusas.

Configuração

  1. Escolha com qual fluxo de dados você está ingressando na lista suspensa 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.

Screenshot of join Transformation

Adesõ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 transmitido usando a transmissão fixa na guia Otimizar .

Non-equi join

Otimizando o desempenho da junção

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. 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.

Join Transformation optimize

Na transformação de junções, pesquisas e existências, se um ou ambos os fluxos de dados se ajustarem à memória do nó de trabalho, você poderá otimizar o desempenho habilitando a Difusão. Por padrão, o mecanismo de ignição decidirá automaticamente se transmite ou não um lado. 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 suas junções estejam enfrentando erros de tempo limite.

Auto-adesão

Para auto-unir um fluxo de dados consigo mesmo, alias um fluxo existente com uma transformação select. 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 ao 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.

Self-join

Condições de junção de teste

Ao testar as transformações de junção com visualização de dados no modo de depuração, use um pequeno conjunto de dados conhecidos. Ao fazer a amostragem de linhas de um grande conjunto de dados, não é possível prever quais linhas e chaves serão lidas para teste. O resultado não é determinístico, o que significa que as suas condições de adesão podem não devolver quaisquer correspondências.

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

O exemplo abaixo é uma transformação de junção chamada JoinMatchedData que leva fluxo esquerdo e fluxo TripFareTripData 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 true se as hack_licensecolunas , medallion, vendor_ide 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 do usuário, essa transformação se parece com a imagem abaixo:

Screenshot shows the transformation with the Join Settings tab selected and a Join type of Inner.

O script de fluxo de dados para essa transformação está no trecho abaixo:

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

O exemplo abaixo é uma transformação de junção chamada JoiningColumns que leva fluxo esquerdo e fluxo RightStreamLeftStream direito. Essa transformação recebe dois fluxos e une todas as linhas em que coluna é maior que coluna leftstreamcolumnrightstreamcolumn. O joinType é cross. A transmissão não está habilitada broadcast tem valor 'none'.

Na interface do usuário, essa transformação se parece com a imagem abaixo:

Screenshot shows the transformation with the Join Settings tab selected and a Join type of Custom (cross).

O script de fluxo de dados para essa transformação está no trecho abaixo:

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.