هذه ميزة تجريبية، وقد تتغير مستقبلًا على نحو غير متوافق مع الإصدارات السابقة.
فعِّل استخدام محرك الجدول TimeSeries
باستخدام الإعداد allow_experimental_time_series_table.
أدخِل الأمر
set allow_experimental_time_series_table = 1.الصياغة
للكلمة المفتاحية
SAMPLES اسم مستعار هو DATA، وقد أُبقي عليه للحفاظ على التوافق مع الإصدارات السابقة.الاستخدام
TimeSeries من دون تحديد قائمة بالأعمدة):
الأعمدة الخارجية
مثال:
metric_name فارغة عند الإدخال، ما يعني أن اسم المقياس يُحدَّد في tags ضمن __name__، على سبيل المثال:
metric_family وtype وunit وhelp:
تحديد الأعمدة الخارجية
time_series صراحةً في عبارة CREATE TABLE لاستبدال نوعه الافتراضي Array(Tuple(DateTime64(3), Float64)). يستخرج ClickHouse نوعَي الطابع الزمني والقيمة scalar من الـ tuple ويُمرّرهما إلى جدول العينات الداخلي:
INNER COLUMNS الخاصة بجدول samples:
CREATE TABLE نفسها، فيجب أن تتطابق الأنواع المُعلنة.
الجداول الهدف
TimeSeries على بيانات خاصة به، إذ يُخزَّن كل شيء في جداوله الهدف.
وهذا يشبه طريقة عمل العرض المادي،
مع فارق أن العرض المادي له جدول هدف واحد،
بينما يحتوي جدول TimeSeries على ثلاثة جداول هدف باسم samples وtags وmetrics.
يمكن تحديد الجداول الهدف صراحةً في استعلام CREATE TABLE
أو يمكن لمحرك جدول TimeSeries إنشاء الجداول الهدف الداخلية تلقائيًا.
تُحوَّل الصفوف المُدرجة في جدول TimeSeries، وتُقسَّم إلى كتل، ثم تُدرج في هذه الجداول الهدف الثلاثة.
الجداول الهدف هي كما يلي:
جدول العينات
تستخدم الأعمدة التي ينشئها المحرك تلقائيًا برامج ترميز ضغط للسلاسل الزمنية:
timestamp CODEC(DoubleDelta, ZSTD(1)) وvalue CODEC(Gorilla, ZSTD(1)). بالكاد
تُضغط الطوابع الزمنية شبه الرتيبة باستخدام برامج الترميز العامة، وقد تستحوذ لولا ذلك على معظم حجم جدول العينات على القرص.
انظر أيضًا ضبط أنواع الأعمدة.
يحتوي جدول tags على المعرّفات المحسوبة لكل توليفة من اسم مقياس والوسوم.
يجب أن يحتوي جدول tags على الأعمدة التالية:
جدول المقاييس
الإنشاء
TimeSeries.
أبسط عبارة
SHOW CREATE TABLE my_table):
INNER COLUMNS.
تحمل الجداول الهدف الداخلية أسماء مثل .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 ما يلي:
SETTINGSINNER COLUMNSلكل نوعINNER ENGINEلكل نوع
existing_table يحتوي على أهداف خارجية.
يُعاد توليد قائمة الأعمدة الخارجية ولا تُنسخ.
ضبط أنواع الأعمدة
INNER COLUMNS. على سبيل المثال، لتخزين الطوابع الزمنية بالميكروثانية والقيم كـ Float32، استخدم:
العمود id
id على معرّفات، ويُحتسب كل معرّف استنادًا إلى تركيبة من اسم المقياس والوسوم.
يمكن تخصيص النوع وتعبير DEFAULT المستخدم لتوليد المعرّفات عبر العبارة TAGS INNER COLUMNS:
id من أي نوع غير Nullable قابل للمقارنة. يجب أن تتطابق أنواع id المُعلنة في الجدولين الداخليين samples وtags.
إذا لم يتم تحديد التعبير DEFAULT للعمود id ولم يكن الإعداد id_generator مُعيَّنًا، فسيختار ClickHouse التعبير DEFAULT تلقائيًا بناءً على نوع id، ولكن فقط إذا كان نوع id أحد الأنواع UUID أو UInt64 أو UInt128 أو FixedString(16)، أو زوجًا من اثنين من هذه الأنواع. بالنسبة إلى هذا الزوج، يحسب التعبير المختار تلقائيًا تجزئةً لاسم المقياس في المكوّن الأول وتجزئةً لجميع الوسوم في المكوّن الثاني.
يوفّر الإعداد id_generator مستوى التخصيص نفسه من دون استخدام العبارة INNER COLUMNS:
id حتى إذا كانت قيمة DEFAULT الخاصة بالعمود تحتوي على تعبير مختلف.
يحتوي العمود tags على جميع وسوم السلسلة الزمنية، بما في ذلك الوسم __name__ الذي يحتوي على اسم المقياس.
يتيح الإعداد tags_to_columns تحديد وسم معيّن لتخزينه أيضًا في عمود منفصل
بالإضافة إلى الخريطة داخل العمود tags:
instance وjob إلى جدول الوسوم الهدف الداخلي.
ستُخزَّن قيم الوسمين instance وjob في العمودين المذكورين وفي العمود tags.
في الجداول التي أنشأتها إصدارات أقدم من ClickHouse، يحتوي العمود
tags على الوسوم التي لا توجد لها
أعمدة مخصصة فقط، ولا يتضمن اسم المقياس، بينما يكون العمود all_tags عمودًا مؤقتًا جرى ملؤه عند الإدراج
بجميع الوسوم باستثناء اسم المقياس.محركات الجداول الخاصة بالجداول الهدف الداخلية
- يستخدم جدول العينات محرك MergeTree;
- يستخدم جدول الوسوم محرك AggregatingMergeTree لأن البيانات نفسها تُدرج في هذا الجدول غالبًا عدة مرات، لذا نحتاج إلى طريقة
لإزالة التكرارات، وكذلك لأن التجميع مطلوب للعمودين
min_timeوmax_time; - يستخدم جدول المقاييس محرك ReplacingMergeTree لأن البيانات نفسها تُدرج في هذا الجدول غالبًا عدة مرات، لذا نحتاج إلى طريقة لإزالة التكرارات.
tags) خارج مفتاح الفرز الخاص به،
وهو ما يرفضه AggregatingMergeTree افتراضيًا (راجع allow_dimensions_outside_sorting_key).
وهذا آمن هنا لأن تلك الأعمدة تعتمد وظيفيًا على id، وهو جزء من مفتاح الفرز، لذا فإن جميع
الصفوف التي تدمجها عملية دمج في الخلفية معًا تتشارك القيم نفسها. وعندما يُنشأ جدول الوسوم الداخلي أو يُحدَّد محركه inline كما هو موضح أعلاه، يضبط TimeSeries القيمة allow_dimensions_outside_sorting_key = 1 عليه تلقائيًا؛
أما بالنسبة إلى جدول الوسوم التجميعي الخارجي الذي يُنشأ يدويًا، فيجب عليك تعيين هذا الإعداد بنفسك.
الجداول الهدف الخارجية
TimeSeries لاستخدام جدول أُنشئ يدويًا:
id وtimestamp وvalue وأعمدة <tag_value_column> المدرجة في tags_to_columns) مع ما كان جدول TimeSeries سيُنشئه داخليًا في الحالة العادية (راجع جدول العينات وجدول الوسوم وجدول المقاييس للاطلاع على قيود الأنواع). ويُبلَّغ عن أي عدم تطابق في الأنواع عند تنفيذ CREATE.
يُحدَّد تعبير مولِّد المعرّف لهدف وسوم خارجي عند وقت INSERT بالترتيب التالي: الإعداد id_generator (إذا كان معيَّنًا)، ثم DEFAULT المعرَّف في عمود id للجدول الخارجي (إن وجد)، ثم المولِّد القياسي المشتق من نوع id. لذلك، يتجاوز هذا الإعداد أي قيمة DEFAULT معرَّفة في الجدول الخارجي — راجع عمود id للتفاصيل.
تعديل الإعدادات
CREATE:
id_generatorfilter_by_min_time_and_max_time
id_generator بعد وجود بيانات بالفعل في جدول Tags قد يؤدي إلى إنشاء معرّفات مختلفة لنفس تركيبة metric+tag — إذ تحتفظ الصفوف القديمة بمعرّفاتها القديمة، بينما تستخدم الصفوف الجديدة المولِّد الجديد.
ولا يمكن تغيير الإعدادات الأخرى باستخدام ALTER ... MODIFY SETTING لأنها تكون مدمجة في مخطط الجداول الداخلية عند CREATE.
الإعدادات
TimeSeries:
الدوال
TimeSeries كوسيطة: