Plantilla de JDBC a Cloud Spanner
Usa la plantilla de JDBC a Spanner sin servidores de Dataproc para extraer de las bases de datos de 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 la CLI de gcloud 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 ejecutagcloud 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 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
- MySQL:
-
Las siguientes variables se usan para construir el
JDBC_CONNECTION_URL:
- 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
- Postgres SQL:
org.postgresql.Driver
- Microsoft SQL Server:
com.microsoft.sqlserver.jdbc.SQLServerDriver
- Oracle:
oracle.jdbc.driver.OracleDriver
- MySQL:
- QUERY o QUERY_FILE: Obligatorio.
Configura
QUERY
oQUERY_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, todas estas opciones
se deben especificar 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 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
.
- FETCHSIZE: Opcional Indica cuántas filas se deben recuperar por ida y vuelta. Cantidad predeterminada: 10.
- JDBC_SESSION_INIT: Opcional Sesión para leer las 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 instrucción de la consulta. TEMPVIEW y el nombre de la tabla en SQL_QUERY deben coincidir.
- INSTANCE: Obligatorio. ID de 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.
- MODE: Opcional Es el modo de escritura para la salida de Spanner.
Opciones:
Append
,Overwrite
,Ignore
oErrorIfExists
. La configuración predeterminada esErrorIfExists
. - PRIMARY_KEY: Obligatorio. Se necesitan columnas de clave primaria separadas por comas cuando se crea la tabla de salida de Spanner.
- SERVICE_ACCOUNT: Opcional Si no se proporciona, el cuenta de servicio predeterminada de Compute Engine y control sobre el uso de sus datos.
- PROPERTY y PROPERTY_VALUE:
Opcional. Es una lista separada por comas de pares propiedad de Spark=
value
. - LABEL y LABEL_VALUE:
Opcional. Lista separada por comas de pares
label
=value
. - LOG_LEVEL: Opcional Nivel de registro. Puede ser uno de
ALL
,DEBUG
,ERROR
,FATAL
yINFO
,OFF
,TRACE
oWARN
. Valor 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 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.1" \ --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"
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,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"
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,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"
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.
- 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 ejecutagcloud storage ls gs://dataproc-templates-binaries
para enumerar las versiones de plantillas disponibles). - 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
- MySQL:
-
Las siguientes variables se usan para construir el
JDBC_CONNECTION_URL:
- 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
- Postgres SQL:
org.postgresql.Driver
- Microsoft SQL Server:
com.microsoft.sqlserver.jdbc.SQLServerDriver
- Oracle:
oracle.jdbc.driver.OracleDriver
- MySQL:
- QUERY o QUERY_FILE: Obligatorio.
Configura
QUERY
oQUERY_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, todas estas opciones
se deben especificar 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 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
.
- FETCHSIZE: Opcional Indica cuántas filas se deben recuperar por ida y vuelta. Cantidad predeterminada: 10.
- JDBC_SESSION_INIT: Opcional Sesión para leer las 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 instrucción de la consulta. TEMPVIEW y el nombre de la tabla en SQL_QUERY deben coincidir.
- INSTANCE: Obligatorio. ID de 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.
- MODE: Opcional Es el modo de escritura para la salida de Spanner.
Opciones:
Append
,Overwrite
,Ignore
oErrorIfExists
. La configuración predeterminada esErrorIfExists
. - PRIMARY_KEY: Obligatorio. Se necesitan columnas de clave primaria separadas por comas cuando se crea la tabla de salida de Spanner.
- SERVICE_ACCOUNT: Opcional Si no se proporciona, el cuenta de servicio predeterminada de Compute Engine y control sobre el uso de sus datos.
- 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
. - LOG_LEVEL: Opcional Nivel de registro. Puede ser uno de
ALL
,DEBUG
,ERROR
,FATAL
yINFO
,OFF
,TRACE
oWARN
. Valor 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 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.1", "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" ], "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" } }