これは実験的な機能であり、今後のリリースで後方互換性のない変更が行われる可能性があります。
allow_experimental_time_series_table 設定で
TimeSeries テーブルエンジン の使用を有効にします。
set allow_experimental_time_series_table = 1 コマンドを実行します。構文
キーワード
SAMPLES には、後方互換性のために DATA というエイリアスが残されています。使い方
TimeSeries テーブルを作成できます) :
外部カラム
SELECT/INSERT のためのインターフェイスだけを提供します。実際のデータはターゲットテーブルに格納されます。外部カラムの一覧は次のとおりです。
例:
metric_name は挿入時に空でもかまいません。つまり、メトリクス名は tags 内の __name__ に指定されます。たとえば次のとおりです:
metric_family、type、unit、help の各カラムに値を挿入します:
外部カラムの指定
time_series カラムは、デフォルトの Array(Tuple(DateTime64(3), Float64)) 型をオーバーライドするために、CREATE TABLE ステートメントで明示的に指定できます。ClickHouse はその Tuple から timestamp 型と scalar 型を抽出し、それらを内部の Samples テーブルに反映します:
INNER COLUMNS 句で timestamp と値のカラム型を直接宣言するのと同じです:
CREATE TABLE ステートメント内で使用する場合、宣言する型は一致していなければなりません。
ターゲットテーブル
TimeSeries テーブル自体はデータを持たず、すべてのデータはそのターゲットテーブルに格納されます。
これは materialized view の仕組みに似ていますが、
materialized view ではターゲットテーブルは 1 つであるのに対し、
TimeSeries テーブルには samples、tags、metrics という 3 つのターゲットテーブルがあります。
ターゲットテーブルは CREATE TABLE クエリで明示的に指定することもできますし、
TimeSeries テーブルエンジンが内部ターゲットテーブルを自動生成することもできます。
TimeSeries テーブルに挿入された行は変換され、ブロックに分割されたうえで、これら 3 つのターゲットテーブルに挿入されます。
ターゲットテーブルは次のとおりです:
samples テーブル
エンジンが自動作成するカラムには、時系列圧縮コーデックが設定されます。
timestamp CODEC(DoubleDelta, ZSTD(1)) および value CODEC(Gorilla, ZSTD(1))。ほぼ単調なタイムスタンプは汎用コーデックではほとんど
圧縮されず、samples テーブルのディスク上のサイズの大部分を占める可能性があります。
カラムの型の調整も参照してください。
tags テーブルには、メトリクス名とタグの各組み合わせに対して計算された識別子が格納されます。
tags テーブルには、次のカラムが必要です。
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 カラムには任意の比較可能な非 Nullable 型を使用できます。samples および tags の内部テーブルで宣言される id の型は一致している必要があります。
id カラムに DEFAULT 式が指定されておらず、かつ id_generator 設定がされていない場合、id の型が UUID、UInt64、UInt128、FixedString(16)、またはこれらの型のうち2つからなるタプルである場合に限り、ClickHouse は id の型に基づいて DEFAULT 式を自動的に選択します。このようなタプルでは、自動的に選択される式により、最初の部分でメトリクス名のハッシュが、2番目の部分ですべてのタグのハッシュが計算されます。
id_generator 設定では、INNER COLUMNS 句を使用せずに同じカスタマイズを行えます。
DEFAULTに別の式が含まれていても、idの生成にはこの設定が使用されます。
tags カラムには、メトリクス名を持つ __name__ タグを含む、時系列のすべてのタグが格納されます。
tags_to_columns 設定を使うと、特定のタグを tags カラム内のマップに加えて、個別のカラムにも格納するよう指定できます。
instance と job のカラムが追加されます。
instance と job のタグの値は、これらのカラムと tags カラムの両方に格納されます。
古いバージョンの ClickHouse で作成されたテーブルでは、
tags カラムには専用のカラムを持たないタグのみが含まれ、メトリクス名は含まれません。また、all_tags カラムは一時的なカラムであり、INSERT 時にメトリクス名以外のすべてのタグで補完されます。内部ターゲットテーブルのテーブルエンジン
- samples テーブルでは MergeTree を使用します。
- tags テーブルでは AggregatingMergeTree を使用します。これは、同じデータがこのテーブルに複数回挿入されることが多いため、重複を除去する手段が必要であり、
また、カラム
min_timeとmax_timeの集約にも必要だからです。 - metrics テーブルでは ReplacingMergeTree を使用します。これは、同じデータがこのテーブルに複数回挿入されることが多いため、重複を除去する手段が必要だからです。
tags の Map) を sorting key の外に保持します。
これは AggregatingMergeTree ではデフォルトで拒否されます (allow_dimensions_outside_sorting_key を参照) 。
ここでこれが安全なのは、これらのカラムが sorting key の一部である id に関数従属しているためであり、そのため
バックグラウンド merge でまとめて統合されるすべての行は同じ値を共有します。上記のように内部 tags テーブルが生成される場合、またはその
エンジンがインラインで指定される場合、TimeSeries は自動的にそのテーブルに allow_dimensions_outside_sorting_key = 1 を設定します。
手動で作成した外部の集約 tags テーブルでは、自分でこれを設定する必要があります。
外部ターゲットテーブル
TimeSeries テーブルでは、手動で作成したテーブルを使用することもできます:
id、timestamp、value、および 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_generatorfilter_by_min_time_and_max_time
id_generator を変更すると、同じ metric+tag の組み合わせに対して異なる ID が生成される可能性がある点に注意してください。古い行は従来の ID のまま残り、新しい行では新しいジェネレーターが使用されます。
他の設定は、CREATE 時に内部テーブルのスキーマに組み込まれるため、ALTER ... MODIFY SETTING では変更できません。
設定
TimeSeries テーブルの定義時に指定できる設定の一覧です。
関数
TimeSeries テーブルを引数としてサポートする関数の一覧です。