APPLY (Azure Stream Analytics)
Operator APPLY memungkinkan Anda untuk memanggil fungsi bernilai tabel untuk setiap baris yang dikembalikan oleh ekspresi tabel luar kueri. Fungsi nilai tabel bertindak sebagai input kanan dan ekspresi tabel luar bertindak sebagai input kiri. Input kanan dievaluasi untuk setiap baris dari input kiri dan baris yang dihasilkan digabungkan untuk output akhir. Daftar kolom yang dihasilkan oleh operator APPLY adalah kumpulan kolom di input kiri diikuti oleh daftar kolom yang dikembalikan oleh input kanan.
Ada dua bentuk APPLY: CROSS APPLY dan OUTER APPLY.
CROSS APPLY hanya mengembalikan baris dari tabel luar yang menghasilkan kumpulan hasil dari fungsi bernilai tabel. Hasil CROSS APPLY tidak dapat digunakan sebagai nilai target TIMESTAMP BY. Namun, Anda dapat menggunakan satu pekerjaan Azure Stream Analytics yang melakukan CROSS APPLY, dan menggunakan pekerjaan kedua untuk melakukan TIMESTAMP BY.
OUTER APPLY mengembalikan kedua baris yang menghasilkan kumpulan hasil, dan baris yang tidak, dengan nilai NULL di kolom yang dihasilkan oleh fungsi bernilai tabel.
Ada dua fungsi bernilai tabel yang tersedia di Azure Stream Analytics untuk memfasilitasi bekerja dengan bidang tipe Array dan Record. Mereka adalah GetArrayElements dan GetRecordProperties.
Sintaks
<input> {CROSS | OUTER} APPLY <elements_selector>
<input> ::= input_name | input_alias
<elements_selector> ::=
{GetArrayElements | GetRecordProperties} (<column_name>) AS element_name
Argumen
input_name | input_alias
Nama atau alias aliran input.
column_name
Nama kolom aliran input.
element_name
Nama kolom baru yang berisi hasil fungsi bernilai tabel.
Tipe Pengembalian
Output adalah rekaman yang berisi payload awal dan catatan 'element_name', yang berisi hasil fungsi bernilai tabel.
Untuk fungsi GetArrayElements hasilnya akan menjadi catatan dengan dua bidang:
ArrayIndex: indeks elemen dalam array
ArrayValue: nilai elemen dalam array.
Untuk fungsi GetRecordProperties hasilnya akan menjadi catatan dengan dua bidang:
PropertyName: nama properti dalam catatan.
PropertyValue: nilai properti dalam catatan.
Contoh
Dalam contoh ini, memperluas skenario tollbooth, kami berasumsi bahwa mobil dapat memiliki lebih dari satu plat nomor (misalnya mobil yang menarik trailer akan memiliki dua). Cross / outer apply dapat digunakan untuk meratakan array ini, yaitu mendapatkan satu baris per plat nomor.
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
Kueri dapat dimodifikasi untuk menggunakan aplikasi luar untuk juga melacak mobil tanpa plat nomor.
SELECT e.TollId, e.EntryTime,
flat.ArrayValue AS licensePlate, flat.ArrayIndex AS licensePlateIndex
FROM input AS e
OUTER APPLY GetArrayElements(e.Licenses) AS flat
Contoh lain menggunakan array bersarang (array array).
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