Självstudie: Fråga Azure Cosmos DB med hjälp av tabell-APITutorial: Query Azure Cosmos DB by using the Table API

GÄLLER för: tabell-API

Azure Cosmos DB Table-API stöder OData- och LINQ-frågor mot nyckel-/värdedata (tabell).The Azure Cosmos DB Table API supports OData and LINQ queries against key/value (table) data.

Den här artikeln beskriver följande uppgifter:This article covers the following tasks:

  • Fråga data med tabell-APIQuerying data with the Table API

Frågorna i den här artikeln använder följande People-exempeltabell:The queries in this article use the following sample People table:

PartitionKeyPartitionKey RowKeyRowKey E-postEmail 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

I Fråga tabeller och entiteter finns mer information om hur du frågar med tabell-API.See Querying Tables and Entities for details on how to query by using the Table API.

Mer information om de förstklassiga funktioner som Azure Cosmos DB erbjuder finns i Azure Cosmos DB Table API och Utveckla med tabell-API:t i .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.

FörutsättningarPrerequisites

För att de här frågorna ska fungera måste du ha ett konto i Azure Cosmos DB och ha entitetsdata i containern.For these queries to work, you must have an Azure Cosmos DB account and have entity data in the container. Har du detta?Don't have any of those? Slutför snabbstarten på fem minuter eller självstudien för utvecklare om du behöver skapa ett konto och fylla i databasen.Complete the five-minute quickstart or the developer tutorial to create an account and populate your database.

Fråga om PartitionKey och RowKeyQuery on PartitionKey and RowKey

Eftersom egenskaperna PartitionKey och RowKey utformar en entitets primärnyckel kan du använda följande specialsyntax för att identifiera entiteten:Because the PartitionKey and RowKey properties form an entity's primary key, you can use the following special syntax to identify the entity:

QueryQuery

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

ResultatResults

PartitionKeyPartitionKey RowKeyRowKey E-postEmail PhoneNumberPhoneNumber
HarpHarp WalterWalter Walter@contoso.com 425-555-0104425-555-0104

Du kan också ange egenskaperna som en del av alternativet $filter, som du ser i följande avsnitt.Alternatively, you can specify these properties as part of the $filter option, as shown in the following section. Lägg märke till att nyckelns egenskapsnamn och konstanta värden är skiftlägeskänsliga.Note that the key property names and constant values are case-sensitive. Både egenskaperna PartitionKey och RowKey är av typen Sträng.Both the PartitionKey and RowKey properties are of type String.

Fråga med hjälp av ett OData-filterQuery by using an OData filter

När du skapar en filtersträng ska du tänka på följande regler:When you're constructing a filter string, keep these rules in mind:

  • Använd de logiska operatorerna som definieras av OData-protokollspecifikationen för att jämföra en egenskap med ett värde.Use the logical operators defined by the OData Protocol Specification to compare a property to a value. Observera att det inte går att jämföra en egenskap med ett dynamiskt värde.Note that you can't compare a property to a dynamic value. En sida av uttrycket måste vara en konstant.One side of the expression must be a constant.
  • Egenskapsnamnet, operatorn och det konstanta värdet måste separeras av URL-kodade blanksteg.The property name, operator, and constant value must be separated by URL-encoded spaces. Ett blanksteg är URL-kodat som %20.A space is URL-encoded as %20.
  • Alla delar av filtersträngen är skiftlägeskänsliga.All parts of the filter string are case-sensitive.
  • Det konstanta värdet måste vara av samma datatyp som egenskapen för filtret för att returnera giltiga resultat.The constant value must be of the same data type as the property in order for the filter to return valid results. Mer information om egenskapstyper som stöds finns i Förstå Tabelltjänst-datamodellen.For more information about supported property types, see Understanding the Table Service Data Model.

Här är en exempelfråga som visar hur du filtrerar via PartitionKey och e-postegenskaperna med ett OData-$filter.Here's an example query that shows how to filter by the PartitionKey and Email properties by using an OData $filter.

QueryQuery

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

Mer information om hur du skapar filteruttryck för olika datatyper finns i Fråga tabeller och entiteter.For more information on how to construct filter expressions for various data types, see Querying Tables and Entities.

ResultatResults

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

Frågorna på datetime-egenskaper returnerar inte några data när de körs i Azure Cosmos DB Tabell-API.The queries on datetime properties don't return any data when executed in Azure Cosmos DB's Table API. Medan Azure Table Storage lagrar datum värden med tids kornig het för Tick, använder Tabell-API i Azure Cosmos DB _ts egenskapen.While the Azure Table storage stores date values with time granularity of ticks, the Table API in Azure Cosmos DB uses the _ts property. _tsEgenskapen är en andra nivå av granularitet, vilket inte är ett OData-filter.The _ts property is at a second level of granularity, which isn't an OData filter. I så fall blockeras frågorna på egenskaperna för tidsstämpeln av Azure Cosmos DB.So, the queries on timestamp properties are blocked by Azure Cosmos DB. Som en lösning kan du definiera en anpassad egenskap för data typen datetime eller Long och ange datumvärdet från klienten.As a workaround, you can define a custom datetime or long data type property and set the date value from the client.

Fråga med hjälp av LINQQuery by using LINQ

Du kan också fråga med hjälp av LINQ, som översätter till motsvarande OData-frågeuttryck.You can also query by using LINQ, which translates to the corresponding OData query expressions. Här är ett exempel på hur du skapar frågor med .NET SDK:Here's an example of how to build queries by using the .NET SDK:

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

Nästa stegNext steps

I den här självstudien har du gjort följande:In this tutorial, you've done the following:

  • Lär dig att fråga med tabell-APILearned how to query by using the Table API

Du kan nu fortsätta till nästa självstudie för att lära dig hur du distribuerar dina data globalt.You can now proceed to the next tutorial to learn how to distribute your data globally.