TTL в ClickStack
${TABLES_TTL} подставляется в виде настроенного срока хранения (3 дня, если значение не менялось), когда коллектор создает таблицу:
PARTITION BY. Это выражение может содержать SQL-выражение для любого столбца или набора столбцов, результат которого определяет, в какую партицию будет отправлена строка. В результате данные логически связываются (через общий префикс имени папки) с каждой партицией на диске, после чего их можно запрашивать изолированно. В приведенном выше примере схема otel_logs по умолчанию разбивает данные на партиции по дням с помощью выражения toDate(Timestamp). По мере вставки строк в ClickHouse это выражение вычисляется для каждой строки, и строка направляется в соответствующую партицию, если она существует (если строка для данного дня первая, партиция будет создана). Подробнее о партиционировании и других его применениях см. в разделе “Партиции таблиц”.
Схема таблицы также включает TTL toDateTime(Timestamp) + ${TABLES_TTL} и настройку ttl_only_drop_parts = 1. Первое выражение гарантирует, что данные будут удаляться, когда их возраст превысит настроенный TTL (по умолчанию 3 дня). Настройка ttl_only_drop_parts = 1 предписывает удалять только те части данных, у которых истек срок хранения целиком (вместо попыток частично удалять строки). Поскольку партиционирование гарантирует, что данные за разные дни никогда не будут «сливаться», их можно удалять эффективно.
По умолчанию данные с истекшим TTL удаляются, когда ClickHouse выполняет слияние частей данных. Когда ClickHouse обнаруживает, что срок хранения данных истек, он выполняет внеплановое слияние.
Расписание TTLTTL применяются не сразу, а по расписанию, как отмечалось выше. Настройка таблицы MergeTree
merge_with_ttl_timeout задает минимальную задержку в секундах перед повторным выполнением слияния с delete TTL. Значение по умолчанию — 14400 секунд (4 часа). Но это лишь минимальная задержка; до запуска TTL-слияния может пройти больше времени. Если значение слишком низкое, будет выполняться много внеплановых слияний, которые могут потреблять много ресурсов. Принудительно применить TTL можно командой ALTER TABLE my_table MATERIALIZE TTL.Изменение TTL
- Изменить схемы таблиц (рекомендуется). Для этого нужно подключиться к экземпляру ClickHouse, например с помощью clickhouse-client или Cloud SQL Console. Например, TTL таблицы
otel_logsможно изменить с помощью следующего DDL:
- Измените OTel collector. Коллектор ClickStack OpenTelemetry создает таблицы в ClickHouse, если они отсутствуют. Это достигается с помощью экспортера ClickHouse, который, в свою очередь, предоставляет параметр
ttl, позволяющий задавать выражение TTL по умолчанию, например.
TTL на уровне столбца
Body на случай, если будут добавлены новые динамические метаданные, которые не были извлечены во время вставки, например новая метка Kubernetes. Спустя некоторое время, например 1 месяц, может стать очевидно, что эти дополнительные метаданные не несут пользы, а значит, хранить столбец Body уже не имеет особого смысла.
Ниже показано, как удалить столбец Body через 30 дней.
Чтобы указать TTL на уровне столбца, необходимо задать собственную схему. Это нельзя настроить в OTel collector.