Partager via


Qu’est-ce que le langage de requête dans Cosmos DB (dans Azure et Fabric) ?

Le langage de requête fournit une syntaxe puissante de type SQL pour l’utilisation des données JSON. Ce langage est conçu pour être familier aux utilisateurs avec l’expérience SQL, tout en prenant en charge la flexibilité et la nature hiérarchique des documents JSON. Cet article présente les concepts fondamentaux, la syntaxe et les fonctionnalités du langage de requête.

Concepts de base

Le langage de requête est conçu pour fournir un accès expressif et efficace aux données stockées sous forme de documents JSON. À sa base, le langage est conçu pour fonctionner en mode natif avec des données hiérarchiques et flexibles, prenant en charge des requêtes simples et complexes sur des documents pouvant avoir des structures variables.

Les requêtes sont composées à l’aide d’une syntaxe similaire à SQL, mais sont adaptées au modèle de document. Cette adaptation signifie que, contrairement aux bases de données relationnelles traditionnelles, il n’existe aucun schéma fixe : les propriétés peuvent être manquantes ou avoir différents types entre les documents. Le langage respecte la casse et prend en charge le référencement des propriétés imbriquées, des tableaux et des objets directement dans les requêtes. Les opérateurs logiques, de comparaison et arithmétiques sont disponibles, et le langage est conçu pour être intuitif pour les développeurs disposant d’une expérience SQL tout en embrassant la flexibilité des données NoSQL.

Le moteur de requête est optimisé pour des performances et une scalabilité élevées, en utilisant automatiquement des index pour filtrer, trier et agréger efficacement les données. Il prend en charge un large éventail de modèles de requête, des recherches simples aux agrégations complexes et aux sous-requêtes. Cette prise en charge rend le moteur de requête adapté aux charges de travail transactionnelles et analytiques. Le langage fournit également des constructions permettant d’utiliser des tableaux, de gérer des valeurs null et non définies, et de projeter des résultats dans des formes JSON flexibles. Ces constructions permettent aux développeurs de récupérer exactement les données dont ils ont besoin dans le format requis par leurs applications.

Structure

Une requête classique se compose des clauses suivantes :

  • SELECT: spécifie les champs ou valeurs à retourner.
  • FROM: identifie le conteneur source et peut affecter un alias.
  • WHERE: filtre les documents en fonction des conditions.
  • ORDER BY: trie les résultats.
  • GROUP BY: regroupe les résultats par une ou plusieurs propriétés.

Exemple de requête

Voici un exemple de requête de base :

SELECT p.id, p.name
FROM products p
WHERE p.price > 20
ORDER BY p.price ASC

Cette requête retourne les produits id dont le name prix est supérieur à 20, trié par ordre croissant.

Utilisation des propriétés

Vous pouvez accéder aux propriétés imbriquées à l’aide de la notation par points ou de la notation entre crochets :

SELECT p.manufacturer.name, p["metadata"].sku
FROM products p

Les tableaux peuvent être parcourus à l’aide JOIN ou sous-requêtes :

SELECT p.name, c AS color
FROM products p
JOIN c IN p.metadata.colors

Filtrage des données

La WHERE clause prend en charge un large éventail d’opérateurs, notamment les opérations arithmétiques, logiques, de comparaison et de chaîne :

SELECT *
FROM products p
WHERE p.category IN ("Accessories", "Clothing") AND p.price BETWEEN 10 AND 50

Agrégation et regroupement

Vous pouvez utiliser des fonctions d’agrégation et des résultats de groupe :

SELECT p.category, COUNT(1) AS productCount
FROM products p
GROUP BY p.category

Utilisation de mots clés

Voici quelques exemples de mots clés que vous pouvez utiliser dans une requête :

  • DISTINCT supprime les valeurs dupliquées.
  • TOP N limite le nombre de résultats.
  • LIKE prend en charge la correspondance de modèles avec des caractères génériques.
SELECT DISTINCT VALUE p.category
FROM products p

SELECT TOP 5 *
FROM products p
ORDER BY p.price DESC

SELECT *
FROM products p
WHERE p.name LIKE "%bike%"

Subqueries

Les sous-requêtes permettent un filtrage et une projection plus avancés, notamment la vérification de l’existence de valeurs dans les tableaux :

SELECT VALUE p.name
FROM products p
WHERE EXISTS (
    SELECT VALUE c FROM c IN p.metadata.colors WHERE c LIKE "%blue%"
)