مثال: سنستخدم مجموعة بيانات وهمية تتضمن عدد المشاهدات لكل ساعة لمجموعة من أسماء النطاقات. هدفنا
- نحتاج إلى البيانات مجمّعة حسب الشهر لكل اسم نطاق،
- ونحتاج أيضًا إلى البيانات مجمّعة حسب السنة لكل اسم نطاق.
- كتابة استعلامات تقرأ البيانات وتجمعها أثناء طلب SELECT
- تجهيز البيانات وقت الإدخال بتنسيق جديد
- تجهيز البيانات وقت الإدخال وفق تجميع محدد.
الجدول المصدر للعروض المادية
Null.
يمكنك إنشاء عرض مادي على جدول Null. لذا ستؤثر البيانات المكتوبة إلى الجدول في العرض، لكن البيانات الخام الأصلية ستظل تُهمَل.
الجدول المُجمَّع الشهري والعرض المادي
Target. وفي هذا المثال، سيكون analytics.monthly_aggregated_data، وسنخزّن فيه مجموع مرات المشاهدة حسب الشهر واسم النطاق.
الجدول السنوي المجمّع والعرض المادي
monthly_aggregated_data.
سنُنشئ أولًا جدول هدف جديدًا سيخزّن إجمالي المشاهدات المجمّعة سنويًا لكل اسم نطاق.
FROM الجدول monthly_aggregated_data، وهذا يعني أن تدفّق البيانات سيكون على النحو التالي:
- تصل البيانات إلى الجدول
hourly_data. - سيُمرِّر ClickHouse البيانات المستلمة إلى جدول العرض المادي الأول
monthly_aggregated_data، - أخيرًا، ستُمرَّر البيانات المستلمة في الخطوة 2 إلى
year_aggregated_data.
من المفاهيم الخاطئة الشائعة عند العمل مع العروض المادية أن البيانات تُقرأ من الجدول. لكن هذه ليست الطريقة التي تعمل بها
العروض المادية؛ فالبيانات التي تُمرَّر هي block الذي تم insert له، وليست النتيجة النهائية في جدولك.لنتخيّل في هذا المثال أن الـ engine المستخدم في monthly_aggregated_data هو CollapsingMergeTree. عندها لن تكون البيانات المُمرَّرة إلى الـ العرض المادي الثانية year_aggregated_data_mv هي النتيجة النهائية للجدول بعد collapsing، بل سيُمرَّر block البيانات بالحقول المعرّفة كما في SELECT ... GROUP BY.إذا كنت تستخدم CollapsingMergeTree أو ReplacingMergeTree أو حتى SummingMergeTree، وتخطط لإنشاء عرض مادي متسلسلة، فعليك فهم القيود الموضّحة هنا.بيانات تجريبية
SELECT على محتويات analytics.hourly_data، فسترى ما يلي لأن محرك الجدول هو Null، ولكن جرت معالجة البيانات.
النتائج
sumCountViews، فسترى التمثيل الثنائي (في بعض الطرفيات)، لأن القيمة لا تُخزَّن كرقم بل كنوع AggregateFunction.
وللحصول على النتيجة النهائية لعملية التجميع، ينبغي استخدام اللاحقة -Merge.
يمكنك رؤية المحارف الخاصة المخزَّنة في AggregateFunction باستخدام هذا الاستعلام:
Merge للحصول على قيمة sumCountViews:
AggregatingMergeTree عرّفنا AggregateFunction على أنها sum، لذا يمكننا استخدام sumMerge. وعندما نستخدم الدالة avg في AggregateFunction، فسنستخدم avgMerge، وهكذا.
monthly_aggregated_data، يمكننا الحصول على البيانات المجمّعة حسب الشهر لكل اسم نطاق:
دمج عدة جداول مصدر في جدول هدف واحد
UNION ALL.
أولًا، أنشئ جدولَي مصدر يمثلان مجموعات مختلفة من المقاييس:
Target باستخدام مجموعة المقاييس الموحَّدة:
Target نفسه. لا تحتاج إلى تضمين الأعمدة المفقودة صراحةً:
Target:
Target: