Azure Cosmos DB for PostgreSQL에서 테이블 만들기 및 배포
적용 대상: Azure Cosmos DB for PostgreSQL(PostgreSQL에 대한 Citus 데이터베이스 확장 기반)
이 예제에서는 Azure Cosmos DB for PostgreSQL 분산 테이블을 사용하여 GitHub 오픈 소스 기여자로부터 기록된 이벤트를 저장하고 쿼리합니다.
필수 조건
이 빠른 시작을 따르려면 먼저 다음을 수행해야 합니다.
- Azure Portal에서 클러스터를 만듭니다.
- 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_events
의 payload
에 있는 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)
다음 단계
이제 테이블을 분산하고 데이터를 사용하여 로드했습니다. 다음으로 분산 테이블에서 쿼리를 실행해 보겠습니다.