Azure Cosmos DB for PostgreSQL でテーブルを作成して配布する

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

この例では、Azure Cosmos DB for PostgreSQL 分散テーブルを使用して、GitHub オープンソース共同作成者により記録されたイベントを保存してクエリを実行します。

前提条件

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

  1. Azure portal でクラスターを作成します。
  2. psql を使用してクラスターに接続し、SQL コマンドを実行します。

テーブルの作成

psql 経由で接続できたら、テーブルを作成しましょう。 次のコマンドをコピーして psql ターミナル ウィンドウに貼り付け、Enter キーを押して実行します。

CREATE TABLE github_users
(
	user_id bigint,
	url text,
	login text,
	avatar_url text,
	gravatar_id text,
	display_login text
);

CREATE TABLE github_events
(
	event_id bigint,
	event_type text,
	event_public boolean,
	repo_id bigint,
	payload jsonb,
	repo jsonb,
	user_id bigint,
	org jsonb,
	created_at timestamp
);

CREATE INDEX event_type_index ON github_events (event_type);
CREATE INDEX payload_index ON github_events USING GIN (payload jsonb_path_ops);

github_eventspayload の GIN インデックスに注目してください。 インデックスを使用すると、JSONB 列で高速クエリを実行できます。 Citus は PostgreSQL 拡張機能であるため、Azure Cosmos DB for PostgreSQL は、半構造化データを格納するための JSONB データ型などの高度な PostgreSQL 機能をサポートしています。

テーブルの分散

create_distributed_table() は、テーブルを分散したり、複数のマシンにまたがってリソースを使用したりするために Azure Cosmos DB for PostgreSQL が提供するマジック関数です。 この関数はテーブルをシャードに分解します。シャードはストレージとコンピューティングのパフォーマンスを向上させるためにノード間で分散できます。

注意

実際のアプリケーションでは、ワークロードが 64 仮想コア、256 GB RAM、2TB ストレージに収まる場合は、単一ノード クラスターを使用できます。 この場合、テーブルの分散は省略可能です。 後で、必要に応じて create_distributed_table_concurrently を使用してテーブルを分散できます。

次のテーブルを分散しましょう。

SELECT create_distributed_table('github_users', 'user_id');
SELECT create_distributed_table('github_events', 'user_id');

重要

Azure Cosmos DB for PostgreSQL のパフォーマンス機能を利用するには、テーブルの分散またはスキーマ ベースのシャーディングの使用が必要です。 テーブルまたはスキーマを分散しない場合、ワーカー ノードでそのデータに関連するクエリを実行することができません。

分散テーブルへのデータの読み込み

サンプル データをテーブルに入力する準備ができました。 このクイック スタートでは、以前に GitHub API からキャプチャされたデータ セットを使用します。

pg_azure_storage 拡張機能を使って、Azure Blob Storage のパブリック コンテナーから直接データを読み込みます。 まず、データベースに拡張機能を作成する必要があります。

SELECT * FROM create_extension('azure_storage');

次のコマンドを実行することで、データベースからサンプル CSV ファイルをフェッチし、データベース テーブルに読み込みます。

-- download users and store in table

COPY github_users FROM 'https://pgquickstart.blob.core.windows.net/github/users.csv.gz';

-- download events and store in table

COPY github_events FROM 'https://pgquickstart.blob.core.windows.net/github/events.csv.gz';

コピー コマンドに指定された URL が Azure Blob Storage からのものであることを拡張機能がどのように認識したかを確認してください。指定したファイルは gzip 圧縮され、自動的に処理されます。

分散テーブルの詳細 (サイズを含む) を citus_tables ビューで確認できます。

SELECT * FROM citus_tables;
  table_name   | citus_table_type | distribution_column | colocation_id | table_size | shard_count | table_owner | access_method 
---------------+------------------+---------------------+---------------+------------+-------------+-------------+---------------
 github_events | distributed      | user_id             |             1 | 388 MB     |          32 | citus       | heap
 github_users  | distributed      | user_id             |             1 | 39 MB      |          32 | citus       | heap
(2 rows)

次のステップ

これで、分散テーブルが作成され、データが読み込まれました。 次に、分散テーブル間でクエリを実行してみましょう。