Поделиться через


Что такое язык запросов в Cosmos DB (в Azure и Fabric)

Язык запросов предоставляет мощный синтаксис SQL для работы с данными JSON. Этот язык предназначен для ознакомления с пользователями с интерфейсом SQL, а также поддерживает гибкость и иерархический характер документов JSON. В этой статье представлены основные понятия, синтаксис и функции языка запросов.

Основные понятия языка запросов

Язык запросов построен для обеспечения четкого и эффективного доступа к данным, хранящимся в виде документов JSON. В своей основе язык предназначен для работы с иерархическими и гибкими данными, поддерживая как простые, так и сложные запросы по документам, которые могут иметь различные структуры.

Запросы создаются с помощью знакомого синтаксиса SQL, но адаптированы для модели документов. Эта адаптация означает, что, в отличие от традиционных реляционных баз данных, нет фиксированной схемы— свойства могут быть отсутствуют или имеют разные типы в документах. Язык учитывает регистр и поддерживает ссылки на вложенные свойства, массивы и объекты непосредственно в запросах. Доступны логические, сравнения и арифметические операторы, и язык предназначен для интуитивно понятных для разработчиков с опытом SQL, охватывая гибкость данных NoSQL.

Подсистема запросов оптимизирована для высокой производительности и масштабируемости, автоматически используя индексы для эффективного фильтрации, сортировки и агрегирования данных. Он поддерживает широкий спектр шаблонов запросов, от простых подстановок до сложных агрегатов и вложенных запросов. Эта поддержка позволяет обработчику запросов подходит как для транзакционных, так и для аналитических рабочих нагрузок. Язык также предоставляет конструкции для работы с массивами, обработки значений NULL и неопределенных значений, а также для проецирования результатов в гибких фигурах JSON. Эти конструкции позволяют разработчикам получать точно необходимые данные в формате, необходимом для своих приложений.

Базовая структура запросов

Типичный запрос состоит из следующих предложений:

  • SELECT: указывает, какие поля или значения следует возвращать.
  • FROM: определяет исходный контейнер и может назначать псевдоним.
  • WHERE: фильтрует документы на основе условий.
  • ORDER BY: сортирует результаты.
  • GROUP BY: группит результаты по одному или нескольким свойствам.

Пример: простой запрос

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

Этот запрос возвращает id и name продукты с ценой больше 20, отсортированных по цене по возрастанию.

Работа со свойствами JSON

Доступ к вложенным свойствам можно получить с помощью нотации точек или скобки:

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

Массивы можно просматривать с помощью JOIN или вложенных запросов:

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

Фильтрация данных

Предложение WHERE поддерживает широкий спектр операторов, включая арифметические, логические, сравнения и строковые операции:

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

Агрегирование и группирование

Вы можете использовать статистические функции и результаты группы:

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

Отдельные, верхние и подобные

  • DISTINCT удаляет повторяющиеся значения.
  • TOP N ограничивает количество результатов.
  • LIKE поддерживает сопоставление шаблонов с подстановочными знаками.
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%"

Подзапросы

Вложенные запросы позволяют выполнять более расширенную фильтрацию и проекцию, включая проверку наличия значений в массивах:

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