Azure Cosmos DB for PostgreSQL에서 테이블 만들기 및 배포

적용 대상: Azure Cosmos DB for PostgreSQL(PostgreSQL에 대한 Citus 데이터베이스 확장 기반)

이 예제에서는 Azure Cosmos DB for PostgreSQL 분산 테이블을 사용하여 GitHub 오픈 소스 기여자로부터 기록된 이벤트를 저장하고 쿼리합니다.

필수 조건

이 빠른 시작을 따르려면 먼저 다음을 수행해야 합니다.

  1. Azure Portal에서 클러스터를 만듭니다.
  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은 반정형 데이터를 저장하기 위한 JSONB 데이터 형식과 같은 고급 PostgreSQL 기능을 지원합니다.

테이블 배포

create_distributed_table()은 Azure Cosmos DB for PostgreSQL에서 테이블을 배포하고 여러 머신에서 리소스를 사용하기 위해 제공하는 매직 함수입니다. 이 함수는 테이블을 분할된 데이터베이스로 분해합니다. 그러면 스토리지 및 컴퓨팅 성능 향상을 위해 노드에 분산할 수 있습니다.

참고 항목

실제 애플리케이션에서 워크로드가 64개 vCore, 256GB RAM 및 2TB 스토리지에 적합한 경우 단일 노드 클러스터를 사용할 수 있습니다. 이 경우 테이블 배포는 선택 사항입니다. 나중에 create_distributed_table_concurrently를 사용하여 필요에 따라 테이블을 배포할 수 있습니다.

테이블을 배포해 보겠습니다.

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

Important

Azure Cosmos DB for PostgreSQL 성능 기능을 활용하려면 테이블을 배포하거나 스키마 기반 분할을 사용하는 것이 필요합니다. 테이블이나 스키마를 배포하지 않으면 작업자 노드는 해당 데이터와 관련된 쿼리를 실행하는 데 도움을 줄 수 없습니다.

분산 테이블에 데이터 로드

샘플 데이터로 테이블을 채울 준비가 완료되었습니다. 이 빠른 시작에서는 GitHub API에서 이전에 캡처한 데이터 세트를 사용합니다.

pg_azure_storage 확장을 사용하여 Azure Blob Storage의 공용 컨테이너에서 직접 데이터를 로드합니다. 먼저 데이터베이스에서 확장을 만들어야 합니다.

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 Storage, 가리키는 파일이 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)

다음 단계

이제 테이블을 분산하고 데이터를 사용하여 로드했습니다. 다음으로 분산 테이블에서 쿼리를 실행해 보겠습니다.