Výstup Azure Stream Analytics do služby Azure Cosmos DB

Azure Stream Analytics může výstupní data ve formátu JSON do služby Azure Cosmos DB. Umožňuje archivaci dat a dotazy s nízkou latencí na nestrukturovaná data JSON. Tento článek popisuje některé osvědčené postupy pro implementaci této konfigurace (Stream Analytics do Cosmos DB). Pokud službu Azure Cosmos DB neznáte, přečtěte si dokumentaci ke službě Azure Cosmos DB a začněte tím.

Poznámka:

  • Stream Analytics v tuto chvíli podporuje připojení ke službě Azure Cosmos DB pouze prostřednictvím rozhraní SQL API. Další rozhraní API služby Azure Cosmos DB se zatím nepodporují. Pokud nasměrujete Stream Analytics na účty Azure Cosmos DB vytvořené s jinými rozhraními API, nemusí být data správně uložená.
  • Při použití služby Azure Cosmos DB jako výstup doporučujeme nastavit úlohu na úroveň kompatibility 1.2.

Základy služby Azure Cosmos DB jako cíle výstupu

Výstup služby Azure Cosmos DB ve Stream Analytics umožňuje zápis výsledků zpracování datových proudů jako výstup JSON do kontejnerů Azure Cosmos DB. Stream Analytics nevytvoří kontejnery ve vaší databázi. Místo toho je potřeba, abyste je vytvořili předem. Pak můžete řídit fakturační náklady na kontejnery Azure Cosmos DB. Výkon, konzistenci a kapacitu kontejnerů můžete také ladit přímo pomocí rozhraní API služby Azure Cosmos DB. Následující části obsahují podrobnosti o některých možnostech kontejneru pro službu Azure Cosmos DB.

Ladění konzistence, dostupnosti a latence

Azure Cosmos DB umožňuje vyladit databázi a kontejnery a vyladit kompromisy mezi konzistencí, dostupností, latencí a propustností.

V závislosti na tom, jaké úrovně konzistence čtení váš scénář potřebuje pro latenci čtení a zápisu, můžete u svého databázového účtu zvolit úroveň konzistence. Propustnost můžete zlepšit vertikálním navýšením kapacity jednotek žádostí (RU) v kontejneru. Azure Cosmos DB také ve výchozím nastavení umožňuje synchronní indexování pro každou operaci CRUD do vašeho kontejneru. Tato možnost je další užitečná k řízení výkonu zápisu a čtení ve službě Azure Cosmos DB. Další informace najdete v článku Změna databáze a úrovní konzistence dotazů.

Upserty ze Stream Analytics

Integrace Služby Stream Analytics se službou Azure Cosmos DB umožňuje vkládat nebo aktualizovat záznamy do kontejneru na základě daného sloupce ID dokumentu. Tato operace se také nazývá upsert. Stream Analytics používá optimistický přístup k upsertu. Aktualizace dojít pouze v případě, že vložení selže s konfliktem ID dokumentu.

S úrovní kompatibility 1.0 stream Analytics provádí tuto aktualizaci jako operaci PATCH, takže umožňuje částečné aktualizace dokumentu. Stream Analytics přidává nové vlastnosti nebo nahrazuje existující vlastnost přírůstkově. Změny hodnot vlastností pole v dokumentu JSON ale způsobí přepsání celého pole. To znamená, že pole není sloučeno.

U verze 1.2 se chování upsertu upraví tak, aby vkládaly nebo nahradily dokument. Další část o úrovni kompatibility 1.2 dále popisuje toto chování.

Pokud má příchozí dokument JSON existující pole ID, použije se toto pole automaticky jako sloupec ID dokumentu ve službě Azure Cosmos DB. Všechny následné zápisy se zpracovávají jako takové, což vede k jedné z těchto situací:

  • Jedinečná ID vedou k vložení.
  • Duplicitní ID a ID dokumentu nastavené na ID vedou k upsertu.
  • Duplicitní ID a ID dokumentu nejsou nastaveny na chybu po prvním dokumentu.

Pokud chcete uložit všechny dokumenty včetně dokumentů, které mají duplicitní ID, přejmenujte pole ID v dotazu (pomocí klíčového slova AS ). Umožňuje službě Azure Cosmos DB vytvořit pole ID nebo nahradit ID hodnotou jiného sloupce (pomocí klíčového slova AS nebo pomocí nastavení ID dokumentu).

Dělení dat ve službě Azure Cosmos DB

Azure Cosmos DB automaticky škáluje oddíly na základě vaší úlohy. Proto doporučujeme používat neomezené kontejnery pro dělení dat. Když Stream Analytics zapisuje do neomezených kontejnerů, používá tolik paralelních zapisovačů jako předchozí krok dotazu nebo schéma vstupního dělení.

Poznámka:

Azure Stream Analytics podporuje pouze neomezené kontejnery s klíči oddílů na nejvyšší úrovni. Podporuje se například /region . Vnořené klíče oddílů (například /region/name) se nepodporují.

V závislosti na výběru klíče oddílu se může zobrazit toto upozornění:

CosmosDB Output contains multiple rows and just one row per partition key. If the output latency is higher than expected, consider choosing a partition key that contains at least several hundred records per partition key.

Je důležité zvolit vlastnost klíče oddílu, která má mnoho jedinečných hodnot a umožňuje rovnoměrně distribuovat úlohy mezi tyto hodnoty. Jako přirozený artefakt dělení jsou požadavky, které zahrnují stejný klíč oddílu, omezeny maximální propustností jednoho oddílu.

Velikost úložiště pro dokumenty, které patří do stejné hodnoty klíče oddílu, je omezená na 20 GB (limit velikosti fyzického oddílu je 50 GB). Ideální klíč oddílu je ten , který se často zobrazuje jako filtr v dotazech a má dostatečnou kardinalitu, aby bylo zajištěno, že vaše řešení je škálovatelné.

Klíče oddílů používané pro dotazy Stream Analytics a Azure Cosmos DB nemusí být identické. Plně paralelní topologie doporučují použití vstupního klíče oddílu , jako klíč oddílu dotazu Stream Analytics, PartitionIdale to nemusí být doporučenou volbou pro klíč oddílu kontejneru Azure Cosmos DB.

Klíč oddílu je také hranicí pro transakce v uložených procedurách a triggerech pro službu Azure Cosmos DB. Měli byste zvolit klíč oddílu, aby dokumenty, které se vyskytují společně v transakcích, sdílely stejnou hodnotu klíče oddílu. Další podrobnosti o výběru klíče oddílu najdete v článku Dělení ve službě Azure Cosmos DB .

U pevných kontejnerů Azure Cosmos DB stream Analytics neumožňuje vertikálně navýšit nebo snížit kapacitu po jejich naplnění. Mají horní limit 10 GB a propustnost 10 000 RU/s. Pokud chcete migrovat data z pevného kontejneru do neomezeného kontejneru (například z jednoho s alespoň 1 000 RU/s a klíčem oddílu), použijte nástroj pro migraci dat nebo knihovnu kanálu změn.

Možnost zápisu do více pevných kontejnerů je zastaralá. Nedoporučujeme ji pro horizontální navýšení kapacity úlohy Stream Analytics.

Vylepšená propustnost s úrovní kompatibility 1.2

S úrovní kompatibility 1.2 podporuje Stream Analytics nativní integraci pro hromadný zápis do služby Azure Cosmos DB. Tato integrace umožňuje efektivní zápis do služby Azure Cosmos DB a současně maximalizuje propustnost a efektivně zpracovává požadavky na omezování.

Vylepšený mechanismus zápisu je k dispozici na nové úrovni kompatibility kvůli rozdílu v chování upsertu. Při úrovních před 1,2 je chování upsertu vložit nebo sloučit dokument. U verze 1.2 se chování upsertu upraví tak, aby vkládaly nebo nahradily dokument.

S úrovněmi před 1.2 používá Stream Analytics vlastní uloženou proceduru k hromadnému přenesení dokumentů na klíč oddílu do služby Azure Cosmos DB. Tam je dávka zapsána jako transakce. I když jeden záznam dosáhne přechodné chyby (omezování), musí se celá dávka opakovat. Díky tomuto chování jsou scénáře s i rozumným omezováním relativně pomalé.

Následující příklad ukazuje dva identické úlohy Stream Analytics, které se čtou ze stejného vstupu služby Azure Event Hubs. Obě úlohy Stream Analytics jsou plně rozdělené s předávacím dotazem a zápisem do identických kontejnerů Azure Cosmos DB. Metriky vlevo pocházejí z úlohy nakonfigurované s úrovní kompatibility 1.0. Metriky napravo jsou nakonfigurované na verzi 1.2. Klíč oddílu kontejneru Azure Cosmos DB je jedinečný identifikátor GUID, který pochází ze vstupní události.

Snímek obrazovky znázorňující porovnání metrik Stream Analytics

Příchozí rychlost událostí ve službě Event Hubs je dvakrát vyšší než kontejnery Azure Cosmos DB (20 000 RU), které se mají přijmout, takže ve službě Azure Cosmos DB se očekává omezování. Úloha s 1,2 ale konzistentně zapisuje s vyšší propustností (výstupní události za minutu) a s nižším průměrným využitím SU %. Tento rozdíl ve vašem prostředí závisí na několika dalších faktorech. Mezi tyto faktory patří volba formátu události, velikosti vstupní události nebo zprávy, klíčů oddílů a dotazu.

Snímek obrazovky znázorňující porovnání metrik služby Azure Cosmos DB

Díky verzi 1.2 je Stream Analytics inteligentnější při využívání 100 % dostupné propustnosti ve službě Azure Cosmos DB s několika opětovnými odesláními z omezování nebo omezování rychlosti. Toto chování poskytuje lepší prostředí pro jiné úlohy, jako jsou dotazy spuštěné v kontejneru najednou. Pokud chcete zjistit, jak Stream Analytics škáluje službu Azure Cosmos DB jako jímku pro 1 000 až 10 000 zpráv za sekundu, vyzkoušejte tento ukázkový projekt Azure.

Propustnost výstupu služby Azure Cosmos DB je shodná s 1.0 a 1.1. Důrazně doporučujeme používat úroveň kompatibility 1.2 ve službě Stream Analytics se službou Azure Cosmos DB.

Nastavení služby Azure Cosmos DB pro výstup JSON

Použití služby Azure Cosmos DB jako výstupu v Stream Analytics vygeneruje následující výzvu k zadání informací.

Snímek obrazovky znázorňující pole s informacemi pro výstupní datový proud Azure Cosmos DB

Pole Popis
Alias pro výstup Alias odkazující na tento výstup v dotazu Stream Analytics
Předplatné Předplatné Azure.
ID účtu Název nebo identifikátor URI koncového bodu účtu služby Azure Cosmos DB.
Klíč účtu Sdílený přístupový klíč pro účet služby Azure Cosmos DB.
Databáze Název databáze Azure Cosmos DB.
Název kontejneru Název kontejneru, například MyContainer. Musí existovat jeden kontejner s názvem MyContainer .
ID dokumentu Nepovinné. Název sloupce ve výstupních událostech, které se používají jako jedinečný klíč, na kterém musí být založeny operace vložení nebo aktualizace. Pokud ho necháte prázdný, vloží se všechny události bez možnosti aktualizace.

Jakmile nakonfigurujete výstup služby Azure Cosmos DB, můžete ho použít v dotazu jako cíl příkazu INTO. Pokud používáte výstup služby Azure Cosmos DB tímto způsobem, je potřeba klíč oddílu nastavit explicitně.

Výstupní záznam musí obsahovat sloupec s rozlišováním velkých a malých písmen pojmenovaný za klíčem oddílu ve službě Azure Cosmos DB. Aby bylo možné dosáhnout větší paralelizace, může příkaz vyžadovat klauzuli PARTITION BY, která používá stejný sloupec.

Tady je ukázkový dotaz:

    SELECT TollBoothId, PartitionId
    INTO CosmosDBOutput
    FROM Input1 PARTITION BY PartitionId

Zpracování chyb a opakování

Pokud dojde k přechodnému selhání, nedostupnosti služby nebo omezování v době, kdy Stream Analytics odesílá události do služby Azure Cosmos DB, Stream Analytics se po neomezenou dobu pokusí operaci úspěšně dokončit. Nepokouší se ale o opakování následujících selhání:

  • Neautorizováno (kód chyby HTTP 401)
  • Nenalezeno (kód chyby HTTP 404)
  • Zakázáno (kód chyby HTTP 403)
  • BadRequest (kód chyby HTTP 400)

Běžné problémy

  1. Do kolekce se přidá jedinečné omezení indexu a výstupní data z Stream Analytics toto omezení porušují. Zajistěte, aby výstupní data ze Stream Analytics neporušovala jedinečná omezení nebo neodebíla omezení. Další informace najdete v tématu Omezení jedinečných klíčů ve službě Azure Cosmos DB.

  2. Sloupec PartitionKey neexistuje.

  3. Sloupec Id neexistuje.

Další kroky