これは実験的な機能であり、今後のリリースで後方互換性のない変更が行われる可能性があります。
allow_experimental_time_series_table 設定で
TimeSeries テーブルエンジン の使用を有効にします。
set allow_experimental_time_series_table = 1 コマンドを実行します。構文
使い方
TimeSeries テーブルを作成できます) :
ターゲットテーブル
TimeSeries テーブル自体はデータを持たず、すべてのデータはそのターゲットテーブルに格納されます。
これは materialized view の仕組みに似ていますが、
materialized view ではターゲットテーブルは 1 つであるのに対し、
TimeSeries テーブルには data、tags、metrics という 3 つのターゲットテーブルがあります。
ターゲットテーブルは CREATE TABLE クエリで明示的に指定することもできますし、
TimeSeries テーブルエンジンが内部ターゲットテーブルを自動生成することもできます。
ターゲットテーブルは次のとおりです:
data テーブル
| Name | Mandatory? | Default type | Possible types | Description |
|---|---|---|---|---|
id | [x] | UUID | any | メトリクス名とタグの組み合わせを識別します |
timestamp | [x] | DateTime64(3) | DateTime64(X) | 時点 |
value | [x] | Float64 | Float32 or Float64 | timestamp に対応する値 |
| 名前 | 必須? | デフォルト型 | 使用可能な型 | 説明 |
|---|---|---|---|---|
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)) | 一時的なカラムで、各行にはメトリクス名を含むタグ __name__ のみを除外したすべてのタグのマップが入ります。このカラムの唯一の用途は、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 テーブル
| 名前 | 必須? | デフォルト型 | 使用可能な型 | 説明 |
|---|---|---|---|---|
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 テーブルには、データ、タグ、メトリクス テーブルのすべてのカラムが含まれます。
作成
TimeSeries テーブルエンジンを使ってテーブルを作成する方法はいくつかあります。
最も簡単なステートメントは
SHOW CREATE TABLE my_table を実行すると確認できます) :
.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 テーブルのカラムの一部が含まれています:
カラムの型を調整する
id カラム
id カラムには識別子が格納されており、各識別子はメトリクス名とタグの組み合わせごとに計算されます。
id カラムの DEFAULT 式は、そのような識別子を計算するために使用される式です。
id カラムの型とその式は、どちらも明示的に指定することで調整できます。
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 テーブルの定義時に指定できる設定の一覧です。
| Name | Type | Default | Description |
|---|---|---|---|
tags_to_columns | Map | tags テーブルで、どのタグを個別のカラムに格納するかを指定する Map。構文: {'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 テーブルの作成時に、このフラグを有効にすると、min_time カラムの型として単なる Nullable(DateTime64(3)) ではなく SimpleAggregateFunction(min, Nullable(DateTime64(3))) を使用し、max_time カラムにも同様に適用されます |
filter_by_min_time_and_max_time | Bool | true | true に設定すると、テーブルは時系列のフィルタリングに min_time カラムと max_time カラムを使用します |
TimeSeries テーブルを引数としてサポートする関数の一覧です。