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