Creare espressioni 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 all-in-one per le aziende. Microsoft Fabric copre tutto, dallo spostamento dati al data science, all'analisi in tempo reale, alla business intelligence e alla creazione di report. Vedere le informazioni su come iniziare una nuova prova gratuita!
Nel flusso di dati di mapping vengono immesse molte proprietà di trasformazione come espressioni. Queste espressioni sono costituite da valori di colonna, parametri, funzioni, operatori e valori letterali che restituiscono un tipo di dati Spark in fase di esecuzione. I flussi di dati di mapping hanno un'esperienza dedicata che consente di creare queste espressioni denominate Generatore di espressioni. L'uso del completamento del codice IntelliSense per evidenziare, controllare la sintassi e il completamento automatico, il generatore di espressioni è progettato per semplificare la compilazione dei flussi di dati. Questo articolo illustra come usare il generatore di espressioni per creare in modo efficace la logica di business.
Aprire Generatore di espressioni
Esistono più punti di ingresso per aprire il generatore di espressioni. Questi sono tutti dipendenti dal contesto specifico della trasformazione del flusso di dati. Il caso d'uso più comune riguarda trasformazioni come la colonna derivata e l'aggregazione in cui gli utenti creano o aggiornano colonne usando il linguaggio delle espressioni del flusso di dati. Il generatore di espressioni può essere aperto selezionando Apri generatore di espressioni sopra l'elenco di colonne. È anche possibile selezionare un contesto di colonna e aprire il generatore di espressioni direttamente in tale espressione.
In alcune trasformazioni, ad esempio il filtro, facendo clic su una casella di testo di espressione blu viene aperto il generatore di espressioni.
Quando si fa riferimento a colonne in una condizione corrispondente o group-by, un'espressione può estrarre valori dalle colonne. Per creare un'espressione, selezionare Colonna calcolata.
Nei casi in cui un'espressione o un valore letterale sono input validi, selezionare Aggiungi contenuto dinamico per compilare un'espressione che restituisce un valore letterale.
Elementi di espressione
Nei flussi di dati di mapping, le espressioni possono essere costituite da valori di colonna, parametri, funzioni, variabili locali, operatori e valori letterali. Queste espressioni devono restituire un tipo di dati Spark, ad esempio string, booleano o integer.
Funzioni
I flussi di dati di mapping hanno funzioni e operatori predefiniti che possono essere usati nelle espressioni. Per un elenco delle funzioni disponibili, vedere informazioni di riferimento sul linguaggio del flusso di dati per mapping.
Funzioni definite dall'utente (anteprima)
I flussi di dati di mapping supportano la creazione e l'uso di funzioni definite dall'utente. Per informazioni su come creare e usare funzioni definite dall'utente, vedere funzioni definite dall'utente.
Indici della matrice di indirizzi
Quando si usano colonne o funzioni che restituiscono tipi di matrice, usare parentesi quadre ([]) per accedere a un elemento specifico. Se l'indice non esiste, l'espressione restituisce NULL.
Importante
Nei flussi di dati di mapping, le matrici sono basate su un solo significato che fa riferimento al primo elemento dall'indice 1. Ad esempio, myArray[1] accederà al primo elemento di una matrice denominata "myArray".
Schema di input
Se il flusso di dati usa uno schema definito in una delle relative origini, è possibile fare riferimento a una colonna in base al nome in molte espressioni. Se si usa la deriva dello schema, è possibile fare riferimento alle colonne in modo esplicito usando le byName()
funzioni o byNames()
o le corrispondenze usando i modelli di colonna.
Nomi di colonna con caratteri speciali
Quando sono presenti nomi di colonna che includono spazi o caratteri speciali, racchiudere il nome tra parentesi graffe per farvi riferimento in un'espressione.
{[dbo].this_is my complex name$$$}
Parametri
I parametri sono valori passati in un flusso di dati in fase di esecuzione da una pipeline. Per fare riferimento a un parametro, selezionare il parametro dalla visualizzazione Elementi espressione o farvi riferimento con un segno dollaro davanti al nome. Ad esempio, un parametro denominato parameter1 viene fatto riferimento da $parameter1
. Per altre informazioni, vedere Parametrizzazione dei flussi di dati di mapping.
Ricerca memorizzata nella cache
Una ricerca memorizzata nella cache consente di eseguire una ricerca inline dell'output di un sink memorizzato nella cache. Sono disponibili due funzioni da usare in ogni sink e lookup()
outputs()
. La sintassi per fare riferimento a queste funzioni è cacheSinkName#functionName()
. Per altre informazioni, vedere Sink della cache.
lookup()
accetta le colonne corrispondenti nella trasformazione corrente come parametri e restituisce una colonna complessa uguale alla riga corrispondente alle colonne chiave nel sink della cache. La colonna complessa restituita contiene una sottocolumn per ogni colonna mappata nel sink della cache. Ad esempio, se si dispone di un sink errorCodeCache
della cache del codice di errore con una colonna chiave corrispondente al codice e a una colonna denominata Message
. La chiamata errorCodeCache#lookup(errorCode).Message
restituirà il messaggio corrispondente al codice passato.
outputs()
non accetta parametri e restituisce l'intero sink della cache come matrice di colonne complesse. Questa operazione non può essere chiamata se nel sink sono specificate colonne chiave e devono essere usate solo se sono presenti alcune righe nel sink della cache. Un caso d'uso comune è l'aggiunta del valore massimo di una chiave di incremento. Se una singola riga CacheMaxKey
aggregata memorizzata nella cache contiene una colonna MaxKey
, è possibile fare riferimento al primo valore chiamando CacheMaxKey#outputs()[1].MaxKey
.
Variabili locali
Se si condivide la logica tra più colonne o si vuole compartimentare la logica, è possibile creare una variabile locale. Un locale è un set di logica che non viene propagato a valle alla trasformazione seguente. È possibile creare variabili locali all'interno del generatore di espressioni passando a Elementi espressione e selezionando Variabili locali. Crearne uno nuovo selezionando Crea nuovo.
Le variabili locali possono fare riferimento a qualsiasi elemento di espressione, tra cui funzioni, schema di input, parametri e altre variabili locali. Quando si fa riferimento ad altre variabili locali, l'ordine è importante perché il locale a cui si fa riferimento deve essere "sopra" quello corrente.
Per fare riferimento a un elemento locale in una trasformazione, selezionare l'elemento locale dalla visualizzazione Elementi espressione oppure farvi riferimento con due punti davanti al nome. Ad esempio, a un locale denominato local1 viene fatto riferimento da :local1
. Per modificare una definizione locale, passare il puntatore del mouse sulla vista elementi dell'espressione e selezionare l'icona a forma di matita.
Visualizzare in anteprima i risultati dell'espressione
Se la modalità di debug è attivata, è possibile usare in modo interattivo il cluster di debug per visualizzare in anteprima i valori restituiti dall'espressione. Selezionare Aggiorna accanto all'anteprima dei dati per aggiornare i risultati dell'anteprima dei dati. È possibile visualizzare l'output di ogni riga in base alle colonne di input.
Interpolazione di stringa
Quando si creano stringhe lunghe che usano elementi di espressione, usare l'interpolazione di stringhe per creare facilmente una logica di stringa complessa. L'interpolazione di stringhe evita un uso esteso della concatenazione di stringhe quando i parametri vengono inclusi nelle stringhe di query. Usare le virgolette doppie per racchiudere il testo della stringa letterale insieme alle espressioni. È possibile includere funzioni di espressione, colonne e parametri. Per usare la sintassi delle espressioni, racchiuderla tra parentesi graffe,
Alcuni esempi di interpolazione di stringhe:
"My favorite movie is {iif(instr(title,', The')>0,"The {split(title,', The')[1]}",title)}"
"select * from {$tablename} where orderyear > {$year}"
"Total cost with sales tax is {round(totalcost * 1.08,2)}"
"{:playerName} is a {:playerRating} player"
Nota
Quando si usa la sintassi di interpolazione di stringhe nelle query di origine SQL, la stringa di query deve trovarsi in una sola riga, senza '/n'.
Espressioni di commento
Aggiungere commenti alle espressioni usando la sintassi di commento a riga singola e multilinea.
Gli esempi seguenti sono commenti validi:
/* This is my comment */
/* This is a
multi-line comment */
Se si inserisce un commento nella parte superiore dell'espressione, viene visualizzato nella casella di testo della trasformazione per documentare le espressioni di trasformazione.
Espressioni regolari
Molte funzioni del linguaggio delle espressioni usano la sintassi delle espressioni regolari. Quando si usano funzioni di espressione regolare, Expression Builder tenta di interpretare una barra rovesciata (\) come sequenza di caratteri di escape. Quando si usano barre rovesciata nell'espressione regolare, racchiudere l'intera espressione regolare in backticks (') o usare una doppia barra rovesciata.
Esempio che usa i backtick:
regex_replace('100 and 200', `(\d+)`, 'digits')
Esempio che usa barre doppie:
regex_replace('100 and 200', '(\\d+)', 'digits')
Scelte rapide da tastiera
Di seguito è riportato un elenco di collegamenti disponibili nel generatore di espressioni. La maggior parte dei collegamenti intelliSense è disponibile durante la creazione di espressioni.
- CTRL+K CTRL+C: Commenta l'intera riga.
- CTRL+K CTRL+U: Rimuovi commento.
- F1: specificare i comandi della Guida dell'editor.
- ALT+FRECCIA GIÙ: sposta verso il basso la linea corrente.
- ALT+FRECCIA SU: sposta verso l'alto la linea corrente.
- CTRL+BARRA SPAZIATRICE: mostra la Guida al contesto.
Espressioni di uso comune
Converti in date o timestamp
Per includere i valori letterali stringa nell'output del timestamp, eseguire il wrapping della conversione in toString()
.
toString(toTimestamp('12/31/2016T00:12:00', 'MM/dd/yyyy\'T\'HH:mm:ss'), 'MM/dd /yyyy\'T\'HH:mm:ss')
Per convertire i millisecondi da un periodo a una data o un timestamp, usare toTimestamp(<number of milliseconds>)
. Se il tempo arriva in secondi, moltiplicare per 1.000.
toTimestamp(1574127407*1000l)
L'elemento finale "l" alla fine dell'espressione precedente indica la conversione in un tipo long come sintassi inline.
Trovare l'ora dall'epoca o dall'ora Unix
toLong( currentTimestamp() - toTimestamp('1970-01-01 00:00:00.000', 'aaaa-MM-gg HH:mm:ss. SSS') ) * 1000l
Valutazione del tempo del flusso di dati
Il flusso di dati elabora fino a millisecondi. Per 2018-07-31T20:00:00.2170000, nell'output verrà visualizzato 2018-07-31T20:00:00.217 . Nel portale per il servizio, il timestamp viene visualizzato nell'impostazione del browser corrente, che può eliminare 217, ma quando si eseguirà il flusso di dati end-to-end, 217 (anche la parte in millisecondi viene elaborata). È possibile usare toString(myDateTimeColumn) come espressione e visualizzare i dati di precisione completa in anteprima. Elaborare datetime come datetime anziché stringa per tutti gli scopi pratici.