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

# استخدام التنسيقات Native والثنائية في ClickHouse

> صفحة توضّح كيفية استخدام التنسيقات Native والثنائية في ClickHouse

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>;
};

يدعم ClickHouse عدة تنسيقات ثنائية، ما يوفّر أداءً أفضل وكفاءة أعلى في استهلاك المساحة. كما أن التنسيقات الثنائية آمنة أيضًا من حيث ترميز المحارف، لأن البيانات تُحفَظ في هيئة ثنائية.

سنستخدم جدول some\_data [table](/ar/assets/some_data.sql) وملف [data](/ar/assets/some_data.tsv) للتوضيح، ويمكنك إعادة تطبيق ذلك على مثيل ClickHouse لديك.

<div id="exporting-in-a-native-clickhouse-format">
  ## التصدير بتنسيق Native الخاص بـ ClickHouse
</div>

أكثر تنسيقات البيانات كفاءةً لتصدير البيانات واستيرادها بين عُقد ClickHouse هو تنسيق [Native](/ar/reference/formats/Native). ويُجرى التصدير باستخدام العبارة `INTO OUTFILE`:

```sql theme={null}
SELECT * FROM some_data
INTO OUTFILE 'data.clickhouse' FORMAT Native
```

سيؤدي هذا إلى إنشاء ملف [data.clickhouse](/ar/assets/data.clickhouse) بتنسيق Native.

<div id="importing-from-a-native-format">
  ### الاستيراد من تنسيق Native
</div>

لاستيراد البيانات، يمكن استخدام [file()](/ar/reference/functions/table-functions/file) مع الملفات الأصغر أو لأغراض الاستكشاف:

```sql theme={null}
DESCRIBE file('data.clickhouse', Native);
```

```response theme={null}
┌─name──┬─type───┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ path  │ String │              │                    │         │                  │                │
│ month │ Date   │              │                    │         │                  │                │
│ hits  │ UInt32 │              │                    │         │                  │                │
└───────┴────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
```

<Tip>
  عند استخدام الدالة `file()` مع ClickHouse Cloud، ستحتاج إلى تشغيل الأوامر في `clickhouse client` على الجهاز الموجود عليه الملف. ويمكنك أيضًا استخدام [`clickhouse-local`](/ar/concepts/features/tools-and-utilities/clickhouse-local) لاستكشاف الملفات محليًا.
</Tip>

في بيئة production، نستخدم `FROM INFILE` لاستيراد البيانات:

```sql theme={null}
INSERT INTO sometable
FROM INFILE 'data.clickhouse'
FORMAT Native
```

<div id="native-format-compression">
  ### ضغط تنسيق Native
</div>

يمكننا أيضًا تفعيل الضغط عند تصدير البيانات إلى تنسيق Native (وكذلك معظم التنسيقات الأخرى) باستخدام بند `COMPRESSION`:

```sql theme={null}
SELECT * FROM some_data
INTO OUTFILE 'data.clickhouse'
COMPRESSION 'lz4'
FORMAT Native
```

استخدمنا ضغط LZ4 للتصدير. وسنحتاج إلى تحديد ذلك عند استيراد البيانات:

```sql theme={null}
INSERT INTO sometable
FROM INFILE 'data.clickhouse'
COMPRESSION 'lz4'
FORMAT Native
```

<div id="exporting-to-rowbinary">
  ## التصدير إلى RowBinary
</div>

من بين التنسيقات الثنائية المدعومة أيضًا [RowBinary](/ar/reference/formats/RowBinary/RowBinary)، والذي يتيح استيراد البيانات وتصديرها في صورة صفوف ممثلة ثنائيًا:

```sql theme={null}
SELECT * FROM some_data
INTO OUTFILE 'data.binary' FORMAT RowBinary
```

سيؤدي ذلك إلى إنشاء ملف [data.binary](/ar/assets/data.binary) بتنسيق ثنائي للصفوف.

<div id="exploring-rowbinary-files">
  ### استكشاف ملفات RowBinary
</div>

لا يدعم هذا التنسيق استنتاج المخطط تلقائيًا، لذا يجب تحديد المخطط صراحةً للاستكشاف قبل التحميل:

```sql theme={null}
SELECT *
FROM file('data.binary', RowBinary, 'path String, month Date, hits UInt32')
LIMIT 5
```

```response theme={null}
┌─path───────────────────────────┬──────month─┬─hits─┐
│ Bangor_City_Forest             │ 2015-07-01 │   34 │
│ Alireza_Afzal                  │ 2017-02-01 │   24 │
│ Akhaura-Laksam-Chittagong_Line │ 2015-09-01 │   30 │
│ 1973_National_500              │ 2017-10-01 │   80 │
│ Attachment                     │ 2017-09-01 │ 1356 │
└────────────────────────────────┴────────────┴──────┘
```

يمكنك استخدام [RowBinaryWithNames](/ar/reference/formats/RowBinary/RowBinaryWithNames)، إذ يضيف أيضًا صف عنوان يتضمن قائمة بأسماء الأعمدة. كما يضيف [RowBinaryWithNamesAndTypes](/ar/reference/formats/RowBinary/RowBinaryWithNamesAndTypes) صف عنوان إضافيًا يتضمن أنواع الأعمدة.

<div id="importing-from-rowbinary-files">
  ### الاستيراد من ملفات RowBinary
</div>

لتحميل البيانات من ملف RowBinary، يمكن استخدام بند `FROM INFILE`:

```sql theme={null}
INSERT INTO sometable
FROM INFILE 'data.binary'
FORMAT RowBinary
```

<div id="importing-single-binary-value-using-rawblob">
  ## استيراد قيمة ثنائية واحدة باستخدام RawBLOB
</div>

لنفترض أننا نريد قراءة ملف ثنائي بالكامل وحفظه في حقل ضمن جدول.
وهذه هي الحالة التي يمكن فيها استخدام [تنسيق RawBLOB](/ar/reference/formats/RawBLOB). ولا يمكن استخدام هذا التنسيق مباشرةً إلا مع جدول ذي عمود واحد فقط:

```sql theme={null}
CREATE TABLE images(data String) ENGINE = Memory
```

لنحفظ ملف صورة في الجدول `images`:

```bash theme={null}
cat image.jpg | clickhouse-client -q "INSERT INTO images FORMAT RawBLOB"
```

يمكننا التحقق من طول حقل `data`، إذ سيكون مساويًا لحجم الملف الأصلي:

```sql theme={null}
SELECT length(data) FROM images
```

```response theme={null}
┌─length(data)─┐
│         6121 │
└──────────────┘
```

<div id="exporting-rawblob-data">
  ### تصدير بيانات RawBLOB
</div>

يمكن أيضًا استخدام هذا التنسيق لتصدير البيانات باستخدام عبارة `INTO OUTFILE`:

```sql theme={null}
SELECT * FROM images LIMIT 1
INTO OUTFILE 'out.jpg'
FORMAT RawBLOB
```

لاحظ أننا اضطررنا إلى استخدام `LIMIT 1`، لأن تصدير أكثر من قيمة واحدة سيؤدي إلى إنشاء ملف تالف.

<div id="messagepack">
  ## MessagePack
</div>

يدعم ClickHouse الاستيراد من [MessagePack](https://msgpack.org/) والتصدير إليه باستخدام [MsgPack](/ar/reference/formats/MsgPack). للتصدير بتنسيق MessagePack:

```sql theme={null}
SELECT *
FROM some_data
INTO OUTFILE 'data.msgpk'
FORMAT MsgPack
```

لاستيراد البيانات من [ملف بتنسيق MessagePack](/ar/assets/data.msgpk):

```sql theme={null}
INSERT INTO sometable
FROM INFILE 'data.msgpk'
FORMAT MsgPack
```

<div id="protocol-buffers">
  ## Protocol Buffers
</div>

للعمل مع [Protocol Buffers](/ar/reference/formats/Protobuf/Protobuf)، نحتاج أولًا إلى تعريف [ملف المخطط](/ar/assets/schema.proto):

```protobuf theme={null}
syntax = "proto3";

message MessageType {
  string path = 1;
  date month = 2;
  uint32 hits = 3;
};
```

يُضبط مسار ملف المخطط هذا (`schema.proto` في حالتنا) عبر خيار الإعداد `format_schema` الخاص بتنسيق [Protobuf](/ar/reference/formats/Protobuf/Protobuf):

```sql theme={null}
SELECT * FROM some_data
INTO OUTFILE 'proto.bin'
FORMAT Protobuf
SETTINGS format_schema = 'schema:MessageType'
```

يحفظ هذا البيانات في ملف [proto.bin](/ar/assets/proto.bin). ويدعم ClickHouse أيضًا استيراد بيانات Protobuf، بالإضافة إلى الرسائل المتداخلة. يُستحسن استخدام [ProtobufSingle](/ar/reference/formats/Protobuf/ProtobufSingle) للعمل مع رسالة Protocol Buffer واحدة (لن تُضمَّن محددات الطول في هذه الحالة).

<div id="capn-proto">
  ## Cap'n Proto
</div>

من تنسيقات التسلسل الثنائي الشائعة الأخرى التي يدعمها ClickHouse تنسيق [Cap'n Proto](https://capnproto.org/). وكما هو الحال مع تنسيق `Protobuf`، علينا تعريف ملف المخطط ([`schema.capnp`](/ar/assets/schema.capnp)) في مثالنا:

```response theme={null}
@0xec8ff1a10aa10dbe;

struct PathStats {
  path @0 :Text;
  month @1 :UInt32;
  hits @2 :UInt32;
}
```

يمكننا الآن الاستيراد والتصدير باستخدام تنسيق [CapnProto](/ar/reference/formats/CapnProto) والمخطط التالي:

```sql theme={null}
SELECT
    path,
    CAST(month, 'UInt32') AS month,
    hits
FROM some_data
INTO OUTFILE 'capnp.bin'
FORMAT CapnProto
SETTINGS format_schema = 'schema:PathStats'
```

لاحظ أننا اضطررنا إلى تحويل نوع العمود `Date` إلى `UInt32` من أجل [مطابقة الأنواع المقابلة](/ar/reference/formats/CapnProto#data_types-matching-capnproto).

<div id="other-formats">
  ## تنسيقات أخرى
</div>

يدعم ClickHouse العديد من التنسيقات، النصية والثنائية، لتلبية مختلف السيناريوهات والمنصات. اطّلع على المزيد من التنسيقات وطرق العمل معها في المقالات التالية:

* [تنسيقات CSV وTSV](/ar/guides/clickhouse/data-formats/csv-tsv)
* [Parquet](/ar/guides/clickhouse/data-formats/parquet)
* [تنسيقات JSON](/ar/guides/clickhouse/data-formats/json/intro)
* [Regex وTemplate](/ar/guides/clickhouse/data-formats/templates-regex)
* **تنسيقات Native والثنائية**
* [تنسيقات SQL](/ar/guides/clickhouse/data-formats/sql)

واطّلع أيضًا على [clickhouse-local](https://clickhouse.com/blog/extracting-converting-querying-local-files-with-sql-clickhouse-local) — وهي أداة محمولة متكاملة الميزات للعمل على الملفات المحلية/البعيدة دون تشغيل ClickHouse server.
