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


JOIN (Azure Stream Analytics)

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 kombinál. A JOIN az Azure Stream Analyticsben időbeli jellegű, ami azt jelenti, hogy minden JOIN-nak bizonyos korlátokat kell biztosítania arra vonatkozóan, hogy az egyező sorok milyen távolságra vannak egymástól időben. Ha például "csatlakozás a TollBoothEntry-eseményekhez a TollBoothExit eseményekkel, amikor ugyanazon a LicensePlate-on és a TollId-on történnek, és 5 percen belül egymástól" jogszerű; 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 (Azure Stream Analytics) 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.

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

Szintaxis

[ 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  
  

Argumentumok

<input_source>

Megadja a bemeneti adatforrást.

<reference_data>

Azok a referenciaadatok, amelyekhez csatlakozni szeretne a input_source. További információ: Referenciaadatok csatlakoztatása szakasz.

<join_type>

Meghatározza 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 sorok az eredményhalmazba kerülnek.

Figyelmeztetés

Ha a JOIN-források particionáltak, a JOIN predikátumnak tartalmaznia kell egy 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, amely nem felel meg az illesztés feltételének, szerepeljen az eredményhalmazban, és a másik tábla kimeneti oszlopai a belső illesztés által visszaadott összes sor mellett NULL értékűre legyenek állítva.

ON <join_condition>

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

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 soraliasokat 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 az 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 lesz átadva második és harmadik paraméterként. 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 az adott forrás minden eseményéhez társított időbélyeget választja ki.

Az időhöz kötött 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ábla összekapcsolásakor ugyanazok a szabályok vonatkoznak --- időkorlátoknak biztosítaniuk kell, hogy az összes egyeztetett esemény véges idő alatt történjen egymástól. Ha például a tranzakció kezdete és a tranzakció végi eseménye között történt összes hibát meg szeretné találni, a következőt mondhatja:

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  
  

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 csak akkor kapunk eredményt, ha van egyezés. BAL OLDALI KÜLSŐ illesztés esetében azonban, ha az illesztés bal oldalán lévő eseményhez nincs egyezés, akkor a rendszer olyan oszlopot ad vissza, amely a jobb oldali sor összes oszlopában NULL értéket tartalmaz. Íme 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ű belépett egy Toll Booth-be, 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

Szintaxis

DATEDIFF ( datepart , input_source1, input_source2 )  

Argumentumok

dateparts

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

input_source1

A Csatlakozás első bemeneti forrása. Belsőleg a input_source eseményeihez társított időbélyeg kerül a függvénybe.

input_source2

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

Visszatérési típus

A datepartsban lévő egységek számát adja vissza, amely a input_source1 időbélyegétől a input_source2 időbélyegig eltelt. A visszaadott érték negatív lehet, ha a második input_source időbélyege nagyobb az elsőnél.