Självstudie: Fråga Azure Cosmos DB med hjälp av API:et för tabell
GÄLLER FÖR: Bord
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:
- Köra frågor mot data med API:et för tabell
Frågorna i den här artikeln använder följande People
-exempeltabell:
PartitionKey | RowKey | 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 |
Mer information om hur du frågar med hjälp av API:et för tabell finns i Fråga efter tabeller och entiteter.
Förutsättningar
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 inte har något 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:
Fråga
https://<mytableendpoint>/People(PartitionKey='Harp',RowKey='Walter')
Resultat
PartitionKey | RowKey | PhoneNumber | |
---|---|---|---|
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. Nyckelegenskapens namn 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.
- Det konstanta värdet måste vara av samma datatyp som egenskapen för filtret för att 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 via PartitionKey och e-postegenskaperna med ett OData-$filter
.
Fråga
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
PartitionKey | RowKey | PhoneNumber | |
---|---|---|---|
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 för fästingar använder _ts
API:et för tabell i Azure Cosmos DB egenskapen. 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.