メインコンテンツへスキップ
時系列、つまりタイムスタンプとタグ (またはラベル) に関連付けられた値の集合を格納するテーブルエンジン:
これは実験的な機能であり、今後のリリースで後方互換性のない変更が行われる可能性があります。 allow_experimental_time_series_table 設定で TimeSeries テーブルエンジン の使用を有効にします。 set allow_experimental_time_series_table = 1 コマンドを実行します。

構文

キーワード SAMPLES には、後方互換性のために DATA というエイリアスが残されています。

使い方

まずは、すべてデフォルト設定のままで始めるのが簡単です (カラムの一覧を指定しなくても TimeSeries テーブルを作成できます) :
このテーブルは、以下のプロトコルで使用できます (サーバー設定でポートを割り当てる必要があります) :

外部カラム

TimeSeries テーブルのカラムは自動的に自動生成されます。これらは外部カラムであり、データ自体は保持せず、SELECT/INSERT のためのインターフェイスだけを提供します。実際のデータはターゲットテーブルに格納されます。外部カラムの一覧は次のとおりです。 例:
metric_name は挿入時に空でもかまいません。つまり、メトリクス名は tags 内の __name__ に指定されます。たとえば次のとおりです:
メトリクスのメタデータを挿入するには、metric_familytypeunithelp の各カラムに値を挿入します:

外部カラムの指定

外部 time_series カラムは、デフォルトの Array(Tuple(DateTime64(3), Float64)) 型をオーバーライドするために、CREATE TABLE ステートメントで明示的に指定できます。ClickHouse はその Tuple から timestamp 型と scalar 型を抽出し、それらを内部の Samples テーブルに反映します:
これは、samples の INNER COLUMNS 句で timestamp と値のカラム型を直接宣言するのと同じです:
両方の形式を同じ CREATE TABLE ステートメント内で使用する場合、宣言する型は一致していなければなりません。

ターゲットテーブル

TimeSeries テーブル自体はデータを持たず、すべてのデータはそのターゲットテーブルに格納されます。 これは materialized view の仕組みに似ていますが、 materialized view ではターゲットテーブルは 1 つであるのに対し、 TimeSeries テーブルには samplestagsmetrics という 3 つのターゲットテーブルがあります。 ターゲットテーブルは CREATE TABLE クエリで明示的に指定することもできますし、 TimeSeries テーブルエンジンが内部ターゲットテーブルを自動生成することもできます。 TimeSeries テーブルに挿入された行は変換され、ブロックに分割されたうえで、これら 3 つのターゲットテーブルに挿入されます。 ターゲットテーブルは次のとおりです:

samples テーブル

samples テーブルには、識別子に関連付けられた時系列が格納されます。 samples テーブルには、次のカラムが必要です。

Tags テーブル

tags テーブルには、メトリクス名とタグの各組み合わせに対して計算された識別子が格納されます。 tags テーブルには、次のカラムが必要です。

Metrics テーブル

metrics テーブルには、収集されるメトリクスに関する情報、各メトリクスのタイプ、および説明が格納されます。 metrics テーブルには、次のカラムが必要です。

作成

TimeSeries テーブルエンジンを使ってテーブルを作成する方法はいくつかあります。 最も簡単なステートメントは
実際には、次のテーブルが作成されます (SHOW CREATE TABLE my_table を実行すると確認できます) :
したがって、カラムは自動的に生成されており、INNER COLUMNS 句には それぞれ独自のカラム定義を持つ 3 つの内部ターゲットテーブルも格納されています。 内部ターゲットテーブルの名前は .inner_id.samples.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.inner_id.tags.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.inner_id.metrics.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx のようになっており、各ターゲットテーブルはそれぞれ独自のカラムセットを持っています:

既存のテーブルを AS で指定してテーブルを作成する

ステートメント CREATE TABLE new_table AS existing_table は、existing_table から以下をコピーします。
  • SETTINGS
  • kind ごとの INNER COLUMNS
  • kind ごとの INNER ENGINE
existing_table に外部ターゲットがある場合、このステートメントは使用できません。 外側のカラム一覧はコピーされず、再生成されます。

カラム型の調整

INNER COLUMNS 句を使用すると、内部ターゲットテーブルのカラム型を調整できます。たとえば、timestamp をマイクロ秒単位で保存し、値を Float32 として保存するには、次のようにします。
同じ句を使って、コーデックやその他のカラム属性を指定できます。

id カラム

id カラムには識別子が格納されており、各識別子はメトリクス名とタグの組み合わせごとに計算されます。 識別子の生成に使用される型と DEFAULT 式は、TAGS INNER COLUMNS 句でカスタマイズできます。
id カラムの型は、UUIDUInt64UInt128、または FixedString(16) のいずれかである必要があります。DEFAULT 式が指定されていない場合、ClickHouse は id の型に基づいて自動的に選択します。samples および tags の内部テーブルで宣言される id の型は一致している必要があります。 id_generator 設定では、INNER COLUMNS 句を使用せずに同じカスタマイズを行えます。
この設定が有効な場合、カラムのDEFAULTに別の式が含まれていても、idの生成にはこの設定が使用されます。

tagsall_tags カラム

タグのマップを含むカラムは tagsall_tags の 2 つあります。この例では両者は同じ意味ですが、tags_to_columns 設定を使用している場合は異なることがあります。 この設定を使うと、特定のタグを tags カラム内のマップに格納する代わりに、個別のカラムに格納するよう指定できます。
このステートメントにより、内部の tags ターゲットテーブルに instancejob のカラムが追加されます。 この場合、tags カラムには instancejob のタグは含まれませんが、 all_tags カラムにはそれらが含まれます。all_tags カラムは一時的なもので、唯一の目的は id カラムの DEFAULT 式で 使用することです。

内部ターゲットテーブルのテーブルエンジン

デフォルトでは、内部ターゲットテーブルでは次のテーブルエンジンを使用します。
  • samples テーブルでは MergeTree を使用します。
  • tags テーブルでは AggregatingMergeTree を使用します。これは、同じデータがこのテーブルに複数回挿入されることが多いため、重複を除去する手段が必要であり、 また、カラム min_timemax_time の集約にも必要だからです。
  • metrics テーブルでは ReplacingMergeTree を使用します。これは、同じデータがこのテーブルに複数回挿入されることが多いため、重複を除去する手段が必要だからです。
指定すれば、内部ターゲットテーブルで他のテーブルエンジンを使用することもできます。

外部ターゲットテーブル

TimeSeries テーブルでは、手動で作成したテーブルを使用することもできます:
外部テーブルのカラム型 (idtimestampvalue、および tags_to_columns に記載された <tag_value_column>) は、TimeSeries テーブルが通常内部的に生成する型と一致している必要があります (型の制約については、Samples テーブルTags テーブル、および Metrics テーブル を参照してください) 。型の不一致は CREATE 時に報告されます。 外部タグターゲットの id 生成式は、INSERT 時に次の順序で決定されます。まず id_generator 設定 (設定されている場合) 、次に外部テーブルの id カラムで宣言された DEFAULT (存在する場合) 、最後に id 型から導出される正規のジェネレーターです。したがって、この設定は外部テーブルで宣言された DEFAULT より優先されます。詳細は The id column を参照してください。

設定の変更

CREATE 実行後に変更できる設定は、次の 2 つです。
  • id_generator
  • filter_by_min_time_and_max_time
データがすでに Tags テーブルに存在する状態で id_generator を変更すると、同じ metric+tag の組み合わせに対して異なる ID が生成される可能性がある点に注意してください。古い行は従来の ID のまま残り、新しい行では新しいジェネレーターが使用されます。 他の設定は、CREATE 時に内部テーブルのスキーマに組み込まれるため、ALTER ... MODIFY SETTING では変更できません。

設定

以下は、TimeSeries テーブルの定義時に指定できる設定の一覧です。

関数

以下は、TimeSeries テーブルを引数としてサポートする関数の一覧です。
最終更新日 2026年7月3日