Getting started with SQL queries (Начало работы с запросами SQL)
ОБЛАСТЬ ПРИМЕНЕНИЯ:
API SQL
В учетных записях API SQL Azure Cosmos DB имеются два способа чтения данных.
Операции точечного чтения. Поиск пары "ключ-значение" можно выполнить по одному ИД элемента и ключу секции. Сочетание ИД элемента и ключа секции является ключом, а сам элемент является значением. Для документа размером 1 КБ, стоимость операций точечного чтения обычно составляет 1 единицу запроса, а задержка — менее 10 мс. Операции точечного чтения возвращают один элемент.
Ниже приведены некоторые примеры того, как выполнять Операции точечного чтения с каждым пакетом SDK.
Запросы SQL. Позволяет запрашивать данные, путем создания запросов с помощью SQL в качестве языка запросов JSON. Стоимость операций запросов всегда составляет по крайней мере 2.3 единицы запросов. Операции запросов как правило, имеют более высокую и переменную задержку, чем операции точечного чтения. Запросы могут возвращать много элементов.
Большинство рабочих нагрузок с интенсивными операциями чтения в Azure Cosmos DB используют сочетание операций точечного чтения и запросов SQL. Если требуется просто прочитать один элемент — лучше использовать операции точечного чтения, поскольку они дешевле и быстрее, чем запросы. При точечном чтении не требуется использовать обработчик запросов для доступа к данным. Их можно считываться напрямую. Конечно, не все рабочие нагрузки могут считывать данные исключительно с использованием операций точечного чтения, поэтому поддержка SQL в качестве языка запросов и независимое от схемы индексирование обеспечивает более гибкий способ доступа к данным.
Ниже приведены некоторые примеры того, как выполнять Запросы SQL с каждым пакетом SDK.
Ниже показано, как приступить к написанию запросов SQL в Azure Cosmos DB. Запросы SQL можно выполнять через пакет SDK или портал Azure.
Отправка примера данных
В учетной записи Cosmos DB для API SQL откройте Обозреватель данных, чтобы создать контейнер с именем Families. Как только контейнер будет создан, воспользуйтесь браузером структуры данных, чтобы найти и открыть его. В контейнере Families вы увидите параметр Items справа под его именем. Откройте этот параметр, и в строке меню в центре экрана вы увидите кнопку для создания нового элемента. Эта функция будет использоваться для создания элементов JSON ниже.
Создание элементов JSON
Следующие 2 элемента JSON представляют собой документы о семействе Андерсен и Вейкфилд. Они содержат сведения о родителях, детях и их домашних животных, адрес и регистрационные данные.
В первом элементе есть строки, числа, логические значения, массивы и вложенные свойства.
{
"id": "AndersenFamily",
"lastName": "Andersen",
"parents": [
{ "firstName": "Thomas" },
{ "firstName": "Mary Kay"}
],
"children": [
{
"firstName": "Henriette Thaulow",
"gender": "female",
"grade": 5,
"pets": [{ "givenName": "Fluffy" }]
}
],
"address": { "state": "WA", "county": "King", "city": "Seattle" },
"creationDate": 1431620472,
"isRegistered": true
}
Второй элемент использует givenName и familyName вместо firstName и lastName:
{
"id": "WakefieldFamily",
"parents": [
{ "familyName": "Wakefield", "givenName": "Robin" },
{ "familyName": "Miller", "givenName": "Ben" }
],
"children": [
{
"familyName": "Merriam",
"givenName": "Jesse",
"gender": "female",
"grade": 1,
"pets": [
{ "givenName": "Goofy" },
{ "givenName": "Shadow" }
]
},
{
"familyName": "Miller",
"givenName": "Lisa",
"gender": "female",
"grade": 8 }
],
"address": { "state": "NY", "county": "Manhattan", "city": "NY" },
"creationDate": 1431620462,
"isRegistered": false
}
Запрос элементов JSON
Попробуйте выполнить несколько запросов к этим данным JSON, чтобы понять некоторые ключевые аспекты языка запросов SQL в Azure Cosmos DB.
Указанный ниже запрос вернет элементы, в которых поле id совпадает с AndersenFamily. Поскольку это запрос SELECT *, результатом выполнения запроса является сформированный элемент JSON. Дополнительные сведения о синтаксисе SELECT см. в разделе Инструкция SELECT.
SELECT *
FROM Families f
WHERE f.id = "AndersenFamily"
Результаты запроса.
[{
"id": "AndersenFamily",
"lastName": "Andersen",
"parents": [
{ "firstName": "Thomas" },
{ "firstName": "Mary Kay"}
],
"children": [
{
"firstName": "Henriette Thaulow", "gender": "female", "grade": 5,
"pets": [{ "givenName": "Fluffy" }]
}
],
"address": { "state": "WA", "county": "King", "city": "Seattle" },
"creationDate": 1431620472,
"isRegistered": true
}]
Следующий запрос переформатирует выходные данные JSON в другую форму. Этот запрос создает новый объект JSON Family с двумя выбранными полями, Name и City, если название города совпадает с названием штата. В таком случае совпадут значения "NY" и "NY".
SELECT {"Name":f.id, "City":f.address.city} AS Family
FROM Families f
WHERE f.address.city = f.address.state
Результаты запроса.
[{
"Family": {
"Name": "WakefieldFamily",
"City": "NY"
}
}]
Следующий запрос возвращает все заданные имена детей в семье, id которых соответствует WakefieldFamily, упорядоченные по городу проживания.
SELECT c.givenName
FROM Families f
JOIN c IN f.children
WHERE f.id = 'WakefieldFamily'
ORDER BY f.address.city ASC
Результаты:
[
{ "givenName": "Jesse" },
{ "givenName": "Lisa"}
]
Remarks
В предыдущих примерах показано несколько аспектов языка запросов Cosmos DB.
Так как SQL API работает со значениями JSON, он имеет дело с сущностями в виде деревьев, а не со строками и столбцами. Можно ссылаться на узлы дерева на любой произвольной глубине, например
Node1.Node2.Node3…..Nodem, подобно ссылке из двух частей<table>.<column>в ANSI SQL.Поскольку язык запросов работает с данными без схемы, система типов должна быть привязана динамически. Одно и то же выражение может возвращать различные типы у разных элементов. Результатом запроса является допустимое значение JSON, но оно не обязательно будет иметь фиксированную схему.
Azure Cosmos DB поддерживает только элементы, строго соответствующие JSON. Система типов и выражения могут обрабатывать только типы JSON. Дополнительные сведения см. в спецификациях JSON.
Контейнер Cosmos является коллекцией элементов JSON, не имеющей схемы. Отношения внутри и между элементами в этом контейнере неявным образом отражены по вложенности, а не задаются связями между первичными и внешними ключами. Эта функция важна для соединений внутри элемента, описанных в разделе Соединения в базе данных Azure Cosmos DB.
Дальнейшие действия
- Общие сведения об Azure Cosmos DB
- Примеры .NET для Azure Cosmos DB
- Предложение SELECT
- Пытаетесь планировать ресурсы для миграции на Azure Cosmos DB? Можете использовать для этого сведения о существующем кластере базы данных.
- Если вам известно только количество виртуальных ядер и серверов в существующем кластере баз данных, прочитайте об оценке единиц запроса на основе этих данных.
- Если вам известна стандартная частота запросов для текущей рабочей нагрузки базы данных, ознакомьтесь со статьей о расчете единиц запросов с помощью планировщика ресурсов Azure Cosmos DB