Visão geral do TTL
- Remover dados antigos: sem surpresa, você pode excluir linhas ou colunas após um intervalo de tempo especificado
- Mover dados entre discos: após um certo tempo, você pode mover dados entre volumes de armazenamento — útil para implantar uma arquitetura hot/warm/cold
- Agregação de dados: agregue seus dados mais antigos em várias agregações e computações úteis antes de excluí-los
O TTL pode ser aplicado a tabelas inteiras ou a colunas específicas.
Sintaxe do TTL
TTL pode aparecer após a definição de uma coluna e/ou no final da definição da tabela. Use a cláusula INTERVAL para definir um período de tempo (que deve ser do tipo de dados Date ou DateTime). Por exemplo, a tabela a seguir tem duas colunas
com cláusulas TTL:
- A coluna x tem TTL de 1 mês a partir da coluna de timestamp
- A coluna y tem TTL de 1 dia a partir da coluna de timestamp
- Quando o intervalo termina, a coluna expira. O ClickHouse substitui o valor da coluna pelo valor padrão do respectivo tipo de dado. Se todos os valores da coluna na parte de dados expirarem, o ClickHouse remove essa coluna da parte de dados no sistema de arquivos.
As regras de TTL podem ser alteradas ou excluídas. Consulte a página Manipulação de TTL de tabela para mais detalhes.
Acionando eventos de TTL
merge_with_ttl_timeout: o intervalo mínimo, em segundos, antes de repetir um merge com TTL de exclusão. O padrão é 14400 segundos (4 horas).merge_with_recompression_ttl_timeout: o intervalo mínimo, em segundos, antes de repetir um merge com TTL de recompressão (regras que fazem rollup dos dados antes de excluí-los). Valor padrão: 14400 segundos (4 horas).
Não é uma solução ideal (nem algo que recomendamos usar com frequência), mas você também pode forçar um merge usando
OPTIMIZE:OPTIMIZE inicia um merge não agendado das partes da tabela, e FINAL força uma nova otimização se a tabela já consistir em uma única parte.Removendo linhas
where.
É possível usar várias condições:
Removendo colunas
balance e address expirem. Vamos modificar a tabela customers e adicionar um TTL de 2 horas para ambas as colunas:
Implementando um rollup
GROUP BY à expressão TTL, juntamente com algumas colunas na tabela para armazenar os resultados agregados.
Suponha que, na tabela hits a seguir, queiramos excluir linhas antigas, mas manter a soma e o valor máximo das colunas hits antes de remover as linhas. Precisaremos de um campo para armazenar esses valores e de adicionar uma cláusula GROUP BY à cláusula TTL que faça o rollup da soma e do valor máximo:
hits:
- As colunas do
GROUP BYna cláusulaTTLdevem ser um prefixo daPRIMARY KEY, e queremos agrupar os resultados pelo início do dia. Por isso,toStartOfDay(timestamp)foi adicionado à chave primária - Adicionamos dois campos para armazenar os resultados agregados:
max_hitsesum_hits - Definir
hitscomo valor padrão demax_hitsesum_hitsé necessário para que nossa lógica funcione, com base em como a cláusulaSETé definida
Implementando uma arquitetura hot/warm/cold
Se você estiver usando o ClickHouse Cloud, as etapas desta lição não se aplicam. Você não precisa se preocupar em mover dados antigos no ClickHouse Cloud.
TO DISK e TO VOLUME do comando TTL. (Aliás, não precisa ser necessariamente algo como hot e cold — você pode usar TTL para mover dados conforme o seu caso de uso.)
- As opções
TO DISKeTO VOLUMEse referem aos nomes de discos ou volumes definidos nos seus arquivos de configuração do ClickHouse. Crie um novo arquivo chamadomy_system.xml(ou qualquer outro nome) que defina seus discos e, em seguida, defina volumes que usem esses discos. Coloque o arquivo XML em/etc/clickhouse-server/config.d/para que a configuração seja aplicada ao seu sistema:
- A configuração acima se refere a três discos que apontam para pastas das quais o ClickHouse pode ler e nas quais pode gravar. Os volumes podem conter um ou mais discos — definimos um volume para cada um dos três discos. Vamos ver os discos:
- E… vamos verificar os volumes:
- Agora vamos adicionar uma regra
TTLque move os dados entre os volumes hot, warm e cold:
- A nova regra de
TTLdeve ser aplicada, mas você pode forçá-la para garantir:
- Verifique se seus dados foram movidos para os discos esperados usando a tabela
system.parts: