使用重新分割將 Azure 串流分析的處理最佳化
本文說明如何使用重新分割來調整 Azure 串流分析查詢,以處理無法完全平行處理的情節。
如果下列狀況,您可能無法使用平行處理:
- 您不會控制輸入資料流的分割索引鍵。
- 您的來源跨稍後需要合併的多個分割區「噴灑」輸入。
當您處理未根據自然輸入配置進行分區化之串流上的資料時,需要重新分割或重新緩衝處理,例如事件中樞的 PartitionId。 當您重新分割時,每個分區都可以獨立處理,這可讓您以線性方式擴增串流管線。
如何重新分割
您可以透過 2 種方式重新分割輸入:
- 使用執行重新分割的個別串流分析作業
- 使用單一作業,但在自訂分析邏輯之前先重新分割
建立個別串流分析作業以重新分割輸入
您可以使用分割區索引鍵來建立作業,以讀取輸入和寫入至事件中樞輸出。 此事件中樞接著可做為另一個串流分析作業的輸入,您可以在其中實作分析邏輯。 在作業中設定此事件中樞輸出時,您必須指定串流分析將重新分割資料的分割區索引鍵。
-- 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
在單一串流分析作業內重新分割輸入
您也可以在查詢中引進先重新分割輸入的步驟,然後該輸入可供查詢中的其他步驟使用。 例如,如果您想要根據 DeviceId 重新分割輸入,查詢會是:
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)
下列範例查詢會聯結兩個重新分割資料的串流。 聯結兩個重新分割資料的串流時,串流必須具有相同的分割索引鍵和計數。 結果是具有相同資料分割配置的串流。
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
輸出配置應該符合串流配置索引鍵和計數,以便個別排清每個子串流。 在排清之前,串流也可以由不同的配置重新合併並重新分割,但您應該避免該方法,因為其會增加處理的一般延遲並增加資源使用率。
重新分割的串流單位
實驗並觀察作業的資源使用量,以判斷您需要的分割確切數目。 必須根據每個分割所需的實體資源調整串流單位 (SU) 數目。 一般而言,每個分割都需要六個 SU。 如果指派給作業的資源不足,則系統只會在對作業有益的情況下套用重新分割。
重新分割 SQL 輸出
當您的作業使用 SQL 資料庫進行輸出時,請使用明確重新分割來比對最佳分割計數以最大化輸送量。 由於 SQL 在使用八個寫入器時表現最佳,因此在排清之前將流程重新分割為八個,或在上游更進一步的位置可能有利於作業效能。
當輸入資料分割超過 8 個時,繼承輸入資料分割配置可能不會是適當的選擇。 請考慮在查詢中使用 INTO,以明確指定輸出寫入器的數目。
下列範例會從輸入讀取,而不論其是否是自然分割,並根據 DeviceID 維度進行十倍的串流重新分割,並將資料排清至輸出。
SELECT * INTO [output] FROM [input] PARTITION BY DeviceID INTO 10
如需詳細資訊,請參閱 Azure 串流分析輸出至 Azure SQL Database。