Condividi tramite


Trasformazioni di ricerca nel flusso di dati di mapping

SI APPLICA A: Azure Data Factory Azure Synapse Analytics

Suggerimento

Provare Data Factory in Microsoft Fabric, una soluzione di analisi completa per le aziende. Microsoft Fabric copre tutti gli elementi, dallo spostamento dei dati all'analisi scientifica dei dati, all'analisi in tempo reale, alla business intelligence e alla creazione di report. Scopri come avviare gratuitamente una nuova versione di valutazione .

I flussi di dati sono disponibili sia in Azure Data Factory che in Azure Synapse Pipelines. Questo articolo si applica ai flussi di dati di mapping. Se non si ha esperienza con le trasformazioni, vedere l'articolo introduttivo Trasformare i dati usando un flusso di dati di mapping.

Usare la trasformazione della ricerca dei dati di riferimento da un'altra origine in uno streaming del flusso di dati. La trasformazione della ricerca aggiunge le colonne dai dati corrispondenti ai dati di origine.

Una trasformazione della ricerca è simile a una left outer join. Tutte le righe del flusso primario sono presenti nel flusso di output con colonne aggiuntive del flusso di ricerca.

Configurazione

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

Flusso primario: flusso in ingresso di dati. Questo flusso è equivalente al lato sinistro di un join.

Flusso di ricerca: dati accodati al flusso primario. I dati aggiunti vengono determinati in base alle condizioni di ricerca. Questo flusso è equivalente al lato destro di un join.

Trova la corrispondenza con più righe: se abilitata, una riga con più corrispondenze nel flusso primario restituirà più righe. In caso contrario, verrà restituita una sola riga in base alla condizione "Corrispondenza".

Corrispondenza su: visibile solo se non è selezionata l'opzione "Trova più righe". Scegliere se trovare la corrispondenza con qualsiasi riga, la prima corrispondenza o l'ultima corrispondenza. Qualsiasi riga è consigliata poiché viene eseguita più velocemente. Se viene selezionata la prima riga o l'ultima riga, sarà necessario specificare le condizioni di ordinamento.

Condizioni di ricerca: scegliere le colonne su cui trovare la corrispondenza. Se viene soddisfatta la condizione di uguaglianza, le righe verranno considerate corrispondenti. Passare il puntatore del mouse e selezionare "Colonna calcolata" per estrarre un valore usando il linguaggio delle espressioni del flusso di dati.

Tutte le colonne di entrambi i flussi sono incluse nei dati di output. Per rilasciare colonne duplicate o indesiderate, aggiungere una trasformazione della selezione dopo la trasformazione della ricerca. Le colonne possono anche essere rilasciate o rinominate in una trasformazione sink.

Join non uguali

Per usare un operatore condizionale, ad esempio diverso da (!=) o maggiore di (>) nelle condizioni di ricerca, modificare l'elenco a discesa dell'operatore tra le due colonne. Per i join non uguali è necessario che almeno uno dei due flussi venga trasmesso usando la broadcast fissa nella scheda Ottimizza.

Non-equi lookup

Analisi delle righe corrispondenti

Dopo la trasformazione della ricerca, è possibile usare la funzione isMatch() per verificare se la ricerca corrisponde a singole righe.

Lookup pattern

Un esempio di questo modello consiste nell'usare la trasformazione della suddivisione condizionale per suddividere la funzione isMatch(). Nell'esempio precedente, le righe corrispondenti passano attraverso il flusso superiore, mentre il flusso delle righe non corrispondenti passa attraverso il flusso NoMatch.

Verifica delle condizioni di ricerca

Quando si testa la trasformazione della ricerca con anteprima dati in modalità di debug, usare un piccolo set di dati noti. Quando si campionano righe da un set di dati di grandi dimensioni, non è possibile prevedere quali righe e chiavi verranno lette per il test. Il risultato è non deterministico, vale a dire che le condizioni di join potrebbero non restituire corrispondenze.

Ottimizzazione della trasmissione

Broadcast Join

Nella trasformazione di join, ricerche ed exists, se uno o entrambi i flussi di dati rientrano nella memoria del nodo di lavoro, è possibile ottimizzare le prestazioni abilitando la trasmissione. Per impostazione predefinita, il motore Spark deciderà automaticamente se trasmettere o meno un lato. Per scegliere manualmente il lato da trasmettere, selezionare Fisso.

Non è consigliabile disabilitare la trasmissione tramite l'opzione Off a meno che i join non siano in errore di timeout.

Ricerca memorizzata nella cache

Se si eseguono più ricerche più piccole nella stessa origine, un sink memorizzato nella cache e una ricerca potrebbero essere un caso d'uso migliore rispetto alla trasformazione ricerca. Esempi comuni in cui un sink della cache potrebbe essere preferibile cercare un valore massimo in un archivio dati e trovare i codici di errore corrispondenti a un database dei messaggi di errore. Per altre informazioni, vedere sink della cache e ricerche memorizzate nella cache.

Script del flusso di dati

Sintassi

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

Esempio

Screenshot shows the Lookup settings tab for the following code.

Lo script del flusso di dati per la configurazione di ricerca precedente si trova nel frammento di codice riportato di seguito.

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