Tous les produits
Search
Centre de documentation

MaxCompute:Scheduled refresh of materialized views

Dernière mise à jour :Aug 10, 2026

Les vues matérialisées mettent en cache les résultats de requêtes précalculés, mais les modifications apportées aux tables sources peuvent les rendre obsolètes. L'actualisation planifiée maintient la synchronisation d'une vue matérialisée avec ses tables sources en exécutant des tâches d'actualisation automatiques à intervalle fixe ou selon une planification Cron.

Fonctionnement

Une actualisation planifiée est une tâche en arrière-plan que MaxCompute soumet selon la planification configurée. Le temps d'achèvement dépend des ressources du cluster et de la taille de la tâche.

Portée de l'actualisation

  • Vues matérialisées partitionnées : Si les données changent dans une partition de la table source partitionnée correspondant aux colonnes de clé de partition, seule la partition associée de la vue matérialisée est actualisée. Si les données d'autres tables associées à la vue matérialisée changent, une actualisation complète est lancée.

  • Vues matérialisées non partitionnées : MaxCompute vérifie si les données de la table source ont changé depuis la dernière actualisation. En l'absence de changement, l'actualisation est ignorée.

Gestion des chevauchements

Si une actualisation est toujours en cours lorsque l'heure planifiée suivante arrive, MaxCompute annule l'actualisation en attente et en déclenche une nouvelle à l'heure prévue suivante.

Exemple avec un intervalle de 20 minutes commençant à 10:00:00 :

Heure planifiée

Résultat

10:00:00

L'actualisation démarre et se termine à 10:30:00

10:20:00

Annulée (l'actualisation précédente est toujours en cours)

10:40:00

L'actualisation démarre comme prévu

Important

MaxCompute peut détecter les modifications de configuration de planification avec un délai pouvant aller jusqu'à 30 minutes. Une tâche d'actualisation planifiée peut être soumise avec ce délai après l'activation ou la modification de la planification.

Méthodes de planification

Trois méthodes contrôlent le moment de l'actualisation d'une vue matérialisée. Toutes trois nécessitent "enable_auto_refresh"="true" dans TBLPROPERTIES.

Méthode

Syntaxe

Unité d'intervalle

Idéal pour

Clause EVERY (recommandée)

REFRESH EVERY N MINUTES/HOURS/DAYS

Minutes, heures ou jours

Intervalles fixes avec une syntaxe lisible

refresh_interval_minutes

TBLPROPERTIES("refresh_interval_minutes"="N")

Minutes uniquement

Contrôle à la minute près via les propriétés de la table

refresh_cron

TBLPROPERTIES("refresh_cron"="expression")

Expression Quartz Cron

Planifications horaires ou modèles Cron avancés

Activer l'actualisation planifiée

Prérequis

  • Un projet MaxCompute disposant de ressources de calcul suffisantes

  • Une table source contenant des données

La table source suivante est utilisée dans tous les exemples :

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

Syntaxe complète

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>;

Paramètre

Description

LIFECYCLE days

Nombre de jours avant l'expiration de la vue matérialisée

DISABLE REWRITE

Désactive la réécriture automatique des requêtes basée sur la vue matérialisée

PARTITIONED BY

Colonnes de clé de partition pour les vues matérialisées partitionnées

CLUSTERED BY / RANGE CLUSTERED BY

Attributs de brassage et de tri. Nécessite INTO number_of_buckets BUCKETS

REFRESH EVERY N MINUTES/HOURS/DAYS

Intervalle d'actualisation fixe

"enable_auto_refresh"="true"

Active l'actualisation planifiée. Obligatoire pour les trois méthodes

"refresh_interval_minutes"="N"

Intervalle d'actualisation en minutes

"refresh_cron"="expression"

Expression Quartz Cron pour la planification horaire. L'expression utilise 6 ou 7 champs (secondes, minutes, heures, jour du mois, mois, jour de la semaine et année facultative). La cron Unix standard à 5 champs n'est pas prise en charge. Pour plus d'informations, consultez Exemples d'expressions Cron

Méthode 1 : Clause EVERY (recommandée)

Spécifiez l'intervalle d'actualisation directement dans l'instruction CREATE MATERIALIZED VIEW. La prochaine actualisation s'exécute à l'heure de la précédente plus l'intervalle spécifié.

  1. Créez une vue matérialisée qui s'actualise toutes les 10 minutes.

       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. Interrogez la vue matérialisée pour vérifier les données initiales. Résultat :

       SELECT * FROM mf_mv_refresh;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       +------------+------------+
  3. Insérez de nouvelles lignes dans la table source.

       INSERT INTO TABLE mf_refresh VALUES (3,'jen'),(4,'cathy');
  4. Interrogez la vue matérialisée après 10 minutes. Les nouvelles lignes apparaissent une fois l'actualisation planifiée terminée. Résultat :

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

Méthode 2 : refresh_interval_minutes

Définissez l'intervalle d'actualisation en minutes via TBLPROPERTIES. La prochaine actualisation s'exécute à l'heure de la précédente plus le nombre de minutes spécifié.

  1. Créez une vue matérialisée qui s'actualise toutes les 20 minutes.

       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. Interrogez la vue matérialisée pour vérifier les données initiales. Résultat :

       SELECT * FROM mf_mv_refresh2;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 3          | jen        |
       | 4          | cathy      |
       +------------+------------+
  3. Insérez de nouvelles lignes dans la table source.

       INSERT INTO TABLE mf_refresh VALUES (5,'roger'),(6,'david');
  4. Interrogez la vue matérialisée après 20 minutes. Les nouvelles lignes apparaissent une fois l'actualisation planifiée terminée. Résultat :

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

Méthode 3 : refresh_cron

Utilisez une expression Quartz Cron pour définir des planifications basées sur des intervalles ou des horaires spécifiques. La valeur refresh_cron est une chaîne au format Quartz Cron.

Exemple : Actualisation toutes les 5 minutes

  1. Créez une vue matérialisée qui s'actualise toutes les 5 minutes.

       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. Interrogez la vue matérialisée pour vérifier les données initiales. Résultat :

       SELECT * FROM mf_mv_refresh3;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 3          | jen        |
       | 4          | cathy      |
       | 5          | roger      |
       | 6          | david      |
       +------------+------------+
  3. Insérez de nouvelles lignes dans la table source.

       INSERT INTO TABLE mf_refresh VALUES (7,'ethan'),(8,'cal');
  4. Interrogez la vue matérialisée après 5 minutes. Les nouvelles lignes apparaissent une fois l'actualisation planifiée terminée. Résultat :

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

Exemple : Actualisation quotidienne à 20 h 00

  1. Créez une vue matérialisée qui s'actualise à 20 h 00 chaque jour.

       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. Interrogez la vue matérialisée pour vérifier les données initiales. Résultat :

       SELECT * FROM mf_mv_refresh4;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 7          | ethan      |
       | 8          | cal        |
       | 3          | jen        |
       | 4          | cathy      |
       | 5          | roger      |
       | 6          | david      |
       +------------+------------+
  3. Insérez de nouvelles lignes dans la table source.

       INSERT INTO TABLE mf_refresh VALUES (9,'annie'),(10,'zoe');
  4. Interrogez la vue matérialisée après 20 h 00. Les nouvelles lignes apparaissent une fois l'actualisation planifiée terminée. Résultat :

       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      |
       +------------+------------+

Modifier la planification d'actualisation

Modifiez l'intervalle d'actualisation ou passez à une autre méthode de planification avec 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");

Désactiver l'actualisation planifiée

Définissez enable_auto_refresh sur false :

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

Afficher l'historique d'actualisation

Exécutez DESC EXTENDED pour afficher l'historique d'actualisation et les détails de configuration :

DESC EXTENDED mv;

Le résultat inclut la section AutoRefresh History avec l'ID d'instance, l'état, l'heure de début et l'heure de fin pour chaque exécution d'actualisation :

+------------------------------------------------------------------------------------+
| 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 |
+------------------------------------------------------------------------------------+
Remarque

Dans MaxCompute, TERMINATED signifie que l'exécution de la tâche est terminée. Cet état couvre à la fois les exécutions réussies et échouées. Pour plus de détails sur les métadonnées des vues matérialisées, consultez Afficher les informations sur une vue matérialisée.

Références