A instrução ALTER TABLE modifica o esquema de uma tabela, como adicionar ou remover colunas e definir atributos. As cláusulas compatíveis variam entre LindormTable e LindormTSDB.
Mecanismos e versões
A instrução ALTER TABLE aplica-se ao LindormTable e ao LindormTSDB. Não há restrições de versão.
Observações de uso
A operação ALTER TABLE não bloqueia a tabela. Ela permanece disponível para leitura e escrita durante toda a execução. No entanto, podem ocorrer erros de timeout ou breves oscilações de desempenho pelos seguintes motivos:
Durante uma operação DDL, cada shard é fechado e reaberto rapidamente para recarregar os metadados. Esse processo geralmente leva de 10 a algumas centenas de milissegundos. Se uma solicitação atingir um shard em reapertura, pode haver um pequeno atraso ou breve oscilação no desempenho. Recomendamos executar operações DDL fora dos horários de pico.
O resultado de uma operação DDL retorna somente após a aplicação da alteração em todos os shards. Em tabelas grandes, isso pode causar timeout no lado do cliente se o tempo limite configurado for curto. A operação continua em execução no servidor até a conclusão.
Sintaxe
alter_table_statement ::= ALTER TABLE table_name alter_table_instruction
alter_table_instruction ::=
add_column_list
| DROP COLUMN [ IF EXISTS ] column_name
| SET table_options
| COMPACT (idcName)?
add_column_list ::= ADD [COLUMN] column_def ( ',' ADD [COLUMN] column_def )*
column_def ::= column_name type [TAG]
Diferenças entre mecanismos
A instrução ALTER TABLE apresenta diferenças entre LindormTable e LindormTSDB. A tabela a seguir compara as cláusulas compatíveis.
|
Cláusula |
LindormTable |
LindormTSDB |
|
ADD COLUMN |
Compatível |
Compatível |
|
COMPACT |
Compatível Nota
Compatível com LindormTable 2.3.4 e posterior. |
Não compatível |
|
DROP COLUMN |
Compatível Nota
Compatível com LindormTable 2.6.6 e posterior. |
Não compatível |
|
SET table_options |
Compatível |
Não compatível |
Cláusulas
ADD COLUMN
Tanto o LindormTable quanto o LindormTSDB são compatíveis com a cláusula ADD COLUMN.
As seguintes regras aplicam-se à adição de colunas:
Não é possível adicionar uma coluna como chave primária.
No LindormTSDB, apenas colunas de tag ou de campo podem ser adicionadas. Colunas de timestamp não são permitidas.
DROP COLUMN
A cláusula DROP COLUMN está disponível apenas no LindormTable 2.6.6 e posterior.
Caso não consiga atualizar sua instância para a versão 2.6.6 ou superior pelo console, entre em contato com o suporte técnico do Lindorm (ID do DingTalk: s0s3eg3).
A operação DROP COLUMN é assíncrona. Após a execução bem-sucedida da instrução ALTER TABLE, o sistema exclui imediatamente a coluna alvo, mas os dados dessa coluna só são limpos após a conclusão de uma operação COMPACT. Para acelerar a limpeza dos dados, execute manualmente as operações FLUSH e COMPACT. Não é possível adicionar uma coluna com o mesmo nome até que a limpeza dos dados seja totalmente concluída. Para mais informações, consulte FAQ.
SET table_options
Apenas o LindormTable é compatível com a cláusula SET table_options.
Para obter uma lista de atributos de tabela, consulte Atributos de tabela. Use a instrução SHOW TABLE VARIABLES para verificar se os atributos da tabela foram definidos corretamente. Para mais informações, consulte SHOW TABLE VARIABLES.
Ao modificar os atributos MUTABILITY e CONSISTENCY, observe o seguinte:
Antes de criar um índice, é possível modificar tanto MUTABILITY quanto CONSISTENCY.
-
Após a criação de um índice:
Não é possível modificar MUTABILITY.
É permitido alterar o valor de CONSISTENCY de
eventualparastrong, mas não é possível alterar destrongparaeventual.
Para visualizar um exemplo, consulte Ativar colunas dinâmicas.
COMPACT
Apenas o LindormTable 2.3.4 e posterior é compatível com a cláusula COMPACT, que aciona uma compactação principal (major compaction).
Executar uma compactação principal mescla arquivos de dados, remove dados excluídos ou expirados, libera espaço em disco e melhora o desempenho de leitura e escrita. Essa operação consome muitos recursos.
-
Se você não especificar
idcName:Em instâncias de zona única, que possuem apenas um IDC, especificar
idcNamenão surte efeito.-
Em instâncias multizona, que possuem dois IDCs, as seguintes regras aplicam-se caso
idcNamenão seja especificado:Se a versão do seu LindormTable for anterior à 2.6.4.2, a compactação principal será executada apenas em
idc1.Se a versão do seu LindormTable for 2.6.4.2 ou posterior, a compactação principal será executada em todos os IDCs por padrão.
Se você especificar
idcName, a compactação principal será executada no IDC indicado. É possível especificar vários nomes de IDC separados por vírgulas (,).
Para visualizar um exemplo, consulte Executar uma compactação principal.
Exemplos
Os exemplos nesta seção utilizam a tabela sensor criada com a seguinte instrução do tópico CREATE TABLE:
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time BIGINT NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
);
Adicionar colunas
Adicione uma nova coluna n1 à tabela sensor.
ALTER TABLE sensor ADD COLUMN n1 DOUBLE;
Adicione uma coluna espaciotemporal à tabela de dados espaciotemporais roads.
-
Adicione uma única coluna espacial.
ALTER TABLE roads ADD COLUMN g2 GEOMETRY(LINESTRING); -
Adicione múltiplas colunas espaciais.
ALTER TABLE roads ADD COLUMN g2 GEOMETRY(LINESTRING), g3 GEOMETRY(POLYGON);
Remover uma coluna
Remova a coluna n1 da tabela sensor.
ALTER TABLE sensor DROP COLUMN IF EXISTS n1;
Verifique o resultado
Execute a seguinte instrução para verificar o resultado:
DESCRIBE table sensor;
Ativar colunas dinâmicas
Ative o recurso de colunas dinâmicas para a tabela sensor.
ALTER TABLE sensor SET DYNAMIC_COLUMNS = 'true';
Para mais informações sobre colunas dinâmicas, consulte Colunas dinâmicas.
Definir consistência da tabela
Defina a consistência para a tabela de dados espaciotemporais roads.
ALTER TABLE roads SET 'CONSISTENCY' = 'strong';
Definir o TTL
-
Defina o TTL da tabela
sensorem segundos (s).ALTER TABLE sensor SET TTL = '2592000'; -
Remova o TTL da tabela
sensor.ALTER TABLE sensor SET TTL = '';Verifique o resultado
No sistema de gerenciamento de cluster, acesse a página Overview. Clique em no nome da tabela desejada sob o banco de dados correspondente. Na seção Current table details, visualize o valor do parâmetro TTL. Para saber como acessar o sistema de gerenciamento de cluster, consulte Fazer login no sistema de gerenciamento de cluster.
Definir o algoritmo de compressão
-
Defina o algoritmo de compressão da tabela
sensorcomoZSTD.ALTER TABLE sensor SET COMPRESSION = 'ZSTD'; -
Defina o algoritmo de compressão da tabela
sensorcomoNONE.ALTER TABLE sensor SET COMPRESSION = 'NONE';Verifique o resultado
No sistema de gerenciamento de cluster, acesse a página Overview e clique em no nome da tabela desejada sob o banco de dados correspondente. Na seção Current table details, clique em View table properties para visualizar o valor do parâmetro COMPRESSION.
Configure separação de dados quentes e frios
Para mais informações sobre a separação de dados quentes e frios, consulte Introdução à separação de dados quentes e frios.
Definir o limite entre dados quentes e frios
Ingestion timestamp
Defina o limite de separação entre dados quentes e frios para a tabela sensor. O LindormTable determina se deve arquivar dados no armazenamento Capacity com base no timestamp de ingestão de cada linha.
-- Enable hot and cold data separation for the sensor table based on ingestion timestamp and set the boundary to one day.
ALTER TABLE sensor SET CHS = '86400', CHS_L2 = 'storagetype=COLD';
Verifique o resultado
Execute a instrução SHOW TABLE VARIABLES FROM sensor LIKE 'CHS%'; para visualizar os valores dos parâmetros CHS e CHS_L2. Para mais detalhes sobre a sintaxe do SHOW VARIABLES, consulte SHOW VARIABLES.
Custom time column
A separação de dados baseada em uma coluna de tempo personalizada possui limitações. Antes de utilizar esse recurso, revise as Observações de uso.
Defina a coluna de tempo personalizada time como limite de separação entre dados quentes e frios para a tabela sensor. O LindormTable determina se deve arquivar dados no armazenamento Capacity com base no timestamp do evento na coluna time de cada linha.
-- Enable hot and cold data separation for the sensor table based on a custom column, set the boundary to one day, and use the time column.
ALTER TABLE sensor SET CHS ='86400', CHS_L2 = 'storagetype=COLD', CHS_COLUMN = 'COLUMN=time';
Verifique o resultado
Execute a instrução SHOW TABLE VARIABLES FROM sensor LIKE 'CHS%'; para visualizar os valores dos parâmetros CHS, CHS_L2 e CHS_COLUMN. Para mais detalhes sobre a sintaxe do SHOW VARIABLES, consulte SHOW VARIABLES.
Remover o limite entre dados quentes e frios
Remova o limite de separação entre dados quentes e frios da tabela sensor.
ALTER TABLE sensor SET CHS = '', CHS_L2 = '';
Verifique o resultado
Execute a instrução SHOW TABLE VARIABLES FROM sensor LIKE 'CHS%'; para visualizar os valores dos parâmetros CHS e CHS_L2. Para mais detalhes sobre a sintaxe do SHOW VARIABLES, consulte SHOW VARIABLES.
Executar uma compactação principal
-
Execute uma compactação principal na tabela sensor.
ALTER TABLE sensor COMPACT;NotaPara instâncias multizona, observe as seguintes regras:
Se a versão do seu LindormTable for anterior à 2.6.4.2, o sistema executa uma compactação principal em
idc1por padrão caso nenhum IDC seja especificado.Se a versão do seu LindormTable for 2.6.4.2 ou posterior, o sistema executa uma compactação principal em todos os IDCs por padrão.
-
Execute uma compactação principal em
idc2.ALTER TABLE sensor COMPACT 'idc2'; -
Execute uma compactação principal em
idc1eidc2.ALTER TABLE sensor COMPACT 'idc1,idc2';