Azure Cosmos DB for PostgreSQL でクエリを実行する

適用対象: Azure Cosmos DB for PostgreSQL (PostgreSQL の Citus データベース拡張機能を利用)

前提条件

このクイックスタートを実行するには、まず次のことを行う必要があります。

  1. Azure portal でクラスターを作成します。
  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 を使用したアプリケーションの構築方法を学ぶ準備ができました。