이 페이지에서는 BigQuery의 테이블을 PostgreSQL용 AlloyDB 인스턴스로 동기화하는 방법을 보여줍니다.
BigQuery의 분석 데이터를 AlloyDB로 동기화하면 데이터 레이크에 대한 지연 시간이 짧은 트랜잭션 액세스의 이점을 활용하는 운영 시스템을 구축할 수 있습니다. 데이터를 제자리에서 쿼리하는 외부 데이터 래퍼 (FDW)와 달리 동기화 테이블은 최대 성능을 위해 데이터를 AlloyDB 스토리지로 이동합니다.
AlloyDB는 BigQuery 데이터를 인스턴스로 이동하는 다음과 같은 방법을 제공합니다.
일회성 동기화: BigQuery 테이블의 쓰기 가능한 독립적인 사본을 만듭니다.
정기 동기화(미러링): 일정에 따라(예: 6시간마다 또는 매일) 자동으로 새로고침되는 읽기 전용 로컬 테이블을 만듭니다.
성능 및 운영 고려사항
BigQuery 동기화 테이블을 사용할 때는 다음을 고려하세요.
- 리소스 사용량: 데이터 이동은 CPU와 메모리를 사용합니다. 매우 큰 테이블의 경우 기본 트랜잭션 워크로드에 영향을 미치지 않도록 사용량이 적은 시간대에 동기화를 예약하는 것이 좋습니다.
- 데이터 공개 상태: 바꾸기 작업 중에 기존 대상 테이블이 삭제되고 미리 다시 생성됩니다. 가져오기 중에 쿼리는 처음에 빈 테이블을 확인한 후 일괄 트랜잭션이 커밋될 때 새로 가져온 데이터가 점진적으로 표시됩니다.
시작하기 전에
alloydb_sync확장 프로그램은bigquery_fdw를 사용하여 BigQuery에 연결하므로bigquery_fdw가 BigQuery 데이터 유형 및 열 매핑을 처리하는 방법을 숙지합니다.- 계정에 로그인합니다. Google Cloud 를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. Google Cloud신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
AlloyDB를 만들고 여기에 연결하는 데 필요한 Cloud API를 사용 설정합니다.
변경할 프로젝트의 이름을 확인하려면 프로젝트 확인 단계에서 다음 을 클릭합니다.
API 사용 설정 단계에서 사용 설정 을 클릭하여 다음을 사용 설정합니다.
- AlloyDB API
- Compute Engine API
- Cloud Resource Manager API
- Service Networking API
- BigQuery Storage API
AlloyDB와 동일한 Google Cloud 프로젝트에 있는 VPC 네트워크를 사용하여 AlloyDB에 대한 네트워크 연결을 구성하려면 Service Networking API가 필요합니다.
다른 프로젝트에 있는 VPC 네트워크를 사용하여 AlloyDB에 대한 네트워크 연결을 구성하려면 Compute Engine API와 Cloud Resource Manager API가 필요합니다. Google Cloud
- 데이터를 동기화할 기존 BigQuery 테이블이 있는지 확인합니다. 자세한 내용은 BigQuery 테이블 만들기 및 사용을 참조하세요.
필요한 역할
AlloyDB 클러스터 서비스 계정에 BigQuery 데이터 세트 액세스 권한을 부여하려면 다음 권한이 필요합니다.
- BigQuery 데이터 뷰어
(
roles/bigquery.dataViewer) 또는bigquery.tables.get및bigquery.tables.getData권한이 있는 커스텀 역할. 서비스 계정에 부여되면 이 역할은 테이블 또는 뷰에서 데이터와 메타데이터를 읽을 수 있는 권한을 제공합니다. - BigQuery 읽기 세션 사용자
(
roles/bigquery.readSessionUser) 또는bigquery.readsessions.create및bigquery.readsessions.getData권한이 있는 커스텀 역할. 읽기 세션을 만들고 사용할 수 있는 기능을 제공합니다. - BigQuery 작업 사용자
(
roles/bigquery.jobUser) 또는bigquery.jobs.create권한이 있는 커스텀 역할. 쿼리 작업을 비롯하여 작업을 만들고 실행할 수 있는 기능을 제공합니다.
확장 프로그램 구성
BigQuery에서 테이블을 동기화하기 전에 필요한 확장 프로그램을 사용 설정하고 BigQuery에 대한 연결을 구성합니다.
확장 프로그램을 만듭니다.
- 인스턴스에 psql 클라이언트 연결의 안내에 따라 psql 클라이언트를 사용하여 AlloyDB 인스턴스에 연결합니다.
다음 명령어를 실행합니다.
CREATE EXTENSION IF NOT EXISTS alloydb_sync;
AlloyDB가 BigQuery로 인증되도록 사용자 매핑을 만듭니다.
CREATE EXTENSION IF NOT EXISTS bigquery_fdw; CREATE SERVER IF NOT EXISTS BIGQUERY_SERVER_NAME FOREIGN DATA WRAPPER bigquery_fdw; CREATE USER MAPPING IF NOT EXISTS FOR USER SERVER BIGQUERY_SERVER_NAME;다음을 바꿉니다.
USER: BigQuery 테이블에 액세스하는 데이터베이스 사용자 이름 또는 IAM 사용자입니다.BIGQUERY_SERVER_NAME: BigQuery 서버의 고유 식별자입니다. 지정된 데이터베이스에서 한 번 정의합니다.BIGQUERY_SERVER_NAME을 서버 이름으로 바꿀 수 있습니다.
일회성 내보내기를 위해 BigQuery 테이블 동기화
psql을 사용하여 BigQuery 테이블을 일회성으로 동기화
BigQuery 데이터의 수정 가능한 사본을 만들려면
psql을 사용하여 alloydb_sync.import_bq_table
함수를 실행합니다.
SELECT alloydb_sync.import_bq_table(
'PROJECT_ID.DATASET_ID.TABLE_ID',
'ALLOYDB_DESTINATION_TABLE_NAME',
'ON_EXISTS',
ARRAY['PRIMARY_KEY_COLUMN']
);
다음을 바꿉니다.
PROJECT_ID: BigQuery 데이터 세트가 있는 프로젝트의 ID입니다.DATASET_ID: 테이블의 BigQuery 데이터 세트 이름입니다. 이름이 4개로 구성된 Iceberg 테이블의 경우Catalog.Namespace입니다.TABLE_ID: BigQuery 테이블 또는 뷰의 이름입니다.ALLOYDB_DESTINATION_TABLE_NAME: AlloyDB 데이터베이스에서 데이터를 만들고 가져올 로컬 테이블의 이름입니다. 스키마 이름(예:public.local_sales)을 포함할 수 있습니다.ON_EXISTS: 대상 테이블이 이미 있는 경우 사용할 전략입니다.PRIMARY_KEY_COLUMN: 기본 키로 사용할 열 이름의 선택적 목록입니다.
예
다음 예에서는 BigQuery 데이터 세트의 transactions라는 테이블을 public.local_sales라는 새 AlloyDB 테이블로 동기화하는 방법을 보여줍니다.
SELECT alloydb_sync.import_bq_table(
'my-gcp-project.sales_data.transactions',
'public.local_sales',
'replace'
);
on_exists 매개변수
on_exists 매개변수는 대상 테이블이 AlloyDB에 이미 있는 경우 함수가 동기화를 처리하는 방법을 결정합니다.
error: 기본 옵션입니다. 대상 테이블이 이미 있는 경우 동기화를 중지합니다.skip: 대상 테이블이 이미 있는 경우 동기화를 건너뜁니다.replace: 기존 로컬 테이블을 BigQuery의 최신 데이터로 바꿉니다.
기본 키 지원
선택적 primary_key 매개변수를 텍스트 배열로 제공하면 AlloyDB는 지정된 열을 기본 키로 사용하여 테이블을 만듭니다.
SELECT alloydb_sync.import_bq_table(
'my-gcp-project.sales_data.transactions',
'public.local_sales',
ARRAY['transaction_id']
);
정기 내보내기를 위해 BigQuery 테이블 동기화
정기 동기화 만들기
BigQuery 데이터와 동기화된 상태를 유지하는 읽기 전용 테이블을 유지하려면 psql을 사용하여 alloydb_sync.create_bq_sync_table 함수를 실행합니다.
SELECT alloydb_sync.create_bq_sync_table(
'PROJECT_ID.DATASET_ID.TABLE_ID',
'ALLOYDB_DESTINATION_TABLE_NAME',
'REFRESH_INTERVAL',
'ON_EXISTS',
ARRAY['PRIMARY_KEY_COLUMN']
);
다음을 바꿉니다.
PROJECT_ID.DATASET_ID.TABLE_ID: BigQuery 테이블 또는 뷰의 정규화된 이름 프로젝트 ID, 데이터 세트 ID, 테이블 ID를 포함하여 마침표로 구분됩니다. 이름이 4개로 구성된 Iceberg 테이블의 경우DATASET_ID는Catalog.Namespace로 표시됩니다. 예:my-gcp-project.sales_data.transactions.ALLOYDB_DESTINATION_TABLE_NAME: AlloyDB 데이터베이스에서 데이터를 만들고 동기화할 로컬 테이블의 이름입니다.REFRESH_INTERVAL: AlloyDB가 BigQuery에서 데이터를 정기적으로 새로고침하는 간격입니다(예:12 hours).ON_EXISTS: 대상 테이블이 이미 있는 경우 사용할 전략입니다.PRIMARY_KEY_COLUMN: 기본 키로 사용할 열 이름의 선택적 목록입니다.
예
다음 예에서는 12시간마다 새로고침되는 고객 프로필 미러를 만드는 방법을 보여줍니다.
SELECT alloydb_sync.create_bq_sync_table(
'my-gcp-project.crm_data.profiles',
'public.customer_mirror',
'12 hours',
'replace'
);
작업 모니터링 및 관리
동기화를 시작한 후 진행 상황을 모니터링하고 작업을 관리할 수 있습니다.
작업 상태 확인
대규모 동기화에는 시간이 걸릴 수 있습니다. job_status 뷰를 쿼리하여 처리된 레코드 및 예상 완료 시간을 비롯한 진행 상황을 모니터링할 수 있습니다.
SELECT
import_id,
status,
records_processed,
total_records,
error
FROM alloydb_sync.job_status;
예를 들어 작업을 취소하려면 다음 명령어를 실행합니다.
SELECT alloydb_sync.cancel_import_job('85bb5dfa-dfb9-4017-9153-738f55abe4b1');
동기화 작업 중지 및 삭제
BigQuery 테이블 미러링을 중지하고 로컬 테이블을 삭제하려면 alloydb_sync.delete_bq_sync_table 함수를 사용합니다.
SELECT alloydb_sync.delete_bq_sync_table('public.customer_mirror');
제한사항
BigQuery에서 테이블을 동기화할 때는 다음 제한사항이 적용됩니다.
- 이 기능은 PostgreSQL 버전 18에서만 지원됩니다.
alloydb_sync확장 프로그램을DROP하는 경우 확장 프로그램을 다시 만들기 전에 인스턴스를 다시 시작해야 합니다.- 동기화는 트랜잭션 내에서 실행됩니다. 가져오기 작업이 중단되거나 실패하면 시스템에서 가져온 데이터를 롤백합니다.
- 두 사용자가 동일한 대상 테이블로 동기화 작업을 동시에 시작하면 테이블이 서로 덮어쓸 수 있습니다.
- 새로 등록된 동기화 테이블의 초기 백그라운드 가져오기 중에 중단이 발생하면 테이블은 다음 예약된 새로고침 간격까지 불완전한 상태로 유지됩니다. 이 문제를 해결하려면
alloydb_sync.delete_bq_sync_table()함수를 사용하여 동기화 테이블을 삭제하고 다시 만들면 됩니다. ARRAY,BYTES,VECTOR,GEOGRAPHY와 같은 복잡한 BigQuery 유형은 동기화에서 지원되지 않습니다. 전체 목록은 지원되는 BigQuery 데이터 유형 및 열 매핑을 참조하세요.- 복제된 테이블을 수동으로 삭제하지 마세요.
alloydb_sync.delete_bq_sync_table()API 함수를 사용하여 테이블과 새로고침을 안전하게 삭제합니다. alloydb_sync확장 프로그램을 사용하는 데이터베이스를 삭제하려면DROP DATABASE ... WITH (FORCE)를 사용해야 합니다.- 가져오기가 실행되는 동안 Postgres 데이터베이스가 비정상 종료되면 메타데이터가
RUNNING상태로 멈춰 향후 가져오기가 차단될 수 있습니다. 차단을 해제하려면 수동으로 실행해야 합니다.UPDATE alloydb_sync.import_job_status SET status = 'FAILED' WHERE status = 'RUNNING';
가격 책정
BigQuery에서 AlloyDB로 데이터를 동기화하면 다음과 같이 요금이 청구됩니다. BigQuery 용량 계산 가격 책정
데이터를 내보낸 후 AlloyDB에 데이터를 저장하는 데는 요금이 청구됩니다. 자세한 내용은 PostgreSQL용 AlloyDB 가격 책정을 참조하세요.
다음 단계
- AlloyDB로 데이터 내보내기 (역 ETL)에 대해 자세히 알아봅니다.
- FDW를 사용하여 BigQuery 데이터를 제자리에서 쿼리하는 방법을 자세히 알아봅니다.