La plantilla de SQL Server a BigQuery es una canalización por lotes que copia datos de una tabla de SQL Server en una tabla de BigQuery. Esta canalización usa JDBC para conectarse a SQL Server. Para añadir una capa de protección adicional, también puedes incluir una clave de Cloud KMS junto con los parámetros de nombre de usuario, contraseña y cadena de conexión codificados en Base64 y encriptados con la clave de Cloud KMS. Para obtener más información sobre cómo cifrar los parámetros de nombre de usuario, contraseña y cadena de conexión, consulta el endpoint de cifrado de la API Cloud KMS.
Requisitos del flujo de procesamiento
- La tabla de BigQuery debe existir antes de ejecutar el flujo de procesamiento.
- La tabla de BigQuery debe tener un esquema compatible.
- Se debe poder acceder a la base de datos relacional desde la subred en la que se ejecuta Dataflow.
Parámetros de plantilla
Parámetros obligatorios
- driverJars lista separada por comas de archivos JAR del controlador. Por ejemplo,
gs://your-bucket/driver_jar1.jar,gs://your-bucket/driver_jar2.jar
. - driverClassName el nombre de la clase del controlador JDBC. Por ejemplo,
com.mysql.jdbc.Driver
. - connectionURL: la cadena de URL de conexión JDBC. Por ejemplo,
jdbc:mysql://some-host:3306/sampledb
. Puedes introducir este valor como una cadena cifrada con una clave de Cloud KMS y, a continuación, codificada en Base64. Quita los espacios de la cadena codificada en Base64. Ten en cuenta la diferencia entre una cadena de conexión de base de datos de Oracle no RAC (jdbc:oracle:thin:@some-host:<port>:<sid>
) y una cadena de conexión de base de datos de Oracle RAC (jdbc:oracle:thin:@//some-host[:<port>]/<service_name>
). Por ejemplo,jdbc:mysql://some-host:3306/sampledb
. - outputTable la ubicación de la tabla de salida de BigQuery. Por ejemplo,
<PROJECT_ID>:<DATASET_NAME>.<TABLE_NAME>
. - bigQueryLoadingTemporaryDirectory directorio temporal del proceso de carga de BigQuery. Por ejemplo,
gs://your-bucket/your-files/temp_dir
.
Parámetros opcionales
- connectionProperties la cadena de propiedades que se va a usar para la conexión JDBC. El formato de la cadena debe ser
[propertyName=property;]*
.Para obtener más información, consulta Configuration Properties (https://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html) en la documentación de MySQL. Por ejemplo,unicode=true;characterEncoding=UTF-8
. - username: el nombre de usuario que se usará para la conexión JDBC. Se puede enviar como una cadena cifrada con una clave de Cloud KMS o como un secreto de Secret Manager con el formato projects/{project}/secrets/{secret}/versions/{secret_version}.
- password: la contraseña que se usará para la conexión JDBC. Se puede enviar como una cadena cifrada con una clave de Cloud KMS o como un secreto de Secret Manager con el formato projects/{project}/secrets/{secret}/versions/{secret_version}.
- Consulta: la consulta que se va a ejecutar en la fuente para extraer los datos. Ten en cuenta que algunos tipos de JDBC SQL y BigQuery, aunque tengan el mismo nombre, presentan algunas diferencias. Estas son algunas asignaciones importantes de tipos de SQL a BigQuery que debes tener en cuenta:
DATETIME --> TIMESTAMP
Puede que sea necesario convertir tipos si los esquemas no coinciden. Por ejemplo,select * from sampledb.sample_table
. - KMSEncryptionKey clave de encriptado de Cloud KMS que se va a usar para desencriptar el nombre de usuario, la contraseña y la cadena de conexión. Si proporcionas una clave de Cloud KMS, también debes cifrar el nombre de usuario, la contraseña y la cadena de conexión. Por ejemplo,
projects/your-project/locations/global/keyRings/your-keyring/cryptoKeys/your-key
. - useColumnAlias si se define como
true
, la canalización usa el alias de columna (AS
) en lugar del nombre de columna para asignar las filas a BigQuery. El valor predeterminado esfalse
. - isTruncate si se define como
true
, la canalización se trunca antes de cargar los datos en BigQuery. El valor predeterminado esfalse
, lo que hace que la canalización añada datos. - partitionColumn si se especifica
partitionColumn
junto contable
, JdbcIO lee la tabla en paralelo ejecutando varias instancias de la consulta en la misma tabla (subconsulta) mediante intervalos. Actualmente, admite columnas de particiónLong
yDateTime
. Pasa el tipo de columna porpartitionColumnType
. - partitionColumnType el tipo de
partitionColumn
. Puede serlong
odatetime
. El valor predeterminado es "long". - table: la tabla de la que se leerá al usar particiones. Este parámetro también acepta una subconsulta entre paréntesis. Por ejemplo,
(select id, name from Person) as subq
. - numPartitions el número de particiones. Junto con los límites inferior y superior, este valor forma pasos de partición para las expresiones de la cláusula
WHERE
generadas que se usan para dividir la columna de partición de forma uniforme. Si el valor introducido es inferior a1
, el número se establece en1
. - lowerBound el límite inferior que se va a usar en el esquema de partición. Si no se proporciona, Apache Beam infiere automáticamente este valor para los tipos admitidos.
datetime
partitionColumnType acepta el límite inferior en el formatoyyyy-MM-dd HH:mm:ss.SSSZ
. Por ejemplo,2024-02-20 07:55:45.000+03:30
. - upperBound límite superior que se va a usar en el esquema de partición. Si no se proporciona, Apache Beam infiere automáticamente este valor para los tipos admitidos.
datetime
partitionColumnType acepta el límite superior en el formatoyyyy-MM-dd HH:mm:ss.SSSZ
. Por ejemplo,2024-02-20 07:55:45.000+03:30
. - fetchSize número de filas que se van a obtener de la base de datos a la vez. No se usa para lecturas particionadas. El valor predeterminado es 50.000.
- createDisposition el valor de CreateDisposition de BigQuery que se va a usar. Por ejemplo,
CREATE_IF_NEEDED
oCREATE_NEVER
. El valor predeterminado es CREATE_NEVER. - bigQuerySchemaPath la ruta de Cloud Storage del esquema JSON de BigQuery. Si
createDisposition
se define comoCREATE_IF_NEEDED
, este parámetro debe especificarse. Por ejemplo,gs://your-bucket/your-schema.json
. - outputDeadletterTable la tabla de BigQuery que se va a usar para los mensajes que no se hayan podido enviar a la tabla de salida, con el formato
"PROJECT_ID:DATASET_NAME.TABLE_NAME"
. Si la tabla no existe, se crea cuando se ejecuta la canalización. Si no se especifica este parámetro, la canalización fallará si se producen errores de escritura.Este parámetro solo se puede especificar siuseStorageWriteApi
ouseStorageWriteApiAtLeastOnce
tienen el valor "true". - disabledAlgorithms algoritmos separados por comas que se van a inhabilitar. Si se le asigna el valor
none
, no se inhabilita ningún algoritmo. Usa este parámetro con precaución, ya que los algoritmos inhabilitados de forma predeterminada pueden tener vulnerabilidades o problemas de rendimiento. Por ejemplo,SSLv3, RC4
. - extraFilesToStage rutas de Cloud Storage o secretos de Secret Manager separados por comas de los archivos que se van a almacenar en el trabajador. Estos archivos se guardan en el directorio /extra_files de cada trabajador. Por ejemplo,
gs://<BUCKET_NAME>/file.txt,projects/<PROJECT_ID>/secrets/<SECRET_ID>/versions/<VERSION_ID>
. - useStorageWriteApi si es
true
, la canalización usa la API Storage Write de BigQuery (https://cloud.google.com/bigquery/docs/write-api). El valor predeterminado esfalse
. Para obtener más información, consulta el artículo sobre cómo usar la API Storage Write (https://beam.apache.org/documentation/io/built-in/google-bigquery/#storage-write-api). - useStorageWriteApiAtLeastOnce cuando se usa la API Storage Write, especifica la semántica de escritura. Para usar la semántica de al menos una vez (https://beam.apache.org/documentation/io/built-in/google-bigquery/#at-least-once-semantics), asigna a este parámetro el valor
true
. Para usar la semántica de entrega única, asigna el valorfalse
al parámetro. Este parámetro solo se aplica cuandouseStorageWriteApi
estrue
. El valor predeterminado esfalse
.
Ejecutar la plantilla
Consola
- Ve a la página Crear tarea a partir de plantilla de Dataflow. Ir a Crear tarea a partir de plantilla
- En el campo Nombre de la tarea, introduce un nombre único.
- Opcional: En Endpoint regional, seleccione un valor en el menú desplegable. La región predeterminada es
us-central1
.Para ver una lista de las regiones en las que puedes ejecutar una tarea de Dataflow, consulta Ubicaciones de Dataflow.
- En el menú desplegable Plantilla de flujo de datos, seleccione the SQL Server to BigQuery template.
- En los campos de parámetros proporcionados, introduzca los valores de los parámetros.
- Haz clic en Ejecutar trabajo.
gcloud
En tu shell o terminal, ejecuta la plantilla:
gcloud dataflow flex-template run JOB_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/SQLServer_to_BigQuery \ --parameters \ connectionURL=JDBC_CONNECTION_URL,\ query=SOURCE_SQL_QUERY,\ outputTable=PROJECT_ID:DATASET.TABLE_NAME, bigQueryLoadingTemporaryDirectory=PATH_TO_TEMP_DIR_ON_GCS,\ connectionProperties=CONNECTION_PROPERTIES,\ username=CONNECTION_USERNAME,\ password=CONNECTION_PASSWORD,\ KMSEncryptionKey=KMS_ENCRYPTION_KEY
Haz los cambios siguientes:
JOB_NAME
: un nombre de trabajo único que elijasVERSION
: la versión de la plantilla que quieres usarPuedes usar los siguientes valores:
latest
para usar la última versión de la plantilla, que está disponible en la carpeta principal sin fecha del contenedor: gs://dataflow-templates-REGION_NAME/latest/- el nombre de la versión, como
2023-09-12-00_RC00
, para usar una versión específica de la plantilla, que se encuentra anidada en la carpeta principal correspondiente con la fecha en el bucket: gs://dataflow-templates-REGION_NAME/
REGION_NAME
: la región en la que quieras desplegar tu trabajo de Dataflow. Por ejemplo,us-central1
JDBC_CONNECTION_URL
: la URL de conexión de JDBCSOURCE_SQL_QUERY
: la consulta de SQL que se va a ejecutar en la base de datos de origenDATASET
: tu conjunto de datos de BigQueryTABLE_NAME
: nombre de la tabla de BigQueryPATH_TO_TEMP_DIR_ON_GCS
: la ruta de Cloud Storage al directorio temporalCONNECTION_PROPERTIES
: las propiedades de conexión JDBC, si es necesarioCONNECTION_USERNAME
: nombre de usuario de la conexión JDBCCONNECTION_PASSWORD
: la contraseña de la conexión JDBCKMS_ENCRYPTION_KEY
: la clave de cifrado de Cloud KMS
API
Para ejecutar la plantilla mediante la API REST, envía una solicitud HTTP POST. Para obtener más información sobre la API y sus ámbitos de autorización, consulta projects.templates.launch
.
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch { "launchParameter": { "jobName": "JOB_NAME", "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/SQLServer_to_BigQuery", "parameters": { "connectionURL": "JDBC_CONNECTION_URL", "query": "SOURCE_SQL_QUERY", "outputTable": "PROJECT_ID:DATASET.TABLE_NAME", "bigQueryLoadingTemporaryDirectory": "PATH_TO_TEMP_DIR_ON_GCS", "connectionProperties": "CONNECTION_PROPERTIES", "username": "CONNECTION_USERNAME", "password": "CONNECTION_PASSWORD", "KMSEncryptionKey":"KMS_ENCRYPTION_KEY" }, "environment": { "zone": "us-central1-f" } } }
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto Google Cloud en el que quieres ejecutar la tarea de DataflowJOB_NAME
: un nombre de trabajo único que elijasVERSION
: la versión de la plantilla que quieres usarPuedes usar los siguientes valores:
latest
para usar la última versión de la plantilla, que está disponible en la carpeta principal sin fecha del contenedor: gs://dataflow-templates-REGION_NAME/latest/- el nombre de la versión, como
2023-09-12-00_RC00
, para usar una versión específica de la plantilla, que se encuentra anidada en la carpeta principal correspondiente con la fecha en el bucket: gs://dataflow-templates-REGION_NAME/
LOCATION
: la región en la que quieras desplegar tu trabajo de Dataflow. Por ejemplo,us-central1
JDBC_CONNECTION_URL
: la URL de conexión de JDBCSOURCE_SQL_QUERY
: la consulta de SQL que se va a ejecutar en la base de datos de origenDATASET
: tu conjunto de datos de BigQueryTABLE_NAME
: nombre de la tabla de BigQueryPATH_TO_TEMP_DIR_ON_GCS
: la ruta de Cloud Storage al directorio temporalCONNECTION_PROPERTIES
: las propiedades de conexión JDBC, si es necesarioCONNECTION_USERNAME
: nombre de usuario de la conexión JDBCCONNECTION_PASSWORD
: la contraseña de la conexión JDBCKMS_ENCRYPTION_KEY
: la clave de cifrado de Cloud KMS
Siguientes pasos
- Consulta información sobre las plantillas de Dataflow.
- Consulta la lista de plantillas proporcionadas por Google.