Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure Data Explorer is een snelle en zeer schaalbare service voor gegevensverkenning voor logboek- en telemetriegegevens. Azure Data Explorer biedt twee clientbibliotheken voor Node: een opnamebibliotheek en een gegevensbibliotheek. Met deze bibliotheken kunt u gegevens opnemen (laden) in een cluster en gegevens opvragen uit uw code. In dit artikel maakt u eerst een tabel en een gegevensmapping in een testcluster. Voegt u vervolgens gegevensinvoer toe aan de wachtrij van het cluster en valideert u de resultaten.
Als u geen Azure-abonnement hebt, maakt u een gratis Azure-account voordat u begint.
Vereiste voorwaarden
- Een Microsoft-account of een Microsoft Entra-gebruikersidentiteit. Er is geen Azure-abonnement vereist.
- Een Azure Data Explorer-cluster en -database. Een cluster en database maken.
- Node.js geïnstalleerd op uw ontwikkelcomputer
De databibliotheken en invoerbibliotheken installeren
Installeren azure-kusto-ingest en azure-kusto-data
npm i azure-kusto-ingest@^3.3.2 azure-kusto-data@^3.3.2
Importinstructies en constanten toevoegen
Klassen importeren uit de bibliotheken
const { Client: KustoClient, KustoConnectionStringBuilder } = require('azure-kusto-data');
const {
IngestClient: KustoIngestClient,
IngestionProperties,
IngestionDescriptors,
DataFormat,
IngestionMappingKind,
} = require("azure-kusto-ingest");
Voor het verifiëren van een toepassing gebruikt Azure Data Explorer uw Microsoft Entra-tenant-id. Als u uw tenant-id wilt vinden, volgt u uw Microsoft 365-tenant-id zoeken.
Stel de waarden voor authorityId, kustoUrikustoIngestUri en kustoDatabase voordat u deze code uitvoert.
const cluster = "MyCluster";
const region = "westus";
const authorityId = "microsoft.com";
const kustoUri = `https://${cluster}.${region}.kusto.windows.net`;
const kustoIngestUri = `https://ingest-${cluster}.${region}.kusto.windows.net`;
const kustoDatabase = "Weather";
Maak nu de verbindingsreeks. In dit voorbeeld wordt apparaatverificatie gebruikt voor toegang tot het cluster. Controleer de console-uitvoer om de verificatie te voltooien. U kunt ook een Microsoft Entra-toepassingscertificaat, toepassingssleutel en gebruiker en wachtwoord gebruiken.
U maakt de doeltabel en de toewijzingsdefinitie in een latere stap.
const kcsbIngest = KustoConnectionStringBuilder.withAadDeviceAuthentication(kustoIngestUri, authorityId);
const kcsbData = KustoConnectionStringBuilder.withAadDeviceAuthentication(kustoUri, authorityId);
const destTable = "StormEvents";
const destTableMapping = "StormEvents_CSV_Mapping";
Bronbestandsgegevens instellen
Importeer meer klassen en stel constanten in voor het gegevensbestand. In dit voorbeeld wordt een voorbeeldbestand gebruikt dat wordt gehost in Azure Blob Storage. De StormEvents-voorbeeldgegevensset bevat weergerelateerde gegevens van de National Centers for Environmental Information.
const container = "samplefiles";
const account = "kustosamples";
const sas = ""; // If relevant add SAS token
const filePath = "StormEvents.csv";
const blobPath = `https://${account}.blob.core.windows.net/${container}/${filePath}${sas}`;
Een tabel maken in het testcluster
Maak een tabel die overeenkomt met het schema van de gegevens in het StormEvents.csv bestand. Wanneer deze code wordt uitgevoerd, wordt een bericht als het volgende geretourneerd: Als u zich wilt aanmelden, gebruikt u een webbrowser om de pagina https://microsoft.com/devicelogin te openen en voert u de code XXXXXXXXX IN om te verifiëren. Volg de stappen om u aan te melden en ga vervolgens terug om het volgende codeblok uit te voeren. Voor volgende codeblokken die een verbinding maken, moet u zich opnieuw aanmelden.
const kustoClient = new KustoClient(kcsbData);
const createTableCommand = `.create table ${destTable} (StartTime: datetime, EndTime: datetime, EpisodeId: int, EventId: int, State: string, EventType: string, InjuriesDirect: int, InjuriesIndirect: int, DeathsDirect: int, DeathsIndirect: int, DamageProperty: int, DamageCrops: int, Source: string, BeginLocation: string, EndLocation: string, BeginLat: real, BeginLon: real, EndLat: real, EndLon: real, EpisodeNarrative: string, EventNarrative: string, StormSummary: dynamic)`;
const createTableResults = await kustoClient.executeMgmt(kustoDatabase, createTableCommand);
console.log(createTableResults.primaryResults[0].toJSON().data);
Het definiëren van invoerkoppeling
Wijs binnenkomende CSV-gegevens toe aan de kolomnamen en gegevenstypen die worden gebruikt bij het maken van de tabel.
const createMappingCommand = `.create table ${destTable} ingestion csv mapping '${destTableMapping}' '[{"Name":"StartTime","datatype":"datetime","Ordinal":0}, {"Name":"EndTime","datatype":"datetime","Ordinal":1},{"Name":"EpisodeId","datatype":"int","Ordinal":2},{"Name":"EventId","datatype":"int","Ordinal":3},{"Name":"State","datatype":"string","Ordinal":4},{"Name":"EventType","datatype":"string","Ordinal":5},{"Name":"InjuriesDirect","datatype":"int","Ordinal":6},{"Name":"InjuriesIndirect","datatype":"int","Ordinal":7},{"Name":"DeathsDirect","datatype":"int","Ordinal":8},{"Name":"DeathsIndirect","datatype":"int","Ordinal":9},{"Name":"DamageProperty","datatype":"int","Ordinal":10},{"Name":"DamageCrops","datatype":"int","Ordinal":11},{"Name":"Source","datatype":"string","Ordinal":12},{"Name":"BeginLocation","datatype":"string","Ordinal":13},{"Name":"EndLocation","datatype":"string","Ordinal":14},{"Name":"BeginLat","datatype":"real","Ordinal":16},{"Name":"BeginLon","datatype":"real","Ordinal":17},{"Name":"EndLat","datatype":"real","Ordinal":18},{"Name":"EndLon","datatype":"real","Ordinal":19},{"Name":"EpisodeNarrative","datatype":"string","Ordinal":20},{"Name":"EventNarrative","datatype":"string","Ordinal":21},{"Name":"StormSummary","datatype":"dynamic","Ordinal":22}]'`;
const mappingCommandResults = await kustoClient.executeMgmt(kustoDatabase, createMappingCommand);
console.log(mappingCommandResults.primaryResults[0].toJSON().data);
Een bericht in de wachtrij plaatsen voor opname
Een bericht in de wachtrij plaatsen om gegevens uit blobopslag te extraheren en die gegevens op te nemen in Azure Data Explorer.
const defaultProps = new IngestionProperties({
database: kustoDatabase,
table: destTable,
format: DataFormat.CSV,
ingestionMappingReference: destTableMapping,
ingestionMappingKind: IngestionMappingKind.CSV,
additionalProperties: {ignoreFirstRecord: true},
});
const ingestClient = new KustoIngestClient(kcsbIngest, defaultProps);
// All ingestion properties are documented here: https://learn.microsoft.com/azure/kusto/management/data-ingest#ingestion-properties
const blobDesc = new BlobDescriptor(blobPath, 10);
try {
const ingestionResult = await ingestClient.ingestFromBlob(blobDesc, null);
} catch (err) {
// Handle errors
}
Valideren dat de tabel gegevens bevat
Controleer of de gegevens zijn opgenomen in de tabel. Wacht vijf tot tien minuten totdat de opname in de wachtrij is geplaatst om de opname te plannen en de gegevens te laden in Azure Data Explorer. Voer vervolgens de volgende code uit om het aantal records in de StormEvents tabel op te halen.
const query = `${destTable} | count`;
var tableResults = await kustoClient.execute(kustoDatabase, query);
console.log(tableResults.primaryResults[0].toJSON().data);
Query's voor probleemoplossing uitvoeren
Meld u aan bij https://dataexplorer.azure.com en maak verbinding met uw cluster. Voer de volgende opdracht uit in uw database om te zien of er de afgelopen vier uur opnamefouten zijn opgetreden. Vervang de naam van de database voordat u deze uitvoert.
.show ingestion failures
| where FailedOn > ago(4h) and Database == "<DatabaseName>"
Voer de volgende opdracht uit om de status van alle opnamebewerkingen in de afgelopen vier uur weer te geven. Vervang de databasenaam voordat u het uitvoert.
.show operations
| where StartedOn > ago(4h) and Database == "<DatabaseName>" and Operation == "DataIngestPull"
| summarize arg_max(LastUpdatedOn, *) by OperationId
De hulpbronnen opschonen
Als u van plan bent onze andere artikelen te volgen, houdt dan de bronnen die u hebt gemaakt. Als dat niet het is, voert u de volgende opdracht uit in uw database om de StormEvents tabel op te schonen.
.drop table StormEvents