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 la API de Dataproc.
Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:
PROJECT_ID : Obligatorio. El Google Cloud ID de tu proyecto que aparece en la Configuración de IAMREGION : Obligatorio. Región de Compute Engine.SUBNET : Opcional Si no se especifica una subred, se selecciona la subred en la REGION especificada en la reddefault
.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
- MySQL:
- 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 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 - 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=
DRIVER : Obligatorio. El controlador JDBC que se usa 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
- MySQL:
FORMAT : Obligatorio. Formato de datos de salida. Opciones:avro
,parquet
,csv
ojson
. Valor predeterminado:avro
. Nota: Si esavro
, debes agregar "file:///usr/lib/spark/connector/spark-avro.jar
" al campo de API o a la marcajars
de gcloud CLI.Ejemplo (el prefijo
file://
hace referencia a un archivo jar de Dataproc Serverless):--jars=file:///usr/lib/spark/connector/spark-avro.jar,
[, ... other jars]MODE : Obligatorio. Es el modo de escritura para la salida de Cloud Storage. Opciones:append
,overwrite
,ignore
oerrorifexists
.TEMPLATE_VERSION : Obligatorio. Especificalatest
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).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 una de las siguientes opciones:ALL
,DEBUG
,ERROR
,FATAL
,INFO
,OFF
,TRACE
oWARN
. Valor predeterminado:INFO
.INPUT_PARTITION_COLUMN ,LOWERBOUND ,UPPERBOUND yNUM_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
.
OUTPUT_PARTITION_COLUMN : Opcional Es el 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 oQUERY_FILE : Obligatorio. EstableceQUERY
oQUERY_FILE
para especificar la consulta que se usará para extraer datos de JDBC.TEMP_VIEW yTEMP_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 el mismo que el 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 predeterminada de Compute Engine.PROPERTY yPROPERTY_VALUE : Opcional. Es una lista separada por comas de pares propiedad de Spark=value
.LABEL yLABEL_VALUE : Opcional. Es una lista separada por comas de pareslabel
=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 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 \ --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 "
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
PROJECT_ID : Obligatorio. El Google Cloud ID de tu proyecto que aparece en la Configuración de IAMREGION : Obligatorio. Región de Compute Engine.SUBNET : Opcional Si no se especifica una subred, se selecciona la subred en la REGION especificada en la reddefault
.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
- MySQL:
- 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 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 - 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=
DRIVER : Obligatorio. El controlador JDBC que se usa 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
- MySQL:
FORMAT : Obligatorio. Formato de datos de salida. Opciones:avro
,parquet
,csv
ojson
. Valor predeterminado:avro
. Nota: Si esavro
, debes agregar "file:///usr/lib/spark/connector/spark-avro.jar
" al campo de API o a la marcajars
de gcloud CLI.Ejemplo (el prefijo
file://
hace referencia a un archivo jar de Dataproc Serverless):--jars=file:///usr/lib/spark/connector/spark-avro.jar,
[, ... other jars]MODE : Obligatorio. Es el modo de escritura para la salida de Cloud Storage. Opciones:append
,overwrite
,ignore
oerrorifexists
.TEMPLATE_VERSION : Obligatorio. Especificalatest
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).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 una de las siguientes opciones:ALL
,DEBUG
,ERROR
,FATAL
,INFO
,OFF
,TRACE
oWARN
. Valor predeterminado:INFO
.INPUT_PARTITION_COLUMN ,LOWERBOUND ,UPPERBOUND yNUM_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
.
OUTPUT_PARTITION_COLUMN : Opcional Es el 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 oQUERY_FILE : Obligatorio. EstableceQUERY
oQUERY_FILE
para especificar la consulta que se usará para extraer datos de JDBC.TEMP_VIEW yTEMP_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 el mismo que el 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 predeterminada de Compute Engine.PROPERTY yPROPERTY_VALUE : Opcional. Es una lista separada por comas de pares propiedad de Spark=value
.LABEL yLABEL_VALUE : Opcional. Es una lista separada por comas de pareslabel
=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 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=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:
curl (Linux, macOS o Cloud Shell)
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://dataproc.googleapis.com/v1/projects/PROJECT_ID /locations/REGION /batches"
PowerShell (Windows)
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://dataproc.googleapis.com/v1/projects/PROJECT_ID /locations/REGION /batches" | Select-Object -Expand Content
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" } }