Выполнение запросов в Azure Cosmos DB для PostgreSQL
Область применения: Azure Cosmos DB для PostgreSQL (на базе расширения базы данных Citus до PostgreSQL)
Необходимые компоненты
Чтобы следовать этому краткому руководству, сначала нужно сделать следующее:
- Создайте кластер в портал Azure.
- Подключитесь к кластеру с помощью psql для выполнения команд SQL.
- Создайте и распределите таблицы с использованием нашего примера набора данных.
Распределенные запросы
Теперь можно приступить к самой интересной части нашей серии кратких руководств — выполнению запросов.
Начнем с простого count (*)
, чтобы проверить объем данных, загруженных в предыдущем разделе.
-- count all rows (across shards)
SELECT count(*) FROM github_users;
count
--------
264308
(1 row)
Помните, что github_users
— это распределенная таблица, то есть ее данные поделены между несколькими сегментами. Azure Cosmos DB для PostgreSQL автоматически запускает количество всех сегментов параллельно и объединяет результаты.
Давайте продолжим изучение дополнительных примеров запросов:
-- Find all events for a single user.
-- (A common transactional/operational query)
SELECT created_at, event_type, repo->>'name' AS repo_name
FROM github_events
WHERE user_id = 3861633;
created_at | event_type | repo_name
---------------------+--------------+--------------------------------------
2016-12-01 06:28:44 | PushEvent | sczhengyabin/Google-Image-Downloader
2016-12-01 06:29:27 | CreateEvent | sczhengyabin/Google-Image-Downloader
2016-12-01 06:36:47 | ReleaseEvent | sczhengyabin/Google-Image-Downloader
2016-12-01 06:42:35 | WatchEvent | sczhengyabin/Google-Image-Downloader
2016-12-01 07:45:58 | IssuesEvent | sczhengyabin/Google-Image-Downloader
(5 rows)
Более сложные запросы
Ниже приведен пример более сложного запроса, который извлекает почасовую статистику для событий Push на GitHub. Для обработки полуструктурированных данных используется функция JSONB из PostgreSQL.
-- Querying JSONB type. Query is parallelized across nodes.
-- Find the number of commits on the default branch per hour
SELECT date_trunc('hour', created_at) AS hour,
sum((payload->>'distinct_size')::int) AS num_commits
FROM github_events
WHERE event_type = 'PushEvent' AND
payload @> '{"ref":"refs/heads/master"}'
GROUP BY hour
ORDER BY hour;
hour | num_commits
---------------------+-------------
2016-12-01 05:00:00 | 13051
2016-12-01 06:00:00 | 43480
2016-12-01 07:00:00 | 34254
2016-12-01 08:00:00 | 29307
(4 rows)
Azure Cosmos DB для PostgreSQL объединяет возможности хранилищ данных SQL и NoSQL с структурированными и полуструктурированных данными.
Помимо выполнения запросов, Azure Cosmos DB для PostgreSQL также применяет изменения определения данных в сегментах распределенной таблицы:
-- DDL commands that are also parallelized
ALTER TABLE github_users ADD COLUMN dummy_column integer;
Следующие шаги
Вы успешно создали масштабируемый кластер, создали таблицы, распределили их, загружали данные и запускали распределенные запросы.
Теперь вы готовы научиться создавать приложения с помощью Azure Cosmos DB для PostgreSQL.