跳至主要内容
跳至主要内容

GraphiteMergeTree 表引擎

此引擎旨在对 Graphite 数据进行稀疏化和聚合/平均(rollup)。对于希望将 ClickHouse 用作 Graphite 数据存储的开发人员来说,它可能很有用。

如果您不需要 rollup,可以使用任何 ClickHouse 表引擎来存储 Graphite 数据,但如果您需要 rollup,请使用 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 保存具有最高版本或版本相同的行。其他行在合并数据部分时会被删除)。

这些列的名称应在 rollup 配置中设置。

GraphiteMergeTree 参数

  • config_section — 配置文件中设置 rollup 规则的部分名称。

查询子句

创建 GraphiteMergeTree 表时,需要相同的 子句,就像创建 MergeTree 表时一样。

创建表的弃用方法
注意

不要在新项目中使用此方法,如果可能,请将旧项目切换到上述方法。

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 — 配置文件中设置 rollup 规则的部分名称。

Rollup 配置

rollup 的设置由服务器配置中的 graphite_rollup 参数定义。参数名称可以是任意名称。您可以创建多个配置并将其用于不同的表。

Rollup 配置结构

required-columns patterns

必需的列

path_column_name

path_column_name — 存储指标名称(Graphite 传感器)的列的名称。默认值:Path

time_column_name

time_column_name — 存储测量指标时间的列的名称。默认值:Time

value_column_name

value_column_name — 存储在 time_column_name 中设置的时间点的指标值的列的名称。默认值:Value

version_column_name

version_column_name — 存储指标版本的列的名称。默认值:Timestamp

Patterns

patterns 部分的结构

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

Patterns 必须严格排序

  1. 没有 functionretention 的 Patterns。
  2. 同时具有 functionretention 的 Patterns。
  3. Pattern default

处理行时,ClickHouse 会检查 pattern 部分中的规则。每个 pattern(包括 default)部分可以包含用于聚合的 function 参数、retention 参数或两者。如果指标名称与 regexp 匹配,则应用 pattern 部分(或部分)中的规则;否则,将使用 default 部分中的规则。

patterndefault 部分的字段

  • rule_type - 规则的类型。它仅应用于特定指标。引擎使用它来分隔普通指标和带标签的指标。可选参数。默认值:all。当性能不重要或仅使用一种指标类型时,这没有必要。默认情况下,会创建一个规则集。否则,如果定义了任何特殊类型,则会创建两个不同的集合。一个用于普通指标(root.branch.leaf),一个用于带标签的指标(root.branch.leaf;tag1=value1)。默认规则最终会出现在这两个集合中。有效值
    • all (默认) - 通用规则,在省略 rule_type 时使用。
    • plain - 普通指标的规则。将 regexp 字段作为正则表达式处理。
    • tagged - 带标签指标的规则(指标以 someName?tag1=value1&tag2=value2&tag3=value3 的格式存储在 DB 中)。正则表达式必须按标签名称排序,如果存在,第一个标签必须是 __name__。将 regexp 字段作为正则表达式处理。
    • tag_list - 带标签指标的规则,一种更简单的 DSL,用于更轻松地描述 graphite 格式的指标 someName;tag1=value1;tag2=value2someNametag1=value1;tag2=value2。将 regexp 字段转换为 tagged 规则。无需按标签名称排序,将自动完成。标签值(但不是名称)可以设置为正则表达式,例如 env=(dev|staging)
  • regexp – 指标名称的模式(正则表达式或 DSL)。
  • age – 数据在秒内的最小年龄。
  • precision– 如何精确地定义数据在秒内的年龄。应该是 86400(一天中的秒数)的除数。
  • 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>
注意

数据 rollup 在合并期间执行。通常,对于旧的分区,不会启动合并,因此对于 rollup,需要使用 optimize 触发计划外合并。或者使用其他工具,例如 graphite-ch-optimizer

    © . This site is unofficial and not affiliated with ClickHouse, Inc.