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