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.