これは実験的な機能であり、今後のリリースで後方互換性のない変更が行われる可能性があります。
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 テーブル
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 カラムの型は、UUID、UInt64、UInt128、または FixedString(16) のいずれかである必要があります。DEFAULT 式が指定されていない場合、ClickHouse は id の型に基づいて自動的に選択します。samples および tags の内部テーブルで宣言される id の型は一致している必要があります。
id_generator 設定では、INNER COLUMNS 句を使用せずに同じカスタマイズを行えます。
DEFAULTに別の式が含まれていても、idの生成にはこの設定が使用されます。
タグのマップを含むカラムは tags と all_tags の 2 つあります。この例では両者は同じ意味ですが、tags_to_columns 設定を使用している場合は異なることがあります。
この設定を使うと、特定のタグを tags カラム内のマップに格納する代わりに、個別のカラムに格納するよう指定できます。
instance と job のカラムが追加されます。
この場合、tags カラムには instance と job のタグは含まれませんが、
all_tags カラムにはそれらが含まれます。all_tags カラムは一時的なもので、唯一の目的は id カラムの DEFAULT 式で
使用することです。
内部ターゲットテーブルのテーブルエンジン
- samples テーブルでは MergeTree を使用します。
- tags テーブルでは AggregatingMergeTree を使用します。これは、同じデータがこのテーブルに複数回挿入されることが多いため、重複を除去する手段が必要であり、
また、カラム
min_timeとmax_timeの集約にも必要だからです。 - metrics テーブルでは ReplacingMergeTree を使用します。これは、同じデータがこのテーブルに複数回挿入されることが多いため、重複を除去する手段が必要だからです。
外部ターゲットテーブル
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 テーブルを引数としてサポートする関数の一覧です。