Mata in data från Azure Cosmos DB till Azure Data Explorer
Azure Data Explorer stöder datainmatning från Azure Cosmos DB for NoSql med hjälp av en ändringsfeed. Cosmos DB-dataanslutningen för ändringsflöde är en inmatningspipeline som lyssnar på cosmos DB-ändringsflödet och matar in data i din Data Explorer-tabell. Ändringsflödet lyssnar efter nya och uppdaterade dokument men loggar inte borttagna. Allmän information om datainmatning i Azure Data Explorer finns i Översikt över Datainmatning i Azure Data Explorer.
Varje dataanslutning lyssnar på en specifik Cosmos DB-container och matar in data i en angiven tabell (mer än en anslutning kan mata in i en enda tabell). Inmatningsmetoden stöder strömningsinmatning (när den är aktiverad) och köad inmatning.
I den här artikeln får du lära dig hur du konfigurerar en Cosmos DB-dataanslutning för ändringsflöde för att mata in data i Azure Data Explorer med systemhanterad identitet. Granska övervägandena innan du börjar.
Använd följande steg för att konfigurera en anslutningsapp:
Steg 1: Välj en Azure Data Explorer-tabell och konfigurera dess tabellmappning
Steg 2: Skapa en Cosmos DB-dataanslutning
Steg 3: Testa dataanslutningen
Förutsättningar
- En Azure-prenumeration. Skapa ett kostnadsfritt Azure-konto.
- Ett Azure Data Explorer-kluster och en databas. Skapa ett kluster och en databas.
- En container från ett Cosmos DB-konto för NoSQL.
- Om ditt Cosmos DB-konto blockerar nätverksåtkomst, till exempel med hjälp av en privat slutpunkt, måste du skapa en hanterad privat slutpunkt till Cosmos DB-kontot. Detta krävs för att klustret ska kunna anropa API:et för ändringsflöde.
Steg 1: Välj en Azure Data Explorer-tabell och konfigurera dess tabellmappning
Innan du skapar en dataanslutning skapar du en tabell där du lagrar inmatade data och tillämpar en mappning som matchar schemat i Cosmos DB-källcontainern. Om ditt scenario kräver mer än en enkel mappning av fält kan du använda uppdateringsprinciper för att transformera och mappa data som matas in från ändringsflödet.
Följande visar ett exempelschema för ett objekt i Cosmos DB-containern:
{
"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
}
Använd följande steg för att skapa en tabell och använda en tabellmappning:
Välj Fråga på den vänstra navigeringsmenyn i Azure Data Explorer webbgränssnitt och välj sedan den databas där du vill skapa tabellen.
Kör följande kommando för att skapa en tabell med namnet TestTable.
.create table TestTable(Id:string, Name:string, _ts:long, _timestamp:datetime)
Kör följande kommando för att skapa tabellmappningen.
Kommandot mappar anpassade egenskaper från ett Cosmos DB JSON-dokument till kolumner i TestTable-tabellen enligt följande:
Cosmos DB-egenskap Tabellkolumn Datatransformering id Id Ingen Namn Name Ingen _Ts _ts Ingen _Ts _Tidsstämpel Använder DateTimeFromUnixSeconds
för att transformera_ts (UNIX-sekunder) till _timestamp (datetime
))Anteckning
Vi rekommenderar att du använder följande tidsstämpelkolumner:
- _ts: Använd den här kolumnen för att stämma av data med Cosmos DB.
- _timestamp: Använd den här kolumnen för att köra effektiva tidsfilter i Kusto-frågor. Mer information finns i Bästa praxis för frågor.
.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"} ] ```
Transformera och mappa data med uppdateringsprinciper
Om ditt scenario kräver mer än en enkel mappning av fält kan du använda uppdateringsprinciper för att transformera och mappa data som matas in från ändringsflödet.
Uppdateringsprinciper är ett sätt att transformera data när de matas in i tabellen. De skrivs i Kusto-frågespråk och körs på inmatningspipelinen. De kan användas för att transformera data från en Cosmos DB-ändringsflödesinmatning, till exempel i följande scenarier:
- Dokumenten innehåller matriser som skulle vara enklare att fråga om de transformeras på flera rader med operatorn
mv-expand
. - Du vill filtrera bort dokument. Du kan till exempel filtrera bort dokument efter typ med operatorn
where
. - Du har komplex logik som inte kan representeras i en tabellmappning.
Information om hur du skapar och hanterar uppdateringsprinciper finns i Översikt över uppdateringsprinciper.
Steg 2: Skapa en Cosmos DB-dataanslutning
Du kan använda följande metoder för att skapa dataanslutningsappen:
I Azure Portal går du till översiktssidan för klustret och väljer sedan fliken Komma igång.
På panelen Datainmatning väljer du Skapa dataanslutning>Cosmos DB.
I fönstret Skapa dataanslutning i Cosmos DB fyller du i formuläret med informationen i tabellen:
Fält Beskrivning Databasnamn Välj den Azure-Data Explorer databas som du vill mata in data i. Namn på dataanslutning Ange ett namn för dataanslutningen. Prenumeration Välj den prenumeration som innehåller ditt Cosmos DB NoSQL-konto. Cosmos DB-konto Välj det Cosmos DB-konto som du vill mata in data från. SQL-databas Välj den Cosmos DB-databas som du vill mata in data från. SQL-container Välj den Cosmos DB-container som du vill mata in data från. Tabellnamn Ange det Azure Data Explorer tabellnamn som du vill mata in data till. Mappningsnamn Du kan också ange det mappningsnamn som ska användas för dataanslutningen. Du kan också göra följande under avsnittet Avancerade inställningar :
Ange startdatum för händelsehämtning. Det här är den tid då anslutningsappen börjar mata in data. Om du inte anger någon tid börjar anslutningsappen mata in data från det att du skapar dataanslutningen. Det rekommenderade datumformatet är ISO 8601 UTC-standarden, som anges på följande sätt:
yyyy-MM-ddTHH:mm:ss.fffffffZ
.Välj Användartilldelad och välj sedan identiteten. Som standard används den systemtilldelade hanterade identiteten av anslutningen. Om det behövs kan du använda en användartilldelad identitet.
Välj Skapa för att hämta dataanslutningen.
Steg 3: Testa dataanslutningen
Infoga följande dokument i Cosmos DB-containern:
{ "name":"Cousteau" }
Kör följande fråga i webbgränssnittet för Azure Data Explorer:
TestTable
Resultatuppsättningen bör se ut som på följande bild:
Anteckning
Azure Data Explorer har en aggregeringsprincip (batchbearbetning) för datainmatning i kö som är utformad för att optimera inmatningsprocessen. Standardprincipen för batchbearbetning är konfigurerad för att försegla en batch när något av följande villkor gäller för batchen: en maximal fördröjningstid på 5 minuter, total storlek på en GB eller 1 000 blobar. Därför kan det uppstå en fördröjning. Mer information finns i batchbearbetningsprincip. Om du vill minska svarstiden konfigurerar du tabellen så att den stöder strömning. Se strömningsprincip.
Överväganden
Följande överväganden gäller för Cosmos DB-ändringsflödet:
Ändringsflödet exponerar inte borttagningshändelser .
Cosmos DB-ändringsflödet innehåller bara nya och uppdaterade dokument. Om du behöver veta mer om borttagna dokument kan du konfigurera flödet med en mjuk markör för att markera ett Cosmos DB-dokument som borttaget. En egenskap läggs till för att uppdatera händelser som anger om ett dokument har tagits bort. Du kan sedan använda operatorn
where
i dina frågor för att filtrera bort dem.Om du till exempel mappar den borttagna egenskapen till en tabellkolumn med namnet IsDeleted kan du filtrera bort borttagna dokument med följande fråga:
TestTable | where not(IsDeleted)
Ändringsflödet exponerar bara den senaste uppdateringen av ett dokument.
För att förstå konsekvenserna av det andra övervägandet undersöker du följande scenario:
En Cosmos DB-container innehåller dokumenten A och B. Ändringarna i en egenskap som kallas foo visas i följande tabell:
Dokument-ID Egenskapsfoo Händelse Tidsstämpel för dokument (_ts) A Röd Skapa 10 B Blue Skapa 20 A Orange Uppdatera 30 A Rosa Uppdatera 40 B Violett Uppdatera 50 A Carmine Uppdatera 50 B NeonBlue Uppdatera 70 API:et för ändringsflöde avsöks med jämna mellanrum av dataanslutningsappen, vanligtvis med några sekunders mellanrum. Varje avsökning innehåller ändringar som har inträffat i containern mellan anrop, men endast den senaste versionen av ändringen per dokument.
För att illustrera problemet bör du överväga en sekvens med API-anrop med tidsstämplarna 15, 35, 55 och 75 enligt följande tabell:
Tidsstämpel för API-anrop Dokument-ID Egenskapsfoo Tidsstämpel för dokument (_ts) 15 A Röd 10 35 B Blue 20 35 A Orange 30 55 B Violett 50 55 A Carmine 60 75 B NeonBlue 70 Om du jämför API-resultaten med listan över ändringar som gjorts i Cosmos DB-dokumentet ser du att de inte matchar. Uppdateringshändelsen för att dokumentera A, markerad i ändringstabellen vid tidsstämpel 40, visas inte i resultatet av API-anropet.
För att förstå varför händelsen inte visas undersöker vi ändringarna i dokument A mellan API-anropen vid tidsstämplarna 35 och 55. Mellan dessa två anrop har dokument A ändrats två gånger, enligt följande:
Dokument-ID Egenskaps-foo Händelse Tidsstämpel för dokument (_ts) A Rosa Uppdatera 40 A Carmine Uppdatera 50 När API-anropet vid tidsstämpel 55 görs returnerar ändringsflödes-API:et den senaste versionen av dokumentet. I det här fallet är den senaste versionen av dokument A uppdateringen vid tidsstämpel 50, vilket är uppdateringen av egenskapen foo från Pink till Carmine.
På grund av det här scenariot kan dataanslutningsappen missa vissa mellanliggande dokumentändringar. Vissa händelser kan till exempel missas om dataanslutningstjänsten är nere i några minuter eller om frekvensen för dokumentändringar är högre än API-avsökningsfrekvensen. Det senaste tillståndet för varje dokument samlas dock in.
Det går inte att ta bort och återskapa en Cosmos DB-container
Azure Data Explorer håller reda på ändringsflödet genom att kontrollera "positionen" som den befinner sig på i flödet. Detta görs med hjälp av fortsättningstoken på varje fysisk partition i containern. När en container tas bort/återskapas är dessa fortsättningstoken ogiltiga och återställs inte; du måste ta bort och återskapa dataanslutningen.
Uppskatta kostnad
Hur mycket påverkar användningen av Cosmos DB-dataanslutningen din Cosmos DB-containers användning av enheter för programbegäran (RU:er ) ?
Anslutningsappen anropar Cosmos DB Change Feed API på varje fysisk partition i containern, upp till en gång i sekunden. Följande kostnader är kopplade till dessa anrop:
Kostnad | Description |
---|---|
Fasta kostnader | Fasta kostnader är cirka 2 RU:er per fysisk partition varje sekund. |
Rörliga kostnader | Rörliga kostnader är cirka 2 % av de RU:er som används för att skriva dokument, även om detta kan variera beroende på ditt scenario. Om du till exempel skriver 100 dokument till en Cosmos DB-container är kostnaden för att skriva dessa dokument 1 000 RU:er. Motsvarande kostnad för att använda anslutningsappen för att läsa dokumentet är ungefär 2 % kostnaden för att skriva dem, cirka 20 RU:er. |