Megosztás a következőn keresztül:


CSATLAKOZIK

✅ Azure Stream Analytics ✅ Fabric Eventstream

A standard T-SQL-hez hasonlóan az Azure Stream Analytics lekérdezési nyelvén a JOIN is két vagy több bemeneti forrásból származó rekordokat egyesít. A JOIN az Azure Stream Analyticsben időbeli jellegű, ami azt jelenti, hogy minden JOIN-nak korlátoznia kell, hogy az egyező sorok milyen távolságra legyenek egymástól időben elválasztva. Például a "Csatlakozás a TollBoothEntry eseményekhez a TollBoothExit eseményekkel, amikor ugyanazon a Licenctáblán és a TollId-on történnek, és 5 percen belül egymástól" jogos; de "csatlakozzon a TollBoothEntry eseményekhez a TollBoothExit eseményekkel, amikor azok a LicensePlate-on és a TollId-on fordulnak elő" nem – az egyes TollBoothEntry-eseményekhez az összes TollBoothExit kötetlen és potenciálisan végtelen gyűjteményével egyezik ugyanahhoz a LicensePlate-hoz és a TollId-hoz.

A kapcsolat időkorlátjai a JOIN ON záradékában vannak megadva a DATEDIFF függvény használatával. A DATEDIFF maximális mérete hét nap. Az általános használatról további információt a DATEDIFF című témakörben talál. Ha a DATEDIFF-t a JOIN feltételen belül használják, a második és a harmadik paraméter speciális kezelést kap.

A SELECT * nem használható a JOIN utasításokban.

Szemantika

[ 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  
  

Érvek

<input_source>

Megadja a bemeneti adatforrást.

<reference_data>

Azok a referenciaadatok, amelyekhez csatlakozni szeretne a input_source. További információ: Referenciaadat-illesztés szakasz.

<join_type>

Megadja az illesztési művelet típusát.

CSATLAKOZZON

Azt jelzi, hogy a megadott illesztési műveletnek a megadott bemeneti források és /vagy referenciaadatok között kell történnie. Az illesztés feltételének megfelelő bal és jobb oldali összes sor szerepel az eredményhalmazban.

Figyelmeztetés

Ha a JOIN-források particionálva vannak, a JOIN predikátumnak tartalmaznia kell egy olyan feltételt, amely megfelel mindkét forrás partíciókulcsainak.

[ BAL OLDALI KÜLSŐ ILLESZTÉS ]

Megadja, hogy a bal oldali tábla összes olyan sora szerepeljen az eredményhalmazban, amely nem felel meg az illesztés feltételének, és a másik tábla kimeneti oszlopai a belső illesztés által visszaadott összes sor mellett NULL értékre vannak beállítva.

ON <join_condition>

Megadja az illesztés alapjául szolgáló feltételt. Az illesztési feltételnek rendelkeznie kell a kapcsolathoz meghatározott időkorláttal vagy ideiglenes váltószobával, és a JOIN ON záradékában van megadva a JOIN függvény speciális DATEDIFF függvényénekspeciális szintaxisával.

Példák

Az Azure Stream Analyticsben minden esemény jól definiált időbélyegzővel rendelkezik. Így a felhasználónak közvetlenül a DATEDIFF függvényben kell sor aliasokat használnia az alábbiak szerint:

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  
  

A fenti illesztési feltétel akkor és csak akkor eredményez egyezést, ha az ExitTime a EntryTime után következik be, de legfeljebb 15 perccel később.

Megjegyzés:

A SELECT utasításban használt DATEDIFF az általános szintaxist használja, amelyben egy datetime oszlop vagy kifejezés a második és harmadik paraméterként van átadva. Ha azonban a DATEDIFF függvényt a JOIN feltételen belül használja, a rendszer a input_source nevét vagy aliasát használja. A rendszer belsőleg kiválasztja az adott forrás egyes eseményeinek időbélyegét.

Az időkorlátos feltételek kombinálhatók egymással és az ON záradékon belüli egyéb feltételekkel, például:

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  
  

Három vagy több táblához való csatlakozáskor ugyanazok a szabályok vonatkoznak --- időkorlátoknak biztosítaniuk kell, hogy az összes egyező esemény véges idő alatt történjen egymástól. Ha például a tranzakció kezdete és a tranzakció végeseménye között történt összes hibát meg szeretné keresni, a következőt lehet mondani:

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  
  

A particionált források összekapcsolásakor a JOIN predikátumnak tartalmaznia kell egy feltételt, amely megfelel mindkét forrás partíciókulcsainak.

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  

Végül az Azure Stream Analytics támogatja a belső illesztést (az alapértelmezett) és a BAL külső illesztést is. Belső illesztés esetén a rendszer csak akkor ad vissza eredményt, ha talál egyezést. BAL OLDALI KÜLSŐ illesztés esetén azonban, ha az illesztés bal oldalán lévő esemény nem egyezik, a jobb oldali sor összes oszlopához null értékű sort ad vissza. Itt látható például egy példa az események hiányának megkeresésére. A következő lekérdezés azokat a sorokat adja vissza, amelyekben egy jármű beírt egy Toll Booth-t, de 15 percen belül nem lépett ki a Standról.

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  
  

A JOIN speciális DATEDIFF függvénye

Szemantika

DATEDIFF ( datepart , input_source1, input_source2 )  

Érvek

dateparts

Példa: "second", "ezredmásodperc", "perc" stb.)

input_source1

Az illesztés első bemeneti forrása. A input_source eseményeihez társított időbélyeg belsőleg bekerül a függvénybe.

input_source2

A csatlakozás második bemeneti forrása. A input_source eseményeihez társított időbélyeg belsőleg bekerül a függvénybe.

Visszaadott érték

A megadott datepart-határok számát (aláírt egész számként) adja vissza, amely a input_source1 időbélyegétől a input_source2 időbélyegéhez van adva. A visszaadott érték negatív lehet, ha a input_source1 időbélyege nagyobb, mint a input_source2 időbélyege.