Transformações de pesquisa no fluxo de dados de mapeamento

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Os fluxos de dados estão disponíveis nos pipelines do Azure Data Factory e do Azure Synapse. Este artigo se aplica ao fluxo de dados de mapeamento. Se você for iniciante nas transformações, veja o artigo introdutório Transformar dados usando um fluxo de dados de mapeamento.

Use a transformação de pesquisa para fazer referência a dados de outra fonte em um stream de fluxo de dados. A transformação de pesquisa acrescenta colunas dos dados correspondentes aos dados de origem.

Uma transformação de pesquisa é semelhante a uma união externa esquerda. Todas as linhas do fluxo primário existirão no fluxo de saída com colunas adicionais do fluxo de pesquisa.

Configuração

Screenshot shows the Lookup settings tab with the labels described in the following text.

Fluxo primário: O fluxo de entrada de dados. Esse fluxo é equivalente ao lado esquerdo de uma união.

Fluxo de pesquisa: Os dados que são acrescentados ao fluxo primário. A determinação de quais dados são adicionados é feita pelas condições de pesquisa. Esse fluxo é equivalente ao lado direito de uma união.

Corresponder várias linhas: Se habilitada, uma linha com várias correspondências no fluxo principal retornará várias linhas. Caso contrário, apenas uma linha será retornada com base na condição “Corresponder a”.

Corresponder em: visível somente se “Corresponder a várias linhas” não estiver selecionado. Escolha se deseja corresponder a qualquer linha, a primeira correspondência ou a última correspondência. Qualquer linha será recomendada à medida que for executada mais rapidamente. Se a primeira linha ou a última linha for selecionada, será necessário especificar as condições de classificação.

Condições de pesquisa: Escolha a quais colunas será feita a correspondência. Se a condição de igualdade for atendida, as linhas serão consideradas uma correspondência. Focalize e selecione "Coluna computada" para extrair um valor usando a linguagem de expressão do fluxo de dados.

Todas as colunas de ambos os fluxos são incluídas nos dados de saída. Para remover colunas duplicadas ou indesejadas, adicione um Selecionar transformação após a transformação de pesquisa. As colunas também podem ser descartadas ou renomeadas em uma transformação de coletor.

Uniões não equivalentes

Para usar um operador condicional como diferente de (!=) ou maior que (>) em suas condições de pesquisa, altere a lista suspensa do operador entre as duas colunas. Uniões não equivalentes exigem que pelo menos um dos dois fluxos sejam transmitidos usando a transmissão Fixa na guia Otimizar.

Non-equi lookup

Análise de linhas correspondentes

Após a transformação de pesquisa, a função isMatch() poderá ser usada para ver se a pesquisa correspondeu a linhas individuais.

Lookup pattern

Um exemplo desse padrão é usar a transformação de divisão condicional para dividir na função isMatch(). No exemplo acima, as linhas correspondentes passam pelo fluxo superior, e o fluxo de linhas não correspondentes pelo fluxo NoMatch.

Teste de condições de pesquisa

Ao testar a transformação de pesquisa com a 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 grande, você não consegue prever quais linhas e chaves serão lidas para o teste. O resultado é não determinístico, o que significa que suas condições de junção podem não retornar correspondência alguma.

Otimização de transmissão

Broadcast Join

Em transformação de junções, pesquisas e ocorrê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 do Spark decidirá automaticamente se deseja ou não transmitir um lado. Para escolher manualmente o lado a ser transmitido, selecione Fixo.

Não é recomendável desabilitar a transmissão por meio da opção Desativar, a menos que suas uniões estejam tendo erros de tempo limite.

Pesquisa armazenada em cache

Se você está fazendo várias pesquisas menores na mesma origem, um coletor e uma pesquisa armazenados em cache podem ser um caso de uso melhor do que a transformação de pesquisa. Exemplos comuns em que um coletor de cache pode ser melhor são a pesquisa de um valor máximo em um armazenamento de dados e a correspondência de códigos de erro a um banco de dados de mensagens de erro. Para obter mais informações, saiba mais sobre os coletores de cache e as pesquisas armazenadas em cache.

Script de fluxo de dados

Sintaxe

<leftStream>, <rightStream>
    lookup(
        <lookupConditionExpression>,
        multiple: { true | false },
        pickup: { 'first' | 'last' | 'any' },  ## Only required if false is selected for multiple
        { desc | asc }( <sortColumn>, { true | false }), ## Only required if 'first' or 'last' is selected. true/false determines whether to put nulls first
        broadcast: { 'auto' | 'left' | 'right' | 'both' | 'off' }
    ) ~> <lookupTransformationName>

Exemplo

Screenshot shows the Lookup settings tab for the following code.

O script de fluxo de dados para a configuração de pesquisa acima está no trecho de código abaixo.

SQLProducts, DimProd lookup(ProductID == ProductKey,
    multiple: false,
    pickup: 'first',
    asc(ProductKey, true),
    broadcast: 'auto')~> LookupKeys

Próximas etapas