Spanner로 데이터 내보내기(역방향 ETL)
이 기능에 대한 의견을 제공하거나 지원을 요청하려면 bq-cloud-spanner-federation-preview@google.com으로 이메일을 보내세요.
이 문서에서는 BigQuery에서 Spanner로 역방향 추출, 변환, 로드 (역방향 ETL) 워크플로를 설정하는 방법을 설명합니다. 이렇게 하려면 EXPORT DATA
문을 사용하여 데이터를 BigQuery 테이블에서 Spanner 테이블로 내보내면 됩니다.
이 역방향 ETL 워크플로는 BigQuery의 분석 기능과 Spanner의 짧은 지연 시간과 높은 처리량을 결합합니다. 이 워크플로를 사용하면 BigQuery의 할당량과 한도를 소진하지 않고 애플리케이션 사용자에게 데이터를 제공할 수 있습니다.
시작하기 전에
내보낸 데이터를 수신할 테이블을 포함하는 Spanner 데이터베이스를 만듭니다.
사용자에게 이 문서의 각 작업을 수행하는 데 필요한 권한을 부여하는 Identity and Access Management(IAM) 역할을 부여하세요.
필요한 역할
BigQuery 데이터를 Spanner로 내보내는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
- BigQuery 테이블에서 데이터 내보내기: BigQuery 데이터 뷰어(
roles/bigquery.dataViewer
) - 내보내기 작업 실행: BigQuery 사용자(
roles/bigquery.user
) -
Spanner 인스턴스의 매개변수 확인:
Cloud Spanner 뷰어 (
roles/spanner.viewer
) -
Spanner 테이블에 데이터 쓰기:
Cloud Spanner 데이터베이스 사용자(
roles/spanner.databaseUser
)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
제한사항
- 다음 BigQuery 데이터 유형에는 Spanner에 상응하는 항목이 없으며 이 유형은 지원되지 않습니다.
Spanner 데이터베이스 언어 | 지원되지 않는 BigQuery 유형 |
---|---|
모든 언어 |
|
GoogleSQL |
|
내보내는 행의 최대 크기는 1MiB를 초과할 수 없습니다.
Spanner는 내보내기 중에 참조 무결성을 적용합니다. 타겟 테이블이 다른 테이블의 하위 요소이거나 (INTERLEAVE IN PARENT) 타겟 테이블에 외래 키 제약조건이 있는 경우 내보내기 중에 외래 키와 상위 키의 유효성이 검사됩니다. 내보낸 행이 INTERLEAVE IN PARENT를 사용하여 테이블에 쓰여지고 상위 행이 없으면 '상위 행이 누락되었습니다. 행을 쓸 수 없습니다.' 오류가 발생합니다. 내보낸 행이 외래 키 제약조건이 있는 테이블에 쓰여지고 존재하지 않는 키를 참조하는 경우 '외래 키 제약조건이 위반됨' 오류와 함께 내보내기가 실패합니다. 여러 테이블로 내보낼 때는 내보내기를 통해 참조 무결성이 유지되도록 내보내기 순서를 지정하는 것이 좋습니다. 일반적으로 이는 상위 테이블과 외래 키로 참조되는 테이블을 이를 참조하는 테이블보다 먼저 내보내는 것을 의미합니다.
내보내기 대상인 테이블에 외래 키 제약 조건이 있거나 다른 테이블의 하위 요소인 경우 (상위에서 INTERLEAVE) 하위 테이블을 내보내기 전에 상위 테이블을 채워야 하며 상위 테이블에 모든 상응하는 키가 포함되어야 합니다. 상위 테이블에 관련 키 집합이 완전하지 않은 상태에서 하위 테이블을 내보내려고 하면 실패합니다.
Spanner로의 내보내기 작업은 최대 6시간 동안 지속됩니다. 대규모 내보내기 작업을 최적화하는 방법에 관한 자세한 내용은 내보내기 최적화를 참고하세요. 또는 입력을 개별 데이터 블록으로 분할하여 개별 내보내기 작업으로 내보낼 수 있습니다.
Spanner로 내보내기는 BigQuery Enterprise 또는 Enterprise Plus 버전에서만 지원됩니다. BigQuery Standard 버전 및 주문형 컴퓨팅은 지원되지 않습니다.
spanner_options
옵션으로 내보내기 구성
spanner_options
옵션을 사용하여 대상 Spanner 데이터베이스와 테이블을 지정할 수 있습니다. 구성은 다음 예와 같이 JSON 문자열 형식으로 표현됩니다.
EXPORT DATA OPTIONS( uri="https://spanner.googleapis.com/projects/PROJECT_ID
/instances/INSTANCE_ID
/databases/DATABASE_ID
", format='CLOUD_SPANNER', spanner_options = """{ "table": "TABLE_NAME
", "priority": "PRIORITY
", "tag": "TAG
", }""" )
다음을 바꿉니다.
PROJECT_ID
: Google Cloud 프로젝트 이름입니다.INSTANCE_ID
: 데이터베이스 인스턴스 이름입니다.DATABASE_ID
: 데이터베이스 이름입니다.TABLE_NAME
: 기존 대상 테이블 이름입니다.PRIORITY
(선택사항): 쓰기 요청의 우선순위입니다. 허용되는 값은LOW
,MEDIUM
,HIGH
입니다. 기본값은MEDIUM
입니다.TAG
(선택사항): Spanner 모니터링에서 내보내기 도구 트래픽을 식별하는 데 도움이 되는 요청 태그입니다. 기본값은bq_export
입니다.
내보내기 쿼리 요구사항
쿼리 결과를 Spanner로 내보내려면 결과가 다음 요구사항을 충족해야 합니다.
- 결과 집합의 모든 열은 대상 테이블에 있어야 하며 유형이 일치해야 합니다.
- 결과 집합에는 대상 테이블의 모든
NOT NULL
열이 포함되어야 합니다. - 열 값은 Spanner 테이블 내 데이터 크기 한도를 초과하면 안 됩니다.
- 지원되지 않는 열 유형을 Spanner로 내보내기 전에 지원되는 유형 중 하나로 변환해야 합니다.
데이터 내보내기
EXPORT DATA
문을 사용하여 데이터를 BigQuery 테이블에서 Spanner 테이블로 내보낼 수 있습니다.
다음 예시에서는 mydataset.table1
이라는 테이블에서 선택한 필드를 내보냅니다.
EXPORT DATA OPTIONS ( uri="https://spanner.googleapis.com/projects/PROJECT_ID
/instances/INSTANCE_ID
/databases/DATABASE_ID
", format='CLOUD_SPANNER', spanner_options="""{ "table": "TABLE_NAME" }""" ) AS SELECT * FROM mydataset.table1;
다음을 바꿉니다.
PROJECT_ID
: Google Cloud 프로젝트 이름INSTANCE_ID
: 데이터베이스 인스턴스 이름DATABASE_ID
: 데이터베이스 이름TABLE_NAME
: 기존 대상 테이블 이름
동일한 rowkey
값으로 여러 결과 내보내기
rowkey
값이 동일한 여러 행을 포함하는 결과를 내보내면 Spanner에 기록된 값이 동일한 Spanner 행에 위치하게 됩니다. 일치하는 BigQuery 행 하나만(어떤 행일지는 보장되지 않음) 내보내기에 의해 생성된 Spanner 행 집합에 포함됩니다.
내보내기 최적화
BigQuery에서 Spanner로 레코드 내보내기를 최적화하려면 다음을 시도해 보세요.
Spanner 대상 인스턴스에서 노드 수를 늘립니다. 내보내기 초기 단계에서는 인스턴스의 노드 수를 늘리더라도 내보내기 처리량이 즉시 증가하지 않을 수 있습니다. Spanner에서 부하 기반 분할을 실행할 때 약간의 지연이 발생할 수 있습니다. 부하 기반 분할을 사용하면 내보내기 처리량이 증가한 후 잠시 후 안정화됩니다. 쓰기 처리량을 극대화하는 방법에 대한 자세한 내용은 성능 개요를 참고하세요.
spanner_options
내에서HIGH
우선순위를 지정합니다. 그러나 이렇게 하면 동일한 인스턴스에서 제공하는 다른 워크로드의 성능이 크게 저하될 수 있습니다.쿼리 결과를 정렬하지 마세요. 결과 집합에 모든 기본 키 열이 포함된 경우 내보내기 도구는 대상 테이블의 기본 키를 자동으로 정렬하여 쓰기를 간소화하고 경합을 최소화합니다.
대상 테이블의 기본 키에 생성 열이 포함된 경우 내보낸 데이터가 올바르게 정렬되도록 생성 열의 표현식을 쿼리에 추가해야 합니다.
가격 책정
데이터 내보내기 가격 책정에 대한 자세한 내용은 BigQuery 가격 책정을 참조하세요.
데이터를 내보낸 후에 Spanner에 데이터 저장 요금이 청구됩니다. 자세한 내용은 Spanner 가격 책정을 참조하세요.