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

> وثائق CapnProto

# CapnProto

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            غير مدعوم في ClickHouse Cloud
        </div>;
};

| الإدخال | الإخراج | الاسم المستعار |
| ------- | ------- | -------------- |
| ✔       | ✔       |                |

<div id="description">
  ## الوصف
</div>

تنسيق `CapnProto` هو تنسيق رسائل ثنائي يشبه تنسيق [`Protocol Buffers`](https://developers.google.com/protocol-buffers/) و[Thrift](https://en.wikipedia.org/wiki/Apache_Thrift)، لكنه لا يشبه [JSON](/ar/reference/formats/JSON/JSON) أو [MessagePack](https://msgpack.org/).
رسائل CapnProto محددة الأنواع بشكل صارم وليست ذاتية الوصف، ما يعني أنها تحتاج إلى وصف خارجي للمخطط. ويُطبَّق المخطط آنيًا ويُخزَّن مؤقتًا لكل استعلام.

راجع أيضًا [Format Schema](/ar/reference/formats/index#formatschema).

<div id="data_types-matching-capnproto">
  ## مطابقة أنواع البيانات
</div>

يوضح الجدول أدناه أنواع البيانات المدعومة وكيف تقابل [أنواع البيانات](/ar/reference/data-types/index) في ClickHouse ضمن استعلامات `INSERT` و`SELECT`.

| نوع بيانات CapnProto (`INSERT`)                      | نوع بيانات ClickHouse                                                                                                                      | نوع بيانات CapnProto (`SELECT`)                      |
| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------- |
| `UINT8`, `BOOL`                                      | [UInt8](/ar/reference/data-types/int-uint)                                                                                                 | `UINT8`                                              |
| `INT8`                                               | [Int8](/ar/reference/data-types/int-uint)                                                                                                  | `INT8`                                               |
| `UINT16`                                             | [UInt16](/ar/reference/data-types/int-uint), [Date](/ar/reference/data-types/date)                                                         | `UINT16`                                             |
| `INT16`                                              | [Int16](/ar/reference/data-types/int-uint)                                                                                                 | `INT16`                                              |
| `UINT32`                                             | [UInt32](/ar/reference/data-types/int-uint), [DateTime](/ar/reference/data-types/datetime)                                                 | `UINT32`                                             |
| `INT32`                                              | [Int32](/ar/reference/data-types/int-uint), [Decimal32](/ar/reference/data-types/decimal)                                                  | `INT32`                                              |
| `UINT64`                                             | [UInt64](/ar/reference/data-types/int-uint)                                                                                                | `UINT64`                                             |
| `INT64`                                              | [Int64](/ar/reference/data-types/int-uint), [DateTime64](/ar/reference/data-types/datetime), [Decimal64](/ar/reference/data-types/decimal) | `INT64`                                              |
| `FLOAT32`                                            | [Float32](/ar/reference/data-types/float)                                                                                                  | `FLOAT32`                                            |
| `FLOAT64`                                            | [Float64](/ar/reference/data-types/float)                                                                                                  | `FLOAT64`                                            |
| `TEXT, DATA`                                         | [String](/ar/reference/data-types/string), [FixedString](/ar/reference/data-types/fixedstring)                                             | `TEXT, DATA`                                         |
| `union(T, Void), union(Void, T)`                     | [Nullable(T)](/ar/reference/data-types/date)                                                                                               | `union(T, Void), union(Void, T)`                     |
| `ENUM`                                               | [Enum(8/16)](/ar/reference/data-types/enum)                                                                                                | `ENUM`                                               |
| `LIST`                                               | [Array](/ar/reference/data-types/array)                                                                                                    | `LIST`                                               |
| `STRUCT`                                             | [Tuple](/ar/reference/data-types/tuple)                                                                                                    | `STRUCT`                                             |
| `UINT32`                                             | [IPv4](/ar/reference/data-types/ipv4)                                                                                                      | `UINT32`                                             |
| `DATA`                                               | [IPv6](/ar/reference/data-types/ipv6)                                                                                                      | `DATA`                                               |
| `DATA`                                               | [Int128/UInt128/Int256/UInt256](/ar/reference/data-types/int-uint)                                                                         | `DATA`                                               |
| `DATA`                                               | [Decimal128/Decimal256](/ar/reference/data-types/decimal)                                                                                  | `DATA`                                               |
| `STRUCT(entries LIST(STRUCT(key Key, value Value)))` | [Map](/ar/reference/data-types/map)                                                                                                        | `STRUCT(entries LIST(STRUCT(key Key, value Value)))` |

* يمكن تحويل الأنواع الصحيحة فيما بينها أثناء الإدخال والإخراج.
* للعمل مع `Enum` بتنسيق CapnProto، استخدم الإعداد [format\_capn\_proto\_enum\_comparising\_mode](/ar/reference/settings/formats#format_capn_proto_enum_comparising_mode).
* يمكن أن تكون `Array` متداخلة، ويمكن أن تتضمن قيمة من النوع `Nullable` كوسيطة. كما يمكن أيضًا أن تكون الأنواع `Tuple` و`Map` متداخلة.

<div id="example-usage">
  ## مثال للاستخدام
</div>

<div id="inserting-and-selecting-data-capnproto">
  ### إدراج البيانات والاستعلام عنها
</div>

يمكنك إدراج بيانات CapnProto من ملف في جدول ClickHouse باستخدام الأمر التالي:

```bash theme={null}
$ cat capnproto_messages.bin | clickhouse-client --query "INSERT INTO test.hits SETTINGS format_schema = 'schema:Message' FORMAT CapnProto"
```

حيث يكون `schema.capnp` على النحو التالي:

```capnp theme={null}
struct Message {
  SearchPhrase @0 :Text;
  c @1 :Uint64;
}
```

يمكنك تحديد بيانات من جدول ClickHouse وحفظها في ملف بتنسيق `CapnProto` باستخدام الأمر التالي:

```bash theme={null}
$ clickhouse-client --query = "SELECT * FROM test.hits FORMAT CapnProto SETTINGS format_schema = 'schema:Message'"
```

<div id="using-autogenerated-capn-proto-schema">
  ### استخدام مخطط مُنشأ تلقائيًا
</div>

إذا لم يكن لديك مخطط `CapnProto` خارجي لبياناتك، فلا يزال بإمكانك تصدير البيانات أو استيرادها بتنسيق `CapnProto` باستخدام مخطط مُنشأ تلقائيًا.

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

```sql theme={null}
SELECT * FROM test.hits 
FORMAT CapnProto 
SETTINGS format_capn_proto_use_autogenerated_schema=1
```

في هذه الحالة، سيُنشئ ClickHouse مخطط CapnProto تلقائيًا وفقًا لبنية الجدول باستخدام الدالة [structureToCapnProtoSchema](/ar/reference/functions/regular-functions/other-functions#structureToCapnProtoSchema)، وسيستخدم هذا المخطط لتسلسل البيانات بتنسيق CapnProto.

يمكنك أيضًا قراءة ملف CapnProto باستخدام مخطط مُنشأ تلقائيًا (في هذه الحالة، يجب إنشاء الملف باستخدام المخطط نفسه):

```bash theme={null}
$ cat hits.bin | clickhouse-client --query "INSERT INTO test.hits SETTINGS format_capn_proto_use_autogenerated_schema=1 FORMAT CapnProto"
```

<div id="format-settings">
  ## إعدادات التنسيق
</div>

يكون الإعداد [`format_capn_proto_use_autogenerated_schema`](/ar/reference/settings/formats#format_capn_proto_use_autogenerated_schema) مفعّلًا افتراضيًا، ويُطبَّق إذا لم يتم تعيين [`format_schema`](/ar/reference/formats/index#formatschema).

يمكنك أيضًا حفظ المخطط المُنشأ تلقائيًا في ملف أثناء عمليات الإدخال/الإخراج باستخدام الإعداد [`output_format_schema`](/ar/reference/settings/formats#output_format_schema).

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

```sql theme={null}
SELECT * FROM test.hits 
FORMAT CapnProto 
SETTINGS 
    format_capn_proto_use_autogenerated_schema=1,
    output_format_schema='path/to/schema/schema.capnp'
```

في هذه الحالة، سيُحفَظ مخطط `CapnProto` المُنشأ تلقائيًا في الملف `path/to/schema/schema.capnp`.
