TimeSeries エンジン
タイムスタンプとタグ(またはラベル)に関連付けられた値のセットである時系列を格納するテーブルエンジン:
これは実験的な機能であり、将来のリリースで後方互換性のない変更が加わる可能性があります。
allow_experimental_time_series_table 設定を使用して、TimeSeries テーブルエンジンの使用を有効にします。
コマンド set allow_experimental_time_series_table = 1
を入力してください。
構文
使用法
すべての設定をデフォルトのままにして始める方が簡単です(カラムのリストを指定せずに TimeSeries
テーブルを作成することが許可されています):
その後、このテーブルは以下のプロトコルで使用できます(ポートはサーバー構成で割り当てる必要があります):
ターゲットテーブル
TimeSeries
テーブルは独自のデータを持っておらず、すべてはそのターゲットテーブルに保存されます。
これは、マテリアライズドビュー が機能する方法に似ていますが、
マテリアライズドビューは1つのターゲットテーブルを持つのに対して、TimeSeries
テーブルは data、tags、および metrics の3つのターゲットテーブルを持ちます。
ターゲットテーブルは、CREATE TABLE
クエリで明示的に指定することも、
TimeSeries
テーブルエンジンが内部ターゲットテーブルを自動生成することもできます。
ターゲットテーブルは次の通りです:
データテーブル
data テーブルは、ある識別子に関連付けられた時系列を含みます。
data テーブルには以下のカラムが必要です:
名前 | 必須? | デフォルトタイプ | 可能なタイプ | 説明 |
---|---|---|---|---|
id | [x] | UUID | いずれか | メトリック名とタグの組み合わせを識別 |
timestamp | [x] | DateTime64(3) | DateTime64(X) | 時間ポイント |
value | [x] | Float64 | Float32 または Float64 | timestamp に関連する値 |
タグテーブル
tags テーブルには、メトリック名とタグの組み合わせに対して計算された識別子が含まれます。
tags テーブルには以下のカラムが必要です:
名前 | 必須? | デフォルトタイプ | 可能なタイプ | 説明 |
---|---|---|---|---|
id | [x] | UUID | いずれか(data テーブルの id のタイプと一致する必要があります) | id はメトリック名とタグの組み合わせを識別します。DEFAULT 式はその識別子を計算する方法を指定します。 |
metric_name | [x] | LowCardinality(String) | String または LowCardinality(String) | メトリックの名前 |
<tag_value_column> | [ ] | String | String または 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_time が true の場合に作成されます |
max_time | [ ] | Nullable(DateTime64(3)) | DateTime64(X) または Nullable(DateTime64(X)) | その id の時系列の最大タイムスタンプ。カラムは store_min_time_and_max_time が true の場合に作成されます |
メトリックテーブル
metrics テーブルには、収集されたメトリックについての情報、そのメトリックのタイプおよび説明が含まれます。
metrics テーブルには以下のカラムが必要です:
名前 | 必須? | デフォルトタイプ | 可能なタイプ | 説明 |
---|---|---|---|---|
metric_family_name | [x] | String | String または LowCardinality(String) | メトリックファミリーの名前 |
type | [x] | String | String または LowCardinality(String) | メトリックファミリーのタイプ -"counter", "gauge", "summary", "stateset", "histogram", "gaugehistogram" のいずれか |
unit | [x] | String | String または LowCardinality(String) | メトリックに使用される単位 |
help | [x] | String | String または LowCardinality(String) | メトリックの説明 |
TimeSeries
テーブルに挿入された行は、実際にはこれら3つのターゲットテーブルに保存されます。
TimeSeries
テーブルには、data、tags、metrics テーブルからすべてのカラムが含まれています。
作成
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
カラム
tags
と all_tags
の2つのカラムがタグのマップを含んでいます。これらの例では同じ意味を持ちますが、tags_to_columns
設定を使用すると異なる場合もあります。この設定は、特定のタグを tags
カラム内のマップに格納するのではなく、別々のカラムに格納することを指定することを可能にします:
このステートメントは次のカラムを追加します:
my_table
とその内部 tags ターゲットテーブルの定義において。 この場合、tags
カラムには instance
と job
タグは含まれず、ですが all_tags
カラムにはそれらが含まれます。all_tags
カラムは一時的で、その唯一の目的は id
カラムのDEFAULT式内で使用されることです。
カラムの型は、明示的に指定することで調整できます:
内部ターゲットテーブルのテーブルエンジン
デフォルトでは内部ターゲットテーブルは次のテーブルエンジンを使用します:
- data テーブルは MergeTree を使用します;
- tags テーブルは AggregatingMergeTree を使用します。なぜなら同じデータがこのテーブルに複数回挿入されることが多いため、重複を削除する方法が必要であり、また
min_time
とmax_time
カラムの集計を行う必要があるためです; - metrics テーブルは ReplacingMergeTree を使用します。こちらも同様に、同じデータがこのテーブルに複数回挿入されることが多いため、重複を削除する方法が必要です。
内部ターゲットテーブルに対して他のテーブルエンジンも使用可能です:
外部ターゲットテーブル
手動で作成したテーブルを使用するように TimeSeries
テーブルを設定することもできます:
設定
ここでは、TimeSeries
テーブルを定義する際に指定できる設定のリストを示します:
名前 | 型 | デフォルト | 説明 |
---|---|---|---|
tags_to_columns | Map | 特定のタグを tags テーブルの別カラムに配置するためのマップ。構文: {'tag1': 'column1', 'tag2' : column2, ...} | |
use_all_tags_column_to_generate_id | Bool | true | タイムシリーズの識別子を生成するための式を生成する際、このフラグは all_tags カラムをその計算に使用することを可能にします。 |
store_min_time_and_max_time | Bool | true | true に設定されている場合、テーブルは各タイムシリーズの min_time と max_time を保存します。 |
aggregate_min_time_and_max_time | Bool | true | 内部ターゲット tags テーブルを作成する際、このフラグは Nullable(DateTime64(3)) の代わりに SimpleAggregateFunction(min, Nullable(DateTime64(3))) を min_time カラムの型として使用することを可能にし、同様に max_time カラムにも適用されます。 |
filter_by_min_time_and_max_time | Bool | true | true に設定されている場合、テーブルはタイムシリーズをフィルタリングするために min_time と max_time カラムを使用します。 |
関数
ここでは、TimeSeries
テーブルを引数としてサポートする関数のリストを示します: