在 Azure Cosmos DB for PostgreSQL 中建立和散發資料表
適用於: Azure Cosmos DB for PostgreSQL (由 PostgreSQL 的超大規模 (Citus) 資料庫延伸模組提供)
在此範例中,我們會使用 Azure Cosmos DB for PostgreSQL 分散式資料表,儲存並查詢 GitHub 開放原始碼參與者記錄的事件。
必要條件
若要遵循此快速入門,您首先必須:
建立表格
在您透過 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_events
中 payload
上的 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)
下一步
現在我們已散發資料表,並使用資料載入。 接下來,讓我們嘗試跨分散式資料表執行查詢。