Plantilla de JDBC a Cloud Storage
Usa la plantilla de Managed Service para Apache Spark JDBC a Cloud Storage para extraer datos de bases de datos de 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 Managed Service para Apache Spark.
gcloud
Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: Obligatorio. Tu Google Cloud ID del proyecto que aparece en la configuración de IAM.
- REGION: Obligatorio. Región de Compute Engine.
- 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. La ruta de acceso completa de Cloud Storage
ruta, incluido el nombre de archivo, donde se almacena el jar del conector de JDBC. Puedes usar los siguientes comandos para descargar
conectores de 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 obligatorio
JDBC_CONNECTION_URL:
- JDBC_HOST
- JDBC_PORT
- JDBC_DATABASE o, para 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 - 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
- MySQL:
- FORMAT: Obligatorio. Formato de datos de salida. Opciones:
avro,parquet,csv, ojson. Valor predeterminado:avro. Nota: Si usasavro, debes agregar "file:///usr/lib/spark/connector/spark-avro.jar" a la marcajarsde la gcloud CLI o al campo de la API.Ejemplo (el prefijo
file://hace referencia a un archivo jar de Managed Service para Apache Spark):--jars=file:///usr/lib/spark/connector/spark-avro.jar,[, ... other jars] - MODE: Obligatorio. Modo de escritura para la salida de Cloud Storage.
Opciones:
append,overwrite,ignore, oerrorifexists. - TEMPLATE_VERSION: Obligatorio. Especifica
latestpara 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-binariespara enumerar las versiones de plantilla disponibles). - CLOUD_STORAGE_OUTPUT_PATH: Obligatorio. Ruta de acceso de Cloud Storage
donde se almacenará la salida.
Ejemplo:
gs://templates/jdbc_to_cloud_storage_output - LOG_LEVEL: Opcional Nivel de registro. Puede ser uno de los siguientes:
ALL,DEBUG,ERROR,FATAL,INFO,OFF,TRACEoWARN. Valor predeterminado:INFO. - INPUT_PARTITION_COLUMN,
LOWERBOUND,
UPPERBOUND,
NUM_PARTITIONS: Opcional Si se usa, se deben especificar todos los siguientes
parámetros:
- INPUT_PARTITION_COLUMN: 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 paso 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 el paso de partición.
- NUM_PARTITIONS: Es la cantidad máxima de particiones que se pueden usar para el paralelismo de las lecturas y escrituras de tablas.
Si se especifica, este valor se usa para la conexión de entrada y salida de JDBC. Valor predeterminado:
10.
- OUTPUT_PARTITION_COLUMN: Opcional Nombre de la columna de partición de salida.
- FETCHSIZE: Opcional Cuántas filas se recuperarán por viaje de ida y vuelta. Valor predeterminado: 10.
- QUERY o QUERY_FILE: Obligatorio.
Configura **
QUERYoQUERY_FILEpara 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 el mismo que el nombre de la tabla que se usa en la consulta, y TEMP_QUERY es la instrucción de consulta.
- SERVICE_ACCOUNT: Opcional Si no se proporciona, se usa la cuenta de servicio predeterminada de Compute Engine.
- PROPERTY y PROPERTY_VALUE:
Opcional. Lista separada por comas de pares de propiedad
de Spark=
value. - LABEL y LABEL_VALUE:
Opcional. Lista de pares de
label=valueseparados por comas. - JDBC_SESSION_INIT: Opcional Instrucción de inicialización de 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 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="2.3" \ --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="2.3" ` --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="2.3" ^ --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. Tu Google Cloud ID del proyecto que aparece en la configuración de IAM.
- REGION: Obligatorio. Región de Compute Engine.
- 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. La ruta de acceso completa de Cloud Storage
ruta, incluido el nombre de archivo, donde se almacena el jar del conector de JDBC. Puedes usar los siguientes comandos para descargar
conectores de 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 obligatorio
JDBC_CONNECTION_URL:
- JDBC_HOST
- JDBC_PORT
- JDBC_DATABASE o, para 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 - 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
- MySQL:
- FORMAT: Obligatorio. Formato de datos de salida. Opciones:
avro,parquet,csv, ojson. Valor predeterminado:avro. Nota: Si usasavro, debes agregar "file:///usr/lib/spark/connector/spark-avro.jar" a la marcajarsde la gcloud CLI o al campo de la API.Ejemplo (el prefijo
file://hace referencia a un archivo jar de Managed Service para Apache Spark):--jars=file:///usr/lib/spark/connector/spark-avro.jar,[, ... other jars] - MODE: Obligatorio. Modo de escritura para la salida de Cloud Storage.
Opciones:
append,overwrite,ignore, oerrorifexists. - TEMPLATE_VERSION: Obligatorio. Especifica
latestpara 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-binariespara enumerar las versiones de plantilla disponibles). - CLOUD_STORAGE_OUTPUT_PATH: Obligatorio. Ruta de acceso de Cloud Storage
donde se almacenará la salida.
Ejemplo:
gs://templates/jdbc_to_cloud_storage_output - LOG_LEVEL: Opcional Nivel de registro. Puede ser uno de los siguientes:
ALL,DEBUG,ERROR,FATAL,INFO,OFF,TRACEoWARN. Valor predeterminado:INFO. - INPUT_PARTITION_COLUMN,
LOWERBOUND,
UPPERBOUND,
NUM_PARTITIONS: Opcional Si se usa, se deben especificar todos los siguientes
parámetros:
- INPUT_PARTITION_COLUMN: 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 paso 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 el paso de partición.
- NUM_PARTITIONS: Es la cantidad máxima de particiones que se pueden usar para el paralelismo de las lecturas y escrituras de tablas.
Si se especifica, este valor se usa para la conexión de entrada y salida de JDBC. Valor predeterminado:
10.
- OUTPUT_PARTITION_COLUMN: Opcional Nombre de la columna de partición de salida.
- FETCHSIZE: Opcional Cuántas filas se recuperarán por viaje de ida y vuelta. Valor predeterminado: 10.
- QUERY o QUERY_FILE: Obligatorio.
Configura **
QUERYoQUERY_FILEpara 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 el mismo que el nombre de la tabla que se usa en la consulta, y TEMP_QUERY es la instrucción de consulta.
- SERVICE_ACCOUNT: Opcional Si no se proporciona, se usa la cuenta de servicio predeterminada de Compute Engine.
- PROPERTY y PROPERTY_VALUE:
Opcional. Lista separada por comas de pares de propiedad
de Spark=
value. - LABEL y LABEL_VALUE:
Opcional. Lista de pares de
label=valueseparados por comas. - JDBC_SESSION_INIT: Opcional Instrucción de inicialización de 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 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": "2.3",
"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"
}
}