Självstudie: Fråga Azure Cosmos DB med hjälp av API:et för table
GÄLLER FÖR: Tabell
Azure Cosmos DB for Table stöder OData- och LINQ-frågor mot nyckel/värde-data (tabell).
Den här artikeln beskriver följande uppgifter:
- Köra frågor mot data med API:et för table
Frågorna i den här artikeln använder följande People
-exempeltabell:
PartitionKey | RowKey | E-post | 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 table finns i Fråga 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:
Query
https://<mytableendpoint>/People(PartitionKey='Harp',RowKey='Walter')
Resultat
PartitionKey | RowKey | E-post | 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. Både 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 avgränsa 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änstens datamodell.
Här är en exempelfråga som visar hur du filtrerar via PartitionKey och e-postegenskaperna med 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
PartitionKey | RowKey | E-post | 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. Azure Table Storage lagrar datumvärden med tidskornighet för tick, men API:et för tabell i Azure Cosmos DB använder _ts
egenskapen . Egenskapen _ts
är på en andra nivå av kornighet, vilket inte är ett OData-filter. Azure Cosmos DB blockerar frågorna i tidsstämpelegenskaper. Som en lösning kan du definiera en anpassad datetime- eller long-datatypsegenskap 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.