Descripción general del TTL
- Eliminar datos antiguos: como era de esperar, puedes eliminar filas o columnas después de un intervalo de tiempo especificado
- Mover datos entre discos: después de un cierto tiempo, puedes mover datos entre volúmenes de almacenamiento, lo que resulta útil para implementar una arquitectura hot/warm/cold
- Consolidación de datos: consolida los datos más antiguos en varias agregaciones y cálculos útiles antes de eliminarlos
TTL se puede aplicar a tablas completas o a columnas específicas.
Sintaxis de TTL
TTL puede aparecer después de la definición de una columna y/o al final de la definición de la tabla. Use la cláusula INTERVAL para definir un intervalo de tiempo (que debe ser de tipo de dato Date o DateTime). Por ejemplo, la siguiente tabla tiene dos columnas
con cláusulas TTL:
- La columna x tiene un TTL de 1 mes a partir de la columna timestamp
- La columna y tiene un TTL de 1 día a partir de la columna timestamp
- Cuando el intervalo vence, la columna expira. ClickHouse reemplaza el valor de la columna por el valor predeterminado de su tipo de datos. Si todos los valores de la columna en la parte de datos expiran, ClickHouse elimina esta columna de la parte de datos en el sistema de archivos.
Las reglas TTL pueden modificarse o eliminarse. Consulta la página Manipulación del TTL de la tabla para obtener más información.
Activación de eventos TTL
merge_with_ttl_timeout: el retraso mínimo, en segundos, antes de repetir una fusión con TTL de eliminación. El valor predeterminado es 14400 segundos (4 horas).merge_with_recompression_ttl_timeout: el retraso mínimo, en segundos, antes de repetir una fusión con TTL de recompresión (reglas que consolidan los datos antes de eliminarlos). Valor predeterminado: 14400 segundos (4 horas).
No es una gran solución (ni recomendamos usarla con frecuencia), pero también puede forzar una fusión con
OPTIMIZE:OPTIMIZE inicia una fusión no programada de las partes de la tabla, y FINAL fuerza una nueva optimización si la tabla ya consta de una sola parte.Eliminación de filas
Eliminar columnas
balance y address. Modifiquemos la tabla customers y añadamos un TTL de 2 horas para ambas columnas:
Implementación de una consolidación
GROUP BY a la expresión TTL, junto con algunas columnas en la tabla para almacenar los resultados agregados.
Supongamos que, en la siguiente tabla hits, queremos eliminar las filas antiguas, pero conservar la suma y el valor máximo de las columnas hits antes de eliminarlas. Para ello, necesitaremos un campo donde almacenar esos valores y añadir una cláusula GROUP BY a la cláusula TTL que haga la consolidación de la suma y el máximo:
hits:
- Las columnas de
GROUP BYde la cláusulaTTLdeben ser un prefijo de laPRIMARY KEY, y queremos agrupar los resultados por el inicio del día. Por eso, se añadiótoStartOfDay(timestamp)a la clave primaria - Añadimos dos campos para almacenar los resultados agregados:
max_hitsysum_hits - Establecer el valor por defecto de
max_hitsysum_hitsenhitses necesario para que esta lógica funcione, según cómo está definida la cláusulaSET
Implementación de una arquitectura hot/warm/cold
Si usas ClickHouse Cloud, los pasos de esta lección no se aplican. No necesitas preocuparte por mover datos antiguos en ClickHouse Cloud.
TO DISK y TO VOLUME del comando TTL. (Por cierto, no tiene por qué limitarse a un esquema hot/cold: puedes usar TTL para mover datos según cualquier caso de uso que tengas).
- Las opciones
TO DISKyTO VOLUMEhacen referencia a los nombres de discos o volúmenes definidos en tus archivos de configuración de ClickHouse. Crea un archivo nuevo llamadomy_system.xml(o cualquier otro nombre) que defina tus discos y, después, define volúmenes que los usen. Coloca el archivo XML en/etc/clickhouse-server/config.d/para que la configuración se aplique a tu sistema:
- La configuración anterior hace referencia a tres discos que apuntan a directorios desde los que ClickHouse puede leer y en los que puede escribir. Los volúmenes pueden contener uno o más discos; definimos un volumen para cada uno de los tres discos. Veamos los discos:
- Y… verifiquemos los volúmenes:
- Ahora agregaremos una regla
TTLque traslada los datos entre los volúmenes caliente, templado y frío:
- La nueva regla
TTLdebería materializarse, pero puedes forzarla para asegurarte:
- Verifique que sus datos se hayan movido a los discos previstos con la tabla
system.parts: