TTL (Time-to-Live) for ClickHouse Tables
Moose lets you declare ClickHouse TTL directly in your data model:
- Table-level TTL via the
ttloption onOlapTableconfig - Column-level TTL via
ClickHouseTTLon individual fields
When to use TTL
- Automatically expire old rows to control storage cost
- Mask or drop sensitive columns earlier than the full row expiry
Configuration
TTLExample.ts
import { OlapTable, ClickHouseEngines, Key, DateTime, ClickHouseTTL } from "@514labs/moose-lib"; interface Event { id: Key<string>; timestamp: DateTime; email: string & ClickHouseTTL<"timestamp + INTERVAL 30 DAY">; // column TTL} export const Events = new OlapTable<Event>("Events", { engine: ClickHouseEngines.MergeTree, orderByFields: ["id", "timestamp"], // Provide the ClickHouse TTL expression without the leading 'TTL' ttl: "timestamp + INTERVAL 90 DAY DELETE", // table TTL});Notes
- Expressions must be valid ClickHouse TTL expressions, but do not include the leading
TTLkeyword. - Column TTLs are independent from the table TTL and can be used together.
- Moose will apply TTL changes via migrations using
ALTER TABLE ... MODIFY TTLandMODIFY COLUMN ... TTL.
Related
- See Modeling Tables for defining your schema
- See Applying Migrations to roll out TTL changes