Gegevens opnemen met behulp van de Azure Data Explorer Go SDK
Azure Data Explorer is een snelle en zeer schaalbare service voor gegevensverkenning voor telemetrische gegevens en gegevens uit logboeken. Het biedt een Go SDK-clientbibliotheek voor interactie met de Azure Data Explorer-service. U kunt de Go SDK gebruiken om gegevens op te nemen, te beheren en op te vragen in Azure Data Explorer-clusters.
In dit artikel maakt u eerst een tabel en gegevenstoewijzing in een testcluster. Vervolgens zet u een opname in het cluster in de wachtrij met behulp van de Go SDK en valideert u de resultaten.
Vereisten
- Een Microsoft-account of een Microsoft Entra gebruikersidentiteit. Er is geen Azure-abonnement vereist.
- Een Azure Data Explorer-cluster en -database. Maak een cluster en database.
- Installeer Git.
- Installeer Go met de volgende minimale vereisten voor de Go SDK.
- Maak een app-registratie en ververleent deze machtigingen voor de database. Sla de client-id en het clientgeheim op voor later gebruik.
De Go SDK installeren
De Azure Data Explorer Go SDK wordt automatisch geïnstalleerd wanneer u de [voorbeeldtoepassing uitvoert die gebruikmaakt van Go-modules. Als u de Go SDK voor een andere toepassing hebt geïnstalleerd, maakt u een Go-module en haalt u het Azure Data Explorer-pakket op (met ), go get
bijvoorbeeld:
go mod init foo.com/bar
go get github.com/Azure/azure-kusto-go/kusto
De pakketafhankelijkheid wordt toegevoegd aan het go.mod
bestand. Gebruik deze in uw Go-toepassing.
De code bekijken
Deze sectie De code controleren is optioneel. Als u wilt weten hoe de code werkt, kunt u de volgende codefragmenten bekijken. Anders slaat u dit over en gaat u naar De toepassing uitvoeren.
Verifiëren
Het programma moet worden geverifieerd bij Azure Data Explorer-service voordat bewerkingen kunnen worden uitgevoerd.
auth := kusto.Authorization{Config: auth.NewClientCredentialsConfig(clientID, clientSecret, tenantID)}
client, err := kusto.New(kustoEndpoint, auth)
Een exemplaar van kusto. Autorisatie wordt gemaakt met behulp van de referenties van de service-principal. Deze wordt vervolgens gebruikt om een kusto te maken. Client met de nieuwe functie die ook het clustereindpunt accepteert.
Tabel maken
De opdracht tabel maken wordt vertegenwoordigd door een Kusto-instructie. De functie Mgmt wordt gebruikt om beheeropdrachten uit te voeren. Deze wordt gebruikt om de opdracht uit te voeren om een tabel te maken.
func createTable(kc *kusto.Client, kustoDB string) {
_, err := kc.Mgmt(context.Background(), kustoDB, kusto.NewStmt(createTableCommand))
if err != nil {
log.Fatal("failed to create table", err)
}
log.Printf("Table %s created in DB %s\n", kustoTable, kustoDB)
}
Tip
Een Kusto-instructie is standaard constant voor betere beveiliging.
NewStmt
accepteert tekenreeksconstanten. De UnsafeStmt
API maakt het gebruik van niet-constante instructiesegmenten mogelijk, maar wordt niet aanbevolen.
De kusto-opdracht tabel maken is als volgt:
.create table StormEvents (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)
Toewijzing maken
Gegevenstoewijzingen worden tijdens de opname gebruikt om binnenkomende gegevens toe te wijzen aan kolommen in Azure Data Explorer tabellen. Zie Gegevenstoewijzing voor meer informatie. Toewijzing wordt gemaakt, op dezelfde manier als een tabel, met behulp van de Mgmt
functie met de databasenaam en de juiste opdracht. De volledige opdracht is beschikbaar in de GitHub-opslagplaats voor het voorbeeld.
func createMapping(kc *kusto.Client, kustoDB string) {
_, err := kc.Mgmt(context.Background(), kustoDB, kusto.NewStmt(createMappingCommand))
if err != nil {
log.Fatal("failed to create mapping - ", err)
}
log.Printf("Mapping %s created\n", kustoMappingRefName)
}
Gegevens opnemen
Een opname wordt in de wachtrij geplaatst met behulp van een bestand uit een bestaande Azure Blob Storage container.
func ingestFile(kc *kusto.Client, blobStoreAccountName, blobStoreContainer, blobStoreToken, blobStoreFileName, kustoMappingRefName, kustoDB, kustoTable string) {
kIngest, err := ingest.New(kc, kustoDB, kustoTable)
if err != nil {
log.Fatal("failed to create ingestion client", err)
}
blobStorePath := fmt.Sprintf(blobStorePathFormat, blobStoreAccountName, blobStoreContainer, blobStoreFileName, blobStoreToken)
err = kIngest.FromFile(context.Background(), blobStorePath, ingest.FileFormat(ingest.CSV), ingest.IngestionMappingRef(kustoMappingRefName, ingest.CSV))
if err != nil {
log.Fatal("failed to ingest file", err)
}
log.Println("Ingested file from -", blobStorePath)
}
De opnameclient wordt gemaakt met behulp van opname. Nieuw. De functie FromFile wordt gebruikt om te verwijzen naar de Azure Blob Storage-URI. De naam van de toewijzingsverwijzing en het gegevenstype worden doorgegeven in de vorm van FileOption.
De toepassing uitvoeren
Kloon de voorbeeldcode vanuit GitHub:
git clone https://github.com/Azure-Samples/Azure-Data-Explorer-Go-SDK-example-to-ingest-data.git cd Azure-Data-Explorer-Go-SDK-example-to-ingest-data
Voer de voorbeeldcode uit zoals in dit codefragment wordt weergegeven vanuit
main.go
:func main { ... dropTable(kc, kustoDB) createTable(kc, kustoDB) createMapping(kc, kustoDB) ingestFile(kc, blobStoreAccountName, blobStoreContainer, blobStoreToken, blobStoreFileName, kustoMappingRefName, kustoDB, kustoTable) ... }
Tip
Als u verschillende combinaties van bewerkingen wilt proberen, kunt u opmerkingen bij de respectieve functies verwijderen in
main.go
.Wanneer u de voorbeeldcode uitvoert, worden de volgende acties uitgevoerd:
-
Tabel neerzetten:
StormEvents
tabel wordt verwijderd (als deze bestaat). -
Tabel maken:
StormEvents
tabel wordt gemaakt. -
Toewijzing maken:
StormEvents_CSV_Mapping
toewijzing wordt gemaakt. - Bestandsopname: een CSV-bestand (in Azure Blob Storage) wordt in de wachtrij geplaatst voor opname.
-
Tabel neerzetten:
Als u een service-principal voor verificatie wilt maken, gebruikt u Azure CLI met de opdracht az ad sp create-for-rbac . Stel de service-principalgegevens in met het clustereindpunt en de databasenaam in de vorm van omgevingsvariabelen die door het programma worden gebruikt:
export AZURE_SP_CLIENT_ID="<replace with appID>" export AZURE_SP_CLIENT_SECRET="<replace with password>" export AZURE_SP_TENANT_ID="<replace with tenant>" export KUSTO_ENDPOINT="https://<cluster name>.<azure region>.kusto.windows.net" export KUSTO_DB="name of the database"
Voer het programma uit:
go run main.go
U krijgt een vergelijkbare uitvoer:
Connected to Azure Data Explorer Using database - testkustodb Failed to drop StormEvents table. Maybe it does not exist? Table StormEvents created in DB testkustodb Mapping StormEvents_CSV_Mapping created Ingested file from - https://kustosamples.blob.core.windows.net/samplefiles/StormEvents.csv
Valideren en problemen oplossen
Wacht 5 tot 10 minuten totdat de opname in de wachtrij het opnameproces heeft gepland en de gegevens in Azure Data Explorer.
Meld u aan bij https://dataexplorer.azure.com en maak verbinding met uw cluster. Voer vervolgens de volgende opdracht uit om het aantal records in de
StormEvents
tabel op te halen.StormEvents | count
Voer de volgende opdracht uit in uw database om te zien of er in de afgelopen vier uur fouten zijn opgetreden tijdens het opnemen van gegevens. Vervang de naam van de database voordat u de opdracht uitvoert.
.show ingestion failures | where FailedOn > ago(4h) and Database == "<DatabaseName>"
Voer de volgende opdracht uit om de status op te vragen van alle bewerkingen voor het opnemen van gegevens van de afgelopen vier uur. Vervang de naam van de database voordat u de opdracht uitvoert.
.show operations | where StartedOn > ago(4h) and Database == "<DatabaseName>" and Operation == "DataIngestPull" | summarize arg_max(LastUpdatedOn, *) by OperationId
Resources opschonen
Als u van plan bent onze andere artikelen te volgen, behoudt u de resources die u hebt gemaakt. Als dat niet het probleem is, voert u de volgende opdracht uit in de database om de StormEvents
tabel te verwijderen.
.drop table StormEvents