Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
✅ Flusso di eventi dell'infrastruttura di Analisi ✅ di flusso di Azure
L'operatore APPLY consente di richiamare una funzione con valori di tabella per ogni riga restituita da un'espressione di tabella esterna di una query. La funzione con valori di tabella funge da input destro e l'espressione di tabella esterna funge da input sinistro. L'input destro viene valutato per ogni riga dall'input sinistro e le righe prodotte vengono combinate per l'output finale. L'elenco di colonne prodotte dall'operatore APPLY è il set di colonne nell'input sinistro seguito dall'elenco di colonne restituite dall'input destro.
Esistono due forme di APPLY: CROSS APPLY ed OUTER APPLY.
L'operatore CROSS APPLY restituisce solo le righe della tabella esterna che producono un set di risultati dalla funzione con valori di tabella. Il risultato di un CROSS APPLY non può essere utilizzato come valore di destinazione di TIMESTAMP BY. Tuttavia, è possibile usare un processo di Analisi di flusso di Azure che esegue CROSS APPLY e usare un secondo processo per eseguire TIMESTAMP BY.
OUTER APPLY restituisce entrambe le righe che producono un set di risultati e righe che non lo fanno, con valori NULL nelle colonne generate dalla funzione con valori di tabella.
In Analisi di flusso di Azure sono disponibili due funzioni con valori di tabella per facilitare l'uso dei campi Matrice e Tipo di record. Sono GetArrayElements e GetRecordProperties.
Sintassi
<input> {CROSS | OUTER} APPLY <elements_selector>
<input> ::= input_name | input_alias
<elements_selector> ::=
{GetArrayElements | GetRecordProperties} (<column_name>) AS element_name
Argomenti
input_name | input_alias
Nome o alias del flusso di input.
column_name
Nome di una colonna del flusso di input.
element_name
Nome della nuova colonna contenente il risultato della funzione con valori di tabella.
Tipi restituiti
L'output è un record contenente il payload iniziale e un record 'element_name', che contiene il risultato della funzione con valori di tabella.
Per la funzione GetArrayElements il risultato sarà un record con due campi:
ArrayIndex: indice dell'elemento nella matrice
ArrayValue: valore dell'elemento nella matrice.
Per la funzione GetRecordProperties il risultato sarà un record con due campi:
PropertyName: nome della proprietà nel record.
PropertyValue: valore della proprietà nel record.
Esempi
In questo esempio, estendendo lo scenario del casello, si presuppone che le auto possano avere più di una targa (ad esempio, un'auto che sta per trainare un rimorchio avrebbe due). L'applicazione incrociata/esterna può essere usata per appiattire questa matrice, ad esempio ottenere una riga per ogni targa.
CREATE TABLE input(TollId nvarchar(max), EntryTime datetime, Licenses array)
SELECT e.TollId, e.EntryTime, flat.ArrayValue AS licensePlate
FROM input AS e
CROSS APPLY GetArrayElements(e.Licenses) AS flat
La query può essere modificata in modo da utilizzare l'applicazione esterna per tenere traccia anche delle auto senza targa.
SELECT e.TollId, e.EntryTime,
flat.ArrayValue AS licensePlate, flat.ArrayIndex AS licensePlateIndex
FROM input AS e
OUTER APPLY GetArrayElements(e.Licenses) AS flat
Un altro esempio usa matrici annidate (matrice di matrici).
WITH firstQuery AS (
SELECT input.TollId, input.EntryTime,
flat.ArrayIndex AS i1, flat.ArrayValue AS licenses
FROM input
CROSS APPLY GetArrayElements(input.ArrayOfArray) AS flat)
SELECT firstQuery.TollId, firstQuery.EntryTime, firstQuery.i1,
flat2.ArrayIndex AS i2, flat2.ArrayValue AS license
FROM firstQuery
CROSS APPLY GetArrayElements(firstQuery.licenses) AS flat2