TTL en ClickStack
${TABLES_TTL} se sustituye por la retención configurada (3 días, salvo que se cambie) cuando el collector crea la tabla:
PARTITION BY. Esta cláusula puede contener una expresión SQL sobre cualquier columna o columnas, cuyos resultados definirán a qué partición se envía una fila. Esto hace que los datos queden asociados lógicamente (mediante un prefijo común en el nombre de la carpeta) con cada partición en el disco, que luego puede consultarse de forma aislada. En el ejemplo anterior, el esquema predeterminado de otel_logs particiona por día usando la expresión toDate(Timestamp). A medida que las filas se insertan en ClickHouse, esta expresión se evaluará para cada fila y se enviará a la partición resultante si existe (si la fila es la primera de un día, se creará la partición). Para obtener más detalles sobre el particionado y sus otras aplicaciones, consulta “Table Partitions”.
El esquema de la tabla también incluye TTL toDateTime(Timestamp) + ${TABLES_TTL} y la configuración ttl_only_drop_parts = 1. La primera cláusula garantiza que los datos se eliminen una vez superado el TTL configurado (3 días de forma predeterminada). La configuración ttl_only_drop_parts = 1 hace que solo caduquen las partes de datos en las que todos los datos han expirado (en lugar de intentar eliminar filas de forma parcial). Como el particionado garantiza que los datos de días distintos nunca se fusionen, los datos pueden eliminarse de forma eficiente.
De forma predeterminada, los datos con TTL expirado se eliminan cuando ClickHouse fusiona partes de datos. Cuando ClickHouse detecta que los datos han expirado, realiza una fusión fuera de programación.
Programación de TTLLos TTL no se aplican de inmediato, sino según una programación, como se indicó antes. La configuración de tabla de MergeTree
merge_with_ttl_timeout establece 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). Pero ese es solo el retraso mínimo; puede pasar más tiempo hasta que se active una fusión de TTL. Si el valor es demasiado bajo, se realizarán muchas fusiones fuera de programación que pueden consumir muchos recursos. La expiración de TTL puede forzarse con el comando ALTER TABLE my_table MATERIALIZE TTL.Modificar TTL
- Modificar los esquemas de la tabla (recomendado). Para ello, es necesario conectarse a la instancia de ClickHouse, por ejemplo, mediante clickhouse-client o Cloud SQL Console. Por ejemplo, podemos modificar el TTL de la tabla
otel_logsmediante el siguiente DDL:
- Modifique el OTel collector. El ClickStack OpenTelemetry collector crea tablas en ClickHouse si no existen. Esto se logra mediante el ClickHouse exporter, que a su vez expone un parámetro
ttlpara controlar la expresión TTL predeterminada, por ejemplo.
TTL a nivel de columna
Body por si se añaden nuevos metadatos dinámicos que no se hayan extraído en el momento de la inserción, p. ej., una nueva etiqueta de Kubernetes. Tras un período de, p. ej., 1 mes, puede resultar evidente que estos metadatos adicionales no son útiles, lo que reduce el valor de conservar la columna Body.
A continuación, mostramos cómo puede eliminarse la columna Body después de 30 días.
Para especificar un TTL a nivel de columna, los usuarios deben definir su propio esquema. Esto no se puede especificar en el OTel collector.