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


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

Это важно

Azure Cosmos DB для 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.