Descrição
O comando TRUNCATE TABLE remove todos os dados de uma tabela ou de partições específicas e preserva o esquema, as permissões e os metadados. Diferentemente do DROP TABLE, que exclui a tabela por completo, o TRUNCATE TABLE mantém a estrutura intacta para permitir a inserção imediata de novos dados. Essa operação também é significativamente mais rápida que o DELETE, pois não varre nem registra exclusões linha a linha.
Sintaxe
Truncar uma tabela não particionada
TRUNCATE TABLE <table_name>;
Truncar partições específicas
TRUNCATE TABLE <table_name> PARTITION <partition_spec>[, PARTITION <partition_spec>...];
Truncar partições com condição de filtro
TRUNCATE TABLE <table_name> PARTITION <partition_filter_condition>;
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Nome da tabela a truncar. Em tabelas particionadas, refere-se ao nome da tabela particionada. |
|
|
Sim (para tabelas particionadas sem filtro) |
Especificação da partição. Formato: |
|
|
Sim (ao usar filtro) |
Condição de filtro de partição (não diferencia maiúsculas de minúsculas). Consulte Detalhes da condição de filtro de partição abaixo. |
Componentes da especificação de partição:
partition_col: Nome da coluna de partição (não diferencia maiúsculas de minúsculas).partition_col_value: Valor da partição (diferencia maiúsculas de minúsculas).
Detalhes da condição de filtro de partição
O parâmetro partition_filter_condition aceita os seguintes formatos:
partition (<partition_col> <comparison_operator> <partition_col_value>)-- Compara diretamente uma coluna de partição.partition (scalar(<partition_col>) <comparison_operator> <partition_col_value>)-- Aplica uma função escalar antes da comparação.partition (<partition_filter_condition1> AND|OR <partition_filter_condition2>)-- Combina condições com operadores lógicos.partition (NOT <partition_filter_condition>)-- Nega uma condição.partition (<partition_filter_condition1>)[, partition (<partition_filter_condition2>), ...]-- Separa múltiplas cláusulas de filtro por vírgulas.
Componentes da condição de filtro:
partition_col: Nome da coluna de partição.comparison_operator: Operador de comparação (como=,!=,>,<,LIKE, entre outros).partition_col_value: Valor de comparação ou expressão regular compatível com o tipo de dado da coluna de partição.scalar(): Função escalar que processa o valor da coluna de partição antes da comparação.
Operadores lógicos:
NOT: Retorna o complemento de uma condição de filtro de partição.ANDouOR: Combina múltiplas condições de filtro de partição.Múltiplas cláusulas de filtro de partição separadas por vírgulas usam a lógica
OR.
Observações de uso
O
TRUNCATE TABLEremove os dados, mas preserva o esquema e a estrutura das colunas. Para remover a tabela completamente, use DROP TABLE. Para excluir linhas específicas com base em uma condição, useDELETE.O
TRUNCATE TABLEé mais rápido que oDELETEsem cláusulaWHERE, pois evita a varredura individual de linhas. Em tabelas ou partições grandes, prefira oTRUNCATE TABLEpara remover todos os dados.O MaxCompute oferece suporte a truncamento no nível de partição com condições de filtro. Isso permite limpar dados particionados em massa sem especificar cada partição individualmente.
O
TRUNCATE TABLEé uma operação DDL. Não é possível desfazer a remoção dos dados após a execução bem-sucedida do comando.
Limites
O
TRUNCATE TABLEaplica-se exclusivamente a tabelas. Não é possível usá-lo em views ou materialized views.Em tabelas particionadas, a cláusula
PARTITIONé obrigatória. Executar oTRUNCATE TABLEem uma tabela particionada sem especificar partições gera erro.A partição especificada deve existir. Caso contrário, o comando retorna erro.
Exemplos
Truncar uma tabela não particionada
-- Remove all data from the sales table
TRUNCATE TABLE sales;
Truncar uma tabela não particionada (ponta a ponta)
O exemplo a seguir demonstra o ciclo completo: criação da tabela, inserção de dados, truncamento e verificação do resultado.
-- Create a simple table.
CREATE TABLE IF NOT EXISTS truncate_demo (id BIGINT, name STRING);
-- Insert sample data.
INSERT INTO TABLE truncate_demo VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Carol');
-- Verify that the data exists.
SELECT * FROM truncate_demo;
Saída esperada:
+----+-------+
| id | name |
+----+-------+
| 1 | Alice |
| 2 | Bob |
| 3 | Carol |
+----+-------+
-- Truncate the table to remove all data.
TRUNCATE TABLE truncate_demo;
-- Verify that the table is now empty.
SELECT * FROM truncate_demo;
Saída esperada:
+----+------+
| id | name |
+----+------+
+----+------+
Truncar uma única partição
-- Remove sales records for December 2013 in Hangzhou region
TRUNCATE TABLE sale_detail PARTITION (sale_date='201312', region='hangzhou');
Truncar múltiplas partições
-- Remove sales records for December 2013 in both Hangzhou and Shanghai regions
TRUNCATE TABLE sale_detail
PARTITION (sale_date='201312', region='hangzhou'),
PARTITION (sale_date='201312', region='shanghai');
Truncar partições com condição de filtro
-- Remove all partitions in Hangzhou region where sale_date starts with '2013'
TRUNCATE TABLE sale_detail PARTITION (sale_date LIKE '2013%' AND region='hangzhou');
Truncar partições usando uma função escalar
-- Remove partitions using a scalar function to process the partition column
TRUNCATE TABLE sale_detail PARTITION (scalar(sale_date) > '201300');
Truncar partições usando o operador NOT
-- Remove all partitions except those in Hangzhou region
TRUNCATE TABLE sale_detail PARTITION (NOT region='hangzhou');
Truncar partições usando lógica OR
-- Remove partitions matching multiple conditions (OR logic)
TRUNCATE TABLE sale_detail
PARTITION (region='hangzhou'),
PARTITION (region='shanghai');
Comandos relacionados
CREATE TABLE: Cria tabelas não particionadas, tabelas particionadas, tabelas externas ou tabelas clusterizadas.
ALTER TABLE: Modifica operações de tabela.
DROP TABLE: Exclui tabelas particionadas ou não particionadas.
DESC TABLE/VIEW: Visualiza informações sobre tabelas internas do MaxCompute, views, materialized views, tabelas externas, tabelas clusterizadas ou tabelas transacionais.
SHOW: Visualiza instruções SQL de Linguagem de Definição de Dados (DDL), lista todas as tabelas e views em um projeto ou lista todas as partições em uma tabela.