Aracılığıyla paylaş


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

Azure Veri Gezgini, günlük ve telemetri verileri için hızlı ve yüksek oranda ölçeklenebilir veri keşfetme hizmetidir. Azure Veri Gezgini hizmetiyle etkileşime geçmek için bir Go SDK istemci kitaplığı sağlar. Go SDK'sını kullanarak Azure Veri Gezgini kümelerindeki verileri alabilir, denetleyebilir ve sorgulayabilirsiniz.

Bu makalede, önce bir test kümesinde bir tablo ve veri eşlemesi oluşturursunuz. Ardından Go SDK'sını kullanarak bir alımı kümeye 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 Kod bölümünü gözden geçirme 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.

Kimliği doğrula

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 New işlevine sahip istemci.

Tablo oluştur

Create table komutu bir 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 kesimlerinin 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ütunlara 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)
}

Verileri alma

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

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, yeni. 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 çalıştırın main.go:

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

    İpucu

    farklı işlem birleşimlerini denemek için içindeki ilgili işlevlerin main.goaçıklamasını açabilir/yorumlayabilirsiniz.

    Ö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ı: Bir CSV dosyası (Azure Blob Depolama) alma için kuyruğa alınır.
  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, aşağıdaki komutu veritabanınızda çalıştırarak StormEvents tabloyu bırakın.

.drop table StormEvents

Sonraki adım