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


Выполнение запросов в Azure Cosmos DB для PostgreSQL

Область применения: Azure Cosmos DB для PostgreSQL (на базе расширения базы данных Citus до PostgreSQL)

Необходимые компоненты

Чтобы следовать этому краткому руководству, сначала нужно сделать следующее:

  1. Создайте кластер в портал Azure.
  2. Подключитесь к кластеру с помощью psql для выполнения команд SQL.
  3. Создайте и распределите таблицы с использованием нашего примера набора данных.

Распределенные запросы

Теперь можно приступить к самой интересной части нашей серии кратких руководств — выполнению запросов. Начнем с простого 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.