Bien démarrer avec les requêtes SQL
S’APPLIQUE À : NoSQL
Dans les comptes Azure Cosmos DB for NoSQL, il existe deux façons de lire des données :
Lectures de points : vous pouvez effectuer une recherche de clé/valeur sur un ID d’élément unique et une clé de partition. La combinaison de la clé de partition et de l’ID d’élément représente la clé et l’élément proprement dit représente la valeur. Pour un document de 1 Ko, les lectures de points coûtent généralement 1 unité de requête avec une latence inférieure à 10 ms. Les lectures de points retournent un élément entier unique et non un élément partiel ou un champ spécifique.
Voici quelques exemples montrant comment effectuer des lectures de points avec chaque SDK :
- Kit de développement logiciel (SDK) .NET
- Kit SDK Java
- Kit de développement logiciel (SDK) Node.js
- Kit de développement logiciel (SDK) Python
- Kit de développement logiciel (SDK) Go
Requêtes SQL : vous pouvez interroger des données en écrivant des requêtes avec le langage SQL (Structured Query Language) comme langage de requête JSON. Les requêtes coûtent toujours au moins 2,3 unités de requête et, en général, ont une latence plus élevée et plus variable que les lectures de points. Les requêtes peuvent retourner de nombreux éléments.
La plupart des charges de travail de lecture intensive sur Azure Cosmos DB utilisent une combinaison de lectures de points et de requêtes SQL. Si vous avez simplement besoin de lire un seul élément, les lectures de points sont moins chères et plus rapides que les requêtes. Les lectures de points n’ont pas besoin d’utiliser le moteur d’interrogation pour accéder aux données qu’elles peuvent lire directement. Bien entendu, il n’est pas possible pour toutes les charges de travail de lire exclusivement les données à l’aide des lectures de points. Par conséquent, la prise en charge de SQL comme langage de requête et l’indexation indépendante du schéma offrent un moyen plus souple d’accéder à vos données.
Voici quelques exemples montrant comment effectuer des requêtes SQL avec chaque SDK :
- Kit de développement logiciel (SDK) .NET
- Kit SDK Java
- Kit de développement logiciel (SDK) Node.js
- Kit de développement logiciel (SDK) Python
- Kit de développement logiciel (SDK) Go
Le reste de cette documentation montre comment commencer à écrire des requêtes SQL dans Azure Cosmos DB. Les requêtes SQL peuvent être exécutées via le SDK ou le portail Azure.
Charger l’exemple de données
Dans votre compte Azure Cosmos DB de l’API pour NoSQL, ouvrez l’Explorateur de données pour créer un conteneur appelé Families
. Une fois que le conteneur a été créé, utilisez le navigateur de structures de données pour le trouver et l’ouvrir. Dans votre conteneur Families
, l’option Items
se trouve juste en dessous du nom du conteneur. Ouvrez cette option. Un bouton s’affiche dans la barre de menus, au centre de l’écran, pour créer un « nouvel élément ». Vous allez utiliser cette fonctionnalité pour créer les éléments JSON ci-dessous.
Créer des éléments JSON
Les deux éléments JSON suivants sont des documents concernant les familles Andersen et Wakefield. Ils comprennent les parents, les enfants, ainsi que leurs animaux, leur adresse et leurs informations d’inscription.
Le premier élément se compose de chaînes, de nombres, de valeurs booléennes, de tableaux et de propriétés imbriquées :
{
"id": "AndersenFamily",
"lastName": "Andersen",
"parents": [
{ "firstName": "Thomas" },
{ "firstName": "Mary Kay"}
],
"children": [
{
"firstName": "Henriette Thaulow",
"gender": "female",
"grade": 5,
"pets": [{ "givenName": "Fluffy" }]
}
],
"address": { "state": "WA", "county": "King", "city": "Seattle" },
"creationDate": 1431620472,
"isRegistered": true
}
Le deuxième élément utilise givenName
et familyName
au lieu de firstName
et lastName
:
{
"id": "WakefieldFamily",
"parents": [
{ "familyName": "Wakefield", "givenName": "Robin" },
{ "familyName": "Miller", "givenName": "Ben" }
],
"children": [
{
"familyName": "Merriam",
"givenName": "Jesse",
"gender": "female",
"grade": 1,
"pets": [
{ "givenName": "Goofy" },
{ "givenName": "Shadow" }
]
},
{
"familyName": "Miller",
"givenName": "Lisa",
"gender": "female",
"grade": 8 }
],
"address": { "state": "NY", "county": "Manhattan", "city": "NY" },
"creationDate": 1431620462,
"isRegistered": false
}
Interroger les éléments JSON
Appliquez quelques requêtes sur les données JSON pour comprendre certains aspects clés du langage de requête SQL d’Azure Cosmos DB.
La requête suivante retourne les éléments dont le champ id
correspond à AndersenFamily
. Comme il s’agit d’une requête SELECT *
, son résultat est l’élément JSON complet. Pour plus d’informations sur la syntaxe SELECT, consultez Instruction SELECT.
SELECT *
FROM Families f
WHERE f.id = "AndersenFamily"
Voici le résultat de la requête :
[{
"id": "AndersenFamily",
"lastName": "Andersen",
"parents": [
{ "firstName": "Thomas" },
{ "firstName": "Mary Kay"}
],
"children": [
{
"firstName": "Henriette Thaulow", "gender": "female", "grade": 5,
"pets": [{ "givenName": "Fluffy" }]
}
],
"address": { "state": "WA", "county": "King", "city": "Seattle" },
"creationDate": 1431620472,
"isRegistered": true
}]
La requête suivante remet en forme la sortie JSON. La requête projette un nouvel objet JSON Family
avec deux champs sélectionnés, Name
et City
, où la ville de l’adresse est identique à l’État. « NY, NY » correspond à ce cas.
SELECT {"Name":f.id, "City":f.address.city} AS Family
FROM Families f
WHERE f.address.city = f.address.state
Voici le résultat de la requête :
[{
"Family": {
"Name": "WakefieldFamily",
"City": "NY"
}
}]
La requête suivante retourne tous les noms donnés des enfants de la famille dont l’id
correspond à WakefieldFamily
, classés par ville.
SELECT c.givenName
FROM Families f
JOIN c IN f.children
WHERE f.id = 'WakefieldFamily'
ORDER BY f.address.city ASC
Les résultats sont :
[
{ "givenName": "Jesse" },
{ "givenName": "Lisa"}
]
Remarques
Les exemples précédents illustrent plusieurs aspects du langage de requête Azure Cosmos DB :
Étant donné que l’API pour NoSQL fonctionne sur les valeurs JSON, elle traite des entités en forme d’arborescence plutôt que des lignes et des colonnes. Vous pouvez faire référence aux nœuds de l’arborescence quel que soit le niveau auquel ils se trouvent, comme
Node1.Node2.Node3…..Nodem
, à l’image de la référence en deux parties de<table>.<column>
dans SQL ANSI.Étant donné que le langage de requête fonctionne avec des données sans schéma, le système de type doit être lié dynamiquement. La même expression peut produire différents types sur différents éléments. Le résultat d’une requête est une valeur JSON valide, mais n’est pas forcément un schéma fixe.
Azure Cosmos DB prend uniquement en charge les éléments JSON stricts. Le système de type et les expressions peuvent uniquement traiter des types JSON. Pour en savoir plus, consultez la spécification JSON.
Un conteneur Azure Cosmos DB est une collection sans schéma d’éléments JSON. Les relations dans et entre les éléments d’un conteneur sont capturées de façon implicite par l’autonomie, et non par les relations de clé primaire et de clé étrangère. Cette fonctionnalité est importante pour les jointures intra-élément qui sont décrites dans Jointures dans Azure Cosmos DB.
Étapes suivantes
- Présentation d’Azure Cosmos DB
- Exemples .NET Azure Cosmos DB
- Clause SELECT
- Vous tentez d’effectuer une planification de la capacité pour une migration vers Azure Cosmos DB ? Vous pouvez utiliser les informations sur votre cluster de bases de données existant pour la planification de la capacité.
- Si vous ne connaissez que le nombre de vCores et de serveurs présents dans votre cluster de bases de données existant, lisez Estimation des unités de requête à l’aide de vCores ou de processeurs virtuels
- Si vous connaissez les taux de requêtes typiques de votre charge de travail de base de données actuelle, lisez la section concernant l’estimation des unités de requête à l’aide du planificateur de capacité Azure Cosmos DB