Příjem dat ze služby Azure Cosmos DB do Azure Data Exploreru
Azure Data Explorer podporuje příjem dat ze služby Azure Cosmos DB for NoSql pomocí kanálu změn. Datové připojení kanálu změn služby Cosmos DB je kanál příjmu dat, který naslouchá kanálu změn Cosmos DB a ingestuje data do tabulky Průzkumníka dat. Kanál změn naslouchá novým a aktualizovaným dokumentům, ale neodstraní se. Obecné informace o příjmu dat v Azure Data Exploreru najdete v přehledu příjmu dat v Azure Data Exploreru.
Každé datové připojení naslouchá určitému kontejneru Cosmos DB a ingestuje data do zadané tabulky (více než jedno připojení může ingestovat v jedné tabulce). Metoda příjmu dat podporuje příjem dat streamování (pokud je povolený) a příjem dat ve frontě.
V tomto článku se dozvíte, jak nastavit datové připojení kanálu změn Cosmos DB k ingestování dat do Azure Data Exploreru pomocí systémové spravované identity. Než začnete, projděte si důležité informace.
K nastavení konektoru použijte následující postup:
Krok 1: Volba tabulky Azure Data Exploreru a konfigurace mapování tabulek
Krok 2: Vytvoření datového připojení Cosmos DB
Krok 3: Testování datového připojení
Požadavky
- Předplatné Azure. Vytvořte bezplatný účet Azure.
- Cluster a databáze Azure Data Exploreru. Vytvořte cluster a databázi.
- Kontejner z účtu služby Cosmos DB pro NoSQL.
- Pokud váš účet Cosmos DB blokuje přístup k síti, například pomocí privátního koncového bodu, musíte pro účet Cosmos DB vytvořit spravovaný privátní koncový bod. To se vyžaduje, aby váš cluster vyvolal rozhraní API kanálu změn.
Krok 1: Volba tabulky Azure Data Exploreru a konfigurace mapování tabulek
Než vytvoříte datové připojení, vytvořte tabulku, do které uložíte ingestované data a použijete mapování, které odpovídá schématu ve zdrojovém kontejneru Cosmos DB. Pokud váš scénář vyžaduje více než jednoduché mapování polí, můžete pomocí zásad aktualizací transformovat a mapovat data ingestována z kanálu změn.
Následující příklad ukazuje ukázkové schéma položky v kontejneru Cosmos DB:
{
"id": "17313a67-362b-494f-b948-e2a8e95e237e",
"name": "Cousteau",
"_rid": "pL0MAJ0Plo0CAAAAAAAAAA==",
"_self": "dbs/pL0MAA==/colls/pL0MAJ0Plo0=/docs/pL0MAJ0Plo0CAAAAAAAAAA==/",
"_etag": "\"000037fc-0000-0700-0000-626a44110000\"",
"_attachments": "attachments/",
"_ts": 1651131409
}
Pomocí následujících kroků vytvořte tabulku a použijte mapování tabulky:
Ve webovém uživatelském rozhraní Azure Data Exploreru v levé navigační nabídce vyberte Dotaz a pak vyberte databázi, ve které chcete tabulku vytvořit.
Spuštěním následujícího příkazu vytvořte tabulku s názvem TestTable.
.create table TestTable(Id:string, Name:string, _ts:long, _timestamp:datetime)
Spuštěním následujícího příkazu vytvořte mapování tabulky.
Příkaz mapuje vlastní vlastnosti z dokumentu JSON služby Cosmos DB na sloupce v tabulce TestTable následujícím způsobem:
Vlastnost Cosmos DB Sloupec tabulky Transformace id ID Nic Jméno Název Nic _Ts _ts Nic _Ts _časová značka Používá DateTimeFromUnixSeconds
se k transformaci _ts (v sekundách UNIX) na _timestamp (datetime
)).Poznámka:
Doporučujeme použít následující sloupce časového razítka:
- _ts: Pomocí tohoto sloupce můžete sloučit data se službou Cosmos DB.
- _timestamp: Pomocí tohoto sloupce můžete spouštět efektivní časové filtry v dotazech Kusto. Další informace najdete v tématu Osvědčené postupy pro dotazy.
.create table TestTable ingestion json mapping "DocumentMapping" ``` [ {"column":"Id","path":"$.id"}, {"column":"Name","path":"$.name"}, {"column":"_ts","path":"$._ts"}, {"column":"_timestamp","path":"$._ts", "transform":"DateTimeFromUnixSeconds"} ] ```
Transformace a mapování dat pomocí zásad aktualizací
Pokud váš scénář vyžaduje více než jednoduché mapování polí, můžete pomocí zásad aktualizací transformovat a mapovat data ingestována z kanálu změn.
Zásady aktualizací představují způsob, jak transformovat data při jejich ingestování do tabulky. Jsou napsané v dotazovací jazyk Kusto a běží v kanálu příjmu dat. Dají se použít k transformaci dat z příjmu kanálu změn Cosmos DB, například v následujících scénářích:
- Dokumenty obsahují pole, která by se snadněji dotazovala, pokud se pomocí operátoru
mv-expand
transformují ve více řádcích. - Chcete vyfiltrovat dokumenty. Můžete například vyfiltrovat dokumenty podle typu pomocí operátoru
where
. - Máte složitou logiku, kterou nelze reprezentovat v mapování tabulky.
Informace o vytváření a správě zásad aktualizací najdete v tématu Přehled zásad aktualizace.
Krok 2: Vytvoření datového připojení Cosmos DB
K vytvoření datového konektoru můžete použít následující metody:
Na webu Azure Portal přejděte na stránku přehledu clusteru a pak vyberte kartu Začínáme .
Na dlaždici Příjem dat vyberte Vytvořit datové připojení>Cosmos DB.
V podokně Vytvořit datové připojení služby Cosmos DB vyplňte formulář informacemi v tabulce:
Pole Popis Název databáze Zvolte databázi Azure Data Exploreru, do které chcete ingestovat data. Název datového připojení Zadejte název datového připojení. Předplatné Vyberte předplatné, které obsahuje váš účet NoSQL služby Cosmos DB. Účet služby Cosmos DB Zvolte účet služby Cosmos DB, ze kterého chcete ingestovat data. Databáze SQL Zvolte databázi Cosmos DB, ze které chcete ingestovat data. Kontejner SQL Zvolte kontejner Cosmos DB, ze kterého chcete ingestovat data. Název tabulky Zadejte název tabulky Azure Data Exploreru, do které chcete ingestovat data. Název mapování Volitelně můžete zadat název mapování, který se má použít pro datové připojení. Volitelně můžete v části Upřesnit nastavení provést následující akce:
Zadejte počáteční datum načtení události. To je čas, kdy konektor začne ingestovat data. Pokud nezadáte čas, konektor začne ingestovat data od okamžiku vytvoření datového připojení. Doporučený formát data je normou ISO 8601 UTC, která je určena takto:
yyyy-MM-ddTHH:mm:ss.fffffffZ
.Vyberte Uživatelem přiřazenou a pak vyberte identitu. Ve výchozím nastavení se pro připojení používá spravovaná identita přiřazená systémem. V případě potřeby můžete použít identitu přiřazenou uživatelem.
Výběrem možnosti Vytvořit vytvořte datové připojení.
Krok 3: Testování datového připojení
Do kontejneru Cosmos DB vložte následující dokument:
{ "name":"Cousteau" }
Ve webovém uživatelském rozhraní Azure Data Exploreru spusťte následující dotaz:
TestTable
Sada výsledků by měla vypadat jako na následujícím obrázku:
Poznámka:
Azure Data Explorer má zásadu agregace (dávkování) pro příjem dat ve frontě navrženou tak, aby optimalizovala proces příjmu dat. Výchozí zásada dávkování je nakonfigurovaná tak, aby zapečetila dávku jednou z následujících podmínek: maximální doba zpoždění 5 minut, celková velikost jedné GB nebo 1000 objektů blob. Proto může docházet k latenci. Další informace najdete v tématu Zásady dávkování. Pokud chcete snížit latenci, nakonfigurujte tabulku tak, aby podporovala streamování. Viz zásady streamování.
Důležité informace
Následující aspekty platí pro kanál změn cosmos DB:
Kanál změn nezpřístupňuje události odstranění .
Kanál změn Cosmos DB obsahuje jenom nové a aktualizované dokumenty. Pokud potřebujete vědět o odstraněných dokumentech, můžete nakonfigurovat informační kanál pomocí měkké značky a označit dokument Cosmos DB jako odstraněný. Přidá se vlastnost pro aktualizaci událostí, které označují, zda byl dokument odstraněn. Pomocí operátoru
where
v dotazech je pak můžete vyfiltrovat.Pokud například namapujete odstraněnou vlastnost na sloupec tabulky s názvem IsDeleted, můžete odstraněné dokumenty vyfiltrovat pomocí následujícího dotazu:
TestTable | where not(IsDeleted)
Informační kanál změn zveřejňuje pouze nejnovější aktualizaci dokumentu.
Abyste pochopili důsledky druhé úvahy, projděte si následující scénář:
Kontejner Cosmos DB obsahuje dokumenty A a B. Změny vlastnosti s názvem foo jsou uvedeny v následující tabulce:
ID dokumentu Vlastnost foo Událost Časové razítko dokumentu (_ts) A Červený Vytvoření 10 T Modrý Vytvoření 20 A Orange Aktualizovat 30 A Růžový Aktualizace 40 T Fialka Aktualizovat 50 A Karmín Aktualizovat 50 T NeonBlue Aktualizovat 70 Rozhraní API kanálu změn se dotazuje datovým konektorem v pravidelných intervalech, obvykle každých několik sekund. Každé hlasování obsahuje změny, ke kterým došlo v kontejneru mezi voláními, ale pouze nejnovější verzi změn na dokument.
Pokud chcete tento problém ilustrovat, zvažte posloupnost volání rozhraní API s časovými razítky 15, 35, 55 a 75, jak je znázorněno v následující tabulce:
Časové razítko volání rozhraní API ID dokumentu Vlastnost foo Časové razítko dokumentu (_ts) 15 A Červený 10 35 T Modrý 20 35 A Orange 30 55 T Fialka 50 55 A Karmín 60 75 T NeonBlue 70 Porovnání výsledků rozhraní API se seznamem změn provedených v dokumentu Cosmos DB si všimnete, že se neshodují. Událost aktualizace dokumentu A, zvýrazněná v tabulce změn v časovém razítku 40, se nezobrazí ve výsledcích volání rozhraní API.
Abychom pochopili, proč se událost nezobrazuje, prozkoumáme změny dokumentu A mezi voláními rozhraní API v časových razítkech 35 a 55. Mezi těmito dvěma voláními se dokument A změnil dvakrát takto:
ID dokumentu Vlastnost foo Událost Časové razítko dokumentu (_ts) A Růžová Aktualizovat 40 A Karmín Aktualizovat 50 Při volání rozhraní API v časovém razítku 55 vrátí rozhraní API kanálu změn nejnovější verzi dokumentu. V tomto případě je nejnovější verzí dokumentu A aktualizace v časovém razítku 50, což je aktualizace vlastnosti foo z Pink do Carmine.
Kvůli tomuto scénáři může datový konektor vynechat některé přechodné změny dokumentu. Některé události se například můžou zmeškat, pokud je služba datového připojení po dobu několika minut nižší nebo pokud je frekvence změn dokumentu vyšší než frekvence dotazování rozhraní API. Zachytí se ale nejnovější stav každého dokumentu.
Odstranění a opětovné vytvoření kontejneru Cosmos DB se nepodporuje.
Azure Data Explorer udržuje přehled o kanálu změn tak, že do informačního kanálu umístí kontrolní bod na jeho pozici. K tomu se používá token pro pokračování v každém fyzickém oddílu kontejneru. Při odstranění nebo opětovném vytvoření kontejneru jsou tyto tokeny pro pokračování neplatné a nejsou resetovány: musíte odstranit a znovu vytvořit datové připojení.
Odhad nákladů
Jaký vliv má využití datového připojení Cosmos DB na využití jednotek žádostí (RU) kontejneru Cosmos DB?
Konektor vyvolá rozhraní API kanálu změn služby Cosmos DB v každém fyzickém oddílu kontejneru až jednou za sekundu. K těmto voláním jsou přidruženy následující náklady:
Náklady | Popis |
---|---|
Pevné náklady | Pevné náklady jsou přibližně 2 RU na fyzický oddíl každou sekundu. |
Variabilní náklady | Proměnlivé náklady jsou přibližně 2 % RU používaných k psaní dokumentů, i když se to může lišit v závislosti na vašem scénáři. Pokud například do kontejneru Cosmos DB napíšete 100 dokumentů, náklady na zápis těchto dokumentů jsou 1 000 RU. Odpovídající náklady na použití konektoru ke čtení tohoto dokumentu jsou přibližně 2 % nákladů na jejich zápis, přibližně 20 RU. |