Delen via


Zelfstudie: Query's uitvoeren op Azure Cosmos DB met behulp van de API voor Table

VAN TOEPASSING OP: Tafel

Azure Cosmos DB for Table biedt ondersteuning voor OData- en LINQ-query's op sleutel-/waardegegevens (tabelgegevens).

Dit artikel behandelt de volgende taken:

  • Gegevens opvragen met de API voor Table

In de query's in dit artikel wordt de volgende voorbeeldtabel People gebruikt:

PartitionKey RowKey E-mailen 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

Zie Tabellen en entiteiten opvragen voor meer informatie over het uitvoeren van query's met behulp van de API voor Table.

Vereisten

Deze query's werken alleen als u een Azure DB Cosmos DB-account hebt en een container met entiteitsgegevens. Als u geen account of gegevens hebt, voltooit u de quickstart: Azure Cosmos DB voor Table voor .NET om een account te maken en uw database te vullen.

Query op PartitionKey en RowKey

Omdat de eigenschappen PartitionKey en RowKey de primaire sleutel van een entiteit vormen, kunt u de volgende specifieke syntaxis gebruiken voor het identificeren van de entiteit:

Query

https://<mytableendpoint>/People(PartitionKey='Harp',RowKey='Walter')

Results

PartitionKey RowKey E-mailen PhoneNumber
Harp Walter Walter@contoso.com 425-555-0104

U kunt deze eigenschappen ook opgeven als onderdeel van de optie $filter, zoals wordt weergegeven in de volgende sectie. De namen van sleuteleigenschappen en constante waarden zijn hoofdlettergevoelig. De eigenschappen PartitionKey en RowKey zijn van het type String.

Query's uitvoeren met behulp van een OData-filter

Houd bij het samenstellen van een filtertekenreeks rekening met deze regels:

  • Gebruik de logische operators die door de specificatie van het OData-protocol zijn gedefinieerd om een eigenschap te vergelijken met een waarde. U kunt een eigenschap niet vergelijken met een dynamische waarde. Eén kant van de expressie moet een constante zijn.
  • Met URL gecodeerde spaties moet de eigenschapsnaam, operator en constante waarde worden gescheiden. Een spatie wordt in URL gecodeerd als %20.
  • Alle onderdelen van de filtertekenreeks zijn hoofdlettergevoelig.
  • Het filter retourneert alleen geldige resultaten als de constante waarde van hetzelfde gegevenstype is als de eigenschap. Zie Informatie over het gegevensmodel tabelservice voor meer informatie over ondersteunde eigenschapstypen.

Hier volgt een voorbeeldquery die laat zien hoe u de eigenschappen PartitionKey en Email filtert met behulp van een OData-$filter.

Query

https://<mytableapi-endpoint>/People()?$filter=PartitionKey%20eq%20'Smith'%20and%20Email%20eq%20'Ben@contoso.com'

Zie Querying Tables and Entities (Tabellen en entiteiten opvragen) voor meer informatie over het samenstellen van filterexpressies voor verschillende soorten gegevens.

Results

PartitionKey RowKey E-mailen PhoneNumber
Smith Ben Ben@contoso.com 425-555-0102

De query's op datum/tijd-eigenschappen retourneren geen gegevens wanneer ze worden uitgevoerd in de API van Azure Cosmos DB voor Table. Terwijl de Azure Table Storage datumwaarden met tijdgranulariteit van tikken opslaat, gebruikt de API voor Table in Azure Cosmos DB de _ts eigenschap. De eigenschap _ts bevindt zich op een tweede granulatieniveau, maar dit is geen OData-filter. Azure Cosmos DB blokkeert de query's op tijdstempeleigenschappen. Als tijdelijke oplossing kunt u een aangepaste datum-/tijd- of lang gegevenstype-eigenschap definiëren en de datumwaarde van de client instellen.

Query’s uitvoeren met LINQ

U kunt ook query's uitvoeren met behulp van LINQ, die deze vertaalt naar de bijbehorende OData-query-expressies. Hier volgt een voorbeeld van hoe u query's opbouwt met behulp van de .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 });

Volgende stappen

U kunt nu doorgaan met de volgende zelfstudie, waarin u leert hoe u uw gegevens globaal distribueert.