Dela via


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

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 gettill 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

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

    1. Släpp tabell: StormEvents tabellen tas bort (om den finns).
    2. Skapa tabell: StormEvents tabellen skapas.
    3. Skapa mappning: StormEvents_CSV_Mapping mappning skapas.
    4. Filinmatning: En CSV-fil (i Azure Blob Storage) placeras i kö för inmatning.
  3. 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"
    
  4. 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.

  1. 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
    
  2. 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>"
    
  3. 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

Nästa steg