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

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:

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

  2. 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)
    
  3. 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:

  1. I Azure Portal går du till översiktssidan för klustret och väljer sedan fliken Komma igång.

  2. På panelen Datainmatning väljer du Skapa dataanslutning>Cosmos DB.

    Skärmbild av fliken Komma igång med alternativet Skapa Cosmos DB-dataanslutning.

  3. I fönstret Skapa dataanslutning i Cosmos DB fyller du i formuläret med informationen i tabellen:

    Skärmbild av dataanslutningsfönstret som visar formulärfälten med värden.

    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.
  4. Du kan också göra följande under avsnittet Avancerade inställningar :

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

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

      Skärmbild av dataanslutningsfönstret som visar förhandsinställningarna.

  5. Välj Skapa för att hämta dataanslutningen.

Steg 3: Testa dataanslutningen

  1. Infoga följande dokument i Cosmos DB-containern:

    {
        "name":"Cousteau"
    }
    
  2. 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:

    Skärmbild av resultatfönstret som visar det inmatade dokumentet.

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.