Freigeben über


Was ist die Abfragesprache in Cosmos DB (in Azure und Fabric)

Die Abfragesprache bietet eine leistungsstarke SQL-ähnliche Syntax zum Arbeiten mit JSON-Daten. Diese Sprache ist für Benutzer mit SQL-Erfahrung vertraut und unterstützt gleichzeitig die Flexibilität und hierarchische Natur von JSON-Dokumenten. In diesem Artikel werden die wichtigsten Konzepte, Syntax und Features der Abfragesprache vorgestellt.

Kernkonzepte der Abfragesprache

Die Abfragesprache ist so aufgebaut, dass sie ausdrucksstarke und effizienten Zugriff auf daten bereitstellt, die als JSON-Dokumente gespeichert sind. Die Sprache ist auf der Grundlage darauf ausgelegt, nativ mit hierarchischen und flexiblen Daten zu arbeiten, die einfache und komplexe Abfragen über Dokumente unterstützen, die unterschiedliche Strukturen haben könnten.

Abfragen werden mit einer vertrauten SQL-ähnlichen Syntax zusammengesetzt, aber für das Dokumentmodell angepasst. Diese Anpassung bedeutet, dass im Gegensatz zu herkömmlichen relationalen Datenbanken kein festes Schema vorhanden ist– Eigenschaften können fehlen oder unterschiedliche Typen in dokumentenübergreifend haben. Bei der Sprache wird die Groß-/Kleinschreibung beachtet und das Verweisen auf geschachtelte Eigenschaften, Arrays und Objekte direkt in Abfragen unterstützt. Logische Operatoren, Vergleiche und arithmetische Operatoren sind verfügbar, und die Sprache ist so konzipiert, dass sie für entwickler mit SQL-Erfahrungen intuitiv ist und gleichzeitig die Flexibilität von NoSQL-Daten einbezieht.

Das Abfragemodul ist für hohe Leistung und Skalierbarkeit optimiert und verwendet automatisch Indizes, um Daten effizient zu filtern, zu sortieren und zu aggregieren. Es unterstützt eine vielzahl von Abfragemustern, von einfachen Nachschlagevorgängen bis hin zu komplexen Aggregationen und Unterabfragen. Diese Unterstützung macht das Abfragemodul sowohl für transaktions- als auch für analytische Workloads geeignet. Die Sprache bietet außerdem Konstrukte für das Arbeiten mit Arrays, das Behandeln von Null- und nicht definierten Werten und das Projizieren von Ergebnissen in flexiblen JSON-Shapes. Mit diesen Konstrukten können Entwickler genau die daten abrufen, die sie in dem von ihren Anwendungen benötigten Format benötigen.

Grundlegende Abfragestruktur

Eine typische Abfrage besteht aus den folgenden Klauseln:

  • SELECT: Gibt an, welche Felder oder Werte zurückgegeben werden sollen.
  • FROM: Identifiziert den Quellcontainer und kann einen Alias zuweisen.
  • WHERE: Filtert Dokumente basierend auf Bedingungen.
  • ORDER BY: Sortiert die Ergebnisse.
  • GROUP BY: Gruppiert Ergebnisse nach einer oder mehreren Eigenschaften.

Beispiel: Einfache Abfrage

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

Diese Abfrage gibt die id Produkte mit name einem Preis von mehr als 20 zurück, sortiert nach Preis in aufsteigender Reihenfolge.

Arbeiten mit JSON-Eigenschaften

Sie können mithilfe der Punktnotation oder der Klammernotation auf geschachtelte Eigenschaften zugreifen:

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

Arrays können mithilfe JOIN oder Unterabfragen durchlaufen werden:

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

Filtern von Daten

Die WHERE Klausel unterstützt eine vielzahl von Operatoren, einschließlich arithmetischer, logischer, Vergleichs- und Zeichenfolgenoperationen:

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

Aggregation und Gruppierung

Sie können Aggregatfunktionen und Gruppenergebnisse verwenden:

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

Distinct, Top und Like

  • DISTINCT entfernt doppelte Werte.
  • TOP N beschränkt die Anzahl der Ergebnisse.
  • LIKE unterstützt den Musterabgleich mit Wildcards.
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%"

Unterabfragen

Unterabfragen ermöglichen erweiterte Filter- und Projektionsvorgänge, einschließlich der Überprüfung auf das Vorhandensein von Werten in Arrays:

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