Condividi tramite


Inserire dati con Azure Esplora dati Go SDK

Esplora dati di Azure è un servizio di esplorazione dati rapido e a scalabilità elevata per dati di log e di telemetria. Fornisce una libreria client Go SDK per interagire con il servizio Azure Esplora dati. È possibile usare Go SDK per inserire, controllare ed eseguire query sui dati nei cluster di Azure Esplora dati.

In questo articolo viene prima creato un mapping di tabella e dati in un cluster di test. Si accoda quindi un inserimento al cluster usando Go SDK e si convalidano i risultati.

Prerequisiti

Installare Go SDK

Azure Esplora dati Go SDK verrà installato automaticamente quando si esegue l'[applicazione di esempio che usa i moduli Go. Se è stato installato Go SDK per un'altra applicazione, creare un modulo Go e recuperare il pacchetto di Azure Esplora dati (usando go get), ad esempio:

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

La dipendenza del pacchetto verrà aggiunta al go.mod file. Usarlo nell'applicazione Go.

Esaminare il codice

Questa sezione Esaminare il codice è facoltativa. Per informazioni sul funzionamento del codice, è possibile esaminare i frammenti di codice seguenti. In caso contrario, passare direttamente a Eseguire l'applicazione.

Authenticate

Il programma deve eseguire l'autenticazione al servizio azure Esplora dati prima di eseguire qualsiasi operazione.

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

Istanza di kusto. L'autorizzazione viene creata usando le credenziali dell'entità servizio. Viene quindi usato per creare un kusto. Client con la funzione New che accetta anche l'endpoint del cluster.

Crea tabella

Il comando create table è rappresentato da un'istruzione Kusto. La funzione Mgmt viene usata per eseguire i comandi di gestione. Viene usato per eseguire il comando per creare una tabella.

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

Suggerimento

Un'istruzione Kusto è costante, per impostazione predefinita, per una maggiore sicurezza. NewStmt accetta costanti stringa. L'API UnsafeStmt consente l'uso di segmenti di istruzioni non costanti, ma non è consigliabile.

Il comando Kusto create table è il seguente:

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

Creare il mapping

I mapping dei dati vengono usati durante l'inserimento per eseguire il mapping dei dati in ingresso alle colonne all'interno delle tabelle di Azure Esplora dati. Per altre informazioni, vedere Mapping dei dati. Il mapping viene creato, nello stesso modo di una tabella, usando la Mgmt funzione con il nome del database e il comando appropriato. Il comando completo è disponibile nel repository GitHub per l'esempio.

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

Inserire dati

Un'inserimento viene accodato usando un file da un contenitore di Archiviazione BLOB di Azure esistente.

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

Il client di inserimento viene creato usando l'inserimento. Nuovo. La funzione FromFile viene usata per fare riferimento all'URI Archiviazione BLOB di Azure. Il nome del riferimento di mapping e il tipo di dati vengono passati sotto forma di FileOption.

Eseguire l'applicazione

  1. Clonare il codice di esempio da 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. Eseguire il codice di esempio come illustrato in questo frammento da main.go:

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

    Suggerimento

    Per provare diverse combinazioni di operazioni, è possibile rimuovere/commentare le rispettive funzioni in main.go.

    Quando si esegue il codice di esempio, vengono eseguite le azioni seguenti:

    1. Elimina tabella: StormEvents la tabella viene eliminata (se esistente).
    2. Creazione tabella: StormEvents viene creata una tabella.
    3. Creazione del mapping: StormEvents_CSV_Mapping viene creato il mapping.
    4. Inserimento file: un file CSV (in Archiviazione BLOB di Azure) viene accodato per l'inserimento.
  3. Per creare un'entità servizio per l'autenticazione, usare l'interfaccia della riga di comando di Azure con il comando az ad sp create-for-rbac . Impostare le informazioni sull'entità servizio con l'endpoint del cluster e il nome del database sotto forma di variabili di ambiente che verranno usate dal programma:

    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. Eseguire il programma:

    go run main.go
    

    Si otterrà un output simile:

    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
    

Convalidare e risolvere i problemi

Attendere da 5 a 10 minuti per l'inserimento in coda per pianificare il processo di inserimento e caricare i dati in Azure Esplora dati.

  1. Accedere al https://dataexplorer.azure.com e connettersi al cluster. Eseguire quindi il comando seguente per ottenere il numero di record nella StormEvents tabella.

    StormEvents | count
    
  2. Eseguire il comando seguente nel database per verificare la presenza di eventuali errori di inserimento nelle ultime quattro ore. Sostituire il nome del database prima dell'esecuzione.

    .show ingestion failures
    | where FailedOn > ago(4h) and Database == "<DatabaseName>"
    
  3. Eseguire il comando seguente per visualizzare lo stato di tutte le operazioni di inserimento nelle ultime quattro ore. Sostituire il nome del database prima dell'esecuzione.

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

Pulire le risorse

Se si prevede di seguire gli altri articoli, mantenere le risorse create. In caso contrario, eseguire il comando seguente nel database per eliminare la StormEvents tabella.

.drop table StormEvents

Passaggio successivo