Plantilla de JDBC a Cloud Storage

Usa la plantilla JDBC a Cloud Storage de Serverless para Apache Spark para extraer datos de bases de datos JDBC a Cloud Storage.

Esta plantilla admite las siguientes bases de datos como entrada:

  • MySQL
  • PostgreSQL
  • Microsoft SQL Server
  • Oracle

Usar la plantilla

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

gcloud

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • PROJECT_ID: obligatorio. El ID de tu proyecto, que aparece en la sección Configuración de gestión de identidades y accesos. Google Cloud
  • REGION: obligatorio. Región de Compute Engine.
  • SUBNET: opcional. Si no se especifica ninguna subred, se seleccionará la subred de la red default de la región especificada.

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

  • JDBC_CONNECTOR_CLOUD_STORAGE_PATH: obligatorio. Ruta completa de Cloud Storage, incluido el nombre de archivo, donde se almacena el archivo JAR del conector JDBC. Puedes usar los siguientes comandos para descargar conectores JDBC y subirlos a Cloud Storage:
    • MySQL:
      wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.30.tar.gz
            
    • Postgres SQL:
      wget https://jdbc.postgresql.org/download/postgresql-42.2.6.jar
            
    • Microsoft SQL Server:
        
      wget https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/6.4.0.jre8/mssql-jdbc-6.4.0.jre8.jar
            
    • Oracle:
      wget https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/21.7.0.0/ojdbc8-21.7.0.0.jar
            
  • Las siguientes variables se usan para crear el JDBC_CONNECTION_URL obligatorio:
    • JDBC_HOST
    • JDBC_PORT
    • JDBC_DATABASE o, en el caso de Oracle, JDBC_SERVICE
    • JDBC_USERNAME
    • JDBC_PASSWORD

    Crea el JDBC_CONNECTION_URL con uno de los siguientes formatos específicos del conector:

    • MySQL:
      jdbc:mysql://JDBC_HOST:JDBC_PORT/JDBC_DATABASE?user=JDBC_USERNAME&password=JDBC_PASSWORD
              
    • Postgres SQL:
      jdbc:postgresql://JDBC_HOST:JDBC_PORT/JDBC_DATABASE?user=JDBC_USERNAME&password=JDBC_PASSWORD
              
    • Microsoft SQL Server:
       
      jdbc:sqlserver://JDBC_HOST:JDBC_PORT;databaseName=JDBC_DATABASE;user=JDBC_USERNAME;password=JDBC_PASSWORD
              
    • Oracle:
      jdbc:oracle:thin:@//JDBC_HOST:JDBC_PORT/JDBC_SERVICE?user=JDBC_USERNAME&password=
              
  • DRIVER: obligatorio. El controlador JDBC que se usa para la conexión:
    • MySQL:
      com.mysql.cj.jdbc.Driver
              
    • Postgres SQL:
      org.postgresql.Driver
              
    • Microsoft SQL Server:
        
      com.microsoft.sqlserver.jdbc.SQLServerDriver
              
    • Oracle:
      oracle.jdbc.driver.OracleDriver
              
  • FORMAT: obligatorio. Formato de los datos de salida. Opciones: avro, parquet, csv o json. Valor predeterminado: avro. Nota: Si avro, debes añadir "file:///usr/lib/spark/connector/spark-avro.jar" a la marca jars de la CLI de gcloud o al campo de la API.

    Ejemplo (el prefijo file:// hace referencia a un archivo JAR de Serverless para Apache Spark):

    --jars=file:///usr/lib/spark/connector/spark-avro.jar, [, ... otros frascos]
  • MODE: obligatorio. Modo de escritura de la salida de Cloud Storage. Opciones: append, overwrite, ignore o errorifexists.
  • TEMPLATE_VERSION: obligatorio. Especifique latest para 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). Consulte gs://dataproc-templates-binaries o ejecute gcloud storage ls gs://dataproc-templates-binaries para ver una lista de las versiones de plantilla disponibles.
  • CLOUD_STORAGE_OUTPUT_PATH: obligatorio. Ruta de Cloud Storage en la que se almacenará la salida.

    Ejemplo: gs://dataproc-templates/jdbc_to_cloud_storage_output

  • LOG_LEVEL: opcional. Nivel de registro. Puede ser uno de los siguientes: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE o WARN. Valor predeterminado: INFO.
  • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND, NUM_PARTITIONS: opcional. Si se usa, se deben especificar todos los parámetros siguientes:
    • INPUT_PARTITION_COLUMN nombre de la columna de partición de la tabla de entrada de JDBC.
    • LOWERBOUND: límite inferior de la columna de partición de la tabla de entrada de JDBC que se usa para determinar el paso de partición.
    • UPPERBOUND: límite superior de la columna de partición de la tabla de entrada de JDBC que se usa para decidir el intervalo de partición.
    • NUM_PARTITIONS: número máximo de particiones que se pueden usar para el paralelismo de lecturas y escrituras de tablas. Si se especifica, este valor se usa para la conexión de entrada y salida de JDBC. Valor predeterminado: 10.
  • OUTPUT_PARTITION_COLUMN: opcional. Nombre de la columna de partición de salida.
  • FETCHSIZE: opcional. Número de filas que se obtendrán por viaje de ida y vuelta. Valor predeterminado: 10.
  • QUERY o QUERY_FILE: obligatorio. Define QUERY o QUERY_FILE para especificar la consulta que se usará para extraer datos de JDBC.
  • TEMP_VIEW y TEMP_QUERY: opcionales. Puedes usar estos dos parámetros opcionales para aplicar una transformación de Spark SQL al cargar datos en Cloud Storage. TEMPVIEW debe ser el mismo que el nombre de la tabla que se usa 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: opcional. Lista de pares propiedad de Spark=value separados por comas.
  • LABEL y LABEL_VALUE: opcional. Lista de pares label=value separados por comas.
  • JDBC_SESSION_INIT: opcional. Instrucción de inicialización de sesión para leer plantillas de Java.
  • KMS_KEY: opcional. La clave de Cloud Key Management Service que se va a usar para el cifrado. Si no se especifica ninguna clave, los datos se cifran en reposo con una Google-owned and Google-managed encryption key.

    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 \
    --project="PROJECT_ID" \
    --region="REGION" \
    --version="1.2" \
    --jars="gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar,JDBC_CONNECTOR_CLOUD_STORAGE_PATH" \
    --subnet="SUBNET" \
    --kms-key="KMS_KEY" \
    --service-account="SERVICE_ACCOUNT" \
    --properties="PROPERTY=PROPERTY_VALUE" \
    --labels="LABEL=LABEL_VALUE" \
    -- --template=JDBCTOGCS \
    --templateProperty project.id="PROJECT_ID" \
    --templateProperty log.level="LOG_LEVEL" \
    --templateProperty jdbctogcs.jdbc.url="JDBC_CONNECTION_URL" \
    --templateProperty jdbctogcs.jdbc.driver.class.name="DRIVER" \
    --templateProperty jdbctogcs.output.format="FORMAT" \
    --templateProperty jdbctogcs.output.location="CLOUD_STORAGE_OUTPUT_PATH" \
    --templateProperty jdbctogcs.sql="QUERY" \
    --templateProperty jdbctogcs.sql.file="QUERY_FILE" \
    --templateProperty jdbctogcs.sql.partitionColumn="INPUT_PARTITION_COLUMN" \
    --templateProperty jdbctogcs.sql.lowerBound="LOWERBOUND" \
    --templateProperty jdbctogcs.sql.upperBound="UPPERBOUND" \
    --templateProperty jdbctogcs.jdbc.fetchsize="FETCHSIZE" \
    --templateProperty jdbctogcs.sql.numPartitions="NUM_PARTITIONS" \
    --templateProperty jdbctogcs.write.mode="MODE" \
    --templateProperty dbctogcs.output.partition.col="OUTPUT_PARTITION_COLUMN" \
    --templateProperty jdbctogcs.temp.table="TEMP_VIEW" \
    --templateProperty jdbctogcs.temp.query="TEMP_QUERY"

Windows (PowerShell)

gcloud dataproc batches submit spark `
    --class=com.google.cloud.dataproc.templates.main.DataProcTemplate `
    --project="PROJECT_ID" `
    --region="REGION" `
    --version="1.2" `
    --jars="gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar,JDBC_CONNECTOR_CLOUD_STORAGE_PATH" `
    --subnet="SUBNET" `
    --kms-key="KMS_KEY" `
    --service-account="SERVICE_ACCOUNT" `
    --properties="PROPERTY=PROPERTY_VALUE" `
    --labels="LABEL=LABEL_VALUE" `
    -- --template=JDBCTOGCS `
    --templateProperty project.id="PROJECT_ID" `
    --templateProperty log.level="LOG_LEVEL" `
    --templateProperty jdbctogcs.jdbc.url="JDBC_CONNECTION_URL" `
    --templateProperty jdbctogcs.jdbc.driver.class.name="DRIVER" `
    --templateProperty jdbctogcs.output.format="FORMAT" `
    --templateProperty jdbctogcs.output.location="CLOUD_STORAGE_OUTPUT_PATH" `
    --templateProperty jdbctogcs.sql="QUERY" `
    --templateProperty jdbctogcs.sql.file="QUERY_FILE" `
    --templateProperty jdbctogcs.sql.partitionColumn="INPUT_PARTITION_COLUMN" `
    --templateProperty jdbctogcs.sql.lowerBound="LOWERBOUND" `
    --templateProperty jdbctogcs.sql.upperBound="UPPERBOUND" `
    --templateProperty jdbctogcs.jdbc.fetchsize="FETCHSIZE" `
    --templateProperty jdbctogcs.sql.numPartitions="NUM_PARTITIONS" `
    --templateProperty jdbctogcs.write.mode="MODE" `
    --templateProperty dbctogcs.output.partition.col="OUTPUT_PARTITION_COLUMN" `
    --templateProperty jdbctogcs.temp.table="TEMP_VIEW" `
    --templateProperty jdbctogcs.temp.query="TEMP_QUERY"

Windows (cmd.exe)

gcloud dataproc batches submit spark ^
    --class=com.google.cloud.dataproc.templates.main.DataProcTemplate ^
    --project="PROJECT_ID" ^
    --region="REGION" ^
    --version="1.2" ^
    --jars="gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar,JDBC_CONNECTOR_CLOUD_STORAGE_PATH" ^
    --subnet="SUBNET" ^
    --kms-key="KMS_KEY" ^
    --service-account="SERVICE_ACCOUNT" ^
    --properties="PROPERTY=PROPERTY_VALUE" ^
    --labels="LABEL=LABEL_VALUE" ^
    -- --template=JDBCTOGCS ^
    --templateProperty project.id="PROJECT_ID" ^
    --templateProperty log.level="LOG_LEVEL" ^
    --templateProperty jdbctogcs.jdbc.url="JDBC_CONNECTION_URL" ^
    --templateProperty jdbctogcs.jdbc.driver.class.name="DRIVER" ^
    --templateProperty jdbctogcs.output.format="FORMAT" ^
    --templateProperty jdbctogcs.output.location="CLOUD_STORAGE_OUTPUT_PATH" ^
    --templateProperty jdbctogcs.sql="QUERY" ^
    --templateProperty jdbctogcs.sql.file="QUERY_FILE" ^
    --templateProperty jdbctogcs.sql.partitionColumn="INPUT_PARTITION_COLUMN" ^
    --templateProperty jdbctogcs.sql.lowerBound="LOWERBOUND" ^
    --templateProperty jdbctogcs.sql.upperBound="UPPERBOUND" ^
    --templateProperty jdbctogcs.jdbc.fetchsize="FETCHSIZE" ^
    --templateProperty jdbctogcs.sql.numPartitions="NUM_PARTITIONS" ^
    --templateProperty jdbctogcs.write.mode="MODE" ^
    --templateProperty dbctogcs.output.partition.col="OUTPUT_PARTITION_COLUMN" ^
    --templateProperty jdbctogcs.temp.table="TEMP_VIEW" ^
    --templateProperty jdbctogcs.temp.query="TEMP_QUERY"

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: obligatorio. El ID de tu proyecto, que aparece en la sección Configuración de gestión de identidades y accesos. Google Cloud
  • REGION: obligatorio. Región de Compute Engine.
  • SUBNET: opcional. Si no se especifica ninguna subred, se seleccionará la subred de la red default de la región especificada.

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

  • JDBC_CONNECTOR_CLOUD_STORAGE_PATH: obligatorio. Ruta completa de Cloud Storage, incluido el nombre de archivo, donde se almacena el archivo JAR del conector JDBC. Puedes usar los siguientes comandos para descargar conectores JDBC y subirlos a Cloud Storage:
    • MySQL:
      wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.30.tar.gz
            
    • Postgres SQL:
      wget https://jdbc.postgresql.org/download/postgresql-42.2.6.jar
            
    • Microsoft SQL Server:
        
      wget https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/6.4.0.jre8/mssql-jdbc-6.4.0.jre8.jar
            
    • Oracle:
      wget https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/21.7.0.0/ojdbc8-21.7.0.0.jar
            
  • Las siguientes variables se usan para crear el JDBC_CONNECTION_URL obligatorio:
    • JDBC_HOST
    • JDBC_PORT
    • JDBC_DATABASE o, en el caso de Oracle, JDBC_SERVICE
    • JDBC_USERNAME
    • JDBC_PASSWORD

    Crea el JDBC_CONNECTION_URL con uno de los siguientes formatos específicos del conector:

    • MySQL:
      jdbc:mysql://JDBC_HOST:JDBC_PORT/JDBC_DATABASE?user=JDBC_USERNAME&password=JDBC_PASSWORD
              
    • Postgres SQL:
      jdbc:postgresql://JDBC_HOST:JDBC_PORT/JDBC_DATABASE?user=JDBC_USERNAME&password=JDBC_PASSWORD
              
    • Microsoft SQL Server:
       
      jdbc:sqlserver://JDBC_HOST:JDBC_PORT;databaseName=JDBC_DATABASE;user=JDBC_USERNAME;password=JDBC_PASSWORD
              
    • Oracle:
      jdbc:oracle:thin:@//JDBC_HOST:JDBC_PORT/JDBC_SERVICE?user=JDBC_USERNAME&password=
              
  • DRIVER: obligatorio. El controlador JDBC que se usa para la conexión:
    • MySQL:
      com.mysql.cj.jdbc.Driver
              
    • Postgres SQL:
      org.postgresql.Driver
              
    • Microsoft SQL Server:
        
      com.microsoft.sqlserver.jdbc.SQLServerDriver
              
    • Oracle:
      oracle.jdbc.driver.OracleDriver
              
  • FORMAT: obligatorio. Formato de los datos de salida. Opciones: avro, parquet, csv o json. Valor predeterminado: avro. Nota: Si avro, debes añadir "file:///usr/lib/spark/connector/spark-avro.jar" a la marca jars de la CLI de gcloud o al campo de la API.

    Ejemplo (el prefijo file:// hace referencia a un archivo JAR de Serverless para Apache Spark):

    --jars=file:///usr/lib/spark/connector/spark-avro.jar, [, ... otros frascos]
  • MODE: obligatorio. Modo de escritura de la salida de Cloud Storage. Opciones: append, overwrite, ignore o errorifexists.
  • TEMPLATE_VERSION: obligatorio. Especifique latest para 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). Consulte gs://dataproc-templates-binaries o ejecute gcloud storage ls gs://dataproc-templates-binaries para ver una lista de las versiones de plantilla disponibles.
  • CLOUD_STORAGE_OUTPUT_PATH: obligatorio. Ruta de Cloud Storage en la que se almacenará la salida.

    Ejemplo: gs://dataproc-templates/jdbc_to_cloud_storage_output

  • LOG_LEVEL: opcional. Nivel de registro. Puede ser uno de los siguientes: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE o WARN. Valor predeterminado: INFO.
  • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND, NUM_PARTITIONS: opcional. Si se usa, se deben especificar todos los parámetros siguientes:
    • INPUT_PARTITION_COLUMN nombre de la columna de partición de la tabla de entrada de JDBC.
    • LOWERBOUND: límite inferior de la columna de partición de la tabla de entrada de JDBC que se usa para determinar el paso de partición.
    • UPPERBOUND: límite superior de la columna de partición de la tabla de entrada de JDBC que se usa para decidir el intervalo de partición.
    • NUM_PARTITIONS: número máximo de particiones que se pueden usar para el paralelismo de lecturas y escrituras de tablas. Si se especifica, este valor se usa para la conexión de entrada y salida de JDBC. Valor predeterminado: 10.
  • OUTPUT_PARTITION_COLUMN: opcional. Nombre de la columna de partición de salida.
  • FETCHSIZE: opcional. Número de filas que se obtendrán por viaje de ida y vuelta. Valor predeterminado: 10.
  • QUERY o QUERY_FILE: obligatorio. Define QUERY o QUERY_FILE para especificar la consulta que se usará para extraer datos de JDBC.
  • TEMP_VIEW y TEMP_QUERY: opcionales. Puedes usar estos dos parámetros opcionales para aplicar una transformación de Spark SQL al cargar datos en Cloud Storage. TEMPVIEW debe ser el mismo que el nombre de la tabla que se usa 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: opcional. Lista de pares propiedad de Spark=value separados por comas.
  • LABEL y LABEL_VALUE: opcional. Lista de pares label=value separados por comas.
  • JDBC_SESSION_INIT: opcional. Instrucción de inicialización de sesión para leer plantillas de Java.
  • KMS_KEY: opcional. La clave de Cloud Key Management Service que se va a usar para el cifrado. Si no se especifica ninguna clave, los datos se cifran en reposo con una Google-owned and Google-managed encryption key.

    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.2",
    "properties": {
      "PROPERTY": "PROPERTY_VALUE"
    }
  },
  "sparkBatch": {
    "mainClass": "com.google.cloud.dataproc.templates.main.DataProcTemplate",
    "args": [
      "--template=JDBCTOGCS",
      "--templateProperty","log.level=LOG_LEVEL",
      "--templateProperty","project.id=PROJECT_ID",
      "--templateProperty","jdbctogcs.jdbc.url=JDBC_CONNECTION_URL",
      "--templateProperty","jdbctogcs.jdbc.driver.class.name=DRIVER",
      "--templateProperty","jdbctogcs.output.location=CLOUD_STORAGE_OUTPUT_PATH",
      "--templateProperty","jdbctogcs.write.mode=MODE",
      "--templateProperty","jdbctogcs.output.format=FORMAT",
      "--templateProperty","jdbctogcs.sql.numPartitions=NUM_PARTITIONS",
      "--templateProperty","jdbctogcs.jdbc.fetchsize=FETCHSIZE",
      "--templateProperty","jdbctogcs.sql=QUERY",
      "--templateProperty","jdbctogcs.sql.file=QUERY_FILE",
      "--templateProperty","jdbctogcs.sql.partitionColumn=INPUT_PARTITION_COLUMN",
      "--templateProperty","jdbctogcs.sql.lowerBound=LOWERBOUND",
      "--templateProperty","jdbctogcs.sql.upperBound=UPPERBOUND",
      "--templateProperty","jdbctogcs.output.partition.col=OUTPUT_PARTITION_COLUMN",
      "--templateProperty","jdbctogcs.temp.table=TEMP_VIEW",
      "--templateProperty","jdbctogcs.temp.query=TEMP_QUERY",
      "--templateProperty","jdbctogcs.jdbc.sessioninitstatement=JDBC_SESSION_INIT"
    ],
    "jarFileUris": [
      "gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar", "JDBC_CONNECTOR_CLOUD_STORAGE_PATH"
    ]
  }
}

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:


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