Skapa och distribuera tabeller i Azure Cosmos DB för PostgreSQL
GÄLLER FÖR: Azure Cosmos DB for PostgreSQL (drivs av Citus-databastillägget till PostgreSQL)
I det här exemplet använder vi Azure Cosmos DB for PostgreSQL-distribuerade tabeller för att lagra och fråga efter händelser som registrerats från GitHub-deltagare med öppen källkod.
Förutsättningar
Om du vill följa den här snabbstarten måste du först:
- Skapa ett kluster i Azure-portalen.
- Anslut till klustret med psql för att köra SQL-kommandon.
Skapa tabeller
När du har anslutit via psql ska vi skapa tabellen. Kopiera och klistra in följande kommandon i psql-terminalfönstret och tryck på Retur för att köra:
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);
Observera GIN-indexet på payload
i github_events
. Indexet tillåter snabba frågor i JSONB-kolumnen. Eftersom Citus är ett PostgreSQL-tillägg stöder Azure Cosmos DB for PostgreSQL avancerade PostgreSQL-funktioner som JSONB-datatypen för lagring av halvstrukturerade data.
Distribuera tabeller
create_distributed_table()
är den magiska funktion som Azure Cosmos DB for PostgreSQL tillhandahåller för att distribuera tabeller och använda resurser på flera datorer. Funktionen delar upp tabeller i shards, som kan spridas över noder för ökad lagrings- och beräkningsprestanda.
Kommentar
När din arbetsbelastning passar i 64 virtuella kärnor, 256 GB RAM-minne och 2 TB lagring i verkliga program kan du använda ett kluster med en nod. I det här fallet är det valfritt att distribuera tabeller. Senare kan du distribuera tabeller efter behov med hjälp av create_distributed_table_concurrently.
Nu ska vi distribuera tabellerna:
SELECT create_distributed_table('github_users', 'user_id');
SELECT create_distributed_table('github_events', 'user_id');
Viktigt!
Det är nödvändigt att distribuera tabeller eller använda schemabaserad horisontell partitionering för att dra nytta av prestandafunktionerna i Azure Cosmos DB for PostgreSQL. Om du inte distribuerar tabeller eller scheman kan arbetsnoder inte hjälpa till att köra frågor som rör deras data.
Läsa in data i distribuerade tabeller
Vi är redo att fylla tabellerna med exempeldata. I den här snabbstarten använder vi en datauppsättning som tidigare samlats in från GitHub-API:et.
Vi ska använda tillägget pg_azure_storage för att läsa in data direkt från en offentlig container i Azure Blob Storage. Först måste vi skapa tillägget i vår databas:
SELECT * FROM create_extension('azure_storage');
Kör följande kommandon för att låta databasen hämta csv-exempelfilerna och läsa in dem i databastabellerna.
-- 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';
Observera hur tillägget kände igen att URL:erna som tillhandahålls till kopieringskommandot kommer från Azure Blob Storage, filerna som vi pekade på komprimerades med gzip och som också hanterades automatiskt åt oss.
Vi kan granska information om våra distribuerade tabeller, inklusive deras storlekar, med citus_tables
vyn:
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)
Nästa steg
Nu har vi distribuerat tabeller och läst in dem med data. Nu ska vi prova att köra frågor i de distribuerade tabellerna.