Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

محرك جدول GraphiteMergeTree

صُمم هذا المحرك لتقليل كثافة بيانات Graphite وتجميعها/احتساب متوسطها (rollup). وقد يكون مفيدًا للمطورين الذين يريدون استخدام ClickHouse كمخزن بيانات لـ Graphite.

يمكنك استخدام أي محرك جدول في 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 sensor). نوع البيانات: 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:

  • الأعمدة المطلوبة
  • الأنماط

الأعمدة المطلوبة

path_column_name

path_column_name — اسم العمود الذي يخزّن اسم المقياس (Graphite sensor). القيمة الافتراضية: 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) أن يحتوي على المعلَمة function للتجميع، أو معلَمات retention، أو كليهما. إذا طابق اسم المقياس regexp، فستُطبَّق القواعد من قسم pattern (أو الأقسام)؛ وإلا فستُستخدم القواعد من قسم default.

الحقول الخاصة بقسمي pattern وdefault:

  • rule_type - نوع القاعدة. لا تُطبَّق إلا على مقاييس معيّنة. يستخدمها المحرّك للفصل بين المقاييس العادية والمقاييس الموسومة. معلَمة اختيارية. القيمة الافتراضية: all. لا تكون ضرورية إذا لم يكن الأداء بالغ الأهمية، أو إذا كان يُستخدم نوع واحد فقط من المقاييس، مثل المقاييس العادية. افتراضيًا، لا تُنشأ إلا مجموعة واحدة من القواعد. بخلاف ذلك، إذا جرى تعريف أي من الأنواع الخاصة، فستُنشأ مجموعتان مختلفتان: واحدة للمقاييس العادية (root.branch.leaf) وأخرى للمقاييس الموسومة (root.branch.leaf;tag1=value1). وتُدرج القواعد الافتراضية ضمن كلتا المجموعتين. القيم الصالحة:
    • all (الافتراضية) - قاعدة عامة تُستخدم عند حذف rule_type.
    • plain - قاعدة للمقاييس العادية. يُعالَج الحقل regexp بوصفه تعبيرًا نمطيًا.
    • tagged - قاعدة للمقاييس الموسومة (تُخزَّن المقاييس في DB بالتنسيق someName?tag1=value1&tag2=value2&tag3=value3). يجب أن يكون التعبير النمطي مرتبًا بحسب أسماء tags، ويجب أن يكون أول tag هو __name__ إن وُجد. يُعالَج الحقل regexp بوصفه تعبيرًا نمطيًا.
    • tag_list - قاعدة للمقاييس الموسومة، وهي DSL بسيطة لتسهيل وصف المقياس بتنسيق graphite مثل someName;tag1=value1;tag2=value2 أو someName أو tag1=value1;tag2=value2. يُترجم الحقل regexp إلى قاعدة tagged. لا حاجة إلى الترتيب حسب أسماء tags، إذ سيُجرى ذلك تلقائيًا. ويمكن تعيين قيمة tag (وليس الاسم) على هيئة تعبير نمطي، مثل 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>
Navigation