Aracılığıyla paylaş


APPLY (Azure Stream Analytics)

APPLY işleci, sorgunun dış tablo ifadesi tarafından döndürülen her satır için tablo değerli bir işlev çağırmanızı sağlar. Tablo değerli işlev sağ giriş, dış tablo ifadesi ise sol giriş işlevi görür. Sağ giriş, sol girişten her satır için değerlendirilir ve üretilen satırlar son çıkış için birleştirilir. APPLY işleci tarafından üretilen sütunların listesi, sol girişteki sütun kümesi ve ardından sağ giriş tarafından döndürülen sütunların listesidir.

İKI APPLY biçimi vardır: CROSS APPLY ve OUTER APPLY.

CROSS APPLY yalnızca dış tablodaki tablo değerli işlevden bir sonuç kümesi oluşturan satırları döndürür. CROSS APPLY sonucu , TIMESTAMP BY'ın hedef değeri olarak kullanılamaz. Ancak, CROSS APPLY gerçekleştiren bir Azure Stream Analytics işi ve TIMESTAMP BY gerçekleştirmek için ikinci bir iş kullanabilirsiniz.

OUTER APPLY, hem sonuç kümesi oluşturan satırları hem de tablo değerli işlevi tarafından üretilen sütunlarda NULL değerlerle döndürmeyen satırları döndürür.

Azure Stream Analytics'te Dizi ve Kayıt türü alanlarıyla çalışmayı kolaylaştırmak için tablo değerli iki işlev vardır. Bunlar GetArrayElements ve GetRecordProperties'tir.

Söz dizimi

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

Bağımsız değişkenler

input_name | input_alias

Giriş akışının adı veya diğer adı.

Column_name

Giriş akışının bir sütununun adı.

Öğe_adı

Tablo değerli işlevin sonucunu içeren yeni sütunun adı.

Dönüş Türleri

Çıkış, ilk yükü içeren bir kayıt ve tablo değerli işlevin sonucunu içeren 'element_name' kaydıdır.

GetArrayElements işlevi için sonuç iki alanı olan bir kayıt olur:

  • ArrayIndex: dizideki öğenin dizini

  • ArrayValue: dizideki öğesinin değeri.

GetRecordProperties işlevi için sonuç iki alanı olan bir kayıt olacaktır:

  • PropertyName: Kayıttaki özelliğin adı.

  • PropertyValue: Kayıttaki özelliğin değeri.

Örnekler

Bu örnekte, gişe senaryosunun kapsamını genişleterek, otomobillerin birden fazla plakaya sahip olabileceğini varsayarız (örneğin, römork çekmenin iki tane olması gibi). Çapraz/dış uygulama, bu diziyi düzleştirmek için kullanılabilir, örneğin lisans plakası başına bir satır alır.

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  
  

Sorgu, herhangi bir plakası olmayan arabaları izlemek için dış uygulama özelliğini kullanacak şekilde değiştirilebilir.

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

İç içe diziler (dizi dizisi) kullanan başka bir örnek.

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