Transformação de procura no fluxo de dados de mapeamentoLookup transformation in mapping data flow

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Utilize a transformação de procura para obter dados de referência de outra fonte num fluxo de fluxo de dados.Use the lookup transformation to reference data from another source in a data flow stream. A transformação de procura anexa colunas de dados combinados com os dados de origem.The lookup transformation appends columns from matched data to your source data.

Uma transformação de procura é semelhante a uma união exterior esquerda.A lookup transformation is similar to a left outer join. Todas as linhas do fluxo primário existirão no fluxo de saída com colunas adicionais do fluxo de procuração.All rows from the primary stream will exist in the output stream with additional columns from the lookup stream.

ConfiguraçãoConfiguration

A screenshot mostra o separador definições de Configuração do Lookup com as etiquetas descritas no texto seguinte.Screenshot shows the Lookup settings tab with the labels described in the following text.

Fluxo primário: O fluxo de dados que chega.Primary stream: The incoming stream of data. Este fluxo é equivalente ao lado esquerdo de uma junta.This stream is equivalent to the left side of a join.

Fluxo de procura: Os dados que estão anexados ao fluxo primário.Lookup stream: The data that is appended to the primary stream. Quais dados são adicionados é determinado pelas condições de procura.Which data is added is determined by the lookup conditions. Este fluxo é equivalente ao lado direito de uma união.This stream is equivalent to the right side of a join.

Combine várias linhas: Se ativado, uma linha com várias partidas na corrente primária retornará várias linhas.Match multiple rows: If enabled, a row with multiple matches in the primary stream will return multiple rows. Caso contrário, apenas uma linha será devolvida com base na condição 'Match on'.Otherwise, only a single row will be returned based upon the 'Match on' condition.

Jogo em: Só é visível se não for selecionada 'Match multiple rows'.Match on: Only visible if 'Match multiple rows' is not selected. Escolha se corresponde em qualquer linha, no primeiro jogo ou no último jogo.Choose whether to match on any row, the first match, or the last match. Recomenda-se qualquer linha, uma vez que executa o mais rápido.Any row is recommended as it executes the fastest. Se a primeira linha ou a última linha forem selecionadas, será necessário especificar as condições de classificação.If first row or last row is selected, you'll be required to specify sort conditions.

Condições de procura: Escolha quais colunas combinar.Lookup conditions: Choose which columns to match on. Se a condição de igualdade for cumprida, então as linhas serão consideradas compatíveis.If the equality condition is met, then the rows will be considered a match. Hover e selecione 'Coluna Computada' para extrair um valor utilizando a linguagem de expressão de fluxo de dados.Hover and select 'Computed column' to extract a value using the data flow expression language.

Todas as colunas de ambos os fluxos estão incluídas nos dados de saída.All columns from both streams are included in the output data. Para deixar cair colunas duplicadas ou indesejadas, adicione uma transformação selecionada após a sua transformação de procura.To drop duplicate or unwanted columns, add a select transformation after your lookup transformation. As colunas também podem ser largadas ou renomeadas numa transformação de pia.Columns can also be dropped or renamed in a sink transformation.

Não-equi junta-seNon-equi joins

Para utilizar um operador condicional como não é igual (!=) ou superior a (>) nas suas condições de procuração, altere o recuo do operador entre as duas colunas.To use a conditional operator such as not equals (!=) or greater than (>) in your lookup conditions, change the operator dropdown between the two columns. As juntas não-equi requerem que pelo menos um dos dois streams seja transmitido através da radiodifusão fixa no separador Otimize.Non-equi joins require at least one of the two streams to be broadcasted using Fixed broadcasting in the Optimize tab.

Não-equi lookupNon-equi lookup

Análise de linhas combinadasAnalyzing matched rows

Após a sua transformação de lookup, a função isMatch() pode ser usada para ver se o lookup corresponde a linhas individuais.After your lookup transformation, the function isMatch() can be used to see if the lookup matched for individual rows.

Padrão de procuraLookup pattern

Um exemplo deste padrão é usar a transformação de divisão condicional para dividir a isMatch() função.An example of this pattern is using the conditional split transformation to split on the isMatch() function. No exemplo acima, as linhas correspondentes passam pelo fluxo superior e as linhas não correspondentes fluem através do NoMatch fluxo.In the example above, matching rows go through the top stream and non-matching rows flow through the NoMatch stream.

Condições de análise de testesTesting lookup conditions

Ao testar a transformação de procura com pré-visualização de dados no modo depuror, utilize um pequeno conjunto de dados conhecidos.When testing the lookup transformation with data preview in debug mode, use a small set of known data. Ao recolher amostras de um conjunto de dados grande, não é possível prever quais linhas e teclas serão lidas para testes.When sampling rows from a large dataset, you can't predict which rows and keys will be read for testing. O resultado não é determinístico, o que significa que as suas condições de união podem não devolver quaisquer partidas.The result is non-deterministic, meaning that your join conditions may not return any matches.

Otimização de transmissãoBroadcast optimization

Transmissão AderirBroadcast Join

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.In joins, lookups and exists transformation, if one or both data streams fit into worker node memory, you can optimize performance by enabling Broadcasting. Por predefinição, o motor de faísca decidirá automaticamente se transmite ou não um dos lados.By default, the spark engine will automatically decide whether or not to broadcast one side. Para escolher manualmente qual lado transmitir, selecione Fixo.To manually choose which side to broadcast, select Fixed.

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.It's not recommended to disable broadcasting via the Off option unless your joins are running into timeout errors.

Lookup em cacheCached lookup

Se estiver a fazer várias análises menores na mesma fonte, uma pia em cache e uma procura talvez um caso de melhor uso do que a transformação de procura.If you're doing multiple smaller lookups on the same source, a cached sink and lookup maybe a better use case than the lookup transformation. Exemplos comuns em que um lavatório de cache pode ser melhor estão à procura de um valor máximo numa loja de dados e códigos de erro correspondentes a uma base de dados de mensagens de erro.Common examples where a cache sink may be better are looking up a max value on a data store and matching error codes to an error message database. Para mais informações, saiba sobre lavatórios de cache e pesquisas em cache.For more information, learn about cache sinks and cached lookups.

Script de fluxo de dadosData flow script

SyntaxSyntax

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

ExemploExample

A screenshot mostra o separador definições de Configuração do Lookup para o seguinte código.Screenshot shows the Lookup settings tab for the following code.

O script de fluxo de dados para a configuração de procura acima está no corte de código abaixo.The data flow script for the above lookup configuration is in the code snippet below.

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

Passos seguintesNext steps