AlloyDB로 데이터 내보내기 (역방향 ETL)
이 문서에서는 BigQuery에서 PostgreSQL용 AlloyDB로 역방향 추출, 변환, 로드 (역방향 ETL) 워크플로를 설정하는 방법을 설명합니다. EXPORT DATA 문을 사용하여 이 작업을 수행할 수 있습니다.
시작하기 전에
내보낸 데이터를 수신할 데이터베이스, 스키마, 테이블을 포함하는 AlloyDB 클러스터와 인스턴스를 만듭니다. 내보내기 작업을 실행하기 전에 대상 스키마와 테이블이 있어야 합니다.
대상 AlloyDB 인스턴스는
READY상태의PRIMARY인스턴스여야 합니다.AlloyDB 인스턴스에 연결할 BigQuery 연결을 만듭니다. 연결은 사용자 이름과 비밀번호로 인증되어야 합니다. 연결에 지정된 데이터베이스 사용자에게는 대상 테이블에 대한
INSERT권한과 대상 스키마에 대한USAGE권한이 있어야 합니다.사용자에게 이 문서의 각 작업을 수행하는 데 필요한 권한을 부여하는 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`;
가격 책정
EXPORT DATA 문을 사용하여 데이터를 AlloyDB로 내보내면
다음과 같이 요금이 청구됩니다.
BigQuery 용량 계산 가격 책정
데이터를 내보낸 후 AlloyDB에 데이터를 저장하는 데는 요금이 청구됩니다. 자세한 내용은 PostgreSQL용 AlloyDB 가격 책정을 참조하세요.