Azure Veri Gezgini Go SDK'sını kullanarak veri alma

Azure Veri Gezgini, günlük ve telemetri verileri için hızlı ve üst düzeyde ölçeklenebilir veri keşfetme hizmetidir. Azure Veri Gezgini hizmetiyle etkileşime geçmek için bir Go SDK istemci kitaplığı sağlar. Azure Veri Gezgini kümelerindeki verileri almak, denetlemek ve sorgulamak için Go SDK'sını kullanabilirsiniz.

Bu makalede, önce bir test kümesinde bir tablo ve veri eşlemesi oluşturursunuz. Ardından Go SDK'sını kullanarak kümeye bir alımı kuyruğa alır ve sonuçları doğrularsınız.

Önkoşullar

Go SDK'sını yükleme

Go modüllerini kullanan [örnek uygulamayı çalıştırdığınızda Azure Veri Gezgini Go SDK'sı otomatik olarak yüklenir. Go SDK'sını başka bir uygulama için yüklediyseniz, bir Go modülü oluşturun ve Azure Veri Gezgini paketini getirin (kullanarakgo get), örneğin:

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

Paket bağımlılığı dosyaya go.mod eklenir. Go uygulamanızda kullanın.

Kodu gözden geçirin

Bu Kodu gözden geçirme bölümü isteğe bağlıdır. Kodun nasıl çalıştığını öğrenmek istiyorsanız aşağıdaki kod parçacıklarını gözden geçirebilirsiniz. Aksi takdirde, Uygulamayı çalıştırma bölümüne atlayabilirsiniz.

Kimlik doğrulaması

Programın herhangi bir işlemi yürütmeden önce Azure Veri Gezgini hizmetinde kimlik doğrulaması yapması gerekir.

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

Kusto örneği. Yetkilendirme, hizmet sorumlusu kimlik bilgileri kullanılarak oluşturulur. Ardından kusto oluşturmak için kullanılır . Küme uç noktasını da kabul eden Yeni işlevine sahip istemci.

Tablo oluşturma

Create table komutu kusto deyimiyle temsil edilir. Mgmt işlevi yönetim komutlarını yürütmek için kullanılır. Tablo oluşturmak için komutunu yürütmek için kullanılır.

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

İpucu

Kusto deyimi, daha iyi güvenlik için varsayılan olarak sabittir. NewStmt dize sabitlerini kabul eder. API, UnsafeStmt sabit olmayan deyim segmentlerinin kullanılmasına izin verir, ancak önerilmez.

Kusto create table komutu aşağıdaki gibidir:

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

Eşleme oluşturma

Veri eşlemeleri, gelen verileri Azure Veri Gezgini tablolarındaki sütunlarla eşlemek için veri alımı sırasında kullanılır. Daha fazla bilgi için bkz. veri eşleme. Eşleme, veritabanı adı ve uygun komutla işlevi kullanılarak Mgmt tabloyla aynı şekilde oluşturulur. Tam komut , örnek için GitHub deposunda kullanılabilir.

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

Veriyi çekme

Alma işlemi, mevcut bir Azure Blob Depolama kapsayıcısından bir dosya kullanılarak kuyruğa alındı.

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

Alma istemcisi alma kullanılarak oluşturulur. Yeni'ye tıklayın. FromFile işlevi, Azure Blob Depolama URI'sine başvurmak için kullanılır. Eşleme başvuru adı ve veri türü FileOption biçiminde geçirilir.

Uygulamayı çalıştırma

  1. GitHub'dan örnek kodu kopyalayın:

    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. Bu kod parçacığında görüldüğü gibi örnek kodu şu şekilde main.goçalıştırın:

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

    İpucu

    Farklı işlem bileşimlerini denemek için içindeki ilgili işlevlerin main.goaçıklamasını kaldırabilirsiniz/açıklama ekleyebilirsiniz.

    Örnek kodu çalıştırdığınızda aşağıdaki eylemler gerçekleştirilir:

    1. Bırakma tablosu: StormEvents tablo bırakılır (varsa).
    2. Tablo oluşturma: StormEvents tablo oluşturulur.
    3. Eşleme oluşturma: StormEvents_CSV_Mapping eşleme oluşturulur.
    4. Dosya alımı: Alma için bir CSV dosyası (Azure Blob Depolama) kuyruğa alındı.
  3. Kimlik doğrulaması için hizmet sorumlusu oluşturmak için az ad sp create-for-rbac komutuyla Azure CLI kullanın. Hizmet sorumlusu bilgilerini küme uç noktası ve veritabanı adı ile program tarafından kullanılacak ortam değişkenleri biçiminde ayarlayın:

    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. Programı çalıştırın:

    go run main.go
    

    Benzer bir çıkış elde edersiniz:

    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
    

Doğrulama ve sorun giderme

Kuyruğa alınan alımın alım işlemini zamanlaması ve verileri Azure Veri Gezgini'a yüklemesi için 5-10 dakika bekleyin.

  1. https://dataexplorer.azure.com adresinde oturum açın ve kümenize bağlanın. Ardından aşağıdaki komutu çalıştırarak tablodaki StormEvents kayıtların sayısını alın.

    StormEvents | count
    
  2. Son dört saatte hiç veri alımı hatası olup olmadığını görmek için veritabanınızda aşağıdaki komutu çalıştırın. Çalıştırmadan önce veritabanı adını değiştirin.

    .show ingestion failures
    | where FailedOn > ago(4h) and Database == "<DatabaseName>"
    
  3. Son dört saatteki tüm veri alım işlemlerinin durumunu görüntülemek için aşağıdaki komutu çalıştırın. Çalıştırmadan önce veritabanı adını değiştirin.

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

Kaynakları temizleme

Diğer makalelerimizi izlemeyi planlıyorsanız, oluşturduğunuz kaynakları koruyun. Aksi takdirde, tabloyu bırakmak StormEvents için veritabanınızda aşağıdaki komutu çalıştırın.

.drop table StormEvents

Sonraki adım