Delen via


TOEPASSEN

✅ Azure Stream Analytics ✅ Fabric Eventstream

Met de operator APPLY kunt u een tabelwaardefunctie aanroepen voor elke rij die wordt geretourneerd door een buitenste tabelexpressie van een query. De tabelwaardefunctie fungeert als de rechterinvoer en de buitenste tabelexpressie fungeert als de linkerinvoer. De rechterinvoer wordt geëvalueerd voor elke rij uit de linkerinvoer en de geproduceerde rijen worden gecombineerd voor de uiteindelijke uitvoer. De lijst met kolommen die door de operator APPLY worden geproduceerd, is de set kolommen in de linkerinvoer, gevolgd door de lijst met kolommen die door de rechterinvoer worden geretourneerd.

Er zijn twee soorten APPLY: CROSS APPLY en OUTER APPLY.

CROSS APPLY retourneert alleen rijen uit de buitenste tabel die een resultatenset produceren van de functie met tabelwaarde. Het resultaat van een CROSS APPLY kan niet worden gebruikt als de doelwaarde van de TIMESTAMP BY. U kunt echter één Azure Stream Analytics-taak gebruiken die de CROSS APPLY uitvoert en een tweede taak gebruiken om de TIMESTAMP BY uit te voeren.

OUTER APPLY retourneert zowel rijen die een resultatenset produceren als rijen die geen NULL-waarden bevatten in de kolommen die door de functie tabelwaarde worden geproduceerd.

Er zijn twee tabelwaardefuncties beschikbaar in Azure Stream Analytics om het werken met matrix- en recordtypevelden te vergemakkelijken. Ze zijn GetArrayElements en GetRecordProperties.

Syntaxis

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

Argumenten

input_name | input_alias

De naam of alias van de invoerstroom.

column_name

De naam van een kolom van de invoerstroom.

element_name

De naam van de nieuwe kolom met het resultaat van de tabelwaardefunctie.

Retourtypen

De uitvoer is een record met de initiële nettolading en een record 'element_name', die het resultaat van de tabelwaardefunctie bevat.

Voor de functie GetArrayElements is het resultaat een record met twee velden:

  • ArrayIndex: de index van het element in de matrix

  • ArrayValue: de waarde van het element in de matrix.

Voor de functie GetRecordProperties is het resultaat een record met twee velden:

  • PropertyName: de naam van de eigenschap in de record.

  • PropertyValue: de waarde van de eigenschap in de record.

Voorbeelden

In dit voorbeeld, waarbij het tolbooth-scenario wordt uitgebreid, gaan we ervan uit dat auto's meer dan één kentekenplaat kunnen hebben (bijvoorbeeld een auto die een trailer sleept, twee heeft). Cross/outer apply kan worden gebruikt om deze matrix plat te maken, d.w.w.v. één rij per kentekenplaat.

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  
  

De query kan worden aangepast om buitengebruik te gebruiken om ook auto's zonder licentieplaat bij te houden.

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

Een ander voorbeeld van geneste matrices (matrix met matrices).

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