Menggunakan partisi ulang untuk mengoptimalkan pemrosesan dengan Azure Stream Analytics
Artikel ini menunjukkan cara menggunakan partisi ulang untuk menskalakan kueri Azure Stream Analytics terhadap skenario yang tidak dapat sepenuhnya diparalelkan.
Anda mungkin tidak dapat menggunakan paralelisasi jika:
- Anda tidak mengontrol kunci partisi untuk aliran input Anda.
- Sumber Anda "menyemprotkan" input di beberapa partisi yang nantinya perlu digabungkan.
Partisi ulang, atau perombakan, diperlukan saat Anda memproses data pada aliran yang tidak di-shard menurut skema input alami, seperti PartitionId untuk Azure Event Hubs. Saat mempartisi ulang, setiap shard dapat diproses secara independen, yang memungkinkan Anda memperluas skala alur streaming secara linier.
Cara mempartisi ulang
Anda dapat mempartisi ulang input Anda dengan dua cara:
- Gunakan pekerjaan Azure Stream Analytics terpisah yang melakukan partisi ulang
- Gunakan satu pekerjaan tetapi lakukan partisi ulang terlebih dahulu sebelum logika analitik kustom Anda
Membuat pekerjaan Azure Stream Analytics terpisah untuk mempartisi ulang input
Anda dapat membuat pekerjaan yang membaca input dan menulis ke output pusat aktivitas menggunakan kunci partisi. Hub kejadian ini kemudian dapat berfungsi sebagai input untuk pekerjaan Azure Stream Analytics lain tempat Anda menerapkan logika analitik Anda. Saat mengonfigurasi output pusat aktivitas ini dalam pekerjaan, Anda harus menentukan kunci partisi tempat Azure Stream Analytics akan mempartisi ulang data Anda.
-- For compat level 1.2 or higher
SELECT *
INTO output
FROM input
--For compat level 1.1 or lower
SELECT *
INTO output
FROM input PARTITION BY PartitionId
Mempartisi ulang input dalam satu pekerjaan Azure Stream Analytics
Anda juga dapat memperkenalkan langkah dalam kueri Anda yang terlebih dahulu mempartisi ulang input, yang kemudian dapat digunakan oleh langkah-langkah lain dalam kueri Anda. Misalnya, jika Anda ingin mempartisi ulang masukan berdasarkan DeviceId, kueri Anda adalah:
WITH RepartitionedInput AS
(
SELECT *
FROM input PARTITION BY DeviceID
)
SELECT DeviceID, AVG(Reading) as AvgNormalReading
INTO output
FROM RepartitionedInput
GROUP BY DeviceId, TumblingWindow(minute, 1)
Contoh kueri berikut menggabungkan dua aliran data yang dipartisi ulang. Saat Anda menggabungkan dua aliran data yang dipartisi ulang, aliran harus memiliki kunci dan jumlah partisi yang sama. Hasilnya adalah aliran yang memiliki skema partisi serupa.
WITH step1 AS
(
SELECT * FROM input1
PARTITION BY DeviceID
),
step2 AS
(
SELECT * FROM input2
PARTITION BY DeviceID
)
SELECT * INTO output
FROM step1 PARTITION BY DeviceID
UNION step2 PARTITION BY DeviceID
Skema output harus sesuai dengan kunci dan jumlah skema aliran sehingga setiap sub-aliran dapat dibersihkan secara independen. Aliran juga dapat digabungkan dan dipartisi ulang dengan skema yang berbeda sebelum pembersihan, tetapi Anda harus menghindari metode tersebut karena akan menambah latensi umum pemrosesan dan meningkatkan pemanfaatan sumber daya.
Unit Streaming untuk partisi ulang
Lakukan percobaan dan amati penggunaan sumber daya pekerjaan Anda untuk menentukan jumlah pasti partisi yang dibutuhkan. Jumlah unit streaming (SU) harus disesuaikan dengan sumber daya fisik yang diperlukan untuk setiap partisi. Secara umum, enam SU diperlukan untuk setiap partisi. Jika sumber daya yang ditetapkan untuk pekerjaan tidak mencukupi, sistem hanya akan menerapkan partisi ulang jika menguntungkan pekerjaan.
Partisi ulang untuk output SQL
Jika pekerjaan Anda menggunakan database SQL untuk output, gunakan partisi ulang eksplisit untuk menyesuaikan jumlah partisi yang optimal guna memaksimalkan throughput. Karena SQL berfungsi paling baik dengan delapan penulis, mempartisi ulang alur menjadi delapan sebelum pembilasan, atau di suatu tempat di hulu lebih lanjut, mungkin menguntungkan performa pekerjaan.
Ketika ada lebih dari delapan partisi input, mewarisi skema partisi input mungkin bukan pilihan yang tepat. Pertimbangkan untuk menggunakan INTO dalam kueri Anda guna menentukan jumlah penulis output secara eksplisit.
Contoh berikut membaca dari input, terlepas dari input dipartisi secara alami, serta mempartisi ulang aliran sepuluh kali lipat sesuai dengan dimensi DeviceID dan menghapus data ke output.
SELECT * INTO [output]
FROM [input]
PARTITION BY DeviceID INTO 10
Untuk informasi selengkapnya, lihat Output Azure Stream Analytics ke Azure SQL Database.