Todos los productos
Search
Centro de documentos

PolarDB:Search views and ETL stored procedures

Última actualización: Sep 05, 2026

Cuando necesita ejecutar búsquedas de texto completo o análisis complejos sobre datos de negocio en PolarDB for MySQL, operar directamente sobre la base de datos puede afectar la estabilidad del negocio principal.PolarDB La función AutoETL que proporciona el nodo PolarSearch sincroniza los datos de forma continua y automática desde el nodo de lectura/escritura hacia un nodo PolarSearch del clúster. De esta manera, ofrece un servicio de datos integral. Con las vistas de búsqueda o los procedimientos almacenados de ETL se crean vínculos de sincronización de datos sin desplegar ni mantener herramientas de ETL adicionales. Así se logra la sincronización y se aíslan las cargas de trabajo de búsqueda y análisis respecto a las de procesamiento de transacciones en línea.

Nota

Al usar AutoETL para crear un vínculo, usted autoriza de forma predeterminada que el motor de AutoETL acceda a los datos de PolarDB para sincronizarlos.

Descripción general

AutoETL es la capacidad integrada de sincronización de datos de PolarDB for MySQL. Permite el flujo automático de datos entre distintos tipos de nodos dentro del mismo clúster. La versión actual solo admite la sincronización desde PolarDB for MySQL hacia un nodo PolarSearch del mismo clúster para búsquedas y análisis de alto rendimiento.

AutoETL ofrece dos métodos para crear vínculos de sincronización de datos:

  • Vista de búsqueda: use la sintaxis CREATE SEARCH VIEW para definir la lógica de sincronización de datos en SQL estándar. Este método es adecuado para la mayoría de los escenarios de sincronización de una sola tabla y de agregación de varias tablas. El sistema gestiona automáticamente los detalles de conexión subyacentes.

  • Procedimiento almacenado de ETL (dbms_etl.sync_by_sql): utilice sintaxis compatible con Flink SQL para definir lógica compleja de limpieza, transformación y agregación de datos mediante procedimientos almacenados.

Ámbito de aplicación

Antes de usar AutoETL, asegúrese de cumplir con los siguientes requisitos:

  • Versión del clúster:

    • Vista de búsqueda:

      • MySQL 8.0.1. La versión de revisión debe ser 8.0.1.1.54 o posterior.

      • MySQL 8.0.2. La versión de revisión debe ser 8.0.2.2.34 o posterior.

    • Procedimiento almacenado de ETL (sync_by_sql):

      • MySQL 8.0.1. La versión de revisión debe ser 8.0.1.1.52 o posterior.

      • MySQL 8.0.2. La versión de revisión debe ser 8.0.2.2.33 o posterior.

  • Binlog: el clúster debe tener habilitado Enable binary logging.

  • Dirección de sincronización: solo se admite la sincronización desde PolarDB for MySQL hacia un nodo PolarSearch.

  • Límites de DDL: al ejecutar operaciones DDL en tablas de origen que tienen vistas de búsqueda o procedimientos almacenados de ETL, siga reglas específicas para evitar interrupciones en la sincronización. Algunos cambios incompatibles requieren reconstruir la vista de búsqueda. Para obtener más información, consulte DDL change rules and best practices.

  • Tipos de datos: no se admite la sincronización del tipo BIT ni de los tipos de datos espaciales como GEOMETRY、POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON y GEOMETRYCOLLECTION.

  • Límites de consulta de vistas de búsqueda: actualmente, las vistas de búsqueda solo permiten definir la semántica de sincronización y no admiten consultas de datos. Para consultar datos, conéctese directamente al nodo PolarSearch.

  • Recursos de cómputo: AutoETL utiliza CU como unidad de cómputo. De forma predeterminada, la cantidad de CU de un clúster equivale al doble de la suma de las CPU de todos los nodos PolarSearch. Consulte el uso actual de CU del clúster en la página Settings and Management > Search Management, en la pestaña AutoETL.

Vistas de búsqueda

Una vista de búsqueda es un mecanismo declarativo de sincronización de datos que proporciona AutoETL. Cree una vista de búsqueda con sintaxis SQL estándar y el sistema establecerá automáticamente un vínculo continuo de sincronización de datos desde la tabla de origen hacia el nodo PolarSearch.

Crear una vista de búsqueda

Sintaxis

CREATE SEARCH VIEW view_name [(column_list, PRIMARY KEY (pk_column_list))]
 [WITH (option_list)]
 AS select_statement;

Parámetros

Parámetro

Obligatorio

Descripción

view_name

Sí

Nombre de la vista de búsqueda, que también corresponde al nombre del índice de destino en el nodo PolarSearch.

column_list

No

Defina manualmente las columnas de la vista de búsqueda. Separe varias columnas con,.

Nota

En la sincronización de una sola tabla, no es necesario especificarcolumn_list. Se utilizan de forma predeterminada los nombres originales de las columnas de la tabla de origen.

pk_column_list

No

Columnas de clave primaria de la vista de búsqueda. Su estructura corresponde a la asignación del índice del nodo PolarSearch, por lo quepk_column_list especifica el ID del documento de índice en el nodo PolarSearch.

Si no se especifica, se usa de forma predeterminada la primera columna decolumn_list como ID del documento. En la sincronización de una sola tabla, se utiliza la clave primaria de la tabla de origen como ID del documento de forma predeterminada.

option_list

No

Configuración de sincronización especificada de forma explícita al crear la vista de búsqueda, como el paralelismo de sincronización, el uso de recursos de cómputo por cada worker de sincronización y el nombre del índice de destino. Separe varias configuraciones con,. Si no se especifica, se usan los valores predeterminados del sistema. Para conocer los parámetros y valores configurables, consulte AutoETL parameter configuration and best practices.

select_statement

Sí

InstrucciónSELECT que define el origen de datos y la lógica de sincronización. Esta instrucción recupera los datos de la tabla de origen y almacena el resultado enPolarSearch. Admite consultas de una sola tabla, operacionesJOIN de varias tablas,UNION ALL yGROUP BY.

Límites de uso y notas

  • La tabla de origen debe contener una clave primaria o una clave única.

  • Debe contar con el permiso ALTER en todas las tablas de origen de la vista de búsqueda, así como con el permiso SELECT sobre las columnas relacionadas o sobre toda la tabla.

  • Después de crear una vista de búsqueda, las nuevas columnas que se agreguen a la tabla de origen no se sincronizan automáticamente. Para sincronizar columnas nuevas, consulte Modify a search view.

  • Para usar una configuración personalizada del índice de destino, cree primero el índice en el nodo PolarSearch y defina su configuración de forma manual. Luego, cree la vista de búsqueda. Si el índice de destino no existe al momento de la creación, el sistema lo crea automáticamente.

  • Para configurar parámetros avanzados de sincronización en agregaciones de varias tablas o consultas complejas, como la conversión de campos JSON y los campos de enrutamiento, consulte AutoETL parameter configuration and best practices.

Preparación de datos

Cree los datos de prueba utilizados en los ejemplos siguientes mediante la ejecución de las instrucciones SQL que se muestran a continuación en PolarDB for MySQL.

CREATE DATABASE IF NOT EXISTS db1;
CREATE DATABASE IF NOT EXISTS db2;

USE db1;
CREATE TABLE IF NOT EXISTS t1 (
 id INT PRIMARY KEY,
 c1 VARCHAR(100),
 c2 VARCHAR(100)
);
INSERT INTO t1(id, c1, c2) VALUES
(1, 'apple', 'red'),
(2, 'banana', 'yellow'),
(3, 'grape', 'purple');

USE db2;
CREATE TABLE IF NOT EXISTS t2 (id INT PRIMARY KEY, c2 INT);
INSERT INTO t2(id, c2) VALUES (1, 111), (2, 222), (4, 444);

Ejemplos

  • Sincronización completa de tabla: vincule db1.t1 a PolarSearch. El nombre de la vista view_test también corresponde al nombre del índice de destino en PolarSearch.

    CREATE SEARCH VIEW view_test AS SELECT * FROM db1.t1;
  • Sincronización de columnas específicas: sincronice únicamente las columnas c1 y c2, y defina de forma manual los tipos de columna y la clave primaria.

    CREATE SEARCH VIEW view_test1 AS SELECT c1, c2 FROM db1.t1;
  • Parámetros de sincronización específicos: especifique la configuración de sincronización mediante la cláusula WITH al crear una vista de búsqueda. El siguiente ejemplo sincroniza las columnas c1 y c2 de db1.t1 hacia PolarSearch y establece el paralelismo de sincronización en 2.

    CREATE SEARCH VIEW view_test6 WITH ('parallelism' = '2') AS SELECT c1, c2 FROM db1.t1;
  • Sincronización con filtro condicional: sincronice solo los datos que cumplan con la condición WHERE.

    CREATE SEARCH VIEW view_test2 AS SELECT id, c1, c2 FROM db1.t1 WHERE c1 > 10;
  • JOIN de varias tablas: vincule db1.t1 y db2.t2 mediante id y sincronice el resultado hacia PolarSearch.

    CREATE SEARCH VIEW view_test3(id, c1, c2) AS SELECT t1.id, t1.c1, t2.c2 FROM db1.t1 AS t1 LEFT JOIN db2.t2 AS t2 ON t1.id = t2.id;
  • UNION de varias tablas: combine varias tablas con la misma estructura y sincronícelas. Cada instrucción SELECT debe tener la misma cantidad y los mismos tipos de columnas.

    CREATE SEARCH VIEW view_test4(id, c2) AS SELECT id, c2 FROM db1.t1 UNION ALL SELECT id, c2 FROM db2.t2;
  • Agregación por grupos: sincronice los datos después de aplicar la agregación por grupos. Al usar GROUP BY, debe definir manualmente las columnas y la clave primaria.

    CREATE SEARCH VIEW view_test5 (id, max_c) AS SELECT t1.id, MAX(t1.c1) AS max_c FROM db1.t1 GROUP BY t1.id;

Comprobar los datos

Compruebe el estado de sincronización de la vista de búsqueda:

SHOW SEARCH VIEW STATUS;

Cuando el estado es active, la sincronización de datos de la vista de búsqueda funciona correctamente. Conéctese al nodo PolarSearch y use una API REST compatible con Elasticsearch para comprobar los datos:

# Replace <user>:<password> with the PolarSearch node credentials and <polarsearch_endpoint> with the PolarSearch node endpoint and port
curl -u <user>:<password> -X GET "http://<polarsearch_endpoint>/view_test/_search"

Gestionar vistas de búsqueda

Use los siguientes comandos para consultar las vistas de búsqueda creadas, o bien para detener, reiniciar o reconstruir la sincronización de datos. Todos los comandos deben ejecutarse en un cliente de base de datos después de conectarse al clúster.

Consultar el estado de todas las vistas de búsqueda

SHOW SEARCH VIEW STATUS;

El resultado es el siguiente. Cuando el estado es active, la sincronización de datos de la vista de búsqueda funciona correctamente.

+------------+--------+----------+---------+---------------------+---------------------+
| View Name | Type | Status | Message | Created_at | Updated_at |
+------------+--------+----------+---------+---------------------+---------------------+
| view_test | search | active | | 2026-03-18 18:44:12 | 2026-03-18 18:51:37 |
+------------+--------+----------+---------+---------------------+---------------------+

Consultar la instrucción CREATE de una vista de búsqueda específica

SHOW CREATE SEARCH VIEW view_test;

El resultado es el siguiente:

+-----------+------------------------------------------------------+
| View Name | Create Search View |
+-----------+------------------------------------------------------+
| view_test | CREATE SEARCH VIEW view_test AS SELECT * FROM db1.t1 |
+-----------+------------------------------------------------------+

Detener una vista de búsqueda

Cuando necesite modificar o reconstruir el índice de destino en el nodo PolarSearch, detenga primero la sincronización de datos de la vista de búsqueda para evitar errores de escritura durante la sincronización. Una vez finalizada la modificación del índice en el nodo PolarSearch, reinicie la vista de búsqueda.

ALTER SEARCH VIEW view_test STOP;

Reiniciar una vista de búsqueda

Reinicie una vista de búsqueda detenida o en ejecución.

ALTER SEARCH VIEW view_test RESTART;

Reconstruir una vista de búsqueda

Vuelva a leer todos los datos de la tabla de origen y escríbalos en el nodo PolarSearch.

Importante
  • Una reconstrucción vuelve a analizar todos los datos de la tabla de origen. Este proceso puede tardar mucho tiempo si el volumen de datos es grande.

  • La reconstrucción no elimina los datos de índice existentes en el nodo PolarSearch. Los datos se sobrescriben directamente.

ALTER SEARCH VIEW view_test REBUILD;

Eliminar una vista de búsqueda

Importante

Eliminar una vista de búsqueda es una operación de alto riesgo. Confirme antes de continuar. Esta operación detiene la sincronización de datos de la vista de búsqueda y limpia los recursos relacionados,pero no elimina los datos de índice en PolarSearch.

DROP SEARCH VIEW view_name;

El sistema gestiona la eliminación de manera distinta según el estado de la vista de búsqueda:

  • Vista de búsqueda en estado active: el estado cambia primero a dropping. Después de que el sistema termina de limpiar los recursos y eliminar los datos del índice de destino, el estado cambia a dropped.

  • Vista de búsqueda en estado dropped: el sistema elimina por completo la información de la vista de búsqueda.

  • Vistas de búsqueda en otros estados: el sistema no admite la eliminación.

Modificar una vista de búsqueda

Después de crear una vista de búsqueda, ajuste sus parámetros de ejecución o modifique su lógica de sincronización, por ejemplo, para agregar campos de sincronización o cambiar condiciones de consulta. AutoETL ofrece tres métodos de modificación:

  • Para ajustar únicamente parámetros de ejecución como el paralelismo y el uso de recursos de cómputo, use la modificación de parámetros. No se requieren cambios en el SQL de sincronización.

  • Al modificar la lógica de sincronización, prefiera la modificación de SQL en el lugar. Si las definiciones SQL son compatibles, la sincronización continúa desde el punto de control original sin necesidad de resincronizar todo. Consulte DDL change rules and best practices para determinar si las definiciones SQL son compatibles.

  • Si las definiciones SQL son incompatibles y no es posible la modificación en el lugar, use la modificación con "nuevo índice + nueva vista de búsqueda" para reconstruir.

Modificación de parámetros

Para una vista de búsqueda en ejecución, modifique sus parámetros de ejecución con la siguiente sintaxis. AutoETL lee automáticamente la nueva configuración y reinicia la vista de búsqueda.

Sintaxis

ALTER SEARCH VIEW view_name UPDATE WITH (new_option_list);

Ejemplos

Ajuste el paralelismo a 8, la CPU por worker a 4 y la concurrencia por worker a 8 para view_test:

ALTER SEARCH VIEW view_test UPDATE WITH ('parallelism' = '8', 'link.tm.cpu' = '4', 'link.tm.slots' = '8');

Modificación de SQL en el lugar

La modificación de SQL en el lugar cambia directamente el SQL de sincronización de una vista de búsqueda existente. No requiere crear un nuevo índice de PolarSearch ni una nueva vista de búsqueda, ni cambiar las consultas del negocio, lo que reduce el tiempo de sincronización completa. Si las definiciones SQL son compatibles, la sincronización continúa desde el punto de control original. De lo contrario, la modificación falla y el sistema revierte automáticamente a la definición previa y reinicia la vista de búsqueda.

Sintaxis

ALTER SEARCH VIEW view_name UPDATE
 [TO (column_list, PRIMARY KEY (pk_column_list))]
 AS new_select_statement;

Ejemplos

  • Sincronizar nuevas columnas de la tabla de origen: una vista de búsqueda de tabla completa no sincroniza automáticamente las columnas nuevas que se agregan a la tabla de origen después de crear la vista. Después de agregar nuevas columnas a la tabla de origen db1.t1, ejecute la siguiente instrucción para sincronizar los datos de la nueva columna hacia PolarSearch.

    ALTER SEARCH VIEW view_test UPDATE;
  • Ajustar las columnas sincronizadas: originalmente se sincronizaban las columnas c1 y c2. Cambie la configuración para sincronizar únicamente la columna c1.

    ALTER SEARCH VIEW view_test UPDATE AS SELECT c1 FROM db1.t1;
  • Ajustar las condiciones de filtro: cambie la condición WHERE de c1 > 10 a c1 > 20.

    ALTER SEARCH VIEW view_test UPDATE AS SELECT id, c1, c2 FROM db1.t1 WHERE c1 > 20;

Modificación con "nuevo índice + nueva vista de búsqueda"

Si las definiciones SQL son incompatibles y no es posible la modificación en el lugar, use el método de "nuevo índice + nueva vista de búsqueda" para reconstruir. Así garantiza que las consultas del negocio no se vean afectadas.

  1. Cree una nueva vista de búsqueda y sincronice los datos hacia un nuevo índice de PolarSearch.

  2. Use SHOW SEARCH VIEW STATUS para comprobar el estado de la nueva vista de búsqueda. Cuando la latencia de sincronización baje a entre 0 y 1 segundo, cambie la lógica de consulta del negocio del índice antiguo al nuevo.

  3. Elimine la vista de búsqueda anterior.

Para conocer el impacto de los cambios DDL en la tabla de origen sobre las vistas de búsqueda y las prácticas detalladas de modificación, consulte DDL change rules and best practices.

Procedimiento almacenado de ETL (sync_by_sql)

Para escenarios que requieren transformaciones, agregaciones o cálculos complejos, use el procedimiento almacenado CALL dbms_etl.sync_by_sql para definir la lógica de sincronización de datos con sintaxis compatible con Flink SQL.

Crear un vínculo de sincronización

Sintaxis

Nota

Antes de llamar a dbms_etl.sync_by_sql, use las variables de sesión (como AutoETL parameter configuration and best practices) de esl_link_options y esl_sink_options para establecer la configuración de sincronización del vínculo. El motor de AutoETL lee estas variables automáticamente al crear el vínculo.

CALL dbms_etl.sync_by_sql("search", "<sync_sql>");

Ejemplos

Nota

El sistema configura automáticamente la información de conexión de las tablas de origen y de destino, como direcciones de host, puertos y credenciales. No es necesario especificarla de forma manual en la cláusula WITH.

CALL dbms_etl.sync_by_sql("search", "

-- Step 1: Define the PolarDB source table
CREATE TEMPORARY TABLE `db1`.`t1` (
 `id` BIGINT,
 `c1` STRING,
 PRIMARY KEY (`id`) NOT ENFORCED
) WITH (
 'connector' = 'mysql',
 'database-name' = 'db1',
 'table-name' = 't1'
);

-- Step 2: Define the PolarSearch destination table
CREATE TEMPORARY TABLE `dest` (
 `id` BIGINT,
 `max_c` STRING,
 PRIMARY KEY (`id`) NOT ENFORCED
) WITH (
 'connector' = 'opensearch',
 'index' = 'dest'
);

-- Step 3: Define the computation and insert logic
INSERT INTO `dest`
SELECT
 `t1`.`id`,
 MAX(`t1`.`c1`)
FROM `db1`.`t1` AS `t1`
GROUP BY `t1`.`id`;
");

Comprobar los datos

Conéctese al nodo PolarSearch y use una API REST compatible con Elasticsearch para consultar y comprobar que los datos se hayan sincronizado.

# Replace <polarsearch_endpoint> with the PolarSearch node endpoint
curl -u <user>:<password> -X GET "http://<polarsearch_endpoint>/dest/_search"

Gestionar vínculos de sincronización

Use los siguientes comandos para consultar los vínculos de sincronización creados, o bien para detener, reiniciar o reconstruir la sincronización de datos. Todos los comandos deben ejecutarse en un cliente de base de datos después de conectarse al clúster.

Consultar todos los vínculos

CALL dbms_etl.show_sync_link();

Consultar un vínculo específico por ID

Sustituya <sync_id> por el ID devuelto cuando se creó el vínculo.

CALL dbms_etl.show_sync_link_by_id('<sync_id>')\G

Descripción del resultado devuelto:

*************************** 1. row ***************************
 SYNC_ID: crb5rmv8rttsg
 NAME: crb5rmv8rttsg
 SYSTEM: search
SYNC_DEFINITION: db1.t1 -> dest
 SOURCE_TABLES: db1.t1
 SINK_TABLES: dest
 STATUS: active -- Link status. active indicates normal operation
 MESSAGE: -- If an error occurs, the error message is displayed here
 CREATED_AT: 2024-05-20 11:55:06
 UPDATED_AT: 2024-05-20 17:28:04
 OPTIONS:...

Eliminar un vínculo de sincronización

Esta operación detiene la sincronización de datos y limpia los recursos relacionados.

Importante

Eliminar un vínculo de sincronización es una operación de alto riesgo. Confirme antes de continuar. Esta operación detiene la sincronización de datos del vínculo y limpia los recursos relacionados,pero no elimina los datos de índice en PolarSearch.

CALL dbms_etl.drop_sync_link('<sync_id>');

El sistema gestiona la eliminación con drop_sync_link de manera distinta según el estado del vínculo:

  • Vínculo en estado active: el estado cambia primero a dropping. Después de que el sistema termina de limpiar los recursos del vínculo y los datos del índice de destino, el estado cambia a dropped.

  • Vínculo en estado dropped: el sistema elimina por completo la información del vínculo.

  • Vínculos en otros estados: el sistema no admite la eliminación.

Modificar un vínculo de sincronización

Después de crear un vínculo de sincronización, ajuste sus parámetros de ejecución o modifique su SQL de sincronización. Al igual que con las vistas de búsqueda, AutoETL ofrece tres métodos de modificación:

Modificación de parámetros

Para un vínculo de sincronización en ejecución, establezca primero la nueva configuración del vínculo mediante la variable de sesión esl_link_options y luego llame a dbms_etl.update_sync_link para aplicar la configuración. AutoETL lee automáticamente la nueva configuración de esl_link_options y reinicia el vínculo de sincronización.

Sintaxis

Ejemplos

Ajuste el paralelismo a 8, la CPU por worker a 4 y la concurrencia por worker a 8 para el vínculo 8f4228x2uq12z:

Modificación de SQL en el lugar

La modificación de SQL en el lugar cambia directamente el SQL de sincronización de un vínculo existente. No requiere crear un nuevo índice de PolarSearch ni un nuevo vínculo, ni cambiar las consultas del negocio, lo que reduce el tiempo de sincronización completa. Si las definiciones SQL antes y después de la modificación son compatibles, la sincronización continúa desde el punto de control original. Si no son compatibles, la modificación falla, el sistema revierte automáticamente a la definición de sincronización previa y reinicia el vínculo.

Sintaxis

<new_sync_sql> requiere el nuevo SQL de sincronización completo. Su estructura es la misma que la del SQL de sincronización utilizado en dbms_etl.sync_by_sql cuando se creó el vínculo.

Ejemplos

Cambie la condición de filtro a c1 > 20 para el vínculo 8f4228x2uq12z:

Modificación con "nuevo índice + nuevo vínculo"

Si las definiciones SQL son incompatibles y no es posible la modificación en el lugar, use el método de "nuevo índice + nuevo vínculo" para reconstruir. Así garantiza que las consultas del negocio no se vean afectadas. Tome como ejemplo la modificación del vínculo A:

  1. Cree el vínculo B con base en el nuevo SQL de sincronización y sincronice los datos hacia un nuevo índice de PolarSearch.

  2. Use CALL dbms_etl.show_sync_link_by_id('<sync_id>') para comprobar el estado del vínculo B. Cuando la latencia de sincronización del vínculo B baje a entre 0 y 1 segundo, cambie la lógica de consulta del negocio del índice antiguo al nuevo.

  3. Después de confirmar que el vínculo B funciona de manera estable, ejecute CALL dbms_etl.drop_sync_link('<sync_id>') para eliminar el vínculo A anterior.

Preguntas frecuentes

¿Cuáles son las diferencias entre las vistas de búsqueda y los procedimientos almacenados de ETL (sync_by_sql)?

Las diferencias principales radican en los escenarios de uso y la complejidad:

  • Vistas de búsqueda: usan sintaxis SQL estándar (CREATE SEARCH VIEW). El sistema gestiona automáticamente los detalles subyacentes de conexión y sincronización. No es necesario escribir Flink SQL. Este método es adecuado para la mayoría de los escenarios de sincronización de una sola tabla y de agregación de varias tablas.

  • Procedimiento almacenado de ETL: usa sintaxis compatible con Flink SQL (CALL dbms_etl.sync_by_sql). Es ideal para escenarios que requieren limpieza, transformación y agregación complejas de datos, ya que ofrece capacidades completas de control de Flink SQL. El sistema gestiona automáticamente la configuración de conexión de las tablas de origen y de destino.