Vad är frågespråket i Cosmos DB (i Azure och Fabric)

Frågespråket innehåller en kraftfull, SQL-liknande syntax för att arbeta med JSON-data. Det här språket är utformat för att vara bekant för användare med SQL-erfarenhet, samtidigt som det stöder JSON-dokuments flexibilitet och hierarkiska karaktär. Den här artikeln beskriver grundläggande begrepp, syntax och funktioner i frågespråket.

Grundläggande begrepp i frågespråket

Frågespråket är skapat för att ge uttrycksfull och effektiv åtkomst till data som lagras som JSON-dokument. I grunden är språket utformat för att fungera internt med hierarkiska och flexibla data, med stöd för både enkla och komplexa frågor över dokument som kan ha olika strukturer.

Frågor består av en välbekant SQL-liknande syntax, men anpassas för dokumentmodellen. Den här anpassningen innebär att det, till skillnad från traditionella relationsdatabaser, inte finns något fast schema – egenskaper kan saknas eller ha olika typer av dokument. Språket är skiftlägeskänsligt och stöder referens till kapslade egenskaper, matriser och objekt direkt i frågor. Logiska operatorer, jämförelser och aritmetiska operatorer är tillgängliga och språket är utformat för att vara intuitivt för utvecklare med SQL-erfarenhet samtidigt som noSQL-data är flexibla.

Frågemotorn är optimerad för hög prestanda och skalbarhet och använder automatiskt index för att effektivt filtrera, sortera och aggregera data. Den stöder en mängd olika frågemönster, från enkla sökningar till komplexa aggregeringar och underfrågor. Det här stödet gör frågemotorn lämplig för både transaktions- och analysarbetsbelastningar. Språket innehåller även konstruktioner för att arbeta med matriser, hantera null- och odefinierade värden och projicera resultat i flexibla JSON-former. Dessa konstruktioner gör det möjligt för utvecklare att hämta exakt de data de behöver i det format som krävs av deras program.

Grundläggande frågestruktur

En typisk fråga består av följande satser:

  • SELECT: Anger vilka fält eller värden som ska returneras.
  • FROM: Identifierar källcontainern och kan tilldela ett alias.
  • WHERE: Filtrerar dokument baserat på villkor.
  • ORDER BY: Sorterar resultatet.
  • GROUP BY: Grupperar resultat efter en eller flera egenskaper.

Exempel: Enkel fråga

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

Den här frågan returnerar id produkter och name med ett pris större än 20, sorterat efter pris i stigande ordning.

Arbeta med JSON-egenskaper

Du kan komma åt kapslade egenskaper med hjälp av punkt notation eller hakparentes notation:

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

Matriser kan passeras med hjälp av JOIN eller underfrågor:

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

Filtrera data

WHERE Satsen stöder en mängd olika operatorer, inklusive aritmetiska, logiska, jämförelse- och strängåtgärder:

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

Sammansättning och gruppering

Du kan använda aggregerade funktioner och gruppresultat:

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

Distinkt, överkant och liknande

  • DISTINCT tar bort dubblettvärden.
  • TOP N begränsar antalet resultat.
  • LIKE stöder mönstermatchning med jokertecken.
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

Underfrågor möjliggör mer avancerad filtrering och projektion, inklusive kontroll av förekomsten av värden i matriser:

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