Bagikan melalui


BERLAKU

✅ Azure Stream Analytics ✅ Fabric Eventstream

Operator APPLY memungkinkan Anda memanggil fungsi bernilai tabel untuk setiap baris yang dikembalikan oleh ekspresi tabel luar kueri. Fungsi bernilai 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 dengan daftar kolom yang dikembalikan oleh input kanan.

Ada dua bentuk APPLY: CROSS APPLY dan OUTER APPLY.

CROSS APPLY hanya mengembalikan baris dari tabel eksterior 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 baris baik yang menghasilkan kumpulan hasil maupun yang tidak, dengan nilai NULL dalam kolom yang dihasilkan oleh fungsi bernilai tabel.

Ada dua fungsi bernilai tabel yang tersedia di Azure Stream Analytics untuk memfasilitasi bekerja dengan bidang jenis Array dan Rekaman. Mereka adalah GetArrayElements dan GetRecordProperties.

Sintaksis

  
<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.

Jenis Kembalian

Output adalah rekaman yang berisi payload awal dan rekaman 'element_name', yang berisi hasil fungsi bernilai tabel.

Untuk fungsi GetArrayElements, hasilnya akan menjadi rekaman dengan dua bidang:

  • ArrayIndex: indeks elemen dalam array

  • ArrayValue: nilai elemen dalam array.

Untuk fungsi GetRecordProperties, hasilnya akan menjadi rekaman dengan dua bidang:

  • PropertyName: nama properti dalam rekaman.

  • PropertyValue: nilai properti dalam rekaman.

Contoh

Dalam contoh ini, memperluas skenario tollbooth, kami berasumsi bahwa mobil dapat memiliki lebih dari satu plat nomor (misalnya mobil yang menaikkan trailer akan memiliki dua). Aplikasi lintas/luar dapat digunakan untuk meratakan array ini, yaitu mendapatkan satu baris per pelat lisensi.

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 terapkan luar untuk juga melacak mobil tanpa pelat nomor apa pun.

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 berlapis (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