ClickHouse/docs/ja/engines/table-engines/mergetree-family/graphitemergetree.md
2024-11-18 11:58:58 +09:00

11 KiB
Raw Blame History

slug sidebar_position sidebar_label
/ja/engines/table-engines/mergetree-family/graphitemergetree 90 GraphiteMergeTree

GraphiteMergeTree

このエンジンは、Graphite データの間引きと集計/平均化ロールアップを目的としています。ClickHouseをGraphiteのデータストアとして使用したい開発者にとって役立つかもしれません。

ロールアップが不要な場合は、任意のClickHouseテーブルエンジンを使用してGraphiteデータを保存できますが、ロールアップが必要な場合は GraphiteMergeTree を使用してください。このエンジンはストレージの容量を削減し、Graphiteからのクエリの効率を向上させます。

このエンジンは、MergeTreeのプロパティを継承しています。

テーブルの作成

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    Path String,
    Time DateTime,
    Value Float64,
    Version <Numeric_type>
    ...
) ENGINE = GraphiteMergeTree(config_section)
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]

CREATE TABLEクエリの詳細な説明を参照してください。

Graphiteデータのテーブルには、以下のデータ用に以下のカラムが必要です

  • メトリック名Graphiteセンサー。データ型String

  • メトリックを計測した時間。データ型:DateTime

  • メトリックの値。データ型:Float64

  • メトリックのバージョン。データ型任意の数値型ClickHouseは最高バージョンの行または同一バージョンの場合は最後に書き込まれた行を保存します。他の行はデータ部分のマージ中に削除されます

これらのカラムの名前はロールアップ設定で指定する必要があります。

GraphiteMergeTreeのパラメータ

  • config_section — ロールアップのルールが設定されている設定ファイル内のセクション名。

クエリ句

GraphiteMergeTree テーブルを作成する際、MergeTree テーブルを作成する場合と同様に、同じクエリ句が必要です。

非推奨のテーブル作成方法

:::note 新しいプロジェクトではこの方法を使用せず、可能であれば古いプロジェクトを上記の方法に切り替えてください。 :::

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    EventDate Date,
    Path String,
    Time DateTime,
    Value Float64,
    Version <Numeric_type>
    ...
) ENGINE [=] GraphiteMergeTree(date-column [, sampling_expression], (primary, key), index_granularity, config_section)

config_section を除くすべてのパラメータは MergeTree と同じ意味を持ちます。

  • config_section — ロールアップのルールが設定されている設定ファイル内のセクション名。

ロールアップ設定

ロールアップの設定は、サーバー構成内のgraphite_rollupパラメータによって定義されます。パラメータ名は任意に設定できます。複数の構成を作成し、異なるテーブルに使用することが可能です。

ロールアップ構成の構造:

required-columns
patterns

必須カラム

path_column_name

path_column_name — メトリック名Graphiteセンサーを保存するカラムの名前。デフォルト値は Path です。

time_column_name

time_column_name — メトリックを計測した時間を保存するカラムの名前。デフォルト値は Time です。

value_column_name

value_column_nametime_column_name に設定された時間におけるメトリックの値を保存するカラムの名前。デフォルト値は Value です。

version_column_name

version_column_name — メトリックのバージョンを保存するカラムの名前。デフォルト値は Timestamp です。

パターン

patterns セクションの構造:

pattern
    rule_type
    regexp
    function
pattern
    rule_type
    regexp
    age + precision
    ...
pattern
    rule_type
    regexp
    function
    age + precision
    ...
pattern
    ...
default
    function
    age + precision
    ...

:::important パターンは以下の順序で厳密に記述する必要があります:

  1. function または retention がないパターン。
  2. functionretention の両方を持つパターン。
  3. default パターン。 :::

行を処理する際、ClickHouseはpatternセクションのルールを確認します。各patterndefaultを含む)セクションには集計用のfunctionパラメータ、またはretentionパラメータ、または両方を含むことができます。メトリック名がregexpに一致すると、patternセクション(またはセクション)からのルールが適用されます。そうでない場合はdefaultセクションからのルールが使用されます。

patterndefault セクション用フィールド:

  • rule_type - ルールのタイプ。特定のメトリクスにのみ適用されます。エンジンは、プレーンメトリクスとタグ付きメトリクスを分けるために使用します。オプションのパラメータ。デフォルト値は all です。 パフォーマンスが重要でない場合、または1種類のメトリクスしか使用しない場合プレーンメトリクスには不要です。デフォルトでは1種類のルールセットのみが作成されます。それ以外の場合、特定のタイプが定義されている場合は、2つの異なるセットが作成されます。1つはプレーンメトリクス用root.branch.leaf、もう1つはタグ付きメトリクス用root.branch.leaf;tag1=value1です。 デフォルトルールは両方のセットに組み込まれます。 有効な値:

    • all(デフォルト)- rule_typeが省略された場合に使用されるユニバーサルルール。
    • plain - プレーンメトリクス用のルール。regexpフィールドは正規表現として処理されます。
    • tagged - タグ付きメトリクス用のルール(メトリクスは someName?tag1=value1&tag2=value2&tag3=value3 形式でDBに保存されます。正規表現はタグ名によってソートされていなければならず、存在する場合は最初のタグは __name__ でなければなりません。regexpフィールドは正規表現として処理されます。
    • tag_list - タグ付きメトリクス用のルール。クリックハウスフォーマットかつ someName;tag1=value1;tag2=value2 または someName または tag1=value1;tag2=value2 フォーマットで、メトリクスの記述を簡単にするためのDSL。regexpフィールドは tagged ルールに変換されます。タグ名によるソートは自動的に行われるので不要です。タグの値(名前ではなく)は正規表現として設定できます。例えば env=(dev|staging)
  • regexp メトリック名のパターン正規表現またはDSL

  • age データの最小年齢(秒単位)。

  • precision データの年齢を秒単位でどの程度正確に定義するか。864001日の秒数の約数である必要があります。

  • function [age, age + precision] の範囲内でデータに適用する集約関数の名前。受け入れられる関数min / max / any / avg。平均は平均の平均として不正確に計算されます。

ルールタイプなしの設定例

<graphite_rollup>
    <version_column_name>Version</version_column_name>
    <pattern>
        <regexp>click_cost</regexp>
        <function>any</function>
        <retention>
            <age>0</age>
            <precision>5</precision>
        </retention>
        <retention>
            <age>86400</age>
            <precision>60</precision>
        </retention>
    </pattern>
    <default>
        <function>max</function>
        <retention>
            <age>0</age>
            <precision>60</precision>
        </retention>
        <retention>
            <age>3600</age>
            <precision>300</precision>
        </retention>
        <retention>
            <age>86400</age>
            <precision>3600</precision>
        </retention>
    </default>
</graphite_rollup>

ルールタイプを含む設定例

<graphite_rollup>
    <version_column_name>Version</version_column_name>
    <pattern>
        <rule_type>plain</rule_type>
        <regexp>click_cost</regexp>
        <function>any</function>
        <retention>
            <age>0</age>
            <precision>5</precision>
        </retention>
        <retention>
            <age>86400</age>
            <precision>60</precision>
        </retention>
    </pattern>
    <pattern>
        <rule_type>tagged</rule_type>
        <regexp>^((.*)|.)min\?</regexp>
        <function>min</function>
        <retention>
            <age>0</age>
            <precision>5</precision>
        </retention>
        <retention>
            <age>86400</age>
            <precision>60</precision>
        </retention>
    </pattern>
    <pattern>
        <rule_type>tagged</rule_type>
        <regexp><![CDATA[^someName\?(.*&)*tag1=value1(&|$)]]></regexp>
        <function>min</function>
        <retention>
            <age>0</age>
            <precision>5</precision>
        </retention>
        <retention>
            <age>86400</age>
            <precision>60</precision>
        </retention>
    </pattern>
    <pattern>
        <rule_type>tag_list</rule_type>
        <regexp>someName;tag2=value2</regexp>
        <retention>
            <age>0</age>
            <precision>5</precision>
        </retention>
        <retention>
            <age>86400</age>
            <precision>60</precision>
        </retention>
    </pattern>
    <default>
        <function>max</function>
        <retention>
            <age>0</age>
            <precision>60</precision>
        </retention>
        <retention>
            <age>3600</age>
            <precision>300</precision>
        </retention>
        <retention>
            <age>86400</age>
            <precision>3600</precision>
        </retention>
    </default>
</graphite_rollup>

:::note データのロールアップはマージ中に実行されます。通常、古いパーティションに対してはマージが開始されないため、ロールアップのためにはoptimizeを使用して予定外のマージをトリガーする必要があります。または、graphite-ch-optimizerのような追加ツールを使用してください。 :::