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 |
|
|
A atualização inicia e conclui às |
|
|
Cancelada (atualização anterior ainda em andamento) |
|
|
A atualização inicia conforme o agendamento |
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 |
|
Minutos, horas ou dias |
Intervalos fixos com sintaxe legível |
|
|
|
Apenas minutos |
Controle em nível de minuto por meio de propriedades de tabela |
|
|
|
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 |
|
|
Número de dias antes da expiração da visualização materializada |
|
|
Desativa a reescrita automática de consultas com base na visualização materializada |
|
|
Colunas de chave de partição para visualizações materializadas particionadas |
|
|
Atributos de shuffle e ordenação. Requer |
|
|
Intervalo fixo de atualização |
|
|
Ativa a atualização agendada. Obrigatório para todos os três métodos |
|
|
Intervalo de atualização em minutos |
|
|
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.
-
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; -
Visualize a visualização materializada para verificar os dados iniciais. Saída:
SELECT * FROM mf_mv_refresh;+------------+------------+ | id | name | +------------+------------+ | 1 | kyle | | 2 | tom | +------------+------------+ -
Insira novas linhas na tabela source.
INSERT INTO TABLE mf_refresh VALUES (3,'jen'),(4,'cathy'); -
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.
-
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; -
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 | +------------+------------+ -
Insira novas linhas na tabela source.
INSERT INTO TABLE mf_refresh VALUES (5,'roger'),(6,'david'); -
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
-
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; -
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 | +------------+------------+ -
Insira novas linhas na tabela source.
INSERT INTO TABLE mf_refresh VALUES (7,'ethan'),(8,'cal'); -
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
-
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; -
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 | +------------+------------+ -
Insira novas linhas na tabela source.
INSERT INTO TABLE mf_refresh VALUES (9,'annie'),(10,'zoe'); -
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 |
+------------------------------------------------------------------------------------+
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.