Použití repartitioningu k optimalizaci zpracování pomocí Azure Stream Analytics

V tomto článku se dozvíte, jak pomocí repartitioning škálovat dotaz Azure Stream Analytics pro scénáře, které se nedají plně paralelizovat.

Možná nebudete moct paralelizaci používat v následujících případech:

  • Klíč oddílu pro vstupní datový proud neřídíte.
  • Zdrojový vstup "spreje" napříč několika oddíly, které je potřeba později sloučit.

Při zpracování dat v datovém proudu, který není horizontálně dělený podle schématu přirozeného vstupu, jako je Id oddílu pro službu Event Hubs, se vyžaduje opětovné rozdělení nebo přemíchání. Při opětovném rozdělení je možné každý horizontální oddíl zpracovat nezávisle, což umožňuje lineární horizontální navýšení kapacity kanálu streamování.

Postup opětovného rozdělení

Vstup můžete předělovat dvěma způsoby:

  1. Použijte samostatnou úlohu Stream Analytics, která provede dělení.
  2. Použijte jednu úlohu, ale nejprve proveďte dělení před vlastní logikou analýzy.

Vytvoření samostatné úlohy Stream Analytics pro opětovné rozdělení vstupu

Pomocí klíče oddílu můžete vytvořit úlohu, která čte vstup a zápisy do výstupu centra událostí. Toto centrum událostí pak může sloužit jako vstup pro jinou úlohu Stream Analytics, ve které implementujete logiku analýzy. Při konfiguraci výstupu centra událostí ve vaší úloze musíte zadat klíč oddílu, podle kterého Stream Analytics změní rozdělení dat.

-- 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

Změna rozdělení vstupu v rámci jedné úlohy Stream Analytics

Můžete také zavést krok v dotazu, který nejprve znovu vytvoří rozdělení vstupu, který pak můžete použít jinými kroky v dotazu. Pokud například chcete změnit rozdělení vstupu na základě ID zařízení, váš dotaz by byl:

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)  

Následující příklad dotazu spojí dva datové proudy repartitioned data. Když spojíte dva streamy dat s opětovným rozdělením, musí mít streamy stejný klíč oddílu a počet. Výsledek je datový proud, který má stejné schéma oddílů.

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

Výstupní schéma by se mělo shodovat s klíčem schématu datových proudů a počítat, aby se každý podstream mohl vyprázdnit nezávisle. Datový proud by se také mohl před vyprázdněním sloučit a znovu předělovat podle jiného schématu, ale tuto metodu byste se měli vyhnout, protože se přidává k obecné latenci zpracování a zvyšuje využití prostředků.

Jednotky streamování pro repartitions

Experimentujte a sledujte využití prostředků vaší úlohy, abyste zjistili přesný počet oddílů, které potřebujete. Počet jednotek streamování (SU) se musí upravit podle fyzických prostředků potřebných pro každý oddíl. Obecně platí, že pro každý oddíl je potřeba šest jednotek SU. Pokud k úloze nejsou přiřazeny dostatek prostředků, systém použije rozdělení pouze v případě, že pro ni bude přínosná.

Repartitions for SQL output

Pokud vaše úloha používá k výstupu databázi SQL, použijte explicitní repartitioning tak, aby odpovídal optimálnímu počtu oddílů, aby se maximalizovala propustnost. Vzhledem k tomu, že SQL funguje nejlépe s osmi zapisovači, může opětovné rozdělení toku do osmi před vyprázdněním nebo někde dále upstreamovat, výhodou výkonu úlohy.

Pokud existuje více než osm vstupních oddílů, nemusí být dědění schématu vstupního dělení vhodnou volbou. Zvažte použití INTO v dotazu k explicitní zadání počtu výstupních zapisovačů.

Následující příklad načte ze vstupu, bez ohledu na to, že je přirozeně dělený, a znovu rozdělí datový proud desetinásobně podle dimenze DeviceID a vyprázdní data do výstupu.

SELECT * INTO [output] 
FROM [input] 
PARTITION BY DeviceID INTO 10

Další informace najdete v tématu Výstup služby Azure Stream Analytics do služby Azure SQL Database.

Další kroky