Plantilla de Sourcedb a Spanner

La plantilla de SourceDB a Spanner es una canalización por lotes que copia los datos de una base de datos relacional a una base de datos de Spanner existente. Esta canalización utiliza JDBC para conectarse a las bases de datos relacionales. Puedes usar esta plantilla para copiar datos desde cualquier base de datos relacional con controladores de JDBC disponibles en Spanner. Solo admite un conjunto limitado de tipos de MySQL.

Para obtener una capa adicional de protección, también puedes pasar una clave de Cloud KMS junto con un nombre de usuario, contraseña y parámetros de cadena de conexión codificados en Base64 encriptados con la clave de Cloud KMS. Consulta el extremo de encriptación de la API de Cloud KMS para obtener más información acerca de cómo encriptar los parámetros de nombre de usuario, contraseña y cadena de conexión.

Requisitos de la canalización

  • Los controladores de JDBC de la base de datos relacional deben estar disponibles.
  • Las tablas de Spanner deben existir antes de ejecutar la canalización.
  • Las tablas de Spanner deben tener un esquema compatible.
  • La base de datos relacional debe ser accesible desde la subred en la que se ejecuta Dataflow.

Parámetros de la plantilla

Parámetros obligatorios

  • sourceConfigURL: Es la URL del archivo de configuración de la conexión de origen. El formato del archivo depende del tipo de fuente. En el caso de Astra, apuntará a un archivo de configuración de conexión de Astra (ejemplo). En el caso de JDBC, apuntará a un archivo de configuración de fragmentación de JDBC (ejemplo). En el caso de Cassandra, apuntará a un archivo de configuración del controlador de Cassandra (ejemplo). Este parámetro es obligatorio. Por ejemplo, gs://your-bucket/source-config.json. La configuración predeterminada es vacía.
  • instanceId: Es la instancia de destino de Cloud Spanner.
  • databaseId: Es la base de datos de destino de Cloud Spanner.
  • projectId: Es el nombre del proyecto de Cloud Spanner.
  • outputDirectory: Este directorio se usa para volcar los registros con errores, omitidos o filtrados en una migración.

Parámetros opcionales

  • sourceDbDialect: Los valores posibles son CASSANDRA, MYSQL, POSTGRESQL, ORACLE y SQLSERVER. El valor predeterminado es MYSQL.
  • jdbcDriverJars: Lista separada por comas de los archivos JAR del controlador. Por ejemplo, gs://your-bucket/driver_jar1.jar,gs://your-bucket/driver_jar2.jar La configuración predeterminada es vacía.
  • jdbcDriverClassName: Es el nombre de la clase del controlador de JDBC. Por ejemplo, com.mysql.jdbc.Driver La configuración predeterminada es com.mysql.jdbc.Driver.
  • tables: Tablas que se migrarán desde la fuente. La configuración predeterminada es vacía.
  • numPartitions: Es la cantidad de particiones. Esto, junto con el límite inferior y superior, forma segmentaciones de particiones para las expresiones de cláusula WHERE generadas que se usan para dividir la columna de partición de manera uniforme. Cuando la entrada es menor que 1, se establece el número en 1. La configuración predeterminada es 0.
  • fetchSize: Es la cantidad de filas que se recuperarán por lectura de página para la fuente de JDBC. Si no se configura, se infiere automáticamente a partir del tipo de máquina del trabajador y el tamaño estimado de la fila, y se recurre a 50,000 filas si no se puede inferir (por ejemplo, cuando no se especifica el tipo de máquina del trabajador). Si el dialecto de origen es MySQL, consulta la siguiente nota. En última instancia, esto se traduce en una llamada a Statement.setFetchSize en la capa de JDBC. SOLO se debe usar si el valor predeterminado arroja errores de memoria.Nota para la fuente de MySQL: El conector de MySQL ignora FetchSize, a menos que useCursorFetch=true también forme parte de las propiedades de conexión. En el caso del dialecto de MySQL, la canalización agregará useCursorFetch=true a las propiedades de conexión de forma predeterminada, a menos que el parámetro fetchSize se establezca explícitamente en 0.
  • spannerHost: Es el extremo de Cloud Spanner al que se llamará en la plantilla. Por ejemplo, https://batch-spanner.googleapis.com La configuración predeterminada es https://batch-spanner.googleapis.com.
  • maxConnections: Configura el grupo de conexiones de JDBC en cada trabajador con la cantidad máxima de conexiones. Usa un número negativo para no tener límite. Por ejemplo, -1 La configuración predeterminada es 0.
  • sessionFilePath: Ruta del archivo de sesión en Cloud Storage que contiene información de asignación de la herramienta de migración de Spanner. La configuración predeterminada es vacía.
  • transformationJarPath: Es la ubicación de archivo JAR personalizada en Cloud Storage que contiene la lógica de transformación personalizada para procesar registros. La configuración predeterminada es vacía.
  • transformationClassName: Es el nombre de clase completamente calificado que tiene la lógica de transformación personalizada. Es un campo obligatorio en caso de que se especifique transformJarPath. La configuración predeterminada es vacía.
  • transformationCustomParameters: Es la cadena que contiene cualquier parámetro personalizado que se pasará a la clase de transformación personalizada. La configuración predeterminada es vacía.
  • insertOnlyModeForSpannerMutations: De forma predeterminada, la canalización usa Upserts para escribir filas en Spanner. Esto significa que se reemplazarían las filas existentes. Si el modo InsertOnly está habilitado, se usarán inserciones en lugar de upserts, y no se reemplazarán las filas existentes.
  • batchSizeForSpannerMutations: Es el tamaño del lote en bytes para las mutaciones de Spanner. Si se establece en un valor inferior a 0, se usa el valor predeterminado de SpannerIO de Apache Beam, que es de 1 MB. Establece este valor en 0 o 10 para inhabilitar las mutaciones por lotes.
  • spannerPriority: La prioridad de solicitud para llamadas de Cloud Spanner. El valor debe ser uno de los siguientes: [HIGH,MEDIUM,LOW]. El valor predeterminado es HIGH.
  • tableOverrides: Son los reemplazos del nombre de la tabla desde la fuente hasta Spanner. Se escriben en el siguiente formato: [{SourceTableName1, SpannerTableName1}, {SourceTableName2, SpannerTableName2}]Este ejemplo muestra la asignación de la tabla Singers a Vocalists y la tabla Albums a Records. Por ejemplo, [{Singers, Vocalists}, {Albums, Records}] La configuración predeterminada es vacía.
  • columnOverrides: Son las anulaciones del nombre de la columna desde la fuente hasta Spanner. Se escriben en el siguiente formato: [{SourceTableName1.SourceColumnName1, SourceTableName1.SpannerColumnName1}, {SourceTableName2.SourceColumnName1, SourceTableName2.SpannerColumnName1}]. Ten en cuenta que SourceTableName debe seguir siendo el mismo en el par de origen y Spanner. Para anular los nombres de las tablas, usa tableOverrides.En el ejemplo, se muestra la asignación de SingerName a TalentName y de AlbumName a RecordName en las tablas Singers y Albums, respectivamente. Por ejemplo, [{Singers.SingerName, Singers.TalentName}, {Albums.AlbumName, Albums.RecordName}] La configuración predeterminada es vacía.
  • schemaOverridesFilePath: Es un archivo que especifica las anulaciones de la tabla y el nombre de la columna desde la fuente hasta Spanner. La configuración predeterminada es vacía.
  • uniformizationStageCountHint: Es una sugerencia para la cantidad de etapas de uniformización. Actualmente, solo se aplica a las fuentes basadas en JDBC, como MySQL o PostgreSQL. Deja el valor 0 o el valor predeterminado para inhabilitar la uniformización. Se establece en -1 para una cantidad de etapas de log(numPartition). Si el espacio de clave primaria de origen se distribuye de manera uniforme (por ejemplo, una clave de incremento automático con espacios vacíos dispersos), es mejor dejarlo inhabilitado. Si tu espacio de claves no es uniforme, es posible que encuentres una VM rezagada en la ejecución de tu flujo de datos. En ese caso, puedes establecerlo en -1 para habilitar la uniformización. Si lo configuras manualmente en valores distintos de 0 o -1, podrás ajustar mejor la compensación entre la sobrecarga que agregan las etapas de uniformización y la mejora del rendimiento debido a una mejor distribución del trabajo.
  • failureInjectionParameter: Es el parámetro de inyección de fallas. Solo se usa para pruebas. La configuración predeterminada es vacía.
  • maxCommitDelay: Es el tiempo de demora máximo de la confirmación para optimizar la capacidad de procesamiento de escritura en Spanner. Consulta https://cloud.google.com/spanner/docs/throughput-optimized-writes.Set en -1 para permitir que Spanner elija el valor predeterminado. Se establece en un valor positivo para anular la mejor compensación posible entre la capacidad de procesamiento y la latencia.El valor predeterminado es -1.
  • gcsOutputDirectory: Este directorio se usa para escribir los archivos AVRO de los registros leídos de la fuente. Por ejemplo, gs://your-bucket/your-path La configuración predeterminada es vacía.
  • disabledAlgorithms: Algoritmos separados por comas que se deben inhabilitar. Si este valor se establece como none, no se inhabilita ningún algoritmo. Ten cuidado con este parámetro, ya que los algoritmos inhabilitados de forma predeterminada podrían tener vulnerabilidades o problemas de rendimiento. Por ejemplo, SSLv3, RC4.
  • extraFilesToStage: Rutas de Cloud Storage separadas por comas o secretos de Secret Manager para los archivos que se deben almacenar en etapa intermedia en el trabajador. Estos archivos se guardan en el directorio /extra_files en cada trabajador. Por ejemplo, gs:///file.txt,projects//secrets//versions/

Ejecuta la plantilla

Console

  1. Ve a la página Crear un trabajo a partir de una plantilla de Dataflow.
  2. Ir a Crear un trabajo a partir de una plantilla
  3. En el campo Nombre del trabajo, ingresa un nombre de trabajo único.
  4. Opcional: Para Extremo regional, selecciona un valor del menú desplegable. La región predeterminada es us-central1.

    Para obtener una lista de regiones en las que puedes ejecutar un trabajo de Dataflow, consulta Ubicaciones de Dataflow.

  5. En el menú desplegable Plantilla de Dataflow, selecciona la plantilla Sourcedb to Spanner.
  6. En los campos de parámetros proporcionados, ingresa los valores de tus parámetros.
  7. Haz clic en Ejecutar trabajo.

gcloud CLI

En tu shell o terminal, ejecuta la plantilla:

gcloud dataflow flex-template run JOB_NAME \
    --template-file-gcs-location=gs://dataflow-templates/VERSION/flex/Sourcedb_to_Spanner_Flex \
    --project=PROJECT_ID \
    --region=REGION_NAME \
    --parameters \
       sourceConfigURL=SOURCE_CONFIG_URL,\
       instanceId=INSTANCE_ID,\
       databaseId=DATABASE_ID,\
       projectId=PROJECT_ID,\
       outputDirectory=OUTPUT_DIRECTORY,\

Reemplaza lo siguiente:

  • JOB_NAME: Es el nombre del trabajo que elijas
  • VERSION: Es la versión de la plantilla que deseas usar.

    Puedes usar los siguientes valores:

    • latest para usar la última versión de la plantilla, que está disponible en la carpeta superior non-dated en el bucket: gs://dataflow-templates/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 puede encontrar anidada en la carpeta superior con fecha correspondiente en el bucket: gs://dataflow-templates/
  • REGION_NAME: La región en la que deseas implementar tu trabajo de Dataflow, por ejemplo, us-central1
  • SOURCE_CONFIG_URL: La URL para conectarse al host de la base de datos de origen. Puede ser cualquiera de las siguientes opciones: La URL de conexión de JDBC, que debe contener el host, el puerto y el nombre de la base de datos de origen y, de forma opcional, puede contener propiedades como autoReconnect, maxReconnects, etc. Formato: `jdbc:mysql://{host}:{port}/{dbName}?{parameters}`2. La ruta de acceso de configuración del fragmento
  • INSTANCE_ID: El ID de la instancia de Cloud Spanner.
  • DATABASE_ID: El ID de la base de datos de Cloud Spanner.
  • PROJECT_ID: El ID del proyecto de Cloud Spanner.
  • OUTPUT_DIRECTORY: El directorio de salida para los eventos con errores, omitidos o filtrados.

API

Para ejecutar la plantilla con la API de REST, envía una solicitud POST HTTP. Para obtener más información de la API y sus permisos de autorización, consulta projects.templates.launch.

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch
{
   "launchParameter": {
     "jobName": "JOB_NAME",
     "parameters": {
       "sourceConfigURL": "SOURCE_CONFIG_URL",
       "instanceId": "INSTANCE_ID",
       "databaseId": "DATABASE_ID",
       "projectId": "PROJECT_ID",
       "outputDirectory": "OUTPUT_DIRECTORY",
     },
     "containerSpecGcsPath": "gs://dataflow-templates/VERSION/flex/Sourcedb_to_Spanner_Flex",
     "environment": { "maxWorkers": "10" }
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: El Google Cloud ID del proyecto en el que deseas ejecutar el trabajo de Dataflow
  • JOB_NAME: Es el nombre del trabajo que elijas
  • VERSION: Es la versión de la plantilla que deseas usar.

    Puedes usar los siguientes valores:

    • latest para usar la última versión de la plantilla, que está disponible en la carpeta superior non-dated en el bucket: gs://dataflow-templates/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 puede encontrar anidada en la carpeta superior con fecha correspondiente en el bucket: gs://dataflow-templates/
  • LOCATION: La región en la que deseas implementar tu trabajo de Dataflow, por ejemplo, us-central1
  • SOURCE_CONFIG_URL: La URL para conectarse al host de la base de datos de origen. Puede ser cualquiera de las siguientes opciones: La URL de conexión de JDBC, que debe contener el host, el puerto y el nombre de la base de datos de origen y, de forma opcional, puede contener propiedades como autoReconnect, maxReconnects, etc. Formato: `jdbc:mysql://{host}:{port}/{dbName}?{parameters}`2. La ruta de acceso de configuración del fragmento
  • INSTANCE_ID: El ID de la instancia de Cloud Spanner.
  • DATABASE_ID: El ID de la base de datos de Cloud Spanner.
  • PROJECT_ID: El ID del proyecto de Cloud Spanner.
  • OUTPUT_DIRECTORY: El directorio de salida para los eventos con errores, omitidos o filtrados.