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

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Utilize a transformação de união para combinar dados de duas fontes ou fluxos num fluxo de dados de mapeamento. O fluxo de saída incluirá todas as colunas de ambas as fontes correspondidas com base numa condição de união.

Junte tipos

Mapear fluxos de dados suporta atualmente cinco tipos diferentes de junção.

Unidos internos

O interior une apenas linhas de saída que têm valores correspondentes em ambas as tabelas.

Esquerda Exterior

A junção exterior esquerda retorna todas as linhas do fluxo esquerdo e os registos combinados do fluxo direito. Se uma linha do fluxo esquerdo não tiver correspondência, as colunas de saída do fluxo direito estão definidas para NU. A saída serão as linhas devolvidas por uma junção interna mais as linhas incomparáveis do fluxo esquerdo.

Nota

O motor Spark utilizado pelos fluxos de dados irá ocasionalmente falhar devido a possíveis produtos cartesianos nas suas condições de união. Se isto ocorrer, pode mudar para uma cruz personalizada e introduzir manualmente a sua condição de união. Isto pode resultar num desempenho mais lento nos fluxos de dados, uma vez que o motor de execução pode precisar de calcular todas as linhas de ambos os lados da relação e, em seguida, filtrar linhas.

Direito Exterior

A junção exterior direita retorna todas as linhas do fluxo direito e os registos combinados do fluxo esquerdo. Se uma linha do fluxo direito não tiver correspondência, as colunas de saída do fluxo esquerdo estão definidas para NU. A saída serão as linhas devolvidas por uma junção interna mais as linhas incomparáveis do fluxo direito.

Outer completo

Unir completamente todas as colunas e linhas de ambos os lados com valores NULOS para colunas que não são compatíveis.

Cruz personalizada junta-se

Cruze as saídas o produto transversal dos dois fluxos com base numa condição. Se estiver a usar uma condição que não seja igualdade, especifique uma expressão personalizada como condição de união cruzada. O fluxo de saída será todas as linhas que cumprem a condição de união.

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

Se quiser produzir explicitamente um produto cartesiano completo, utilize a transformação da Coluna Derivada em cada um dos dois fluxos independentes antes da junção para criar uma chave sintética para combinar. Por exemplo, crie uma nova coluna na Coluna Derivada em cada fluxo chamada SyntheticKey e coloque-a igual a 1 . Em seguida, use a.SyntheticKey == b.SyntheticKey como expressão de união personalizada.

Nota

Certifique-se de incluir pelo menos uma coluna de cada lado da sua relação esquerda e direita numa ligação personalizada. A execução da cruz junta-se a valores estáticos em vez de colunas de cada lado resulta em análises completas de todo o conjunto de dados, fazendo com que o fluxo de dados funcione mal.

Configuração

  1. Escolha o fluxo de dados com o qual se junta na entrega do fluxo certo.
  2. Selecione o seu tipo de Junção
  3. Escolha quais as colunas-chave que pretende combinar para que se junte à condição. Por predefinição, o fluxo de dados procura a igualdade entre uma coluna em cada fluxo. Para comparar através de um valor calculado, paire sobre a coluna dropdown e selecione coluna Computada.

Junte-se à Transformação

Não-equi junta-se

Para utilizar um operador condicional como não é igual (!=) ou superior a (>) nas suas condições de união, altere o recuo do operador entre as duas colunas. As juntas não-equi requerem que pelo menos um dos dois streams seja transmitido através da radiodifusão fixa no separador Otimize.

Não-equi aderir

Otimizar o desempenho de junção

Ao contrário da fusão em ferramentas como a SSIS, a transformação de junção não é uma operação de fusão obrigatória. As chaves de junção não requerem separação. A operação de junção ocorre com base na operação de ligação ideal em Spark, seja transmitida ou de cartão.

Junte-se à transformação otimizar

Em juntas, procura e transformação existente, se um ou ambos os fluxos de dados se encaixarem na memória do nó do trabalhador, pode otimizar o desempenho permitindo a radiodifusão. Por predefinição, o motor de faísca decidirá automaticamente se transmite ou não um dos lados. Para escolher manualmente qual lado transmitir, selecione Fixo.

Não é aconselhável desativar a transmissão através da opção Off, a menos que as suas junções estejam a ter erros de tempo.

Self-Join

Para se juntar a um fluxo de dados consigo mesmo, pseudónimo de um fluxo existente com uma transformação selecionada. Crie um novo ramo clicando no ícone plus ao lado de uma transformação e selecione Novo ramo. Adicione uma transformação selecionada ao pseudónimo do fluxo original. Adicione uma transformação de união e escolha o fluxo original como o fluxo esquerdo e a transformação selecionada como o fluxo direito.

União de auto-unir-se

Testes juntam condições de união

Ao testar as transformações de junção com pré-visualização de dados no modo depuror, utilize um pequeno conjunto de dados conhecidos. Ao recolher amostras de um conjunto de dados grande, não é possível prever quais linhas e teclas serão lidas para testes. O resultado não é determinístico, o que significa que as suas condições de união podem não devolver quaisquer partidas.

Script de fluxo de dados

Syntax

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

Exemplo de união interior

O exemplo abaixo é uma transformação de união nomeada JoinMatchedData que toma o fluxo esquerdo e o fluxo TripData TripFare direito. A condição de união é a expressão hack_license == { hack_license} && TripData@medallion == TripFare@medallion && vendor_id == { vendor_id} && pickup_datetime == { pickup_datetime} que retorna verdadeira se as hack_license medallion vendor_id colunas e pickup_datetime colunas em cada fluxo corresponderem. O joinType 'inner' é. Estamos a permitir a transmissão apenas no fluxo esquerdo, por isso broadcast tem 'left' valor.

No Data Factory UX, esta transformação parece a imagem abaixo:

O screenshot mostra a transformação com o separador 'Configurações de Junção' selecionado e um tipo de 'Unir'.

O roteiro do fluxo de dados para esta transformação está no snippet 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

Cruz personalizada junta-se exemplo

O exemplo abaixo é uma transformação de união nomeada JoiningColumns que toma o fluxo esquerdo e o fluxo LeftStream RightStream direito. Esta transformação toma dois riachos e une todas as linhas onde a coluna leftstreamcolumn é maior do que a rightstreamcolumn coluna. O joinType cross é. A radiodifusão não está ativada broadcast tem 'none' valor.

No Data Factory UX, esta transformação parece a imagem abaixo:

O screenshot mostra a transformação com o separador 'Configurações de Junção' selecionado e um tipo de 'Unir') (cruz).

O roteiro do fluxo de dados para esta transformação está no snippet abaixo:

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

Passos seguintes

Depois de juntar dados, crie uma coluna derivada e afunde os seus dados numa loja de dados de destino.