تتضمّن جميع الدوال التجميعية في ClickHouse
حالةً وسيطة خاصة بالتنفيذ يمكن إجراء تسلسل لها إلى
نوع البيانات AggregateFunction وتخزينها في جدول. وعادةً ما يتم ذلك
باستخدام العرض المادي.
يوجد مُعدِّلان من مُعدِّلات الدوال التجميعية
يُستخدمان عادةً مع النوع AggregateFunction:
- مُعدِّل الدالة التجميعية
-State، الذي عند إلحاقه باسم
دالة تجميعية، يُنتج الحالات الوسيطة من AggregateFunction.
- مُعدِّل الدالة التجميعية
-Merge،
الذي يُستخدم للحصول على النتيجة النهائية لعملية التجميع
من الحالات الوسيطة.
AggregateFunction(aggregate_function_name, types_of_arguments...)
المعلمات
aggregate_function_name - اسم دالة تجميعية. إذا كانت الدالة
ذات معاملات، فيجب تحديد معاملاتها أيضًا.
types_of_arguments - أنواع وسائط الدالة التجميعية.
على سبيل المثال:
CREATE TABLE t
(
column1 AggregateFunction(uniq, UInt64),
column2 AggregateFunction(anyIf, String, UInt8),
column3 AggregateFunction(quantiles(0.5, 0.9), UInt64)
) ENGINE = ...
لإدراج البيانات في جدول يحتوي على أعمدة من النوع AggregateFunction، يمكنك
استخدام INSERT SELECT مع الدوال التجميعية ومُعدِّل
الدوال التجميعية -State.
على سبيل المثال، للإدراج في أعمدة من النوع AggregateFunction(uniq, UInt64) و
AggregateFunction(quantiles(0.5, 0.9), UInt64)، ستستخدم
الدوال التجميعية التالية مع المُعدِّلات.
uniqState(UserID)
quantilesState(0.5, 0.9)(SendTiming)
على عكس الدالتين uniq وquantiles، فإن uniqState وquantilesState
(مع إلحاق المُعدِّل -State) تُرجعان الحالة بدلًا من القيمة النهائية.
وبعبارة أخرى، تُرجعان قيمة من النوع AggregateFunction.
في نتائج استعلام SELECT، يكون للقيم من النوع AggregateFunction
تمثيلات ثنائية خاصة بالتنفيذ في جميع تنسيقات الإخراج في ClickHouse.
يوجد إعداد خاص على مستوى الجلسة باسم aggregate_function_input_format يتيح إنشاء الحالة من قيم الإدخال.
وهو يدعم التنسيقات التالية:
state - سلسلة ثنائية تحتوي على الحالة المُسلسلة (وهو التنسيق الافتراضي).
إذا فرّغت البيانات، على سبيل المثال، إلى تنسيق TabSeparated باستخدام استعلام SELECT،
فيمكن تحميل هذا التفريغ مرة أخرى باستخدام استعلام INSERT.
value - سيتوقع التنسيق قيمة واحدة لوسيطة الدالة التجميعية، أو في حال وجود عدة وسيطات، Tuple منها؛ وسيُفك تسلسلها لتكوين الحالة المناسبة
array - سيتوقع التنسيق Array من القيم، كما هو موضح في خيار value أعلاه؛ وستُجمَّع جميع عناصر المصفوفة لتكوين الحالة
عند اختيار البيانات من جدول AggregatingMergeTree، استخدم عبارة GROUP BY
ونفس دوال التجميع التي استخدمتها عند إدخال البيانات، ولكن استخدم
المُعدِّل -Merge.
تأخذ دالة التجميع المُلحَق بها المُعدِّل -Merge مجموعةً من
حالات التجميع، وتدمجها، ثم تُرجع نتيجة تجميع البيانات بالكامل.
على سبيل المثال، يُرجع الاستعلامان التاليان النتيجة نفسها:
SELECT uniq(UserID) FROM table
SELECT uniqMerge(state) FROM (SELECT uniqState(UserID) AS state FROM table GROUP BY RegionID)
راجع وصف محرك AggregatingMergeTree.
آخر تعديل في ٢٥ يونيو ٢٠٢٦