在 Azure Cosmos DB for PostgreSQL 中建立和散發資料表

適用於: Azure Cosmos DB for PostgreSQL (由 PostgreSQL 的超大規模 (Citus) 資料庫延伸模組提供)

在此範例中,我們會使用 Azure Cosmos DB for PostgreSQL 分散式資料表,儲存並查詢 GitHub 開放原始碼參與者記錄的事件。

必要條件

若要遵循此快速入門,您首先必須:

  1. 在 Azure 入口網站中建立叢集
  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 支援進階 PostgreSQL 功能,例如 JSONB 資料類型來儲存半結構化資料。

散發資料表

create_distributed_table() 是 Azure Cosmos DB for PostgreSQL 的 magic 函式,不僅可以散發資料表,還可以跨多部機器使用資源。 函式會將資料表分解成分區,可分散到各節點以增加儲存體和計算效能。

注意

在實際應用程式中,當您的工作負載符合 64 個虛擬核心、256GB 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 儲存體中的公用容器載入資料。 首先,我們需要在資料庫中建立擴充功能:

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 儲存體,我們指向的檔案是 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)

下一步

現在我們已散發資料表,並使用資料載入。 接下來,讓我們嘗試跨分散式資料表執行查詢。