はじめに
前回はAzure CosmosDB for PostgreSQLの試用版を試しましたが、今回はAzure無料アカウントでCosmosDB for PostgreSQLのクラスタ作成してみました。
- 無料アカウント作成手順はこちら
https://qiita.com/mushipan66/items/4bc238a5423807d585ca
クラスタ作成
- Azureポータルにサインインし、Cosmos DBの画面を開き、「Azure Cosmos DBアカウントの作成」をクリックする。
-
「Basics」タブで設定値を入力し、「次へ:ネットワーク」をクリックする。
Scaleは「Configure」をクリックすると以下の画面が表示され変更可能。
「Node count」を「2 nodes」に変更して保存をクリックする。
-
「ネットワーク」タブで設定値を以下のように入力し、「レビュー+作成」をクリックする。
クラスタ接続
-
事前準備
- 左ペインで「接続文字列」をクリックし、表示された画面で「psql」の文字列をコピーしてメモ帳などに張り付ける。
- コピーした文字列の「{your_password}」の箇所をクラスタ作成で入力したパスワードに書き換える。
-
CloudShellからの接続
接続できない場合、左ペインのネットワークで「Allow public access from Azure serviced and resourced within Azure to this cluster.」にチェックが入っていることを確認する。
入っていない場合はチェックを入れて保存すると接続できる。
ローカルマシンからの接続をしたい場合、ネットワーク画面で「Add current client IP address」をクリックし、ローカルマシンのIPを許可するルールを作成することで接続可能になる。
クイックスタートを試す
前回同様クイックスタートを試してみました。
内容同じですが一応実行結果を載せます。
citus=> CREATE TABLE github_users
(
user_id bigint,
url text,
login text,
avatar_url text,
gravatar_id text,
display_login text
);
CREATE TABLE
citus=> 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
citus=> CREATE INDEX event_type_index ON github_events (event_type);
CREATE INDEX
citus=> CREATE INDEX payload_index ON github_events USING GIN (payload jsonb_path_ops);
CREATE INDEX
citus=> SELECT create_distributed_table('github_users', 'user_id');
create_distributed_table
--------------------------
(1 row)
citus=> SELECT create_distributed_table('github_events', 'user_id');
create_distributed_table
--------------------------
(1 row)
citus=> SELECT * FROM create_extension('azure_storage');
create_extension
------------------
(1 row)
citus=> -- 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';
COPY 264308
COPY 126245
Cloud Shellから実施した場合は前回発生した文字コードの問題が発生しませんでした。
citus=> 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 | 260 MB | 32 | citus | heap
github_users | distributed | user_id | 1 | 39 MB | 32 | citus | heap
(2 rows)
citus=> -- count all rows (across shards)
SELECT count(*) FROM github_users;
count
--------
264308
(1 row)
citus=> -- 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)
citus=> -- 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)
citus=> -- DDL commands that are also parallelized
ALTER TABLE github_users ADD COLUMN dummy_column integer;
ALTER TABLE
(参考)クラスタの削除
コストが高く、無料枠を使い切りそうだったので最後にクラスタを削除しました。
削除をクリックして確認のチェックボックスにチェックを入れると削除できます。
おわりに
無料アカウントでもクラスタの作成ができました!
最後までお読みいただき、ありがとうございました。
参考