> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> توثيق نوع البيانات AggregateFunction في ClickHouse، الذي يخزّن الحالات الوسيطة للدوال التجميعية

# نوع AggregateFunction

## الوصف

تتضمّن جميع [الدوال التجميعية](/ar/reference/functions/aggregate-functions/index) في ClickHouse
حالةً وسيطة خاصة بالتنفيذ يمكن إجراء تسلسل لها إلى
نوع البيانات `AggregateFunction` وتخزينها في جدول. وعادةً ما يتم ذلك
باستخدام [العرض المادي](/ar/reference/statements/create/view).

يوجد مُعدِّلان من [مُعدِّلات الدوال التجميعية](/ar/reference/functions/aggregate-functions/combinators)
يُستخدمان عادةً مع النوع `AggregateFunction`:

* مُعدِّل الدالة التجميعية [`-State`](/ar/reference/functions/aggregate-functions/combinators#-state)، الذي عند إلحاقه باسم
  دالة تجميعية، يُنتج الحالات الوسيطة من `AggregateFunction`.
* مُعدِّل الدالة التجميعية [`-Merge`](/ar/reference/functions/aggregate-functions/combinators#-merge)،
  الذي يُستخدم للحصول على النتيجة النهائية لعملية التجميع
  من الحالات الوسيطة.

## الصيغة

```sql theme={null}
AggregateFunction(aggregate_function_name, types_of_arguments...)
```

**المعلمات**

* `aggregate_function_name` - اسم دالة تجميعية. إذا كانت الدالة
  ذات معاملات، فيجب تحديد معاملاتها أيضًا.
* `types_of_arguments` - أنواع وسائط الدالة التجميعية.

على سبيل المثال:

```sql theme={null}
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`](/ar/reference/functions/aggregate-functions/combinators#-state).

على سبيل المثال، للإدراج في أعمدة من النوع `AggregateFunction(uniq, UInt64)` و
`AggregateFunction(quantiles(0.5, 0.9), UInt64)`، ستستخدم
الدوال التجميعية التالية مع المُعدِّلات.

```sql theme={null}
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` أعلاه؛ وتُجمَّع جميع عناصر المصفوفة لتكوين الحالة.

في الوضعين `value` و`array`، يُقرأ العمود كما لو كان من نوع القيم (`T` أو `Tuple(T1, T2)` أو `Array` منها)،
بالتمثيل الذي يستخدمه تنسيق الإدخال لذلك النوع. ويعمل هذا بالطريقة نفسها في كل تنسيقات الإدخال، من `CSV` و`JSONEachRow` إلى `RowBinary` و`Parquet`.

### اختيار البيانات

عند اختيار البيانات من جدول `AggregatingMergeTree`، استخدم عبارة `GROUP BY`
ونفس الدوال التجميعية التي استخدمتها عند إدخال البيانات، ولكن استخدم
المُعدِّل [`-Merge`](/ar/reference/functions/aggregate-functions/combinators#-merge).

تأخذ دالة تجميعية المُلحَق بها المُعدِّل `-Merge` مجموعةً من
حالات التجميع، وتدمجها، ثم تُرجع نتيجة تجميع البيانات بالكامل.

على سبيل المثال، يُرجع الاستعلامان التاليان النتيجة نفسها:

```sql theme={null}
SELECT uniq(UserID) FROM table

SELECT uniqMerge(state) FROM (SELECT uniqState(UserID) AS state FROM table GROUP BY RegionID)
```

## مثال على الاستخدام

راجع وصف محرك [AggregatingMergeTree](/ar/reference/engines/table-engines/mergetree-family/aggregatingmergetree).

## محتوى مرتبط

* مدونة: [استخدام مُعدِّلات التجميع في ClickHouse للمصفوفات والخرائط والحالات](https://clickhouse.com/blog/aggregate-functions-combinators-in-clickhouse-for-arrays-maps-and-states)
* المُعدِّل [MergeState](/ar/reference/functions/aggregate-functions/combinators#-mergestate).
* المُعدِّل [State](/ar/reference/functions/aggregate-functions/combinators#-state).
