Delen via


Wat is de querytaal in Cosmos DB (in Azure en Fabric)

De querytaal biedt een krachtige, SQL-achtige syntaxis voor het werken met JSON-gegevens. Deze taal is ontworpen om vertrouwd te zijn met gebruikers met SQL-ervaring, en biedt ook ondersteuning voor de flexibiliteit en hiërarchische aard van JSON-documenten. In dit artikel worden de belangrijkste concepten, syntaxis en functies van de querytaal geïntroduceerd.

Kernconcepten van de querytaal

De querytaal is gebouwd om expressieve en efficiënte toegang te bieden tot gegevens die zijn opgeslagen als JSON-documenten. Bij de basis is de taal ontworpen om systeemeigen te werken met hiërarchische en flexibele gegevens, waarbij zowel eenvoudige als complexe query's worden ondersteund voor documenten met verschillende structuren.

Query's worden samengesteld met behulp van een vertrouwde SQL-achtige syntaxis, maar zijn aangepast voor het documentmodel. Deze aanpassing betekent dat er, in tegenstelling tot traditionele relationele databases, geen vast schema is: eigenschappen kunnen ontbreken of verschillende typen in documenten hebben. De taal is hoofdlettergevoelig en ondersteunt het rechtstreeks binnen query's verwijzen naar geneste eigenschappen, matrices en objecten. Logische, vergelijkings- en rekenkundige operators zijn beschikbaar en de taal is ontworpen om intuïtief te zijn voor die ontwikkelaars met SQL-ervaring en tegelijkertijd de flexibiliteit van NoSQL-gegevens te omarmen.

De query-engine is geoptimaliseerd voor hoge prestaties en schaalbaarheid, waarbij indexen automatisch worden gebruikt om gegevens efficiënt te filteren, sorteren en aggregeren. Het ondersteunt een breed scala aan querypatronen, van eenvoudige zoekacties tot complexe aggregaties en subquery's. Deze ondersteuning maakt de query-engine geschikt voor zowel transactionele als analytische workloads. De taal biedt ook constructies voor het werken met matrices, het verwerken van null- en niet-gedefinieerde waarden en het projecteren van resultaten in flexibele JSON-shapes. Met deze constructies kunnen ontwikkelaars exact de gegevens ophalen die ze nodig hebben in de indeling die ze nodig hebben voor hun toepassingen.

Basisquerystructuur

Een typische query bestaat uit de volgende componenten:

  • SELECT: Hiermee geeft u op welke velden of waarden moeten worden geretourneerd.
  • FROM: Identificeert de broncontainer en kan een alias toewijzen.
  • WHERE: Hiermee filtert u documenten op basis van voorwaarden.
  • ORDER BY: sorteert de resultaten.
  • GROUP BY: Groeperen resultaten op een of meer eigenschappen.

Voorbeeld: Eenvoudige query

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

Deze query retourneert de id en name van producten met een prijs die groter is dan 20, gesorteerd op prijs in oplopende volgorde.

Werken met JSON-eigenschappen

U hebt toegang tot geneste eigenschappen met punt-notatie of vierkante haak-notatie:

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

Matrices kunnen worden doorkruist met behulp van JOIN of subquery's:

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

Gegevens filteren

De WHERE component ondersteunt een breed scala aan operators, waaronder rekenkundige, logische, vergelijkings- en tekenreeksbewerkingen:

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

Aggregatie en groepering

U kunt statistische functies en groepsresultaten gebruiken:

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

Distinct, Top en Like

  • DISTINCT verwijdert dubbele waarden.
  • TOP N beperkt het aantal resultaten.
  • LIKE ondersteunt patroonkoppeling met jokertekens.
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

Met subquery's kunt u geavanceerder filteren en projecteren, waaronder het controleren op het bestaan van waarden in matrices:

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