Plantilla de JDBC a Cloud Spanner

Usa la plantilla de JDBC sin servidores de Dataproc a Spanner para extraer datos de bases de datos JDBC a Spanner.

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 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).
  • 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 ruta de acceso completa de Cloud Storage, incluido el nombre del archivo, donde 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
  • Las siguientes variables se usan para construir el JDBC_CONNECTION_URL requerido:
    • JDBC_HOST, JDBC_PORT, JDBC_DATABASE o, para Oracle, JDBC_SERVICE, JDBC_USERNAME y JDBC_PASSWORD: Obligatorio. Host, puerto, base de datos, nombre de usuario y contraseña de JDBC
      • MySQL:
        jdbc:mysql://JDBC_HOST:JDBC_PORT/JDBC_DATABASE?user=JDBC_USERNAME&password=JDBC_PASSWORD
      • PostgreSQL:
        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 o QUERY_FILE: Obligatorio. Establece QUERY o QUERY_FILE para especificar la consulta que se usará para extraer datos de JDBC.
    • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND y NUM_PARTITIONS: Opcional. Si se usan, 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: 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 la tabla de entrada de JDBC que se usa para decidir el intervalo de 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.
    • FETCHSIZE: Opcional Indica cuántas filas se deben recuperar por ida y vuelta. Cantidad predeterminada: 10.
    • JDBC_SESSION_INIT: Opcional Sentencia de inicialización de la sesión para leer plantillas de Java.
    • TEMPVIEW y SQL_QUERY: opcional. Puedes usar estos dos parámetros opcionales para aplicar una transformación de Spark SQL mientras cargas datos en Spanner. TEMPVIEW es el nombre de la vista temporal y SQL_QUERY es la sentencia de consulta. TEMPVIEW y el nombre de la tabla en SQL_QUERY deben coincidir.
    • INSTANCE: Obligatorio. ID de la instancia de Spanner.
    • SPANNER_DATABASE: Obligatorio. ID de la base de datos de Spanner.
    • TABLE: Obligatorio. Es el nombre de la tabla de salida de Spanner.
    • SPANNER_JDBC_DIALECT: Obligatorio. Dialecto JDBC de Spanner. Opciones: googlesql o postgresql. La configuración predeterminada es googlesql.
    • MODE: Opcional Es el modo de escritura para la salida de Spanner. Opciones: Append, Overwrite, Ignore o ErrorIfExists. La configuración predeterminada es ErrorIfExists.
    • PRIMARY_KEY: Obligatorio. Columnas de clave primaria separadas por comas necesarias para crear la tabla de salida de Spanner
    • SERVICE_ACCOUNT: Opcional Si no se proporciona, se usa la cuenta de servicio de Compute Engine predeterminada.
    • PROPERTY y PROPERTY_VALUE: Opcional. Es una lista separada por comas de pares propiedad de Spark=value.
    • LABEL y LABEL_VALUE: Opcional. Es una lista separada por comas de pares label=value.
    • LOG_LEVEL: Opcional Nivel de registro. Puede ser una de las siguientes opciones: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE o WARN. El valor predeterminado es INFO.
    • 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 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 \
        --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=JDBCTOSPANNER \
        --templateProperty log.level="LOG_LEVEL" \
        --templateProperty project.id="PROJECT_ID" \
        --templateProperty jdbctospanner.jdbc.url="JDBC_CONNECTION_URL" \
        --templateProperty jdbctospanner.jdbc.driver.class.name="DRIVER" \
        --templateProperty jdbctospanner.jdbc.fetchsize="FETCHSIZE" \
        --templateProperty jdbctospanner.jdbc.sessioninitstatement="JDBC_SESSION_INIT" \
        --templateProperty jdbctospanner.sql="QUERY" \
        --templateProperty jdbctospanner.sql.file="QUERY_FILE" \
        --templateProperty jdbctospanner.sql.numPartitions="NUM_PARTITIONS" \
        --templateProperty jdbctospanner.sql.partitionColumn="INPUT_PARTITION_COLUMN" \
        --templateProperty jdbctospanner.sql.lowerBound="LOWERBOUND" \
        --templateProperty jdbctospanner.sql.upperBound="UPPERBOUND" \
        --templateProperty jdbctospanner.output.instance="INSTANCE" \
        --templateProperty jdbctospanner.output.database="SPANNER_DATABASE" \
        --templateProperty jdbctospanner.output.table="TABLE" \
        --templateProperty jdbctospanner.output.saveMode="MODE" \
        --templateProperty jdbctospanner.output.primaryKey="PRIMARY_KEY" \
        --templateProperty jdbctospanner.output.batch.size="BATCHSIZE" \
        --templateProperty jdbctospanner.temp.table="TEMPVIEW" \
        --templateProperty jdbctospanner.temp.query="SQL_QUERY" \
        --templateProperty spanner.jdbc.dialect="SPANNER_JDBC_DIALECT" 

    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=JDBCTOSPANNER `
        --templateProperty log.level="LOG_LEVEL" `
        --templateProperty project.id="PROJECT_ID" `
        --templateProperty jdbctospanner.jdbc.url="JDBC_CONNECTION_URL" `
        --templateProperty jdbctospanner.jdbc.driver.class.name="DRIVER" `
        --templateProperty jdbctospanner.jdbc.fetchsize="FETCHSIZE" `
        --templateProperty jdbctospanner.jdbc.sessioninitstatement="JDBC_SESSION_INIT" `
        --templateProperty jdbctospanner.sql="QUERY" `
        --templateProperty jdbctospanner.sql.file="QUERY_FILE" `
        --templateProperty jdbctospanner.sql.numPartitions="NUM_PARTITIONS" `
        --templateProperty jdbctospanner.sql.partitionColumn="INPUT_PARTITION_COLUMN" `
        --templateProperty jdbctospanner.sql.lowerBound="LOWERBOUND" `
        --templateProperty jdbctospanner.sql.upperBound="UPPERBOUND" `
        --templateProperty jdbctospanner.output.instance="INSTANCE" `
        --templateProperty jdbctospanner.output.database="SPANNER_DATABASE" `
        --templateProperty jdbctospanner.output.table="TABLE" `
        --templateProperty jdbctospanner.output.saveMode="MODE" `
        --templateProperty jdbctospanner.output.primaryKey="PRIMARY_KEY" `
        --templateProperty jdbctospanner.output.batch.size="BATCHSIZE" `
        --templateProperty jdbctospanner.temp.table="TEMPVIEW" `
        --templateProperty jdbctospanner.temp.query="SQL_QUERY" `
        --templateProperty spanner.jdbc.dialect="SPANNER_JDBC_DIALECT" 

    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=JDBCTOSPANNER ^
        --templateProperty log.level="LOG_LEVEL" ^
        --templateProperty project.id="PROJECT_ID" ^
        --templateProperty jdbctospanner.jdbc.url="JDBC_CONNECTION_URL" ^
        --templateProperty jdbctospanner.jdbc.driver.class.name="DRIVER" ^
        --templateProperty jdbctospanner.jdbc.fetchsize="FETCHSIZE" ^
        --templateProperty jdbctospanner.jdbc.sessioninitstatement="JDBC_SESSION_INIT" ^
        --templateProperty jdbctospanner.sql="QUERY" ^
        --templateProperty jdbctospanner.sql.file="QUERY_FILE" ^
        --templateProperty jdbctospanner.sql.numPartitions="NUM_PARTITIONS" ^
        --templateProperty jdbctospanner.sql.partitionColumn="INPUT_PARTITION_COLUMN" ^
        --templateProperty jdbctospanner.sql.lowerBound="LOWERBOUND" ^
        --templateProperty jdbctospanner.sql.upperBound="UPPERBOUND" ^
        --templateProperty jdbctospanner.output.instance="INSTANCE" ^
        --templateProperty jdbctospanner.output.database="SPANNER_DATABASE" ^
        --templateProperty jdbctospanner.output.table="TABLE" ^
        --templateProperty jdbctospanner.output.saveMode="MODE" ^
        --templateProperty jdbctospanner.output.primaryKey="PRIMARY_KEY" ^
        --templateProperty jdbctospanner.output.batch.size="BATCHSIZE" ^
        --templateProperty jdbctospanner.temp.table="TEMPVIEW" ^
        --templateProperty jdbctospanner.temp.query="SQL_QUERY" ^
        --templateProperty spanner.jdbc.dialect="SPANNER_JDBC_DIALECT" 

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 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).
  • 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 ruta de acceso completa de Cloud Storage, incluido el nombre del archivo, donde 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
  • Las siguientes variables se usan para construir el JDBC_CONNECTION_URL requerido:
    • JDBC_HOST, JDBC_PORT, JDBC_DATABASE o, para Oracle, JDBC_SERVICE, JDBC_USERNAME y JDBC_PASSWORD: Obligatorio. Host, puerto, base de datos, nombre de usuario y contraseña de JDBC
      • MySQL:
        jdbc:mysql://JDBC_HOST:JDBC_PORT/JDBC_DATABASE?user=JDBC_USERNAME&password=JDBC_PASSWORD
      • PostgreSQL:
        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 o QUERY_FILE: Obligatorio. Establece QUERY o QUERY_FILE para especificar la consulta que se usará para extraer datos de JDBC.
    • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND y NUM_PARTITIONS: Opcional. Si se usan, 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: 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 la tabla de entrada de JDBC que se usa para decidir el intervalo de 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.
    • FETCHSIZE: Opcional Indica cuántas filas se deben recuperar por ida y vuelta. Cantidad predeterminada: 10.
    • JDBC_SESSION_INIT: Opcional Sentencia de inicialización de la sesión para leer plantillas de Java.
    • TEMPVIEW y SQL_QUERY: opcional. Puedes usar estos dos parámetros opcionales para aplicar una transformación de Spark SQL mientras cargas datos en Spanner. TEMPVIEW es el nombre de la vista temporal y SQL_QUERY es la sentencia de consulta. TEMPVIEW y el nombre de la tabla en SQL_QUERY deben coincidir.
    • INSTANCE: Obligatorio. ID de la instancia de Spanner.
    • SPANNER_DATABASE: Obligatorio. ID de la base de datos de Spanner.
    • TABLE: Obligatorio. Es el nombre de la tabla de salida de Spanner.
    • SPANNER_JDBC_DIALECT: Obligatorio. Dialecto JDBC de Spanner. Opciones: googlesql o postgresql. La configuración predeterminada es googlesql.
    • MODE: Opcional Es el modo de escritura para la salida de Spanner. Opciones: Append, Overwrite, Ignore o ErrorIfExists. La configuración predeterminada es ErrorIfExists.
    • PRIMARY_KEY: Obligatorio. Columnas de clave primaria separadas por comas necesarias para crear la tabla de salida de Spanner
    • SERVICE_ACCOUNT: Opcional Si no se proporciona, se usa la cuenta de servicio de Compute Engine predeterminada.
    • PROPERTY y PROPERTY_VALUE: Opcional. Es una lista separada por comas de pares propiedad de Spark=value.
    • LABEL y LABEL_VALUE: Opcional. Es una lista separada por comas de pares label=value.
    • LOG_LEVEL: Opcional Nivel de registro. Puede ser una de las siguientes opciones: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE o WARN. El valor predeterminado es INFO.
    • 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 que es propiedad de Google y está 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.2",
        "properties": {
          "PROPERTY": "PROPERTY_VALUE"
        }
      },
      "sparkBatch": {
        "mainClass": "com.google.cloud.dataproc.templates.main.DataProcTemplate",
        "args": [
          "--template","JDBCTOSPANNER",
          "--templateProperty","log.level=LOG_LEVEL",
          "--templateProperty","project.id=PROJECT_ID",
          "--templateProperty","jdbctospanner.jdbc.url=JDBC_CONNECTION_URL",
          "--templateProperty","jdbctospanner.jdbc.driver.class.name=DRIVER",
          "--templateProperty","jdbctospanner.jdbc.fetchsize=FETCHSIZE",
          "--templateProperty","jdbctospanner.jdbc.sessioninitstatement=JDBC_SESSION_INIT",
          "--templateProperty","jdbctospanner.sql=QUERY",
          "--templateProperty","jdbctospanner.sql.file=QUERY_FILE",
          "--templateProperty","jdbctospanner.sql.numPartitions=NUM_PARTITIONS",
          "--templateProperty","jdbctospanner.sql.partitionColumn=INPUT_PARTITION_COLUMN",
          "--templateProperty","jdbctospanner.sql.lowerBound=LOWERBOUND",
          "--templateProperty","jdbctospanner.sql.upperBound=UPPERBOUND",
          "--templateProperty","jdbctospanner.output.instance=INSTANCE",
          "--templateProperty","jdbctospanner.output.database=SPANNER_DATABASE",
          "--templateProperty","jdbctospanner.output.table=TABLE",
          "--templateProperty","jdbctospanner.output.saveMode=MODE",
          "--templateProperty","jdbctospanner.output.primaryKey=PRIMARY_KEY",
          "--templateProperty","jdbctospanner.output.batch.size=BATCHSIZE",
          "--templateProperty","jdbctospanner.temp.table=TEMPVIEW",
          "--templateProperty","jdbctospanner.temp.query=SQL_QUERY",
          "--templateProperty spanner.jdbc.dialect=SPANNER_JDBC_DIALECT"
        ],
        "jarFileUris": [
          "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"
      }
    }