Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
✅ Azure Stream Analytics ✅ Fabric Eventstream
Precis som standard-T-SQL används JOIN i Azure Stream Analytics-frågespråket för att kombinera poster från två eller flera indatakällor. JOIN i Azure Stream Analytics är till sin natur tidsmässiga, vilket innebär att varje JOIN måste ange vissa gränser för hur långt matchande rader kan avgränsas i tid. Till exempel är det legitimt att säga "join TollBoothEntry events with TollBoothExit events when they occur on the same LicensePlate and TollId and within 5 minutes of each other" (anslut till TollBoothEntry-händelser med TollBoothExit-händelser när de inträffar på samma LicensePlate och TollId och inom 5 minuter från varandra" . men "join TollBoothEntry events with TollBoothExit events when they occur on the LicensePlate and TollId" is not – it would match each TollBoothEntry with an unbounded and potentially infinite collection of all TollBoothExit to the same LicensePlate and TollId.
Tidsbegränsningen för relationen anges i ON-satsen i JOIN med hjälp av funktionen DATEDIFF. Den maximala DATEIFF-storleken är sju dagar. Mer information om dess allmänna användning finns i DATEDIFF. När DATEDIFF används i JOIN-villkoret får den andra och tredje parametern särskild behandling.
Dessutom går det inte att använda SELECT * i JOIN-instruktioner.
Syntax
[ 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  
  
Argumentpunkter
<input_source>
Anger indatakällan.
<reference_data>
Referensdata som du vill ansluta till input_source. Mer information finns i avsnittet Referensdataanslutning.
<join_type>
Anger typen av kopplingsåtgärd.
ANSLUTA
Anger att den angivna kopplingsåtgärden ska ske mellan de angivna indatakällorna och /eller referensdata. Alla rader från vänster och höger som uppfyller kopplingsvillkoret ingår i resultatuppsättningen.
Varning
Om JOIN-källorna partitioneras måste JOIN-predikatet innehålla ett villkor som matchar partitionsnycklarna för båda källorna.
[ VÄNSTER YTTRE KOPPLING]
Anger att alla rader från den vänstra tabellen som inte uppfyller kopplingsvillkoret ingår i resultatuppsättningen, och utdatakolumner från den andra tabellen är inställda på NULL utöver alla rader som returneras av den inre kopplingen.
PÅ <join_condition>
Anger det villkor som kopplingen baseras på. Kopplingsvillkoret måste ha en tidsbunden eller ett tidsmässigt svängrum som definierats för relationen och anges i ON-satsen i JOIN, med hjälp av den särskilda syntaxen för funktionen Special DATEDIFF Function for JOIN.
Exempel
I Azure Stream Analytics har alla händelser en väldefinierad tidsstämpel. Användaren måste därför använda radalias direkt i funktionen DATEDIFF enligt följande:
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  
  
Kopplingsvillkoret ovan resulterar i en matchning om och endast om ExitTime inträffar efter EntryTime, men inte mer än 15 minuter senare.
Anmärkning
DATEDIFF som används i SELECT-instruktionen använder den allmänna syntaxen där en datetime-kolumn eller ett uttryck skickas som den andra och tredje parametern. Men när funktionen DATEDIFF används i JOIN-villkoret används det input_source namnet eller dess alias. Internt väljs tidsstämpeln som är associerad för varje händelse i källan.
Tidsbundna villkor kan kombineras med varandra och med andra villkor i ON-satsen, t.ex.
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  
  
När du ansluter till tre eller flera tabeller gäller samma regler --- tidsintervall måste se till att alla matchade händelser inträffar inom en begränsad tid från varandra. Om du till exempel vill hitta alla fel som uppstod mellan transaktionens start- och transaktionssluthändelse kan man säga:
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  
  
När du ansluter källor som är partitionerade måste JOIN-predikatet innehålla ett villkor som matchar partitionsnycklarna för båda källorna.
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  
Slutligen stöder Azure Stream Analytics både inre koppling (standard) och vänster yttre koppling. För en inre koppling returneras endast ett resultat när en matchning hittas. Men för en VÄNSTER YTTRE koppling returneras en rad med NULL för alla kolumner i den högra raden om en händelse från vänster sida av kopplingen är omatchad. Här är till exempel ett exempel för att hitta frånvaron av händelser. Följande fråga returnerar de rader där ett fordon har angett en avgiftsbelagd monter men inte har lämnat montern inom 15 minuter.
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  
  
Särskild DATEDIFF-funktion för JOIN
Syntax
DATEDIFF ( datepart , input_source1, input_source2 )  
Argumentpunkter
dateparts
Exempel. "second", "millisekunder", "minute" osv.)
input_source1
Den första indatakällan i joinen. Internt skickas tidsstämpeln som är associerad med händelserna från den här input_source till funktionen.
input_source2
Den andra indatakällan i joinen. Internt skickas tidsstämpeln som är associerad med händelserna från den här input_source till funktionen.
Returvärde
Returnerar antalet (som ett signerat heltal) för de angivna datumdelsgränserna som korsas från tidsstämpeln för input_source1 till tidsstämpeln för input_source2. Det returnerade värdet kan vara negativt om tidsstämpeln för input_source1 är större än tidsstämpeln för input_source2.