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
Analogamente a T-SQL standard, JOIN nel linguaggio di query di Analisi di flusso di Azure viene usato per combinare i record di due o più origini di input. JOIN in Analisi di flusso di Azure è di natura temporale, ovvero ogni JOIN deve fornire alcuni limiti sulla distanza in cui le righe corrispondenti possono essere separate nel tempo. Ad esempio, dicendo "partecipare agli eventi TollBoothEntry con gli eventi TollBoothExit quando si verificano sullo stesso LicensePlate e TollId e entro 5 minuti l'uno dall'altro" è legittimo; ma "join TollBoothEntry events with TollBoothExit events when they occur on the LicensePlate and TollId" is not ( join tollboothEntry events with an unbounded and potenzialmente infinite collection of all TollBoothExit when they occur on the LicensePlate and TollId" is not – it match each TollBoothEntry with an unbounded and potenzialmente infinite collection of all TollBoothExit to the same LicensePlate and TollId.
I limiti di tempo per la relazione vengono specificati all'interno della clausola ON di JOIN, utilizzando la funzione DATEDIFF. Le dimensioni massime di DATEDIFF sono sette giorni. Per altre informazioni sull'uso generale, vedere DATEDIFF. Quando DATEDIFF viene usato all'interno della condizione JOIN, il secondo e il terzo parametro ottengono un trattamento speciale.
Inoltre, non è possibile usare SELECT * nelle istruzioni JOIN.
Sintassi
[ FROM { <input_source> } [ ,...n ] ]
<input_source> ::=
{
input_name [ [ AS ] input_alias ]
| <joined_table>
}
<joined_table> ::=
{
<input_source> <join_type> <input_source> ON <join_condition>
| [ <input_source> <join_type> <reference_data> ON <join_condition> ]
| [ ( ] <joined_table> [ ) ]
}
<join_type> ::=
[ { INNER | LEFT [ OUTER ] } ] JOIN
Argomenti
<input_source>
Specifica l'origine dati di input.
<reference_data>
Dati di riferimento a cui si desidera aggiungere il input_source. Per altre informazioni, vedere la sezione Join dati di riferimento.
<join_type>
Specifica il tipo di operazione di join.
UNIRE
Indica che l'operazione di join specificata deve verificarsi tra le origini di input specificate e /o i dati di riferimento. Tutte le righe dalla parte sinistra e destra che soddisfano la condizione di join vengono incluse nel set di risultati.
Avvertimento
Se le origini JOIN sono partizionate, il predicato JOIN deve includere una condizione corrispondente alle chiavi di partizione di entrambe le origini.
[ LEFT OUTER JOIN ]
Specifica che, oltre alle righe restituite dall'inner join, vengono incluse nel set di risultati tutte le righe della tabella sinistra che non rispettano la condizione di join e le colonne di output dell'altra tabella sono impostate su NULL.
ON <join_condition>
Specifica la condizione su cui è basato il join. La condizione di join deve avere un limite di tempo o una sala temporale definita per la relazione ed è specificata all'interno della clausola ON di JOIN, utilizzando la sintassi speciale della funzione SPECIAL DATEDIFF perla funzione JOIN.
Esempi
In Analisi di flusso di Azure tutti gli eventi hanno un timestamp ben definito. Pertanto, l'utente deve usare alias di riga direttamente nella funzione DATEDIFF, come indicato di seguito:
SELECT I1.TollId, I1.EntryTime,I2.ExitTime, I1.LicensePlate, DATEDIFF(minute,I1.EntryTime,I2.ExitTime) AS DurationInMinutes
FROM Input1 I1 TIMESTAMP BY EntryTime
JOIN Input2 I2 TIMESTAMP BY ExitTime
ON DATEDIFF(minute,I1,I2) BETWEEN 0 AND 15
La condizione di join precedente genererà una corrispondenza se e solo se exitTime si verifica dopo EntryTime, ma non più di 15 minuti dopo.
Annotazioni
DATEDIFF usato nell'istruzione SELECT usa la sintassi generale in cui una colonna o un'espressione datetime viene passata come secondo e terzo parametro. Tuttavia, quando la funzione DATEDIFF viene usata all'interno della condizione JOIN, viene utilizzato il nome input_source o il relativo alias. Viene selezionato internamente il timestamp associato per ogni evento nell'origine.
Le condizioni associate al tempo possono essere combinate tra loro e con altre condizioni all'interno della clausola ON, ad esempio:
SELECT I1.TollId, I1.EntryTime, I2.ExitTime, I1.LicensePlate, DATEDIFF(minute,I1.EntryTime,I2.ExitTime) AS DurationinMinutes
FROM Input1 I1 TIMESTAMP BY EntryTime
JOIN Input2 I2 TIMESTAMP BY ExitTime
ON I1.TollId=I2.TollId
AND I1.LicensePlate=I2.LicensePlate
AND DATEDIFF(minute,I1,I2) BETWEEN 0 AND 15
Quando si uniscono tre o più tabelle, le stesse regole si applicano --- limiti di tempo devono garantire che tutti gli eventi corrispondenti si verifichino entro un periodo di tempo finito l'uno dall'altro. Ad esempio, per trovare tutti gli errori che si sono verificati tra l'avvio della transazione e l'evento finale della transazione, è possibile specificare:
SELECT TS.Id, TS.Name, TS.Amount, E.ErrorCode, E.Description
FROM TStart TS TIMESTAMP BY TStartTime
JOIN TEnd TE TIMESTAMP BY TEndTime
ON DATEDIFF(second, TS, TE) BETWEEEN 0 AND 5
AND TS.Id = TE.Id
JOIN Error E TIMESTAMP BY ErrorTime
ON DATEDIFF(second, TS, E) BETWEEN 0 AND 5
AND DATEDIFF(second, TE, E) < 0
AND E.TId = TS.Id
Quando si uniscono origini partizionate, il predicato JOIN deve includere una condizione corrispondente alle chiavi di partizione di entrambe le origini.
SELECT I1.TollId, I1.EntryTime,I2.ExitTime, I1.LicensePlate, DATEDIFF(minute,I1.EntryTime,I2.ExitTime) AS DurationInMinutes
FROM Input1 I1 TIMESTAMP BY EntryTime PARTITION BY PartitionId
JOIN Input2 I2 TIMESTAMP BY ExitTime PARTITION BY PartitionId
ON I1.PartitionId = I2.PartitionId AND DATEDIFF(minute,I1,I2) BETWEEN 0 AND 15
Infine, Analisi di flusso di Azure supporta sia inner join (impostazione predefinita) che LEFT outer join. Per un inner join, viene restituito un risultato solo quando viene trovata una corrispondenza. Tuttavia, per un LEFT OUTER join, se un evento dal lato sinistro del join non corrisponde, viene restituita una riga con NULL per tutte le colonne della riga destra. Ad esempio, ecco un esempio per trovare l'assenza di eventi. La query seguente restituirà le righe in cui un veicolo ha immesso un casello, ma non ha chiuso lo Stand entro 15 minuti.
SELECT I1.TollId, I1.EntryTime, I2.ExitTime, I1.LicensePlate, DATEDIFF(minute,I1.EntryTime,I2.ExitTime) AS DurationinMinutes
FROM Input1 I1 TIMESTAMP BY EntryTime
LEFT OUTER JOIN Input2 I2 TIMESTAMP BY ExitTime
ON I1.TollId=I2.TollId
AND I1.LicensePlate=I2.LicensePlate
AND DATEDIFF( minute , I1 , I2 ) BETWEEN 0 AND 15
WHERE I2.TollId IS NULL
Funzione DATEDIFF speciale per JOIN
Sintassi
DATEDIFF ( datepart , input_source1, input_source2 )
Argomenti
dateparts
Esempio. 'second', 'millisecond', 'minute' e così via)
input_source1
Prima origine di input in Join. Internamente il timestamp associato agli eventi di questo input_source viene passato alla funzione.
input_source2
Seconda origine di input in Join. Internamente il timestamp associato agli eventi di questo input_source viene passato alla funzione.
Tipo di ritorno
Restituisce il numero di unità in dateparts trascorse dal timestamp di input_source1 al timestamp di input_source2. Il valore restituito può essere negativo se il timestamp del secondo input_source è maggiore del primo.