Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

GraphiteMergeTree 表引擎

此引擎专为精简以及聚合/平均 (rollup) Graphite 数据而设计。对于希望将 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
  • 匹配规则

所需列

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 部分的结构:

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

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

patterndefault 部分中的字段:

  • rule_type - 规则类型。它仅应用于特定指标。引擎使用它来区分普通指标和带标签的指标。可选参数。默认值:all。 如果性能不是关键因素,或者只使用一种指标类型 (例如普通指标) ,则不需要它。默认情况下,只会创建一组规则。否则,如果定义了任意特殊类型,则会创建两组不同的规则:一组用于普通指标 (root.branch.leaf) ,另一组用于带标签的指标 (root.branch.leaf;tag1=value1) 。 默认规则最终会同时出现在这两组中。 有效值:
    • all (默认) - 通用规则,在省略 rule_type 时使用。
    • plain - 普通指标的规则。字段 regexp 按 regular expression 处理。
    • tagged - 带标签指标的规则 (指标在 DB 中以 someName?tag1=value1&tag2=value2&tag3=value3 格式存储) 。regular expression 必须按标签名称排序;如果存在,第一个标签必须是 __name__。字段 regexp 按 regular expression 处理。
    • tag_list - 带标签指标的规则,这是一种简单的 DSL,便于用 graphite 格式描述指标,例如 someName;tag1=value1;tag2=value2someNametag1=value1;tag2=value2。字段 regexp 会被转换为一条 tagged 规则。无需按标签名称排序,系统会自动完成。标签的值 (而不是名称) 可以设置为 regular expression,例如 env=(dev|staging)
  • regexp – 指标名称的 pattern (正则或 DSL) 。
  • age – 数据最小年龄 (秒) 。
  • precision– 定义数据年龄 (秒) 时使用的精度。它应当是 86400 (一天的秒数) 的约数。
  • function – 应用于年龄落在 [age, age + precision] 范围内的数据的聚合函数名称。可接受的函数:min / max / any / avg。平均值的计算并不精确,类似于对多个平均值再取平均。

不包含 rules 类型的配置示例

<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>
Navigation