Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Azure Stream Analytics mendukung agregat yang ditentukan pengguna (UDA) yang ditulis dalam JavaScript, memungkinkan Anda menerapkan logika bisnis yang rumit. Dalam UDA Anda memiliki kontrol penuh atas struktur data status, akumulasi status, deakkumulasi status, dan komputasi hasil agregat. Artikel ini memperkenalkan dua antarmuka UDA JavaScript yang berbeda, langkah-langkah untuk membuat UDA, dan cara menggunakan UDA dengan operasi berbasis jendela dalam kueri Azure Stream Analytics.
Agregat yang ditentukan pengguna JavaScript
Agregat yang ditentukan pengguna digunakan di atas spesifikasi jendela waktu untuk mengagregasi peristiwa di jendela tersebut dan menghasilkan satu nilai hasil. Ada dua jenis antarmuka UDA yang didukung Azure Stream Analytics saat ini, AccumulateOnly dan AccumulateDeaccumulate. Kedua jenis UDA dapat digunakan oleh Tumbling Window, Hopping Window, Sliding Window, dan Session Window. AccumulateDeaccumulate UDA berkinerja lebih baik daripada AccumulateOnly UDA saat digunakan bersama dengan Jendela Hopping, Jendela Sliding, dan Jendela Sesi. Anda memilih salah satu dari dua jenis berdasarkan algoritma yang Anda gunakan.
"Hanya Akumulasi mengagregasi."
Agregat AccumulateOnly hanya dapat mengakumulasi peristiwa baru ke statusnya, algoritma tidak memungkinkan deakumulasi nilai. Pilih jenis agregat ini ketika tidak mungkin untuk mengurangi akumulasi informasi peristiwa dari nilai status. Berikut ini adalah templat JavaScript untuk agregat AccumulateOnly:
// Sample UDA which state can only be accumulated.
function main() {
this.init = function () {
this.state = 0;
}
this.accumulate = function (value, timestamp) {
this.state += value;
}
this.computeResult = function () {
return this.state;
}
}
Fungsi AccumulateDeaccumulate
Agregat AccumulateDeaccumulate memungkinkan deakumulasi nilai akumulasi sebelumnya dari keadaan, misalnya, menghapus pasangan kunci-nilai dari daftar nilai peristiwa, atau melakukan pengurangan nilai dari keadaan agregat jumlah. Berikut ini adalah templat JavaScript untuk agregat AccumulateDeaccumulate:
// Sample UDA which state can be accumulated and deaccumulated.
function main() {
this.init = function () {
this.state = 0;
}
this.accumulate = function (value, timestamp) {
this.state += value;
}
this.deaccumulate = function (value, timestamp) {
this.state -= value;
}
this.deaccumulateState = function (otherState){
this.state -= otherState.state;
}
this.computeResult = function () {
return this.state;
}
}
UDA - Deklarasi fungsi JavaScript
Setiap UDA JavaScript didefinisikan oleh deklarasi objek Fungsi. Berikut adalah elemen utama dalam definisi UDA.
Alias fungsi
Pengidentifikasi UDA adalah alias fungsi. Saat dipanggil dalam kueri Azure Stream Analytics, selalu gunakan alias UDA bersama dengan prefiks "uda."
Jenis Fungsi
Untuk UDA, jenis fungsi harus UDA JavaScript.
Jenis output
Jenis tertentu yang didukung oleh pekerjaan Stream Analytics, atau "Apa pun" jika Anda ingin menangani jenis dalam kueri Anda.
Nama fungsi
Nama objek Fungsi ini. Nama fungsi harus cocok dengan alias UDA.
Metode - init()
Metode init() menginisialisasi status agregat. Metode ini dipanggil ketika jendela dimulai.
Metode – akumulasi()
Metode accumulate() menghitung status UDA berdasarkan status sebelumnya dan nilai peristiwa saat ini. Metode ini dipanggil ketika suatu peristiwa memasuki jendela waktu (TUMBLINGWINDOW, HOPPINGWINDOW, SLIDINGWINDOW atau SESSIONWINDOW).
Metode – deakumulasi()
Metode deaccumulate() menghitung ulang status berdasarkan status sebelumnya dan nilai peristiwa saat ini. Metode ini disebut ketika suatu peristiwa keluar dari SLIDINGWINDOW atau SESSIONWINDOW.
Metode – deaccumulateState()
Metode deaccumulateState() menghitung ulang keadaan berdasarkan keadaan sebelumnya dan keadaan lompatan. Metode ini dipanggil ketika sekumpulan peristiwa keluar dari HOPPINGWINDOW.
Metode – computeResult()
Metode computeResult() memberikan hasil agregat berdasarkan status saat ini. Metode ini dipanggil pada akhir jendela waktu (TUMBLINGWINDOW, HOPPINGWINDOW, SLIDINGWINDOW, atau SESSIONWINDOW).
Jenis data input dan output yang didukung UDA JavaScript
Untuk tipe data UDA dalam JavaScript, lihat bagian Azure Stream Analytics dan konversi tipe JavaScript dari Mengintegrasikan UDF JavaScript.
Menambahkan UDA JavaScript dari portal Microsoft Azure
Di bawah ini kita berjalan melalui proses pembuatan UDA dari Portal. Contoh yang kami gunakan di sini adalah komputasi rata-rata waktu tertimbang.
Sekarang mari kita membuat UDA JavaScript di bawah pekerjaan ASA yang ada, dengan menggunakan langkah-langkah berikut.
Masuk ke portal Microsoft Azure dan temukan pekerjaan Azure Stream Analytics Anda yang sudah ada.
Kemudian klik link fungsi di bagian TOPOLOGI PEKERJAAN.
Pilih Tambahkan untuk menambahkan fungsi baru.
Pada tampilan Fungsi Baru, pilih UDA JavaScript sebagai Jenis Fungsi, lalu Anda akan melihat templat UDA default muncul di editor.
Isi "TWA" sebagai alias UDA dan ubah implementasi fungsi sebagai berikut:
// Sample UDA which calculate Time-Weighted Average of incoming values. function main() { this.init = function () { this.totalValue = 0.0; this.totalWeight = 0.0; } this.accumulate = function (value, timestamp) { this.totalValue += value.level * value.weight; this.totalWeight += value.weight; } // Uncomment below for AccumulateDeaccumulate implementation /* this.deaccumulate = function (value, timestamp) { this.totalValue -= value.level * value.weight; this.totalWeight -= value.weight; } this.deaccumulateState = function (otherState){ this.state -= otherState.state; this.totalValue -= otherState.totalValue; this.totalWeight -= otherState.totalWeight; } */ this.computeResult = function () { if(this.totalValue == 0) { result = 0; } else { result = this.totalValue/this.totalWeight; } return result; } }Setelah Anda mengklik tombol "Simpan", UDA Anda akan muncul di daftar fungsi.
Pilih fungsi baru "TWA", Anda dapat memeriksa definisi fungsi.
Memanggil UDA JavaScript dalam kueri ASA
Di portal Azure, buka pekerjaan Anda dan edit kueri serta panggil fungsi TWA() dengan awalan mandat "uda.". Contohnya:
WITH value AS
(
SELECT
NoiseLevelDB as level,
DurationSecond as weight
FROM
[YourInputAlias] TIMESTAMP BY EntryTime
)
SELECT
System.Timestamp as ts,
uda.TWA(value) as NoseDoseTWA
FROM value
GROUP BY TumblingWindow(minute, 5)
Pengujian kueri dengan UDA
Buat file JSON lokal dengan konten di bawah ini, unggah file ke pekerjaan Azure Stream Analytics, dan uji kueri di atas.
[
{"EntryTime": "2017-06-10T05:01:00-07:00", "NoiseLevelDB": 80, "DurationSecond": 22.0},
{"EntryTime": "2017-06-10T05:02:00-07:00", "NoiseLevelDB": 81, "DurationSecond": 37.8},
{"EntryTime": "2017-06-10T05:02:00-07:00", "NoiseLevelDB": 85, "DurationSecond": 26.3},
{"EntryTime": "2017-06-10T05:03:00-07:00", "NoiseLevelDB": 95, "DurationSecond": 13.7},
{"EntryTime": "2017-06-10T05:03:00-07:00", "NoiseLevelDB": 88, "DurationSecond": 10.3},
{"EntryTime": "2017-06-10T05:05:00-07:00", "NoiseLevelDB": 103, "DurationSecond": 5.5},
{"EntryTime": "2017-06-10T05:06:00-07:00", "NoiseLevelDB": 99, "DurationSecond": 23.0},
{"EntryTime": "2017-06-10T05:07:00-07:00", "NoiseLevelDB": 108, "DurationSecond": 1.76},
{"EntryTime": "2017-06-10T05:07:00-07:00", "NoiseLevelDB": 79, "DurationSecond": 17.9},
{"EntryTime": "2017-06-10T05:08:00-07:00", "NoiseLevelDB": 83, "DurationSecond": 27.1},
{"EntryTime": "2017-06-10T05:09:00-07:00", "NoiseLevelDB": 91, "DurationSecond": 17.1},
{"EntryTime": "2017-06-10T05:09:00-07:00", "NoiseLevelDB": 115, "DurationSecond": 7.9},
{"EntryTime": "2017-06-10T05:09:00-07:00", "NoiseLevelDB": 80, "DurationSecond": 28.3},
{"EntryTime": "2017-06-10T05:10:00-07:00", "NoiseLevelDB": 55, "DurationSecond": 18.2},
{"EntryTime": "2017-06-10T05:10:00-07:00", "NoiseLevelDB": 93, "DurationSecond": 25.8},
{"EntryTime": "2017-06-10T05:11:00-07:00", "NoiseLevelDB": 83, "DurationSecond": 11.4},
{"EntryTime": "2017-06-10T05:12:00-07:00", "NoiseLevelDB": 89, "DurationSecond": 7.9},
{"EntryTime": "2017-06-10T05:15:00-07:00", "NoiseLevelDB": 112, "DurationSecond": 3.7},
{"EntryTime": "2017-06-10T05:15:00-07:00", "NoiseLevelDB": 93, "DurationSecond": 9.7},
{"EntryTime": "2017-06-10T05:18:00-07:00", "NoiseLevelDB": 96, "DurationSecond": 3.7},
{"EntryTime": "2017-06-10T05:20:00-07:00", "NoiseLevelDB": 108, "DurationSecond": 0.99},
{"EntryTime": "2017-06-10T05:20:00-07:00", "NoiseLevelDB": 113, "DurationSecond": 25.1},
{"EntryTime": "2017-06-10T05:22:00-07:00", "NoiseLevelDB": 110, "DurationSecond": 5.3}
]
Dapatkan bantuan
Untuk bantuan lebih lanjut, coba halaman pertanyaan Tanya Jawab Microsoft untuk Azure Stream Analytics.
Langkah berikutnya
- Pengantar Azure Stream Analytics
- Mulai menggunakan Azure Stream Analytics
- Menskalakan pekerjaan Azure Stream Analytics
- Referensi bahasa kueri Azure Stream Analytics
- Referensi REST API manajemen Azure Stream Analytics