Megosztás a következőn keresztül:


Újraparticionálás használata a feldolgozás optimalizálásához az Azure Stream Analytics használatával

Ez a cikk bemutatja, hogyan lehet újraparticionálással skálázni az Azure Stream Analytics-lekérdezést olyan forgatókönyvek esetében, amelyek nem teljes mértékben párhuzamosak.

Előfordulhat, hogy nem tudja használni a párhuzamosítást , ha:

  • A bemeneti stream partíciókulcsa nem szabályozható.
  • A forrás "permetezi" a bemenetet több partíción, amelyeket később egyesíteni kell.

Az újraparticionálásra vagy újrabontásra akkor van szükség, ha olyan adatfolyamon dolgoz fel adatokat, amelyek nem egy természetes bemeneti séma szerint vannak skálázva, például az Event Hubs Partícióazonosítója . Az újraparticionáláskor minden szegmens egymástól függetlenül is feldolgozható, így lineárisan horizontálisan felskálázhatja a streamelési folyamatot.

Újraparticionálás

A bemenetet kétféleképpen lehet újraparticionálásra:

  1. Használjon egy külön Stream Analytics-feladatot, amely elvégzi az újraparticionálást
  2. Egyetlen feladat használata, de először végezze el az újraparticionálást az egyéni elemzési logika előtt

Külön Stream Analytics-feladat létrehozása az újraparticionálási bemenethez

Létrehozhat egy feladatot, amely beolvassa a bemenetet, és egy partíciókulcs használatával ír egy eseményközpont kimenetére. Ez az eseményközpont ezután egy másik Stream Analytics-feladat bemeneteként szolgálhat, ahol az elemzési logikát implementálja. Amikor konfigurálja ezt az eseményközpont kimenetét a feladatban, meg kell adnia azt a partíciókulcsot, amellyel a Stream Analytics újraparticionálja az adatokat.

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

Újraparticionálási bemenet egyetlen Stream Analytics-feladaton belül

A lekérdezésben egy olyan lépést is bevezethet, amely először újrapartitálja a bemenetet, amelyet aztán a lekérdezés más lépései is használhatnak. Ha például a DeviceId alapján szeretné újraparticionálást végezni, a lekérdezés a következő lesz:

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)  

Az alábbi példalekérdezés két újraparticionált adatfolyamot illeszt össze. Ha két újraparticionált adatfolyamot csatlakoztat, a streameknek ugyanazzal a partíciókulcsmal és ugyanannyi partícióval kell rendelkezniük. Az eredmény egy stream, amely ugyanazzal a partíciós sémával rendelkezik.

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

A kimeneti sémának meg kell egyeznie a streampartíció kulcsával és a partíciók számával, hogy az egyes alstreamek egymástól függetlenül kiüríthetők legyenek. A streamet a kiürítés előtt egy másik séma is egyesítheti és újraparticionálta, de kerülnie kell ezt a módszert, mert növeli a feldolgozás általános késését, és növeli az erőforrás-kihasználtságot.

Streamelési egységek újraparticionálásokhoz

Kísérletezzen, és figyelje meg a feladat erőforrás-használatát a szükséges partíciók pontos számának meghatározásához. A streamelési egységek számát (SU) az egyes partíciókhoz szükséges fizikai erőforrásoknak megfelelően kell módosítani. Általában hat termékváltozatra van szükség minden partícióhoz. Ha nincs elegendő erőforrás hozzárendelve a feladathoz, a rendszer csak akkor alkalmazza az újrapartíciót, ha az előnyös a feladat számára.

SQL-kimenet újrapartíciói

Amikor a feladat SQL Database-t használ a kimenethez, explicit újraparticionálással felelnek meg az optimális partíciószámnak az átviteli sebesség maximalizálása érdekében. Mivel az SQL nyolc íróval működik a legjobban, a folyamat újraparticionálása nyolcra a kiürítés előtt vagy valahol a felsőbb rétegben, előnyös lehet a feladat teljesítménye.

Ha nyolcnál több bemeneti partíció van, előfordulhat, hogy a bemeneti particionálási séma öröklése nem megfelelő választás. Fontolja meg az INTO használatát a lekérdezésben a kimeneti írók számának explicit megadásával.

Az alábbi példa beolvassa a bemenetet, függetlenül attól, hogy az természetes módon particionált-e, és a DeviceID dimenziónak megfelelően tízszeresére bontja újra a streamet, és az adatokat a kimenetbe öblíti.

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

További információ: Azure Stream Analytics-kimenet az Azure SQL Database-ben.

Következő lépések