Gerenciamento de Exclusão de Registros no InfluxDB

Introdução ao Comando DELETE

Após explorar os métodos de inserção e atualização de pontos de dados, é fundamental compreender o ciclo de vida completo da informação, incluindo a remoção adequada de registros obsoletos ou incorretos. No InfluxDB, a operação de exclusão é realizada através do comando DELETE, que possui particularidades distintas em comparação com bancos de dados relacionais tradicionais.

1. Sintaxe do DELETE

A estrutura oficial do comando para remoção de séries é definida da seguinte maneira:

DELETE FROM <measurement_name> WHERE [<tag_key>='<tag_value>'] | [<time interval>]

Embora a sintaxe lembre o SQL padrão, existe uma restrição crítica na cláusula WHERE: ela aceita apenas filtros baseados em tags e tempo. Não é possível utilziar campos (fields) como condição para exclusão.

Exemplos Práticos

Caso 1: Exclusão baseada em intervalo de tempo

Considere um measurement chamado server_stats. Abaixo, visualizamos os dados existentes e, em seguida, removemos registros posteriores a um timestamp específico.

> select * from server_stats
name: server_stats
time                cpu_usage host     memory_free region
----                --------- ----     ----------- ------
1680000000000000000 45.2      server_01 2048        us-east
1680000050000000000 48.5      server_01 2000        us-east
1680000100000000000 50.1      server_01 1980        us-east

> delete from server_stats where time >= 1680000100000000000

> select * from server_stats
name: server_stats
time                cpu_usage host     memory_free region
----                --------- ----     ----------- ------
1680000000000000000 45.2      server_01 2048        us-east
1680000050000000000 48.5      server_01 2000        us-east

Note que apenas o registro com timestamp igual ou superior ao especificado foi removido do conjunto de dados.

Caso 2: Exclusão baseada em Tags

Para remover dados associados a uma tag específica, utilizamos o nome da tag na condição. É importante observar que, caso o nome da tag seja uma palavra reservada (como name ou value), ela deve ser envolvida por aspas duplas.

> show tag keys from server_stats
name: server_stats
tagKey
------
host
region

> delete from server_stats where "host"='server_01'

> select * from server_stats
>

Após a execução, todas as séries correspondentes à tag host='server_01' foram eliminadas, resultando em um measurement vazio.

2. Interação com Políticas de Retenção (Retention Poilcies)

Uma dúvida comum surge ao trabalhar com múltiplas políticas de retenção (RP). A sintaxe básica do DELETE não especifica explicitamente a política alvo. Como o sistema comoprta-se nesse cenário?

Abaixo, inserimos dados na política padrão e em uma política personalizada chamada rp_monthly.

> insert server_stats,host=server_01,region=us-east cpu_usage=45.2,memory_free=2048i
> insert into "rp_monthly" server_stats,host=server_01,region=us-east cpu_usage=55.0,memory_free=1024i

> select * from server_stats
name: server_stats
time                cpu_usage host     memory_free region
----                --------- ----     ----------- ------
1680100000000000000 45.2      server_01 2048        us-east

> select * from "rp_monthly".server_stats
name: server_stats
time                cpu_usage host     memory_free region
----                --------- ----     ----------- ------
1680100050000000000 55.0      server_01 1024        us-east

Ao executar uma exclusão baseada em tag sem qualificar a política de retenção:

> delete from server_stats where "host"='server_01'

> select * from server_stats
> 
> select * from "rp_monthly".server_stats
>

Observa-se que a exclusão por tag afetou ambas as políticas. Isso ocorre porque a definição da série (composta pelas tags) é compartilhada ou identificada globalmente para aquele measurement, removendo os pontos em todas as políticas onde essa série existe.

Para validar o comportamento com filtros de tempo, inserimos novos dados em uma política diferente, rp_weekly:

> select * from server_stats
name: server_stats
time                cpu_usage host     memory_free region
----                --------- ----     ----------- ------
1680200000000000000 60.0      server_02 4096        us-west

> insert into "rp_weekly" server_stats,host=server_02,region=us-west cpu_usage=65.0,memory_free=3000i

> select * from "rp_weekly".server_stats
name: server_stats
time                cpu_usage host     memory_free region
----                --------- ----     ----------- ------
1680200050000000000 65.0      server_02 3000        us-west

> delete from server_stats where time=1680200050000000000

> select * from "rp_weekly".server_stats
> 
> select * from server_stats
name: server_stats
time                cpu_usage host     memory_free region
----                --------- ----     ----------- ------
1680200000000000000 60.0      server_02 4096        us-west

Neste cenário, a exclusão baseada no timestamp específico removeu o dado apenas da política rp_weekly, mantendo intacto o registro na política padrão. Isso demonstra que filtros temporais tendem a agir sobre os pontos específicos dentro do escopo da série consultada, enquanto a remoção por tag pode impactar a série inteira através das políticas de retenção associadas.

Tags: InfluxDB delete-statement retention-policy time-series-database query-language

Publicado em 8-21 01:08