Gegevens uit Azure Cosmos DB opnemen in Azure Data Explorer
Azure Data Explorer biedt ondersteuning voor gegevensopname uit Azure Cosmos DB voor NoSql met behulp van een wijzigingsfeed. De gegevensverbinding met de Cosmos DB-wijzigingenfeed is een opnamepijplijn die luistert naar uw Cosmos DB-wijzigingenfeed en de gegevens opneemt in uw Data Explorer-tabel. De wijzigingenfeed luistert naar nieuwe en bijgewerkte documenten, maar logt geen verwijderingen. Zie overzicht van gegevensopname in Azure Data Explorer voor algemene informatie over gegevensopname in Azure Data Explorer.
Elke gegevensverbinding luistert naar een specifieke Cosmos DB-container en neemt gegevens op in een opgegeven tabel (meer dan één verbinding kan in één tabel worden opgenomen). De opnamemethode ondersteunt streaming-opname (indien ingeschakeld) en opname in de wachtrij.
De twee belangrijkste scenario's voor het gebruik van de gegevensverbinding met de Cosmos DB-wijzigingenfeed zijn:
- Een Cosmos DB-container repliceren voor analytische doeleinden. Voor meer informatie, zie De nieuwste versies van Azure Cosmos DB-documenten ophalen.
- Het analyseren van de documentwijzigingen in een Cosmos DB-container. Zie Overwegingenvoor meer informatie.
In dit artikel leert u hoe u een cosmos DB-gegevensverbinding voor wijzigingenfeeds instelt om gegevens op te nemen in Azure Data Explorer met System Managed Identity. Bekijk de overwegingen voordat u begint.
Gebruik de volgende stappen om een connector in te stellen:
Stap 1: Een Azure Data Explorer-tabel kiezen en de tabeltoewijzing configureren
Stap 2: een Cosmos DB-gegevensverbinding maken
Stap 3: De gegevensverbinding testen
Voorwaarden
- Een Azure-abonnement. Maak een gratis Azure-account.
- Een Azure Data Explorer-cluster en -database. Een cluster en database maken.
- Een container voor een Cosmos DB-account voor NoSQL.
- Als uw Cosmos DB-account netwerktoegang blokkeert, bijvoorbeeld met behulp van een privé-eindpunt, moet u een beheerd privé-eindpunt maken voor het Cosmos DB-account. Dit is vereist voor uw cluster om de wijzigingenfeed-API aan te roepen.
Stap 1: Een Azure Data Explorer-tabel kiezen en de tabeltoewijzing configureren
Voordat u een gegevensverbinding maakt, maakt u een tabel waarin u de opgenomen gegevens opslaat en past u een toewijzing toe die overeenkomt met het schema in de Cosmos DB-broncontainer. Als uw scenario meer dan een eenvoudige toewijzing van velden vereist, kunt u update-beleid gebruiken om gegevens te transformeren en toewijzen die uit uw wijzigingsfeed zijn opgenomen.
Hieronder ziet u een voorbeeldschema van een item in de Cosmos DB-container:
{
"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
}
Gebruik de volgende stappen om een tabel te maken en een tabelmapping toe te passen:
Selecteer in de webgebruikersinterface van Azure Data Explorer in het linkernavigatiemenu Queryen selecteer vervolgens de database waarin u de tabel wilt maken.
Voer de volgende opdracht uit om een tabel met de naam TestTablete maken.
.create table TestTable(Id:string, Name:string, _ts:long, _timestamp:datetime)
Voer de volgende opdracht uit om de tabeltoewijzing te maken.
Met de opdracht worden aangepaste eigenschappen van een Cosmos DB JSON-document als volgt toegewezen aan kolommen in de tabel TestTable:
Cosmos DB-eigenschap Tabelkolom Transformatie id Identificatie Geen naam Naam Geen _ts _Ts Geen _ts _tijdstempel Gebruikt om _ts (UNIX-seconden ) tetransformeren naar _timestamp ()) Notitie
U wordt aangeraden de volgende tijdstempelkolommen te gebruiken:
- _ts: gebruik deze kolom om gegevens af te stemmen met Cosmos DB.
- _timestamp: gebruik deze kolom om efficiënte tijdfilters uit te voeren in uw Kusto-query's. Zie Best practice voor query'svoor meer informatie.
.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"} ] ```
Gegevens transformeren en in kaart brengen met updatebeleidsregels
Als uw scenario meer dan een eenvoudige toewijzing van velden vereist, kunt u updatebeleid(en) gebruiken om gegevens die zijn opgenomen in uw wijzigingsfeed te transformeren en toe te wijzen.
Updatebeleid zijn een manier om gegevens te transformeren terwijl deze worden opgenomen in uw tabel. Ze worden geschreven in Kusto Query Language en worden uitgevoerd op de opnamepijplijn. Ze kunnen worden toegepast om gegevens te transformeren die worden binnengehaald uit een Cosmos DB-wijzigingenfeed, zoals in de volgende scenario's:
- Uw documenten bevatten matrices die gemakkelijker kunnen worden opgevraagd als ze in meerdere rijen worden getransformeerd met behulp van de operator
mv-expand
. - U wilt de documenten filteren. U kunt bijvoorbeeld documenten filteren op type met behulp van de operator
where
. - U hebt complexe logica die niet kan worden weergegeven in een tabel.
Zie Overzicht van updatebeleidvoor meer informatie over het maken en beheren van updatebeleid.
Stap 2: Een Cosmos DB-gegevensverbinding maken
U kunt de volgende methoden gebruiken om de gegevensconnector te maken:
Ga in Azure Portal naar de overzichtspagina van uw cluster en selecteer vervolgens het tabblad Aan de slag.
Selecteer op de tegel Gegevensopname de optie Data verbinding maken>Cosmos DB.
In het deelvenster Cosmos DB Data verbinding maken vult u het formulier in met de informatie in de tabel:
Veld Beschrijving databasenaam Kies de Azure Data Explorer-database waarin u gegevens wilt opnemen. naam van gegevensverbinding Geef een naam op voor de gegevensverbinding. abonnement Selecteer het abonnement dat uw Cosmos DB NoSQL-account bevat. Cosmos DB-account Kies het Cosmos DB-account waaruit u gegevens wilt opnemen. SQL-database Kies de Cosmos DB-database waaruit u gegevens wilt opnemen. SQL-container Kies de Cosmos DB-container waaruit u gegevens wilt opnemen. Tabelnaam Geef de naam van de Azure Data Explorer tabel op waarnaar u gegevens wilt opnemen. koppelingsnaam Gebruik desgewenst de toewijzingsnaam voor de gegevensverbinding. Ga desgewenst als volgt te werk in het gedeelte Geavanceerde instellingen:
Geef de begindatum voor het ophalen van gebeurtenissen op . Dit is het tijdstip waarop de connector gegevens gaat opnemen. Als u geen tijd opgeeft, neemt de connector gegevens op vanaf het moment dat u de gegevensverbinding maakt. De aanbevolen datumnotatie is de ISO 8601 UTC-standaard, die als volgt is opgegeven:
yyyy-MM-ddTHH:mm:ss.fffffffZ
.Selecteer door de gebruiker toegewezen en selecteer vervolgens de identiteit. De door het systeem toegewezen beheerde identiteit wordt standaard gebruikt voor de verbinding. Indien nodig kunt u een door de gebruiker toegewezen identiteit gebruiken.
Selecteer maken om de gegevensverbinding te kratten.
Stap 3: De gegevensverbinding testen
Voeg in de Cosmos DB-container het volgende document in:
{ "name":"Cousteau" }
Voer in de webgebruikersinterface van Azure Data Explorer de volgende query uit:
TestTable
De resultatenset moet eruitzien als in de volgende afbeelding:
Notitie
Azure Data Explorer heeft een aggregatiebeleid (batchverwerking) voor gegevensopname in de wachtrij die is ontworpen om het opnameproces te optimaliseren. Het standaardbeleid voor batchverwerking is geconfigureerd om een batch te verzegelen zodra aan een van de volgende voorwaarden is voldaan voor de batch: een maximale vertragingstijd van 5 minuten, de totale grootte van één GB of 1000 blobs. Daarom kan er sprake zijn van een latentie. Zie batchverwerkingsbeleidvoor meer informatie. Als u de latentie wilt verminderen, configureert u uw tabel ter ondersteuning van streaming. Zie streamingbeleid.
Overwegingen
De volgende overwegingen zijn van toepassing op de Cosmos DB-wijzigingenfeed:
In de wijzigingenfeed worden verwijdering gebeurtenissen niet weergegeven.
De Cosmos DB-wijzigingenfeed bevat alleen nieuwe en bijgewerkte documenten. Als u meer wilt weten over verwijderde documenten, kunt u uw feed configureren met een zachte markering om een Cosmos DB-document te markeren als verwijderd. Er wordt een eigenschap toegevoegd om gebeurtenissen bij te werken die aangeven of een document is verwijderd. Vervolgens kunt u de operator
where
in uw query's gebruiken om ze uit te filteren.Als u bijvoorbeeld de verwijderde eigenschap toe wijst aan een tabelkolom met de naam IsDeleted, kunt u verwijderde documenten filteren met de volgende query:
TestTable | where not(IsDeleted)
De wijzigingenfeed bevat alleen de meest recente update van een document.
Bekijk het volgende scenario om inzicht te hebben in de gevolgen van de tweede overweging:
Een Cosmos DB-container bevat documenten A en B. De wijzigingen in een eigenschap met de naam foo- worden weergegeven in de volgende tabel:
Document-ID Eigenschap foo Gebeurtenis Tijdstempel van document (_ts) Een Rood Creatie 10 B Blauw Creatie 20 Een Oranje Bijwerken 30 A Roze bijwerken 40 B Violet Bijwerken 50 Een Karmijn Bijwerken 50 B NeonBlue Bijwerken 70 De wijzigingenfeed-API wordt op regelmatige intervallen gepolled door de gegevensconnector, meestal om de paar seconden. Iedere poll bevat wijzigingen die zijn opgetreden in de container tussen oproepen, maar alleen de meest recente versie van een wijziging per document.
Om het probleem te illustreren, overweeg een reeks API-aanroepen met tijdstempels 15, 35, 55en 75, zoals weergegeven in de volgende tabel:
Tijdstempel van API-aanroep Document-ID Eigenschap foo Tijdstempel van document (_ts) 15 Een Rood 10 35 B Blauw 20 35 Een Oranje 30 55 B Violet 50 55 Een Karmijn 60 75 B NeonBlue 70 Als u de API-resultaten vergelijkt met de lijst met wijzigingen die zijn aangebracht in het Cosmos DB-document, ziet u dat deze niet overeenkomen. De bijwerkgebeurtenis voor document A, gemarkeerd in de wijzigingstabel bij tijdstempel 40, verschijnt niet in de resultaten van de API-oproep.
Om te begrijpen waarom de gebeurtenis niet wordt weergegeven, bekijken we de wijzigingen in het document A- tussen de API-aanroepen bij tijdstempels 35 en 55. Tussen deze twee oproepen is document A tweemaal gewijzigd, als volgt:
Document-ID Eigenschap foo Gebeurtenis Tijdstempel van document (_ts) Een Roze Bijwerken 40 Een Karmijn Bijwerken 50 Wanneer de API-aanroep van tijdstempel 55 wordt gemaakt, retourneert de wijzigingenfeed-API de nieuwste versie van het document. In dit geval is de nieuwste versie van document A de update op tijdstip 50, wat de aanpassing van eigenschap foo van Pink naar Carminebetreft.
Vanwege dit scenario kan de gegevensconnector enkele tussenliggende documentwijzigingen missen. Sommige gebeurtenissen kunnen bijvoorbeeld worden gemist als de gegevensverbindingsservice een paar minuten offline is of als de frequentie van documentwijzigingen hoger is dan de frequentie van de API-polling. De meest recente status van elk document wordt echter vastgelegd.
Het verwijderen en opnieuw maken van een Cosmos DB-container wordt niet ondersteund
Azure Data Explorer houdt de wijzigingenfeed bij door het bijhouden van controlepunten van de positie waar het zich in de feed bevindt. Dit wordt gedaan met behulp van een continuatietoken op elke van de fysieke partities van de container. Wanneer een container wordt verwijderd/opnieuw gemaakt, is het vervolgtoken ongeldig en wordt het niet opnieuw ingesteld. In dit geval moet u de gegevensverbinding verwijderen en opnieuw maken.
Kosten schatten
Hoeveel invloed heeft het gebruik van de Cosmos DB-gegevensverbinding op het gebruik van uw Cosmos DB-container's aanvraageenheden (RU's)?
De connector roept de API voor de wijzigingenfeed van Cosmos DB aan op elke fysieke partitie van uw container, tot eenmaal per seconde. De volgende kosten zijn gekoppeld aan deze aanroepen:
Kosten | Beschrijving |
---|---|
Vaste kosten | Vaste kosten zijn ongeveer 2 RU's per fysieke partitie elke seconde. |
Variabele kosten | Variabele kosten zijn ongeveer 2% van de RU's die worden gebruikt voor het schrijven van documenten, maar dit kan variëren afhankelijk van uw scenario. Als u bijvoorbeeld 100 documenten naar een Cosmos DB-container schrijft, zijn de kosten voor het schrijven van deze documenten 1000 RU's. De bijbehorende kosten voor het gebruik van de connector om die documenten te lezen, zijn ongeveer 2% keer de kosten voor het schrijven ervan, namelijk ongeveer 20 RUs. |