Delen via


Quickstart: Azure Cosmos DB for Table gebruiken met Azure SDK voor Go

In deze quickstart implementeert u een eenvoudige Azure Cosmos DB for Table-toepassing met behulp van de Azure SDK voor Go. Azure Cosmos DB for Table is een schemaloos gegevensarchief waarmee toepassingen gestructureerde tabelgegevens in de cloud kunnen opslaan. U leert hoe u tabellen, rijen maakt en basistaken uitvoert in uw Azure Cosmos DB-resource met behulp van de Azure SDK voor Go.

Broncodepakket voor bibliotheek (Go) | Azure Developer CLI |

Vereisten

  • Azure Developer CLI
  • Docker Desktop
  • Go 1.21 of hoger

Als u geen Azure-account hebt, maak dan een gratis account aan voordat u begint.

Het project initialiseren

Gebruik de Azure Developer CLI (azd) om een Azure Cosmos DB for Table-account te maken en een in een container geplaatste voorbeeldtoepassing te implementeren. De voorbeeldtoepassing maakt gebruik van de clientbibliotheek voor het beheren, maken, lezen en opvragen van voorbeeldgegevens.

  1. Open een terminal in een lege map.

  2. Als u nog niet bent geverifieerd, moet u zich verifiëren bij de Azure Developer CLI met behulp van azd auth login. Volg de stappen die door het hulpprogramma zijn opgegeven om te verifiëren bij de CLI met behulp van uw favoriete Azure-referenties.

    azd auth login
    
  3. Gebruik azd init dit om het project te initialiseren.

    azd init --template cosmos-db-table-go-quickstart
    
  4. Configureer tijdens de initialisatie een unieke omgevingsnaam.

  5. Implementeer het Azure Cosmos DB-account met behulp van azd up. De Bicep-sjablonen implementeren ook een voorbeeldwebtoepassing.

    azd up
    
  6. Selecteer tijdens het inrichtingsproces uw abonnement, gewenste locatie en doelresourcegroep. Wacht tot het inrichtingsproces is voltooid. Het proces kan ongeveer vijf minuten duren.

  7. Zodra het inrichten van uw Azure-resources is voltooid, wordt er een URL naar de actieve webtoepassing opgenomen in de uitvoer.

    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. Gebruik de URL in de console om naar uw webtoepassing in de browser te navigeren. Bekijk de uitvoer van de actieve app.

Schermopname van de actieve webtoepassing.

De clientbibliotheek installeren

De clientbibliotheek is beschikbaar via Go, als pakket aztables .

  1. Open een terminal en navigeer naar de /src map.

    cd ./src
    
  2. Als dit nog niet is geïnstalleerd, installeert u het aztables pakket met behulp van go install.

    go install github.com/Azure/azure-sdk-for-go/sdk/data/aztables
    
  3. Open en controleer het bestand src/go.mod om te controleren of de github.com/Azure/azure-sdk-for-go/sdk/data/aztables vermelding bestaat.

Objectmodel

Name Beschrijving
ServiceClient Dit type is het primaire clienttype en wordt gebruikt voor het beheren van metagegevens of databases voor het hele account.
Client Dit type vertegenwoordigt de client voor een tabel in het account.

Codevoorbeelden

De voorbeeldcode in de sjabloon maakt gebruik van een tabel met de naam cosmicworks-products. De cosmicworks-products tabel bevat details zoals naam, categorie, hoeveelheid, prijs, een unieke id en een verkoopvlag voor elk product. De container gebruikt een unieke id als rijsleutel en categorie als partitiesleutel.

De client verifiëren

In dit voorbeeld wordt een nieuw exemplaar van het ServiceClient type gemaakt.

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

Een tabel ophalen

In dit voorbeeld wordt een exemplaar van het Client type gemaakt met behulp van de NewClient functie van het ServiceClient type.

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

Een entiteit maken

De eenvoudigste manier om een nieuwe entiteit in een tabel te maken, is door een exemplaar van het type aztables.EDMEntityte maken. Stel de RowKey en PartitionKey eigenschappen in met behulp van het aztables.Entity type en stel vervolgens eventuele extra eigenschappen in met behulp van een tekenreekstoewijzing.

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

Conver de entiteit in een bytematrix met behulp van json.Marshal en maak vervolgens de entiteit in de tabel met behulp van UpsertEntity.

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

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

Een entiteit ophalen

U kunt een specifieke entiteit ophalen uit een tabel met behulp van GetEntity. U kunt deze vervolgens json.Unmarshal parseren met behulp van het aztables.EDMEntity type.

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

Query uitvoeren op entiteiten

Nadat u een entiteit hebt ingevoegd, kunt u ook een query uitvoeren om alle entiteiten op te halen die overeenkomen met een specifiek filter door NewListEntitiesPager samen met een tekenreeksfilter te gebruiken.

filter := "PartitionKey eq 'gear-surf-surfboards'"

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

pager := table.NewListEntitiesPager(options)

Parseert de gepagineerde resultaten van de query met behulp van de More functie van de pager om te bepalen of er meer pagina's zijn en vervolgens de NextPage functie om de volgende pagina met resultaten op te halen.

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

Resources opschonen

Wanneer u de voorbeeldtoepassing of resources niet meer nodig hebt, verwijdert u de bijbehorende implementatie en alle resources.

azd down