Plantilla de JDBC a BigQuery

Usa la plantilla de JDBC a BigQuery de Serverless for Apache Spark para extraer datos de bases de datos JDBC a BigQuery.

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 la API de Dataproc.

gcloud

Antes de usar cualquiera de los datos de comando 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. Región de Compute Engine.
  • TEMPLATE_VERSION: Obligatorio. Especifica latest para la versión de plantilla más reciente 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 plantilla disponibles).
  • SUBNET: Opcional Si no se especifica una subred, se selecciona la subred en la REGIÓN especificada en la red default.

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

  • JDBC_CONNECTOR_CLOUD_STORAGE_PATH: Obligatorio. Ruta de acceso completa de Cloud Storage, incluido el nombre de archivo, en la que se almacena el archivo 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
            
    • SQL de Postgres:
      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
            
  • DATASET y TABLE: Obligatorios. Conjunto de datos y tabla de BigQuery de destino.
  • Las siguientes variables se usan para construir el JDBC_CONNECTION_URL requerido:
    • JDBC_HOST
    • JDBC_PORT
    • JDBC_DATABASE o, en el caso de Oracle, JDBC_SERVICE
    • JDBC_USERNAME
    • JDBC_PASSWORD

    Construye 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
                
    • SQL de Postgres:
      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=JDBC_PASSWORD
                
  • DRIVER: Obligatorio. El controlador JDBC que se usará para la conexión:
    • MySQL:
      com.mysql.cj.jdbc.Driver
              
    • SQL de Postgres:
      org.postgresql.Driver
              
    • Microsoft SQL Server:
        
      com.microsoft.sqlserver.jdbc.SQLServerDriver
              
    • Oracle:
      oracle.jdbc.driver.OracleDriver
              
  • QUERY: Obligatorio. Consulta en SQL para extraer datos de JDBC.
  • MODE: Obligatorio. Modo de escritura para el resultado de BigQuery. Opciones: append, overwrite, ignore o errorifexists.
  • TEMP_BUCKET: Obligatorio. Nombre del bucket de Cloud Storage. Este bucket se usa para la carga de BigQuery.

    Ejemplo: gs://dataproc-templates/jdbc_to_cloud_storage_output

  • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND, PARTITIONS: Opcional. Si se usa, se deben especificar todos los siguientes parámetros:
    • INPUT_PARTITION_COLUMN: Es el 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 intervalo 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 la segmentación de la partición.
    • PARTITIONS: Es la cantidad máxima de particiones que se pueden usar para el paralelismo de las lecturas y escrituras de la tabla. Si se especifica, este valor se usa para la conexión de entrada y salida de JDBC. Predeterminado: 10.
  • FETCHSIZE: Opcional Cantidad de filas que se recuperarán por viaje de ida y vuelta. Cantidad predeterminada: 10.
  • TEMPVIEW y SQL_QUERY: opcional. Puedes usar estos dos parámetros opcionales para aplicar una transformación de Spark SQL mientras cargas datos en BigQuery. TEMPVIEW es el nombre de la vista temporal y SQL_QUERY es la instrucción de la consulta. TEMPVIEW y el nombre de la tabla en SQL_QUERY deben coincidir.
  • SERVICE_ACCOUNT: Opcional Si no se proporciona, se usa la cuenta de servicio de Compute Engine predeterminada.
  • 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.
  • LOG_LEVEL: Opcional Es el nivel de registro. Puede ser uno de los siguientes: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE o WARN. Valor predeterminado: INFO.
  • KMS_KEY: Opcional Es 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 un 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 \
    --version="1.2" \
    --project="PROJECT_ID" \
    --region="REGION" \
    --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=JDBCTOBIGQUERY \
    --templateProperty log.level="LOG_LEVEL" \
    --templateProperty jdbctobq.bigquery.location="DATASET.TABLE" \
    --templateProperty jdbctobq.jdbc.url="JDBC_CONNECTION_URL" \
    --templateProperty jdbctobq.jdbc.driver.class.name="DRIVER" \
    --templateProperty jdbctobq.write.mode="MODE" \
    --templateProperty jdbctobq.temp.gcs.bucket="TEMP_BUCKET" \
    --templateProperty jdbctobq.sql="QUERY" \
    --templateProperty jdbctobq.sql.numPartitions="PARTITIONS" \
    --templateProperty jdbctobq.sql.partitionColumn="INPUT_PARTITION_COLUMN" \
    --templateProperty jdbctobq.sql.lowerBound="LOWERBOUND" \
    --templateProperty jdbctobq.sql.upperBound="UPPERBOUND" \
    --templateProperty jdbctobq.jdbc.fetchsize="FETCHSIZE" \
    --templateProperty jdbctobq.temp.table="TEMPVIEW" \
    --templateProperty jdbctobq.temp.query="SQL_QUERY"

Windows (PowerShell)

gcloud dataproc batches submit spark `
    --class=com.google.cloud.dataproc.templates.main.DataProcTemplate `
    --version="1.2" `
    --project="PROJECT_ID" `
    --region="REGION" `
    --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=JDBCTOBIGQUERY `
    --templateProperty log.level="LOG_LEVEL" `
    --templateProperty jdbctobq.bigquery.location="DATASET.TABLE" `
    --templateProperty jdbctobq.jdbc.url="JDBC_CONNECTION_URL" `
    --templateProperty jdbctobq.jdbc.driver.class.name="DRIVER" `
    --templateProperty jdbctobq.write.mode="MODE" `
    --templateProperty jdbctobq.temp.gcs.bucket="TEMP_BUCKET" `
    --templateProperty jdbctobq.sql="QUERY" `
    --templateProperty jdbctobq.sql.numPartitions="PARTITIONS" `
    --templateProperty jdbctobq.sql.partitionColumn="INPUT_PARTITION_COLUMN" `
    --templateProperty jdbctobq.sql.lowerBound="LOWERBOUND" `
    --templateProperty jdbctobq.sql.upperBound="UPPERBOUND" `
    --templateProperty jdbctobq.jdbc.fetchsize="FETCHSIZE" `
    --templateProperty jdbctobq.temp.table="TEMPVIEW" `
    --templateProperty jdbctobq.temp.query="SQL_QUERY"

Windows (cmd.exe)

gcloud dataproc batches submit spark ^
    --class=com.google.cloud.dataproc.templates.main.DataProcTemplate ^
    --version="1.2" ^
    --project="PROJECT_ID" ^
    --region="REGION" ^
    --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=JDBCTOBIGQUERY ^
    --templateProperty log.level="LOG_LEVEL" ^
    --templateProperty jdbctobq.bigquery.location="DATASET.TABLE" ^
    --templateProperty jdbctobq.jdbc.url="JDBC_CONNECTION_URL" ^
    --templateProperty jdbctobq.jdbc.driver.class.name="DRIVER" ^
    --templateProperty jdbctobq.write.mode="MODE" ^
    --templateProperty jdbctobq.temp.gcs.bucket="TEMP_BUCKET" ^
    --templateProperty jdbctobq.sql="QUERY" ^
    --templateProperty jdbctobq.sql.numPartitions="PARTITIONS" ^
    --templateProperty jdbctobq.sql.partitionColumn="INPUT_PARTITION_COLUMN" ^
    --templateProperty jdbctobq.sql.lowerBound="LOWERBOUND" ^
    --templateProperty jdbctobq.sql.upperBound="UPPERBOUND" ^
    --templateProperty jdbctobq.jdbc.fetchsize="FETCHSIZE" ^
    --templateProperty jdbctobq.temp.table="TEMPVIEW" ^
    --templateProperty jdbctobq.temp.query="SQL_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. Región de Compute Engine.
  • TEMPLATE_VERSION: Obligatorio. Especifica latest para la versión de plantilla más reciente 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 plantilla disponibles).
  • SUBNET: Opcional Si no se especifica una subred, se selecciona la subred en la REGIÓN especificada en la red default.

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

  • JDBC_CONNECTOR_CLOUD_STORAGE_PATH: Obligatorio. Ruta de acceso completa de Cloud Storage, incluido el nombre de archivo, en la que se almacena el archivo 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
            
    • SQL de Postgres:
      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
            
  • DATASET y TABLE: Obligatorios. Conjunto de datos y tabla de BigQuery de destino.
  • Las siguientes variables se usan para construir el JDBC_CONNECTION_URL requerido:
    • JDBC_HOST
    • JDBC_PORT
    • JDBC_DATABASE o, en el caso de Oracle, JDBC_SERVICE
    • JDBC_USERNAME
    • JDBC_PASSWORD

    Construye 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
                
    • SQL de Postgres:
      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=JDBC_PASSWORD
                
  • DRIVER: Obligatorio. El controlador JDBC que se usará para la conexión:
    • MySQL:
      com.mysql.cj.jdbc.Driver
              
    • SQL de Postgres:
      org.postgresql.Driver
              
    • Microsoft SQL Server:
        
      com.microsoft.sqlserver.jdbc.SQLServerDriver
              
    • Oracle:
      oracle.jdbc.driver.OracleDriver
              
  • QUERY: Obligatorio. Consulta en SQL para extraer datos de JDBC.
  • MODE: Obligatorio. Modo de escritura para el resultado de BigQuery. Opciones: append, overwrite, ignore o errorifexists.
  • TEMP_BUCKET: Obligatorio. Nombre del bucket de Cloud Storage. Este bucket se usa para la carga de BigQuery.

    Ejemplo: gs://dataproc-templates/jdbc_to_cloud_storage_output

  • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND, PARTITIONS: Opcional. Si se usa, se deben especificar todos los siguientes parámetros:
    • INPUT_PARTITION_COLUMN: Es el 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 intervalo 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 la segmentación de la partición.
    • PARTITIONS: Es la cantidad máxima de particiones que se pueden usar para el paralelismo de las lecturas y escrituras de la tabla. Si se especifica, este valor se usa para la conexión de entrada y salida de JDBC. Predeterminado: 10.
  • FETCHSIZE: Opcional Cantidad de filas que se recuperarán por viaje de ida y vuelta. Cantidad predeterminada: 10.
  • TEMPVIEW y SQL_QUERY: opcional. Puedes usar estos dos parámetros opcionales para aplicar una transformación de Spark SQL mientras cargas datos en BigQuery. TEMPVIEW es el nombre de la vista temporal y SQL_QUERY es la instrucción de la consulta. TEMPVIEW y el nombre de la tabla en SQL_QUERY deben coincidir.
  • SERVICE_ACCOUNT: Opcional Si no se proporciona, se usa la cuenta de servicio de Compute Engine predeterminada.
  • 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.
  • LOG_LEVEL: Opcional Es el nivel de registro. Puede ser uno de los siguientes: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE o WARN. Valor predeterminado: INFO.
  • KMS_KEY: Opcional Es 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 un 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","JDBCTOBIGQUERY",
      "--templateProperty","log.level=LOG_LEVEL",
      "--templateProperty","jdbctobq.bigquery.location=DATASET.TABLE",
      "--templateProperty","jdbctobq.jdbc.url=JDBC_CONNECTION_URL",
      "--templateProperty","jdbctobq.jdbc.driver.class.name=DRIVER",
      "--templateProperty","jdbctobq.sql=QUERY",
      "--templateProperty","jdbctobq.write.mode=MODE",
      "--templateProperty","jdbctobq.temp.gcs.bucket=TEMP_BUCKET",
      "--templateProperty","jdbctobq.sql.partitionColumn=INPUT_PARTITION_COLUMN",
      "--templateProperty","jdbctobq.sql.lowerBound=LOWERBOUND",
      "--templateProperty","jdbctobq.sql.upperBound=UPPERBOUND",
      "--templateProperty","jdbctobq.sql.numPartitions=PARTITIONS",
      "--templateProperty","jdbctobq.jdbc.fetchsize=FETCHSIZE"
    ],
    "jarFileUris": [
      "gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar","gs://JDBC_CONNECTOR_GCS_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"
  }
}