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 :

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 :

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