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.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: