Plantilla de Cloud Spanner a Cloud Storage

Usa la plantilla de Dataproc Serverless Cloud Spanner to Cloud Storage para extraer datos de las bases de datos de Spanner a Cloud Storage.

Usa la plantilla

Ejecuta la plantilla con gcloud CLI o la API de Dataproc.

gcloud

Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

  • PROJECT_ID: Obligatorio. El ID del proyecto de Google Cloud que aparece en la configuración de IAM.
  • REGION: Obligatorio. Región de Compute Engine.
  • SUBNET: Opcional Si no se especifica una subred, se selecciona la subred en la REGION especificada en la red default.

    Ejemplo: projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME

  • TEMPLATE_VERSION: Obligatorio. Especifica latest para obtener la versión más reciente de la plantilla o la fecha de una versión específica, por ejemplo, 2023-03-17_v0.1.0-beta (visita gs://dataproc-templates-binaries o ejecuta gsutil ls gs://dataproc-templates-binaries para ver las versiones de plantilla disponibles).
  • INSTANCE: Obligatorio. ID de instancia de Spanner.
  • DATABASE: Obligatorio. ID de la base de datos de Spanner.
  • TABLE: Obligatorio. Nombre de la tabla de entrada de Spanner o una consulta en SQL en la tabla de entrada de Spanner.

    Ejemplo (la consulta en SQL debe estar entre paréntesis): (select * from TABLE)

  • CLOUD_STORAGE_OUTPUT_PATH: Obligatorio. Ruta de acceso de Cloud Storage donde se almacenará el resultado.

    Ejemplo: gs://example-bucket/example-folder/

  • FORMAT: Obligatorio. Formato de datos de salida. Opciones: avro, parquet, csv o json. Nota: Si es avro, debes agregar “file:///usr/lib/spark/external/spark-avro.jar” a la marca jars de gcloud CLI o al campo de la API.

    Ejemplo (el prefijo file:// hace referencia a un archivo jar de Dataproc Serverless):

    --jars=file:///usr/lib/spark/external/spark-avro.jar, [ ... otros frascos]
  • MODE: Obligatorio. Modo de escritura para la salida de Cloud Storage. Opciones: append, overwrite, ignore o errorifexists.
  • NUM_PARTITIONS: Opcional La cantidad máxima de particiones que se pueden usar para el paralelismo de lecturas y escrituras de tablas.
  • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND: Opcionales. Si se usan, se deben especificar todos los siguientes parámetros:
    • INPUT_PARTITION_COLUMN: El nombre de la columna de partición de tabla de entrada de Spanner
    • LOWERBOUND: Límite inferior de la columna de partición de tabla de entrada de Spanner que se usa para determinar el segmento de la partición.
    • UPPERBOUND: Es el límite superior de la columna de partición de tabla de entrada de Spanner que se usa para decidir el segmento de la partición.
  • TEMP_VIEW y TEMP_QUERY: opcional. Puedes usar estos dos parámetros opcionales para aplicar una transformación Spark SQL mientras cargas datos en Cloud Storage. TEMP_VIEW debe ser el mismo nombre de la tabla utilizada en la consulta, y TEMP_QUERY es la instrucción de la consulta.
  • SERVICE_ACCOUNT: Opcional Si no se proporciona, se usa la cuenta de servicio predeterminada de Compute Engine.
  • PROPERTY y PROPERTY_VALUE: Opcionales. Lista separada por comas de pares de propiedad de Spark=value.
  • LABEL y LABEL_VALUE: Opcionales. Lista separada por comas de pares label=value.
  • LOG_LEVEL: Opcional Nivel de registro. Puede ser ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE o WARN. Predeterminado: INFO.
  • KMS_KEY: Opcional La clave de Cloud Key Management Service que se usará en la encriptación. Si no se especifica una clave, los datos se encriptan en reposo con una clave de propiedad de Google y una administrada por Google.

    Ejemplo: projects/PROJECT_ID/regions/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

Ejecuta el siguiente comando:

Linux, macOS o 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

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Obligatorio. El ID del proyecto de Google Cloud que aparece en la configuración de IAM.
  • REGION: Obligatorio. Región de Compute Engine.
  • SUBNET: Opcional Si no se especifica una subred, se selecciona la subred en la REGION especificada en la red default.

    Ejemplo: projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME

  • TEMPLATE_VERSION: Obligatorio. Especifica latest para obtener la versión más reciente de la plantilla o la fecha de una versión específica, por ejemplo, 2023-03-17_v0.1.0-beta (visita gs://dataproc-templates-binaries o ejecuta gsutil ls gs://dataproc-templates-binaries para ver las versiones de plantilla disponibles).
  • INSTANCE: Obligatorio. ID de instancia de Spanner.
  • DATABASE: Obligatorio. ID de la base de datos de Spanner.
  • TABLE: Obligatorio. Nombre de la tabla de entrada de Spanner o una consulta en SQL en la tabla de entrada de Spanner.

    Ejemplo (la consulta en SQL debe estar entre paréntesis): (select * from TABLE)

  • CLOUD_STORAGE_OUTPUT_PATH: Obligatorio. Ruta de acceso de Cloud Storage donde se almacenará el resultado.

    Ejemplo: gs://example-bucket/example-folder/

  • FORMAT: Obligatorio. Formato de datos de salida. Opciones: avro, parquet, csv o json. Nota: Si es avro, debes agregar “file:///usr/lib/spark/external/spark-avro.jar” a la marca jars de gcloud CLI o al campo de la API.

    Ejemplo (el prefijo file:// hace referencia a un archivo jar de Dataproc Serverless):

    --jars=file:///usr/lib/spark/external/spark-avro.jar, [ ... otros frascos]
  • MODE: Obligatorio. Modo de escritura para la salida de Cloud Storage. Opciones: append, overwrite, ignore o errorifexists.
  • NUM_PARTITIONS: Opcional La cantidad máxima de particiones que se pueden usar para el paralelismo de lecturas y escrituras de tablas.
  • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND: Opcionales. Si se usan, se deben especificar todos los siguientes parámetros:
    • INPUT_PARTITION_COLUMN: El nombre de la columna de partición de tabla de entrada de Spanner
    • LOWERBOUND: Límite inferior de la columna de partición de tabla de entrada de Spanner que se usa para determinar el segmento de la partición.
    • UPPERBOUND: Es el límite superior de la columna de partición de tabla de entrada de Spanner que se usa para decidir el segmento de la partición.
  • TEMP_VIEW y TEMP_QUERY: opcional. Puedes usar estos dos parámetros opcionales para aplicar una transformación Spark SQL mientras cargas datos en Cloud Storage. TEMP_VIEW debe ser el mismo nombre de la tabla utilizada en la consulta, y TEMP_QUERY es la instrucción de la consulta.
  • SERVICE_ACCOUNT: Opcional Si no se proporciona, se usa la cuenta de servicio predeterminada de Compute Engine.
  • PROPERTY y PROPERTY_VALUE: Opcionales. Lista separada por comas de pares de propiedad de Spark=value.
  • LABEL y LABEL_VALUE: Opcionales. Lista separada por comas de pares label=value.
  • LOG_LEVEL: Opcional Nivel de registro. Puede ser ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE o WARN. Predeterminado: INFO.
  • KMS_KEY: Opcional La clave de Cloud Key Management Service que se usará en la encriptación. Si no se especifica una clave, los datos se encriptan en reposo con una clave de propiedad de Google y una administrada por Google.

    Ejemplo: projects/PROJECT_ID/regions/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "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"
    ]
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "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"
  }
}