-If
sumIf(column, cond), countIf(cond), avgIf(x, cond), quantilesTimingIf(level1, level2)(x, cond), argMinIf(arg, val, cond) وما إلى ذلك.
باستخدام الدوال التجميعية الشرطية، يمكنك حساب القيم المجمعة لعدة شروط في الوقت نفسه، من دون استخدام الاستعلامات الفرعية وعمليات JOIN. على سبيل المثال، يمكن استخدام الدوال التجميعية الشرطية لتنفيذ ميزة مقارنة الشرائح.
-Array
sumArray(arr) - يجمع إجمالي جميع عناصر كل مصفوفات ‘arr’. في هذا المثال، كان يمكن كتابة ذلك بصورة أبسط: sum(arraySum(arr)).
مثال 2: uniqArray(arr) – يحسب عدد العناصر الفريدة في جميع مصفوفات ‘arr’. ويمكن تنفيذ ذلك بطريقة أسهل: uniq(arrayJoin(arr))، لكن لا يكون من الممكن دائمًا إضافة ‘arrayJoin’ إلى استعلام.
يمكن الجمع بين -If و -Array. ومع ذلك، يجب أن تأتي ‘Array’ أولًا ثم ‘If’. أمثلة: uniqArrayIf(arr, cond), quantilesTimingArrayIf(level1, level2)(arr, cond). وبسبب هذا الترتيب، لن تكون الوسيطة ‘cond’ مصفوفة.
-Map
-Map بأي aggregate function. ويؤدي ذلك إلى إنشاء aggregate function تستقبل Map type كـ argument، وتُجمِّع values الخاصة بكل key في الـ map كلًّا على حدة باستخدام aggregate function المحددة. وتكون النتيجة أيضًا من Map type.
مثال
-SimpleState
x— معلمات الدالة التجميعية.
SimpleAggregateFunction(...).
مثال
Query
Response
-State
uniq، فهذه هي hash table المستخدمة لحساب عدد القيم الفريدة). وهذا AggregateFunction(...) يمكن استخدامه لمزيد من المعالجة أو تخزينه في جدول لإكمال التجميع لاحقًا.
يرجى ملاحظة أن -MapState ليس ثابتًا للبيانات نفسها، لأن ترتيب البيانات في الحالة الوسيطة قد يتغير، رغم أن ذلك لا يؤثر في إدخال هذه البيانات.
- محرك الجدول AggregatingMergeTree.
- الدالة finalizeAggregation.
- الدالة runningAccumulate.
- combinator -Merge.
- combinator -MergeState.
-Merge
-MergeState
-ForEach
sumForEach للمصفوفات [1, 2] و[3, 4, 5] و[6, 7] النتيجة [10, 13, 5] بعد جمع العناصر المناظرة معًا.
-Distinct
sum(DISTINCT x) (أو sumDistinct(x))، وgroupArray(DISTINCT x) (أو groupArrayDistinct(x))، وcorrStable(DISTINCT x, y) (أو corrStableDistinct(x, y)) وهكذا.
-OrDefault
-OrDefault مع مُركِّبات أخرى.
الصيغة
x— معلمات دالة التجميع.
Query
Response
-OrDefault مع combinators أخرى. ويكون ذلك مفيدًا عندما لا تقبل aggregate function مدخلات فارغة.
Query
Response
-OrNull
-OrNull مع مُركِّبات أخرى.
البنية
x— وسيطات الدالة التجميعية.
- ناتج الدالة التجميعية بعد تحويله إلى نوع البيانات
Nullable. NULLإذا لم تكن هناك قيم لتجميعها.
Nullable(aggregate function return type).
مثال
أضف -orNull إلى نهاية اسم الدالة التجميعية.
Query
Response
-OrNull مع combinators أخرى. ويكون ذلك مفيدًا عندما لا تقبل الدالة التجميعية مُدخلًا فارغًا.
Query
Response
-Resample
start— قيمة بداية النطاق الزمني الكامل المطلوب لقيمresampling_key.stop— قيمة نهاية النطاق الزمني الكامل المطلوب لقيمresampling_key. لا يشمل النطاق الزمني الكامل القيمةstop[start, stop).step— الخطوة المستخدمة لتقسيم النطاق الزمني الكامل إلى نطاقات زمنية فرعية. تُنفَّذaggFunctionعلى كل نطاق زمني فرعي من هذه النطاقات بشكل مستقل.resampling_key— العمود الذي تُستخدم قيمه لتقسيم البيانات إلى نطاقات زمنية.aggFunction_params— معاملاتaggFunction.
- مصفوفة من نتائج
aggFunctionلكل نطاق زمني فرعي.
people الذي يحتوي على البيانات التالية:
[30,60) و[60,75). وبما أننا نستخدم الأعداد الصحيحة لتمثيل العمر، فإن الأعمار تقع ضمن المجالين [30, 59] و[60,74].
لتجميع الأسماء في مصفوفة، نستخدم الدالة التجميعية groupArray. وهي تأخذ وسيطًا واحدًا. في حالتنا، هذا هو العمود name. ويجب أن تستخدم الدالة groupArrayResample العمود age لتجميع الأسماء حسب العمر. ولتحديد المجالات المطلوبة، نمرّر الوسائط 30, 75, 30 إلى الدالة groupArrayResample.
John خارج العينة لأنه أصغر من الفئة العمرية المطلوبة. أمّا الأشخاص الآخرون فتوزيعهم يكون وفقًا للفترات العمرية المحددة.
والآن، لنحسب العدد الإجمالي للأشخاص ومتوسط أجورهم ضمن الفترات العمرية المحددة.
-ArgMin
sumArgMin(column, expr), countArgMin(expr), avgArgMin(x, expr) وما إلى ذلك.