Självstudie: Fråga Azure Cosmos DB med hjälp av API:et för tabell

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.