Share via


Adatok betöltése az Azure Data Explorer Go SDK használatával

Az Azure Adatkezelő egy gyors és hatékonyan skálázható adatáttekintési szolgáltatás napló- és telemetriaadatokhoz. Go SDK-ügyfélkódtárat biztosít az Azure Data Explorer szolgáltatással való interakcióhoz. A Go SDK-val betöltheti, vezérelheti és lekérdezheti az azure-Data Explorer-fürtök adatait.

Ebben a cikkben először egy táblát és egy adatleképezést hoz létre egy tesztfürtben. Ezután a Go SDK-val várólistára állíthatja a betöltéseket a fürt számára, és ellenőrizheti az eredményeket.

Előfeltételek

A Go SDK telepítése

Az Azure Data Explorer Go SDK automatikusan települ a [Go-modulokat használó mintaalkalmazás" futtatásakor. Ha egy másik alkalmazáshoz telepítette a Go SDK-t, hozzon létre egy Go modult, és kérje le az Azure Data Explorer csomagot (a használatávalgo get), például:

go mod init foo.com/bar
go get github.com/Azure/azure-kusto-go/kusto

A csomagfüggőség hozzá lesz adva a go.mod fájlhoz. Használja a Go alkalmazásban.

A kód áttekintése

Ez a Kód áttekintése szakasz nem kötelező. Ha szeretné megtudni, hogyan működik a kód, tekintse át az alábbi kódrészleteket. Ellenkező esetben továbbléphet az Alkalmazás futtatása elemre.

Hitelesítés

A művelet végrehajtása előtt a programnak hitelesítenie kell magát az Azure Data Explorer szolgáltatásban.

auth := kusto.Authorization{Config: auth.NewClientCredentialsConfig(clientID, clientSecret, tenantID)}
client, err := kusto.New(kustoEndpoint, auth)

A kusto egy példánya. Az engedélyezés a szolgáltatásnév hitelesítő adataival jön létre. Ezután létrehoz egy kusto-t. A fürtvégpontot is elfogadó Új függvénnyel rendelkező ügyfél.

Tábla létrehozása

A tábla létrehozása parancsot egy Kusto-utasítás jelöli. Az Mgmt függvény felügyeleti parancsok végrehajtására szolgál. A parancs végrehajtására szolgál egy tábla létrehozásához.

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)
}

Tipp

A Kusto-utasítás alapértelmezés szerint állandó a jobb biztonság érdekében. NewStmt sztringkonstansokat fogad el. Az UnsafeStmt API lehetővé teszi a nem állandó utasításszegmensek használatát, de nem ajánlott.

A Kusto create table parancs a következő:

.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)

Leképezés létrehozása

Az adatleképezések a betöltés során a bejövő adatok Azure-Data Explorer-táblákban lévő oszlopokra való leképezésére szolgálnak. További információ: adatleképezés. A leképezés ugyanúgy jön létre, mint egy tábla, az Mgmt adatbázis nevével és a megfelelő paranccsal. A teljes parancs a minta GitHub-adattárában érhető el.

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)
}

Adatok betöltése

A betöltés várólistára kerül egy meglévő Azure Blob Storage tárolóból származó fájl használatával.

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)
}

A betöltési ügyfél a betöltéssel jön létre. Új. A FromFile függvény a Azure Blob Storage URI-ra hivatkozik. A leképezési hivatkozás neve és az adattípus FileOption formában lesz átadva.

Az alkalmazás futtatása

  1. Klónozza a mintakódot a GitHubról:

    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. Futtassa a mintakódot a következő kódrészletben main.golátható módon:

    func main {
        ...
        dropTable(kc, kustoDB)
        createTable(kc, kustoDB)
        createMapping(kc, kustoDB)
        ingestFile(kc, blobStoreAccountName, blobStoreContainer, blobStoreToken, blobStoreFileName, kustoMappingRefName, kustoDB, kustoTable)
        ...
    }
    

    Tipp

    A különböző műveletkombinációk kipróbálásához megszüntetheti a megfelelő függvények megjegyzését a fájlban main.go.

    A mintakód futtatásakor a következő műveletek lesznek végrehajtva:

    1. Tábla elvetése: StormEvents a tábla el lesz vetve (ha létezik).
    2. Tábla létrehozása: StormEvents a tábla létrejön.
    3. Leképezés létrehozása: StormEvents_CSV_Mapping a leképezés létrejön.
    4. Fájlbetöltés: Egy CSV-fájl (Azure Blob Storage) várólistára kerül a betöltéshez.
  3. Ha szolgáltatásnevet szeretne létrehozni a hitelesítéshez, használja az Azure CLI-t az az ad sp create-for-rbac paranccsal. Állítsa be a szolgáltatásnév adatait a fürtvégponttal és az adatbázis nevével a program által használt környezeti változók formájában:

    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. Futtassa a programot:

    go run main.go
    

    Hasonló kimenetet fog kapni:

    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
    

Ellenőrzés és hibaelhárítás

Várjon 5–10 percet, amíg az üzenetsorba helyezett betöltési folyamat ütemezi a betöltési folyamatot, és betölti az adatokat az Azure Data Explorer.

  1. Jelentkezzen be a https://dataexplorer.azure.com oldalon, és csatlakozzon a fürthöz. Ezután futtassa a következő parancsot a táblában lévő StormEvents rekordok számának lekéréséhez.

    StormEvents | count
    
  2. Futtassa a következő parancsot az adatbázisban annak ellenőrzéséhez, hogy voltak-e betöltési hibák az elmúlt négy órában. A futtatás előtt cserélje le az adatbázis nevét.

    .show ingestion failures
    | where FailedOn > ago(4h) and Database == "<DatabaseName>"
    
  3. Futtassa a következő parancsot az elmúlt négy órában végzett összes betöltési művelet állapotának megtekintéséhez. A futtatás előtt cserélje le az adatbázis nevét.

    .show operations
    | where StartedOn > ago(4h) and Database == "<DatabaseName>" and Operation == "DataIngestPull"
    | summarize arg_max(LastUpdatedOn, *) by OperationId
    

Az erőforrások eltávolítása

Ha követni szeretné a többi cikkünket, tartsa meg a létrehozott erőforrásokat. Ha nem, futtassa a következő parancsot az adatbázisban a StormEvents tábla elvetéséhez.

.drop table StormEvents

Következő lépés