Didacticiel : Interroger Azure Cosmos DB à l’aide de l’API pour Table
S’APPLIQUE À : Table
Azure Cosmos DB for Table prend en charge les requêtes OData et LINQ sur les données clé/valeur (tableau).
Cet article décrit les tâches suivantes :
- Interrogation des données avec l’API pour Table
L’exemple de table People
suivant est utilisé pour les interrogations de cet article :
PartitionKey | RowKey | 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 |
Pour plus d’informations sur la manière d’effectuer des requêtes à l’aide de l’API pour Table, consultez Requête sur les tableaux et les entités.
Prérequis
Pour le bon fonctionnement de ces requêtes, vous devez disposer d’un compte Azure Cosmos DB et de données d’entité dans le conteneur. Si vous n’avez pas de compte ou de données, suivez démarrage rapide : Azure Cosmos DB for Table pour .NET pour créer un compte et remplir votre base de données.
Interroger sur PartitionKey et RowKey
Les propriétés PartitionKey et RowKey formant une clé primaire d’une entité, vous pouvez utiliser la syntaxe spéciale suivante pour identifier l’entité :
Requête
https://<mytableendpoint>/People(PartitionKey='Harp',RowKey='Walter')
Résultats
PartitionKey | RowKey | PhoneNumber | |
---|---|---|---|
Harp | Walter | Walter@contoso.com | 425-555-0104 |
Vous pouvez également spécifier ces propriétés dans le cadre de l’option $filter
, comme indiqué dans la section suivante. Les noms de propriété de clé et les valeurs de constante respectent la casse. Les propriétés PartitionKey et RowKey sont toutes deux de type chaîne.
Interroger en utilisant un filtre OData
Quand vous construisez une chaîne de filtrage, prenez en compte les règles suivantes :
- Utilisez les opérateurs logiques définis par la spécification du protocole OData Protocol pour comparer une propriété par rapport à une valeur. Vous ne pouvez pas comparer une propriété à une valeur dynamique. Un côté de l’expression doit être une constante.
- Les espaces codés par URL doivent séparer le nom de la propriété, l’opérateur et la valeur constante. Un espace est codé URL sous la forme
%20
. - Toutes les parties de la chaîne de filtrage respectent la casse.
- Pour que le filtre retourne des résultats valides, la valeur constante doit être du même type de données que la propriété. Pour plus d’informations sur les types de propriétés pris en charge, consultez Compréhension du modèle de données du service de Table.
Voici un exemple de requête qui montre comment filtrer sur les propriétés PartitionKey et Email en utilisant un $filter
OData.
Requête
https://<mytableapi-endpoint>/People()?$filter=PartitionKey%20eq%20'Smith'%20and%20Email%20eq%20'Ben@contoso.com'
Pour plus d’informations sur la construction d’expressions de filtre pour différents types de données, consultez Querying Tables and Entities.
Résultats
PartitionKey | RowKey | PhoneNumber | |
---|---|---|---|
Smith | Ben | Ben@contoso.com | 425-555-0102 |
Les requêtes sur les propriétés DateHeure ne retournent pas de données quand elles sont exécutées dans l’API pour Table d’Azure Cosmos DB. Même si le stockage Table Azure stocke les valeurs de date avec une précision temporelle de cycles, l’API pour Table d’Azure Cosmos DB utilise la propriété _ts
. La propriété _ts
se situe à un deuxième niveau de précision, ce qui ne correspond pas à un filtre OData. Azure Cosmos DB bloque les requêtes sur les propriétés timestamp. Pour contourner ce problème, vous pouvez définir une propriété de type de données DateHeure ou Long personnalisée et définir la valeur de date à partir du client.
Interroger en utilisant LINQ
Vous pouvez également interroger en utilisant LINQ, qui est traduit en expressions de requête OData correspondantes. Voici un exemple montrant comment créer des requêtes en utilisant le SDK .NET :
IQueryable<CustomerEntity> linqQuery = table.CreateQuery<CustomerEntity>()
.Where(x => x.PartitionKey == "4")
.Select(x => new CustomerEntity() { PartitionKey = x.PartitionKey, RowKey = x.RowKey, Email = x.Email });
Étapes suivantes
Vous pouvez maintenant poursuivre avec le didacticiel suivant montrant comment distribuer vos données globalement.