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


APPLY (Azure Stream Analytics)

Az APPLY operátor lehetővé teszi, hogy egy lekérdezés külső táblakifejezése által visszaadott minden egyes sorhoz meghívjon egy táblaértékű függvényt. A táblaértékű függvény a jobb oldali bemenetként, a külső táblakifejezés pedig bal oldali bemenetként működik. A bal oldali bemenet minden sorához kiértékeli a jobb oldali bemenetet, a létrehozott sorokat pedig kombinálja a rendszer a végső kimenethez. Az APPLY operátor által létrehozott oszlopok listája a bal oldali bemenet oszlopainak halmaza, amelyet a jobb oldali bemenet által visszaadott oszlopok listája követ.

Az APPLY két formája létezik: CROSS APPLY és OUTER APPLY.

A CROSS APPLY függvény csak olyan sorokat ad vissza a külső táblából, amelyek eredményhalmazt hoznak létre a táblaértékkel rendelkező függvényből. A CROSS APPLY eredménye nem használható a TIMESTAMP BY célértékeként. Használhat azonban egy Azure Stream Analytics-feladatot, amely végrehajtja a CROSS APPLY műveletet, és használhat egy második feladatot a TIMESTAMP BY végrehajtásához.

Az OUTER APPLY függvény az eredményhalmazt előállító sorokat és azokat a sorokat is visszaadja, amelyek nem, a táblaértékű függvény által létrehozott oszlopokban null értékekkel.

Az Azure Stream Analyticsben két táblaértékű függvény érhető el, amelyek megkönnyítik a Tömb és a Rekord típusú mezők használatát. Ezek a GetArrayElements és a GetRecordProperties.

Szintaxis

  
<input> {CROSS | OUTER} APPLY <elements_selector>  
  
<input> ::= input_name |  input_alias  
  
<elements_selector> ::=   
{GetArrayElements | GetRecordProperties} (<column_name>) AS element_name  
  

Argumentumok

input_name | input_alias

A bemeneti stream neve vagy aliasa.

column_name

A bemeneti adatfolyam egy oszlopának neve.

element_name

A táblaértékű függvény eredményét tartalmazó új oszlop neve.

Visszatérési típusok

A kimenet egy rekord, amely tartalmazza a kezdeti hasznos adatokat és egy "element_name" rekordot, amely a táblaértékfüggvény eredményét tartalmazza.

A GetArrayElements függvény eredménye egy két mezőt tartalmazó rekord lesz:

  • ArrayIndex: a tömb elemének indexe

  • ArrayValue: a tömb elemének értéke.

A GetRecordProperties függvény eredménye egy rekord lesz, két mezővel:

  • PropertyName: a rekordban lévő tulajdonság neve.

  • PropertyValue: a rekordban lévő tulajdonság értéke.

Példák

Ebben a példában, a díjfizetési forgatókönyv kiterjesztése során feltételezzük, hogy az autók több rendszámtáblával is rendelkezhetnek (például egy pótkocsit vonó autónak kettő lenne). A kereszt/külső alkalmazás használható a tömb simítására, azaz rendszámtáblánként egy sor lekérésére.

CREATE TABLE input(TollId nvarchar(max), EntryTime datetime, Licenses array)  
  
SELECT e.TollId, e.EntryTime, flat.ArrayValue AS licensePlate   
   FROM input AS e   
   CROSS APPLY GetArrayElements(e.Licenses) AS flat  
  

A lekérdezés módosítható úgy, hogy külső alkalmazás használatával is nyomon követhesse a rendszám nélküli autókat.

SELECT e.TollId, e.EntryTime,   
flat.ArrayValue AS licensePlate, flat.ArrayIndex AS licensePlateIndex  
   FROM input AS e   
   OUTER APPLY GetArrayElements(e.Licenses) AS flat  
  

Egy másik példa beágyazott tömbök (tömbök tömbje) használatával.

WITH firstQuery AS (  
   SELECT input.TollId, input.EntryTime,   
   flat.ArrayIndex AS i1, flat.ArrayValue AS licenses   
      FROM input   
      CROSS APPLY GetArrayElements(input.ArrayOfArray) AS flat)  
  
SELECT firstQuery.TollId, firstQuery.EntryTime, firstQuery.i1,   
flat2.ArrayIndex AS i2, flat2.ArrayValue AS license  
   FROM firstQuery  
   CROSS APPLY GetArrayElements(firstQuery.licenses) AS flat2