Todos os produtos
Search
Central de documentação

Hologres:Alterar tabela dinâmica

Última atualização: Jun 28, 2026

Use ALTER DYNAMIC TABLE para modifique o comportamento de atualização, os recursos de computação, a definição de consulta e as propriedades de uma tabela dinâmica. O sistema suporta apenas as operações descritas neste tópico.

Sintaxe

Os comandos a seguir resumem todas as operações suportadas do ALTER DYNAMIC TABLE. Cada seção abaixo detalha o uso, os parâmetros e as restrições de versão.

-- Pause or resume auto-refresh
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (auto_refresh_enable = false | true);

-- Modify freshness (V3.1+ syntax only)
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (freshness = '<num> {minutes | hours}');

-- Modify computing resource
ALTER [DYNAMIC] TABLE [IF EXISTS] [<schema>.]<table_name> SET (['local' | 'serverless' | '<warehouse_name>']); -- V4.0.7+
ALTER DYNAMIC TABLE [IF EXISTS] [<schema>.]<table_name> SET (auto_refresh_guc_hg_experimental_serverless_computing_required_cores = '<num>'); -- V4.0.7+

-- Modify refresh mode
ALTER DYNAMIC TABLE <schema_name>.<table_name> SET (auto_refresh_mode = '<full/auto>');  -- V3.1+
ALTER DYNAMIC TABLE <schema_name>.<table_name> SET (refresh_mode = 'full');                -- V3.0

-- Modify active partition time range (V3.1+ only)
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (auto_refresh_partition_active_time = '<num> {minutes | hours | days}');

-- Modify query definition (V3.1.18+)
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> AS <query>;

-- Rename the table (V3.1.20+)
ALTER DYNAMIC TABLE [IF EXISTS] <table_name> RENAME TO <new_name>;

-- Modify dictionary encoding, bitmap index, TTL, and schema
ALTER DYNAMIC TABLE [<schema_name>.]<table_name> SET (dictionary_encoding_columns = '[<columnName>{:[on|off|auto]}[,...]]');
ALTER DYNAMIC TABLE [<schema_name>.]<table_name> SET (bitmap_columns = '[<columnName>{:[on|off]}[,...]]');
ALTER DYNAMIC TABLE [<schema_name>.]<table_name> SET (time_to_live_in_seconds = '<num>');
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET SCHEMA <new_schema>;

Gerencie tarefas de atualização

Pausar atualização automática

Use esta opção para interromper temporariamente toda a atividade de atualização, como durante manutenções ou migração de dados na source. Após a pausa, todas as tarefas de atualização subsequentes param até que você as retome explicitamente.

ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (auto_refresh_enable = false);

Retomar atualização automática

Retomar uma tabela dinâmica pausada restaura o comportamento de atualização com base nas configurações originais da tabela.

ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (auto_refresh_enable = true);

Modifique a atualidade dos dados

Reduza o valor de atualidade para obter dados mais recentes ou aumente-o para diminuir o custo de computação quando dados quase em tempo real não forem necessários.

Apenas tabelas dinâmicas criadas com a sintaxe V3.1 suportam este parâmetro.

O valor mínimo é de 1 minuto. A alteração entra em vigor imediatamente.

ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (freshness = '<num> {minutes | hours}');

Modifique recursos de computação

Alterne entre recursos de instância (local) e recursos serverless (serverless), ou altere o tamanho da computação serverless. Limites no nível da instância se aplicam às especificações máximas disponíveis para serverless. Para mais detalhes, consulte Trabalhar com computação serverless.

A sintaxe varia conforme a versão:

V4.0.7+

-- Switch computing resource type.
ALTER [DYNAMIC] TABLE [IF EXISTS] [<schema>.]<table_name> SET (['local' | 'serverless' | '<warehouse_name>']);

-- Set Serverless compute size (number of vCPUs).
ALTER DYNAMIC TABLE [IF EXISTS] [<schema>.]<table_name>
  SET (auto_refresh_guc_hg_experimental_serverless_computing_required_cores = '<num>');

V3.1

-- Switch computing resource type.
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name>
  SET (computing_resource = '[local|serverless]');

-- Set serverless compute size.
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name>
  SET (refresh_guc_hg_experimental_serverless_computing_required_cores = '<num>');

V3.0

-- Switch computing resource type.
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name>
  SET (<incremental/full>_guc_hg_computing_resource = '[local|serverless]');

-- Set serverless compute size.
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name>
  SET (<incremental/full>_guc_hg_experimental_serverless_computing_required_cores = '<num>');

Modifique o modo de atualização

Altere o modo de atualização quando os requisitos da sua consulta ou pipeline de dados mudarem. Um exemplo comum é trocar da atualização incremental para a completa após adicionar operadores incompatíveis com a atualização incremental.

Importante
  • Ao mudar para atualização completa, a tarefa de atualização incremental original é interrompida. Reconfigure quaisquer propriedades relacionadas à atualização conforme necessário.

  • O Hologres limpa automaticamente a tabela de estado usada para atualização incremental para reduzir o uso de armazenamento.

  • Para tabelas dinâmicas com particionamento lógico, a alteração tem efeito apenas nas partições futuras. Em tabelas dinâmicas não particionadas, ela entra em vigor imediatamente.

Transições suportadas por versão:

Transição

Suportado a partir de

Atualização incremental para completa

V3.0

Atualização automática para completa

V3.1

Sintaxe V3.1

ALTER DYNAMIC TABLE <schema_name>.<table_name> SET (auto_refresh_mode = '<full/auto>');

Sintaxe V3.0

ALTER DYNAMIC TABLE <schema_name>.<table_name> SET (refresh_mode = 'full');

Modifique o intervalo de tempo da partição ativa

Em tabelas dinâmicas com particionamento lógico, reduza ou expanda o intervalo de partições ativas para controlar quais partições são incluídas nas atualizações automáticas.

Suportado apenas na V3.1 e versões posteriores.
A alteração aplica-se somente a partições futuras. As partições existentes não são afetadas.
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name>
  SET (auto_refresh_partition_active_time = '<num> {minutes | hours | days}');

Modifique o horário de início da atualização (apenas V3.0)

Defina um horário futuro para o início das tarefas de atualização automática. Apenas tabelas dinâmicas criadas com a sintaxe V3.0 suportam este parâmetro.

ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name>
  SET (<incremental/full>_auto_refresh_schd_start_time = '<timestamptz>');

Modifique o intervalo de atualização (apenas V3.0)

Altere a frequência de execução da atualização automática. Apenas tabelas dinâmicas criadas com a sintaxe V3.0 suportam este parâmetro.

ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name>
  SET (<incremental/full>_auto_refresh_interval = '[<num> { minutes | hours}]');

Modifique a definição de consulta

V3.1.18 e posterior

A partir do Hologres V3.1.18, você pode atualize a definição de consulta de uma tabela dinâmica para adicionar colunas. A nova consulta deve produzir um esquema compatível com o original.

ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name>
AS
<query>;

Requisitos de compatibilidade

A nova consulta deve atender a todos os critérios abaixo:

  • Tanto a consulta original quanto a nova devem produzir o mesmo tipo de tabela: ambas particionadas ou ambas não particionadas.

  • As chaves primárias (PKs) devem ser idênticas.

  • As chaves de distribuição devem ser idênticas.

  • As chaves de partição devem ser idênticas.

  • Chave de clustering, chave de segmento, orientação de armazenamento (orientada a colunas ou híbrida linha-coluna), codificação de dicionário e índice bitmap devem ser idênticos.

  • Os nomes dos campos devem ser idênticos.

  • Campos com o mesmo nome devem ter o mesmo tipo de dado e propriedade NULLABLE.

Regras de modificação de colunas

  • É possível adicionar colunas, mas não removê-las.

  • Os dados existentes permanecem inalterados. Novas colunas são preenchidas com NULL até a próxima atualização.

Comportamento de atualização após modifique a definição de consulta

Após a atualização da definição de consulta, a próxima atualização ocorre da seguinte forma:

Tipo de tabela

Comportamento da próxima atualização

Tabela dinâmica não particionada

A próxima atualização (automática ou manual) aciona uma substituição por atualização.

Tabela dinâmica com partições lógicas

Partições ativas acionam uma substituição por atualização durante a próxima atualização automática. Partições históricas exigem uma atualização manual.

Se a nova consulta contiver operadores incompatíveis com a atualização incremental, o modo de atualização efetivo muda com base na configuração atual:

auto_refresh_mode atual

Nova consulta suporta atualização incremental

Nova consulta não suporta atualização incremental

auto

O refresh_mode definido na criação da tabela é mantido.

O refresh_mode muda automaticamente para atualização completa.

incremental

A atualização incremental é mantida.

A atualização falha. Altere o modo para atualização completa manualmente.

full

A atualização completa é mantida.

A atualização completa é mantida.

Exemplo: adicionar uma coluna

Passo 1: Prepare a tabela de source e a tabela dinâmica.

-- Create a source table.
CREATE TABLE employees (
    department_id INT,
    employee_name VARCHAR
);

-- Insert sample data.
INSERT INTO employees (department_id, employee_name) VALUES
(1, 'John'),
(1, 'Jane'),
(1, 'John'),   -- duplicate
(2, 'Alice'),
(2, 'Bob'),
(2, 'Alice');  -- duplicate

-- Create a dynamic table that groups employees by department.
CREATE DYNAMIC TABLE dt_employees
WITH (
    freshness            = '1 minutes',
    auto_refresh_mode    = 'auto',
    distribution_key     = 'department_id'
)
AS
SELECT department_id
FROM employees
GROUP BY department_id;

-- Verify the initial data.
SELECT * FROM dt_employees;

Passo 2: Adicione uma coluna atualize a definição de consulta.

ALTER DYNAMIC TABLE dt_employees
AS
SELECT
    department_id,
    STRING_AGG(DISTINCT employee_name, ', ') AS unique_employees
FROM employees
GROUP BY department_id;

Logo após a execução do comando, a nova coluna contém NULL:

department_id | unique_employees
--------------+------------------
1             | \N
2             | \N

Após a conclusão da próxima atualização, a coluna é preenchida:

department_id | unique_employees
--------------+------------------
1             | Jane, John
2             | Bob, Alice

Sintaxe V3.0

O Hologres V3.0 permite modifique a definição de consulta, mas apenas no modo de atualização completa. O modo de atualização incremental não é suportado.

Modifique a definição de consulta altera apenas a própria definição. Isso não muda os nomes originais dos campos nem suas propriedades.
Se os campos na nova consulta forem inconsistentes com os campos originais, podem ocorrer erros de atualização ou inconsistência de dados.
ALTER DYNAMIC TABLE [IF EXISTS] [<schema>.]<table_name>
  SET (task_definition = $$<new_query>$$);
Use $$ ... $$ em vez de aspas simples ( '' ). Se você usar aspas simples, o DDL recuperado pelo HG_DUMP_SCRIPT pode ficar inconsistente com o que o HoloWeb exibe, pois o PostgreSQL trata a entrada como um identificador e a trunca para 128 caracteres.

Modifique propriedades da tabela

Você pode modifique as propriedades de tabela listadas abaixo. Propriedades não mencionadas aqui não são suportadas. Para outras alterações de tabela, consulte ALTER TABLE.

Os comandos ALTER DYNAMIC TABLE RENAME e ALTER DYNAMIC TABLE SET SCHEMA são suportados na V3.1.20 e versões posteriores. Nas versões anteriores, use ALTER TABLE RENAME e ALTER TABLE SET SCHEMA .
-- Rename the table (V3.1.20+).
ALTER DYNAMIC TABLE [IF EXISTS] <table_name> RENAME TO <new_name>;

-- Modify dictionary encoding.
ALTER DYNAMIC TABLE [<schema_name>.]<table_name>
  SET (dictionary_encoding_columns = '[<columnName>{:[on|off|auto]}[,...]]');

-- Modify bitmap index.
ALTER DYNAMIC TABLE [<schema_name>.]<table_name>
  SET (bitmap_columns = '[<columnName>{:[on|off]}[,...]]');

-- Modify the time-to-live (TTL) in seconds.
ALTER DYNAMIC TABLE [<schema_name>.]<table_name>
  SET (time_to_live_in_seconds = '<num>');

-- Move the table to a different schema.
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET SCHEMA <new_schema>;