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

> تحسب الدالة `avg_over_time` على غرار PromQL على شبكة زمنية منتظمة.

# timeSeriesAvgToGrid

<h2 id="timeSeriesAvgToGrid">
  timeSeriesAvgToGrid
</h2>

أُضيف في: v26.9.0

دالة تجميعية تأخذ بيانات السلاسل الزمنية على هيئة أزواج من الطوابع الزمنية والقيم، وتحسب منها [avg\_over\_time على غرار PromQL](https://prometheus.io/docs/prometheus/latest/querying/functions/#aggregation_over_time) على شبكة زمنية منتظمة تُحدَّد بطابع زمني للبداية وطابع زمني للنهاية وخطوة. ولكل نقطة على الشبكة، تُحتسب العينات المستخدمة في حساب المتوسط ضمن النافذة الزمنية المحددة.

يمكن تمرير العينات بإحدى الصيغ الثلاث التالية:

* كوسيطتين `timestamp` و`value`، بحيث يحتوي كل صف على عينة واحدة؛
* كمصفوفتين من الطوابع الزمنية والقيم، بحيث يحتوي كل صف على سلسلة زمنية كاملة؛
* كمصفوفة واحدة من صفوف مرتبة `(timestamp, value)`، بحيث يحتوي كل صف على سلسلة زمنية كاملة.

إذا تشاركت عدة عينات الطابع الزمني نفسه، فلا تُستخدم إلا واحدة منها، وهي العينة ذات القيمة الأكبر. وتُقدَّم أي قيمة أخرى على القيمة NaN، لذا لا تُستخدم القيمة NaN إلا إذا كانت جميع العينات عند هذا الطابع الزمني NaN.

<Warning>
  هذه الدالة في مرحلة المعاينة الخاصة، ويمكن تفعيلها بضبط `enable_time_series_aggregate_functions=true`.
</Warning>

**الصيغة**

```sql theme={null}
timeSeriesAvgToGrid(start_timestamp, end_timestamp, grid_step, staleness)(timestamp, value)
timeSeriesAvgToGrid(start_timestamp, end_timestamp, grid_step, staleness)(samples)
```

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

* `start_timestamp` — يحدد بداية الشبكة الزمنية. ويمكن أن يكون أيضًا عددًا كسريًا، أو string تحتوي على رقم أو على نص يمثل تاريخًا ووقتًا. [`UInt32`](/ar/reference/data-types/int-uint) أو [`DateTime`](/ar/reference/data-types/datetime) أو [`DateTime64`](/ar/reference/data-types/datetime64) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`String`](/ar/reference/data-types/string)
* `end_timestamp` — يحدد نهاية الشبكة الزمنية. ويمكن أن يكون أيضًا عددًا كسريًا، أو string تحتوي على رقم أو على نص يمثل تاريخًا ووقتًا. [`UInt32`](/ar/reference/data-types/int-uint) أو [`DateTime`](/ar/reference/data-types/datetime) أو [`DateTime64`](/ar/reference/data-types/datetime64) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`String`](/ar/reference/data-types/string)
* `grid_step` — يحدد خطوة الشبكة الزمنية بالثواني. ويمكن أن يكون أيضًا عددًا كسريًا، أو string تحتوي على رقم أو على مدة مثل '15s' أو '1m'. [`UInt32`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`String`](/ar/reference/data-types/string)
* `staleness` — يحدد أقصى مدة تقادم بالثواني للعينات التي تؤخذ في الحسبان. ونافذة التقادم فاصل زمني مفتوح من اليسار ومغلق من اليمين. ويمكن أن يكون أيضًا عددًا كسريًا، أو string تحتوي على رقم أو على مدة مثل '15s' أو '1m'. [`UInt32`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`String`](/ar/reference/data-types/string)

**الوسيطات**

* `timestamp` — الطابع الزمني للعينة. يمكن أن يكون قيمًا فردية أو مصفوفات. [`UInt32`](/ar/reference/data-types/int-uint) أو [`DateTime`](/ar/reference/data-types/datetime) أو [`DateTime64`](/ar/reference/data-types/datetime64) أو [`Array(UInt32)`](/ar/reference/data-types/array) أو [`Array(DateTime)`](/ar/reference/data-types/array) أو [`Array(DateTime64)`](/ar/reference/data-types/array)
* `value` — قيمة السلسلة الزمنية المقابلة للطابع الزمني. يمكن أن تكون قيمًا فردية أو مصفوفات. [`Float*`](/ar/reference/data-types/float) أو [`Array(Float*)`](/ar/reference/data-types/array)
* `samples` — عينات السلسلة الزمنية، وتُمرَّر على هيئة مصفوفة من قيم Tuple بالصيغة `(timestamp, value)`، بحيث تكون أنواع عناصر Tuple هي أنواع الطابع الزمني والقيمة المذكورة أعلاه. وهي بديل عن تمرير الطوابع الزمنية والقيم في وسيطتين منفصلتين. [`Array(Tuple(T1, T2))`](/ar/reference/data-types/array)

**القيمة المعادة**

تُعيد متوسط القيم على الشبكة الزمنية المحددة. وتحتوي المصفوفة المُعادة على قيمة واحدة لكل نقطة في الشبكة الزمنية، وتكون هذه القيمة NULL إذا لم توجد أي عينات ضمن النافذة الخاصة بتلك النقطة. [`Array(Nullable(Float64))`](/ar/reference/data-types/array)

**أمثلة**

**الاستخدام الأساسي مع أزواج فردية من الطابع الزمني والقيمة**

```sql title=Query theme={null}
SET enable_time_series_aggregate_functions = 1;
WITH
    -- NOTE: the gap between 140 and 190 is to show how values are filled for ts = 150, 165, 180 according to window parameter
    [110, 120, 130, 140, 190, 200, 210, 220, 230]::Array(DateTime) AS timestamps,
    [1, 1, 3, 4, 5, 5, 8, 12, 13]::Array(Float32) AS values, -- array of values corresponding to timestamps above
    90 AS start_ts,       -- start of timestamp grid
    90 + 120 AS end_ts,   -- end of timestamp grid
    15 AS step_seconds,   -- step of timestamp grid
    45 AS window_seconds  -- "staleness" window
SELECT timeSeriesAvgToGrid(start_ts, end_ts, step_seconds, window_seconds)(timestamp, value)
FROM
(
    -- This subquery converts arrays of timestamps and values into rows of `timestamp`, `value`
    SELECT
        arrayJoin(arrayZip(timestamps, values)) AS ts_and_val,
        ts_and_val.1 AS timestamp,
        ts_and_val.2 AS value
);
```

```response title=Response theme={null}
┌─timeSeriesAvgToGrid(start_ts, end_ts, step_seconds, window_seconds)(timestamp, value)─┐
│ [NULL,NULL,1,1.6666666666666667,2.25,3.5,4,5,6]                                       │
└───────────────────────────────────────────────────────────────────────────────────────┘
```

**استخدام وسيطات من نوع المصفوفة**

```sql title=Query theme={null}
SET enable_time_series_aggregate_functions = 1;
WITH
    [110, 120, 130, 140, 190, 200, 210, 220, 230]::Array(DateTime) AS timestamps,
    [1, 1, 3, 4, 5, 5, 8, 12, 13]::Array(Float32) AS values,
    90 AS start_ts,
    90 + 120 AS end_ts,
    15 AS step_seconds,
    45 AS window_seconds
SELECT timeSeriesAvgToGrid(start_ts, end_ts, step_seconds, window_seconds)(timestamps, values);
```

```response title=Response theme={null}
┌─timeSeriesAvgToGrid(start_ts, end_ts, step_seconds, window_seconds)(timestamps, values)─┐
│ [NULL,NULL,1,1.6666666666666667,2.25,3.5,4,5,6]                                         │
└─────────────────────────────────────────────────────────────────────────────────────────┘
```
