-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] بعد جمع العناصر المناظرة معًا.
-Tuple
-Tuple بأي دالة تجميعية. تأخذ الدالة الناتجة وسيطًا واحدًا من النوع Tuple مقابل كل وسيط في الدالة التجميعية الأساسية، ويجب أن تحتوي جميع قيم Tuple على العدد نفسه من العناصر. ويُطبَّق التجميع بصورة مستقلة على موضع كل عنصر، بحيث يستقبل العنصر المناظر من كل Tuple، ويُرجع Tuple من النتائج.
إذا كان Tuple الأول في الإدخال يحتوي على أسماء صريحة للعناصر، فستُحفَظ هذه الأسماء في النتيجة.
الدوال التجميعية التي تتعامل مع قيم NULL بنفسها (anyRespectNulls وanyLastRespectNulls والمُعدِّل RESPECT NULLS) لا تدعم النوع Nullable(Tuple(...)) كوسيط؛ استخدم عناصر Nullable بدلًا من ذلك.
الصياغة
tuple1[, tuple2, ...]— أعمدة من النوعTuple، عمود واحد لكل وسيط من وسائط دالة التجميع الأساسية، على أن يكون لها جميعًا العدد نفسه من العناصر. ويجب أن يكون كل عنصر من نوع تدعمه دالة التجميع الأساسية في موضع ذلك الوسيط.
- قيمة
Tupleتحتوي على نتيجة تطبيق دالة التجميع على كل عنصر بشكل مستقل.
Tuple(aggFunction(element1), aggFunction(element2), ...).
مثال
الاستعلام:
GROUP BY:
Tuple وسيطًا واحدًا إلى الدالة الأساسية، وتُطابَق العناصر بحسب ترتيبها:
a1 و b1 مرتبطان عكسيًا، بينما a2 و b2 يتناسبان طرديًا، لذا تكون النتيجة (-1, 1).
يمكن دمج -Tuple مع مُركِّبات أخرى مثل -If. على سبيل المثال: sumTupleIf(tuple_column, cond).
-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) وما إلى ذلك.