Tutorial: Consulta de Azure Cosmos DB mediante la API para Table

SE APLICA A: Table

Azure Cosmos DB for Table admite consultas de OData y LINQ en los datos de clave-valor (tabla).

En este artículo se tratan las tareas siguientes:

  • Consulta de datos con la API para Table

En las consultas de este artículo se usa la tabla People de ejemplo siguiente:

PartitionKey RowKey Email PhoneNumber
Harp Walter Walter@contoso.com 425-555-0101
Smith Ben Ben@contoso.com 425-555-0102
Smith Jeff Jeff@contoso.com 425-555-0104

Lea Consultar tablas y entidades para obtener detalles sobre cómo realizar consultas mediante la API para Table.

Requisitos previos

Para que estas consultas funcionen, debe tener una cuenta de Azure Cosmos DB, así como datos de la entidad en el contenedor. Si no tiene una cuenta o datos, consulte Inicio rápido: Azure Cosmos DB for Table para .NET para crear una cuenta y rellenar la base de datos.

Consultas en PartitionKey y RowKey

Dado que las propiedades PartitionKey y RowKey forman la clave principal de una entidad, puede usar la siguiente sintaxis especial para identificar dicha entidad:

Consultar

https://<mytableendpoint>/People(PartitionKey='Harp',RowKey='Walter')

Resultados

PartitionKey RowKey Email PhoneNumber
Harp Walter Walter@contoso.com 425-555-0104

Como alternativa, puede especificar estas propiedades como parte de la opción $filter, tal y como se muestra en la sección siguiente. Los nombres de propiedad de clave y los valores constantes distinguen entre mayúsculas y minúsculas. Las propiedades PartitionKey y RowKey son de tipo String.

Consultas mediante un filtro de OData

Al construir una cadena de filtro, tenga en cuenta estas reglas:

  • Utilice los operadores lógicos definidos por la especificación del protocolo OData para comparar una propiedad con un valor. No puede comparar una propiedad con un valor dinámico. Un lado de la expresión debe ser una constante.
  • El nombre de la propiedad, el operador y el valor constante se deben separar por espacios con codificación URL. Para codificar un espacio con codificación URL se usa %20.
  • Todas las partes de la cadena de filtro distinguen mayúsculas de minúsculas.
  • Para que el filtro devuelva resultados válidos, el valor constante debe ser del mismo tipo de datos que la propiedad. Para más información sobre los tipos de propiedades que se admiten, consulte Introducción al modelo de datos del servicio Table.

Esta es una consulta de ejemplo en la que se muestra cómo filtrar por propiedades PartitionKey e Email con un elemento $filter de OData.

Consultar

https://<mytableapi-endpoint>/People()?$filter=PartitionKey%20eq%20'Smith'%20and%20Email%20eq%20'Ben@contoso.com'

Para obtener más información sobre cómo construir expresiones de filtro para diferentes tipos de datos, consulte Consulta de tablas y entidades.

Resultados

PartitionKey RowKey Email PhoneNumber
Smith Ben Ben@contoso.com 425-555-0102

Las consultas de las propiedades datetime no devolverán datos si se ejecutan en la API para Table de Azure Cosmos DB. Aunque Azure Table Storage almacena valores de datos con una granularidad de tiempo de tics, la API para Table en Azure Cosmos DB usa la propiedad _ts. La propiedad _ts está en un segundo nivel de granularidad, el cual no es un filtro de OData. Azure Cosmos DB bloquea las consultas en las propiedades de marca de tiempo. Como solución alternativa, puede definir una propiedad personalizada con un tipo de datos datetime o long y establecer el valor de fecha desde el cliente.

Consultas con LINQ

También puede realizar consultas con LINQ, que se traduce a las correspondientes expresiones de consulta de OData. Este es un ejemplo de cómo compilar consultas mediante el SDK de .NET:

IQueryable<CustomerEntity> linqQuery = table.CreateQuery<CustomerEntity>()
            .Where(x => x.PartitionKey == "4")
            .Select(x => new CustomerEntity() { PartitionKey = x.PartitionKey, RowKey = x.RowKey, Email = x.Email });

Pasos siguientes

Ahora puede continuar con el tutorial siguiente para obtener información sobre cómo distribuir sus datos globalmente.