Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.
- Vaše služba rozprostírá vstup napříč několika oddíly, které je třeba později sloučit.
Při zpracování dat na proudu, který není rozdělen podle přirozeného schématu, jako je například PartitionId u Event Hubs, je nutné provést opětovné rozdělení nebo přemíchání. Při opětovném rozdělení je možné každý shard zpracovat nezávisle, což umožňuje lineární navýšení kapacity vašeho streamovacího kanálu.
Jak opět rozdělit
Vstup můžete předělovat dvěma způsoby:
- Použijte samostatnou úlohu Stream Analytics, která provede dělení.
- Použijte jednu úlohu, ale nejprve proveďte rozdělení na části před vlastní analytickou logikou.
Vytvoření samostatné úlohy Stream Analytics pro přerozdě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 své úloze musíte určit klíč oddílu, podle kterého Stream Analytics přerozdělí vaše data.
-- 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
Přeuspořádání 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 rozdělených dat. Když spojíte dva streamy dat s opětovným rozdělením, musí mít streamy stejný klíč oddílu a stejný počet oddílů. Výsledek je datový proud, který má stejné schéma particionování.
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 mělo odpovídat klíči partice streamu a počtu partíc, aby se každý podstream mohl samostatně vyčistit. 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 rozdělení partií
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ždou partition. Obecně platí, že pro každý oddíl je potřeba šest SU jednotek. 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á.
Přerozdělení pro výstup SQL
Pokud vaše úloha používá pro výstup SQL databázi, použijte explicitní přerozdělení, aby odpovídalo optimálnímu počtu oddílů a maximalizovala se propustnost. Vzhledem k tomu, že SQL funguje nejlépe s osmi zapisovači, může opětovné rozdělení toku na osm před vyprázdněním nebo v dřívější fázi toku přispět k lepšímu 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 jeho přirozené rozdělení, a znovu rozdělí datový proud na deset částí podle dimenze DeviceID a odešle 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.