クイック スタート:Azure portal で Azure Database for PostgreSQL - Hyperscale (Citus) (プレビュー) を作成するQuickstart: Create an Azure Database for PostgreSQL - Hyperscale (Citus) (preview) in the Azure portal

Azure Database for PostgreSQL は、高可用性の PostgreSQL データベースをクラウドで実行、管理、スケールできるマネージド サービスです。Azure Database for PostgreSQL is a managed service that you use to run, manage, and scale highly available PostgreSQL databases in the cloud. このクイック スタートでは、Azure portal を使用して Azure Database for PostgreSQL - Hyperscale (Citus) (プレビュー) サーバー グループを作成する方法について説明します。This Quickstart shows you how to create an Azure Database for PostgreSQL - Hyperscale (Citus) (preview) server group using the Azure portal. ノード間でテーブルをシャード化したり、サンプル データを取り込んだり、複数のノードでクエリを実行したり、分散データをいろいろ試してみます。You'll explore distributed data: sharding tables across nodes, ingesting sample data, and running queries that execute on multiple nodes.

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't have an Azure subscription, create a free account before you begin.

Azure portal にサインインしますSign in to the Azure portal

Azure Portal にサインインします。Sign in to the Azure portal.

Azure Database for PostgreSQL - Hyperscale (Citus) の作成Create an Azure Database for PostgreSQL - Hyperscale (Citus)

Azure Database for PostgreSQL サーバーを作成するには、次の手順に従います。Follow these steps to create an Azure Database for PostgreSQL server:

  1. Azure Portal の左上隅にある [リソースの作成] をクリックします。Click Create a resource in the upper left-hand corner of the Azure portal.

  2. [新規] ページで [データベース] を選択し、 [データベース] ページで [Azure Database for PostgreSQL] を選択します。Select Databases from the New page, and select Azure Database for PostgreSQL from the Databases page.

  3. デプロイ オプションについては、 [Hyperscale (Citus) サーバー グループ - プレビュー] の下にある [作成] ボタンをクリックします。For the deployment option, click the Create button under Hyperscale (Citus) server group - PREVIEW.

  4. 新しいサーバーの詳細フォームには次の情報を入力してください。Fill out the new server details form with the following information:

    • リソース グループ: このフィールドのテキスト ボックスの下の [新規作成] リンクをクリックします。Resource group: click the Create new link below the text box for this field. myresourcegroup などの名前を入力します。Enter a name such as myresourcegroup.
    • サーバー グループ名: 新しいサーバー グループの一意の名前を入力します。これはサーバー サブドメインにも使用されます。Server group name: enter a unique name for the new server group, which will also be used for a server subdomain.
    • 管理者ユーザー名: 現在、値 citus である必要があり、変更することはできません。Admin username: currently required to be the value citus, and can't be changed.
    • パスワード: 少なくとも 8 文字で、次のカテゴリのうち 3 つのカテゴリの文字が含まれている必要があります。英字大文字、英字小文字、数字 (0 から 9)、英数字以外の文字 (!、$、#、% など)。Password: must be at least eight characters long and contain characters from three of the following categories – English uppercase letters, English lowercase letters, numbers (0-9), and non-alphanumeric characters (!, $, #, %, and so on.)
    • 場所: データに最速でアクセスできるよう、お客様のユーザーに最も近い場所を使用します。Location: use the location that is closest to your users to give them the fastest access to the data.

    重要

    ここで指定するサーバー管理者のパスワードは、サーバーとそのデータベースにログインするために必要です。The server admin password that you specify here is required to log in to the server and its databases. 後で使用するために、この情報を覚えておくか、記録しておきます。Remember or record this information for later use.

  5. [サーバー グループの構成] をクリックします。Click Configure server group. そのセクションの設定を変更しないで、 [保存] をクリックします。Leave the settings in that section unchanged and click Save.

  6. [確認と作成][作成] の順にクリックして、サーバーをプロビジョニングします。Click Review + create and then Create to provision the server. プロビジョニングには数分かかります。Provisioning takes a few minutes.

  7. ページは、デプロイを監視するためにリダイレクトされます。The page will redirect to monitor deployment. ライブ状態が [デプロイが進行中です] から [デプロイが完了しました] に変わったら、ページの左側にある [出力] メニュー項目をクリックします。When the live status changes from Your deployment is underway to Your deployment is complete, click the Outputs menu item on the left of the page.

  8. 出力ページには、コーディネーターのホスト名が含まれており、値をクリップボードにコピーするためのボタンが横に付いています。The outputs page will contain a coordinator hostname with a button next to it to copy the value to the clipboard. 後で使用するために、この情報を記録しておきます。Record this information for later use.

サーバーレベルのファイアウォール規則の構成Configure a server-level firewall rule

Azure Database for PostgreSQL - Hyperscale (Citus) (プレビュー) サービスは、サーバーレベルでファイアウォールを使用します。The Azure Database for PostgreSQL – Hyperscale (Citus) (preview) service uses a firewall at the server-level. 既定では、ファイアウォールは、すべての外部のアプリケーションとツールがコーディネーター ノードやデータベースに接続することを防止します。By default, the firewall prevents all external applications and tools from connecting to the coordinator node and any databases inside. 特定の IP アドレス範囲のファイアウォールを開放する規則を追加する必要があります。We must add a rule to open the firewall for a specific IP address range.

  1. コーディネーター ノードのホスト名を以前にコピーした [出力] セクションから、[戻る] をクリックして [概要] メニュー項目に戻ります。From the Outputs section where you previously copied the coordinator node hostname, click back into the Overview menu item.

  2. デプロイのサーバー グループの名前を探してクリックします。Find the name of your deployment's server group and click it. (サーバー グループ名はサフィックスがありません(The server group name will not have a suffix. 名前の末尾が "-c"、"-w0"、"-w1" などのサーバーはサーバー グループではありません)。Items with names ending in, for example, "-c", "-w0", or "-w1" are not the server group.)

  3. 左側のメニューの [セキュリティ] の下にある [ファイアウォール] をクリックします。Click Firewall under Security in the left-hand menu.

  4. [+ 現在のクライアント IP アドレスに対するファイアウォール規則の追加] リンクをクリックします。Click the link + Add firewall rule for current client IP address.

  5. 最後に、 [保存] ボタンをクリックします。Finally, click the Save button.

    注意

    Azure PostgreSQL サーバーはポート 5432 を介して通信します。Azure PostgreSQL server communicates over port 5432. 企業ネットワーク内から接続しようとしても、ポート 5432 での送信トラフィックがネットワークのファイアウォールで禁止されている場合があります。If you are trying to connect from within a corporate network, outbound traffic over port 5432 may not be allowed by your network's firewall. その場合、会社の IT 部門によってポート 5432 が開放されない限り、Azure SQL Database サーバーに接続することはできません。If so, you cannot connect to your Azure SQL Database server unless your IT department opens port 5432.

psql を使用したデータベースへの接続Connect to the database using psql

Azure Database for PostgreSQL サーバーを作成したときに、citus という名前の既定のデータベースも作成されています。When you create your Azure Database for PostgreSQL server, a default database named citus is created. データベース サーバーに接続するには、接続文字列と管理者パスワードが必要です。To connect to your database server, you need a connection string and the admin password.

  1. 接続文字列を取得します。Obtain the connection string. サーバー グループ ページで、 [接続文字列] メニュー項目をクリックします。In the server group page click the Connection strings menu item. ( [設定] の下にあります)。C++ (libpq) のマークが付けられている文字列を見つけます。(It's under Settings.) Find the string marked C++ (libpq). 次のような形式になります。It will be of the form:

    host=hostname.postgres.database.azure.com port=5432 dbname=citus user=citus password={your_password} sslmode=require
    

    文字列をコピーします。Copy the string. "{your_password}" を以前に選択した管理者パスワードに置き換える必要があります。You will need to replace "{your_password}" with the administrative password you chose earlier. システムは、プレーンテキストのパスワードを保存しないため、接続文字列に表示できません。The system doesn't store your plaintext password and so can't display it for you in the connection string.

  2. ローカル コンピューターでターミナル ウィンドウを開きます。Open a terminal window on your local computer.

  3. プロンプトで、psql ユーティリティを使用して Azure Database for PostgreSQL サーバーに接続します。At the prompt, connect to your Azure Database for PostgreSQL server with the psql utility. パスワードが含まれていることを確認して、接続文字列を引用符で囲んで渡します。Pass your connection string in quotes, being sure it contains your password:

    psql "{connection_string}"
    

    たとえば、次のコマンドは、サーバー グループ mydemoserver のコーディネーター ノードに接続します。For example, the following command connects to the coordinator node of the server group mydemoserver:

    psql "host=mydemoserver-c.postgres.database.azure.com port=5432 dbname=citus user=citus password={your_password} sslmode=require"
    

テーブルを作成して配布するCreate and distribute tables

psql を使用し、ハイパースケール コーディネーター ノードに接続したら、基本的なタスクの一部を完了できます。Once connected to the hyperscale coordinator node using psql, you can complete some basic tasks.

ハイパースケール サーバー内には、3 種類のテーブルがあります。Within Hyperscale servers there are three types of tables:

  • 分散またはシャード化されたテーブル (パフォーマンスと並列処理のための拡張を支援する目的で分散されます)Distributed or sharded tables (spread out to help scaling for performance and parallelization)
  • 参照テーブル (複数のコピーを保持)Reference tables (multiple copies maintained)
  • ローカル テーブル (多くの場合、内部管理テーブルとして使用)Local tables (often used for internal admin tables)

このクイック スタートでは、分散テーブルとこれをよく理解することに重点を置きます。In this quickstart, we'll primarily focus on distributed tables and getting familiar with them.

これから使用するデータ モデルはシンプルです。GitHub のユーザーとイベント データを使用します。The data model we're going to work with is simple: user and event data from GitHub. イベントには、フォーク作成や組織に関連する git コミットなどがあります。Events include fork creation, git commits related to an organization, and more.

psql 経由で接続できたら、テーブルを作成しましょう。Once you've connected via psql, let's create our tables. psql コンソールで次を実行します。In the psql console run:

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 TABLE github_users
(
    user_id bigint,
    url text,
    login text,
    avatar_url text,
    gravatar_id text,
    display_login text
);

github_eventspayload フィールドには JSONB データ型があります。The payload field of github_events has a JSONB datatype. JSONB は Postgres におけるバイナリ形式の JSON データ型です。JSONB is the JSON datatype in binary form in Postgres. データ型により、柔軟なスキーマを 1 つの列に簡単に格納できます。The datatype makes it easy to store a flexible schema in a single column.

Postgres では、その中にあるすべてのキーと値にインデックスを作成するこの型で GIN インデックスを作成できます。Postgres can create a GIN index on this type, which will index every key and value within it. インデックスがあると、さまざまな条件でペイロードに簡単にクエリを実行できます。With an index, it becomes fast and easy to query the payload with various conditions. それでは、データを読み込む前にインデックスをいくつか作成してみましょう。Let's go ahead and create a couple of indexes before we load our data. psql で:In psql:

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

次に、コーディネーター ノードの Postgres テーブルを選択し、worker 間でシャード化するように Hyperscale に指示します。Next we’ll take those Postgres tables on the coordinator node and tell Hyperscale to shard them across the workers. その際、シャード化するためのキーを指定し、各テーブルにクエリを実行します。To do so, we’ll run a query for each table specifying the key to shard it on. 現在の例では、user_id でイベントとユーザーのテーブルをシャード化します。In the current example we’ll shard both the events and users table on user_id:

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

データを読み込む準備ができました。We're ready to load data. psql でも、シェルアウトして、ファイルをダウンロードします。In psql still, shell out to download the files:

\! curl -O https://examples.citusdata.com/users.csv
\! curl -O https://examples.citusdata.com/events.csv

次に、ファイルから分散テーブルに、データを読み込みます。Next, load the data from the files into the distributed tables:

\copy github_events from 'events.csv' WITH CSV
\copy github_users from 'users.csv' WITH CSV

クエリを実行するRun queries

次は面白い部分です。クエリをいくつか実際に実行します。Now it's time for the fun part, actually running some queries. 単純な count (*) から初めて読み込んだデータの量を確認しましょう。Let's start with a simple count (*) to see how much data we loaded:

SELECT count(*) from github_events;

問題なく動作しました。That worked nicely. この種の集計にはすぐに戻りますが、今は他のクエリをいくつか見てみましょう。We'll come back to that sort of aggregation in a bit, but for now let’s look at a few other queries. JSONB payload 列内に、データが数多くありますが、これはイベントの種類によって異なります。Within the JSONB payload column there's a good bit of data, but it varies based on event type. PushEvent イベントには、プッシュ用の個別コミットが多く含まれるサイズがあります。PushEvent events contain a size that includes the number of distinct commits for the push. これを使用し、時間あたりのコミット総数を見つけることができます。We can use it to find the total number of commits 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'
GROUP BY hour
ORDER BY hour;

これまでのところ、クエリには github_events だけが関係していましたが、この情報を github_users と組み合わせることができます。So far the queries have involved the github_events exclusively, but we can combine this information with github_users. ユーザーとイベントを両方、同じ ID (user_id) でシャード化したため、ユーザー ID が一致する両テーブルの行は同じデータベース ノードと同じ場所に配置され、簡単に結合できます。Since we sharded both users and events on the same identifier (user_id), the rows of both tables with matching user IDs will be colocated on the same database nodes and can easily be joined.

user_id で結合した場合、Hyperscale は、worker ノードで並列実行するため、結合実行をシャードにプッシュできます。If we join on user_id, Hyperscale can push the join execution down into shards for execution in parallel on worker nodes. たとえば、リポジトリを最も多く作成したユーザーを見つけましょう。For example, let's find the users who created the greatest number of repositories:

SELECT login, count(*)
FROM github_events ge
JOIN github_users gu
ON ge.user_id = gu.user_id
WHERE event_type = 'CreateEvent' AND
      payload @> '{"ref_type": "repository"}'
GROUP BY login
ORDER BY count(*) DESC;

リソースのクリーンアップClean up resources

前の手順では、サーバー グループ内に Azure リソースを作成しました。In the preceding steps, you created Azure resources in a server group. これらのリソースが将来不要であると思われる場合は、サーバー グループを削除します。If you don't expect to need these resources in the future, delete the server group. サーバー グループの [概要] ページで、 [削除] ボタンを押します。Press the Delete button in the Overview page for your server group. ポップアップ ページでメッセージが表示されたら、サーバー グループの名前を確認し、最後の [削除] ボタンをクリックします。When prompted on a pop-up page, confirm the name of the server group and click the final Delete button.

次の手順Next steps

このクイック スタートでは、Hyperscale (Citus) サーバー グループのプロビジョニング方法を学習しました。In this quickstart, you learned how to provision a Hyperscale (Citus) server group. そのサーバー グループに psql で接続し、スキーマを作成して、データを分散しました。You connected to it with psql, created a schema, and distributed data.

次に、チュートリアルに従い、拡張性の高いマルチテナント アプリケーションを構築します。Next, follow a tutorial to build scalable multi-tenant applications.