共用方式為


使用重新分割將 Azure 串流分析的處理最佳化

本文說明如何使用重新分割來調整 Azure 串流分析查詢,以處理無法完全平行處理的情節。

如果下列狀況,您可能無法使用平行處理

  • 您不會控制輸入資料流的分割索引鍵。
  • 您的來源跨稍後需要合併的多個分割區「噴灑」輸入。

當您處理未根據自然輸入配置進行分區化之串流上的資料時,需要重新分割或重新緩衝處理,例如事件中樞的 PartitionId。 當您重新分割時,每個分區都可以獨立處理,這可讓您以線性方式擴增串流管線。

如何重新分割

您可以透過 2 種方式重新分割輸入:

  1. 使用執行重新分割的個別串流分析作業
  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

下一步