Todos os produtos
Search
Central de documentação

AnalyticDB:Atualizar visualizações materializadas

Última atualização: Jul 02, 2026

Visualizações materializadas aceleram consultas complexas ou simplificam processos de ETL. Elas pré-calculam uma consulta definida pelo usuário e armazenam os resultados. Defina uma política de atualização para a visualização materializada com base nos padrões de escrita das tabelas base, na complexidade computacional da consulta (query_body) e nos requisitos de atualização dos dados.

Escolher uma política de atualização

As visualizações materializadas suportam duas políticas de atualização: completa (COMPLETE) e rápida (FAST).

  • Atualização completa: executa a consulta SQL original para varrer os dados de todas as partições-alvo na tabela base e substitui totalmente os dados antigos pelos novos dados calculados.

  • Atualização rápida: o sistema reescreve a consulta da visualização (query_body) para varrer apenas os dados alterados (provenientes de operações INSERT, DELETE e UPDATE) na tabela base e aplica essas alterações à visualização materializada. Isso evita a varredura de toda a tabela base em cada ciclo e reduz o custo computacional de cada atualização.

A tabela a seguir compara os casos de uso, vantagens e limitações das duas políticas de atualização.

Política de atualização

Casos de uso

Características

Atualização completa

Cenários offline:

  • Atualizações em lote diárias (T+1)

  • Atualizações de dados horárias

  • Conjuntos de dados pequenos com baixa complexidade computacional, onde latência no nível de minutos é aceitável.

Vantagem: O query_body aceita qualquer consulta SQL.

Limitação: permite apenas atualizações completas em lote.

Atualização rápida

Cenários em tempo real:

  • Ingestão de dados em tempo real.

  • Relatórios ou pipelines de ETL que exigem atualizações em tempo real.

  • Casos de uso que requerem atualização de dados no nível de segundos.

Vantagens:

  • Geralmente processa volumes menores de dados, resultando em menor sobrecarga.

  • Pode substituir o processamento de fluxo, o que reduz custos de desenvolvimento e manutenção.

Limitações:

  • Sujeito a limitações quanto à versão do mecanismo, tabelas base e query_body.

  • Não há suporte para atualização manual nem atualização acionada por sobrescrita.

Escolher um gatilho de atualização

Ao criar uma visualização materializada, defina tanto a política quanto o gatilho de atualização. As visualizações materializadas suportam atualização sob demanda (ON DEMAND) e atualização acionada por sobrescrita (ON OVERWRITE). A atualização sob demanda subdivide-se em agendada e manual. Caso não especifique um gatilho, o padrão será a atualização sob demanda.

Ao escolher um gatilho de atualização, considere seus requisitos de atualização de dados e a carga do cluster. As características e casos de uso para cada gatilho são:

  • Atualização manual: a visualização materializada não atualiza os dados automaticamente. Execute REFRESH MATERIALIZED VIEW para atualizar os dados manualmente. Indicado para cenários onde a consistência dos dados não é alta prioridade ou os dados mudam com pouca frequência.

  • Atualização agendada: a visualização materializada atualiza automaticamente em um horário especificado. Se uma atualização ainda estiver em execução quando a próxima estiver programada para começar, o sistema ignora a nova atualização e aguarda o próximo intervalo. Recomendado para cenários em que os dados da tabela base mudam periodicamente, como novos registros de transações gerados durante períodos diários ou semanais fixos.

  • Atualização acionada por sobrescrita: a visualização materializada atualiza automaticamente quando uma tabela base é sobrescrita usando INSERT OVERWRITE. Adequado para cenários com altos requisitos de dados em tempo real e consistência.

Diferentes políticas de atualização suportam diferentes gatilhos, conforme mostra a tabela a seguir:

Política de atualização

Atualização sob demanda (ON DEMAND)

Atualização acionada por sobrescrita (ON OVERWRITE)

Atualização manual

Atualização agendada

Atualização completa

✔️

✔️

✔️

Atualização rápida

✔️

Definir políticas e gatilhos de atualização

Os exemplos a seguir utilizam as tabelas customer, sales e product para mostrar como definir a política e o gatilho de atualização para uma nova visualização materializada.

/*+ RC_DDL_ENGINE_REWRITE_XUANWUV2=false */ -- Set the table engine to XUANWU.
CREATE TABLE customer (
    customer_id INT PRIMARY KEY,
    customer_name VARCHAR(255),
    is_vip Boolean
);

/*+ RC_DDL_ENGINE_REWRITE_XUANWUV2=false */ -- Set the table engine to XUANWU.
CREATE TABLE sales (
    sale_id INT PRIMARY KEY,
    product_id INT,
    customer_id INT,
    price DECIMAL(10, 2),
    quantity INT,
    sale_date TIMESTAMP
);
/*+ RC_DDL_ENGINE_REWRITE_XUANWUV2=false */ -- Set the table engine to XUANWU.
CREATE TABLE product (
    product_id INT PRIMARY KEY,
    product_name VARCHAR,
    category_id INT,
    unit_price DECIMAL(10, 2),
    stock_quantity INT
);

Criar uma visualização materializada com atualização completa

Ao criar uma visualização materializada, use a palavra-chave REFRESH COMPLETE para especificar uma política de atualização completa.

Uma visualização materializada com atualização completa suporta atualização manual, agendada e acionada por sobrescrita.

  • Crie uma visualização materializada com atualização completa chamada compl_mv1. Como esta visualização não define um gatilho de atualização nem um parâmetro NEXT, ela assume como padrão uma atualização sob demanda que deve ser acionada manualmente.

    CREATE MATERIALIZED VIEW compl_mv1
    REFRESH COMPLETE
    AS
    SELECT * FROM customer;
  • Crie uma visualização materializada com atualização completa chamada compl_mv2. Esta visualização define uma atualização sob demanda (ON DEMAND) e especifica os horários de atualização inicial (START WITH) e subsequente (NEXT). Neste exemplo, a visualização atualiza automaticamente às 02:00 todos os dias.

    CREATE MATERIALIZED VIEW compl_mv2
    REFRESH COMPLETE ON DEMAND
     START WITH DATE_FORMAT(now() + interval 1 day, '%Y-%m-%d 02:00:00')
     NEXT DATE_FORMAT(now() + interval 1 day, '%Y-%m-%d 02:00:00')
    AS
    SELECT * FROM customer;
  • Crie uma visualização materializada com atualização completa chamada compl_mv3. Esta visualização está configurada para uma atualização acionada por sobrescrita (ON OVERWRITE). Este modo não exige uma cláusula NEXT.

    CREATE MATERIALIZED VIEW compl_mv3
    REFRESH COMPLETE ON OVERWRITE
    AS
    SELECT * FROM customer;

Criar uma visualização materializada com atualização rápida

Ao criar uma visualização materializada, use a palavra-chave REFRESH FAST para especificar uma política de atualização rápida. Uma visualização materializada com atualização rápida suporta apenas atualização agendada.

Ativar log binário

Antes de criar uma visualização materializada com atualização rápida, ative o log binário para o cluster e suas tabelas base.

SET ADB_CONFIG BINLOG_ENABLE=true; -- For clusters with an engine version before 3.2.0.0, run this command to enable binary logging. It is enabled by default in 3.2.0.0 and later.
ALTER TABLE customer binlog=true;
ALTER TABLE sales binlog=true;
ALTER TABLE product binlog=true;
Importante
  • As operações INSERT OVERWRITE INTO e TRUNCATE são suportadas em tabelas com log binário ativado apenas na versão do mecanismo 3.2.0.0 e posteriores.

  • Após criar uma visualização materializada com atualização rápida, não é possível desativar o log binário nas tabelas base.

  • Depois de excluir uma visualização materializada com atualização rápida, desative manualmente o log binário para o cluster e as tabelas base executando SET ADB_CONFIG BINLOG_ENABLE=false; e ALTER TABLE <table_name> binlog=false;.

Visualizações materializadas de tabela única

  • Crie uma visualização materializada de tabela única fast_mv1 que usa atualização rápida sem operação de agregação e atualiza a cada 10 segundos.

    CREATE MATERIALIZED VIEW fast_mv1
    REFRESH FAST NEXT now() + INTERVAL 10 second
    AS
    SELECT sale_id, sale_date, price
    FROM sales
    WHERE price > 10;
  • Crie uma visualização materializada de tabela única fast_mv2 que usa atualização rápida com agregação GROUP BY e atualiza a cada 5 segundos.

    CREATE MATERIALIZED VIEW fast_mv2
    REFRESH FAST NEXT now() + INTERVAL 5 second
    AS
    SELECT
       customer_id, sale_date,                 -- The system uses the GROUP BY columns as the primary key of the materialized view.
       COUNT(sale_id) AS cnt_sale_id,          -- Aggregate output column.
       SUM(price * quantity) AS total_revenue, -- Aggregate output column.
       customer_id / 100 AS new_customer_id    -- Non-aggregate output columns can use any expression.
    FROM sales
    WHERE ifnull(price, 1) > 0                 -- Conditions can use any expression.
    GROUP BY customer_id, sale_date;
  • Crie uma visualização materializada de tabela única fast_mv3 que usa atualização rápida sem agregação GROUP BY e atualiza a cada minuto.

    CREATE MATERIALIZED VIEW fast_mv3
    REFRESH FAST NEXT now() + INTERVAL 1 minute
    AS
    SELECT count(*) AS cnt   -- The system generates a constant primary key to ensure that the materialized view contains only one record.
    FROM sales;

Visualizações materializadas de múltiplas tabelas

  • Crie uma visualização materializada de múltiplas tabelas fast_mv4 que usa atualização rápida sem operação de agregação e atualiza a cada 5 segundos.

    CREATE MATERIALIZED VIEW fast_mv4
    REFRESH FAST NEXT now() + INTERVAL 5 second
    AS
    SELECT 
        c.customer_id,
        c.customer_name,
        p.product_id,
        s.sale_id,
        (s.price * s.quantity) AS revenue
    FROM 
        sales s
    JOIN 
        customer c ON s.customer_id = c.customer_id
    JOIN 
        product p ON s.product_id = p.product_id;
  • Crie uma visualização materializada de múltiplas tabelas fast_mv5 que usa atualização rápida com agregação GROUP BY e atualiza a cada 10 segundos.

    CREATE MATERIALIZED VIEW fast_mv5
    REFRESH FAST NEXT now() + INTERVAL 10 second
    AS
    SELECT 
        s.sale_id,
        c.customer_name,
        p.product_name,
        COUNT(*) AS cnt,           
        SUM(s.price * s.quantity) AS revenue,         
        SUM(p.unit_price) AS sum_p          
    FROM 
        sales s
    JOIN 
        (SELECT customer_id, customer_name FROM customer) c ON c.customer_id = s.customer_id
    JOIN 
        (SELECT * FROM product WHERE stock_quantity > 0) p ON p.product_id = s.product_id
    GROUP BY 
        s.sale_id, c.customer_name, p.product_name;

Observação

Se uma tabela base for submetida a uma operação TRUNCATE ou INSERT OVERWRITE, ou se ocorrer uma anomalia interna que possa afetar a correção dos dados, uma visualização materializada incremental reverte automaticamente para uma atualização completa única. Após o sucesso da atualização completa, as atualizações subsequentes retomam automaticamente o modo incremental.

Limitações

As seguintes limitações aplicam-se a visualizações materializadas com atualização rápida:

  • Em clusters com versão do mecanismo anterior a 3.2.3.0, uma tabela particionada não pode ser tabela base para uma visualização materializada com atualização rápida.

  • Em clusters com versão do mecanismo anterior a 3.2.3.1, as operações INSERT OVERWRITE e TRUNCATE não são suportadas nas tabelas base de uma visualização materializada com atualização rápida. A execução dessas operações causa erro.

  • A atualização rápida suporta apenas atualizações agendadas com intervalo entre 5 segundos (s) e 5 minutos (min).

  • O query_body de uma visualização materializada com atualização rápida possui as seguintes limitações:

    • A visualização materializada deve garantir resultados idênticos aos de uma consulta direta em suas tabelas base e deve suportar todas as alterações DML. Se o query_body não suportar atualização rápida, a instrução CREATE MATERIALIZED VIEW retornará erro.

    • As condições não podem conter expressões não determinísticas, como now() ou rand().

    • Apenas as seguintes funções de agregação são suportadas: COUNT, SUM, MAX, MIN, AVG, APPROX_DISTINCT e COUNT(DISTINCT).

    • Quando o query_body usa a função de agregação MAX, MIN, APPROX_DISTINCT ou COUNT(DISTINCT), apenas operações INSERT são permitidas nas tabelas base. Operações de exclusão de dados, como DELETE, UPDATE, REPLACE e INSERT ON DUPLICATE KEY UPDATE, são proibidas.

    • A palavra-chave DISTINCT não é suportada para funções de agregação diferentes de COUNT(DISTINCT).

    • COUNT(DISTINCT) suporta apenas o tipo INTEGER.

    • AVG não suporta o tipo DECIMAL.

    • A palavra-chave HAVING não é suportada para operações de agregação.

    • Funções de janela não são suportadas.

    • Operações de ordenação não são suportadas.

    • Operações de conjunto como UNION, EXCEPT e INTERSECT não são suportadas.

  • Visualizações materializadas de múltiplas tabelas com atualização rápida têm as seguintes limitações adicionais:

    • Atualmente, visualizações materializadas de múltiplas tabelas suportam apenas INNER JOIN.

    • Por padrão, uma visualização materializada de múltiplas tabelas pode unir no máximo cinco tabelas.

    • As colunas de junção em uma visualização materializada de múltiplas tabelas devem ser colunas originais das tabelas, ter o mesmo tipo de dados e cada coluna de junção deve ter um índice.

Atualizar visualizações materializadas manualmente

Se uma visualização materializada for criada com a política de atualização ON DEMAND e nenhuma cláusula NEXT for definida, ela não atualizará automaticamente. Nesse caso, atualize a visualização materializada manualmente.

REFRESH MATERIALIZED VIEW <mv_name>;

Após enviar uma solicitação de atualização, o sistema adiciona o trabalho de atualização a uma fila em segundo plano. Continue realizando outras operações sem precisar esperar a conclusão da atualização.

Uma mensagem de retorno Query OK ou Success indica que o trabalho de atualização foi enviado com sucesso para a fila.

Consultar registros de atualização

Consultar registros de atualização automática

Execute a seguinte instrução SQL para consultar os registros de atualização automática de uma visualização materializada específica, incluindo hora de início (start_time), hora de término (end_time), status (state) e ID do processo (process_id). Para obter mais informações sobre os campos nos resultados retornados, consulte Gerenciar visualizações materializadas.

SELECT * FROM information_schema.mv_auto_refresh_jobs where mv_name = '<mv_name>';

Consultar registros de atualização manual

  • Para consultar registros de atualização manual dos últimos 30 dias, utilize o recurso de auditoria SQL. Ao consultar, insira a palavra-chave REFRESH MATERIALIZED VIEW mv_name para encontrar informações como hora, duração, endereço IP e conta do banco de dados para cada atualização manual.

    O recurso de auditoria SQL deve ser ativado separadamente. Operações SQL ocorridas antes da ativação não são registradas nos logs de auditoria.
  • Para consultar registros de atualização manual e automática dos últimos 14 dias, utilize o recurso de diagnóstico e otimização de SQL. Ao consultar, insira o nome da visualização materializada, como compl_mv1, para encontrar informações de todas as consultas SQL relacionadas (incluindo criação, atualização manual, atualização automática e alteração), como hora de início, conta do banco de dados, duração e ID do processo.

Parar um trabalho de atualização em execução

Se um trabalho de atualização demorar muito, pare-o manualmente usando seu ID de processo. Se isso falhar, entre em contato com o suporte técnico.

Observações

Se você parar um trabalho de atualização usando KILL PROCESS <process_id>;, observe que a próxima atualização ainda será acionada no próximo horário agendado ou na próxima sobrescrita da tabela base.

Uso

Para parar um trabalho de atualização que está no estado RUNNING, use o seguinte SQL:

KILL PROCESS <process_id>;

Obtenha o process_id nos registros de atualização da visualização materializada.

Documentos relacionados