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.
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 |
|
|
O |
O |
|
|
A atualização incremental é mantida. |
A atualização falha. Altere o modo para atualização completa manualmente. |
|
|
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 peloHG_DUMP_SCRIPTpode 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 comandosALTER DYNAMIC TABLE RENAMEeALTER DYNAMIC TABLE SET SCHEMAsão suportados na V3.1.20 e versões posteriores. Nas versões anteriores, useALTER TABLE RENAMEeALTER 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>;