Cuando ejecuta operaciones DDL en tablas de origen que tienen una vista de búsqueda o un procedimiento almacenado ETL (sync_by_sql), los distintos tipos de cambios afectan el vínculo de sincronización de manera diferente. Este tema describe el impacto de cada operación DDL y proporciona las mejores prácticas para reconstruir el vínculo cuando sea necesario.
Impacto de DDL en las tablas de origen
Para obtener información sobre las operaciones DDL, consulte DDL operation guide for PolarDB for MySQL. A continuación se describe cómo las operaciones DDL más comunes en las tablas de origen afectan el vínculo de sincronización.
Tipo de cambio | Operación | Estado de sincronización | Descripción |
Cambios de columna | Eliminar una columna | Normal | Los datos existentes conservan los valores de la columna eliminada. En los datos incrementales, el valor del campo es |
Agregar una columna | Normal | La nueva columna no se agrega automáticamente al vínculo de sincronización. Para agregarla, consulte AutoETL change practices. | |
Modificar el tipo de una columna | Depende del tipo | Tipos compatibles (por ejemplo, de Tipos incompatibles: el vínculo deja de estar disponible. Debe reconstruirlo. | |
Cambiar el nombre de una columna | Disrupted | El vínculo utiliza los nombres de columna definidos al momento de su creación. Después de cambiar el nombre, no puede identificar la columna renombrada de la tabla de origen. Es necesario reconstruir el vínculo. | |
Otros (reordenar columnas, modificar valores predeterminados, modificar comentarios, ampliar la longitud de VARCHAR, modificar juegos de caracteres, modificar propiedades de incremento automático, modificar restricciones NULL, etc.) | Normal | Estas operaciones no afectan la sincronización. | |
Cambios de índice | Agregar, eliminar o modificar un índice secundario | Normal | Los cambios en índices secundarios no afectan la sincronización. |
Eliminar o modificar el índice de clave primaria | Disrupted | El vínculo depende de la clave primaria de la tabla de origen para sincronizar los datos. Después de modificar la clave primaria, debe reconstruir el vínculo. | |
Cambios de tabla |
| Disrupted | El vínculo no detecta las operaciones |
| Disrupted | El vínculo no reconoce el nuevo nombre de la tabla. La sincronización de datos incrementales se detiene. | |
Otras ( | Normal | Estas operaciones no afectan la sincronización. | |
Cambios en tablas particionadas | Convertir a una tabla particionada, agregar una partición, fusionar particiones, reparticionar, analizar una partición, comprobar una partición, optimizar una partición, reconstruir una partición, convertir a una tabla no particionada, usar índices locales, etc. | Normal | Estas operaciones no afectan la sincronización. |
| Disrupted | El vínculo no detecta estas operaciones. Para eliminar datos y sincronizar el cambio con PolarSearch, utilice | |
| Disrupted | El vínculo no detecta el reemplazo ni la reparación directa de datos en particiones específicas. Las demás particiones no se ven afectadas. Se recomienda reconstruir el vínculo después de ejecutar estas operaciones. |
Prácticas de cambio en AutoETL
Cuando necesite modificar la estructura de sincronización de una vista de búsqueda o de un procedimiento almacenado ETL (por ejemplo, agregar campos de sincronización), determine primero si el cambio se admite en el lugar:
Si se admiten los cambios en el lugar, actualice directamente la definición SQL de la vista de búsqueda o del procedimiento almacenado ETL. La sincronización se reanuda desde el desplazamiento original sin necesidad de una resincronización completa.
Si no se admiten los cambios en el lugar, reconstruya mediante el enfoque de "índice nuevo + vínculo nuevo". Una vez que la nueva vista de búsqueda o el procedimiento almacenado ETL complete la sincronización y verificación de datos, cambie el tráfico de consultas de su aplicación hacia el nuevo índice.
Compatibilidad con cambios en el lugar
A continuación se muestran los cambios más comunes en vistas de búsqueda o procedimientos almacenados ETL y si admiten modificaciones en el lugar.
|
Tipo de cambio |
Escenario aplicable |
Cambio en el lugar compatible |
Descripción |
|
Modificar parámetros de tiempo de ejecución |
Sincronización de tabla única / Agregación de varias tablas |
Sí |
Ajustar los parámetros de recursos de sincronización y concurrencia no altera la semántica de cálculo. Se admiten los cambios en el lugar. |
|
Modificar las condiciones de filtro de |
Sincronización de tabla única / Agregación de varias tablas |
Sí |
Modificar las condiciones de filtro no actualiza los datos existentes que ya se sincronizaron con los nodos de PolarSearch. Para limpiar los datos existentes, reconstruya el vínculo. |
|
Agregar columnas de sincronización |
Sincronización de tabla única |
Sí |
La nueva columna solo aplica a los datos incrementales. Los datos históricos no se retroalimentan. Para retroalimentar todos los datos, reconstruya el vínculo. |
|
Quitar columnas de sincronización |
Sincronización de tabla única |
Sí |
Las columnas quitadas en los nodos de PolarSearch dejan de actualizarse. |
|
Modificar la clave primaria de los índices del nodo de PolarSearch |
Sincronización de tabla única / Agregación de varias tablas |
No. Se requiere reconstrucción. |
La clave primaria también es el identificador del documento en PolarSearch. El cambio es incompatible. |
|
Agregar o quitar tablas de origen de |
Agregación de varias tablas |
No. Se requiere reconstrucción. |
La estructura de sincronización cambia. Se requiere un recálculo completo. |
|
Agregar o quitar |
Agregación de varias tablas |
No. Se requiere reconstrucción. |
La estructura de agregación cambia. Los resultados históricos de agregación no se pueden reutilizar. |
|
Agregar o quitar ramas de |
Agregación de varias tablas |
No. Se requiere reconstrucción. |
La estructura de sincronización cambia. Se requiere un recálculo completo. |
|
Convertir entre sincronización de tabla única y agregación de varias tablas |
Sincronización de tabla única / Agregación de varias tablas |
No. Se requiere reconstrucción. |
La lógica de sincronización cambia por completo. |
|
Cambiar el tipo de datos de la clave primaria, la clave de |
Sincronización de tabla única / Agregación de varias tablas |
No. Se requiere reconstrucción. |
Después de cambiar el tipo de una columna clave, el estado de sincronización original no se puede reutilizar. |
Cambios en el lugar
Modifique la lógica SQL en el vínculo existente e inicie el vínculo utilizando su estado actual. Para obtener más información, consulte Search views - Modify a search view y ETL stored procedures (sync_by_sql) - Modify a synchronization link.
-
Sintaxis de la vista de búsqueda:
ALTER SEARCH VIEW view_name UPDATE [WITH (option_list)] [TO (column_list, PRIMARY KEY (pk_column_list))] AS new_select_statement; -
Sintaxis del procedimiento almacenado ETL:
SET esl_link_options = "<new_option_list>"; -- If new_sync_sql is empty, the existing sync SQL is retained CALL dbms_etl.update_sync_link('<sync_id>', '<new_sync_sql>');
Cambios con "índice nuevo + vínculo nuevo"
El enfoque de "índice nuevo + vínculo nuevo" es el método de cambio más versátil. El vínculo vuelve a escanear los datos y los escribe en el nodo de PolarSearch. Una vez que la nueva vista de búsqueda o el procedimiento almacenado ETL complete la sincronización y verificación de datos, cambie el tráfico de consultas de su aplicación hacia el nuevo índice.
Ejemplo:
Agregue un campo a la tabla shop.user y reconstruya la vista de búsqueda. Suponga que la vista de búsqueda original sincroniza la tabla shop.user (con las columnas id, name, phone, gmt_create) hacia el índice user_v1. Necesita agregar la columna membership_level sin interrumpir las consultas en línea.
-
Crear un índice nuevo: Cree un índice llamado
user_v2en el nodo de PolarSearch e incluya el nuevo campomembership_levelen su asignación.PUT user_v2 { "mappings": { "properties": { "id": { "type": "keyword" }, "name": { "type": "text", "fields": { "keyword": { "type": "keyword" } } }, "phone": { "type": "keyword" }, "gmt_create": { "type": "date" }, "membership_level": { "type": "integer" } } } } -
Modificar la tabla de origen: Agregue la nueva columna a la tabla
useren el origen de PolarDB for MySQL.ALTER TABLE shop.user ADD COLUMN membership_level TINYINT NOT NULL DEFAULT 0 COMMENT 'Membership level'; -
Crear una vista de búsqueda nueva: Cree una vista de búsqueda para sincronizar los datos de la tabla
shop.userhacia el índiceuser_v2.CREATE SEARCH VIEW user_v2 AS SELECT id, name, phone, gmt_create, membership_level FROM shop.user; Verificar y realizar el cambio: Ejecute
SHOW SEARCH VIEW STATUSpara comprobar el estado de la nueva vista de búsqueda. Cuando la latencia de sincronización disminuya a aproximadamente entre 0 y 1 segundo, compruebe los datos del nuevo índice. Después de la verificación, cambie el tráfico de consultas de su aplicación hacia el nuevo índiceuser_v2.-
Limpiar los recursos antiguos: Cuando la nueva vista de búsqueda funcione de manera estable, elimine la vista de búsqueda anterior y el índice
user_v1.DROP SEARCH VIEW user_v1;