Udostępnij za pomocą


Jaki jest język zapytań w usłudze Cosmos DB (na platformie Azure i w usłudze Fabric)

Język zapytań zapewnia zaawansowaną składnię przypominającą język SQL do pracy z danymi JSON. Ten język jest przeznaczony do znajomości środowiska SQL, a jednocześnie zapewnia elastyczność i hierarchiczny charakter dokumentów JSON. W tym artykule przedstawiono podstawowe pojęcia, składnię i funkcje języka zapytań.

Podstawowe pojęcia dotyczące języka zapytań

Język zapytań jest tworzony w celu zapewnienia ekspresyjnego i wydajnego dostępu do danych przechowywanych jako dokumenty JSON. Język jest przeznaczony do pracy natywnie z danymi hierarchicznymi i elastycznymi, obsługującymi zarówno proste, jak i złożone zapytania dotyczące dokumentów, które mogą mieć różne struktury.

Zapytania składają się przy użyciu znanej składni podobnej do języka SQL, ale są dostosowane do modelu dokumentu. Ta adaptacja oznacza, że w przeciwieństwie do tradycyjnych relacyjnych baz danych nie ma stałego schematu — właściwości mogą brakować lub mieć różne typy w dokumentach. Język uwzględnia wielkość liter i obsługuje odwoływanie się do zagnieżdżonych właściwości, tablic i obiektów bezpośrednio w zapytaniach. Dostępne są operatory logiczne, porównawcze i arytmetyczne, a język został zaprojektowany tak, aby był intuicyjny dla tych deweloperów ze środowiskiem SQL, jednocześnie wykorzystując elastyczność danych NoSQL.

Aparat zapytań jest zoptymalizowany pod kątem wysokiej wydajności i skalowalności, automatycznie używając indeksów do wydajnego filtrowania, sortowania i agregowania danych. Obsługuje szeroką gamę wzorców zapytań— od prostych odnośników po złożone agregacje i podzapytania. Ta obsługa sprawia, że aparat zapytań jest odpowiedni zarówno dla obciążeń transakcyjnych, jak i analitycznych. Język udostępnia również konstrukcje do pracy z tablicami, obsługi wartości null i niezdefiniowanych oraz projekcji wyników w elastycznych kształtach JSON. Konstrukcje te umożliwiają deweloperom pobieranie dokładnie potrzebnych danych w formacie wymaganym przez aplikacje.

Podstawowa struktura zapytań

Typowe zapytanie składa się z następujących klauzul:

  • SELECT: określa, które pola lub wartości mają być zwracane.
  • FROM: identyfikuje kontener źródłowy i może przypisać alias.
  • WHERE: filtruje dokumenty na podstawie warunków.
  • ORDER BY: sortuje wyniki.
  • GROUP BY: Grupuje wyniki według co najmniej jednej właściwości.

Przykład: proste zapytanie

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

To zapytanie zwraca wartości id i name produktów z ceną większą niż 20 posortowaną według ceny w kolejności rosnącej.

Praca z właściwościami JSON

Dostęp do właściwości zagnieżdżonych można uzyskać przy użyciu notacji kropkowej lub notacji nawiasu:

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

Tablice można przechodzić przy użyciu JOIN podzapytania lub podzapytania:

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

Filtrowanie danych

Klauzula WHERE obsługuje szeroką gamę operatorów, w tym operacje arytmetyczne, logiczne, porównawcze i ciągowe:

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

Agregacja i grupowanie

Możesz użyć funkcji agregujących i wyników grupowania:

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

Unikatowe, górne i podobne

  • DISTINCT usuwa zduplikowane wartości.
  • TOP N ogranicza liczbę wyników.
  • LIKE obsługuje dopasowywanie wzorców z symbolami wieloznacznymi.
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

Podzapytania umożliwiają bardziej zaawansowane filtrowanie i projekcję, w tym sprawdzanie istnienia wartości w tablicach:

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