有効期限 (TTL) の概要
- 古いデータの削除: その名のとおり、指定した時間が経過した後に行やカラムを削除できます
- データのディスク間移動: 一定時間が経過した後に、ストレージボリューム間でデータを移動できます。これは ホット/ウォーム/コールドアーキテクチャ の導入に役立ちます
- データのロールアップ: 古いデータを削除する前に、さまざまな有用な集計や計算結果にロールアップできます
有効期限 (TTL) はテーブル全体にも、特定のカラムにも適用できます。
有効期限 (TTL)の構文
TTL 句は、カラム定義の後ろやテーブル定義の末尾に記述できます。期間を定義するには INTERVAL 句を使用します (Date または DateTime データ型である必要があります) 。たとえば、次のテーブルには 2 つのカラムがあり、
TTL 句が指定されています:
- x カラムの有効期限は、timestamp カラムから 1 か月です
- y カラムの有効期限は、timestamp カラムから 1 日です
- 期間が経過すると、そのカラムは期限切れになります。ClickHouse はそのカラムの値を、そのデータ型のデフォルト値に置き換えます。データパート内のそのカラムの値がすべて期限切れになると、ClickHouse はファイルシステム上のそのデータパートからそのカラムを削除します。
有効期限 (TTL) ルールは変更または削除できます。詳細は テーブル TTL の操作 ページを参照してください。
有効期限 (TTL) イベントをトリガーする
merge_with_ttl_timeout: delete 有効期限 (TTL) を伴うマージを再度実行するまでの最小待機時間 (秒) 。デフォルトは 14400 秒 (4 時間) です。merge_with_recompression_ttl_timeout: recompression 有効期限 (TTL) (削除前にデータをロールアップするルール) を伴うマージを再度実行するまでの最小待機時間 (秒) 。デフォルト値は 14400 秒 (4 時間) です。
最善の方法ではなく (頻繁な使用も推奨しませんが) 、
OPTIMIZE を使ってマージを強制することもできます。OPTIMIZE は、テーブルのパーツに対してスケジュールされていないマージを開始し、FINAL はテーブルがすでに単一のパーツである場合に再最適化を強制します。行の削除
カラムの削除
balance と address のカラムだけを期限切れにしたいとします。customers テーブルを変更し、両方のカラムに 2 時間の有効期限 (TTL) を設定してみましょう。
ロールアップの実装
TTL 式に GROUP BY 句を追加し、あわせて集計結果を保存するためのカラムをテーブルに追加することで実装できます。
たとえば、次の hits テーブルで古い行を削除しつつ、行を削除する前に hits カラムの合計値と最大値は保持しておきたいとします。その値を保存するためのフィールドが必要になり、さらに合計値と最大値をロールアップする GROUP BY 句を TTL 句に追加する必要があります。
hits テーブルに関する補足:
TTL句のGROUP BYカラムはPRIMARY KEYのプレフィックスである必要があり、結果を日単位の開始時刻でグループ化したいため、toStartOfDay(timestamp)を主キーに追加しました- 集計結果を保存するために、
max_hitsとsum_hitsの 2 つのフィールドを追加しました - このロジックを機能させるには、
SET句の定義方法に従い、max_hitsとsum_hitsのデフォルト値をhitsに設定する必要があります
ホット/ウォーム/コールドアーキテクチャの実装
ClickHouse Cloud を使用している場合、このレッスンの手順は適用されません。ClickHouse Cloud では、古いデータの移動を気にする必要はありません。
TTL コマンドの TO DISK 句と TO VOLUME 句を使用して、ClickHouse でホット/ウォーム/コールドアーキテクチャを実装する手順を説明します。 (ちなみに、必ずしもホット/コールドの構成である必要はありません。有効期限 (TTL) を使えば、どのようなユースケースでもデータを移動できます。)
TO DISKおよびTO VOLUMEオプションは、ClickHouse の設定ファイルで定義されたディスクまたはボリュームの名前を参照します。まず、ディスクを定義するmy_system.xmlという名前の新しいファイル (名前は任意) を作成し、続いてそのディスクを使用するボリュームを定義します。設定をシステムに適用するには、この XML ファイルを/etc/clickhouse-server/config.d/に配置します:
- 上記のconfigurationでは、ClickHouseが読み書きできるフォルダを指す3つのディスクを参照しています。ボリュームには1つ以上のディスクを含めることができ、ここでは3つのディスクそれぞれに対してボリュームを定義しました。では、ディスクを見てみましょう。
- では、ボリュームを確認しましょう:
- 次に、データをホット、ウォーム、コールドの各ボリューム間で移動させる
TTLルールを追加します。
- 新しい
TTLルールはマテリアライズされるはずですが、確実に反映させるため、強制的に実行することもできます:
system.partsテーブルを使用して、データが想定したディスクに移動していることを確認します。