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

> توثيق نوع البيانات Array في ClickHouse

# Array(T)

مصفوفة من عناصر من النوع `T`، ويبدأ فهرسها من 1. ويمكن أن يكون `T` أي نوع بيانات، بما في ذلك المصفوفة.

<div id="creating-an-array">
  ## إنشاء Array
</div>

يمكنك استخدام دالة لإنشاء Array:

```sql theme={null}
array(T)
```

يمكنك أيضًا استخدام `[]`.

```sql theme={null}
[]
```

مثال على إنشاء مصفوفة:

```sql theme={null}
SELECT array(1, 2) AS x, toTypeName(x)
```

```text theme={null}
┌─x─────┬─toTypeName(array(1, 2))─┐
│ [1,2] │ Array(UInt8)            │
└───────┴─────────────────────────┘
```

```sql theme={null}
SELECT [1, 2] AS x, toTypeName(x)
```

```text theme={null}
┌─x─────┬─toTypeName([1, 2])─┐
│ [1,2] │ Array(UInt8)       │
└───────┴────────────────────┘
```

<div id="working-with-data-types">
  ## العمل مع أنواع البيانات
</div>

عند إنشاء مصفوفة مباشرةً، يحدّد ClickHouse تلقائيًا نوع الوسائط على أنه أضيق نوع بيانات يمكنه تخزين جميع الوسائط المُدرجة. وإذا وُجدت أي قيم [Nullable](/ar/reference/data-types/nullable) أو قيم [NULL](/ar/reference/settings/formats#input_format_null_as_default) حرفية، فإن نوع عنصر المصفوفة يصبح أيضًا [Nullable](/ar/reference/data-types/nullable).

إذا لم يتمكن ClickHouse من تحديد نوع البيانات، فإنه يُنشئ استثناءً. ويحدث هذا، على سبيل المثال، عند محاولة إنشاء مصفوفة تضم سلاسل نصية وأرقامًا في الوقت نفسه (`SELECT array(1, 'a')`).

أمثلة على الاكتشاف التلقائي لأنواع البيانات:

```sql theme={null}
SELECT array(1, 2, NULL) AS x, toTypeName(x)
```

```text theme={null}
┌─x──────────┬─toTypeName(array(1, 2, NULL))─┐
│ [1,2,NULL] │ Array(Nullable(UInt8))        │
└────────────┴───────────────────────────────┘
```

إذا حاولت إنشاء مصفوفة من أنواع بيانات غير متوافقة، فسيُصدر ClickHouse استثناءً:

```sql theme={null}
SELECT array(1, 'a')
```

```text theme={null}
Received exception from server (version 1.1.54388):
Code: 386. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: There is no supertype for types UInt8, String because some of them are String/FixedString and some of them are not.
```

<div id="array-size">
  ## حجم المصفوفة
</div>

يمكن معرفة حجم المصفوفة باستخدام العمود الفرعي `size0` من دون قراءة العمود بالكامل. وبالنسبة إلى المصفوفات متعددة الأبعاد، يمكنك استخدام `sizeN-1`، حيث تمثل `N` البُعد المطلوب.

**مثال**

```sql title="Query" theme={null}
CREATE TABLE t_arr (`arr` Array(Array(Array(UInt32)))) ENGINE = MergeTree ORDER BY tuple();

INSERT INTO t_arr VALUES ([[[12, 13, 0, 1],[12]]]);

SELECT arr.size0, arr.size1, arr.size2 FROM t_arr;
```

```text title="Response" theme={null}
┌─arr.size0─┬─arr.size1─┬─arr.size2─┐
│         1 │ [2]       │ [[4,1]]   │
└───────────┴───────────┴───────────┘
```

<div id="reading-nested-subcolumns-from-array">
  ## قراءة الأعمدة الفرعية المتداخلة من Array
</div>

إذا كان النوع المتداخل `T` داخل `Array` يحتوي على أعمدة فرعية (على سبيل المثال، إذا كان [Tuple مُسمّى](/ar/reference/data-types/tuple))، فيمكنك قراءة أعمدته الفرعية من نوع `Array(T)` باستخدام أسماء الأعمدة الفرعية نفسها. ويكون نوع العمود الفرعي هو `Array` من نوع العمود الفرعي الأصلي.

**مثال**

```sql theme={null}
CREATE TABLE t_arr (arr Array(Tuple(field1 UInt32, field2 String))) ENGINE = MergeTree ORDER BY tuple();
INSERT INTO t_arr VALUES ([(1, 'Hello'), (2, 'World')]), ([(3, 'This'), (4, 'is'), (5, 'subcolumn')]);
SELECT arr.field1, toTypeName(arr.field1), arr.field2, toTypeName(arr.field2) from t_arr;
```

```test theme={null}
┌─arr.field1─┬─toTypeName(arr.field1)─┬─arr.field2────────────────┬─toTypeName(arr.field2)─┐
│ [1,2]      │ Array(UInt32)          │ ['Hello','World']         │ Array(String)          │
│ [3,4,5]    │ Array(UInt32)          │ ['This','is','subcolumn'] │ Array(String)          │
└────────────┴────────────────────────┴───────────────────────────┴────────────────────────┘
```
