Mata in data med Azure Data Explorer Go SDK
Azure Data Explorer är en snabb och mycket skalbar datautforskningstjänst för logg- och telemetridata. Det tillhandahåller ett Go SDK-klientbibliotek för att interagera med Azure Data Explorer-tjänsten. Du kan använda Go SDK för att mata in, kontrollera och fråga efter data i Azure Data Explorer kluster.
I den här artikeln skapar du först en tabell och datamappning i ett testkluster. Sedan köar du en inmatning till klustret med hjälp av Go SDK och validerar resultatet.
Förutsättningar
- Ett Microsoft-konto eller en Microsoft Entra användaridentitet. En Azure-prenumeration krävs inte.
- Ett Azure Data Explorer-kluster och en databas. Skapa ett kluster och en databas.
- Installera Git.
- Installera Go med följande Go SDK-minimikrav.
- Skapa en appregistrering och ge den behörighet till databasen. Spara klient-ID och klienthemlighet för senare användning.
Installera Go SDK
Azure Data Explorer Go SDK installeras automatiskt när du kör [exempelprogrammet som använder Go-moduler. Om du har installerat Go SDK för ett annat program skapar du en Go-modul och hämtar Azure Data Explorer-paketet (med ), go get
till exempel:
go mod init foo.com/bar
go get github.com/Azure/azure-kusto-go/kusto
Paketberoendet läggs till i go.mod
filen. Använd den i go-programmet.
Granska koden
Det här avsnittet Granska koden är valfritt. Om du är intresserad av att lära dig hur koden fungerar kan du granska följande kodfragment. Annars kan du gå vidare till Kör programmet.
Autentisera
Programmet måste autentisera till Azure Data Explorer-tjänsten innan du utför några åtgärder.
auth := kusto.Authorization{Config: auth.NewClientCredentialsConfig(clientID, clientSecret, tenantID)}
client, err := kusto.New(kustoEndpoint, auth)
En instans av kusto. Auktorisering skapas med autentiseringsuppgifterna för tjänstens huvudnamn. Den används sedan för att skapa en kusto. Klient med funktionen Ny som också accepterar klusterslutpunkten.
Skapa tabell
Kommandot create table representeras av en Kusto-instruktion. Funktionen Mgmt används för att köra hanteringskommandon. Den används för att köra kommandot för att skapa en tabell.
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)
}
Tips
En Kusto-instruktion är som standard konstant för bättre säkerhet.
NewStmt
accepterar strängkonstanter. API:et UnsafeStmt
tillåter användning av icke-konstanta instruktionssegment, men rekommenderas inte.
Kommandot Kusto create table är följande:
.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)
Skapa mappning
Datamappningar används under inmatning för att mappa inkommande data till kolumner i Azure Data Explorer tabeller. Mer information finns i datamappning. Mappning skapas på samma sätt som en tabell med hjälp av Mgmt
funktionen med databasnamnet och lämpligt kommando. Det fullständiga kommandot är tillgängligt på GitHub-lagringsplatsen för exemplet.
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)
}
Mata in data
En inmatning placeras i kö med hjälp av en fil från en befintlig 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)
}
Inmatningsklienten skapas med inmatning. Ny. Funktionen FromFile används för att referera till Azure Blob Storage URI. Mappningsreferensnamnet och datatypen skickas i form av FileOption.
Kör programmet
Klona exempelkoden från 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
Kör exempelkoden enligt det här kodfragmentet från
main.go
:func main { ... dropTable(kc, kustoDB) createTable(kc, kustoDB) createMapping(kc, kustoDB) ingestFile(kc, blobStoreAccountName, blobStoreContainer, blobStoreToken, blobStoreFileName, kustoMappingRefName, kustoDB, kustoTable) ... }
Tips
Om du vill prova olika kombinationer av åtgärder kan du avkommentera/kommentera respektive funktioner i
main.go
.När du kör exempelkoden utförs följande åtgärder:
-
Släpp tabell:
StormEvents
tabellen tas bort (om den finns). -
Skapa tabell:
StormEvents
tabellen skapas. -
Skapa mappning:
StormEvents_CSV_Mapping
mappning skapas. - Filinmatning: En CSV-fil (i Azure Blob Storage) placeras i kö för inmatning.
-
Släpp tabell:
Om du vill skapa ett tjänsthuvudnamn för autentisering använder du Azure CLI med kommandot az ad sp create-for-rbac . Ange information om tjänstens huvudnamn med klusterslutpunkten och databasnamnet i form av miljövariabler som ska användas av programmet:
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"
Kör programmet:
go run main.go
Du får liknande utdata:
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
Verifiera och felsöka
Vänta i 5 till 10 minuter tills den köade inmatningen schemalägger inmatningsprocessen och läser in data i Azure Data Explorer.
Logga in på https://dataexplorer.azure.com och anslut till klustret. Kör sedan följande kommando för att hämta antalet poster i
StormEvents
tabellen.StormEvents | count
Kör följande kommando i din databas för att se om det fanns inmatningsfel under de senaste fyra timmarna. Ersätt namnet på databasen innan du kör.
.show ingestion failures | where FailedOn > ago(4h) and Database == "<DatabaseName>"
Kör följande kommando för att visa status för alla åtgärder för inmatning under de sista fyra timmarna. Ersätt namnet på databasen innan du kör.
.show operations | where StartedOn > ago(4h) and Database == "<DatabaseName>" and Operation == "DataIngestPull" | summarize arg_max(LastUpdatedOn, *) by OperationId
Rensa resurser
Om du planerar att följa våra andra artiklar behåller du de resurser som du har skapat. Annars kör du följande kommando i databasen för att släppa StormEvents
tabellen.
.drop table StormEvents