Tutorial: Consulta de Azure Cosmos DB mediante la Table APITutorial: Query Azure Cosmos DB by using the Table API

Table API de Azure Cosmos DB admite consultas de OData y LINQ en los datos de clave-valor (tabla).The Azure Cosmos DB Table API supports OData and LINQ queries against key/value (table) data.

En este artículo se tratan las tareas siguientes:This article covers the following tasks:

  • Consulta de datos con Table APIQuerying data with the Table API

En las consultas de este artículo se usa la tabla People de ejemplo siguiente:The queries in this article use the following sample People table:

PartitionKeyPartitionKey RowKeyRowKey EmailEmail PhoneNumberPhoneNumber
HarpHarp WalterWalter Walter@contoso.com 425-555-0101425-555-0101
SmithSmith BenBen Ben@contoso.com 425-555-0102425-555-0102
SmithSmith JeffJeff Jeff@contoso.com 425-555-0104425-555-0104

Vea Consultar tablas y entidades para detalles sobre cómo realizar consultas mediante Table API.See Querying Tables and Entities for details on how to query by using the Table API.

Para más información sobre las funcionalidades premium que ofrece Azure Cosmos DB, consulte el artículo Azure Cosmos DB: Table API y Azure Cosmos DB: desarrollo con Table API en .NET.For more information on the premium capabilities that Azure Cosmos DB offers, see Azure Cosmos DB Table API and Develop with the Table API in .NET.

Requisitos previosPrerequisites

Para que estas consultas funcionen, debe tener una cuenta de Azure Cosmos DB, así como datos de la entidad en el contenedor.For these queries to work, you must have an Azure Cosmos DB account and have entity data in the container. ¿No tiene nada de lo anterior?Don't have any of those? Efectúe el inicio rápido en cinco minutos o siga el tutorial de desarrolladores para crear una cuenta y rellenar la base de datos.Complete the five-minute quickstart or the developer tutorial to create an account and populate your database.

Consultas en PartitionKey y RowKeyQuery on PartitionKey and 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:Because the PartitionKey and RowKey properties form an entity's primary key, you can use the following special syntax to identify the entity:

ConsultarQuery

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

ResultadosResults

PartitionKeyPartitionKey RowKeyRowKey EmailEmail PhoneNumberPhoneNumber
HarpHarp WalterWalter Walter@contoso.com 425-555-0104425-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.Alternatively, you can specify these properties as part of the $filter option, as shown in the following section. Tenga en cuenta que los nombres de propiedad de clave y los valores constantes distinguen entre mayúsculas y minúsculas.Note that the key property names and constant values are case-sensitive. Las propiedades PartitionKey y RowKey son de tipo String.Both the PartitionKey and RowKey properties are of type String.

Consultas mediante un filtro de ODataQuery by using an OData filter

Al construir una cadena de filtro, tenga en cuenta estas reglas:When you're constructing a filter string, keep these rules in mind:

  • Utilice los operadores lógicos definidos por la especificación del protocolo OData para comparar una propiedad con un valor.Use the logical operators defined by the OData Protocol Specification to compare a property to a value. Tenga en cuenta que no puede comparar una propiedad con un valor dinámico.Note that you can't compare a property to a dynamic value. Un lado de la expresión debe ser una constante.One side of the expression must be a constant.
  • El nombre de la propiedad, el operador y el valor constante se deben separar por espacios con codificación URL.The property name, operator, and constant value must be separated by URL-encoded spaces. Para codificar un espacio con codificación URL se usa %20.A space is URL-encoded as %20.
  • Todas las partes de la cadena de filtro distinguen mayúsculas de minúsculas.All parts of the filter string are case-sensitive.
  • Para que el filtro devuelva resultados válidos, el valor constante debe ser del mismo tipo de datos que la propiedad.The constant value must be of the same data type as the property in order for the filter to return valid results. Para obtener más información sobre los tipos de propiedades que se admiten, consulte Introducción al modelo de datos del servicio Tabla.For more information about supported property types, see Understanding the Table Service Data Model.

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.Here's an example query that shows how to filter by the PartitionKey and Email properties by using an OData $filter.

ConsultarQuery

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 Querying Tables and Entities (Consulta de tablas y entidades).For more information on how to construct filter expressions for various data types, see Querying Tables and Entities.

ResultadosResults

PartitionKeyPartitionKey RowKeyRowKey EmailEmail PhoneNumberPhoneNumber
SmithSmith BenBen Ben@contoso.com 425-555-0102425-555-0102

Consultas con LINQQuery by using LINQ

También puede realizar consultas con LINQ, que se traduce a las correspondientes expresiones de consulta de OData.You can also query by using LINQ, which translates to the corresponding OData query expressions. Este es un ejemplo de cómo compilar consultas mediante el SDK de .NET:Here's an example of how to build queries by using the .NET SDK:

CloudTableClient tableClient = account.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference("People");

TableQuery<CustomerEntity> query = new TableQuery<CustomerEntity>()
    .Where(
        TableQuery.CombineFilters(
            TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Smith"),
            TableOperators.And,
            TableQuery.GenerateFilterCondition("Email", QueryComparisons.Equal,"Ben@contoso.com")
    ));

await table.ExecuteQuerySegmentedAsync<CustomerEntity>(query, null);

Pasos siguientesNext steps

En este tutorial, ha hecho lo siguiente:In this tutorial, you've done the following:

  • Ha aprendido a realizar consultas mediante Table APILearned how to query by using the Table API

Ahora puede continuar con el tutorial siguiente para obtener información sobre cómo distribuir sus datos globalmente.You can now proceed to the next tutorial to learn how to distribute your data globally.