Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
✅Eventstream prostředků infrastruktury Azure Stream Analytics ✅
Stejně jako u standardního jazyka T-SQL se funkce JOIN v dotazovacím jazyce Azure Stream Analytics používá ke kombinování záznamů ze dvou nebo více vstupních zdrojů. SPOJENÍ ve službě Azure Stream Analytics je dočasné, což znamená, že každá funkce JOIN musí poskytovat určitá omezení, jak daleko se dají odpovídající řádky oddělit v čase. Řekněte například "připojit se k události TollBoothEntry s tollBoothExit události, když dojde na stejné Licenčníplate a TollId a do 5 minut od sebe" je legitimní; ale "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 potenciálně infinite collection of all TollBoothExit to the same LicensePlate and TollId.
Časové hranice relace jsou zadány uvnitř klauzule ON join pomocí funkce DATEDIFF. Maximální velikost DATAEDIFF je sedm dní. Další informace o jeho obecném použití naleznete v tématu DATEDIFF. Při použití FUNKCE DATEDIFF uvnitř podmínky JOIN získá druhý a třetí parametr speciální zacházení.
Kromě toho příkaz SELECT * nelze použít v příkazech JOIN.
Syntaxe
[ 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
Argumenty
<input_source>
Určuje vstupní zdroj dat.
<reference_data>
Referenční data, ke kterým chcete připojit input_source. Další informace najdete v části Odkazování na spojení dat.
<join_type>
Určuje typ operace spojení.
PŘIPOJIT
Označuje, že zadaná operace spojení by měla probíhat mezi zadanými vstupními zdroji a /nebo referenčními daty. Všechny řádky zleva a vpravo, které splňují podmínku spojení, jsou zahrnuty do sady výsledků.
Výstraha
Pokud jsou zdroje JOIN rozdělené na oddíly, predikát JOIN musí obsahovat podmínku odpovídající klíčům oddílu obou zdrojů.
[ LEVÉ VNĚJŠÍ SPOJENÍ ]
Určuje, že všechny řádky z levé tabulky, které nesplňují podmínku spojení, jsou zahrnuty do sady výsledků a výstupní sloupce z druhé tabulky jsou kromě všech řádků vrácených vnitřním spojením nastaveny na hodnotu NULL.
ZAPNUTO <join_condition>
Určuje podmínku, na které je spojení založeno. Podmínka spojení musí mít časovou vazbu nebo časovou místnost definovanou pro relaci a je určena uvnitř klauzule ON join pomocí speciální syntaxe speciální funkce DATEDIFF pro JOIN funkce.
Příklady
Ve službě Azure Stream Analytics mají všechny události dobře definované časové razítko. Uživatel tedy musí používat aliasy řádků přímo ve funkci DATEDIFF následujícím způsobem:
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
Výše uvedená podmínka spojení způsobí shodu, pokud a pouze v případě, že exitTime nastane po entryTime, ale o více než 15 minut později.
Poznámka:
Funkce DATEDIFF použitá v příkazu SELECT používá obecnou syntaxi, ve které se jako druhý a třetí parametr předává sloupec nebo výraz datetime. Pokud se však funkce DATEDIFF použije v podmínce JOIN, použije se název input_source nebo jeho alias. Interně se vybere časové razítko přidružené pro každou událost v daném zdroji.
Podmínky vázané na čas lze vzájemně kombinovat a s jinými podmínkami uvnitř klauzule ON, například:
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
Při spojování tří nebo více tabulek platí stejná pravidla --- časových mezích musí zajistit, aby všechny odpovídající události probíhaly v omezeném časovém intervalu mezi sebou. Pokud například chcete najít všechny chyby, ke kterým došlo mezi událostí zahájení transakce a ukončení transakce, můžete například říci:
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
Při připojování zdrojů rozdělených do oddílů musí predikát JOIN obsahovat podmínku odpovídající klíčům oddílu obou zdrojů.
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
Azure Stream Analytics nakonec podporuje vnitřní spojení (výchozí) i levé vnější spojení. Pro vnitřní spojení se výsledek vrátí pouze v případě, že se najde shoda. Pokud je však událost z levé strany spojení nedostupná, vrátí se řádek s hodnotou NULL pro všechny sloupce pravého řádku. Tady je příklad, jak najít absenci událostí. Následující dotaz vrátí řádky, ve kterých vozidlo vstoupilo do placené kabiny, ale do 15 minut neprošel stánek.
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
Speciální funkce DATEDIFF pro JOIN
Syntaxe
DATEDIFF ( datepart , input_source1, input_source2 )
Argumenty
dateparts
Příklad: "second", "milisekund", "minute" atd.)
input_source1
První vstupní zdroj ve spojení. Interně se do funkce předá časové razítko přidružené k událostem z tohoto input_source.
input_source2
Druhý vstupní zdroj ve spojení. Interně se do funkce předá časové razítko přidružené k událostem z tohoto input_source.
Návratová hodnota
Vrátí počet (jako celé číslo) zadané hranice části kalendářního data překřížené z časového razítka input_source1 do časového razítka input_source2. Vrácená hodnota může být záporná, pokud časové razítko input_source1 je větší než časové razítko input_source2.