メインコンテンツまでスキップ
メインコンテンツまでスキップ

TimeSeries エンジン

Experimental feature. Learn more.
Not supported in ClickHouse Cloud

タイムスタンプとタグ(またはラベル)に関連付けられた値のセットである時系列を格納するテーブルエンジン:

参考

これは実験的な機能であり、将来のリリースで後方互換性のない変更が加わる可能性があります。 allow_experimental_time_series_table 設定を使用して、TimeSeries テーブルエンジンの使用を有効にします。 コマンド set allow_experimental_time_series_table = 1 を入力してください。

構文

使用法

すべての設定をデフォルトのままにして始める方が簡単です(カラムのリストを指定せずに TimeSeries テーブルを作成することが許可されています):

その後、このテーブルは以下のプロトコルで使用できます(ポートはサーバー構成で割り当てる必要があります):

ターゲットテーブル

TimeSeries テーブルは独自のデータを持っておらず、すべてはそのターゲットテーブルに保存されます。 これは、マテリアライズドビュー が機能する方法に似ていますが、 マテリアライズドビューは1つのターゲットテーブルを持つのに対して、TimeSeries テーブルは datatags、および metrics の3つのターゲットテーブルを持ちます。

ターゲットテーブルは、CREATE TABLE クエリで明示的に指定することも、 TimeSeries テーブルエンジンが内部ターゲットテーブルを自動生成することもできます。

ターゲットテーブルは次の通りです:

データテーブル

data テーブルは、ある識別子に関連付けられた時系列を含みます。

data テーブルには以下のカラムが必要です:

名前必須?デフォルトタイプ可能なタイプ説明
id[x]UUIDいずれかメトリック名とタグの組み合わせを識別
timestamp[x]DateTime64(3)DateTime64(X)時間ポイント
value[x]Float64Float32 または Float64timestamp に関連する値

タグテーブル

tags テーブルには、メトリック名とタグの組み合わせに対して計算された識別子が含まれます。

tags テーブルには以下のカラムが必要です:

名前必須?デフォルトタイプ可能なタイプ説明
id[x]UUIDいずれか(data テーブルの id のタイプと一致する必要があります)id はメトリック名とタグの組み合わせを識別します。DEFAULT 式はその識別子を計算する方法を指定します。
metric_name[x]LowCardinality(String)String または LowCardinality(String)メトリックの名前
<tag_value_column>[ ]StringString または LowCardinality(String) または LowCardinality(Nullable(String))特定のタグの値、タグの名前と対応するカラムの名前は tags_to_columns 設定で指定されます
tags[x]Map(LowCardinality(String), String)Map(String, String) または Map(LowCardinality(String), String) または Map(LowCardinality(String), LowCardinality(String))メトリックの名前を含むタグ __name__ を除いたタグのマップと、tags_to_columns 設定で列挙された名前を持つタグを除外します
all_tags[ ]Map(String, String)Map(String, String) または Map(LowCardinality(String), String) または Map(LowCardinality(String), LowCardinality(String))瞬時のカラム、各行はメトリックの名前を含むすべてのタグのマップです。このカラムの唯一の目的は id を計算する際に使用することです
min_time[ ]Nullable(DateTime64(3))DateTime64(X) または Nullable(DateTime64(X))その id の時系列の最小タイムスタンプ。カラムは store_min_time_and_max_timetrue の場合に作成されます
max_time[ ]Nullable(DateTime64(3))DateTime64(X) または Nullable(DateTime64(X))その id の時系列の最大タイムスタンプ。カラムは store_min_time_and_max_timetrue の場合に作成されます

メトリックテーブル

metrics テーブルには、収集されたメトリックについての情報、そのメトリックのタイプおよび説明が含まれます。

metrics テーブルには以下のカラムが必要です:

名前必須?デフォルトタイプ可能なタイプ説明
metric_family_name[x]StringString または LowCardinality(String)メトリックファミリーの名前
type[x]StringString または LowCardinality(String)メトリックファミリーのタイプ -"counter", "gauge", "summary", "stateset", "histogram", "gaugehistogram" のいずれか
unit[x]StringString または LowCardinality(String)メトリックに使用される単位
help[x]StringString または LowCardinality(String)メトリックの説明

TimeSeries テーブルに挿入された行は、実際にはこれら3つのターゲットテーブルに保存されます。 TimeSeries テーブルには、datatagsmetrics テーブルからすべてのカラムが含まれています。

作成

TimeSeries テーブルエンジンでテーブルを作成する方法はいくつかあります。 最もシンプルなステートメント

は実際には次のテーブルを作成します(SHOW CREATE TABLE my_table を実行することで確認できます):

したがって、カラムは自動生成され、またこのステートメントにはそれぞれのターゲットテーブルに対する3つの内部UUIDがあります。 (内部UUIDは通常、設定 show_table_uuid_in_table_create_query_if_not_nil が設定されている場合を除き表示されません。)

内部ターゲットテーブルの名前は .inner_id.data.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.inner_id.tags.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.inner_id.metrics.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx などであり、それぞれのターゲットテーブルには主な TimeSeries テーブルのカラムのサブセットが含まれています:

カラムの型の調整

主テーブルの定義時に明示的に指定することで、内部ターゲットテーブルのほぼすべてのカラムの型を調整できます。例えば、

は内部 data テーブルがミリ秒ではなくマイクロ秒でタイムスタンプを格納するようにします:

id カラム

id カラムは識別子を含み、それぞれの識別子はメトリック名とタグの組み合わせに対して計算されます。 id カラムのDEFAULT式は、そのような識別子を計算するために使用される式です。 id カラムの型とその式の両方は、明示的に指定することで調整できます:

tags および all_tags カラム

tagsall_tags の2つのカラムがタグのマップを含んでいます。これらの例では同じ意味を持ちますが、tags_to_columns 設定を使用すると異なる場合もあります。この設定は、特定のタグを tags カラム内のマップに格納するのではなく、別々のカラムに格納することを指定することを可能にします:

このステートメントは次のカラムを追加します:

my_table とその内部 tags ターゲットテーブルの定義において。 この場合、tags カラムには instancejob タグは含まれず、ですが all_tags カラムにはそれらが含まれます。all_tags カラムは一時的で、その唯一の目的は id カラムのDEFAULT式内で使用されることです。

カラムの型は、明示的に指定することで調整できます:

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

デフォルトでは内部ターゲットテーブルは次のテーブルエンジンを使用します:

  • data テーブルは MergeTree を使用します;
  • tags テーブルは AggregatingMergeTree を使用します。なぜなら同じデータがこのテーブルに複数回挿入されることが多いため、重複を削除する方法が必要であり、また min_timemax_time カラムの集計を行う必要があるためです;
  • metrics テーブルは ReplacingMergeTree を使用します。こちらも同様に、同じデータがこのテーブルに複数回挿入されることが多いため、重複を削除する方法が必要です。

内部ターゲットテーブルに対して他のテーブルエンジンも使用可能です:

外部ターゲットテーブル

手動で作成したテーブルを使用するように TimeSeries テーブルを設定することもできます:

設定

ここでは、TimeSeries テーブルを定義する際に指定できる設定のリストを示します:

名前デフォルト説明
tags_to_columnsMap特定のタグを tags テーブルの別カラムに配置するためのマップ。構文: {'tag1': 'column1', 'tag2' : column2, ...}
use_all_tags_column_to_generate_idBooltrueタイムシリーズの識別子を生成するための式を生成する際、このフラグは all_tags カラムをその計算に使用することを可能にします。
store_min_time_and_max_timeBooltruetrue に設定されている場合、テーブルは各タイムシリーズの min_timemax_time を保存します。
aggregate_min_time_and_max_timeBooltrue内部ターゲット tags テーブルを作成する際、このフラグは Nullable(DateTime64(3)) の代わりに SimpleAggregateFunction(min, Nullable(DateTime64(3)))min_time カラムの型として使用することを可能にし、同様に max_time カラムにも適用されます。
filter_by_min_time_and_max_timeBooltruetrue に設定されている場合、テーブルはタイムシリーズをフィルタリングするために min_timemax_time カラムを使用します。

関数

ここでは、TimeSeries テーブルを引数としてサポートする関数のリストを示します: