在 Azure Cosmos DB for PostgreSQL 中运行查询

适用对象: Azure Cosmos DB for PostgreSQL(由 PostgreSQL 的 Citus 数据库扩展提供支持)

先决条件

若要按照本快速入门操作,首先需要:

  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 for 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)

更加复杂的查询

下面是一个更复杂的查询示例,它检索 GitHub 上推送事件的每小时统计信息。 该查询使用 PostgreSQL 的 JSONB 功能来处理半结构化数据。

-- 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 for PostgreSQL 将 SQL 和 NoSQL 数据存储的强大功能与结构化和半结构化数据相结合。

除了运行查询之外,Azure Cosmos DB for PostgreSQL 还会将数据定义更改应用于分布式表的分片:

-- DDL commands that are also parallelized

ALTER TABLE github_users ADD COLUMN dummy_column integer;

后续步骤

你已成功创建了一个可缩放群集、创建了表、分配了表、加载了数据,并且运行了分布式查询。

现在可以了解如何使用 Azure Cosmos DB for PostgreSQL 生成应用程序。