Todos los productos
Search
Centro de documentos

MaxCompute:Scheduled refresh of materialized views

Última actualización: Sep 03, 2026

Las vistas materializadas almacenan en caché los resultados precalculados de las consultas, pero los cambios en las tablas de origen pueden desactualizarlas. La actualización programada mantiene sincronizada una vista materializada con sus tablas de origen mediante la ejecución automática de tareas de actualización en un intervalo fijo o según una programación Cron.

Funcionamiento

Una actualización programada es una tarea en segundo plano que MaxCompute envía según la programación configurada. El tiempo de finalización depende de los recursos del clúster y del tamaño de la tarea.

Alcance de la actualización

  • Vistas materializadas particionadas: si cambian los datos en una partición de la tabla de origen particionada que corresponde a las columnas de clave de partición, solo se actualiza la partición asociada de la vista materializada. Si cambian los datos en otras tablas asociadas con la vista materializada, se ejecuta una actualización completa.

  • Vistas materializadas no particionadas: MaxCompute comprueba si los datos de la tabla de origen han cambiado desde la última actualización. Si no hubo cambios, se omite la actualización.

Gestión de solapamientos

Si una actualización sigue ejecutándose cuando llega la siguiente hora programada, MaxCompute cancela la actualización pendiente y desencadena una nueva en el siguiente horario programado.

Ejemplo con un intervalo de 20 minutos que comienza a las 10:00:00:

Scheduled time

Outcome

10:00:00

La actualización comienza y finaliza a las 10:30:00

10:20:00

Cancelada (la actualización anterior aún está en curso)

10:40:00

La actualización comienza según lo programado

Importante

MaxCompute puede detectar cambios en la configuración de la programación con un retraso de hasta 30 minutos. Una tarea de actualización programada podría enviarse con este retraso después de habilitar o modificar la programación.

Métodos de programación

Existen tres métodos para controlar cuándo se actualiza una vista materializada. Los tres requieren "enable_auto_refresh"="true" en TBLPROPERTIES.

Method

Syntax

Interval unit

Best for

Cláusula EVERY (recomendado)

REFRESH EVERY N MINUTES/HOURS/DAYS

Minutos, horas o días

Intervalos fijos con sintaxis legible

refresh_interval_minutes

TBLPROPERTIES("refresh_interval_minutes"="N")

Solo minutos

Control a nivel de minuto mediante propiedades de tabla

refresh_cron

TBLPROPERTIES("refresh_cron"="expression")

Expresión Cron de Quartz

Programaciones por hora del día o patrones Cron avanzados

Habilitar la actualización programada

Requisitos previos

  • Un proyecto de MaxCompute con recursos de cómputo suficientes

  • Una tabla de origen con datos

En todos los ejemplos se utiliza la siguiente tabla de origen:

CREATE TABLE mf_refresh (id BIGINT, name STRING);
INSERT INTO TABLE mf_refresh VALUES (1,'kyle'),(2,'tom');

Sintaxis completa

CREATE MATERIALIZED VIEW [IF NOT EXISTS] [project_name.]mv_name
[LIFECYCLE days]
[(col_name [COMMENT col_comment], ...)]
[DISABLE REWRITE]
[PARTITIONED BY (col_name [, col_name, ...])]
[CLUSTERED BY|RANGE CLUSTERED BY (col_name [, col_name, ...])
  [SORTED BY (col_name [ASC | DESC] [, col_name [ASC | DESC] ...])]
  INTO number_of_buckets BUCKETS]
[REFRESH EVERY N MINUTES/HOURS/DAYS]
TBLPROPERTIES("enable_auto_refresh"="true"[, "refresh_interval_minutes"="N"][, "refresh_cron"="expression"])
AS <select_statement>;

Parameter

Description

LIFECYCLE days

Número de días antes de que expire la vista materializada

DISABLE REWRITE

Deshabilita la reescritura automática de consultas basada en la vista materializada

PARTITIONED BY

Columnas de clave de partición para vistas materializadas particionadas

CLUSTERED BY / RANGE CLUSTERED BY

Atributos de distribución y ordenamiento. Requiere INTO number_of_buckets BUCKETS

REFRESH EVERY N MINUTES/HOURS/DAYS

Intervalo fijo de actualización

"enable_auto_refresh"="true"

Habilita la actualización programada. Obligatorio para los tres métodos

"refresh_interval_minutes"="N"

Intervalo de actualización en minutos

"refresh_cron"="expression"

Expresión Cron de Quartz para programación basada en tiempo. La expresión utiliza 6 o 7 campos (segundos, minutos, horas, día del mes, mes, día de la semana y, opcionalmente, año). No es compatible con el formato estándar de cron Unix de 5 campos. Para más información, consulte Ejemplos de expresiones Cron

Método 1: cláusula EVERY (recomendado)

Especifique el intervalo de actualización directamente en la instrucción CREATE MATERIALIZED VIEW. La siguiente actualización se ejecuta en el momento de la actualización anterior más el intervalo especificado.

  1. Cree una vista materializada que se actualice cada 10 minutos.

       CREATE MATERIALIZED VIEW IF NOT EXISTS mf_mv_refresh
       REFRESH EVERY 10 MINUTES
       TBLPROPERTIES("enable_auto_refresh"="true")
       AS SELECT id, name FROM mf_refresh;
  2. Consulte la vista materializada para comprobar los datos iniciales. Salida:

       SELECT * FROM mf_mv_refresh;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       +------------+------------+
  3. Inserte nuevas filas en la tabla de origen.

       INSERT INTO TABLE mf_refresh VALUES (3,'jen'),(4,'cathy');
  4. Consulte la vista materializada después de 10 minutos. Las nuevas filas aparecen una vez que finaliza la actualización programada. Salida:

       SELECT * FROM mf_mv_refresh;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 3          | jen        |
       | 4          | cathy      |
       +------------+------------+

Método 2: refresh_interval_minutes

Establezca el intervalo de actualización en minutos mediante TBLPROPERTIES. La siguiente actualización se ejecuta en el momento de la actualización anterior más el número de minutos especificado.

  1. Cree una vista materializada que se actualice cada 20 minutos.

       CREATE MATERIALIZED VIEW IF NOT EXISTS mf_mv_refresh2
       TBLPROPERTIES("enable_auto_refresh"="true", "refresh_interval_minutes"="20")
       AS SELECT id, name FROM mf_refresh;
  2. Consulte la vista materializada para comprobar los datos iniciales. Salida:

       SELECT * FROM mf_mv_refresh2;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 3          | jen        |
       | 4          | cathy      |
       +------------+------------+
  3. Inserte nuevas filas en la tabla de origen.

       INSERT INTO TABLE mf_refresh VALUES (5,'roger'),(6,'david');
  4. Consulte la vista materializada después de 20 minutos. Las nuevas filas aparecen una vez que finaliza la actualización programada. Salida:

       SELECT * FROM mf_mv_refresh2;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 3          | jen        |
       | 4          | cathy      |
       | 5          | roger      |
       | 6          | david      |
       +------------+------------+

Método 3: refresh_cron

Utilice una expresión Cron de Quartz para definir programaciones basadas en intervalos o en la hora del día. El valor de refresh_cron es una cadena en formato Cron de Quartz.

Ejemplo: actualización cada 5 minutos

  1. Cree una vista materializada que se actualice cada 5 minutos.

       CREATE MATERIALIZED VIEW IF NOT EXISTS mf_mv_refresh3
       TBLPROPERTIES("enable_auto_refresh"="true", "refresh_cron"="* */5 * * * ?  *")
       AS SELECT id, name FROM mf_refresh;
  2. Consulte la vista materializada para comprobar los datos iniciales. Salida:

       SELECT * FROM mf_mv_refresh3;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 3          | jen        |
       | 4          | cathy      |
       | 5          | roger      |
       | 6          | david      |
       +------------+------------+
  3. Inserte nuevas filas en la tabla de origen.

       INSERT INTO TABLE mf_refresh VALUES (7,'ethan'),(8,'cal');
  4. Consulte la vista materializada después de 5 minutos. Las nuevas filas aparecen una vez que finaliza la actualización programada. Salida:

       SELECT * FROM mf_mv_refresh3;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 7          | ethan      |
       | 8          | cal        |
       | 3          | jen        |
       | 4          | cathy      |
       | 5          | roger      |
       | 6          | david      |
       +------------+------------+

Ejemplo: actualización diaria a las 20:00

  1. Cree una vista materializada que se actualice a las 20:00 todos los días.

       CREATE MATERIALIZED VIEW IF NOT EXISTS mf_mv_refresh4
       TBLPROPERTIES("enable_auto_refresh"="true", "refresh_cron"="0 0 20 * * ?  *")
       AS SELECT id, name FROM mf_refresh;
  2. Consulte la vista materializada para comprobar los datos iniciales. Salida:

       SELECT * FROM mf_mv_refresh4;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 7          | ethan      |
       | 8          | cal        |
       | 3          | jen        |
       | 4          | cathy      |
       | 5          | roger      |
       | 6          | david      |
       +------------+------------+
  3. Inserte nuevas filas en la tabla de origen.

       INSERT INTO TABLE mf_refresh VALUES (9,'annie'),(10,'zoe');
  4. Consulte la vista materializada después de las 20:00. Las nuevas filas aparecen una vez que finaliza la actualización programada. Salida:

       SELECT * FROM mf_mv_refresh4;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 9          | annie      |
       | 10         | zoe        |
       | 7          | ethan      |
       | 8          | cal        |
       | 3          | jen        |
       | 4          | cathy      |
       | 5          | roger      |
       | 6          | david      |
       +------------+------------+

Modificar la programación de actualización

Cambie el intervalo de actualización o cambie a un método de programación diferente con ALTER MATERIALIZED VIEW:

ALTER MATERIALIZED VIEW mf_mv_refresh2 SET TBLPROPERTIES("enable_auto_refresh"="true", "refresh_interval_minutes"="xx");
ALTER MATERIALIZED VIEW mf_mv_refresh3 SET TBLPROPERTIES("enable_auto_refresh"="true", "refresh_cron"="xx");

Deshabilitar la actualización programada

Establezca enable_auto_refresh en false:

ALTER MATERIALIZED VIEW mf_mv_refresh SET TBLPROPERTIES("enable_auto_refresh"="false");

Consultar el historial de actualizaciones

Ejecute DESC EXTENDED para consultar el historial de actualizaciones y los detalles de configuración:

DESC EXTENDED mv;

La salida incluye la sección AutoRefresh History con el ID de instancia, el estado, la hora de inicio y la hora de finalización de cada ejecución de actualización:

+------------------------------------------------------------------------------------+
| Owner:                    ALIYUN$$****@***.aliyunid.com                       |
| Project:                  m****                                                |
| TableComment:                                                                      |
+------------------------------------------------------------------------------------+
| CreateTime:               2023-05-30 13:16:07                                      |
| LastDDLTime:              2023-05-30 13:16:07                                      |
| LastModifiedTime:         2023-05-30 13:16:07                                      |
+------------------------------------------------------------------------------------+
| MaterializedView: YES                                                              |
| ViewText: select id,name from mf_refresh                                           |
| Rewrite Enabled: true                                                              |
| AutoRefresh Enabled: true                                                          |
| Refresh Interval Minutes: 10                                                       |
+------------------------------------------------------------------------------------+
| Native Columns:                                                                    |
+------------------------------------------------------------------------------------+
| Field    | Type   | Label | ExtendedLabel | Nullable | DefaultValue | Comment      |
+------------------------------------------------------------------------------------+
| id       | bigint |       |               | true     | NULL         |              |
| name     | string |       |               | true     | NULL         |              |
+------------------------------------------------------------------------------------+
| Extended Info:                                                                     |
+------------------------------------------------------------------------------------+
| IsOutdated:               false                                                    |
| TableID:                  569ec712873e44b3868e79b7a8beabab                         |
| IsArchived:               false                                                    |
| PhysicalSize:             1875                                                     |
| FileNum:                  2                                                        |
| StoredAs:                 CFile                                                    |
| CompressionStrategy:      normal                                                   |
| odps.timemachine.retention.days: 1                                                        |
| ColdStorageStatus:        N/A                                                      |
| encryption_enable:        false                                                    |
+------------------------------------------------------------------------------------+
| AutoRefresh History:                                                               |
+------------------------------------------------------------------------------------+
| InstanceId                | Status     | StartTime           | EndTime             |
+------------------------------------------------------------------------------------+
| 20230619070546735ghwl1****** | TERMINATED | 2023-06-19 15:05:46 | 2023-06-19 15:05:47 |
| 20230619065545586gwllc****** | TERMINATED | 2023-06-19 14:55:45 | 2023-06-19 14:55:46 |
| 20230619064544463gcjgom****** | TERMINATED | 2023-06-19 14:45:44 | 2023-06-19 14:45:45 |
| 20230619063543334gzxs2d****** | TERMINATED | 2023-06-19 14:35:43 | 2023-06-19 14:35:44 |
| 2023061906254257gi21w2****** | TERMINATED | 2023-06-19 14:25:42 | 2023-06-19 14:25:43 |
| 20230619061540813giacg8****** | TERMINATED | 2023-06-19 14:15:41 | 2023-06-19 14:15:41 |
| 20230619060539674gswjq9****** | TERMINATED | 2023-06-19 14:05:39 | 2023-06-19 14:05:40 |
| 20230619055538578gvdjk****** | TERMINATED | 2023-06-19 13:55:38 | 2023-06-19 13:55:40 |
| 20230619054537356glqdne****** | TERMINATED | 2023-06-19 13:45:37 | 2023-06-19 13:45:38 |
| 2023061905353687gcc5pl****** | TERMINATED | 2023-06-19 13:35:36 | 2023-06-19 13:35:37 |
+------------------------------------------------------------------------------------+
Nota

En MaxCompute, TERMINATED significa que la ejecución de la tarea finalizó. Este estado abarca tanto las ejecuciones exitosas como las que presentaron errores. Para más detalles sobre los metadatos de las vistas materializadas, consulte Query information about a materialized view.

Referencias