ClickStack における TTL
${TABLES_TTL} は設定された保持期間 (変更していない場合は 3 日) に置き換えられます。
PARTITION BY 句で指定します。この句には任意のカラムに対する SQL 式を含めることができ、その結果によって行が送られるパーティションが決まります。これにより、データはディスク上で各パーティションと論理的に関連付けられ (共通のフォルダ名プレフィックスを介して)、その後は個別にクエリできます。上記の例では、デフォルトの otel_logs スキーマは toDate(Timestamp) 式を使って日単位でパーティション化します。行が ClickHouse に挿入されると、この式が各行に対して評価され、対応するパーティションが存在すればそこに振り分けられます (その日で最初の行であれば、パーティションが作成されます)。パーティション化とそのほかの用途の詳細については、“Table Partitions” を参照してください。
テーブルのスキーマには、TTL toDateTime(Timestamp) + ${TABLES_TTL} と設定 ttl_only_drop_parts = 1 も含まれています。前者の句により、データは設定された TTL (デフォルトでは 3 日) を超えると削除されます。設定 ttl_only_drop_parts = 1 は、行を部分的に削除しようとするのではなく、すべてのデータが期限切れになったデータパーツのみを削除するようにします。さらに、パーティション化によって別々の日のデータが決して「マージ」されないため、データを効率的に削除できます。
デフォルトでは、有効期限 (TTL) が切れたデータは、ClickHouse がデータパーツをマージするときに削除されます。ClickHouse はデータの期限切れを検出すると、予定外のマージを実行します。
TTL スケジュール前述のとおり、TTL は即座には適用されず、スケジュールに従って適用されます。MergeTree テーブル設定
merge_with_ttl_timeout は、削除 TTL を伴うマージを再実行するまでの最小遅延時間 (秒) を設定します。デフォルト値は 14400 秒 (4 時間) です。ただし、これはあくまで最小遅延時間であり、TTL マージがトリガーされるまでにはさらに時間がかかる場合があります。値が低すぎると、リソースを大量に消費する予定外のマージが多数実行される可能性があります。TTL の期限切れは、コマンド ALTER TABLE my_table MATERIALIZE TTL を使って強制できます。有効期限 (TTL) の変更
- テーブルのスキーマを変更する (推奨) 。この方法では、たとえば clickhouse-client または Cloud SQL Console を使って ClickHouse インスタンスに接続する必要があります。たとえば、次の DDL を使用して
otel_logsテーブルの 有効期限 (TTL) を変更できます。
- OTel collectorを変更します。ClickStack OpenTelemetry collector は、ClickHouse にテーブルが存在しない場合、自動的に作成します。これは ClickHouse エクスポーターによって実現されており、このエクスポーターではデフォルトの 有効期限 (TTL) 式を制御するための
ttlパラメーターも公開されています。例:
カラムレベルの有効期限 (TTL)
Body カラムは保持しておくことを推奨します。たとえば、新しい Kubernetes ラベルなどです。一定期間、たとえば 1 か月が経過すると、この追加メタデータが有用でないことが明らかになる場合があり、その場合 Body カラムを保持する価値は低くなります。
以下では、Body カラムを 30 日後に削除する方法を示します。
カラムレベルの有効期限 (TTL) を指定するには、独自のスキーマを定義する必要があります。これは OTel collector では指定できません。