Cloud Spanner to Cloud Storage 템플릿

서버리스 Dataproc Cloud Spanner to Cloud Storage 템플릿을 사용하여 Spanner 데이터베이스에서 Cloud Storage로 데이터를 추출하세요.

템플릿 사용하기

gcloud CLI 또는 Dataproc API를 사용해서 템플릿을 실행합니다.

gcloud

아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: (필수사항) IAM 설정에 나열된 Google Cloud 프로젝트 ID입니다.
  • REGION: (필수사항) Compute Engine 리전입니다.
  • SUBNET: (선택사항) 서브넷이 지정되지 않은 경우 default 네트워크의 지정된 리전에 있는 서브넷이 선택됩니다.

    예시: projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME

  • TEMPLATE_VERSION: (필수사항) 최신 템플릿 버전 또는 특정 버전의 날짜로 latest를 지정합니다(예: 2023-03-17_v0.1.0-beta). 사용 가능한 템플릿 버전을 나열하려면 gs://dataproc-templates-binaries를 방문하거나 gsutil ls gs://dataproc-templates-binaries를 실행하세요.
  • INSTANCE: (필수사항) Spanner 인스턴스 ID입니다.
  • DATABASE: (필수사항) Spanner 데이터베이스 ID입니다.
  • TABLE: (필수사항) Spanner 입력 테이블 이름 또는 Spanner 입력 테이블의 SQL 쿼리입니다.

    예시(SQL 쿼리는 괄호 안에 있어야 함): (select * from TABLE)

  • CLOUD_STORAGE_OUTPUT_PATH: (필수사항) 출력을 저장할 Cloud Storage 경로입니다.

    예시: gs://example-bucket/example-folder/

  • FORMAT: (필수사항) 출력 데이터 형식입니다. 옵션: avro, parquet, csv, json. 참고: avro의 경우 'file:///usr/lib/spark/external/spark-avro.jar'을 jars gcloud CLI 플래그 또는 API 필드에 추가해야 합니다.

    예시(file:// 접두사는 Dataproc Serverless jar 파일을 참조):

    --jars=file:///usr/lib/spark/external/spark-avro.jar, [ ... 기타 jar]
  • MODE: (필수사항) Cloud Storage 출력의 쓰기 모드입니다. 옵션: append, overwrite, ignore, errorifexists.
  • NUM_PARTITIONS: (선택사항) 테이블 읽기 및 쓰기의 동시 로드에 사용할 수 있는 최대 파티션 수입니다.
  • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND: (선택사항) 사용할 경우 다음 매개변수를 모두 지정해야 합니다.
    • INPUT_PARTITION_COLUMN: Spanner 입력 테이블 파티션 열 이름입니다.
    • LOWERBOUND: 파티션 스트라이드를 결정하는 데 사용되는 Spanner 입력 테이블 파티션 열 하한값입니다.
    • UPPERBOUND: 파티션 스트라이드를 결정하는 데 사용되는 Spanner 입력 테이블 파티션 열 상한값입니다.
  • TEMP_VIEWTEMP_QUERY: (선택사항) 이 두 가지 선택적 매개변수를 사용하여 Cloud Storage에 데이터를 로드하는 동안 Spark SQL 변환을 적용할 수 있습니다. TEMP_VIEW는 쿼리에 사용된 테이블 이름과 동일해야 하고 TEMP_QUERY는 쿼리 문입니다.
  • SERVICE_ACCOUNT: (선택사항) 입력하지 않으면 기본 Compute Engine 서비스 계정이 사용됩니다.
  • PROPERTYPROPERTY_VALUE: (선택사항) Spark 속성=value 쌍의 쉼표로 구분된 목록입니다.
  • LABELLABEL_VALUE: (선택사항) label=value 쌍의 쉼표로 구분된 목록입니다.
  • LOG_LEVEL: (선택사항) 로깅 수준입니다. ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, WARN 중 하나일 수 있습니다. 기본값은 INFO입니다.
  • KMS_KEY: (선택사항) 암호화에 사용할 Cloud Key Management Service 키입니다. 키를 지정하지 않으면 Google 소유 및 Google 관리 키를 사용하여 데이터가 저장 상태에서 암호화됩니다.

    예시: projects/PROJECT_ID/regions/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

다음 명령어를 실행합니다.

Linux, macOS 또는 Cloud Shell

gcloud dataproc batches submit spark \
    --class=com.google.cloud.dataproc.templates.main.DataProcTemplate \
    --version="1.1" \
    --project="PROJECT_ID" \
    --region="REGION" \
    --jars="gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar" \
    --subnet="SUBNET" \
    --kms-key="KMS_KEY" \
    --service-account="SERVICE_ACCOUNT" \
    --properties="PROPERTY=PROPERTY_VALUE" \
    --labels="LABEL=LABEL_VALUE" \
    -- --template=SPANNERTOGCS \
    --templateProperty log.level="LOG_LEVEL" \
    --templateProperty project.id="PROJECT_ID" \
    --templateProperty spanner.gcs.input.spanner.id="INSTANCE" \
    --templateProperty spanner.gcs.input.database.id="DATABASE" \
    --templateProperty spanner.gcs.input.table.id="TABLE" \
    --templateProperty spanner.gcs.output.gcs.path="CLOUD_STORAGE_OUTPUT_PATH" \
    --templateProperty spanner.gcs.output.gcs.saveMode="MODE" \
    --templateProperty spanner.gcs.output.gcs.format="FORMAT" \
    --templateProperty spanner.gcs.input.sql.partitionColumn="INPUT_PARTITION_COLUMN" \
    --templateProperty spanner.gcs.input.sql.lowerBound="LOWERBOUND" \
    --templateProperty spanner.gcs.input.sql.upperBound="UPPERBOUND" \
    --templateProperty spanner.spanner.gcs.input.sql.numPartitions="NUM_PARTITIONS" \
    --templateProperty spanner.gcs.temp.table="TEMP_VIEW" \
    --templateProperty spanner.gcs.temp.query="TEMP_QUERY"

Windows(PowerShell)

gcloud dataproc batches submit spark `
    --class=com.google.cloud.dataproc.templates.main.DataProcTemplate `
    --version="1.1" `
    --project="PROJECT_ID" `
    --region="REGION" `
    --jars="gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar" `
    --subnet="SUBNET" `
    --kms-key="KMS_KEY" `
    --service-account="SERVICE_ACCOUNT" `
    --properties="PROPERTY=PROPERTY_VALUE" `
    --labels="LABEL=LABEL_VALUE" `
    -- --template=SPANNERTOGCS `
    --templateProperty log.level="LOG_LEVEL" `
    --templateProperty project.id="PROJECT_ID" `
    --templateProperty spanner.gcs.input.spanner.id="INSTANCE" `
    --templateProperty spanner.gcs.input.database.id="DATABASE" `
    --templateProperty spanner.gcs.input.table.id="TABLE" `
    --templateProperty spanner.gcs.output.gcs.path="CLOUD_STORAGE_OUTPUT_PATH" `
    --templateProperty spanner.gcs.output.gcs.saveMode="MODE" `
    --templateProperty spanner.gcs.output.gcs.format="FORMAT" `
    --templateProperty spanner.gcs.input.sql.partitionColumn="INPUT_PARTITION_COLUMN" `
    --templateProperty spanner.gcs.input.sql.lowerBound="LOWERBOUND" `
    --templateProperty spanner.gcs.input.sql.upperBound="UPPERBOUND" `
    --templateProperty spanner.spanner.gcs.input.sql.numPartitions="NUM_PARTITIONS" `
    --templateProperty spanner.gcs.temp.table="TEMP_VIEW" `
    --templateProperty spanner.gcs.temp.query="TEMP_QUERY"

Windows(cmd.exe)

gcloud dataproc batches submit spark ^
    --class=com.google.cloud.dataproc.templates.main.DataProcTemplate ^
    --version="1.1" ^
    --project="PROJECT_ID" ^
    --region="REGION" ^
    --jars="gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar" ^
    --subnet="SUBNET" ^
    --kms-key="KMS_KEY" ^
    --service-account="SERVICE_ACCOUNT" ^
    --properties="PROPERTY=PROPERTY_VALUE" ^
    --labels="LABEL=LABEL_VALUE" ^
    -- --template=SPANNERTOGCS ^
    --templateProperty log.level="LOG_LEVEL" ^
    --templateProperty project.id="PROJECT_ID" ^
    --templateProperty spanner.gcs.input.spanner.id="INSTANCE" ^
    --templateProperty spanner.gcs.input.database.id="DATABASE" ^
    --templateProperty spanner.gcs.input.table.id="TABLE" ^
    --templateProperty spanner.gcs.output.gcs.path="CLOUD_STORAGE_OUTPUT_PATH" ^
    --templateProperty spanner.gcs.output.gcs.saveMode="MODE" ^
    --templateProperty spanner.gcs.output.gcs.format="FORMAT" ^
    --templateProperty spanner.gcs.input.sql.partitionColumn="INPUT_PARTITION_COLUMN" ^
    --templateProperty spanner.gcs.input.sql.lowerBound="LOWERBOUND" ^
    --templateProperty spanner.gcs.input.sql.upperBound="UPPERBOUND" ^
    --templateProperty spanner.spanner.gcs.input.sql.numPartitions="NUM_PARTITIONS" ^
    --templateProperty spanner.gcs.temp.table="TEMP_VIEW" ^
    --templateProperty spanner.gcs.temp.query="TEMP_QUERY"

REST

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: (필수사항) IAM 설정에 나열된 Google Cloud 프로젝트 ID입니다.
  • REGION: (필수사항) Compute Engine 리전입니다.
  • SUBNET: (선택사항) 서브넷이 지정되지 않은 경우 default 네트워크의 지정된 리전에 있는 서브넷이 선택됩니다.

    예시: projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME

  • TEMPLATE_VERSION: (필수사항) 최신 템플릿 버전 또는 특정 버전의 날짜로 latest를 지정합니다(예: 2023-03-17_v0.1.0-beta). 사용 가능한 템플릿 버전을 나열하려면 gs://dataproc-templates-binaries를 방문하거나 gsutil ls gs://dataproc-templates-binaries를 실행하세요.
  • INSTANCE: (필수사항) Spanner 인스턴스 ID입니다.
  • DATABASE: (필수사항) Spanner 데이터베이스 ID입니다.
  • TABLE: (필수사항) Spanner 입력 테이블 이름 또는 Spanner 입력 테이블의 SQL 쿼리입니다.

    예시(SQL 쿼리는 괄호 안에 있어야 함): (select * from TABLE)

  • CLOUD_STORAGE_OUTPUT_PATH: (필수사항) 출력을 저장할 Cloud Storage 경로입니다.

    예시: gs://example-bucket/example-folder/

  • FORMAT: (필수사항) 출력 데이터 형식입니다. 옵션: avro, parquet, csv, json. 참고: avro의 경우 'file:///usr/lib/spark/external/spark-avro.jar'을 jars gcloud CLI 플래그 또는 API 필드에 추가해야 합니다.

    예시(file:// 접두사는 Dataproc Serverless jar 파일을 참조):

    --jars=file:///usr/lib/spark/external/spark-avro.jar, [ ... 기타 jar]
  • MODE: (필수사항) Cloud Storage 출력의 쓰기 모드입니다. 옵션: append, overwrite, ignore, errorifexists.
  • NUM_PARTITIONS: (선택사항) 테이블 읽기 및 쓰기의 동시 로드에 사용할 수 있는 최대 파티션 수입니다.
  • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND: (선택사항) 사용할 경우 다음 매개변수를 모두 지정해야 합니다.
    • INPUT_PARTITION_COLUMN: Spanner 입력 테이블 파티션 열 이름입니다.
    • LOWERBOUND: 파티션 스트라이드를 결정하는 데 사용되는 Spanner 입력 테이블 파티션 열 하한값입니다.
    • UPPERBOUND: 파티션 스트라이드를 결정하는 데 사용되는 Spanner 입력 테이블 파티션 열 상한값입니다.
  • TEMP_VIEWTEMP_QUERY: (선택사항) 이 두 가지 선택적 매개변수를 사용하여 Cloud Storage에 데이터를 로드하는 동안 Spark SQL 변환을 적용할 수 있습니다. TEMP_VIEW는 쿼리에 사용된 테이블 이름과 동일해야 하고 TEMP_QUERY는 쿼리 문입니다.
  • SERVICE_ACCOUNT: (선택사항) 입력하지 않으면 기본 Compute Engine 서비스 계정이 사용됩니다.
  • PROPERTYPROPERTY_VALUE: (선택사항) Spark 속성=value 쌍의 쉼표로 구분된 목록입니다.
  • LABELLABEL_VALUE: (선택사항) label=value 쌍의 쉼표로 구분된 목록입니다.
  • LOG_LEVEL: (선택사항) 로깅 수준입니다. ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, WARN 중 하나일 수 있습니다. 기본값은 INFO입니다.
  • KMS_KEY: (선택사항) 암호화에 사용할 Cloud Key Management Service 키입니다. 키를 지정하지 않으면 Google 소유 및 Google 관리 키를 사용하여 데이터가 저장 상태에서 암호화됩니다.

    예시: projects/PROJECT_ID/regions/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

HTTP 메서드 및 URL:

POST https://dataproc.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/batches

JSON 요청 본문:


{
  "environmentConfig":{
    "executionConfig":{
      "subnetworkUri":"SUBNET",
      "kmsKey": "KMS_KEY",
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  },
  "labels": {
    "LABEL": "LABEL_VALUE"
  },
  "runtimeConfig": {
    "version": "1.1",
    "properties": {
      "PROPERTY": "PROPERTY_VALUE"
    }
  },
  "sparkBatch":{
    "mainClass":"com.google.cloud.dataproc.templates.main.DataProcTemplate",
    "args":[
      "--template","SPANNERTOGCS",
      "--templateProperty","log.level=LOG_LEVEL",
      "--templateProperty","project.id=PROJECT_ID",
      "--templateProperty","spanner.gcs.input.spanner.id=INSTANCE",
      "--templateProperty","spanner.gcs.input.database.id=DATABASE",
      "--templateProperty","spanner.gcs.input.table.id=TABLE",
      "--templateProperty","spanner.gcs.output.gcs.path=CLOUD_STORAGE_OUTPUT_PATH",
      "--templateProperty","spanner.gcs.output.gcs.saveMode=MODE",
      "--templateProperty","spanner.gcs.output.gcs.format=FORMAT",
      "--templateProperty","spanner.gcs.input.sql.partitionColumn=INPUT_PARTITION_COLUMN",
      "--templateProperty","spanner.gcs.input.sql.lowerBound=LOWERBOUND",
      "--templateProperty","spanner.gcs.input.sql.upperBound=UPPERBOUND",
      "--templateProperty","spanner.gcs.input.sql.numPartitions=NUM_PARTITIONS",
      "--templateProperty","spanner.gcs.temp.table=TEMP_VIEW",
      "--templateProperty","spanner.gcs.temp.query=TEMP_QUERY"
    ],
    "jarFileUris":[
      "file:///usr/lib/spark/external/spark-avro.jar", "gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar"
    ]
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.


{
  "name": "projects/PROJECT_ID/regions/REGION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.dataproc.v1.BatchOperationMetadata",
    "batch": "projects/PROJECT_ID/locations/REGION/batches/BATCH_ID",
    "batchUuid": "de8af8d4-3599-4a7c-915c-798201ed1583",
    "createTime": "2023-02-24T03:31:03.440329Z",
    "operationType": "BATCH",
    "description": "Batch"
  }
}