Plantilla de JDBC a Cloud Storage

Usa la plantilla de JDBC sin servidores de Dataproc a Cloud Storage para extraer datos de las bases de datos JDBC a Cloud Storage.

Esta plantilla admite las siguientes bases de datos como entrada:

  • MySQL
  • PostgreSQL
  • Microsoft SQL Server
  • Oracle

Usa la plantilla

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

gcloud

Antes de usar cualquiera de los datos de comando 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, esta en la REGION especificada en la red default.

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

  • JDBC_CONNECTOR_CLOUD_STORAGE_PATH: Obligatorio. La versión completa de Cloud Storage incluido el nombre del archivo, en el que se almacena el jar del conector de JDBC. Puedes usar los siguientes comandos para descargar conectores JDBC para 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 construir el JDBC_CONNECTION_URL:
    • JDBC_HOST
    • JDBC_PORT
    • JDBC_DATABASE o, para 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 datos de salida. Opciones: avro, parquet, csv o json. Valor predeterminado: avro. Nota: Si es avro, debes agregar "file:///usr/lib/spark/external/spark-avro.jar" al campo de API o a la marca jars de la CLI de gcloud.

    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.
  • TEMPLATE_VERSION: Obligatorio. Especifica latest para la versión más reciente versión 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 gcloud storage ls gs://dataproc-templates-binaries para enumerar las versiones de plantillas disponibles).
  • CLOUD_STORAGE_OUTPUT_PATH: Obligatorio. Cloud Storage y la ruta de acceso en la que se almacenarán los resultados.

    Ejemplo: gs://dataproc-templates/jdbc_to_cloud_storage_output

  • LOG_LEVEL: Opcional Nivel de registro. Puede ser uno de ALL, DEBUG, ERROR, FATAL y INFO, OFF, TRACE o WARN. Valor predeterminado: INFO.
  • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND, NUM_PARTITIONS: Opcional. Si se usan, se deben especificar todos los siguientes parámetros:
    • INPUT_PARTITION_COLUMN: Nombre de la columna de partición de tabla de entrada de JDBC
    • LOWERBOUND: Es el límite inferior de la columna de partición de la tabla de entrada de JDBC que se usa para determinar el intervalo de partición.
    • UPPERBOUND: Es el límite superior de la columna de partición de tabla de entrada de JDBC que se usa para decidir el segmento de la partición.
    • NUM_PARTITIONS: Es la cantidad máxima de particiones que se pueden usar para el paralelismo de las operaciones de lectura y escritura de tablas. Si se especifica, este valor se usa para la conexión de entrada y salida de JDBC. Predeterminado: 10.
  • OUTPUT_PARTITION_COLUMN: Opcional Nombre de la columna de partición de salida.
  • FETCHSIZE: Opcional Indica cuántas filas se deben recuperar por ida y vuelta. Cantidad predeterminada: 10.
  • QUERY o QUERY_FILE: Obligatorio. Establece QUERY o QUERY_FILE para especificar la consulta que se usará para extraer datos de JDBC.
  • TEMP_VIEW y TEMP_QUERY: opcional. Puedes usar estos dos parámetros opcionales para aplicar una transformación de Spark SQL mientras cargas datos en Cloud Storage. TEMPVIEW debe ser igual al nombre de la tabla que se usa en la consulta, y TEMP_QUERY es la sentencia de consulta.
  • SERVICE_ACCOUNT: Opcional Si no se proporciona, se usa la cuenta de servicio de Compute Engine predeterminada.
  • PROPERTY y PROPERTY_VALUE: Opcional. Lista de elementos separados por comas Propiedad de Spark=value pares.
  • LABEL y LABEL_VALUE: Opcional. Lista separada por comas de pares label=value.
  • JDBC_SESSION_INIT: Opcional Sentencia de inicialización de la sesión para leer plantillas de Java.
  • 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 que es propiedad de Google y está 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 \
    --project="PROJECT_ID" \
    --region="REGION" \
    --version="1.1" \
    --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.1" `
    --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.1" ^
    --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 cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Obligatorio. El ID de tu proyecto de Google Cloud que aparece en la Configuración de IAM
  • REGION: Obligatorio. Compute Engine región.
  • 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

  • JDBC_CONNECTOR_CLOUD_STORAGE_PATH: Obligatorio. La versión completa de Cloud Storage incluido el nombre del archivo, en el que se almacena el jar del conector de JDBC. Puedes usar los siguientes comandos para descargar conectores JDBC para 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 construir el JDBC_CONNECTION_URL:
    • JDBC_HOST
    • JDBC_PORT
    • JDBC_DATABASE o, para 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 datos de salida. Opciones: avro, parquet, csv o json. Valor predeterminado: avro. Nota: Si es avro, debes agregar "file:///usr/lib/spark/external/spark-avro.jar" al campo de API o a la marca jars de la CLI de gcloud.

    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.
  • TEMPLATE_VERSION: Obligatorio. Especifica 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 (visita gs://dataproc-templates-binaries o ejecuta gcloud storage ls gs://dataproc-templates-binaries para ver una lista de las versiones de plantilla disponibles).
  • CLOUD_STORAGE_OUTPUT_PATH: Obligatorio. Es la ruta de acceso de Cloud Storage en la que se almacenará el resultado.

    Ejemplo: gs://dataproc-templates/jdbc_to_cloud_storage_output

  • LOG_LEVEL: Opcional Nivel de registro. Puede ser uno de ALL, DEBUG, ERROR, FATAL y INFO, OFF, TRACE o WARN. Valor predeterminado: INFO.
  • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND, NUM_PARTITIONS: Opcional. Si se usan, se deben especificar todos los siguientes parámetros:
    • INPUT_PARTITION_COLUMN: Nombre de la columna de partición de tabla de entrada de JDBC
    • LOWERBOUND: Es el límite inferior de la columna de partición de la tabla de entrada de JDBC que se usa para determinar el intervalo de partición.
    • UPPERBOUND: Es el límite superior de la columna de partición de tabla de entrada de JDBC que se usa para decidir el segmento de la partición.
    • NUM_PARTITIONS: Es la cantidad máxima de particiones que se pueden usar para el paralelismo de las operaciones de lectura y escritura de tablas. Si se especifica, este valor se usa para la conexión de entrada y salida de JDBC. Predeterminado: 10.
  • OUTPUT_PARTITION_COLUMN: Opcional Nombre de la columna de partición de salida.
  • FETCHSIZE: Opcional Indica cuántas filas se deben recuperar por ida y vuelta. Cantidad predeterminada: 10.
  • QUERY o QUERY_FILE: Obligatorio. Establece QUERY o QUERY_FILE para especificar la consulta que se usará para extraer datos de JDBC.
  • TEMP_VIEW y TEMP_QUERY: opcional. Puedes usar estos dos parámetros opcionales para aplicar una transformación de Spark SQL mientras cargas datos en Cloud Storage. TEMPVIEW debe ser igual al nombre de la tabla que se usa en la consulta, y TEMP_QUERY es la sentencia de consulta.
  • SERVICE_ACCOUNT: Opcional Si no se proporciona, se usa la cuenta de servicio de Compute Engine predeterminada.
  • PROPERTY y PROPERTY_VALUE: Opcional. Lista de elementos separados por comas Propiedad de Spark=value pares.
  • LABEL y LABEL_VALUE: Opcional. Es una lista separada por comas de pares label=value.
  • JDBC_SESSION_INIT: Opcional Sentencia de inicialización de la sesión para leer plantillas de Java.
  • KMS_KEY: Opcional La clave de Cloud Key Management Service que se usará para 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=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, 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"
  }
}