Belajar menggunakan Azure Stream Analytics

NDID Engineering Blog
NDID Engineering
Published in
4 min readOct 6, 2023

Author: Budi Hartanto

Topik hari ini adalah tentang Azure Stream Analytics (ASA), pada dasarnya ASA adalah mesin yang dirancang untuk menganalisis dan memproses data streaming dalam jumlah besar.

Di bawah ini adalah ilustrasi untuk menjelaskan positioning ASA.

Ia memiliki kemampuan untuk menangani berbagai jenis input dan output di layanan Azure.

Oke, cukup untuk preview singkatnya, Anda dapat menemukan detail lebih lanjut di sini https://learn.microsoft.com/en-us/azure/stream-analytics/stream-analytics-introduction 😉

Mari kita mulai pembelajaran sederhana kita tentang ASA, dalam hal ini kita akan menggunakan Event Hub untuk menerima data Input dan menyimpan hasil/outputnya di penyimpanan, kita akan mencoba membuat beberapa koneksi antara ASA dan layanan Azure lainnya.

Pertama, kita perlu menghasilkan beberapa data masukan untuk digunakan oleh Event Hub.

Buat file python sederhana untuk menghasilkan data.

Referensi untuk kreasi. https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-python-get-started-send?tabs=connection-string%2Croles-azure-portal

import asyncio
import json
import datetime
import time
import random

from azure.eventhub import EventData
from azure.eventhub.aio import EventHubProducerClient

EVENT_HUB_CONNECTION_STR = "[EVENT_HUB_CONNECTION_STR]"
EVENT_HUB_NAME = "[EVENT_HUB_NAME]"

async def run():

while True:
# await asyncio.sleep(1)
# Create a producer client to send messages to the event hub.
# Specify a connection string to your event hubs namespace and
# the event hub name.
producer = EventHubProducerClient.from_connection_string(
conn_str=EVENT_HUB_CONNECTION_STR, eventhub_name=EVENT_HUB_NAME
)
async with producer:
# Create a batch.
event_data_batch = await producer.create_batch()

sample_data = {
"id": random.randint(0, 2),
"timestamp": str(datetime.datetime.utcnow()),
"value01": random.randint(1,5),
"value02": random.randint(70, 100),
"value03": random.randint(70, 100),
}

s = json.dumps(sample_data, ensure_ascii=False)
# Add events to the batch.
event_data_batch.add(EventData(s))

# Send the batch of events to the event hub.
await producer.send_batch(event_data_batch)
print("Sending Data:", s)
#---- End of Function ----

loop = asyncio.get_event_loop()

try:
print("-- Start --")
asyncio.run(run())
loop.run_forever()
except KeyboardInterrupt:
pass
finally:
print("-- Close --")
loop.close()

Pada kode ini, kita akan mencoba mengirimkan data JSON dengan 5 nilai (id, timestamp, value01, value02, value03).

Dan 2 poin perlu ditentukan dalam kode setelah kita membuat Event Hub:

1. EVENT_HUB_CONNECTION_STR = “[EVENT_HUB_CONNECTION_STR]”

2. EVENT_HUB_NAME = “[EVENT_HUB_NAME]”

Kita dapat menemukan 2 informasi tersebut di Event Hub Page, lalu pilih Shared Access policies dan buat yang baru. Setelah dibuat, kita bisa mendapatkan Connection String untuk koneksi.

Selanjutnya kita akan mengatur input dan output untuk ASA.

  1. Menambahkan Event Hub sebagai Input.

2. Menambahkan Storage Account sebagai Output.

3. Ubah the Query untuk mendaftarkan ke Input and Output.

Setelah semua setup selesai, kita tinggal menjalankan ASA dan kode Python.

ASA status berjalan.

Codenya mengirimkan data.

Kita bisa cek input pada Query Menu à Input Preview

Seperti yang anda bisa lihat, kita juga bisa mendapatkan data sebagai output pada storage

Kita juga bisa untuk memonitor request, messages dan We are also able to monitor the Request, Messages, and hasilnya pada Event Hub.

Ok, mungkin itu saja dulu untuk percobaan pertama. Pada blog artikel kali ini, kita sukses membuat koneksi dengan beberapa Azure services dan mengatur Input dan Output.

Topik selanjutnya mungkin lebih dalam pada bagian Query dan fokus pada use case dengan ASA. 😉 😊

Gambarannya seperti ini 😉 à Misal kita hanya ingin menampilkan spesifik data, kita bisa menentukannya dengan query SELECT.

Dalam screen dibawah, case-nya kita hanya ingin menampilkan get timestamp, id, value01 and value02.

Terima kasih, Sampai jumpa pada sesi berikutnya…. 😊

--

--