Inicio rápido: Uso de Azure Cosmos DB for Table con Azure SDK para Go
En este inicio rápido, implementará una aplicación básica de Azure Cosmos DB for Table mediante Azure SDK para Go. Azure Cosmos DB for Table es un almacén de datos sin esquema que permite a las aplicaciones almacenar datos de tabla estructurados en la nube. Aprenderá a crear tablas y filas, y a realizar tareas básicas en el recurso de Azure Cosmos DB mediante el SDK de Azure para Go
Código fuente de la biblioteca | Paquete (Go) | Azure Developer CLI
Requisitos previos
- CLI de desarrollo de Azure
- Docker Desktop
Go
1.21 o más reciente
Antes de comenzar, si no tiene una cuenta de Azure, cree una gratuita.
Inicialización del proyecto
Use Azure Developer CLI (azd
) para crear una cuenta de Azure Cosmos DB for Table e implementar una aplicación de ejemplo contenedorizada. La aplicación de ejemplo usa la biblioteca cliente para administrar, crear, leer y consultar datos de ejemplo.
Abra un terminal en un directorio vacío.
Si aún no está autenticado, autentíquese en Azure Developer CLI mediante
azd auth login
. Siga los pasos especificados por la herramienta para autenticarse en la CLI mediante sus credenciales de Azure preferidas.azd auth login
Ejecute
azd init
para inicializar el proyecto.azd init --template cosmos-db-table-go-quickstart
Durante la inicialización, configure un nombre de entorno único.
Implemente la cuenta de Azure Cosmos DB mediante
azd up
. Las plantillas de Bicep también implementan una aplicación web de muestra.azd up
Durante el proceso de aprovisionamiento, seleccione la suscripción, la ubicación deseada y el grupo de recursos de destino. Espere a que se complete el proceso de aprovisionamiento. El proceso puede tardar aproximadamente cinco minutos.
Una vez realizado el aprovisionamiento de los recursos de Azure, se incluye una dirección URL a la aplicación web en ejecución en la salida.
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.
Use la dirección URL de la consola para ir a la aplicación web en el explorador. Observe la salida de la aplicación en ejecución.
Instalación de la biblioteca cliente
La biblioteca cliente está disponible a través de Go, como paquete aztables
.
Abra un terminal y vaya a la carpeta
/src
.cd ./src
Si aún no está instalado, instale el paquete
aztables
mediantego install
.go install github.com/Azure/azure-sdk-for-go/sdk/data/aztables
Abra y revise el archivo src/go.mod para validar que existe la entrada
github.com/Azure/azure-sdk-for-go/sdk/data/aztables
.
Modelo de objetos
Nombre | Descripción |
---|---|
ServiceClient |
Este tipo es el tipo de cliente principal y se usa para administrar bases de datos o metadatos para toda la cuenta. |
Client |
Este tipo representa el cliente de una tabla dentro de la cuenta. |
Ejemplos de código
- Autenticar el cliente
- Obtención de una tabla
- Crear una entidad
- Obtención de una entidad
- Consulta de entidades
En el código de ejemplo de la plantilla se usa una tabla denominada cosmicworks-products
. La tabla cosmicworks-products
contiene detalles como el nombre, la categoría, la cantidad, el precio, un identificador único y una marca de venta para cada producto. El contenedor usa un identificador único* como clave de fila y una categoría como clave de partición.
Autenticar el cliente
En este ejemplo se crea una nueva instancia del tipo 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)
}
Obtención de una tabla
En este ejemplo se crea una instancia del tipo Client
mediante la función NewClient
del tipo ServiceClient
.
table, err := client.NewClient("<azure-cosmos-db-table-name>")
if err != nil {
log.Fatal(err)
}
Crear una entidad
La manera más fácil de crear una entidad en una tabla es crear una instancia de tipo aztables.EDMEntity
. Establezca las propiedades RowKey
y PartitionKey
mediante el tipo aztables.Entity
y, a continuación, establezca las propiedades adicionales mediante una asignación de cadenas.
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,
},
}
Convierta la entidad en una matriz de bytes mediante json.Marshal
y, a continuación, cree la entidad en la tabla mediante UpsertEntity
.
bytes, err := json.Marshal(entity)
if err != nil {
panic(err)
}
_, err = table.UpsertEntity(context.TODO(), bytes, nil)
if err != nil {
panic(err)
}
Obtención de una entidad
Puede recuperar una entidad específica de una tabla mediante GetEntity
. A continuación, puede usar json.Unmarshal
para analizarlo mediante el tipo 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)
}
Consulta de entidades
Después de insertar una entidad, también puede ejecutar una consulta para obtener todas las entidades que coinciden con un filtro específico mediante NewListEntitiesPager
junto con un filtro de cadena.
filter := "PartitionKey eq 'gear-surf-surfboards'"
options := &aztables.ListEntitiesOptions{
Filter: &filter,
}
pager := table.NewListEntitiesPager(options)
Analice los resultados paginados de la consulta mediante la función More
del buscapersonas para determinar si hay más páginas y, a continuación, la función NextPage
para obtener la siguiente página de resultados.
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))
}
}
Limpieza de recursos
Cuando ya no necesite la aplicación o los recursos de ejemplo, quite la implementación correspondiente y todos los recursos.
azd down