Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Dotazovací jazyk poskytuje výkonnou syntaxi podobné JAZYKu SQL pro práci s daty JSON. Tento jazyk je navržený tak, aby se seznámil s prostředím SQL a zároveň podporoval flexibilitu a hierarchickou povahu dokumentů JSON. Tento článek představuje základní koncepty, syntaxi a funkce dotazovacího jazyka.
Klíčové koncepty
Dotazovací jazyk je vytvořený tak, aby poskytoval výrazný a efektivní přístup k datům uloženým jako dokumenty JSON. Na základech je jazyk navržený tak, aby nativně pracoval s hierarchickými a flexibilními daty a podporoval jednoduché i složité dotazy na dokumenty, které by mohly mít různé struktury.
Dotazy se skládají pomocí známé syntaxe podobné JAZYKu SQL, ale jsou upraveny pro model dokumentu. Tato úprava znamená, že na rozdíl od tradičních relačních databází neexistuje žádné pevné schéma – vlastnosti můžou chybět nebo mají různé typy dokumentů. Jazyk se rozlišují malá a velká písmena a podporuje odkazování na vnořené vlastnosti, pole a objekty přímo v dotazech. K dispozici jsou logické, porovnávací a aritmetické operátory a jazyk je navržený tak, aby byl pro vývojáře s prostředím SQL intuitivní a současně využívá flexibilitu NoSQL dat.
Dotazovací modul je optimalizovaný pro zajištění vysokého výkonu a škálovatelnosti, který automaticky používá indexy k efektivnímu filtrování, řazení a agregaci dat. Podporuje širokou škálu vzorů dotazů, od jednoduchých vyhledávání až po složité agregace a poddotazy. Díky této podpoře je dotazovací stroj vhodný pro transakční i analytické úlohy. Jazyk také poskytuje konstrukce pro práci s poli, zpracování hodnot null a nedefinovaných hodnot a projektování výsledků v flexibilních obrazcích JSON. Tyto konstrukce umožňují vývojářům načíst přesně data, která potřebují ve formátu požadovaném jejich aplikacemi.
Struktura
Typický dotaz se skládá z následujících klauzulí:
-
SELECT: Určuje, která pole nebo hodnoty se mají vrátit. -
FROM: Identifikuje zdrojový kontejner a může přiřadit alias. -
WHERE: Filtruje dokumenty na základě podmínek. -
ORDER BY: Seřadí výsledky. -
GROUP BY: Seskupí výsledky podle jedné nebo více vlastností.
Příklad dotazu
Tady je příklad základního dotazu:
SELECT p.id, p.name
FROM products p
WHERE p.price > 20
ORDER BY p.price ASC
Tento dotaz vrátí id a name produkty s cenou větší než 20 seřazenými podle ceny ve vzestupném pořadí.
Práce s vlastnostmi
K vnořeným vlastnostem můžete přistupovat pomocí zápisu tečky nebo zápisu závorek:
SELECT p.manufacturer.name, p["metadata"].sku
FROM products p
Pole je možné přecházet pomocí JOIN poddotazů nebo poddotazů:
SELECT p.name, c AS color
FROM products p
JOIN c IN p.metadata.colors
Filtrování dat
Klauzule WHERE podporuje širokou škálu operátorů, včetně aritmetických, logických, porovnávaných a řetězcových operací:
SELECT *
FROM products p
WHERE p.category IN ("Accessories", "Clothing") AND p.price BETWEEN 10 AND 50
Agregace a seskupení
Můžete použít agregační funkce a výsledky seskupení:
SELECT p.category, COUNT(1) AS productCount
FROM products p
GROUP BY p.category
Použití klíčových slov
Tady je několik ukázkových klíčových slov, která můžete použít v dotazu:
-
DISTINCTodebere duplicitní hodnoty. -
TOP Nomezuje počet výsledků. -
LIKEpodporuje porovnávání vzorů se zástupnými cardy.
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
Poddotazy umožňují pokročilejší filtrování a projekci, včetně kontroly existence hodnot v polích:
SELECT VALUE p.name
FROM products p
WHERE EXISTS (
SELECT VALUE c FROM c IN p.metadata.colors WHERE c LIKE "%blue%"
)
Spouštění a dělení dotazů
Způsob strukturování dotazů má vliv na náklady na jejich spuštění. Zahrnutí klíče oddílu do klauzule WHERE umožňuje efektivní dotazy s jedním oddílem. Dotazy bez klíče oddílu se provádějí napříč všemi fyzickými oddíly, což zvyšuje latenci a spotřebu jednotek žádostí (RU).
Podrobné pokyny k návrhu dotazů pracujících s oddíly najdete v tématu Query kontejner Azure Cosmos DB a Partitioning a horizontální škálování.