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

VAN TOEPASSING OP: Tabel

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

Dit artikel behandelt de volgende taken:

  • Query's uitvoeren op gegevens met de API voor Table

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

PartitionKey RowKey Email 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 Query's uitvoeren op tabellen en entiteiten voor meer informatie over het uitvoeren van query's met behulp van de API voor Tabel.

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 Quickstart: Azure Cosmos DB for 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 Email 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 de sleuteleigenschappen en constante waarden zijn hoofdlettergevoelig. Zowel de eigenschappen PartitionKey als 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 moeten de eigenschapsnaam, operator en constante waarde scheiden. 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 van de 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 Email 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 voor Tabel van Azure Cosmos DB. Terwijl in Azure Table Storage datumwaarden worden opgeslagen met tijdgranulariteit van tikken, 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 timestamp-eigenschappen. 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.