Uso de Azure Table Storage y Azure Cosmos DB for Table con Ruby

SE APLICA A: Table

Sugerencia

El contenido de este artículo se aplica a Azure Table Storage y Azure Cosmos DB for Table. Azure Cosmos DB for Table es una oferta prémium que ofrece tablas con rendimiento optimizado, distribución global e índices secundarios automáticos.

En este artículo se muestra cómo crear tablas, y almacenar los datos y realizar operaciones CRUD en ellos. Elija usar el servicio Azure Table Storage o Azure Cosmos DB for Table. Los ejemplos de este artículo están escritos en Ruby y usan la biblioteca de cliente de Azure Storage Table para Ruby. Entre los escenarios se incluyen la creación de una tabla, la eliminación de una tabla, la inserción de entidades y la consulta de entidades de la tabla.

Creación de una cuenta de servicio de Azure

Puede trabajar con tablas mediante Azure Table Storage o Azure Cosmos DB. Para obtener más información sobre las diferencias entre las ofertas de tablas de estos dos servicios, consulte la introducción a API para Table. Debe crear una cuenta para el servicio que se va a utilizar. En las secciones siguientes se muestra cómo crear las cuentas de Azure Table Storage y Azure Cosmos DB, pero solo puede usar una de ellas.

Creación de una cuenta de Azure Storage

La manera más sencilla de crear una cuenta de almacenamiento de Azure es mediante Azure Portal. Para obtener más información, consulte Crear una cuenta de almacenamiento.

También se puede crear una cuenta de Azure Storage mediante Azure PowerShell o la CLI de Azure.

Si prefiere no crear una cuenta de almacenamiento en este momento, también puede utilizar el emulador de Azure Storage para ejecutar y probar el código en un entorno local. Para más información, consulte Uso del emulador de Azure Storage para desarrollo y pruebas.

Creación de una cuenta de Azure Cosmos DB

Para obtener instrucciones sobre cómo crear una cuenta de Azure Cosmos DB for Table, consulte Creación de una cuenta de base de datos.

Incorporación de acceso a Azure Storage o Azure Cosmos DB

Para usar Azure Storage o Azure Cosmos DB, debe descargar y usar el paquete de Azure para Ruby que incluye un conjunto de bibliotecas útiles que se comunican con los servicios REST de Table.

Uso de RubyGems para obtener el paquete

  1. Use una interfaz de línea de comandos como PowerShell (Windows), Terminal (Mac) o Bash (Unix).
  2. Escriba gem install azure-storage-table en la ventana de comandos para instalar la gema y las dependencias.

Importación del paquete

Con el editor de texto que prefiera, agregue lo siguiente al principio del archivo de Ruby en el que pretenda utilizar el almacenamiento:

require "azure/storage/table"

Incorporación de la cadena de conexión

Puede conectarse a la cuenta de Azure Storage o Azure Cosmos DB for Table. Obtenga la cadena de conexión en función del tipo de cuenta que esté usando.

Incorporación de una conexión de Azure Storage

El módulo de Azure Storage lee las variables de entorno AZURE_STORAGE_ACCOUNT y AZURE_STORAGE_ACCESS_KEY para la información necesaria para conectarse a su cuenta de Azure Storage. Si no se establecen estas variables de entorno, debe especificar la información de la cuenta antes de usar Azure::Storage::Table::TableService con el código siguiente:

Azure.config.storage_account_name = "<your Azure Storage account>"
Azure.config.storage_access_key = "<your Azure Storage access key>"

Para obtener estos valores desde una cuenta de almacenamiento de Azure Resource Manager o clásica en el Portal de Azure:

  1. Inicie sesión en Azure Portal.
  2. Vaya a la cuenta de almacenamiento que desea usar.
  3. En la hoja Configuración que se encuentra a la derecha, haga clic en Claves de acceso.
  4. En la hoja Claves de acceso que aparece, verá la clave de acceso 1 y 2. Puede usar cualquiera de estas.
  5. Haga clic en el icono de copia para copiar la clave en el Portapapeles.

Adición de una conexión de Azure Cosmos DB

Para conectarse a Azure Cosmos DB, copie la cadena de conexión principal de Azure Portal y cree un objeto Client con la cadena de conexión que ha copiado. Puede pasar el objeto Client cuando crea un objeto TableService:

common_client = Azure::Storage::Common::Client.create(storage_account_name:'myaccount', storage_access_key:'mykey', storage_table_host:'mycosmosdb_endpoint')
table_client = Azure::Storage::Table::TableService.new(client: common_client)

Creación de una tabla

El objeto Azure::Storage::Table::TableService permite trabajar con tablas y entidades. Para crear una tabla, use el método create_table() . En el siguiente ejemplo se crea una tabla o se imprime el error, si hay alguno.

azure_table_service = Azure::Storage::Table::TableService.new
begin
    azure_table_service.create_table("testtable")
rescue
    puts $!
end

Adición de una entidad a una tabla

Para agregar una entidad, primero cree un objeto hash que defina las propiedades de la entidad. Tenga en cuenta que para cada entidad debe especificar valores en PartitionKey y RowKey. Estos son los identificadores exclusivos de sus entidades y son valores que se pueden consultar más rápidamente que las demás propiedades. Azure Storage usa PartitionKey para distribuir automáticamente las entidades de la tabla entre varios nodos de almacenamiento. Las entidades con la misma PartitionKey se almacenan en el mismo nodo. La RowKey es el identificador exclusivo de la entidad de la partición a la que pertenece.

entity = { "content" => "test entity",
    :PartitionKey => "test-partition-key", :RowKey => "1" }
azure_table_service.insert_entity("testtable", entity)

Actualización de una entidad

Hay varios métodos para actualizar una entidad existente:

  • update_entity(): actualiza una entidad existente al reemplazarla.
  • merge_entity(): actualiza una entidad que ya existe combinando los valores de las nuevas propiedades con la entidad existente.
  • insert_or_merge_entity(): actualiza una entidad existente al reemplazarla. Si no hay entidades, se insertará una nueva.
  • insert_or_replace_entity(): actualiza una entidad que ya existe combinando los valores de las nuevas propiedades con la entidad existente. Si no hay entidades, se insertará una nueva.

En el ejemplo siguiente se demuestra cómo actualizar una entidad usando update_entity() :

entity = { "content" => "test entity with updated content",
    :PartitionKey => "test-partition-key", :RowKey => "1" }
azure_table_service.update_entity("testtable", entity)

Con update_entity() y merge_entity() , si la entidad que va a actualizar no existe, la operación de actualización generará un error. Por lo tanto, si desea almacenar una entidad independientemente de la que ya existe, debe usar insert_or_replace_entity() o insert_or_merge_entity() .

Trabajo con grupos de entidades

A veces resulta útil enviar varias operaciones juntas en un lote a fin de garantizar el procesamiento atómico por parte del servidor. Para ello, primero debe crear un objeto Batch y, a continuación, usar el método execute_batch() en TableService. El siguiente ejemplo muestra el envío de dos entidades con RowKey 2 y 3 en un lote. Tenga en cuenta que solo funciona para entidades con el mismo valor de PartitionKey.

azure_table_service = Azure::TableService.new
batch = Azure::Storage::Table::Batch.new("testtable",
    "test-partition-key") do
    insert "2", { "content" => "new content 2" }
    insert "3", { "content" => "new content 3" }
end
results = azure_table_service.execute_batch(batch)

Consulta de una entidad

Para consultar una entidad de una tabla, use el método get_entity() , pasando el nombre de la tabla, PartitionKey y RowKey.

result = azure_table_service.get_entity("testtable", "test-partition-key",
    "1")

Consulta de un conjunto de entidades

Para realizar una consulta de un conjunto de entidades de una tabla, cree un objeto hash de consulta y use el método query_entities() . El siguiente ejemplo muestra la obtención de todas las entidades con el mismo valor de PartitionKey:

query = { :filter => "PartitionKey eq 'test-partition-key'" }
result, token = azure_table_service.query_entities("testtable", query)

Nota

Si el resultado establecido es demasiado largo para que lo devuelva una única consulta, se devuelve un token de continuación que puede usar para recuperar las páginas siguientes.

Consulta de un subconjunto de propiedades de las entidades

Una consulta de tabla puede recuperar solo algunas propiedades de una entidad. Esta técnica, denominada "proyección", reduce el ancho de banda y puede mejorar el rendimiento de las consultas, en especial en el caso de entidades de gran tamaño. Utilice la cláusula select y pase los nombres de las propiedades que quiera que lleguen al cliente.

query = { :filter => "PartitionKey eq 'test-partition-key'",
    :select => ["content"] }
result, token = azure_table_service.query_entities("testtable", query)

Eliminación de una entidad

Para eliminar una entidad, use el método delete_entity() . Pase el nombre de la tabla que contiene la entidad, la PartitionKey y la RowKey de la entidad.

azure_table_service.delete_entity("testtable", "test-partition-key", "1")

Eliminar una tabla

Para eliminar una tabla, use el método delete_table() y pase el nombre de la tabla que desea eliminar.

azure_table_service.delete_table("testtable")

Pasos siguientes