Spanner로 데이터 내보내기(역방향 ETL)

이 기능에 대한 의견을 제공하거나 지원을 요청하려면 bq-cloud-spanner-federation-preview@google.com으로 이메일을 보내세요.

이 문서에서는 BigQuery에서 Spanner로 역방향 추출, 변환, 로드(역방향 ETL) 워크플로를 설정하는 방법을 설명합니다. 이렇게 하려면 EXPORT DATA을 사용하여 데이터를 BigQuery 테이블에서 Spanner 테이블로 내보내면 됩니다.

이 역방향 ETL 워크플로는 BigQuery의 분석 기능과 Spanner의 짧은 지연 시간과 높은 처리량을 결합합니다. 이 워크플로를 사용하면 BigQuery의 할당량과 한도를 소진하지 않고 애플리케이션 사용자에게 데이터를 제공할 수 있습니다.

시작하기 전에

필요한 역할

BigQuery 데이터를 Spanner로 내보내는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

제한사항

다음 BigQuery 데이터 유형에는 Spanner에 상응하는 항목이 없으며 이 유형은 지원되지 않습니다.

Spanner 데이터베이스 언어 지원되지 않는 BigQuery 유형
모든 언어
  • STRUCT
  • GEOGRAPHY
  • DATETIME
  • RANGE
  • TIME
GoogleSQL
  • BIGNUMERIC: 지원되는 NUMERIC 유형이 부족합니다. 쿼리의 NUMERIC 유형에 명시적 변환을 추가하는 것이 좋습니다.

내보내는 행의 최대 크기는 1MiB를 초과할 수 없습니다.

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/PROJECT_ID/project/INSTANCE_ID/instance/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: 기존 대상 테이블 이름

내보내기 최적화

BigQuery에서 Spanner로 레코드 내보내기를 최적화하려면 다음을 시도해 보세요.

  • Spanner 대상 인스턴스에서 노드 수를 늘립니다. 내보내기 도구는 Spanner 노드와 처리 단위 수에 비례하여 BigQuery Export 슬롯 수를 자동으로 확장합니다. 쓰기 처리량을 극대화하는 방법에 대한 자세한 내용은 성능 개요를 참조하세요.

  • 쿼리 결과를 정렬하지 마세요. 결과 집합에 모든 기본 키 열이 포함된 경우 내보내기 도구는 대상 테이블의 기본 키를 자동으로 정렬하여 쓰기를 간소화하고 경합을 최소화합니다.

    대상 테이블의 기본 키에 생성 열이 포함된 경우 내보낸 데이터가 올바르게 정렬되도록 생성 열의 표현식을 쿼리에 추가해야 합니다.

가격 책정

데이터 내보내기 가격 책정에 대한 자세한 내용은 BigQuery 가격 책정을 참조하세요.

데이터를 내보낸 후에 Spanner에 데이터 저장 요금이 청구됩니다. 자세한 내용은 Spanner 가격 책정을 참조하세요.