Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
✅ 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.