AggregatingMergeTree في التجميع التدريجي للبيانات، بما في ذلك العروض المُجسَّدة المُجمَّعة.
يمكنك الاطّلاع على مثال لكيفية استخدام AggregatingMergeTree والدوال التجميعية في الفيديو أدناه:
AggregatingMergeTree مناسبًا إذا كان يخفّض عدد الصفوف بعدة مراتب.
إنشاء جدول
AggregatingMergeTree، تكون البنود نفسها مطلوبة كما عند إنشاء جدول MergeTree.
SELECT and INSERT
-State.
عند تحديد البيانات من جدول AggregatingMergeTree، استخدم عبارة GROUP BY ونفس الدوال التجميعية المستخدمة عند إدراج البيانات، لكن باستخدام اللاحقة -Merge.
في نتائج استعلام SELECT، تكون للقيم من النوع AggregateFunction تمثيلات ثنائية خاصة بالتنفيذ في جميع صيغ الإخراج في ClickHouse. على سبيل المثال، إذا فرّغت البيانات إلى صيغة TabSeparated باستخدام استعلام SELECT، فيمكن بعد ذلك إعادة تحميل هذا التفريغ باستخدام استعلام INSERT.
مثال على عرض مادي مجمَّع
test. أنشئها إن لم تكن موجودة بالفعل باستخدام الأمر أدناه:
test.visits الذي يحتوي على البيانات الخام:
AggregatingMergeTree يخزّن AggregationFunctions لتتبع إجمالي عدد الزيارات وعدد المستخدمين الفريدين.
أنشئ عرضاً مُجسَّداً من نوع AggregatingMergeTree يراقب جدول test.visits، ويستخدم النوع AggregateFunction:
test.agg_visits من test.visits:
test.visits:
test.visits وtest.agg_visits.
للحصول على البيانات المجمَّعة، نفِّذ استعلامًا مثل SELECT ... GROUP BY ... من الـ materialized view test.visits_mv:
test.visits، لكن هذه المرة استخدم طابعاً زمنياً مختلفاً لأحد السجلَّين:
SELECT مرةً أخرى، وسيُعيد الناتج الآتي:
GROUP BY
الخاصة بتعريف الـ materialized view لتفادي حدوث خطأ. غير أنه يمكنك الاستفادة من الدالة initializeAggregation
مع الإعداد optimize_on_insert = 0 (وهو مُفعَّل افتراضيًا) لتحقيق ذلك. في هذه الحالة، لم يعد استخدام GROUP BY
ضروريًا:
عند استخدام
initializeAggregation، تُنشأ حالة تجميع لكل row على حدة من دون إجراء تجميع.
وينتج عن كل row مصدر row واحدة في العرض المادي، بينما يحدث التجميع الفعلي لاحقًا عندما يدمج
AggregatingMergeTree الأجزاء. ولا يصحّ ذلك إلا إذا كانت optimize_on_insert = 0.تجميع عناصر Tuple
allow_tuple_element_aggregation، تُسطَّح أعمدة Tuple تكراريًا بحيث يشارك كل عنصر نهائي في التجميع بشكل مستقل. وهذا يعني أن الأعمدة الفرعية AggregateFunction أو SimpleAggregateFunction داخل Tuple تُجمَّع وفقًا لوظائفها الخاصة، تمامًا كما لو كانت أعمدة من المستوى الأعلى.
تُستبعَد الأعمدة الفرعية التابعة لـ Tuple في مفتاح الفرز من التجميع. أمّا الأعمدة الفرعية غير التجميعية فتُعامَل كأعمدة عادية (تُحتفَظ بقيمتها الأولى).
هذا الإعداد غير قابل للتغيير ويجب تحديده عند إنشاء الجدول.
total_visits باستخدام sum (100 + 200 = 300)، في حين يُجمَّع unique_users باستخدام max (max(5, 8) = 8).