Todos os produtos
Search
Central de documentação

MaxCompute:Atualização agendada de visualizações materializadas

Última atualização: Jun 27, 2026

As visualizações materializadas armazenam em cache resultados de consultas pré-computados, mas alterações nas tabelas source podem torná-las desatualizadas. A atualização agendada mantém a visualização materializada sincronizada com suas tabelas source executando tarefas automáticas de atualização em um intervalo fixo ou conforme uma programação Cron.

Como funciona

A atualização agendada é uma tarefa em segundo plano que o MaxCompute envia conforme a programação configurada. O tempo de conclusão depende dos recursos do cluster e do tamanho da tarefa.

Escopo da atualização

  • Visualizações materializadas particionadas -- Se houver alteração de dados em uma partição da tabela source particionada correspondente às colunas de chave de partição, o sistema atualiza apenas a partição associada da visualização materializada. Caso os dados em outras tabelas associadas à visualização materializada sofram alterações, ocorre uma atualização completa.

  • Visualizações materializadas não particionadas -- O MaxCompute verifica se os dados da tabela source foram alterados desde a última atualização. Se não houver mudanças, o sistema ignora a atualização.

Tratamento de sobreposição

Se uma atualização ainda estiver em execução quando o próximo horário agendado chegar, o MaxCompute cancela a atualização pendente e aciona uma nova no horário agendado seguinte.

Exemplo com um intervalo de 20 minutos iniciando às 10:00:00:

Horário agendado

Resultado

10:00:00

A atualização inicia e conclui às 10:30:00

10:20:00

Cancelada (atualização anterior ainda em andamento)

10:40:00

A atualização inicia conforme o agendamento

Importante

O MaxCompute pode detectar alterações na configuração de agendamento com um atraso de até 30 minutos. Uma tarefa de atualização agendada pode ser enviada com esse atraso após você ativar ou modificar o agendamento.

Métodos de agendamento

Três métodos controlam quando uma visualização materializada é atualizada. Todos exigem "enable_auto_refresh"="true" em TBLPROPERTIES.

Método

Sintaxe

Unidade de intervalo

Mais indicado para

Cláusula EVERY (Recomendado)

REFRESH EVERY N MINUTES/HOURS/DAYS

Minutos, horas ou dias

Intervalos fixos com sintaxe legível

refresh_interval_minutes

TBLPROPERTIES("refresh_interval_minutes"="N")

Apenas minutos

Controle em nível de minuto por meio de propriedades de tabela

refresh_cron

TBLPROPERTIES("refresh_cron"="expression")

Expressão Quartz Cron

Agendamentos baseados em horário específico ou padrões Cron avançados

Ativar atualização agendada

Pré-requisitos

  • Um projeto MaxCompute com recursos de computação suficientes

  • Uma tabela source com dados

Os exemplos a seguir utilizam esta tabela source:

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

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

Parâmetro

Descrição

LIFECYCLE days

Número de dias antes da expiração da visualização materializada

DISABLE REWRITE

Desativa a reescrita automática de consultas com base na visualização materializada

PARTITIONED BY

Colunas de chave de partição para visualizações materializadas particionadas

CLUSTERED BY / RANGE CLUSTERED BY

Atributos de shuffle e ordenação. Requer INTO number_of_buckets BUCKETS

REFRESH EVERY N MINUTES/HOURS/DAYS

Intervalo fixo de atualização

"enable_auto_refresh"="true"

Ativa a atualização agendada. Obrigatório para todos os três métodos

"refresh_interval_minutes"="N"

Intervalo de atualização em minutos

"refresh_cron"="expression"

Expressão Quartz Cron para agendamento baseado em tempo. A expressão usa 6 ou 7 campos (segundos, minutos, horas, dia do mês, mês, dia da semana e, opcionalmente, ano). O formato Unix cron padrão de 5 campos não é suportado. Para mais informações, consulte Exemplos de expressões Cron

Método 1: Cláusula EVERY (Recomendado)

Especifique o intervalo de atualização diretamente na instrução CREATE MATERIALIZED VIEW. A próxima atualização ocorre no horário da atualização anterior somado ao intervalo especificado.

  1. Crie uma visualização materializada com atualização a 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. Visualize a visualização materializada para verificar os dados iniciais. Saída:

       SELECT * FROM mf_mv_refresh;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       +------------+------------+
  3. Insira novas linhas na tabela source.

       INSERT INTO TABLE mf_refresh VALUES (3,'jen'),(4,'cathy');
  4. Após 10 minutos, visualize a visualização materializada. As novas linhas aparecem depois que a atualização agendada for concluída. Saída:

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

Método 2: refresh_interval_minutes

Defina o intervalo de atualização em minutos por meio de TBLPROPERTIES. A próxima atualização ocorre no horário da atualização anterior somado ao número especificado de minutos.

  1. Crie uma visualização materializada com atualização a 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. Visualize a visualização materializada para verificar os dados iniciais. Saída:

       SELECT * FROM mf_mv_refresh2;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 3          | jen        |
       | 4          | cathy      |
       +------------+------------+
  3. Insira novas linhas na tabela source.

       INSERT INTO TABLE mf_refresh VALUES (5,'roger'),(6,'david');
  4. Após 20 minutos, visualize a visualização materializada. As novas linhas aparecem depois que a atualização agendada for concluída. Saída:

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

Método 3: refresh_cron

Utilize uma expressão Quartz Cron para definir agendamentos baseados em intervalo ou horário específico. O valor de refresh_cron é uma string no formato Quartz Cron.

Exemplo: Atualizar a cada 5 minutos

  1. Crie uma visualização materializada com atualização a 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. Visualize a visualização materializada para verificar os dados iniciais. Saída:

       SELECT * FROM mf_mv_refresh3;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 3          | jen        |
       | 4          | cathy      |
       | 5          | roger      |
       | 6          | david      |
       +------------+------------+
  3. Insira novas linhas na tabela source.

       INSERT INTO TABLE mf_refresh VALUES (7,'ethan'),(8,'cal');
  4. Após 5 minutos, visualize a visualização materializada. As novas linhas aparecem depois que a atualização agendada for concluída. Saída:

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

Exemplo: Atualizar diariamente às 20:00

  1. Crie uma visualização materializada com atualização diária às 20:00.

       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. Visualize a visualização materializada para verificar os dados iniciais. Saída:

       SELECT * FROM mf_mv_refresh4;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 7          | ethan      |
       | 8          | cal        |
       | 3          | jen        |
       | 4          | cathy      |
       | 5          | roger      |
       | 6          | david      |
       +------------+------------+
  3. Insira novas linhas na tabela source.

       INSERT INTO TABLE mf_refresh VALUES (9,'annie'),(10,'zoe');
  4. Após as 20:00, visualize a visualização materializada. As novas linhas aparecem depois que a atualização agendada for concluída. Saída:

       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 o agendamento de atualização

Altere o intervalo de atualização ou mude para um método de agendamento diferente com 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");

Desativar atualização agendada

Defina enable_auto_refresh como false:

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

Visualizar histórico de atualizações

Execute DESC EXTENDED para visualizar o histórico de atualizações e detalhes de configuração:

DESC EXTENDED mv;

A saída inclui a seção AutoRefresh History com o ID da instância, status, hora de início e hora de término de cada execução de atualização:

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

No MaxCompute, TERMINATED significa que a execução da tarefa foi finalizada. Esse status abrange tanto execuções bem-sucedidas quanto com falha. Para mais detalhes sobre metadados de visualizações materializadas, consulte Consultar informações sobre uma visualização materializada.

Referências