AlloyDB로 데이터 내보내기 (역방향 ETL)
이 문서에서는 BigQuery에서 PostgreSQL용 AlloyDB로 역방향 추출, 변환, 로드 (역방향 ETL) 워크플로를 설정하는 방법을 설명합니다. EXPORT DATA 문을 사용하여 이 작업을 수행할 수 있습니다.
BigQuery 테이블을 AlloyDB에 동기화하여 데이터를 AlloyDB로 내보낼 수도 있습니다.
시작하기 전에
내보낸 데이터를 수신할 데이터베이스, 스키마, 테이블을 포함하는 AlloyDB 클러스터 및 인스턴스를 만듭니다. 내보내기 작업을 실행하기 전에 대상 스키마와 테이블이 있어야 합니다.
대상 AlloyDB 인스턴스는
READY상태의PRIMARY인스턴스여야 합니다.AlloyDB 인스턴스에 연결할 BigQuery 연결을 만듭니다. 연결은 사용자 이름과 비밀번호로 인증되어야 합니다. 연결에 지정된 데이터베이스 사용자에게는 대상 테이블에 대한
INSERT권한과 대상 스키마에 대한USAGE권한이 있어야 합니다.이 기능을 사용하려면 BigQuery Enterprise 또는 Enterprise Plus 등급 예약을 만들어야 합니다. AlloyDB로의 내보내기는
QUERY할당이 있는 예약에서만 지원됩니다.사용자에게 이 문서의 각 작업을 수행하는 데 필요한 권한을 부여하는 Identity and Access Management (IAM) 역할을 부여하세요.
필요한 역할
BigQuery 데이터를 AlloyDB로 내보내는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에서 다음 IAM 역할을 부여해 달라고 요청하세요.
-
BigQuery 테이블에서 데이터 내보내기:
BigQuery 데이터 뷰어 (
roles/bigquery.dataViewer) -
추출 작업 실행:
BigQuery 사용자 (
roles/bigquery.user) -
BigQuery 연결 사용:
BigQuery 연결 사용자 (
roles/bigquery.connectionUser) -
AlloyDB 인스턴스에 연결:
AlloyDB 클라이언트 (
roles/alloydb.client) - 연결 서비스 계정
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
제한사항
AlloyDB 내보내기는 일괄 내보내기만 지원합니다. 연속 쿼리를 사용하여 AlloyDB로 내보낼 수는 없습니다.
AlloyDB로 내보낸 데이터는 새 행으로만 추가됩니다. 내보내기 프로세스는 AlloyDB 내의 기존 레코드를 수정하거나 삭제하지 않습니다. 대상 테이블에
PRIMARY KEY또는UNIQUE제약조건이 정의되어 있지 않으면 동일한 데이터를 여러 번 내보낼 때 중복 항목이 발생합니다.데이터 무결성을 보장하려면 AlloyDB 테이블에
PRIMARY KEY또는UNIQUE제약조건을 정의하는 것이 좋습니다. 내보내기 작업은 고유한 일치 키가 있는 경우 기존 레코드가 업데이트되는 '업서트'를 실행하지 않습니다. 수신 행이PRIMARY KEY또는UNIQUE제약조건을 위반하면 전체 내보내기 작업이 실패합니다.동일한 AlloyDB 테이블에 여러 개의 동시
EXPORT DATA작업을 실행하지 않는 것이 좋습니다. 이렇게 하면 데이터 손실 또는 작업 실패와 같은 예측 불가능한 동작이 발생할 수 있습니다. 한 번에 하나의 내보내기 작업만 특정 테이블에 쓰도록 확인하는 것이 좋습니다.BigQuery 연결을 통한 사용자 이름 및 비밀번호 인증만 지원됩니다.
ARRAY,BYTES,GEOGRAPHY,INTERVAL,STRUCTBigQuery 데이터 유형은 지원되지 않습니다.BigQuery
SELECT문에서 대상 AlloyDB 테이블에 있는 열을 생략하면 이러한 열은NULL값을 허용하거나 AlloyDB에 정의된 기본값이 있어야 합니다.NOT NULL제약조건이 있고 기본값이 없으면 내보내기가 실패합니다.AlloyDB로의 내보내기는 BigQuery Enterprise 또는 Enterprise Plus 버전에서만 지원됩니다. BigQuery Standard 버전 및 주문형 컴퓨팅에서는 지원되지 않습니다. 자세한 내용은 관리 기능을 참조하세요.
AlloyDB로의 추출 작업과 같은 BigQuery 작업은 최대 6시간 동안 지속됩니다. 매우 큰 내보내기의 경우 내보내기를 여러 개의 작은 작업으로 나누는 것이 좋습니다.
위치 고려사항
AlloyDB로 데이터를 내보내려면 BigQuery 데이터 세트와 AlloyDB 인스턴스의 위치에 관한 특정 요구사항이 있습니다.
동일 리전 내보내기: 대상 AlloyDB 인스턴스는 BigQuery 데이터 세트와 정확히 동일한 리전에 있어야 합니다. Google Cloud 예를 들어
us-east1의 데이터 세트는us-east1의 AlloyDB 인스턴스로만 내보낼 수 있습니다.멀티 리전 내보내기:
US멀티 리전의 데이터 세트는us-central1리전에 있는 AlloyDB 인스턴스로만 내보낼 수 있습니다.EU멀티 리전의 데이터 세트는europe-west4리전에 있는 AlloyDB 인스턴스로만 내보낼 수 있습니다.
앞서 언급한 조합 이외의 교차 리전 내보내기는 지원되지 않습니다.
alloydb_options로 내보내기 구성
alloydb_options 옵션을 사용하여 대상 AlloyDB 스키마, 테이블, 최대 연결 수를 지정할 수 있습니다. 구성는 JSON 문자열로 표현됩니다. table 매개변수만 필수이며 다른 모든 매개변수는 선택사항입니다.
내보내기를 구성할 때 SELECT 문의 열에는 대상 AlloyDB 테이블의 열 이름과 일치하는 별칭이 있어야 합니다.
EXPORT DATA WITH CONNECTION `PROJECT_ID.LOCATION.CONNECTION_ID` OPTIONS( format='ALLOYDB', uri="https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_ID/instances/INSTANCE_ID", alloydb_options="""{ "schema": "SCHEMA_NAME", "table": "TABLE_NAME", "max_parallel_connections":MAX_CONNECTIONS}""" ) AS SELECT * FROM `mydataset.table1`;
다음을 바꿉니다.
PROJECT_ID: 프로젝트의 이름입니다. Google CloudLOCATION: 연결 및 대상 인스턴스의 위치입니다.CONNECTION_ID: BigQuery 연결의 이름입니다.CLUSTER_ID: AlloyDB 클러스터의 이름입니다.INSTANCE_ID: 대상 AlloyDB 인스턴스의 이름입니다.SCHEMA_NAME(선택사항): AlloyDB의 대상 스키마 이름입니다. 제공되지 않으면 데이터베이스 사용자에 대해 구성된 기본 스키마가 사용됩니다.TABLE_NAME: 스키마 접두사가 없는 AlloyDB의 기존 대상 테이블 이름입니다.MAX_CONNECTIONS(선택사항): BigQuery 작업자에서 AlloyDB 인스턴스로의 동시 병렬 연결의 최대 수입니다. 연결을 제한하면 대규모 내보내기 중에 대상 인스턴스가 과부하되는 것을 방지할 수 있습니다.
데이터 내보내기
EXPORT DATA 문
을 사용하여 데이터를 BigQuery 테이블에서
AlloyDB 테이블로 내보낼 수 있습니다.
다음 예에서는 mydataset.table1이라는 테이블에서 선택한 필드를 my_target_table이라는 AlloyDB 테이블로 내보냅니다.
EXPORT DATA WITH CONNECTION `myproject.us-central1.my-alloydb-conn` OPTIONS ( format='ALLOYDB', uri="https://alloydb.googleapis.com/v1/projects/myproject/locations/us-central1/clusters/my-cluster/instances/my-instance", alloydb_options="""{ "schema": "public", "table": "my_target_table" }""" ) AS SELECT col1 AS id, col2 AS name, col3 AS value FROM `mydataset.table1`;
내보낼 테이블 동기화
SQL 기반 변환 없이 전체 테이블 복사 또는 자동 미러링을 수행하려면 BigQuery 테이블을 AlloyDB에 직접 동기화하면 됩니다. EXPORT DATA 문을 사용하면 SELECT 쿼리를 사용하여 데이터를 이동하기 전에 데이터를 처리, 별칭 지정 또는 필터링할 수 있지만 테이블 동기화를 사용하여 BigQuery 테이블을 일대일로 마이그레이션할 수 있습니다.
테이블 동기화는 다음 모드에서 사용할 수 있습니다.
- 일회성 가져오기: AlloyDB 내에 쓰기 가능한 독립적인 BigQuery 테이블 복사본을 만듭니다.
- 정기 동기화 (미러링): 정의된 일정에 따라 BigQuery에서 자동으로 새로고침되는 AlloyDB의 읽기 전용 로컬 테이블을 만듭니다.
자세한 내용은 BigQuery 데이터를 AlloyDB에 동기화를 참조하세요.
가격 책정
EXPORT DATA 문을 사용하여 데이터를 AlloyDB로 내보내면
다음과 같이 요금이 청구됩니다.
BigQuery 용량 계산 가격 책정
데이터를 내보낸 후 AlloyDB에 데이터를 저장하는 데는 요금이 청구됩니다. 자세한 내용은 PostgreSQL용 AlloyDB 가격 책정을 참조하세요.