Megosztás a következőn keresztül:


Rövid útmutató: Az Azure Cosmos DB for Table használata a Go-hoz készült Azure SDK-val

Ebben a rövid útmutatóban üzembe helyez egy alapszintű Azure Cosmos DB for Table-alkalmazást az Azure SDK for Go használatával. Az Azure Cosmos DB for Table egy séma nélküli adattár, amely lehetővé teszi, hogy az alkalmazások strukturált táblaadatokat tároljanak a felhőben. Megtudhatja, hogyan hozhat létre táblákat, sorokat, és hogyan hajthat végre alapvető feladatokat az Azure Cosmos DB-erőforrásban az Azure SDK for Go használatával.

Kódtár forráskódcsomagja (Go) | Azure Developer CLI |

Előfeltételek

  • Azure Developer CLI
  • Docker Desktop
  • Go 1.21 vagy újabb

Ha még nem rendelkezik Azure-fiókkal, első lépésként hozzon létre egy ingyenes fiókot.

A projekt inicializálása

Az Azure Developer CLI (azd) használatával hozzon létre egy Azure Cosmos DB for Table-fiókot, és helyezzen üzembe egy tárolóalapú mintaalkalmazást. A mintaalkalmazás az ügyfélkódtárat használja a mintaadatok kezelésére, létrehozására, olvasására és lekérdezésére.

  1. Nyisson meg egy terminált egy üres könyvtárban.

  2. Ha még nincs hitelesítve, jelentkezzen be az Azure Developer CLI-be a használatával azd auth login. Kövesse az eszköz által megadott lépéseket a parancssori felületre való hitelesítéshez az ön által előnyben részesített Azure-hitelesítő adatokkal.

    azd auth login
    
  3. A projekt inicializálására használható azd init .

    azd init --template cosmos-db-table-go-quickstart
    
  4. Az inicializálás során konfiguráljon egy egyedi környezetnevet.

  5. Az Azure Cosmos DB-fiók üzembe helyezése a következő használatával azd up: . A Bicep-sablonok egy minta webalkalmazást is üzembe helyeznek.

    azd up
    
  6. A kiépítési folyamat során válassza ki az előfizetést, a kívánt helyet és a célerőforrás-csoportot. Várja meg, amíg a kiépítési folyamat befejeződik. A folyamat körülbelül öt percet vehet igénybe.

  7. Az Azure-erőforrások kiépítése után a kimenet tartalmazza a futó webalkalmazás URL-címét.

    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
    - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io>
    
    SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
    
  8. A konzol URL-címével keresse meg a webalkalmazást a böngészőben. Figyelje meg a futó alkalmazás kimenetét.

Képernyőkép a futó webalkalmazásról.

Telepítse az ügyfélkódtárat

Az ügyfélkódtár csomagként aztables a Go-on keresztül érhető el.

  1. Nyisson meg egy terminált, és keresse meg a /src mappát.

    cd ./src
    
  2. Ha még nincs telepítve, telepítse a csomagot a aztables következővel go install: .

    go install github.com/Azure/azure-sdk-for-go/sdk/data/aztables
    
  3. Nyissa meg és tekintse át az src/go.mod fájlt annak ellenőrzéséhez, hogy a github.com/Azure/azure-sdk-for-go/sdk/data/aztables bejegyzés létezik-e.

Objektummodell

Név Leírás
ServiceClient Ez a típus az elsődleges ügyféltípus, és a fiókszintű metaadatok vagy adatbázisok kezelésére szolgál.
Client Ez a típus a fiókon belüli tábla ügyfélét jelöli.

Kódpéldák

A sablonban lévő mintakód egy nevű táblát cosmicworks-productshasznál. A cosmicworks-products táblázat olyan részleteket tartalmaz, mint a név, a kategória, a mennyiség, az ár, az egyedi azonosító és az egyes termékek értékesítési jelzője. A tároló egy egyedi azonosítót használ sorkulcsként és kategóriaként partíciókulcsként.

Az ügyfél hitelesítése

Ez a minta létrehoz egy új típusú példányt ServiceClient .

credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
    return err
}

client, err := aztables.NewServiceClient("<azure-cosmos-db-table-account-endpoint>", credential)
if err != nil {
    log.Fatal(err)
}

Táblázat lekérése

Ez a minta a Client típus egy példányát hozza létre a NewClient típus függvényével ServiceClient .

table, err := client.NewClient("<azure-cosmos-db-table-name>")
if err != nil {
    log.Fatal(err)
}

Entitás létrehozása

Az új entitások táblabeli létrehozásának legegyszerűbb módja egy típuspéldány aztables.EDMEntitylétrehozása. Állítsa be a RowKey típust és PartitionKey a tulajdonságokat, aztables.Entity majd állítsa be a további tulajdonságokat egy sztringtérkép használatával.

entity := aztables.EDMEntity{
    Entity: aztables.Entity{
        RowKey:       "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        PartitionKey: "gear-surf-surfboards",
    },
    Properties: map[string]any{
        "Name":      "Yamba Surfboard",
        "Quantity":  12,
        "Price":     850.00,
        "Clearance": false,
    },
}

Konvergálja az entitást egy bájttömbbe json.Marshal , majd hozza létre az entitást a táblában a használatával UpsertEntity.

bytes, err := json.Marshal(entity)
if err != nil {
    panic(err)
}

_, err = table.UpsertEntity(context.TODO(), bytes, nil)
if err != nil {
    panic(err)
}

Entitás lekérése

Egy adott entitást lekérhet egy táblából a következő használatával GetEntity: . Ezután json.Unmarshal a típussal elemezheti.aztables.EDMEntity

rowKey := "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
partitionKey := "gear-surf-surfboards"

response, err := table.GetEntity(context.TODO(), partitionKey, rowKey, nil)
if err != nil {
    panic(err)
}

var entity aztables.EDMEntity
err = json.Unmarshal(response.Value, &entity)
if err != nil {
    panic(err)
}

Entitások lekérdezése

Miután beszúrt egy entitást, egy lekérdezést is futtathat az adott szűrőnek megfelelő összes entitás lekéréséhez egy sztringszűrővel NewListEntitiesPager együtt.

category := "gear-surf-surfboards"
// Ensure the value is OData-compliant by escaping single quotes
safeCategory := strings.ReplaceAll(category, "'", "''")
filter := fmt.Sprintf("PartitionKey eq '%s'", safeCategory)

options := &aztables.ListEntitiesOptions{
    Filter: &filter,
}

pager := table.NewListEntitiesPager(options)

Elemezheti a lekérdezés More lapszámozott eredményeit a lapozó függvényével annak megállapításához, hogy van-e több oldal, majd a NextPage függvény az eredmények következő oldalának lekéréséhez.

for pager.More() {
    response, err := pager.NextPage(context.TODO())
    if err != nil {
        panic(err)
    }
    for _, entityBytes := range response.Entities {
        var entity aztables.EDMEntity
        err := json.Unmarshal(entityBytes, &entity)
        if err != nil {
            panic(err)
        }
        
        writeOutput(fmt.Sprintf("Found entity:\t%s\t%s", entity.Properties["Name"], entity.RowKey))
    }
}

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

Ha már nincs szüksége a mintaalkalmazásra vagy erőforrásokra, távolítsa el a megfelelő üzembe helyezést és az összes erőforrást.

azd down