Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Important
Letar du efter en databaslösning för storskaliga scenarier med ett serviceavtal på 99,999% tillgänglighetsnivå (SLA), snabb autoskalning och automatisk redundans i flera regioner? Överväg Azure Cosmos DB för NoSQL.
Azure Cosmos DB for Table stöder OData- och LINQ-frågor mot nyckel-/värdedata (tabell).
Den här artikeln beskriver följande uppgifter:
- Fråga data med API:et för tabeller
Frågorna i den här artikeln använder följande People-exempeltabell:
| Partitionsnyckel | RowKey | E-postmeddelande | Telefonnummer |
|---|---|---|---|
| Harp | Walter | Walter@contoso.com | 425-555-0101 |
| Smith | Ben | Ben@contoso.com | 425-555-0102 |
| Smith | Jeff | Jeff@contoso.com | 425-555-0104 |
Mer information om hur du frågar med hjälp av API:et för tabell finns i Fråga efter tabeller och entiteter.
Prerequisites
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. Om du saknar ett konto eller data, slutför du Snabbstart: Azure Cosmos DB for Table för .NET för att skapa ett konto och fylla i databasen.
Fråga om PartitionKey och RowKey
Eftersom egenskaperna PartitionKey och RowKey utformar en entitets primärnyckel kan du använda följande specialsyntax för att identifiera entiteten:
Query
https://<mytableendpoint>/People(PartitionKey='Harp',RowKey='Walter')
Resultat
| Partitionsnyckel | RowKey | E-postmeddelande | Telefonnummer |
|---|---|---|---|
| Harp | Walter | Walter@contoso.com | 425-555-0104 |
Du kan också ange egenskaperna som en del av alternativet $filter, som du ser i följande avsnitt. Centrala egenskapsnamn och konstanta värden är skiftlägeskänsliga. Egenskaperna PartitionKey och RowKey är av typen Sträng.
Fråga med hjälp av ett OData-filter
När du skapar en filtersträng ska du tänka på följande regler:
- Använd de logiska operatorerna som definieras av OData-protokollspecifikationen för att jämföra en egenskap med ett värde. Du kan inte jämföra en egenskap med ett dynamiskt värde. En sida av uttrycket måste vara en konstant.
- URL-kodade blanksteg måste separera egenskapsnamnet, operatorn och konstantvärdet. Ett blanksteg är URL-kodat som
%20. - Alla delar av filtersträngen är skiftlägeskänsliga.
- Konstantvärdet måste ha samma datatyp som egenskapen för att filtret ska kunna returnera giltiga resultat. Mer information om egenskapstyper som stöds finns i Förstå tabelltjänstdatamodellen.
Här är en exempelfråga som visar hur du filtrerar efter PartitionKey och epostegenskaperna genom att använda ett OData-$filter.
Query
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.
Resultat
| Partitionsnyckel | RowKey | E-postmeddelande | Telefonnummer |
|---|---|---|---|
| Smith | Ben | Ben@contoso.com | 425-555-0102 |
Frågorna om datetime-egenskaper returnerar inga data när de körs i Azure Cosmos DB:s API för tabell. Medan Azure Table storage lagrar datumvärden med tidskornighet av ticks, använder API:et för tabeller i Azure Cosmos DB egenskapen _ts. Egenskapen _ts är på en andra nivå av kornighet, vilket inte är ett OData-filter. Azure Cosmos DB blockerar frågorna på tidsstämpelegenskaper. Som en lösning kan du definiera en anpassad datetime- eller long datatypegenskap och ange datumvärdet från klienten.
Fråga med hjälp av LINQ
Du kan också fråga med hjälp av LINQ, som översätter till motsvarande OData-frågeuttryck. Här är ett exempel på hur du skapar frågor med .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 steg
Du kan nu fortsätta till nästa självstudie för att lära dig hur du distribuerar dina data globalt.