15 KiB
slug | sidebar_position | sidebar_label |
---|---|---|
/ja/engines/table-engines/special/time_series | 60 | TimeSeries |
TimeSeries エンジン [エクスペリメンタル]
タイムシリーズ、すなわちタイムスタンプとタグ(またはラベル)に関連付けられた値のセットを格納するテーブルエンジン:
metric_name1[tag1=value1, tag2=value2, ...] = {timestamp1: value1, timestamp2: value2, ...}
metric_name2[...] = ...
:::info
これは将来のリリースで後方互換性がない形で変更される可能性のあるエクスペリメンタル機能です。
TimeSeries テーブルエンジンの使用を
allow_experimental_time_series_table 設定で有効にしてください。
コマンド set allow_experimental_time_series_table = 1
を入力します。
:::
構文
CREATE TABLE name [(columns)] ENGINE=TimeSeries
[SETTINGS var1=value1, ...]
[DATA db.data_table_name | DATA ENGINE data_table_engine(arguments)]
[TAGS db.tags_table_name | TAGS ENGINE tags_table_engine(arguments)]
[METRICS db.metrics_table_name | METRICS ENGINE metrics_table_engine(arguments)]
使用法
すべてをデフォルトで設定した状態で始めると簡単です(TimeSeries
テーブルをカラムのリストを指定せずに作成することが許可されています):
CREATE TABLE my_table ENGINE=TimeSeries
この後、このテーブルは次のプロトコルで使用できます(サーバー構成でポートを割り当てなければなりません):
ターゲットテーブル
TimeSeries
テーブルには独自のデータはなく、すべてがそのターゲットテーブルに格納されます。
これはMaterialized View の動作に似ていますが、
Materialized View は1つのターゲットテーブルを持つのに対し、
TimeSeries
テーブルは [data]{#data-table}、[tags]{#tags-table}、[metrics]{#metrics-table} という名前の3つのターゲットテーブルを持ちます。
ターゲットテーブルは CREATE TABLE
クエリで明示的に指定することもできますし、
TimeSeries テーブルエンジンが内部ターゲットテーブルを自動的に生成することもできます。
ターゲットテーブルは次の通りです:
- data テーブル {#data-table} は、特定の識別子に関連付けられたタイムシリーズを含みます。 data テーブルは以下のカラムを持たなければなりません:
名前 | 必須? | デフォルトタイプ | 可能なタイプ | 説明 |
---|---|---|---|---|
id |
[x] | UUID |
任意 | メトリック名とタグの組み合わせを識別します |
timestamp |
[x] | DateTime64(3) |
DateTime64(X) |
時点 |
value |
[x] | Float64 |
Float32 または Float64 |
timestamp に関連付けられた値 |
- tags テーブル {#tags-table} は、メトリック名とタグの各組み合わせに対して計算された識別子を含みます。 tags テーブルは以下のカラムを持たなければなりません:
名前 | 必須? | デフォルトタイプ | 可能なタイプ | 説明 |
---|---|---|---|---|
id |
[x] | UUID |
任意 ([data]{#data-table} テーブルの 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 テーブル {#metrics-table} は、収集されたメトリックについてのいくつかの情報、これらのメトリックのタイプとその説明を含みます。 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]{#data-table}、[tags]{#tags-table}、[metrics]{#metrics-table} のすべてのカラムが含まれます。
作成
TimeSeries
テーブルエンジンを使用してテーブルを作成するにはいくつかの方法があります。最もシンプルな文は次の通りです。
CREATE TABLE my_table ENGINE=TimeSeries
実際には、次のテーブルを作成します(SHOW CREATE TABLE my_table
を実行すると見ることができます):
CREATE TABLE my_table
(
`id` UUID DEFAULT reinterpretAsUUID(sipHash128(metric_name, all_tags)),
`timestamp` DateTime64(3),
`value` Float64,
`metric_name` LowCardinality(String),
`tags` Map(LowCardinality(String), String),
`all_tags` Map(String, String),
`min_time` Nullable(DateTime64(3)),
`max_time` Nullable(DateTime64(3)),
`metric_family_name` String,
`type` String,
`unit` String,
`help` String
)
ENGINE = TimeSeries
DATA ENGINE = MergeTree ORDER BY (id, timestamp)
DATA INNER UUID '01234567-89ab-cdef-0123-456789abcdef'
TAGS ENGINE = AggregatingMergeTree PRIMARY KEY metric_name ORDER BY (metric_name, id)
TAGS INNER UUID '01234567-89ab-cdef-0123-456789abcdef'
METRICS ENGINE = ReplacingMergeTree ORDER BY metric_family_name
METRICS INNER UUID '01234567-89ab-cdef-0123-456789abcdef'
したがって、カラムは自動的に生成され、さらに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
テーブルのカラムのサブセットを持ちます:
CREATE TABLE default.`.inner_id.data.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
(
`id` UUID,
`timestamp` DateTime64(3),
`value` Float64
)
ENGINE = MergeTree
ORDER BY (id, timestamp)
CREATE TABLE default.`.inner_id.tags.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
(
`id` UUID DEFAULT reinterpretAsUUID(sipHash128(metric_name, all_tags)),
`metric_name` LowCardinality(String),
`tags` Map(LowCardinality(String), String),
`all_tags` Map(String, String) EPHEMERAL,
`min_time` SimpleAggregateFunction(min, Nullable(DateTime64(3))),
`max_time` SimpleAggregateFunction(max, Nullable(DateTime64(3)))
)
ENGINE = AggregatingMergeTree
PRIMARY KEY metric_name
ORDER BY (metric_name, id)
CREATE TABLE default.`.inner_id.metrics.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
(
`metric_family_name` String,
`type` String,
`unit` String,
`help` String
)
ENGINE = ReplacingMergeTree
ORDER BY metric_family_name
カラムタイプの調整
メインテーブルを定義する際に明示的に指定することで、内部ターゲットテーブルのほぼすべてのカラムのタイプを調整できます。例えば、
CREATE TABLE my_table
(
timestamp DateTime64(6)
) ENGINE=TimeSeries
これにより、内部の [data]{#data-table} テーブルがマイクロ秒単位でタイムスタンプを格納します:
CREATE TABLE default.`.inner_id.data.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
(
`id` UUID,
`timestamp` DateTime64(6),
`value` Float64
)
ENGINE = MergeTree
ORDER BY (id, timestamp)
id
カラム
id
カラムには識別子が含まれ、すべての識別子はメトリック名とタグの組み合わせに対して計算されます。
id
カラムの DEFAULT 式は、そのような識別子を計算するために使用される式です。
id
カラムのタイプとその式は、明示的に指定することで調整できます:
CREATE TABLE my_table
(
id UInt64 DEFAULT sipHash64(metric_name, all_tags)
) ENGINE=TimeSeries
tags
および all_tags
カラム
タグのマップを含む2つのカラム - tags
と all_tags
があります。この例では同じ意味を持ちますが、
設定 tags_to_columns
が使用された場合には異なる場合があります。
特定のタグが tags
カラム内のマップに格納される代わりに、別のカラムに格納されるべきであることを指定することができます:
CREATE TABLE my_table ENGINE=TimeSeries SETTINGS = {'instance': 'instance', 'job': 'job'}
この文は次のカラムを追加します:
`instance` String,
`job` String
これにより、my_table
と内部の [tags]{#tags-table} ターゲットテーブルの両方の定義にカラムが追加されます。
この場合、tags
カラムには instance
と job
のタグが含まれませんが、all_tags
カラムにはそれらが含まれます。all_tags
カラムは一時的であり、id
カラムの DEFAULT 式で使用されることが唯一の目的です。
カラムのタイプは明示的に指定することで調整できます:
CREATE TABLE my_table (instance LowCardinality(String), job LowCardinality(Nullable(String)))
ENGINE=TimeSeries SETTINGS = {'instance': 'instance', 'job': 'job'}
内部ターゲットテーブルのテーブルエンジン
デフォルトでは、内部ターゲットテーブルは次のテーブルエンジンを使用します:
- [data]{#data-table} テーブルは MergeTree を使用します;
- [tags]{#tags-table} テーブルは AggregatingMergeTree を使用します。このテーブルには同じデータが頻繁に複数回挿入されるため、重複を削除する方法が必要であり、
min_time
およびmax_time
カラムの集計が必要だからです; - [metrics]{#metrics-table} テーブルは ReplacingMergeTree を使用します。このテーブルには同じデータが頻繁に複数回挿入されるため、重複を削除する方法が必要です。
内部ターゲットテーブルに他のテーブルエンジンを使用することも指定があれば可能です:
CREATE TABLE my_table ENGINE=TimeSeries
DATA ENGINE=ReplicatedMergeTree
TAGS ENGINE=ReplicatedAggregatingMergeTree
METRICS ENGINE=ReplicatedReplacingMergeTree
外部ターゲットテーブル
TimeSeries
テーブルが手動で作成されたテーブルを使用することも可能です:
CREATE TABLE data_for_my_table
(
`id` UUID,
`timestamp` DateTime64(3),
`value` Float64
)
ENGINE = MergeTree
ORDER BY (id, timestamp);
CREATE TABLE tags_for_my_table ...
CREATE TABLE metrics_for_my_table ...
CREATE TABLE my_table ENGINE=TimeSeries DATA data_for_my_table TAGS tags_for_my_table METRICS metrics_for_my_table;
設定
TimeSeries
テーブルを定義する際に指定できる設定のリストは以下の通りです:
名前 | タイプ | デフォルト | 説明 |
---|---|---|---|
tags_to_columns |
Map | {} | [tags]{#tags-table} テーブルにおいて、どのタグが別のカラムに配置されるべきかを指定するマップ。構文: {'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
テーブルを引数としてサポートする関数のリストです: