> ## 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.

> توثيق لنوع البيانات QBit في ClickHouse، والذي يتيح التكميم الدقيق للبحث المتجهي التقريبي

# نوع البيانات QBit

يعيد نوع البيانات `QBit` تنظيم تخزين المتجهات لتسريع عمليات البحث التقريبي. فبدلاً من تخزين عناصر كل متجه معًا، يجمع مواقع البت نفسها عبر جميع المتجهات.
يتيح ذلك تخزين المتجهات بالدقة الكاملة مع تمكينك من اختيار مستوى التكميم الدقيق وقت البحث: اقرأ عددًا أقل من البتات لتقليل I/O وتسريع العمليات الحسابية، أو عددًا أكبر من البتات للحصول على دقة أعلى. وهكذا تستفيد من مزايا السرعة الناتجة عن تقليل نقل البيانات والحسابات بفضل التكميم، مع بقاء جميع البيانات الأصلية متاحة عند الحاجة.

للتصريح بعمود من النوع `QBit`، استخدم الصياغة التالية:

```sql theme={null}
column_name QBit(element_type, dimension)
```

* `element_type` – نوع كل عنصر من عناصر المتجه. الأنواع المسموح بها هي `BFloat16` و`Float32` و`Float64`
* `dimension` – بُعد كل متجه

<div id="creating-qbit">
  ## إنشاء QBit
</div>

باستخدام النوع `QBit` في تعريف عمود الجدول:

```sql theme={null}
CREATE TABLE test (id UInt32, vec QBit(Float32, 8)) ENGINE = Memory;
INSERT INTO test VALUES (1, [1, 2, 3, 4, 5, 6, 7, 8]), (2, [9, 10, 11, 12, 13, 14, 15, 16]);
SELECT vec FROM test ORDER BY id;
```

```text theme={null}
┌─vec──────────────────────┐
│ [1,2,3,4,5,6,7,8]        │
│ [9,10,11,12,13,14,15,16] │
└──────────────────────────┘
```

<div id="converting-arrays-to-qbit">
  ## تحويل المصفوفات إلى `QBit`
</div>

تُحوَّل المصفوفات إلى `QBit` عندما يتطابق طول المصفوفة مع بُعد `QBit`. ولا يلزم أن يتطابق نوع عنصر المصفوفة مع نوع عنصر `QBit`. ويُحوَّل إليه تلقائيًا أي نوع عناصر رقمي. يتيح لك ذلك نقل عمود تضمينات موجود مباشرةً إلى عمود `QBit`:

```sql theme={null}
CREATE TABLE embeddings (id UInt32, embedding Array(Float32)) ENGINE = Memory;
INSERT INTO embeddings VALUES (1, [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]), (2, [0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1]);

CREATE TABLE vectors (id UInt32, vec QBit(Float32, 8)) ENGINE = Memory;
INSERT INTO vectors SELECT id, embedding FROM embeddings;

SELECT * FROM vectors ORDER BY id;
```

```text theme={null}
┌─id─┬─vec───────────────────────────────┐
│  1 │ [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8] │
│  2 │ [0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1] │
└────┴───────────────────────────────────┘
```

يمكن أيضًا إجراء التحويل بشكل صريح باستخدام `CAST`، على سبيل المثال `CAST(embedding AS QBit(Float32, 8))`.

<div id="qbit-subcolumns">
  ## الأعمدة الفرعية لـ QBit
</div>

يوفّر `QBit` نمط وصول عبر الأعمدة الفرعية يتيح لك الوصول إلى طبقات البِت الفردية في المتجهات المخزّنة. ويمكن الوصول إلى كل موضع بِت باستخدام الصيغة `.N`، حيث إن `N` هو موضع البِت:

```sql theme={null}
CREATE TABLE test (id UInt32, vec QBit(Float32, 8)) ENGINE = Memory;
INSERT INTO test VALUES (1, [0, 0, 0, 0, 0, 0, 0, 0]);
INSERT INTO test VALUES (1, [-0, -0, -0, -0, -0, -0, -0, -0]);
SELECT bin(vec.1) FROM test;
```

```text theme={null}
┌─bin(tupleElement(vec, 1))─┐
│ 00000000                  │
│ 11111111                  │
└───────────────────────────┘
```

يعتمد عدد الأعمدة الفرعية المتاحة على نوع العنصر:

* `BFloat16`: 16 عمودًا فرعيًا (1-16)
* `Float32`: 32 عمودًا فرعيًا (1-32)
* `Float64`: 64 عمودًا فرعيًا (1-64)

<div id="vector-search-functions">
  ## دوال البحث المتجهي
</div>

هذه هي دوال المسافة المستخدمة في البحث عن التشابه المتجهي والتي تستخدم نوع البيانات `QBit`:

* [`L2DistanceTransposed`](/ar/reference/functions/regular-functions/distance-functions#L2DistanceTransposed)
* [`cosineDistanceTransposed`](/ar/reference/functions/regular-functions/distance-functions#cosineDistanceTransposed)
