Erstellen und Verteilen von Tabellen

GILT FÜR: PostgreSQL

In diesem Beispiel verwenden wir verteilte Azure Cosmos DB for PostgreSQL-Tabellen zum Speichern und Abfragen von Ereignissen, die von GitHub-Open-Source-Mitwirkenden aufgezeichnet wurden.

Voraussetzungen

Für diesen Schnellstart müssen Sie zunächst Folgendes ausführen:

  1. Erstellen eines Clusters im Azure-Portal.
  2. Herstellen einer Verbindung mit dem Cluster mithilfe von psql, um SQL-Befehle auszuführen.

Erstellen von Tabellen

Nachdem Sie über psql eine Verbindung hergestellt haben, können Sie die Tabelle erstellen. Kopieren Sie die folgenden Befehle, fügen Sie sie in das psql-Terminalfenster ein, und drücken Sie zum Ausführen die EINGABETASTE:

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);

Beachten Sie den GIN-Index von payload in github_events. Der Index ermöglicht schnelles Abfragen in der JSONB-Spalte. Da Citus eine PostgreSQL-Erweiterung ist, unterstützt Azure Cosmos DB for PostgreSQL erweiterte PostgreSQL-Features wie den JSONB-Datentyp zum Speichern teilweise strukturierter Daten.

Verteilen von Tabellen

create_distributed_table() ist die magische Funktion, die Azure Cosmos DB for PostgreSQL bereitstellt, um Tabellen zu verteilen und Ressourcen auf mehreren Computern zu verwenden. Die Funktion zerlegt Tabellen in Shards, die auf Knoten verteilt werden können, um die Compute- und Rechenleistung zu erhöhen.

Hinweis

Wenn Ihre Workload in realen Anwendungen in 64 virtuelle Kerne, 256 GB RAM und 2 TB Speicher passt, können Sie einen Einzelknotencluster verwenden. In diesem Fall ist das Verteilen von Tabellen optional. Später können Sie Tabellen nach Bedarf mithilfe von create_distributed_table_concurrently verteilen.

Lassen Sie uns die Tabellen nun verteilen:

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

Wichtig

Die Verteilung von Tabellen ist erforderlich, um die Vorteile der Leistungsfeatures von Azure Cosmos DB for PostgreSQL zu nutzen. Wenn Sie keine Tabellen verteilen, können Workerknoten nicht beim Ausführen von Abfragen helfen, die diese Tabellen betreffen.

Laden von Daten in verteilte Tabellen

Wir sind bereit, die Tabellen mit Beispieldaten aufzufüllen. In diesen Schnellstart verwenden wir ein Dataset, das zuvor aus der GitHub-API erfasst wurde.

Wir verwenden die pg_azure_storage-Erweiterung, um die Daten direkt aus einem öffentlichen Container in Azure Blob Storage zu laden. Zuerst müssen wir die Erweiterung in unserer Datenbank erstellen:

SELECT * FROM create_extension('azure_storage');

Führen Sie die folgenden Befehle aus, damit die Datenbank die CSV-Beispieldateien abruft und sie in die Datenbanktabellen lädt.

-- 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';

Beachten Sie, dass die Erweiterung erkannt hat, dass die dem Kopierbefehl übergebenen URLs von Azure Blob Storage stammen, die Dateien, auf die wir verwiesen haben, mit gzip komprimiert waren und dies auch automatisch für uns erledigt wurde.

Wir können Details unserer verteilten Tabellen, einschließlich ihrer Größen, mit der citus_tables-Ansicht überprüfen:

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ächste Schritte

Jetzt haben wir Tabellen verteilt und sie mit Daten geladen. Als Nächstes versuchen wir, Abfragen in den verteilten Tabellen auszuführen.